diff --git a/packages/contracts/src/model.ts b/packages/contracts/src/model.ts index 8027c90799dbc..87990e7f542f7 100644 --- a/packages/contracts/src/model.ts +++ b/packages/contracts/src/model.ts @@ -160,7 +160,7 @@ export const DEFAULT_TEXT_GENERATION_MODEL_BY_PROVIDER: Partial< [ProviderDriverKind.make("antigravity")]: ANTIGRAVITY_DEFAULT_MODEL, [CLAUDE_DRIVER_KIND]: "claude-haiku-5-5", [CURSOR_DRIVER_KIND]: "composer-2", - [OPENCODE_DRIVER_KIND]: "openai/gpt-5", + [OPENCODE_DRIVER_KIND]: "opencode/big-pickle", }; export const MODEL_SLUG_ALIASES_BY_PROVIDER: Partial< diff --git a/packages/provider-opencode/src/server/textGeneration.ts b/packages/provider-opencode/src/server/textGeneration.ts index 11d6c19fba2c2..eed819e44d62c 100644 --- a/packages/provider-opencode/src/server/textGeneration.ts +++ b/packages/provider-opencode/src/server/textGeneration.ts @@ -190,7 +190,11 @@ export const makeOpenCodeTextGeneration = Effect.fn("makeOpenCodeTextGeneration" client.session.create( { title: `T3 Code ${input.operation}`, - permission: [{ permission: "*", pattern: "*", action: "deny" }], + // OpenCode Zen refuses free-model requests that carry no tools, so keep read. + permission: [ + { permission: "*", pattern: "*", action: "deny" }, + { permission: "read", pattern: "*", action: "allow" }, + ], }, { signal }, ), diff --git a/packages/shared/src/serverSettings.test.ts b/packages/shared/src/serverSettings.test.ts index 26cbfb3df9d59..a897f3d427a34 100644 --- a/packages/shared/src/serverSettings.test.ts +++ b/packages/shared/src/serverSettings.test.ts @@ -32,6 +32,12 @@ const decodeServerSettingsPatch = Schema.decodeUnknownSync(ServerSettingsPatch); const FOLDED_SERVER_SETTINGS = { ...DEFAULT_SERVER_SETTINGS, projectSettingsFolded: true }; describe("fallbackTextGenerationModelSelection", () => { + it("uses Big Pickle when only OpenCode is enabled", () => { + expect( + fallbackTextGenerationModelSelection({}, (instanceId) => instanceId === "opencode"), + ).toEqual({ instanceId: "opencode", model: "opencode/big-pickle" }); + }); + it("replaces and clears the fallback without carrying model options", () => { const fallbackModelSelection = { instanceId: ProviderInstanceId.make("codex"), model: "new" }; const settings = applyServerSettingsPatch(