@rarebit-one/harness-kernel 0.9.0 → 0.10.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/README.md +32 -0
- package/dist/engines/acp.d.ts +10 -0
- package/dist/engines/acp.d.ts.map +1 -1
- package/dist/engines/acp.js +8 -1
- package/dist/engines/acp.js.map +1 -1
- package/dist/engines/acpDriver.d.ts +2 -0
- package/dist/engines/acpDriver.d.ts.map +1 -1
- package/dist/engines/acpDriver.js +6 -1
- package/dist/engines/acpDriver.js.map +1 -1
- package/dist/engines/claudeCode.d.ts +6 -4
- package/dist/engines/claudeCode.d.ts.map +1 -1
- package/dist/engines/claudeCode.js +8 -5
- package/dist/engines/claudeCode.js.map +1 -1
- package/dist/engines/claudeCodeDriver.d.ts +8 -0
- package/dist/engines/claudeCodeDriver.d.ts.map +1 -1
- package/dist/engines/claudeCodeDriver.js +14 -1
- package/dist/engines/claudeCodeDriver.js.map +1 -1
- package/dist/engines/codex.d.ts.map +1 -1
- package/dist/engines/codex.js +2 -1
- package/dist/engines/codex.js.map +1 -1
- package/dist/engines/codexDriver.d.ts +2 -0
- package/dist/engines/codexDriver.d.ts.map +1 -1
- package/dist/engines/codexDriver.js +15 -9
- package/dist/engines/codexDriver.js.map +1 -1
- package/dist/engines/isolation.d.ts +45 -0
- package/dist/engines/isolation.d.ts.map +1 -0
- package/dist/engines/isolation.js +119 -0
- package/dist/engines/isolation.js.map +1 -0
- package/dist/engines/types.d.ts +9 -0
- package/dist/engines/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -329,6 +329,38 @@ if (!support.ok) throw new Error(support.reason) // fail loud, never silently de
|
|
|
329
329
|
const { text } = await engine.run(spec, { log: console.error })
|
|
330
330
|
```
|
|
331
331
|
|
|
332
|
+
The out-of-process engines (`claude-code`, `codex`, ACP) hand the run to a
|
|
333
|
+
harness that has its own shell and approves its own actions, so the box it runs
|
|
334
|
+
in is the only boundary. Each refuses in `supports()` unless it is enabled
|
|
335
|
+
(`RUNNER_ENABLE_<ENGINE>=1`), the workflow asks for the `ephemeral` profile,
|
|
336
|
+
**and** the run has at least `container` isolation. Two parties must assert
|
|
337
|
+
that last condition, and the weaker claim wins:
|
|
338
|
+
|
|
339
|
+
- the caller, through `RunSpec.isolation` (`none` | `container` | `vm`), stating
|
|
340
|
+
what it placed the run on;
|
|
341
|
+
- the host process, through `RUNNER_ISOLATION`, set by its own entrypoint and
|
|
342
|
+
never taken from a payload.
|
|
343
|
+
|
|
344
|
+
The harness's child process gets an allowlisted environment rather than the
|
|
345
|
+
host's whole one: `PATH`, `HOME`, locale, temp, CA and proxy variables, plus
|
|
346
|
+
that harness's own prefixes (`ANTHROPIC_`/`CLAUDE_` for claude-code,
|
|
347
|
+
`OPENAI_`/`CODEX_` for codex, and `AcpAgentSpec.inheritEnvPrefixes` for an ACP
|
|
348
|
+
agent). A prefix match never passes a credential-looking name (`*KEY*`,
|
|
349
|
+
`*TOKEN*`, `*SECRET*`, …). The one provider key an engine needs is passed
|
|
350
|
+
explicitly instead: claude-code and codex take the run's BYO key, falling back
|
|
351
|
+
to the host's `ANTHROPIC_API_KEY` / `OPENAI_API_KEY`; an ACP agent gets only
|
|
352
|
+
the run's keys. Every other host credential stays with the host. That filter is
|
|
353
|
+
best effort, so keep `inheritEnvPrefixes` narrow. The proxy variables pass
|
|
354
|
+
unfiltered, so a proxy URL with embedded credentials is visible to the harness.
|
|
355
|
+
|
|
356
|
+
Behaviour that follows from this, since 0.10.0:
|
|
357
|
+
|
|
358
|
+
- Claude Code on Bedrock or Vertex (`AWS_*`, `GOOGLE_*`) is not reachable
|
|
359
|
+
through these engines.
|
|
360
|
+
- Claude Code subscription auth (`CLAUDE_CODE_OAUTH_TOKEN`) is not passed; use
|
|
361
|
+
an API key.
|
|
362
|
+
- An ACP agent no longer falls back to the host's provider keys.
|
|
363
|
+
|
|
332
364
|
### The kernel defines no domain tools
|
|
333
365
|
|
|
334
366
|
`primitiveTools()` is strictly generic — sandboxed shell/file/HTTP access. Tools
|
package/dist/engines/acp.d.ts
CHANGED
|
@@ -25,6 +25,13 @@ export interface AcpAgentSpec {
|
|
|
25
25
|
args(spec: RunSpec): string[];
|
|
26
26
|
/** Extra process env — e.g. the provider credentials the agent reads for itself. */
|
|
27
27
|
env(spec: RunSpec): Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Prefixes of host env vars the agent may inherit (its own configuration).
|
|
30
|
+
* Credential-looking names under them are still dropped, but that filter is
|
|
31
|
+
* best effort (see `childEnv`), so keep each prefix as narrow as the agent's
|
|
32
|
+
* own settings.
|
|
33
|
+
*/
|
|
34
|
+
readonly inheritEnvPrefixes?: readonly string[];
|
|
28
35
|
}
|
|
29
36
|
/**
|
|
30
37
|
* Driver-neutral options the engine derives from a {@link RunSpec} and hands to
|
|
@@ -34,7 +41,10 @@ export interface AcpAgentSpec {
|
|
|
34
41
|
export interface AcpOptions {
|
|
35
42
|
command: string;
|
|
36
43
|
args: string[];
|
|
44
|
+
/** Env the agent gets on top of the allowlisted host env (see `childEnv`). */
|
|
37
45
|
env: Record<string, string>;
|
|
46
|
+
/** Prefixes of host env vars the agent may inherit; from {@link AcpAgentSpec}. */
|
|
47
|
+
inheritEnvPrefixes?: readonly string[];
|
|
38
48
|
/** The prepared sandbox working tree — the agent's cwd and ACP `session/new` cwd. */
|
|
39
49
|
cwd: string;
|
|
40
50
|
/** The run's MCP servers (connectors + the capability server) for `session/new`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/engines/acp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/engines/acp.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/acp.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { refusePrivateRun } from "../private.js";
|
|
2
|
+
import { refuseUnisolated } from "./isolation.js";
|
|
2
3
|
import { mkdtemp, rm, stat } from "node:fs/promises";
|
|
3
4
|
import { tmpdir } from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
@@ -54,7 +55,7 @@ export class AcpEngine {
|
|
|
54
55
|
reason: `${this.name} engine requires the ephemeral runner profile (per-run container isolation)`,
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
|
-
return { ok: true };
|
|
58
|
+
return refuseUnisolated(this.name, spec) ?? { ok: true };
|
|
58
59
|
}
|
|
59
60
|
async run(spec, ctx) {
|
|
60
61
|
// Emissions land OUTSIDE the sandbox so the bookkeeping file is never captured
|
|
@@ -82,6 +83,9 @@ export class AcpEngine {
|
|
|
82
83
|
// The capability env also rides on the process env so the stdio capability
|
|
83
84
|
// server inherits it regardless of how the agent forwards `session/new` env.
|
|
84
85
|
env: { ...this.agent.env(spec), ...capabilityEnv },
|
|
86
|
+
...(this.agent.inheritEnvPrefixes
|
|
87
|
+
? { inheritEnvPrefixes: this.agent.inheritEnvPrefixes }
|
|
88
|
+
: {}),
|
|
85
89
|
cwd: spec.workdir,
|
|
86
90
|
mcpServers: toAcpMcpServers(servers),
|
|
87
91
|
prompt: buildPrompt(spec),
|
|
@@ -208,6 +212,9 @@ export const EVE_AGENT = {
|
|
|
208
212
|
enableEnv: "RUNNER_ENABLE_EVE",
|
|
209
213
|
command: "eve",
|
|
210
214
|
args: () => ["acp"],
|
|
215
|
+
// Provider settings a BYO key does not cover (a base URL, an org id) and
|
|
216
|
+
// eve's own configuration.
|
|
217
|
+
inheritEnvPrefixes: ["ANTHROPIC_", "OPENAI_", "OPENROUTER_", "EVE_"],
|
|
211
218
|
env: (spec) => {
|
|
212
219
|
const env = {};
|
|
213
220
|
const creds = spec.provider.credentials;
|
package/dist/engines/acp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/engines/acp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAA8B,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,YAAY,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/engines/acp.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ import type { AcpClientEvents, AcpOptions, AcpOutcome } from "./acp.js";
|
|
|
6
6
|
* `end_turn` must not relabel a finished run as canceled or timed out.
|
|
7
7
|
*/
|
|
8
8
|
export declare function promptOutcome(stopReason: string, stoppedBy: StoppedBy | undefined): AcpOutcome;
|
|
9
|
+
/** The agent process environment: an allowlist, never the host's whole one (see `childEnv`). */
|
|
10
|
+
export declare function acpEnv(opts: Pick<AcpOptions, "env" | "inheritEnvPrefixes">, env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
9
11
|
/**
|
|
10
12
|
* The default ACP driver: the single integration boundary to an ACP agent
|
|
11
13
|
* subprocess, mirroring `defaultCodexDriver`'s injectable shape. It spawns the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpDriver.d.ts","sourceRoot":"","sources":["../../src/engines/acpDriver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"acpDriver.d.ts","sourceRoot":"","sources":["../../src/engines/acpDriver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGvE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAE9F;AAKD,gGAAgG;AAChG,wBAAgB,MAAM,CACpB,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,oBAAoB,CAAC,EACpD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,UAAU,CAAC,CA6GrB"}
|
|
@@ -2,6 +2,7 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { Readable, Writable } from "node:stream";
|
|
3
3
|
import { ClientSideConnection, ndJsonStream, PROTOCOL_VERSION, } from "@zed-industries/agent-client-protocol";
|
|
4
4
|
import { runStop } from "../signals.js";
|
|
5
|
+
import { childEnv } from "./isolation.js";
|
|
5
6
|
/**
|
|
6
7
|
* The outcome of a prompt turn that returned. A stop is credited only when the
|
|
7
8
|
* agent actually answered `cancelled`: a stop that lands just after a clean
|
|
@@ -12,6 +13,10 @@ export function promptOutcome(stopReason, stoppedBy) {
|
|
|
12
13
|
}
|
|
13
14
|
/** How long an agent gets to honour `session/cancel` before it is killed. */
|
|
14
15
|
const DEFAULT_CANCEL_GRACE_MS = 5_000;
|
|
16
|
+
/** The agent process environment: an allowlist, never the host's whole one (see `childEnv`). */
|
|
17
|
+
export function acpEnv(opts, env = process.env) {
|
|
18
|
+
return childEnv(opts.inheritEnvPrefixes ?? [], opts.env, env);
|
|
19
|
+
}
|
|
15
20
|
/**
|
|
16
21
|
* The default ACP driver: the single integration boundary to an ACP agent
|
|
17
22
|
* subprocess, mirroring `defaultCodexDriver`'s injectable shape. It spawns the
|
|
@@ -38,7 +43,7 @@ const DEFAULT_CANCEL_GRACE_MS = 5_000;
|
|
|
38
43
|
export async function defaultAcpDriver(opts, events) {
|
|
39
44
|
const child = spawn(opts.command, opts.args, {
|
|
40
45
|
cwd: opts.cwd,
|
|
41
|
-
env:
|
|
46
|
+
env: acpEnv(opts),
|
|
42
47
|
stdio: ["pipe", "pipe", "pipe"],
|
|
43
48
|
});
|
|
44
49
|
let stderr = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpDriver.js","sourceRoot":"","sources":["../../src/engines/acpDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,GAEjB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"acpDriver.js","sourceRoot":"","sources":["../../src/engines/acpDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,10 +63,12 @@ export declare const defaultCapabilityTools: CapabilityToolFactory;
|
|
|
63
63
|
* captured by the caller's change-set diff — the engine returns prose only.
|
|
64
64
|
*
|
|
65
65
|
* Claude Code runs arbitrary bash, so it must not run on the warm shared runner.
|
|
66
|
-
* `supports()` refuses unless (a) the operator has explicitly enabled it
|
|
67
|
-
* the
|
|
68
|
-
*
|
|
69
|
-
*
|
|
66
|
+
* `supports()` refuses unless (a) the operator has explicitly enabled it, (b)
|
|
67
|
+
* the workflow asks for the `ephemeral` runner profile, and (c) the run really
|
|
68
|
+
* has at least container isolation, asserted by both the caller and the host
|
|
69
|
+
* (see `refuseUnisolated`). The box, not a human, is the safety boundary.
|
|
70
|
+
* The SDK is loaded lazily by the driver, so this module stays cheap to import
|
|
71
|
+
* on the warm runner.
|
|
70
72
|
*/
|
|
71
73
|
export declare class ClaudeCodeEngine implements AgentEngine {
|
|
72
74
|
readonly name = "claude-code";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/engines/claudeCode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/engines/claudeCode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAElG,OAAO,EAAuB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAElG;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAA;IACX,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;sFACkF;IAClF,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B;gFAC4E;IAC5E,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB;8DAC0D;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;AAEL;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,aAAa,CAAC,iBAAiB,CAAC,CAAA;AAK5F;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,cAAc,EAAE,CAAA;AAEhF,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,EAAE,qBAA2D,CAAA;AAEhG;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,iBAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;gBAGrD,KAAK,GAAE,gBAA0C,EACjD,eAAe,GAAE,qBAA8C;IAMjE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa;IAmBhC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA+DpE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { refusePrivateRun } from "../private.js";
|
|
2
|
+
import { refuseUnisolated } from "./isolation.js";
|
|
2
3
|
import { harnessOutcome } from "../signals.js";
|
|
3
4
|
import { defaultClaudeCodeDriver } from "./claudeCodeDriver.js";
|
|
4
5
|
import { writeFileCapability } from "./capability.js";
|
|
@@ -12,10 +13,12 @@ export const defaultCapabilityTools = (ctx) => [writeFileCapability(ctx)];
|
|
|
12
13
|
* captured by the caller's change-set diff — the engine returns prose only.
|
|
13
14
|
*
|
|
14
15
|
* Claude Code runs arbitrary bash, so it must not run on the warm shared runner.
|
|
15
|
-
* `supports()` refuses unless (a) the operator has explicitly enabled it
|
|
16
|
-
* the
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* `supports()` refuses unless (a) the operator has explicitly enabled it, (b)
|
|
17
|
+
* the workflow asks for the `ephemeral` runner profile, and (c) the run really
|
|
18
|
+
* has at least container isolation, asserted by both the caller and the host
|
|
19
|
+
* (see `refuseUnisolated`). The box, not a human, is the safety boundary.
|
|
20
|
+
* The SDK is loaded lazily by the driver, so this module stays cheap to import
|
|
21
|
+
* on the warm runner.
|
|
19
22
|
*/
|
|
20
23
|
export class ClaudeCodeEngine {
|
|
21
24
|
name = "claude-code";
|
|
@@ -41,7 +44,7 @@ export class ClaudeCodeEngine {
|
|
|
41
44
|
reason: "claude-code engine requires the ephemeral runner profile (per-run container isolation)",
|
|
42
45
|
};
|
|
43
46
|
}
|
|
44
|
-
return { ok: true };
|
|
47
|
+
return refuseUnisolated("claude-code", spec) ?? { ok: true };
|
|
45
48
|
}
|
|
46
49
|
async run(spec, ctx) {
|
|
47
50
|
const apiKey = spec.provider.credentials?.anthropic ?? process.env.ANTHROPIC_API_KEY;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/engines/claudeCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/engines/claudeCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAA;AAG9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAA+C,MAAM,iBAAiB,CAAA;AAiDlG,MAAM,aAAa,GAAG,iBAAiB,CAAA;AACvC,MAAM,YAAY,GAAG,IAAI,CAAA;AAWzB,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAA0B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;AAEhG;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,aAAa,CAAA;IAEZ,KAAK,CAAkB;IACvB,eAAe,CAAuB;IAEvD,YACE,QAA0B,uBAAuB,EACjD,kBAAyC,sBAAsB;QAE/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IACxC,CAAC;IAED,QAAQ,CAAC,IAAa;QACpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QACrD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG,EAAE,CAAC;YAClD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,kEAAkE;aAC3E,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;YAClD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EACJ,wFAAwF;aAC3F,CAAA;QACH,CAAC;QACD,OAAO,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAa,EAAE,GAAkB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,aAAa,CAAA;QAClD,MAAM,YAAY,GAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACxE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK;YACxB,CAAC,CAAC,SAAS,CAAA;QAEf,qEAAqE;QACrE,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QAEF,MAAM,OAAO,GAAsB;YACjC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC;YACzB,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK;YACL,QAAQ;YACR,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAA;QAED,GAAG,CAAC,GAAG,CAAC,8BAA8B,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAEjE,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,iBAAiB,GAAG,EAAE,CAAA;QAC1B,IAAI,OAAO,GAAe,WAAW,CAAA;QAErC,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACjB,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAA;wBAChC,GAAG,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;oBACjE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,OAAO,CAAC,IAAI,CAAA;oBACxB,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;oBAC5D,IAAI,OAAO,CAAC,SAAS;wBAAE,GAAG,CAAC,GAAG,CAAC,yBAAyB,OAAO,GAAG,CAAC,CAAA;yBAC9D,IAAI,OAAO,CAAC,OAAO;wBAAE,GAAG,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,6EAA6E;YAC7E,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,GAAG,CAAA;YACnC,OAAO,GAAG,UAAU,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,WAAW,CAAA;QACjE,OAAO;YACL,IAAI,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,aAAa;YACtE,OAAO;SACR,CAAA;IACH,CAAC;CACF;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACzD,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,aAAa;QAC5F,EAAE;QACF,WAAW;QACX,SAAS;QACT,MAAM;QACN,KAAK;QACL,EAAE;QACF,iFAAiF;QACjF,iFAAiF;QACjF,+CAA+C;KAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAA;AAC7D,CAAC"}
|
|
@@ -12,6 +12,14 @@ import type { ClaudeCodeMessage, ClaudeCodeOptions } from "./claudeCode.js";
|
|
|
12
12
|
* not an interactive human, is the safety boundary.
|
|
13
13
|
*/
|
|
14
14
|
export declare function defaultClaudeCodeDriver(opts: ClaudeCodeOptions): AsyncIterable<ClaudeCodeMessage>;
|
|
15
|
+
/**
|
|
16
|
+
* The CLI's environment: an allowlist, never the host's whole one. The CLI runs
|
|
17
|
+
* arbitrary bash, so anything the host process holds (its own credentials,
|
|
18
|
+
* callback tokens) would otherwise be one `env` away from the model. Cloud
|
|
19
|
+
* back ends that read `AWS_*`/`GOOGLE_*` (Bedrock, Vertex) are not reached
|
|
20
|
+
* through this engine.
|
|
21
|
+
*/
|
|
22
|
+
export declare function claudeCodeEnv(opts: Pick<ClaudeCodeOptions, "apiKey">, env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
15
23
|
type ResultMessage = Extract<ClaudeCodeMessage, {
|
|
16
24
|
kind: "result";
|
|
17
25
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeDriver.d.ts","sourceRoot":"","sources":["../../src/engines/claudeCodeDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"claudeCodeDriver.d.ts","sourceRoot":"","sources":["../../src/engines/claudeCodeDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAK3E;;;;;;;;;;GAUG;AACH,wBAAuB,uBAAuB,CAC5C,IAAI,EAAE,iBAAiB,GACtB,aAAa,CAAC,iBAAiB,CAAC,CAkElC;AAKD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED,KAAK,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,aAAa,GAAG,SAAS,CAG3B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { runStop } from "../signals.js";
|
|
2
2
|
import { CAPABILITY_SERVER_NAME, capabilitySdkServer, capabilityToolIds } from "./capabilityMcp.js";
|
|
3
3
|
import { connectorServers } from "./connectorMcp.js";
|
|
4
|
+
import { childEnv } from "./isolation.js";
|
|
4
5
|
/**
|
|
5
6
|
* The default Claude Code driver: runs the Anthropic Agent SDK's `query()` (which
|
|
6
7
|
* spawns the Claude Code CLI) against the prepared workdir and normalizes its
|
|
@@ -51,7 +52,7 @@ export async function* defaultClaudeCodeDriver(opts) {
|
|
|
51
52
|
permissionMode: "bypassPermissions",
|
|
52
53
|
allowDangerouslySkipPermissions: true,
|
|
53
54
|
abortController: controller,
|
|
54
|
-
env:
|
|
55
|
+
env: claudeCodeEnv(opts),
|
|
55
56
|
...(hasMcpServers ? { mcpServers } : {}),
|
|
56
57
|
...(allowedTools ? { allowedTools } : {}),
|
|
57
58
|
};
|
|
@@ -81,6 +82,18 @@ export async function* defaultClaudeCodeDriver(opts) {
|
|
|
81
82
|
if (stopped)
|
|
82
83
|
yield stopped;
|
|
83
84
|
}
|
|
85
|
+
/** Host env the Claude Code CLI may inherit: its own and its provider's settings. */
|
|
86
|
+
const CLAUDE_ENV_PREFIXES = ["ANTHROPIC_", "CLAUDE_"];
|
|
87
|
+
/**
|
|
88
|
+
* The CLI's environment: an allowlist, never the host's whole one. The CLI runs
|
|
89
|
+
* arbitrary bash, so anything the host process holds (its own credentials,
|
|
90
|
+
* callback tokens) would otherwise be one `env` away from the model. Cloud
|
|
91
|
+
* back ends that read `AWS_*`/`GOOGLE_*` (Bedrock, Vertex) are not reached
|
|
92
|
+
* through this engine.
|
|
93
|
+
*/
|
|
94
|
+
export function claudeCodeEnv(opts, env = process.env) {
|
|
95
|
+
return childEnv(CLAUDE_ENV_PREFIXES, opts.apiKey ? { ANTHROPIC_API_KEY: opts.apiKey } : {}, env);
|
|
96
|
+
}
|
|
84
97
|
/**
|
|
85
98
|
* The result to report after a stop, or `undefined` when there is nothing to
|
|
86
99
|
* add: no stop happened, or the harness had already finished cleanly. After an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeDriver.js","sourceRoot":"","sources":["../../src/engines/claudeCodeDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"claudeCodeDriver.js","sourceRoot":"","sources":["../../src/engines/claudeCodeDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAMlG;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAA;IACX,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB;+CAC2C;IAC3C,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;AAEL,yEAAyE;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,aAAa,CAAC,YAAY,CAAC,CAAA;AAK7E,iFAAiF;AAEjF;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,WAAU;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAE/C;;;;;OAKG;gBACS,KAAK,EAAE,WAAW,YAAqB,EAAE,sBAAsB,EAAE,MAAM;IAKnF,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa;IAehC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAyGpE"}
|
package/dist/engines/codex.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { refusePrivateRun } from "../private.js";
|
|
2
|
+
import { refuseUnisolated } from "./isolation.js";
|
|
2
3
|
import { mkdtemp, rm, stat } from "node:fs/promises";
|
|
3
4
|
import { tmpdir } from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
@@ -51,7 +52,7 @@ export class CodexEngine {
|
|
|
51
52
|
reason: "codex engine requires the ephemeral runner profile (per-run container isolation)",
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
|
-
return { ok: true };
|
|
55
|
+
return refuseUnisolated("codex", spec) ?? { ok: true };
|
|
55
56
|
}
|
|
56
57
|
async run(spec, ctx) {
|
|
57
58
|
const apiKey = spec.provider.credentials?.openai ?? process.env.OPENAI_API_KEY;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAA8B,MAAM,mBAAmB,CAAA;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAwDrD,MAAM,aAAa,GAAG,aAAa,CAAA;AACnC,MAAM,YAAY,GAAG,IAAI,CAAA;AAEzB,iFAAiF;AAEjF;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,OAAO,CAAA;IAEN,KAAK,CAAa;IAClB,sBAAsB,CAAQ;IAE/C;;;;;OAKG;IACH,YAAY,QAAqB,kBAAkB,EAAE,sBAA8B;QACjF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;IACtD,CAAC;IAED,QAAQ,CAAC,IAAa;QACpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG,EAAE,CAAC;YAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAA;QACtF,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;YAClD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,kFAAkF;aAC3F,CAAA;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/engines/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CodexMessage, CodexOptions } from "./codex.js";
|
|
2
|
+
/** The codex process environment: an allowlist, never the host's whole one (see `childEnv`). */
|
|
3
|
+
export declare function codexEnv(opts: Pick<CodexOptions, "codexHome" | "capabilityEnv" | "apiKey">, env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
2
4
|
/**
|
|
3
5
|
* The default codex driver: the single integration boundary to the OpenAI Codex
|
|
4
6
|
* CLI, mirroring claudeCodeDriver's injectable shape. It runs codex
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexDriver.d.ts","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"codexDriver.d.ts","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM5D,gGAAgG;AAChG,wBAAgB,QAAQ,CACtB,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC,EAClE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAuB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAiGzF"}
|
|
@@ -4,6 +4,20 @@ import { tmpdir } from "node:os";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { DEFAULT_STOP_GRACE_MS, terminateProcessGroup } from "../processGroup.js";
|
|
6
6
|
import { runStop } from "../signals.js";
|
|
7
|
+
import { childEnv } from "./isolation.js";
|
|
8
|
+
/** Host env the codex CLI may inherit: its own and its provider's settings. */
|
|
9
|
+
const CODEX_ENV_PREFIXES = ["OPENAI_", "CODEX_"];
|
|
10
|
+
/** The codex process environment: an allowlist, never the host's whole one (see `childEnv`). */
|
|
11
|
+
export function codexEnv(opts, env = process.env) {
|
|
12
|
+
return childEnv(CODEX_ENV_PREFIXES, {
|
|
13
|
+
CODEX_HOME: opts.codexHome,
|
|
14
|
+
// The capability stdio MCP server reads these from its env; set them on the
|
|
15
|
+
// codex process env so the spawned server inherits them even if codex does
|
|
16
|
+
// not forward the config.toml env table (belt-and-suspenders with that table).
|
|
17
|
+
...opts.capabilityEnv,
|
|
18
|
+
...(opts.apiKey ? { CODEX_API_KEY: opts.apiKey, OPENAI_API_KEY: opts.apiKey } : {}),
|
|
19
|
+
}, env);
|
|
20
|
+
}
|
|
7
21
|
/**
|
|
8
22
|
* The default codex driver: the single integration boundary to the OpenAI Codex
|
|
9
23
|
* CLI, mirroring claudeCodeDriver's injectable shape. It runs codex
|
|
@@ -67,15 +81,7 @@ export async function* defaultCodexDriver(opts) {
|
|
|
67
81
|
], {
|
|
68
82
|
cwd: opts.cwd,
|
|
69
83
|
detached: true,
|
|
70
|
-
env:
|
|
71
|
-
...process.env,
|
|
72
|
-
CODEX_HOME: opts.codexHome,
|
|
73
|
-
// The capability stdio MCP server reads these from its env; set them on the
|
|
74
|
-
// codex process env so the spawned server inherits them even if codex does
|
|
75
|
-
// not forward the config.toml env table (belt-and-suspenders with that table).
|
|
76
|
-
...opts.capabilityEnv,
|
|
77
|
-
...(opts.apiKey ? { CODEX_API_KEY: opts.apiKey, OPENAI_API_KEY: opts.apiKey } : {}),
|
|
78
|
-
},
|
|
84
|
+
env: codexEnv(opts),
|
|
79
85
|
stdio: ["pipe", "pipe", "pipe"],
|
|
80
86
|
});
|
|
81
87
|
const onStop = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexDriver.js","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"codexDriver.js","sourceRoot":"","sources":["../../src/engines/codexDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolation: how strongly the process running an engine is separated from
|
|
3
|
+
* every other run on the same host.
|
|
4
|
+
*
|
|
5
|
+
* An out-of-process engine (Claude Code, Codex, an ACP agent) hands the run to a
|
|
6
|
+
* vendor harness with its own shell and the whole filesystem, and approves every
|
|
7
|
+
* action itself. The only safety boundary such a run has is the box it runs in.
|
|
8
|
+
* So these engines refuse to run unless BOTH of these assert at least
|
|
9
|
+
* `container` isolation:
|
|
10
|
+
*
|
|
11
|
+
* - the caller, through {@link RunSpec.isolation} (what the dispatcher placed
|
|
12
|
+
* the run on), and
|
|
13
|
+
* - the host process, through the `RUNNER_ISOLATION` env var, set by the
|
|
14
|
+
* process's own entrypoint and never by a payload.
|
|
15
|
+
*
|
|
16
|
+
* The weaker of the two wins. A payload that claims `vm` while the process says
|
|
17
|
+
* `none` is a shared host, and a process that says `vm` cannot vouch for a
|
|
18
|
+
* payload that never asked. An unrecognised or absent value counts as `none`.
|
|
19
|
+
*/
|
|
20
|
+
/** Weakest first: one shared process, a container per run, a microVM per run. */
|
|
21
|
+
export declare const ISOLATION_LEVELS: readonly ["none", "container", "vm"];
|
|
22
|
+
export type Isolation = (typeof ISOLATION_LEVELS)[number];
|
|
23
|
+
/** The isolation a run actually has: the weaker of the caller's and the host's claim. */
|
|
24
|
+
export declare function effectiveIsolation(spec: {
|
|
25
|
+
isolation?: string | undefined;
|
|
26
|
+
}, env?: NodeJS.ProcessEnv): Isolation;
|
|
27
|
+
/**
|
|
28
|
+
* The `supports()` refusal an out-of-process engine gives a run without at
|
|
29
|
+
* least container isolation, or `undefined` when the run has it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function refuseUnisolated(engine: string, spec: {
|
|
32
|
+
isolation?: string | undefined;
|
|
33
|
+
}, env?: NodeJS.ProcessEnv): {
|
|
34
|
+
ok: false;
|
|
35
|
+
reason: string;
|
|
36
|
+
} | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* The environment to spawn a vendor harness with: the base allowlist, any host
|
|
39
|
+
* var starting with one of `prefixes` (the harness's own configuration, e.g.
|
|
40
|
+
* `ANTHROPIC_BASE_URL`) that does not look like a credential, and then `extra`,
|
|
41
|
+
* which always wins and is the only way a credential reaches the harness. Never
|
|
42
|
+
* the host's whole environment.
|
|
43
|
+
*/
|
|
44
|
+
export declare function childEnv(prefixes: readonly string[], extra?: Record<string, string | undefined>, env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
45
|
+
//# sourceMappingURL=isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../../src/engines/isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,sCAAuC,CAAA;AACpE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAazD,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,SAAS,CAIX;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS3C;AAkDD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,EAC9C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolation: how strongly the process running an engine is separated from
|
|
3
|
+
* every other run on the same host.
|
|
4
|
+
*
|
|
5
|
+
* An out-of-process engine (Claude Code, Codex, an ACP agent) hands the run to a
|
|
6
|
+
* vendor harness with its own shell and the whole filesystem, and approves every
|
|
7
|
+
* action itself. The only safety boundary such a run has is the box it runs in.
|
|
8
|
+
* So these engines refuse to run unless BOTH of these assert at least
|
|
9
|
+
* `container` isolation:
|
|
10
|
+
*
|
|
11
|
+
* - the caller, through {@link RunSpec.isolation} (what the dispatcher placed
|
|
12
|
+
* the run on), and
|
|
13
|
+
* - the host process, through the `RUNNER_ISOLATION` env var, set by the
|
|
14
|
+
* process's own entrypoint and never by a payload.
|
|
15
|
+
*
|
|
16
|
+
* The weaker of the two wins. A payload that claims `vm` while the process says
|
|
17
|
+
* `none` is a shared host, and a process that says `vm` cannot vouch for a
|
|
18
|
+
* payload that never asked. An unrecognised or absent value counts as `none`.
|
|
19
|
+
*/
|
|
20
|
+
/** Weakest first: one shared process, a container per run, a microVM per run. */
|
|
21
|
+
export const ISOLATION_LEVELS = ["none", "container", "vm"];
|
|
22
|
+
/** The weakest level an out-of-process engine will run under. */
|
|
23
|
+
const MINIMUM = "container";
|
|
24
|
+
function parse(value) {
|
|
25
|
+
return ISOLATION_LEVELS.includes(value) ? value : "none";
|
|
26
|
+
}
|
|
27
|
+
function rank(level) {
|
|
28
|
+
return ISOLATION_LEVELS.indexOf(level);
|
|
29
|
+
}
|
|
30
|
+
/** The isolation a run actually has: the weaker of the caller's and the host's claim. */
|
|
31
|
+
export function effectiveIsolation(spec, env = process.env) {
|
|
32
|
+
const claimed = parse(spec.isolation);
|
|
33
|
+
const host = parse(env.RUNNER_ISOLATION);
|
|
34
|
+
return rank(claimed) <= rank(host) ? claimed : host;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The `supports()` refusal an out-of-process engine gives a run without at
|
|
38
|
+
* least container isolation, or `undefined` when the run has it.
|
|
39
|
+
*/
|
|
40
|
+
export function refuseUnisolated(engine, spec, env = process.env) {
|
|
41
|
+
const effective = effectiveIsolation(spec, env);
|
|
42
|
+
if (rank(effective) >= rank(MINIMUM))
|
|
43
|
+
return undefined;
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
reason: `${engine} engine requires at least ${MINIMUM} isolation, but this run has ${effective} ` +
|
|
47
|
+
`(run: ${parse(spec.isolation)}, host RUNNER_ISOLATION: ${parse(env.RUNNER_ISOLATION)})`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Host env vars a vendor harness may inherit regardless of engine: what a
|
|
52
|
+
* process needs to find binaries, write temp files, pick a locale, trust the
|
|
53
|
+
* host's CA bundle and reach the network through the host's proxy. Anything
|
|
54
|
+
* else the host process holds (its own credentials, callback tokens, the run id)
|
|
55
|
+
* stays with the host.
|
|
56
|
+
*/
|
|
57
|
+
const BASE_ENV = [
|
|
58
|
+
"PATH",
|
|
59
|
+
"HOME",
|
|
60
|
+
"USER",
|
|
61
|
+
"LOGNAME",
|
|
62
|
+
"SHELL",
|
|
63
|
+
"TERM",
|
|
64
|
+
"LANG",
|
|
65
|
+
"LANGUAGE",
|
|
66
|
+
"TZ",
|
|
67
|
+
"TMPDIR",
|
|
68
|
+
"TMP",
|
|
69
|
+
"TEMP",
|
|
70
|
+
"NODE_EXTRA_CA_CERTS",
|
|
71
|
+
"SSL_CERT_FILE",
|
|
72
|
+
"SSL_CERT_DIR",
|
|
73
|
+
"REQUESTS_CA_BUNDLE",
|
|
74
|
+
"CURL_CA_BUNDLE",
|
|
75
|
+
"HTTP_PROXY",
|
|
76
|
+
"HTTPS_PROXY",
|
|
77
|
+
"NO_PROXY",
|
|
78
|
+
"ALL_PROXY",
|
|
79
|
+
"http_proxy",
|
|
80
|
+
"https_proxy",
|
|
81
|
+
"no_proxy",
|
|
82
|
+
"all_proxy",
|
|
83
|
+
];
|
|
84
|
+
/** Prefixes every harness may inherit: locale and XDG base-directory settings. */
|
|
85
|
+
const BASE_PREFIXES = ["LC_", "XDG_"];
|
|
86
|
+
/**
|
|
87
|
+
* A name that looks like it holds a credential. A prefix match never passes one
|
|
88
|
+
* of these (`ANTHROPIC_API_KEY`, `OPENAI_ADMIN_KEY`, `CLAUDE_CODE_OAUTH_TOKEN`);
|
|
89
|
+
* the one provider key an engine needs arrives through `extra` instead. This is
|
|
90
|
+
* a best-effort deny-list inside an allow-list: it cannot spot a secret whose
|
|
91
|
+
* name carries none of these words (`*_DSN`, `*_DB_URL`), so keep prefixes
|
|
92
|
+
* narrow.
|
|
93
|
+
*/
|
|
94
|
+
const CREDENTIAL_NAME = /KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIAL|AUTH|COOKIE|SESSION/i;
|
|
95
|
+
/**
|
|
96
|
+
* The environment to spawn a vendor harness with: the base allowlist, any host
|
|
97
|
+
* var starting with one of `prefixes` (the harness's own configuration, e.g.
|
|
98
|
+
* `ANTHROPIC_BASE_URL`) that does not look like a credential, and then `extra`,
|
|
99
|
+
* which always wins and is the only way a credential reaches the harness. Never
|
|
100
|
+
* the host's whole environment.
|
|
101
|
+
*/
|
|
102
|
+
export function childEnv(prefixes, extra = {}, env = process.env) {
|
|
103
|
+
const out = {};
|
|
104
|
+
const allowedPrefixes = [...BASE_PREFIXES, ...prefixes];
|
|
105
|
+
for (const [key, value] of Object.entries(env)) {
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
continue;
|
|
108
|
+
if (BASE_ENV.includes(key) ||
|
|
109
|
+
(allowedPrefixes.some((p) => key.startsWith(p)) && !CREDENTIAL_NAME.test(key))) {
|
|
110
|
+
out[key] = value;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const [key, value] of Object.entries(extra)) {
|
|
114
|
+
if (value !== undefined)
|
|
115
|
+
out[key] = value;
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.js","sourceRoot":"","sources":["../../src/engines/isolation.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { RunEventSink, RunOutcome } from "../events.js";
|
|
2
2
|
import type { ProviderSelection } from "../providers/index.js";
|
|
3
3
|
import type { ConnectorConfig, Permissions, WorkflowDefinition } from "../types.js";
|
|
4
|
+
import type { Isolation } from "./isolation.js";
|
|
4
5
|
/**
|
|
5
6
|
* The provider-neutral, harness-neutral description of one workflow run, handed
|
|
6
7
|
* to an {@link AgentEngine}. It carries the *materials* (a prepared on-disk
|
|
@@ -40,6 +41,14 @@ export interface RunSpec {
|
|
|
40
41
|
maxSteps?: number;
|
|
41
42
|
maxDurationMs?: number;
|
|
42
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* How strongly the caller isolated this run from every other run on the host:
|
|
46
|
+
* `none` (a shared process), `container` (one per run) or `vm` (a microVM per
|
|
47
|
+
* run). Out-of-process engines refuse anything below `container`, and only
|
|
48
|
+
* trust it when the host's own `RUNNER_ISOLATION` agrees (see
|
|
49
|
+
* `effectiveIsolation`). Absent means `none`. The native engine ignores it.
|
|
50
|
+
*/
|
|
51
|
+
isolation?: Isolation;
|
|
43
52
|
/**
|
|
44
53
|
* The run handles material that must not leave the host. The native engine
|
|
45
54
|
* runs it only on the `local` provider (`provider.preferred: "local"` with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B;sFACkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+DAA+D;IAC/D,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,iBAAiB,CAAA;IAC3D,8EAA8E;IAC9E,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;mFAC+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAAA;IACtC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rarebit-one/harness-kernel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Provider-neutral AI-harness kernel — LLM adapters, tool-use loop, MCP connectors, and a pluggable agent-engine seam",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Jaryl Sim <code@jaryl.dev>",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@anthropic-ai/claude-agent-sdk": "^0.3.228",
|
|
54
|
-
"@anthropic-ai/sdk": "^0.
|
|
54
|
+
"@anthropic-ai/sdk": "^0.131.0",
|
|
55
55
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
56
56
|
"@zed-industries/agent-client-protocol": "^0.4.5",
|
|
57
57
|
"openai": "^7.4.0",
|