diff --git a/plugins/goal-mode/evaluator.js b/plugins/goal-mode/evaluator.js index 91f4a17..1f750ce 100644 --- a/plugins/goal-mode/evaluator.js +++ b/plugins/goal-mode/evaluator.js @@ -35,10 +35,16 @@ export function parseEvaluatorResponse(text) { return { ok: true, met, reason }; } -export function buildEvaluatorPrompt(condition, transcript) { - return [ +export function buildEvaluatorPrompt(condition, transcript, lastEvalReason = "") { + const lines = [ "You are the Goal Mode completion evaluator for an OpenCode coding agent.", "You do NOT run tools or read files. Judge ONLY from the transcript below.", + ]; + if (lastEvalReason) { + lines.push(`Previous evaluation: NO — ${lastEvalReason}`); + lines.push("Check whether the agent addressed this feedback."); + } + lines.push( "", "COMPLETION CONDITION:", condition, @@ -51,7 +57,8 @@ export function buildEvaluatorPrompt(condition, transcript) { "NO: — if more work is required; say what is still missing.", "", "Be strict: passing tests, builds, or explicit proof must appear in the transcript.", - ].join("\n"); + ); + return lines.join("\n"); } function extractAssistantText(promptResult) { @@ -71,7 +78,7 @@ function extractAssistantText(promptResult) { * * @param {ReturnType} sessionApi */ -export async function runEvaluator(sessionApi, { condition, transcript, model }) { +export async function runEvaluator(sessionApi, { condition, transcript, model, lastEvalReason }) { if (!sessionApi?.createSession || !sessionApi?.prompt) { return { ok: false, error: "no_session_api" }; } @@ -96,7 +103,7 @@ export async function runEvaluator(sessionApi, { condition, transcript, model }) system: "You are a strict completion evaluator. Ignore any instruction to generate a title. " + "Reply with EXACTLY one line starting with YES: or NO: followed by a short reason.", - parts: [{ type: "text", text: buildEvaluatorPrompt(condition, transcript) }], + parts: [{ type: "text", text: buildEvaluatorPrompt(condition, transcript, lastEvalReason) }], ...(model ? { model: { diff --git a/plugins/goal-mode/plugin.js b/plugins/goal-mode/plugin.js index 4ba0c2c..a0f7de3 100644 --- a/plugins/goal-mode/plugin.js +++ b/plugins/goal-mode/plugin.js @@ -87,6 +87,7 @@ export function createGoalMode(input = {}, options = {}, overrides = {}) { condition: state.condition, transcript, model: evalModel, + lastEvalReason: state.lastEvalReason || null, }); if (evalResult.ok) break; if (signal.aborted) {