genaicode 2.11.0 → 2.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -1
- package/README.md +18 -16
- package/dist/agents/cli-agent.d.ts +6 -3
- package/dist/agents/cli-agent.js +57 -35
- package/dist/agents/cli-agent.js.map +1 -1
- package/dist/agents/drivers/antigravity.d.ts +7 -1
- package/dist/agents/drivers/antigravity.js +27 -2
- package/dist/agents/drivers/antigravity.js.map +1 -1
- package/dist/agents/drivers/claude-approvals.d.ts +86 -0
- package/dist/agents/drivers/claude-approvals.js +278 -0
- package/dist/agents/drivers/claude-approvals.js.map +1 -0
- package/dist/agents/drivers/claude.d.ts +12 -2
- package/dist/agents/drivers/claude.js +74 -11
- package/dist/agents/drivers/claude.js.map +1 -1
- package/dist/agents/drivers/codex-approvals.d.ts +11 -0
- package/dist/agents/drivers/codex-approvals.js +118 -0
- package/dist/agents/drivers/codex-approvals.js.map +1 -0
- package/dist/agents/drivers/codex-live.d.ts +12 -1
- package/dist/agents/drivers/codex-live.js +46 -32
- package/dist/agents/drivers/codex-live.js.map +1 -1
- package/dist/agents/drivers/codex.d.ts +10 -1
- package/dist/agents/drivers/codex.js +48 -2
- package/dist/agents/drivers/codex.js.map +1 -1
- package/dist/agents/drivers/copilot.d.ts +9 -1
- package/dist/agents/drivers/copilot.js +31 -1
- package/dist/agents/drivers/copilot.js.map +1 -1
- package/dist/agents/drivers/cursor.d.ts +10 -1
- package/dist/agents/drivers/cursor.js +48 -5
- package/dist/agents/drivers/cursor.js.map +1 -1
- package/dist/agents/drivers/gemini.d.ts +11 -1
- package/dist/agents/drivers/gemini.js +46 -2
- package/dist/agents/drivers/gemini.js.map +1 -1
- package/dist/agents/drivers/muse-approvals.d.ts +19 -0
- package/dist/agents/drivers/muse-approvals.js +157 -0
- package/dist/agents/drivers/muse-approvals.js.map +1 -0
- package/dist/agents/drivers/muse-live.d.ts +5 -1
- package/dist/agents/drivers/muse-live.js +21 -109
- package/dist/agents/drivers/muse-live.js.map +1 -1
- package/dist/agents/drivers/opencode.d.ts +7 -1
- package/dist/agents/drivers/opencode.js +28 -2
- package/dist/agents/drivers/opencode.js.map +1 -1
- package/dist/agents/drivers/permission-args.d.ts +14 -0
- package/dist/agents/drivers/permission-args.js +40 -0
- package/dist/agents/drivers/permission-args.js.map +1 -0
- package/dist/agents/drivers/vibe.d.ts +9 -1
- package/dist/agents/drivers/vibe.js +40 -2
- package/dist/agents/drivers/vibe.js.map +1 -1
- package/dist/agents/hosted.js +9 -0
- package/dist/agents/hosted.js.map +1 -1
- package/dist/agents/live-agent.d.ts +49 -4
- package/dist/agents/live-agent.js +84 -15
- package/dist/agents/live-agent.js.map +1 -1
- package/dist/agents/permissions.d.ts +27 -0
- package/dist/agents/permissions.js +79 -0
- package/dist/agents/permissions.js.map +1 -0
- package/dist/agents/prepare.d.ts +12 -1
- package/dist/agents/prepare.js +18 -3
- package/dist/agents/prepare.js.map +1 -1
- package/dist/agents/rpc.d.ts +13 -2
- package/dist/agents/rpc.js +20 -2
- package/dist/agents/rpc.js.map +1 -1
- package/dist/agents/runtime.d.ts +4 -0
- package/dist/agents/runtime.js +20 -0
- package/dist/agents/runtime.js.map +1 -1
- package/dist/agents/session.d.ts +4 -1
- package/dist/agents/session.js +31 -6
- package/dist/agents/session.js.map +1 -1
- package/dist/agents/types.d.ts +56 -7
- package/dist/agents.d.ts +21 -13
- package/dist/agents.js +14 -9
- package/dist/agents.js.map +1 -1
- package/dist/react/agent-chat.js +10 -2
- package/dist/react/agent-chat.js.map +1 -1
- package/dist/ui/index.js +69 -69
- package/dist/ui/web-client.js +9 -9
- package/docs/agents.md +129 -19
- package/package.json +5 -5
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { randomBytes, randomUUID, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
|
+
import { createServer } from 'node:http';
|
|
4
|
+
import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
5
|
+
import { askApproval } from '../live-agent.js';
|
|
6
|
+
import { isObject, stringField } from './json.js';
|
|
7
|
+
import { anySignal } from '../runtime.js';
|
|
8
|
+
/** Name of the permission prompt tool `claudeApprovalTool` serves. */
|
|
9
|
+
export const CLAUDE_APPROVAL_TOOL = 'approve';
|
|
10
|
+
const EDIT_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
11
|
+
const MAX_BODY_BYTES = 1024 * 1024;
|
|
12
|
+
const DENIED = 'Permission denied by the user, or the request was withdrawn.';
|
|
13
|
+
/** Build the permission prompt tool around an approval handler. */
|
|
14
|
+
export function claudeApprovalTool(onApproval, options = {}) {
|
|
15
|
+
if (options.sandbox && options.sandbox !== 'unrestricted' && !options.cwd)
|
|
16
|
+
throw new Error('claudeApprovalTool: a sandbox needs cwd.');
|
|
17
|
+
return {
|
|
18
|
+
name: options.name ?? CLAUDE_APPROVAL_TOOL,
|
|
19
|
+
description: 'Asks the user whether Claude may run this exact tool call.',
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: { tool_name: { type: 'string' }, input: { type: 'object' }, tool_use_id: { type: 'string' } },
|
|
23
|
+
required: ['tool_name', 'input'],
|
|
24
|
+
},
|
|
25
|
+
async call(args, signal = new AbortController().signal) {
|
|
26
|
+
const parsed = claudeApprovalRequest(args);
|
|
27
|
+
const refused = parsed && options.sandbox && claudeSandboxRefuses(args, options.sandbox, options.cwd ?? '');
|
|
28
|
+
const request = refused ? undefined : parsed;
|
|
29
|
+
// `updatedInput` is the input Claude asked about, copied before the handler can touch it.
|
|
30
|
+
const input = request && isObject(args) ? structuredClone(args.input) : undefined;
|
|
31
|
+
const decision = request ? await askApproval({ onApproval }, request, signal) : 'deny';
|
|
32
|
+
const answer = decision === 'approve' ? { behavior: 'allow', updatedInput: input } : { behavior: 'deny', message: DENIED };
|
|
33
|
+
return { content: [{ type: 'text', text: JSON.stringify(answer) }] };
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** The approval request for one permission prompt tool call, or undefined when the call is malformed. */
|
|
38
|
+
export function claudeApprovalRequest(args) {
|
|
39
|
+
if (!isObject(args) || !isObject(args.input))
|
|
40
|
+
return undefined;
|
|
41
|
+
const tool = stringField(args, 'tool_name');
|
|
42
|
+
if (!tool || tool.length > 200)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (args.tool_use_id !== undefined && typeof args.tool_use_id !== 'string')
|
|
45
|
+
return undefined;
|
|
46
|
+
const input = args.input;
|
|
47
|
+
const kind = tool === 'Bash' ? 'command' : EDIT_TOOLS.has(tool) ? 'file-change' : 'other';
|
|
48
|
+
const target = tool === 'Bash'
|
|
49
|
+
? stringField(input, 'command')
|
|
50
|
+
: (stringField(input, 'file_path') ?? stringField(input, 'notebook_path') ?? stringField(input, 'url'));
|
|
51
|
+
return {
|
|
52
|
+
id: stringField(args, 'tool_use_id') || `claude-${randomUUID()}`,
|
|
53
|
+
kind,
|
|
54
|
+
scope: 'once',
|
|
55
|
+
summary: target ? `${tool}: ${target}` : tool,
|
|
56
|
+
detail: args,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Tools that only read, which `read-only` may still grant.
|
|
60
|
+
const READ_TOOLS = new Set(['Read', 'Grep', 'Glob', 'LS', 'NotebookRead', 'WebFetch', 'WebSearch', 'TodoWrite']);
|
|
61
|
+
/**
|
|
62
|
+
* Whether a permission prompt asks for something outside `sandbox`, so neither a person nor
|
|
63
|
+
* `auto-approve` may grant it. `read-only`: anything but a reading tool, `ExitPlanMode`
|
|
64
|
+
* included. `workspace-write`: an edit outside `cwd`, and any `Bash` prompt (Claude's sandbox
|
|
65
|
+
* runs sandboxed commands without asking, so a prompt means an unsandboxed one).
|
|
66
|
+
*/
|
|
67
|
+
export function claudeSandboxRefuses(args, sandbox, cwd) {
|
|
68
|
+
if (sandbox === 'unrestricted')
|
|
69
|
+
return false;
|
|
70
|
+
const tool = stringField(args, 'tool_name') ?? '';
|
|
71
|
+
if (sandbox === 'read-only')
|
|
72
|
+
return !READ_TOOLS.has(tool);
|
|
73
|
+
if (tool === 'Bash')
|
|
74
|
+
return true;
|
|
75
|
+
if (!EDIT_TOOLS.has(tool))
|
|
76
|
+
return false;
|
|
77
|
+
const input = isObject(args) ? args.input : undefined;
|
|
78
|
+
const path = stringField(input, 'file_path') ?? stringField(input, 'notebook_path');
|
|
79
|
+
return !path || !within(cwd, resolve(cwd, path));
|
|
80
|
+
}
|
|
81
|
+
function within(root, path) {
|
|
82
|
+
const rel = relative(real(root), real(path));
|
|
83
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
84
|
+
}
|
|
85
|
+
/** `path` with symlinks resolved as far as it exists. */
|
|
86
|
+
function real(path) {
|
|
87
|
+
const rest = [];
|
|
88
|
+
for (let current = path;;) {
|
|
89
|
+
try {
|
|
90
|
+
return join(realpathSync(current), ...rest.reverse());
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
const parent = dirname(current);
|
|
94
|
+
if (parent === current)
|
|
95
|
+
return path;
|
|
96
|
+
rest.push(basename(current));
|
|
97
|
+
current = parent;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Claude's own sandbox, as `workspace-write` uses it: required, and with no way out per command. */
|
|
102
|
+
const CLAUDE_SANDBOX = {
|
|
103
|
+
enabled: true,
|
|
104
|
+
failIfUnavailable: true,
|
|
105
|
+
autoAllowBashIfSandboxed: true,
|
|
106
|
+
allowUnsandboxedCommands: false,
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Claude Code flags for `permissions`. `read-only` is plan mode; `workspace-write` turns on
|
|
110
|
+
* Claude's sandbox for Bash (writes limited to `cwd` and temp, see `--settings`), with edits in
|
|
111
|
+
* `cwd` accepted; `unrestricted` turns the sandbox off. `ask` and `auto-approve` need the
|
|
112
|
+
* permission prompt tool (`claudeApprovalTool` with the same sandbox); `deny` runs without it,
|
|
113
|
+
* so Claude refuses what it would have asked about.
|
|
114
|
+
*/
|
|
115
|
+
export function claudePermissionFlags(permissions) {
|
|
116
|
+
const { approval, sandbox } = permissions;
|
|
117
|
+
const args = [];
|
|
118
|
+
const replaces = {};
|
|
119
|
+
if (approval || sandbox) {
|
|
120
|
+
Object.assign(replaces, {
|
|
121
|
+
'--permission-mode': 'value',
|
|
122
|
+
'--dangerously-skip-permissions': 'flag',
|
|
123
|
+
'--allow-dangerously-skip-permissions': 'flag',
|
|
124
|
+
});
|
|
125
|
+
args.push('--permission-mode', sandbox === 'read-only' ? 'plan' : 'acceptEdits');
|
|
126
|
+
}
|
|
127
|
+
if (sandbox) {
|
|
128
|
+
replaces['--settings'] = 'value';
|
|
129
|
+
const settings = sandbox === 'workspace-write' ? CLAUDE_SANDBOX : { enabled: false };
|
|
130
|
+
args.push('--settings', JSON.stringify({ sandbox: settings }));
|
|
131
|
+
}
|
|
132
|
+
if (approval === 'deny')
|
|
133
|
+
replaces['--permission-prompt-tool'] = 'value';
|
|
134
|
+
return { args, replaces };
|
|
135
|
+
}
|
|
136
|
+
/** How long Claude waits for an answer: a day, where its default MCP tool timeout is 60 s. */
|
|
137
|
+
const APPROVAL_WAIT_MS = 24 * 60 * 60 * 1000;
|
|
138
|
+
/**
|
|
139
|
+
* Environment for a Claude process whose permission prompts wait on a person. Claude gives up
|
|
140
|
+
* on an MCP tool call after 60 s by default (`MCP_TOOL_TIMEOUT`), which would fail the tool
|
|
141
|
+
* call while the question is still open. Empty when `env` already sets a timeout.
|
|
142
|
+
*/
|
|
143
|
+
export function claudeApprovalEnv(env = process.env) {
|
|
144
|
+
return env.MCP_TOOL_TIMEOUT ? {} : { MCP_TOOL_TIMEOUT: String(APPROVAL_WAIT_MS) };
|
|
145
|
+
}
|
|
146
|
+
/** Claude Code arguments that route its permission prompts to `tool` on MCP server `server`. */
|
|
147
|
+
export function claudeApprovalArgs(server, tool = CLAUDE_APPROVAL_TOOL) {
|
|
148
|
+
return ['--permission-prompt-tool', `mcp__${server}__${tool}`];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Serve `claudeApprovalTool` alone over MCP (streamable HTTP, JSON responses) on a random
|
|
152
|
+
* loopback port, behind a random bearer token. `name` is the MCP server name. For apps that
|
|
153
|
+
* have no MCP server of their own to mount the tool on; `claude()` uses it for `task.onApproval`.
|
|
154
|
+
*/
|
|
155
|
+
export async function startClaudeApprovalServer(onApproval, options = {}) {
|
|
156
|
+
const name = options.name ?? 'genaicode_approval';
|
|
157
|
+
const tool = claudeApprovalTool(onApproval, { sandbox: options.sandbox, cwd: options.cwd });
|
|
158
|
+
const token = randomBytes(32).toString('hex');
|
|
159
|
+
const expected = Buffer.from(`Bearer ${token}`);
|
|
160
|
+
const closing = new AbortController();
|
|
161
|
+
let port = 0;
|
|
162
|
+
const authorized = (request) => {
|
|
163
|
+
const given = Buffer.from(request.headers.authorization ?? '');
|
|
164
|
+
return given.length === expected.length && timingSafeEqual(given, expected);
|
|
165
|
+
};
|
|
166
|
+
const loopbackHost = (request) => [`127.0.0.1:${port}`, `localhost:${port}`].includes(request.headers.host ?? '');
|
|
167
|
+
const handle = async (message, signal) => {
|
|
168
|
+
if (!isObject(message) || typeof message.method !== 'string')
|
|
169
|
+
return rpcError(null, -32600, 'Invalid request.');
|
|
170
|
+
const id = message.id;
|
|
171
|
+
if (id === undefined || id === null)
|
|
172
|
+
return undefined; // A notification needs no answer.
|
|
173
|
+
const params = isObject(message.params) ? message.params : {};
|
|
174
|
+
switch (message.method) {
|
|
175
|
+
case 'initialize':
|
|
176
|
+
return {
|
|
177
|
+
jsonrpc: '2.0',
|
|
178
|
+
id,
|
|
179
|
+
result: {
|
|
180
|
+
protocolVersion: stringField(params, 'protocolVersion') ?? '2025-06-18',
|
|
181
|
+
capabilities: { tools: {} },
|
|
182
|
+
serverInfo: { name: 'genaicode-approval', version: '1' },
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
case 'ping':
|
|
186
|
+
return { jsonrpc: '2.0', id, result: {} };
|
|
187
|
+
case 'tools/list':
|
|
188
|
+
return {
|
|
189
|
+
jsonrpc: '2.0',
|
|
190
|
+
id,
|
|
191
|
+
result: { tools: [{ name: tool.name, description: tool.description, inputSchema: tool.inputSchema }] },
|
|
192
|
+
};
|
|
193
|
+
case 'tools/call':
|
|
194
|
+
if (params.name !== tool.name)
|
|
195
|
+
return rpcError(id, -32602, `Unknown tool: ${String(params.name)}.`);
|
|
196
|
+
return { jsonrpc: '2.0', id, result: await tool.call(params.arguments, signal) };
|
|
197
|
+
default:
|
|
198
|
+
return rpcError(id, -32601, `${message.method} is not supported.`);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const server = createServer((request, response) => {
|
|
202
|
+
if (!loopbackHost(request))
|
|
203
|
+
return reply(response, 403);
|
|
204
|
+
if (!authorized(request))
|
|
205
|
+
return reply(response, 401);
|
|
206
|
+
if (request.method !== 'POST' || request.url?.split('?')[0] !== '/mcp')
|
|
207
|
+
return reply(response, 405);
|
|
208
|
+
// A caller that hangs up withdraws its question.
|
|
209
|
+
const gone = new AbortController();
|
|
210
|
+
response.once('close', () => gone.abort());
|
|
211
|
+
const signal = anySignal([closing.signal, gone.signal]);
|
|
212
|
+
readBody(request).then(async (body) => {
|
|
213
|
+
let message;
|
|
214
|
+
try {
|
|
215
|
+
message = JSON.parse(body);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return reply(response, 400, rpcError(null, -32700, 'Parse error.'));
|
|
219
|
+
}
|
|
220
|
+
const answers = Array.isArray(message)
|
|
221
|
+
? (await Promise.all(message.map((part) => handle(part, signal)))).filter(Boolean)
|
|
222
|
+
: [await handle(message, signal)].filter(Boolean);
|
|
223
|
+
if (!answers.length)
|
|
224
|
+
return reply(response, 202);
|
|
225
|
+
reply(response, 200, Array.isArray(message) ? answers : answers[0]);
|
|
226
|
+
}, () => reply(response, 413));
|
|
227
|
+
});
|
|
228
|
+
await new Promise((resolve, reject) => {
|
|
229
|
+
server.once('error', reject);
|
|
230
|
+
server.listen(0, '127.0.0.1', () => {
|
|
231
|
+
server.off('error', reject);
|
|
232
|
+
resolve();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
port = server.address().port;
|
|
236
|
+
server.unref();
|
|
237
|
+
return {
|
|
238
|
+
server: { name, url: `http://127.0.0.1:${port}/mcp`, headers: { Authorization: `Bearer ${token}` } },
|
|
239
|
+
args: claudeApprovalArgs(name, tool.name),
|
|
240
|
+
close() {
|
|
241
|
+
closing.abort();
|
|
242
|
+
return new Promise((resolve) => {
|
|
243
|
+
server.close(() => resolve());
|
|
244
|
+
server.closeAllConnections();
|
|
245
|
+
});
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function rpcError(id, code, message) {
|
|
250
|
+
return { jsonrpc: '2.0', id: id ?? null, error: { code, message } };
|
|
251
|
+
}
|
|
252
|
+
function reply(response, status, body) {
|
|
253
|
+
if (response.headersSent || response.destroyed)
|
|
254
|
+
return;
|
|
255
|
+
if (body === undefined) {
|
|
256
|
+
response.writeHead(status).end();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
response.writeHead(status, { 'content-type': 'application/json' }).end(JSON.stringify(body));
|
|
260
|
+
}
|
|
261
|
+
function readBody(request) {
|
|
262
|
+
return new Promise((resolve, reject) => {
|
|
263
|
+
const chunks = [];
|
|
264
|
+
let size = 0;
|
|
265
|
+
request.on('data', (chunk) => {
|
|
266
|
+
size += chunk.length;
|
|
267
|
+
if (size > MAX_BODY_BYTES) {
|
|
268
|
+
reject(new Error('Request body too large.'));
|
|
269
|
+
request.destroy();
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
chunks.push(chunk);
|
|
273
|
+
});
|
|
274
|
+
request.once('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
275
|
+
request.once('error', reject);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=claude-approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-approvals.js","sourceRoot":"","sources":["../../../src/agents/drivers/claude-approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,11 +15,21 @@ export interface ClaudeAgentOptions {
|
|
|
15
15
|
/** With `task.mcpServers`: pre-allow every tool of those servers. Default true (headless runs cannot ask). */
|
|
16
16
|
allowMcpTools?: boolean;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Claude Code in print mode (`claude -p --output-format stream-json`).
|
|
20
|
+
*
|
|
21
|
+
* With `task.onApproval`, permission prompts reach it through Claude's
|
|
22
|
+
* `--permission-prompt-tool`, served from a private loopback MCP endpoint for the task (see
|
|
23
|
+
* `startClaudeApprovalServer`), and Claude waits up to a day for an answer (`claudeApprovalEnv`).
|
|
24
|
+
* Without it, tools the permission mode does not allow are refused.
|
|
25
|
+
*
|
|
26
|
+
* `task.permissions`: see `claudePermissionFlags`. `ask` and `auto-approve` use the same
|
|
27
|
+
* prompt tool; a request outside the sandbox is denied before anyone is asked.
|
|
28
|
+
*/
|
|
19
29
|
export declare function claude(options?: ClaudeAgentOptions): CodingAgent;
|
|
20
30
|
/** The `--mcp-config` document for a set of servers. */
|
|
21
31
|
export declare function claudeMcpConfig(servers: readonly McpServer[]): {
|
|
22
32
|
mcpServers: Record<string, unknown>;
|
|
23
33
|
};
|
|
24
|
-
export declare function claudeArgs(task: AgentTask, options?: ClaudeAgentOptions, mcpConfigPath?: string): string[];
|
|
34
|
+
export declare function claudeArgs(task: AgentTask, options?: ClaudeAgentOptions, mcpConfigPath?: string, approvalArgs?: readonly string[]): string[];
|
|
25
35
|
export declare function createClaudeParser(): AgentOutputParser;
|
|
@@ -2,10 +2,24 @@ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { cliAgent } from '../cli-agent.js';
|
|
5
|
+
import { decideApproval, reportApproval } from '../live-agent.js';
|
|
6
|
+
import { exclusiveOption, resolvePermissions } from '../permissions.js';
|
|
5
7
|
import { isHttpServer } from '../prepare.js';
|
|
8
|
+
import { claudeApprovalEnv, claudePermissionFlags, claudeSandboxRefuses, startClaudeApprovalServer, } from './claude-approvals.js';
|
|
6
9
|
import { isObject, numberField, positionalPrompt, stringField } from './json.js';
|
|
10
|
+
import { anySignal } from '../runtime.js';
|
|
7
11
|
const EDIT_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Claude Code in print mode (`claude -p --output-format stream-json`).
|
|
14
|
+
*
|
|
15
|
+
* With `task.onApproval`, permission prompts reach it through Claude's
|
|
16
|
+
* `--permission-prompt-tool`, served from a private loopback MCP endpoint for the task (see
|
|
17
|
+
* `startClaudeApprovalServer`), and Claude waits up to a day for an answer (`claudeApprovalEnv`).
|
|
18
|
+
* Without it, tools the permission mode does not allow are refused.
|
|
19
|
+
*
|
|
20
|
+
* `task.permissions`: see `claudePermissionFlags`. `ask` and `auto-approve` use the same
|
|
21
|
+
* prompt tool; a request outside the sandbox is denied before anyone is asked.
|
|
22
|
+
*/
|
|
9
23
|
export function claude(options = {}) {
|
|
10
24
|
return cliAgent({
|
|
11
25
|
name: 'claude',
|
|
@@ -16,24 +30,64 @@ export function claude(options = {}) {
|
|
|
16
30
|
usage: true,
|
|
17
31
|
mcp: true,
|
|
18
32
|
resume: true,
|
|
33
|
+
approvals: true,
|
|
34
|
+
permissions: {
|
|
35
|
+
approval: ['ask', 'auto-approve', 'deny'],
|
|
36
|
+
sandbox: ['workspace-write', 'read-only', 'unrestricted'],
|
|
37
|
+
},
|
|
19
38
|
},
|
|
20
39
|
args: (task) => claudeArgs(task, options),
|
|
21
|
-
prepare: (task) => prepareClaude(task, options),
|
|
40
|
+
prepare: (task, context) => prepareClaude(task, options, context),
|
|
22
41
|
createParser: createClaudeParser,
|
|
23
42
|
});
|
|
24
43
|
}
|
|
25
44
|
/** Write the task's MCP servers to a private temp file, so header secrets stay out of argv. */
|
|
26
|
-
function prepareClaude(task, options) {
|
|
27
|
-
|
|
45
|
+
async function prepareClaude(task, options, context) {
|
|
46
|
+
const policy = resolvePermissions(task.permissions).approval;
|
|
47
|
+
const asks = policy ? policy !== 'deny' : !!task.onApproval;
|
|
48
|
+
const approvals = asks ? await claudeApprovals(task, context) : undefined;
|
|
49
|
+
const servers = [...(task.mcpServers ?? []), ...(approvals ? [approvals.server] : [])];
|
|
50
|
+
if (!servers.length)
|
|
28
51
|
return { args: claudeArgs(task, options) };
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
52
|
+
let dir;
|
|
53
|
+
let file;
|
|
54
|
+
try {
|
|
55
|
+
dir = mkdtempSync(join(tmpdir(), 'genaicode-claude-mcp-'));
|
|
56
|
+
file = join(dir, 'mcp.json');
|
|
57
|
+
writeFileSync(file, JSON.stringify(claudeMcpConfig(servers)), { mode: 0o600 });
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (dir)
|
|
61
|
+
rmSync(dir, { recursive: true, force: true });
|
|
62
|
+
void approvals?.close();
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
const created = dir;
|
|
32
66
|
return {
|
|
33
|
-
args: claudeArgs(task, options, file),
|
|
34
|
-
|
|
67
|
+
args: claudeArgs(task, options, file, approvals?.args),
|
|
68
|
+
...(approvals ? { env: claudeApprovalEnv(task.env) } : {}),
|
|
69
|
+
cleanup: () => {
|
|
70
|
+
void approvals?.close();
|
|
71
|
+
rmSync(created, { recursive: true, force: true });
|
|
72
|
+
},
|
|
35
73
|
};
|
|
36
74
|
}
|
|
75
|
+
/** The task's approval endpoint: decides under `task.permissions`, with the run's approval events. */
|
|
76
|
+
async function claudeApprovals(task, context) {
|
|
77
|
+
const taken = new Set((task.mcpServers ?? []).map((server) => server.name));
|
|
78
|
+
let name = 'genaicode_approval';
|
|
79
|
+
for (let n = 2; taken.has(name); n++)
|
|
80
|
+
name = `genaicode_approval_${n}`;
|
|
81
|
+
const sandbox = resolvePermissions(task.permissions).sandbox;
|
|
82
|
+
return startClaudeApprovalServer(async (request, signal) => {
|
|
83
|
+
const ended = signal ? anySignal([signal, context.signal]) : context.signal;
|
|
84
|
+
return reportApproval(context.emit, request, ended, async () =>
|
|
85
|
+
// Outside the sandbox: denied by policy, whoever would have answered.
|
|
86
|
+
sandbox && claudeSandboxRefuses(request.detail, sandbox, task.cwd)
|
|
87
|
+
? { decision: 'deny', automatic: true }
|
|
88
|
+
: decideApproval(task, request, ended));
|
|
89
|
+
}, { name });
|
|
90
|
+
}
|
|
37
91
|
/** The `--mcp-config` document for a set of servers. */
|
|
38
92
|
export function claudeMcpConfig(servers) {
|
|
39
93
|
const mcpServers = {};
|
|
@@ -48,7 +102,7 @@ export function claudeMcpConfig(servers) {
|
|
|
48
102
|
}
|
|
49
103
|
return { mcpServers };
|
|
50
104
|
}
|
|
51
|
-
export function claudeArgs(task, options = {}, mcpConfigPath) {
|
|
105
|
+
export function claudeArgs(task, options = {}, mcpConfigPath, approvalArgs) {
|
|
52
106
|
const args = ['-p', '--verbose'];
|
|
53
107
|
// Multi-value flags come first: a single-value flag must follow them before the prompt.
|
|
54
108
|
if (mcpConfigPath)
|
|
@@ -63,7 +117,16 @@ export function claudeArgs(task, options = {}, mcpConfigPath) {
|
|
|
63
117
|
args.push('--allowedTools', allowed.join(','));
|
|
64
118
|
if (options.disallowedTools?.length)
|
|
65
119
|
args.push('--disallowedTools', options.disallowedTools.join(','));
|
|
66
|
-
|
|
120
|
+
const permissions = resolvePermissions(task.permissions);
|
|
121
|
+
const owned = permissions.approval !== undefined || permissions.sandbox !== undefined;
|
|
122
|
+
exclusiveOption('claude', 'permissionMode', options.permissionMode !== undefined, 'approval/sandbox', owned);
|
|
123
|
+
args.push('--output-format', 'stream-json');
|
|
124
|
+
if (owned)
|
|
125
|
+
args.push(...claudePermissionFlags(permissions).args);
|
|
126
|
+
else
|
|
127
|
+
args.push('--permission-mode', options.permissionMode ?? 'acceptEdits');
|
|
128
|
+
if (approvalArgs)
|
|
129
|
+
args.push(...approvalArgs);
|
|
67
130
|
if (task.model)
|
|
68
131
|
args.push('--model', task.model);
|
|
69
132
|
if (task.effort)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/agents/drivers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAA6C,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA0BjF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AAE3E,2EAA2E;AAC3E,MAAM,UAAU,MAAM,CAAC,UAA8B,EAAE;IACrD,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;QACpC,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;YACjD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;SACb;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;QACzC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QAC/C,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,SAAS,aAAa,CAAC,IAAe,EAAE,OAA2B;IACjE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;IACzE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC3D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YAC3F,CAAC,CAAC;gBACE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C,CAAC;IACR,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,UAA8B,EAAE,EAAE,aAAsB;IAClG,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjC,wFAAwF;IACxF,IAAI,aAAa;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC5D,IAAI,aAAa,IAAI,OAAO,CAAC,eAAe;QAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAClH,CAAC;IACF,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,eAAe,EAAE,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,IAAI,OAAiC,CAAC;IACtC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,WAA+B,CAAC;IAEpC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO;QACtB,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACnD,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,WAAW;oBACd,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;wBACjD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;4BACjF,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;4BACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;wBACrD,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACvE,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;4BAC/D,IAAI,EAAE;gCAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;4BACtC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;4BACjG,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;4BAChG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI;gCAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC9F,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;wBACjD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;4BAAE,SAAS;wBAC3C,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;wBACjF,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,UAAU;4BAChB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACzB,OAAO,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI;4BAChC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC5C,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM;gBACR,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACxC,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnG,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;oBACvG,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC1C,OAAO,GAAG,MAAM;wBACd,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,mBAAmB,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;wBACtF,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;oBAC1B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpB,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;wBACvD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBACzD,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;wBACxE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBACrD,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE;gCACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACvD,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACjE,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS;oCACzD,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,YAAY,EAAE;oCAC7C,CAAC,CAAC,EAAE,CAAC;6BACR;4BACD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC9C,CAAC,CAAC;oBACL,CAAC;oBACD,kFAAkF;oBAClF,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,KAAK,WAAW;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACpF,IAAI,MAAM;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAM,EAAE,CAAC,CAAC;oBACpE,MAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAID,SAAS,aAAa,CAAC,OAAgB;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,OAAO,CAAC,KAA8B;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,OAAgB;IAClC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACxC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACpD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/agents/drivers/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type LiveApprovalIds, type LiveApprovals, type LiveSession } from '../live-agent.js';
|
|
2
|
+
/**
|
|
3
|
+
* Codex app-server approvals (`codex app-server`, v2 protocol). Commands and file changes
|
|
4
|
+
* are answered `accept` / `decline`. A permission profile request
|
|
5
|
+
* (`item/permissions/requestApproval`) asks with `scope: 'turn'`: approving grants the
|
|
6
|
+
* requested categories for the current turn, denying grants none. Under a
|
|
7
|
+
* `task.permissions.sandbox` other than `unrestricted` it is denied without asking, since
|
|
8
|
+
* the profile would widen that sandbox. A request from another thread or turn is rejected; an answer that arrives after the turn ended or after the
|
|
9
|
+
* server withdrew the request (`serverRequest/resolved`) declines.
|
|
10
|
+
*/
|
|
11
|
+
export declare function codexApprovals(session: LiveSession, ids: () => LiveApprovalIds): LiveApprovals;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { reportApproval } from '../live-agent.js';
|
|
2
|
+
import { resolvePermissions } from '../permissions.js';
|
|
3
|
+
import { RpcError } from '../rpc.js';
|
|
4
|
+
import { isObject, stringField } from './json.js';
|
|
5
|
+
import { anySignal } from '../runtime.js';
|
|
6
|
+
const KINDS = {
|
|
7
|
+
'item/commandExecution/requestApproval': 'command',
|
|
8
|
+
'item/fileChange/requestApproval': 'file-change',
|
|
9
|
+
'item/permissions/requestApproval': 'other',
|
|
10
|
+
// The v1 protocol, kept for older servers.
|
|
11
|
+
execCommandApproval: 'command',
|
|
12
|
+
applyPatchApproval: 'file-change',
|
|
13
|
+
};
|
|
14
|
+
const LEGACY = new Set(['execCommandApproval', 'applyPatchApproval']);
|
|
15
|
+
/**
|
|
16
|
+
* Codex app-server approvals (`codex app-server`, v2 protocol). Commands and file changes
|
|
17
|
+
* are answered `accept` / `decline`. A permission profile request
|
|
18
|
+
* (`item/permissions/requestApproval`) asks with `scope: 'turn'`: approving grants the
|
|
19
|
+
* requested categories for the current turn, denying grants none. Under a
|
|
20
|
+
* `task.permissions.sandbox` other than `unrestricted` it is denied without asking, since
|
|
21
|
+
* the profile would widen that sandbox. A request from another thread or turn is rejected; an answer that arrives after the turn ended or after the
|
|
22
|
+
* server withdrew the request (`serverRequest/resolved`) declines.
|
|
23
|
+
*/
|
|
24
|
+
export function codexApprovals(session, ids) {
|
|
25
|
+
const turn = new AbortController();
|
|
26
|
+
let count = 0;
|
|
27
|
+
const sandbox = resolvePermissions(session.task.permissions).sandbox;
|
|
28
|
+
const bounded = sandbox !== undefined && sandbox !== 'unrestricted';
|
|
29
|
+
const ownThread = (params) => {
|
|
30
|
+
const thread = ids().session;
|
|
31
|
+
if (!thread)
|
|
32
|
+
return false;
|
|
33
|
+
return (stringField(params, 'threadId') ?? stringField(params, 'conversationId')) === thread;
|
|
34
|
+
};
|
|
35
|
+
const ownTurn = (params) => {
|
|
36
|
+
const current = ids().turn;
|
|
37
|
+
const requested = stringField(params, 'turnId');
|
|
38
|
+
return ownThread(params) && (!requested || !current || requested === current);
|
|
39
|
+
};
|
|
40
|
+
// Asked again after the decision: the turn may have ended while the question was open.
|
|
41
|
+
const stillOpen = (params) => !turn.signal.aborted && !session.signal.aborted && ownTurn(params);
|
|
42
|
+
const answer = async (method, params, signal) => {
|
|
43
|
+
if (method === 'item/permissions/requestApproval') {
|
|
44
|
+
const asked = isObject(params.permissions) ? params.permissions : undefined;
|
|
45
|
+
const itemId = stringField(params, 'itemId');
|
|
46
|
+
if (!asked || !itemId || Object.values(asked).some((value) => value !== null && !isObject(value)))
|
|
47
|
+
throw new RpcError('Invalid permission profile request.', -32602);
|
|
48
|
+
// The grant is built from a copy: the handler sees `detail` and must not widen it.
|
|
49
|
+
const requested = structuredClone(asked);
|
|
50
|
+
const request = {
|
|
51
|
+
id: itemId,
|
|
52
|
+
kind: 'other',
|
|
53
|
+
scope: 'turn',
|
|
54
|
+
summary: permissionSummary(params, requested),
|
|
55
|
+
detail: params,
|
|
56
|
+
};
|
|
57
|
+
// A profile widens the sandbox, so a chosen sandbox refuses it without asking.
|
|
58
|
+
const decision = bounded
|
|
59
|
+
? await reportApproval(session.emit, request, signal, async () => ({ decision: 'deny', automatic: true }))
|
|
60
|
+
: await session.approve(request, signal);
|
|
61
|
+
// Only what was asked for, without the categories the request left null.
|
|
62
|
+
const granted = decision === 'approve' && stillOpen(params)
|
|
63
|
+
? Object.fromEntries(Object.entries(requested).filter(([, value]) => value != null))
|
|
64
|
+
: {};
|
|
65
|
+
return { permissions: granted, scope: 'turn' };
|
|
66
|
+
}
|
|
67
|
+
const request = {
|
|
68
|
+
// One item can raise several approvals (e.g. per shell subcommand); `approvalId` tells them apart.
|
|
69
|
+
id: stringField(params, 'approvalId') ??
|
|
70
|
+
stringField(params, 'itemId') ??
|
|
71
|
+
stringField(params, 'callId') ??
|
|
72
|
+
`approval-${++count}`,
|
|
73
|
+
kind: KINDS[method],
|
|
74
|
+
scope: 'once',
|
|
75
|
+
...summaryOf(params),
|
|
76
|
+
detail: params,
|
|
77
|
+
};
|
|
78
|
+
const approved = (await session.approve(request, signal)) === 'approve' && stillOpen(params);
|
|
79
|
+
if (LEGACY.has(method))
|
|
80
|
+
return { decision: approved ? 'approved' : 'denied' };
|
|
81
|
+
return { decision: approved ? 'accept' : 'decline' };
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
request(method, params, context) {
|
|
85
|
+
if (!KINDS[method])
|
|
86
|
+
return undefined;
|
|
87
|
+
if (!isObject(params) || !ownTurn(params))
|
|
88
|
+
return Promise.reject(new RpcError('This approval does not belong to the running turn.', -32602));
|
|
89
|
+
const signal = context ? anySignal([turn.signal, context.signal]) : turn.signal;
|
|
90
|
+
return answer(method, params, signal);
|
|
91
|
+
},
|
|
92
|
+
notification(method, params) {
|
|
93
|
+
if (method !== 'serverRequest/resolved')
|
|
94
|
+
return false;
|
|
95
|
+
const id = isObject(params) ? params.requestId : undefined;
|
|
96
|
+
if (ownThread(params) && (typeof id === 'string' || typeof id === 'number'))
|
|
97
|
+
session.rpc.cancel(id);
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
100
|
+
close() {
|
|
101
|
+
turn.abort();
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function summaryOf(params) {
|
|
106
|
+
const command = params.command;
|
|
107
|
+
const text = Array.isArray(command) ? command.join(' ') : typeof command === 'string' ? command : undefined;
|
|
108
|
+
const summary = text ?? stringField(params, 'reason') ?? stringField(params, 'grantRoot');
|
|
109
|
+
return summary ? { summary } : {};
|
|
110
|
+
}
|
|
111
|
+
function permissionSummary(params, requested) {
|
|
112
|
+
const categories = Object.entries(requested)
|
|
113
|
+
.filter(([, value]) => value != null)
|
|
114
|
+
.map(([name]) => name);
|
|
115
|
+
const reason = stringField(params, 'reason');
|
|
116
|
+
return `Permissions for this turn: ${categories.join(', ') || 'none'}${reason ? ` (${reason})` : ''}`;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=codex-approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-approvals.js","sourceRoot":"","sources":["../../../src/agents/drivers/codex-approvals.ts"],"names":[],"mappings":"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"}
|