mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-20 05:04:49 +00:00
refactor: generalize permissions example
This commit is contained in:
parent
6e6d94be38
commit
5127b2c4ed
5 changed files with 17 additions and 14 deletions
|
|
@ -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
|
## Destroy a session
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ const options = await session.getConfigOptions();
|
||||||
const modes = await session.getModes();
|
const modes = await session.getModes();
|
||||||
```
|
```
|
||||||
|
|
||||||
Claude permission modes use the same surface:
|
Permission modes use the same surface:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
const claude = await sdk.createSession({
|
const claude = await sdk.createSession({
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "@sandbox-agent/example-claude-permissions",
|
"name": "@sandbox-agent/example-permissions",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
@ -6,11 +6,12 @@ import {
|
||||||
type SessionPermissionRequest,
|
type SessionPermissionRequest,
|
||||||
} from "sandbox-agent";
|
} from "sandbox-agent";
|
||||||
|
|
||||||
const permissionMode = process.env.CLAUDE_PERMISSION_MODE?.trim() || "default";
|
const agent = (process.env.PERMISSIONS_AGENT?.trim() || "claude").toLowerCase();
|
||||||
const autoReply = parsePermissionReply(process.env.CLAUDE_PERMISSION_REPLY);
|
const requestedPermissionMode = process.env.PERMISSION_MODE?.trim();
|
||||||
|
const autoReply = parsePermissionReply(process.env.PERMISSION_REPLY);
|
||||||
const promptText =
|
const promptText =
|
||||||
process.env.CLAUDE_PERMISSION_PROMPT?.trim() ||
|
process.env.PERMISSION_PROMPT?.trim() ||
|
||||||
"Create ./permission-example.txt with the text 'hello from Claude permissions example'.";
|
`Create ./permission-example.txt with the text 'hello from the ${agent} permissions example'.`;
|
||||||
|
|
||||||
const sdk = await SandboxAgent.start({
|
const sdk = await SandboxAgent.start({
|
||||||
spawn: {
|
spawn: {
|
||||||
|
|
@ -20,19 +21,21 @@ const sdk = await SandboxAgent.start({
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await sdk.installAgent("claude");
|
await sdk.installAgent(agent);
|
||||||
|
|
||||||
const agents = await sdk.listAgents({ config: true });
|
const agents = await sdk.listAgents({ config: true });
|
||||||
const claude = agents.agents.find((agent) => agent.id === "claude");
|
const selectedAgent = agents.agents.find((entry) => entry.id === agent);
|
||||||
const configOptions = Array.isArray(claude?.configOptions)
|
const configOptions = Array.isArray(selectedAgent?.configOptions)
|
||||||
? (claude.configOptions as Array<{ category?: string; options?: unknown[] }>)
|
? (selectedAgent.configOptions as Array<{ category?: string; currentValue?: string; options?: unknown[] }>)
|
||||||
: [];
|
: [];
|
||||||
const modeOption = configOptions.find((option) => option.category === "mode");
|
const modeOption = configOptions.find((option) => option.category === "mode");
|
||||||
const availableModes = extractOptionValues(modeOption);
|
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) {
|
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(`Working directory: ${process.cwd()}`);
|
||||||
console.log(`Prompt: ${promptText}`);
|
console.log(`Prompt: ${promptText}`);
|
||||||
|
|
@ -43,7 +46,7 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
const session = await sdk.createSession({
|
const session = await sdk.createSession({
|
||||||
agent: "claude",
|
agent,
|
||||||
permissionMode,
|
permissionMode,
|
||||||
sessionInit: {
|
sessionInit: {
|
||||||
cwd: process.cwd(),
|
cwd: process.cwd(),
|
||||||
Loading…
Add table
Add a link
Reference in a new issue