@@ -1203,6 +1203,128 @@ let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{
12031203 fi
12041204fi
12051205
1206+ # --- v0.11.1: per-agent temperatures. May-2026 community pattern (joelhooks
1207+ # + ppries gists, others): plan=0.1 (deterministic), build=0.3 (some
1208+ # creativity), review=0.1 (deterministic). Flags --planner-temp / --reviewer-
1209+ # temp / --coder-temp set agent.<name>.temperature; deep-merges with v0.10.0
1210+ # agent.review.model + v0.10.2 agent.plan.model + v0.10.5 agent.plan.tools.
1211+
1212+ # --- T56: --coder-temp writes agent.build.temperature ("build" is OpenCode's
1213+ # default agent name for code generation work)
1214+ if [ -x " $CONFIG " ]; then
1215+ T=" $TMP_ROOT /t56" ; mkdir -p " $T "
1216+ (cd " $T " && " $CONFIG " \
1217+ --tier private_local --provider ollama --model qwen3-coder:30b \
1218+ --coder-temp 0.3 > /dev/null 2>&1 ) || true
1219+ if [ -f " $T /opencode.json" ]; then
1220+ ok=" $( node -e "
1221+ const j=require('$T /opencode.json');
1222+ if(!j.agent||!j.agent.build||j.agent.build.temperature!==0.3){console.log('build-temp-wrong:'+JSON.stringify(j.agent&&j.agent.build));process.exit(1)}
1223+ console.log('ok');
1224+ " 2> /dev/null || echo ' failed' ) "
1225+ if [ " $ok " = " ok" ]; then
1226+ pass " --coder-temp 0.3 writes agent.build.temperature = 0.3"
1227+ else
1228+ fail " T56 — $ok "
1229+ fi
1230+ fi
1231+ fi
1232+
1233+ # --- T57: --reviewer-temp + --reviewer-* compose (model AND temperature both
1234+ # present on agent.review)
1235+ if [ -x " $CONFIG " ]; then
1236+ T=" $TMP_ROOT /t57" ; mkdir -p " $T "
1237+ (cd " $T " && " $CONFIG " \
1238+ --tier proprietary --provider anthropic --model claude-opus-4-7 \
1239+ --reviewer-tier hosted_oss --reviewer-provider cerebras --reviewer-model gpt-oss-120b \
1240+ --reviewer-temp 0.1 > /dev/null 2>&1 ) || true
1241+ if [ -f " $T /opencode.json" ]; then
1242+ ok=" $( node -e "
1243+ const j=require('$T /opencode.json');
1244+ if(j.agent.review.model!=='cerebras/gpt-oss-120b'){console.log('rev-model-wrong');process.exit(1)}
1245+ if(j.agent.review.temperature!==0.1){console.log('rev-temp-wrong:'+j.agent.review.temperature);process.exit(1)}
1246+ console.log('ok');
1247+ " 2> /dev/null || echo ' failed' ) "
1248+ if [ " $ok " = " ok" ]; then
1249+ pass " --reviewer-temp composes with --reviewer-* (agent.review has model + temperature)"
1250+ else
1251+ fail " T57 — $ok "
1252+ fi
1253+ fi
1254+ fi
1255+
1256+ # --- T58: --planner-temp + --planner-* + --sandbox-plan compose
1257+ # (agent.plan ends up with .model AND .temperature AND .tools)
1258+ if [ -x " $CONFIG " ]; then
1259+ T=" $TMP_ROOT /t58" ; mkdir -p " $T "
1260+ (cd " $T " && " $CONFIG " \
1261+ --tier proprietary --provider anthropic --model claude-opus-4-7 \
1262+ --planner-tier hosted_oss --planner-provider groq --planner-model gpt-oss-120b \
1263+ --planner-temp 0.1 \
1264+ --sandbox-plan > /dev/null 2>&1 ) || true
1265+ if [ -f " $T /opencode.json" ]; then
1266+ ok=" $( node -e "
1267+ const j=require('$T /opencode.json');
1268+ if(j.agent.plan.model!=='groq/gpt-oss-120b'){console.log('plan-model-wrong');process.exit(1)}
1269+ if(j.agent.plan.temperature!==0.1){console.log('plan-temp-wrong');process.exit(1)}
1270+ if(j.agent.plan.tools.write!==false){console.log('plan-tools-wrong');process.exit(1)}
1271+ console.log('ok');
1272+ " 2> /dev/null || echo ' failed' ) "
1273+ if [ " $ok " = " ok" ]; then
1274+ pass " Full plan agent: --planner-* + --planner-temp + --sandbox-plan all compose"
1275+ else
1276+ fail " T58 — $ok "
1277+ fi
1278+ fi
1279+ fi
1280+
1281+ # --- T59: all three temp flags + all per-agent flags + sandboxes compose
1282+ if [ -x " $CONFIG " ]; then
1283+ T=" $TMP_ROOT /t59" ; mkdir -p " $T "
1284+ (cd " $T " && " $CONFIG " \
1285+ --tier proprietary --provider anthropic --model claude-opus-4-7 \
1286+ --coder-temp 0.3 \
1287+ --reviewer-tier hosted_oss --reviewer-provider cerebras --reviewer-model gpt-oss-120b \
1288+ --reviewer-temp 0.1 \
1289+ --planner-tier hosted_oss --planner-provider groq --planner-model gpt-oss-120b \
1290+ --planner-temp 0.1 > /dev/null 2>&1 ) || true
1291+ if [ -f " $T /opencode.json" ]; then
1292+ ok=" $( node -e "
1293+ const j=require('$T /opencode.json');
1294+ if(j.agent.build.temperature!==0.3){console.log('build-temp');process.exit(1)}
1295+ if(j.agent.review.temperature!==0.1){console.log('rev-temp');process.exit(1)}
1296+ if(j.agent.plan.temperature!==0.1){console.log('plan-temp');process.exit(1)}
1297+ console.log('ok');
1298+ " 2> /dev/null || echo ' failed' ) "
1299+ if [ " $ok " = " ok" ]; then
1300+ pass " all three --*-temp flags emit correct agent.<name>.temperature values"
1301+ else
1302+ fail " T59 — $ok "
1303+ fi
1304+ fi
1305+ fi
1306+
1307+ # --- T60: no temp flags → no temperature fields written (opt-in regression)
1308+ if [ -x " $CONFIG " ]; then
1309+ T=" $TMP_ROOT /t60" ; mkdir -p " $T "
1310+ (cd " $T " && " $CONFIG " --tier private_local --provider ollama --model qwen3-coder:30b > /dev/null 2>&1 ) || true
1311+ if [ -f " $T /opencode.json" ]; then
1312+ ok=" $( node -e "
1313+ const j=require('$T /opencode.json');
1314+ const agent=j.agent||{};
1315+ for(const k of ['build','plan','review']){
1316+ if(agent[k]&&'temperature' in agent[k]){console.log('unexpected-temp:'+k);process.exit(1)}
1317+ }
1318+ console.log('ok');
1319+ " 2> /dev/null || echo ' failed' ) "
1320+ if [ " $ok " = " ok" ]; then
1321+ pass " no --*-temp flags → no temperature fields (opt-in regression guard)"
1322+ else
1323+ fail " T60 — $ok "
1324+ fi
1325+ fi
1326+ fi
1327+
12061328echo " "
12071329echo " === Results: $PASS passed, $FAIL failed ==="
12081330[ " $FAIL " -eq 0 ] || exit 1
0 commit comments