genaicode 2.11.0 → 2.13.0
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 +44 -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 +277 -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 +73 -11
- package/dist/agents/drivers/claude.js.map +1 -1
- package/dist/agents/drivers/codex-approvals.d.ts +10 -0
- package/dist/agents/drivers/codex-approvals.js +102 -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 +156 -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 +6 -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 +2 -0
- package/dist/agents/runtime.js +10 -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 +127 -19
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.12.0 — 2026-10-08
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `task.permissions`: `{ approval: 'ask' | 'auto-approve' | 'deny', sandbox: 'workspace-write' |
|
|
8
|
+
'read-only' | 'unrestricted' }`, or the `'yolo'` preset (auto-approve, unrestricted). Each
|
|
9
|
+
driver translates it into the agent's own options and declares what it accepts in
|
|
10
|
+
`capabilities.permissions`; an unsupported value or combination fails the run with an error
|
|
11
|
+
instead of starting it in another mode. The sandbox bounds approvals, and `auto-approve`
|
|
12
|
+
grants exactly the scope the agent asked for. Prompts decided by the policy keep their
|
|
13
|
+
`approval-request` / `approval-resolved` events, marked `automatic: true`, and show as
|
|
14
|
+
"Auto-approved" in `createAgentSession`, `<AgentChat>` and `genaicode chat`.
|
|
15
|
+
- For apps with their own argument lists: `applyPermissionArgs`, the per-agent
|
|
16
|
+
`*PermissionFlags` functions, `codexThreadPolicy`, `decideApproval`, `claudeSandboxRefuses`
|
|
17
|
+
and a `sandbox` option for `claudeApprovalTool`.
|
|
18
|
+
|
|
19
|
+
- `claude()` answers permission prompts: with `task.onApproval`, it serves Claude Code's
|
|
20
|
+
`--permission-prompt-tool` from a private loopback MCP endpoint (random port and bearer
|
|
21
|
+
token) next to the task's own `mcpServers`, and raises `MCP_TOOL_TIMEOUT` so Claude waits
|
|
22
|
+
for a person. The permission mode (`acceptEdits` by default) still applies first. Approving
|
|
23
|
+
allows exactly the input Claude asked about; `capabilities.approvals` is now true.
|
|
24
|
+
- `codexLive()` answers Codex permission profile requests (`item/permissions/requestApproval`):
|
|
25
|
+
approving grants the requested categories for the current turn, denying grants none.
|
|
26
|
+
- `ApprovalRequest.scope`: `once` (also when absent) or `turn`, what approving grants.
|
|
27
|
+
- `onApproval(request, signal)`: `signal` aborts when the request is withdrawn, the turn ends,
|
|
28
|
+
the process exits or the task is stopped, so an app can close the question. Late answers,
|
|
29
|
+
like errors and a missing handler, deny. `createAgentSession` drops withdrawn requests from
|
|
30
|
+
`approvals`; `<AgentChat>` and `genaicode chat` label turn-scoped approvals.
|
|
31
|
+
- The vendor protocols for apps with their own driver or MCP server: `codexApprovals`,
|
|
32
|
+
`museApprovals` (for a `LiveSession`), `claudeApprovalTool`, `claudeApprovalArgs`,
|
|
33
|
+
`claudeApprovalEnv`, `claudeApprovalRequest` and `startClaudeApprovalServer`.
|
|
34
|
+
- `LiveSession.signal`, `LiveSession.approve(request, signal?)`, the request context
|
|
35
|
+
(`id`, `signal`) passed to `onRequest` handlers, `RpcPeer.cancel(id)`, and a `prepare`
|
|
36
|
+
for `cliAgent` that can be async and gets a `PrepareContext` (`emit`, `signal`).
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- `codexLive()` rejects approval requests from another thread or turn, and declines an answer
|
|
41
|
+
given after the turn ended or after the server withdrew the request.
|
|
42
|
+
- `museLive()` no longer falls back to an approve-for-session choice when Muse offers no
|
|
43
|
+
one-time approval; it denies instead. Requests of another session or turn are ignored, and an
|
|
44
|
+
approval resolved elsewhere (`approval/resolved`, `alreadyTerminal`) closes its question.
|
|
45
|
+
|
|
46
|
+
## 2.11.0 — 2026-10-06
|
|
4
47
|
|
|
5
48
|
### Added
|
|
6
49
|
|
package/README.md
CHANGED
|
@@ -106,23 +106,25 @@ for await (const event of run) {
|
|
|
106
106
|
const result = await run.result; // { status, ok, text, sessionId, usage, error, ... }
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
| Agent | Driver | Extras
|
|
110
|
-
| ---------------- | ----------------------------- |
|
|
111
|
-
| Claude Code | `claude()` | MCP servers, max turns, effort, cost
|
|
112
|
-
| Codex | `codex()`, `codexLive()` | MCP servers; live: `steer()`, approvals
|
|
113
|
-
| GitHub Copilot | `copilot()` | MCP servers, allow/deny tool patterns
|
|
114
|
-
| Cursor | `cursor()` | streamed text deltas
|
|
115
|
-
| Gemini CLI | `gemini()` | approval mode
|
|
116
|
-
| opencode | `opencode()` | `provider/model` ids, variants
|
|
117
|
-
| Mistral Vibe | `vibe()` | agent profile, max turns, max price
|
|
118
|
-
| Antigravity CLI | `antigravity()` | sandbox, effort, usage
|
|
119
|
-
| Muse | `muse()`, `museLive()` | max turns; live: `steer()`, approvals
|
|
120
|
-
| Your own CLI/API | `cliAgent()`, `hostedAgent()` | plug in any JSON-lines CLI or hosted agent
|
|
109
|
+
| Agent | Driver | Extras |
|
|
110
|
+
| ---------------- | ----------------------------- | ----------------------------------------------- |
|
|
111
|
+
| Claude Code | `claude()` | MCP servers, approvals, max turns, effort, cost |
|
|
112
|
+
| Codex | `codex()`, `codexLive()` | MCP servers; live: `steer()`, approvals |
|
|
113
|
+
| GitHub Copilot | `copilot()` | MCP servers, allow/deny tool patterns |
|
|
114
|
+
| Cursor | `cursor()` | streamed text deltas |
|
|
115
|
+
| Gemini CLI | `gemini()` | approval mode |
|
|
116
|
+
| opencode | `opencode()` | `provider/model` ids, variants |
|
|
117
|
+
| Mistral Vibe | `vibe()` | agent profile, max turns, max price |
|
|
118
|
+
| Antigravity CLI | `antigravity()` | sandbox, effort, usage |
|
|
119
|
+
| Muse | `muse()`, `museLive()` | max turns; live: `steer()`, approvals |
|
|
120
|
+
| Your own CLI/API | `cliAgent()`, `hostedAgent()` | plug in any JSON-lines CLI or hosted agent |
|
|
121
121
|
|
|
122
122
|
On top of the drivers:
|
|
123
123
|
|
|
124
|
-
- **Steer a running task** with `run.steer(text)
|
|
125
|
-
`onApproval` (live
|
|
124
|
+
- **Steer a running task** with `run.steer(text)` (live drivers), and answer permission
|
|
125
|
+
prompts with `onApproval` (Claude, live Codex and Muse).
|
|
126
|
+
- **Pick approval and sandbox policy** with `permissions: { approval, sandbox }` (or
|
|
127
|
+
`'yolo'`); each driver maps it to the agent's own flags and refuses what it cannot honor.
|
|
126
128
|
- **Attach MCP servers per task** with `mcpServers`. Header secrets stay out of argv.
|
|
127
129
|
- **Verify and repair**: `runWithVerify` runs your check (tests, lint) after the agent and
|
|
128
130
|
sends failures back for another attempt.
|
|
@@ -130,8 +132,8 @@ On top of the drivers:
|
|
|
130
132
|
from the agent's environment, so it bills its own login.
|
|
131
133
|
|
|
132
134
|
Importing `genaicode` never spawns anything; only `genaicode/agents` does. The agent uses
|
|
133
|
-
its own credentials
|
|
134
|
-
choose a model
|
|
135
|
+
its own credentials and billing, and its own permission settings unless `permissions` sets
|
|
136
|
+
them; any sandbox is the agent's own. GenAIcode does not choose a model or retry it. See [docs/agents.md](docs/agents.md) for events, options per
|
|
135
137
|
driver, and writing your own driver.
|
|
136
138
|
|
|
137
139
|
### From the command line
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PreparedRun } from './prepare.js';
|
|
1
|
+
import { type PrepareContext, type PreparedRun } from './prepare.js';
|
|
2
2
|
import { type AgentOutcome } from './runtime.js';
|
|
3
3
|
import type { AgentCapabilities, AgentEvent, AgentTask, CodingAgent } from './types.js';
|
|
4
4
|
export type { AgentOutcome } from './runtime.js';
|
|
@@ -15,8 +15,11 @@ export interface CliAgentDefinition {
|
|
|
15
15
|
capabilities?: AgentCapabilities;
|
|
16
16
|
/** Full argument list for a task, prompt included. */
|
|
17
17
|
args(task: AgentTask): string[];
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Replaces `args` when a task needs setup: extra env, temp files to clean up, a local
|
|
20
|
+
* server to start first. The process starts once it resolves.
|
|
21
|
+
*/
|
|
22
|
+
prepare?(task: AgentTask, context: PrepareContext): PreparedRun | Promise<PreparedRun>;
|
|
20
23
|
createParser(): AgentOutputParser;
|
|
21
24
|
/** Adjust the child environment (the caller's `task.env` or `process.env`). */
|
|
22
25
|
env?(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
package/dist/agents/cli-agent.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { planSpawnAsync } from './prepare.js';
|
|
2
2
|
import { startProcess } from './process.js';
|
|
3
|
-
import { invalidCwd, RunRecorder } from './runtime.js';
|
|
3
|
+
import { invalidCwd, linkAbort, RunRecorder } from './runtime.js';
|
|
4
4
|
/**
|
|
5
5
|
* Build a `CodingAgent` from a headless CLI: spawn, decode its JSON lines, and
|
|
6
6
|
* fold them into an `AgentResult`. Drivers such as `claude()` are thin definitions.
|
|
@@ -16,41 +16,63 @@ export function cliAgent(definition) {
|
|
|
16
16
|
function runCliAgent(definition, task) {
|
|
17
17
|
const recorder = new RunRecorder(definition.name, definition.command);
|
|
18
18
|
const iterate = () => recorder.events.iterate();
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
19
|
+
const lifetime = new AbortController();
|
|
20
|
+
linkAbort(task.signal, lifetime);
|
|
21
|
+
let handle;
|
|
22
|
+
let stopped = false;
|
|
23
|
+
const context = { emit: (event) => recorder.emit(event), signal: lifetime.signal };
|
|
24
|
+
const start = (plan) => {
|
|
25
|
+
const parser = definition.createParser();
|
|
26
|
+
const started = startProcess({
|
|
27
|
+
command: definition.command,
|
|
28
|
+
args: plan.args,
|
|
29
|
+
cwd: task.cwd,
|
|
30
|
+
env: plan.env,
|
|
31
|
+
timeoutMs: task.timeoutMs,
|
|
32
|
+
signal: task.signal,
|
|
33
|
+
onLine(line) {
|
|
34
|
+
let value;
|
|
35
|
+
try {
|
|
36
|
+
value = JSON.parse(line);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
recorder.emit({ type: 'raw', line });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
for (const event of parser.event(value))
|
|
43
|
+
recorder.emit(event);
|
|
44
|
+
},
|
|
45
|
+
onStderr: (text) => recorder.emit({ type: 'stderr', text }),
|
|
46
|
+
});
|
|
47
|
+
handle = started;
|
|
48
|
+
// A consumer that falls behind pauses the agent instead of buffering its output without bound.
|
|
49
|
+
recorder.events.onPressure = (paused) => (paused ? started.pause() : started.resume());
|
|
50
|
+
return started.exit.then((exit) => {
|
|
51
|
+
lifetime.abort();
|
|
50
52
|
plan.cleanup();
|
|
51
53
|
return recorder.finish(exit, parser.outcome?.());
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
const result = planSpawnAsync(definition, task, invalidCwd(task.cwd), context).then((plan) => {
|
|
57
|
+
if (!plan.ok) {
|
|
58
|
+
lifetime.abort();
|
|
59
|
+
return recorder.finish({ exitCode: null, signal: null, reason: 'spawn-error', error: new Error(plan.error) }, undefined);
|
|
60
|
+
}
|
|
61
|
+
// Stopped while `prepare` was still running.
|
|
62
|
+
if (stopped || task.signal?.aborted) {
|
|
63
|
+
lifetime.abort();
|
|
64
|
+
plan.cleanup();
|
|
65
|
+
return recorder.finish({ exitCode: null, signal: null, reason: 'aborted' }, undefined);
|
|
66
|
+
}
|
|
67
|
+
return start(plan);
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
result,
|
|
71
|
+
abort() {
|
|
72
|
+
stopped = true;
|
|
73
|
+
lifetime.abort();
|
|
74
|
+
handle?.kill();
|
|
75
|
+
},
|
|
54
76
|
[Symbol.asyncIterator]: iterate,
|
|
55
77
|
};
|
|
56
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-agent.js","sourceRoot":"","sources":["../../src/agents/cli-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli-agent.js","sourceRoot":"","sources":["../../src/agents/cli-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AgentOutputParser } from '../cli-agent.js';
|
|
2
|
-
import
|
|
2
|
+
import { type PermissionFlags } from '../permissions.js';
|
|
3
|
+
import type { AgentPermissions, AgentTask, CodingAgent } from '../types.js';
|
|
3
4
|
export interface AntigravityAgentOptions {
|
|
4
5
|
/** Executable name or path. Default `agy`. */
|
|
5
6
|
command?: string;
|
|
@@ -10,6 +11,11 @@ export interface AntigravityAgentOptions {
|
|
|
10
11
|
}
|
|
11
12
|
/** Antigravity CLI in print mode (`agy --output-format stream-json --print ...`). */
|
|
12
13
|
export declare function antigravity(options?: AntigravityAgentOptions): CodingAgent;
|
|
14
|
+
/**
|
|
15
|
+
* Antigravity flags for `permissions`: `workspace-write` runs terminal commands in its sandbox
|
|
16
|
+
* (`--sandbox`), `unrestricted` leaves it off. Approval policies are not offered.
|
|
17
|
+
*/
|
|
18
|
+
export declare function antigravityPermissionFlags(permissions: AgentPermissions): PermissionFlags;
|
|
13
19
|
export declare function antigravityArgs(task: AgentTask, options?: AntigravityAgentOptions): string[];
|
|
14
20
|
/** Decodes `--output-format stream-json`: `init`, `step_update` and `result` events. */
|
|
15
21
|
export declare function createAntigravityParser(): AgentOutputParser;
|
|
@@ -1,18 +1,43 @@
|
|
|
1
1
|
import { cliAgent } from '../cli-agent.js';
|
|
2
|
+
import { exclusiveOption, resolvePermissions } from '../permissions.js';
|
|
2
3
|
import { isObject, numberField, stringField } from './json.js';
|
|
3
4
|
/** Antigravity CLI in print mode (`agy --output-format stream-json --print ...`). */
|
|
4
5
|
export function antigravity(options = {}) {
|
|
5
6
|
return cliAgent({
|
|
6
7
|
name: 'antigravity',
|
|
7
8
|
command: options.command ?? 'agy',
|
|
8
|
-
capabilities: {
|
|
9
|
+
capabilities: {
|
|
10
|
+
effort: ['low', 'medium', 'high'],
|
|
11
|
+
usage: true,
|
|
12
|
+
permissions: { sandbox: ['workspace-write', 'unrestricted'] },
|
|
13
|
+
},
|
|
9
14
|
args: (task) => antigravityArgs(task, options),
|
|
10
15
|
createParser: createAntigravityParser,
|
|
11
16
|
});
|
|
12
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Antigravity flags for `permissions`: `workspace-write` runs terminal commands in its sandbox
|
|
20
|
+
* (`--sandbox`), `unrestricted` leaves it off. Approval policies are not offered.
|
|
21
|
+
*/
|
|
22
|
+
export function antigravityPermissionFlags(permissions) {
|
|
23
|
+
const { approval, sandbox } = permissions;
|
|
24
|
+
if (approval)
|
|
25
|
+
throw new Error(`antigravity cannot run with permissions.approval '${approval}'.`);
|
|
26
|
+
if (sandbox === 'read-only')
|
|
27
|
+
throw new Error("antigravity cannot run with permissions.sandbox 'read-only'.");
|
|
28
|
+
return {
|
|
29
|
+
args: sandbox === 'workspace-write' ? ['--sandbox'] : [],
|
|
30
|
+
replaces: sandbox ? { '--sandbox': 'flag' } : {},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
13
33
|
export function antigravityArgs(task, options = {}) {
|
|
14
34
|
const args = ['--mode', options.mode ?? 'accept-edits'];
|
|
15
|
-
|
|
35
|
+
const permissions = resolvePermissions(task.permissions);
|
|
36
|
+
exclusiveOption('antigravity', 'sandbox', options.sandbox !== undefined, 'sandbox', !!permissions.sandbox);
|
|
37
|
+
const flags = antigravityPermissionFlags(permissions);
|
|
38
|
+
if (permissions.sandbox)
|
|
39
|
+
args.push(...flags.args);
|
|
40
|
+
else if (options.sandbox ?? true)
|
|
16
41
|
args.push('--sandbox');
|
|
17
42
|
args.push('--output-format', 'stream-json');
|
|
18
43
|
if (task.model)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/agents/drivers/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA6C,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/agents/drivers/antigravity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { PermissionFlags } from '../permissions.js';
|
|
2
|
+
import type { AgentPermissions, ApprovalHandler, ApprovalRequest, SandboxPolicy } from '../types.js';
|
|
3
|
+
import { type JsonObject } from './json.js';
|
|
4
|
+
/** Name of the permission prompt tool `claudeApprovalTool` serves. */
|
|
5
|
+
export declare const CLAUDE_APPROVAL_TOOL = "approve";
|
|
6
|
+
/** An MCP `tools/call` result. */
|
|
7
|
+
export interface McpToolResult {
|
|
8
|
+
content: {
|
|
9
|
+
type: 'text';
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Claude Code's permission prompt tool (`--permission-prompt-tool`) as an MCP tool an app
|
|
16
|
+
* can serve from its own MCP server. Claude calls it with the tool name and input it wants
|
|
17
|
+
* to use; the answer allows exactly that input, or denies.
|
|
18
|
+
*/
|
|
19
|
+
export interface ClaudeApprovalTool {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
inputSchema: JsonObject;
|
|
23
|
+
/**
|
|
24
|
+
* Answer one call: ask `onApproval`, then reply in Claude's format. Malformed arguments,
|
|
25
|
+
* a missing or throwing handler, and `signal` aborting (the caller disconnected) all deny.
|
|
26
|
+
*/
|
|
27
|
+
call(args: unknown, signal?: AbortSignal): Promise<McpToolResult>;
|
|
28
|
+
}
|
|
29
|
+
export interface ClaudeApprovalToolOptions {
|
|
30
|
+
/** Tool name. Default `approve`. */
|
|
31
|
+
name?: string;
|
|
32
|
+
/**
|
|
33
|
+
* The run's `permissions.sandbox`: requests that would step outside it are denied without
|
|
34
|
+
* asking (see `claudeSandboxRefuses`). Needs `cwd`.
|
|
35
|
+
*/
|
|
36
|
+
sandbox?: SandboxPolicy;
|
|
37
|
+
/** The run's working directory. */
|
|
38
|
+
cwd?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Build the permission prompt tool around an approval handler. */
|
|
41
|
+
export declare function claudeApprovalTool(onApproval: ApprovalHandler | undefined, options?: ClaudeApprovalToolOptions): ClaudeApprovalTool;
|
|
42
|
+
/** The approval request for one permission prompt tool call, or undefined when the call is malformed. */
|
|
43
|
+
export declare function claudeApprovalRequest(args: unknown): ApprovalRequest | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a permission prompt asks for something outside `sandbox`, so neither a person nor
|
|
46
|
+
* `auto-approve` may grant it. `read-only`: anything but a reading tool, `ExitPlanMode`
|
|
47
|
+
* included. `workspace-write`: an edit outside `cwd`, and any `Bash` prompt (Claude's sandbox
|
|
48
|
+
* runs sandboxed commands without asking, so a prompt means an unsandboxed one).
|
|
49
|
+
*/
|
|
50
|
+
export declare function claudeSandboxRefuses(args: unknown, sandbox: SandboxPolicy, cwd: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Claude Code flags for `permissions`. `read-only` is plan mode; `workspace-write` turns on
|
|
53
|
+
* Claude's sandbox for Bash (writes limited to `cwd` and temp, see `--settings`), with edits in
|
|
54
|
+
* `cwd` accepted; `unrestricted` turns the sandbox off. `ask` and `auto-approve` need the
|
|
55
|
+
* permission prompt tool (`claudeApprovalTool` with the same sandbox); `deny` runs without it,
|
|
56
|
+
* so Claude refuses what it would have asked about.
|
|
57
|
+
*/
|
|
58
|
+
export declare function claudePermissionFlags(permissions: AgentPermissions): PermissionFlags;
|
|
59
|
+
/**
|
|
60
|
+
* Environment for a Claude process whose permission prompts wait on a person. Claude gives up
|
|
61
|
+
* on an MCP tool call after 60 s by default (`MCP_TOOL_TIMEOUT`), which would fail the tool
|
|
62
|
+
* call while the question is still open. Empty when `env` already sets a timeout.
|
|
63
|
+
*/
|
|
64
|
+
export declare function claudeApprovalEnv(env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
65
|
+
/** Claude Code arguments that route its permission prompts to `tool` on MCP server `server`. */
|
|
66
|
+
export declare function claudeApprovalArgs(server: string, tool?: string): string[];
|
|
67
|
+
export interface ClaudeApprovalServer {
|
|
68
|
+
/** The MCP server to add to Claude's `--mcp-config`. Its bearer token is in `headers`. */
|
|
69
|
+
server: {
|
|
70
|
+
name: string;
|
|
71
|
+
url: string;
|
|
72
|
+
headers: Record<string, string>;
|
|
73
|
+
};
|
|
74
|
+
/** `--permission-prompt-tool` for that server. */
|
|
75
|
+
args: string[];
|
|
76
|
+
/** Stop serving. Open questions are withdrawn (their signals abort) and denied. */
|
|
77
|
+
close(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Serve `claudeApprovalTool` alone over MCP (streamable HTTP, JSON responses) on a random
|
|
81
|
+
* loopback port, behind a random bearer token. `name` is the MCP server name. For apps that
|
|
82
|
+
* have no MCP server of their own to mount the tool on; `claude()` uses it for `task.onApproval`.
|
|
83
|
+
*/
|
|
84
|
+
export declare function startClaudeApprovalServer(onApproval: ApprovalHandler | undefined, options?: {
|
|
85
|
+
name?: string;
|
|
86
|
+
} & Pick<ClaudeApprovalToolOptions, 'sandbox' | 'cwd'>): Promise<ClaudeApprovalServer>;
|