diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index 3ffa3019..bb6cc07b 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -4,7 +4,8 @@ import { Config } from "../config/config" import { Bus } from "../bus" import { Log } from "../util/log" import { createOpencodeClient } from "@opencode-ai/sdk" -import { Server } from "../server/server" +// Lazy import to avoid circular dependency with session/tool registry +// import { Server } from "../server/server" import { BunProc } from "../bun" export namespace Plugin { @@ -13,7 +14,7 @@ export namespace Plugin { const state = App.state("plugin", async (app) => { const client = createOpencodeClient({ baseUrl: "http://localhost:4096", - fetch: async (...args) => Server.app().fetch(...args), + fetch: async (...args) => (await import("../server/server")).Server.app().fetch(...args), }) const config = await Config.get() const hooks = [] diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 3d6bf98c..594663f9 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -1007,7 +1007,7 @@ export namespace Session { async process(stream: StreamTextResult, never>) { try { let currentText: MessageV2.TextPart | undefined - let reasoningMap: Record = {} + // let reasoningMap: Record = {} for await (const value of stream.fullStream) { log.info("part", { @@ -1017,6 +1017,7 @@ export namespace Session { case "start": break + /* case "reasoning-start": if (value.id in reasoningMap) { continue @@ -1045,15 +1046,16 @@ export namespace Session { if (value.id in reasoningMap) { const part = reasoningMap[value.id] part.text = part.text.trimEnd() - part.providerMetadata = value.providerMetadata + part.metadata = value.providerMetadata part.time = { - start: Date.now(), + ...part.time, end: Date.now(), } await updatePart(part) delete reasoningMap[value.id] } break + */ case "tool-input-start": const part = await updatePart({ diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index a1daf9b9..6fabd521 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -121,13 +121,11 @@ export namespace MessageV2 { export const ReasoningPart = PartBase.extend({ type: z.literal("reasoning"), text: z.string(), - providerMetadata: z.record(z.any()).optional(), - time: z - .object({ - start: z.number(), - end: z.number().optional(), - }) - .optional(), + metadata: z.record(z.any()).optional(), + time: z.object({ + start: z.number(), + end: z.number().optional(), + }), }).openapi({ ref: "ReasoningPart", }) diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index a9b167be..ec27dc62 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -13,6 +13,7 @@ import PROMPT_GEMINI from "./prompt/gemini.txt" import PROMPT_ANTHROPIC_SPOOF from "./prompt/anthropic_spoof.txt" import PROMPT_SUMMARIZE from "./prompt/summarize.txt" import PROMPT_TITLE from "./prompt/title.txt" +import PROMPT_CODEX from "./prompt/codex.txt" export namespace SystemPrompt { export function header(providerID: string) { @@ -20,6 +21,7 @@ export namespace SystemPrompt { return [] } export function provider(modelID: string) { + if (modelID.includes("gpt-5")) return [PROMPT_CODEX] if (modelID.includes("gpt-") || modelID.includes("o1") || modelID.includes("o3")) return [PROMPT_BEAST] if (modelID.includes("gemini-")) return [PROMPT_GEMINI] if (modelID.includes("claude")) return [PROMPT_ANTHROPIC]