diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 36d946503b..1d3d745094 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -601,14 +601,20 @@ export namespace SessionPrompt { model, tools: lastUser.tools, processor, - outputFormat: lastUser.format ?? { type: "text" }, - onStructuredOutputSuccess: (output) => { - structuredOutput = output - }, bypassAgentCheck, messages: msgs, }) + // Inject StructuredOutput tool if JSON schema mode enabled + if (lastUser.format?.type === "json_schema") { + tools["StructuredOutput"] = createStructuredOutputTool({ + schema: lastUser.format.schema, + onSuccess(output) { + structuredOutput = output + }, + }) + } + if (step === 1) { SessionSummary.summarize({ sessionID: sessionID, @@ -641,8 +647,8 @@ export namespace SessionPrompt { // Build system prompt, adding structured output instruction if needed const system = [...(await SystemPrompt.environment(model)), ...(await InstructionPrompt.system())] - const outputFormat = lastUser.format ?? { type: "text" } - if (outputFormat.type === "json_schema") { + const format = lastUser.format ?? { type: "text" } + if (format.type === "json_schema") { system.push(STRUCTURED_OUTPUT_SYSTEM_PROMPT) } @@ -665,7 +671,7 @@ export namespace SessionPrompt { ], tools, model, - toolChoice: outputFormat.type === "json_schema" ? "required" : undefined, + toolChoice: format.type === "json_schema" ? "required" : undefined, }) // If structured output was captured, save it and exit immediately @@ -681,7 +687,7 @@ export namespace SessionPrompt { const modelFinished = processor.message.finish && !["tool-calls", "unknown"].includes(processor.message.finish) if (modelFinished && !processor.message.error) { - if (outputFormat.type === "json_schema") { + if (format.type === "json_schema") { // Model stopped without calling StructuredOutput tool processor.message.error = new MessageV2.StructuredOutputError({ message: "Model did not produce structured output", @@ -729,8 +735,6 @@ export namespace SessionPrompt { session: Session.Info tools?: Record processor: SessionProcessor.Info - outputFormat: MessageV2.OutputFormat - onStructuredOutputSuccess?: (output: unknown) => void bypassAgentCheck: boolean messages: MessageV2.WithParts[] }) { @@ -902,14 +906,6 @@ export namespace SessionPrompt { tools[key] = item } - // Inject StructuredOutput tool if JSON schema mode enabled - if (input.outputFormat.type === "json_schema" && input.onStructuredOutputSuccess) { - tools["StructuredOutput"] = createStructuredOutputTool({ - schema: input.outputFormat.schema, - onSuccess: input.onStructuredOutputSuccess, - }) - } - return tools }