summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-03-20 10:37:47 -0500
committerGitHub <[email protected]>2026-03-20 10:37:47 -0500
commitbfdc38e421aeeee2f4cfa1ac27d222d848a23323 (patch)
tree946b0a1df7de71bac7581bf2a6be7a3a9cf54107 /packages
parent83023e4f0f9a6ec3bb376531081b11ae572776f6 (diff)
downloadopencode-bfdc38e421aeeee2f4cfa1ac27d222d848a23323.tar.gz
opencode-bfdc38e421aeeee2f4cfa1ac27d222d848a23323.zip
tweak: adjust codex plugin logic so that codex instruction isn't always added (oauth plan no longer enforces instruction whitelisting) (#18337)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/agent/agent.ts2
-rw-r--r--packages/opencode/src/session/llm.ts38
-rw-r--r--packages/opencode/src/session/prompt/codex.txt (renamed from packages/opencode/src/session/prompt/codex_header.txt)0
-rw-r--r--packages/opencode/src/session/system.ts10
4 files changed, 26 insertions, 24 deletions
diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts
index e30d05e93..fd07ebc85 100644
--- a/packages/opencode/src/agent/agent.ts
+++ b/packages/opencode/src/agent/agent.ts
@@ -322,11 +322,11 @@ export namespace Agent {
}),
} satisfies Parameters<typeof generateObject>[0]
+ // TODO: clean this up so provider specific logic doesnt bleed over
if (defaultModel.providerID === "openai" && (await Auth.get(defaultModel.providerID))?.type === "oauth") {
const result = streamObject({
...params,
providerOptions: ProviderTransform.providerOptions(model, {
- instructions: SystemPrompt.instructions(),
store: false,
}),
onError: () => {},
diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts
index daf70180e..48a36741c 100644
--- a/packages/opencode/src/session/llm.ts
+++ b/packages/opencode/src/session/llm.ts
@@ -63,14 +63,14 @@ export namespace LLM {
Provider.getProvider(input.model.providerID),
Auth.get(input.model.providerID),
])
- const isCodex = provider.id === "openai" && auth?.type === "oauth"
+ // TODO: move this to a proper hook
+ const isOpenaiOauth = provider.id === "openai" && auth?.type === "oauth"
- const system = []
+ const system: string[] = []
system.push(
[
// use agent prompt otherwise provider prompt
- // For Codex sessions, skip SystemPrompt.provider() since it's sent via options.instructions
- ...(input.agent.prompt ? [input.agent.prompt] : isCodex ? [] : SystemPrompt.provider(input.model)),
+ ...(input.agent.prompt ? [input.agent.prompt] : SystemPrompt.provider(input.model)),
// any custom prompt passed into this call
...input.system,
// any custom prompt from last user message
@@ -108,10 +108,22 @@ export namespace LLM {
mergeDeep(input.agent.options),
mergeDeep(variant),
)
- if (isCodex) {
- options.instructions = SystemPrompt.instructions()
+ if (isOpenaiOauth) {
+ options.instructions = system.join("\n")
}
+ const messages = isOpenaiOauth
+ ? input.messages
+ : [
+ ...system.map(
+ (x): ModelMessage => ({
+ role: "system",
+ content: x,
+ }),
+ ),
+ ...input.messages,
+ ]
+
const params = await Plugin.trigger(
"chat.params",
{
@@ -146,7 +158,9 @@ export namespace LLM {
)
const maxOutputTokens =
- isCodex || provider.id.includes("github-copilot") ? undefined : ProviderTransform.maxOutputTokens(input.model)
+ isOpenaiOauth || provider.id.includes("github-copilot")
+ ? undefined
+ : ProviderTransform.maxOutputTokens(input.model)
const tools = await resolveTools(input)
@@ -217,15 +231,7 @@ export namespace LLM {
...headers,
},
maxRetries: input.retries ?? 0,
- messages: [
- ...system.map(
- (x): ModelMessage => ({
- role: "system",
- content: x,
- }),
- ),
- ...input.messages,
- ],
+ messages,
model: wrapLanguageModel({
model: language,
middleware: [
diff --git a/packages/opencode/src/session/prompt/codex_header.txt b/packages/opencode/src/session/prompt/codex.txt
index d595cadb0..d595cadb0 100644
--- a/packages/opencode/src/session/prompt/codex_header.txt
+++ b/packages/opencode/src/session/prompt/codex.txt
diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts
index 63230e642..80c89618e 100644
--- a/packages/opencode/src/session/system.ts
+++ b/packages/opencode/src/session/system.ts
@@ -7,7 +7,7 @@ import PROMPT_DEFAULT from "./prompt/default.txt"
import PROMPT_BEAST from "./prompt/beast.txt"
import PROMPT_GEMINI from "./prompt/gemini.txt"
-import PROMPT_CODEX from "./prompt/codex_header.txt"
+import PROMPT_CODEX from "./prompt/codex.txt"
import PROMPT_TRINITY from "./prompt/trinity.txt"
import type { Provider } from "@/provider/provider"
import type { Agent } from "@/agent/agent"
@@ -15,14 +15,10 @@ import { PermissionNext } from "@/permission"
import { Skill } from "@/skill"
export namespace SystemPrompt {
- export function instructions() {
- return PROMPT_CODEX.trim()
- }
-
export function provider(model: Provider.Model) {
- if (model.api.id.includes("gpt-5")) return [PROMPT_CODEX]
- if (model.api.id.includes("gpt-") || model.api.id.includes("o1") || model.api.id.includes("o3"))
+ if (model.api.id.includes("gpt-4") || model.api.id.includes("o1") || model.api.id.includes("o3"))
return [PROMPT_BEAST]
+ if (model.api.id.includes("gpt")) return [PROMPT_CODEX]
if (model.api.id.includes("gemini-")) return [PROMPT_GEMINI]
if (model.api.id.includes("claude")) return [PROMPT_ANTHROPIC]
if (model.api.id.toLowerCase().includes("trinity")) return [PROMPT_TRINITY]