diff --git a/docs/agent-sessions.mdx b/docs/agent-sessions.mdx index 29b52ee..59fddb3 100644 --- a/docs/agent-sessions.mdx +++ b/docs/agent-sessions.mdx @@ -157,7 +157,7 @@ await claude.prompt([ ]); ``` -See `examples/claude-permissions/src/index.ts` for a complete Claude example with interactive approve/reject handling. +See `examples/permissions/src/index.ts` for a complete permissions example that works with Claude and Codex. ## Destroy a session diff --git a/docs/sdk-overview.mdx b/docs/sdk-overview.mdx index 7196d67..48e3550 100644 --- a/docs/sdk-overview.mdx +++ b/docs/sdk-overview.mdx @@ -138,7 +138,7 @@ const options = await session.getConfigOptions(); const modes = await session.getModes(); ``` -Claude permission modes use the same surface: +Permission modes use the same surface: ```ts const claude = await sdk.createSession({ diff --git a/examples/claude-permissions/package.json b/examples/permissions/package.json similarity index 84% rename from examples/claude-permissions/package.json rename to examples/permissions/package.json index 32b80af..288be4e 100644 --- a/examples/claude-permissions/package.json +++ b/examples/permissions/package.json @@ -1,5 +1,5 @@ { - "name": "@sandbox-agent/example-claude-permissions", + "name": "@sandbox-agent/example-permissions", "private": true, "type": "module", "scripts": { diff --git a/examples/claude-permissions/src/index.ts b/examples/permissions/src/index.ts similarity index 80% rename from examples/claude-permissions/src/index.ts rename to examples/permissions/src/index.ts index 7e3b6ee..5d64a1b 100644 --- a/examples/claude-permissions/src/index.ts +++ b/examples/permissions/src/index.ts @@ -6,11 +6,12 @@ import { type SessionPermissionRequest, } from "sandbox-agent"; -const permissionMode = process.env.CLAUDE_PERMISSION_MODE?.trim() || "default"; -const autoReply = parsePermissionReply(process.env.CLAUDE_PERMISSION_REPLY); +const agent = (process.env.PERMISSIONS_AGENT?.trim() || "claude").toLowerCase(); +const requestedPermissionMode = process.env.PERMISSION_MODE?.trim(); +const autoReply = parsePermissionReply(process.env.PERMISSION_REPLY); const promptText = - process.env.CLAUDE_PERMISSION_PROMPT?.trim() || - "Create ./permission-example.txt with the text 'hello from Claude permissions example'."; + process.env.PERMISSION_PROMPT?.trim() || + `Create ./permission-example.txt with the text 'hello from the ${agent} permissions example'.`; const sdk = await SandboxAgent.start({ spawn: { @@ -20,19 +21,21 @@ const sdk = await SandboxAgent.start({ }); try { - await sdk.installAgent("claude"); + await sdk.installAgent(agent); const agents = await sdk.listAgents({ config: true }); - const claude = agents.agents.find((agent) => agent.id === "claude"); - const configOptions = Array.isArray(claude?.configOptions) - ? (claude.configOptions as Array<{ category?: string; options?: unknown[] }>) + const selectedAgent = agents.agents.find((entry) => entry.id === agent); + const configOptions = Array.isArray(selectedAgent?.configOptions) + ? (selectedAgent.configOptions as Array<{ category?: string; currentValue?: string; options?: unknown[] }>) : []; const modeOption = configOptions.find((option) => option.category === "mode"); const availableModes = extractOptionValues(modeOption); + const permissionMode = requestedPermissionMode || modeOption?.currentValue || availableModes[0] || "default"; - console.log(`Claude permission mode: ${permissionMode}`); + console.log(`Agent: ${agent}`); + console.log(`Permission mode: ${permissionMode}`); if (availableModes.length > 0) { - console.log(`Available Claude modes: ${availableModes.join(", ")}`); + console.log(`Available modes: ${availableModes.join(", ")}`); } console.log(`Working directory: ${process.cwd()}`); console.log(`Prompt: ${promptText}`); @@ -43,7 +46,7 @@ try { } const session = await sdk.createSession({ - agent: "claude", + agent, permissionMode, sessionInit: { cwd: process.cwd(), diff --git a/examples/claude-permissions/tsconfig.json b/examples/permissions/tsconfig.json similarity index 100% rename from examples/claude-permissions/tsconfig.json rename to examples/permissions/tsconfig.json