diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 4be6e2538f7..76104b41d26 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -39,6 +39,7 @@ export namespace LLM { small?: boolean tools: Record retries?: number + sessionPermission?: PermissionNext.Ruleset } export type StreamOutput = StreamTextResult @@ -265,8 +266,11 @@ export namespace LLM { }) } - async function resolveTools(input: Pick) { - const disabled = PermissionNext.disabled(Object.keys(input.tools), input.agent.permission) + async function resolveTools(input: Pick) { + const disabled = PermissionNext.disabled( + Object.keys(input.tools), + PermissionNext.merge(input.agent.permission, input.sessionPermission ?? []), + ) for (const tool of Object.keys(input.tools)) { if (input.user.tools?.[tool] === false || disabled.has(tool)) { delete input.tools[tool] diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index e0861c4df52..e99a3585d47 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -605,6 +605,7 @@ export namespace SessionPrompt { agent, abort, sessionID, + sessionPermission: session.permission, system: [...(await SystemPrompt.environment(model)), ...(await InstructionPrompt.system())], messages: [ ...MessageV2.toModelMessages(sessionMessages, model),