subharness 0.0.5 → 0.0.7
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 +59 -3
- package/dist/adapters/claude-process.js +8 -1
- package/dist/adapters/claude-process.js.map +1 -1
- package/dist/adapters/claude-tools.d.ts +6 -2
- package/dist/adapters/claude-tools.js +14 -12
- package/dist/adapters/claude-tools.js.map +1 -1
- package/dist/adapters/claude-worker-client.d.ts +49 -0
- package/dist/adapters/claude-worker-client.js +359 -0
- package/dist/adapters/claude-worker-client.js.map +1 -0
- package/dist/adapters/claude-worker-process.d.ts +20 -0
- package/dist/adapters/claude-worker-process.js +76 -0
- package/dist/adapters/claude-worker-process.js.map +1 -0
- package/dist/adapters/claude-worker-protocol.d.ts +38 -0
- package/dist/adapters/claude-worker-protocol.js +2 -0
- package/dist/adapters/claude-worker-protocol.js.map +1 -0
- package/dist/adapters/claude-worker.d.ts +1 -0
- package/dist/adapters/claude-worker.js +126 -0
- package/dist/adapters/claude-worker.js.map +1 -0
- package/dist/adapters/claude.d.ts +16 -6
- package/dist/adapters/claude.js +138 -68
- package/dist/adapters/claude.js.map +1 -1
- package/dist/cli/catalog-worker.js.map +1 -1
- package/dist/cli/dashboard-client.js +19 -30
- package/dist/cli/dashboard-client.js.map +1 -1
- package/dist/cli/main.js +53 -45
- package/dist/cli/main.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/approval-registry.d.ts +9 -0
- package/dist/runtime/approval-registry.js +143 -4
- package/dist/runtime/approval-registry.js.map +1 -1
- package/dist/runtime/capture.d.ts +22 -0
- package/dist/runtime/capture.js +320 -0
- package/dist/runtime/capture.js.map +1 -0
- package/dist/runtime/catalog.d.ts +39 -0
- package/dist/runtime/catalog.js +84 -0
- package/dist/runtime/catalog.js.map +1 -0
- package/dist/runtime/client.d.ts +2 -1
- package/dist/runtime/client.js +52 -65
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/coordinator.d.ts +44 -7
- package/dist/runtime/coordinator.js +265 -31
- package/dist/runtime/coordinator.js.map +1 -1
- package/dist/runtime/daemon.js +12 -6
- package/dist/runtime/daemon.js.map +1 -1
- package/dist/runtime/dashboard-workspace.js +5 -1
- package/dist/runtime/dashboard-workspace.js.map +1 -1
- package/dist/runtime/definition.d.ts +6 -1
- package/dist/runtime/definition.js +31 -1
- package/dist/runtime/definition.js.map +1 -1
- package/dist/runtime/native-owner.js +7 -1
- package/dist/runtime/native-owner.js.map +1 -1
- package/dist/runtime/pagination.d.ts +9 -0
- package/dist/runtime/pagination.js +36 -0
- package/dist/runtime/pagination.js.map +1 -0
- package/dist/runtime/sdk-observation.d.ts +8 -0
- package/dist/runtime/sdk-observation.js +75 -0
- package/dist/runtime/sdk-observation.js.map +1 -0
- package/dist/runtime/sdk-projection.d.ts +8 -0
- package/dist/runtime/sdk-projection.js +19 -0
- package/dist/runtime/sdk-projection.js.map +1 -0
- package/dist/runtime/sdk-service.d.ts +11 -0
- package/dist/runtime/sdk-service.js +109 -0
- package/dist/runtime/sdk-service.js.map +1 -0
- package/dist/runtime/select-native.d.ts +4 -1
- package/dist/runtime/select-native.js +14 -17
- package/dist/runtime/select-native.js.map +1 -1
- package/dist/runtime/service.d.ts +11 -1
- package/dist/runtime/service.js +178 -3
- package/dist/runtime/service.js.map +1 -1
- package/dist/runtime/session-launcher.js +1 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/runtime/snapshots.d.ts +103 -0
- package/dist/runtime/snapshots.js +124 -0
- package/dist/runtime/snapshots.js.map +1 -0
- package/dist/runtime/state.d.ts +26 -0
- package/dist/runtime/state.js +86 -17
- package/dist/runtime/state.js.map +1 -1
- package/dist/runtime/task-data.d.ts +38 -0
- package/dist/runtime/task-data.js +2 -0
- package/dist/runtime/task-data.js.map +1 -0
- package/dist/runtime/transport.d.ts +13 -0
- package/dist/runtime/transport.js +166 -0
- package/dist/runtime/transport.js.map +1 -0
- package/dist/runtime/types.d.ts +28 -9
- package/dist/runtime/types.js.map +1 -1
- package/dist/runtime/worker-client.js +2 -0
- package/dist/runtime/worker-client.js.map +1 -1
- package/dist/runtime/worker-server.js +105 -24
- package/dist/runtime/worker-server.js.map +1 -1
- package/dist/sdk/connected-types.d.ts +42 -0
- package/dist/sdk/connected-types.js +2 -0
- package/dist/sdk/connected-types.js.map +1 -0
- package/dist/sdk/connected.d.ts +3 -0
- package/dist/sdk/connected.js +232 -0
- package/dist/sdk/connected.js.map +1 -0
- package/dist/sdk/execution-definition.d.ts +3 -0
- package/dist/sdk/execution-definition.js +59 -0
- package/dist/sdk/execution-definition.js.map +1 -0
- package/dist/sdk/execution-driver.d.ts +6 -0
- package/dist/sdk/execution-driver.js +86 -0
- package/dist/sdk/execution-driver.js.map +1 -0
- package/dist/sdk/execution-observation.d.ts +3 -0
- package/dist/sdk/execution-observation.js +35 -0
- package/dist/sdk/execution-observation.js.map +1 -0
- package/dist/sdk/execution-options.d.ts +17 -0
- package/dist/sdk/execution-options.js +115 -0
- package/dist/sdk/execution-options.js.map +1 -0
- package/dist/sdk/execution-types.d.ts +72 -0
- package/dist/sdk/execution-types.js +2 -0
- package/dist/sdk/execution-types.js.map +1 -0
- package/dist/sdk/execution.d.ts +3 -0
- package/dist/sdk/execution.js +3 -0
- package/dist/sdk/execution.js.map +1 -0
- package/dist/sdk/hosted-error.d.ts +3 -0
- package/dist/sdk/hosted-error.js +14 -0
- package/dist/sdk/hosted-error.js.map +1 -0
- package/dist/sdk/hosted.d.ts +23 -0
- package/dist/sdk/hosted.js +204 -0
- package/dist/sdk/hosted.js.map +1 -0
- package/dist/sdk/runner.d.ts +5 -0
- package/dist/sdk/runner.js +107 -0
- package/dist/sdk/runner.js.map +1 -0
- package/dist/sdk/tools.js +4 -1
- package/dist/sdk/tools.js.map +1 -1
- package/package.json +3 -3
- package/sdk/access-config.md +2 -0
- package/sdk/adapter-contract.md +8 -0
- package/sdk/agent.md +1 -1
- package/sdk/approvals.md +2 -0
- package/sdk/completion-notifications.md +2 -0
- package/sdk/distribution.md +4 -2
- package/sdk/examples/chat-tool.ts +126 -0
- package/sdk/execution.md +743 -0
- package/sdk/index.md +45 -21
- package/sdk/message-delivery.md +2 -0
- package/sdk/permissions.md +2 -0
- package/sdk/plugins/sub-agents.md +4 -2
- package/sdk/project-team.md +23 -1
- package/sdk/sessions.md +2 -0
- package/sdk/tools.md +3 -1
- package/sdk/v1-runtime.md +7 -5
- package/dist/cli/catalog.d.ts +0 -26
- package/dist/cli/catalog.js +0 -41
- package/dist/cli/catalog.js.map +0 -1
package/dist/adapters/claude.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import { access } from "node:fs/promises";
|
|
2
|
-
import { constants } from "node:fs";
|
|
3
|
-
import { delimiter, join } from "node:path";
|
|
4
1
|
import { randomUUID } from "node:crypto";
|
|
5
|
-
import { query, resolveSettings } from "@anthropic-ai/claude-agent-sdk";
|
|
6
2
|
import { AgentError } from "../errors.js";
|
|
7
3
|
import { privateClaudeConfig } from "./claude-config.js";
|
|
8
4
|
import { claudeTools } from "./claude-tools.js";
|
|
@@ -14,24 +10,7 @@ import { NativeApprovals } from "./approval-lifetime.js";
|
|
|
14
10
|
import { claudeApproval } from "./claude-approvals.js";
|
|
15
11
|
import { ClaudeProcessOwner } from "./claude-process.js";
|
|
16
12
|
import { claudeResultFailure } from "./claude-result.js";
|
|
17
|
-
|
|
18
|
-
query,
|
|
19
|
-
async managedSettings(cwd) {
|
|
20
|
-
const settings = await resolveSettings({ cwd, settingSources: ["user", "project", "local"] });
|
|
21
|
-
return settings.sources.filter(source => source.source === "managed").map(source => source.settings);
|
|
22
|
-
},
|
|
23
|
-
async executable(env) {
|
|
24
|
-
for (const directory of (env.PATH ?? "").split(delimiter)) {
|
|
25
|
-
const file = join(directory, "claude");
|
|
26
|
-
try {
|
|
27
|
-
await access(file, constants.X_OK);
|
|
28
|
-
return file;
|
|
29
|
-
}
|
|
30
|
-
catch { /* Try the next PATH entry. */ }
|
|
31
|
-
}
|
|
32
|
-
throw new AgentError("HARNESS_UNAVAILABLE", "Install Claude Code and make claude available on PATH.");
|
|
33
|
-
},
|
|
34
|
-
};
|
|
13
|
+
import { ClaudeWorkerClient } from "./claude-worker-client.js";
|
|
35
14
|
function addCatalogEquivalentModels(expected, models, selected) {
|
|
36
15
|
expected.add(selected);
|
|
37
16
|
for (const model of models) {
|
|
@@ -42,9 +21,33 @@ function addCatalogEquivalentModels(expected, models, selected) {
|
|
|
42
21
|
expected.add(model.resolvedModel);
|
|
43
22
|
}
|
|
44
23
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
24
|
+
function injectedDependencies(value) {
|
|
25
|
+
return "query" in value;
|
|
26
|
+
}
|
|
27
|
+
export const openClaude = createClaudeOpener();
|
|
28
|
+
/** Dependency injection is internal and replaces only private process boundaries in tests. */
|
|
29
|
+
export function createClaudeOpener(configuration = {}) {
|
|
30
|
+
if (injectedDependencies(configuration))
|
|
31
|
+
return openClaudeWithDependencies(configuration);
|
|
32
|
+
return async (options) => {
|
|
33
|
+
const client = new ClaudeWorkerClient(options.env, configuration);
|
|
34
|
+
try {
|
|
35
|
+
return await openClaudeWithDependencies(client.dependencies)(options);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
try {
|
|
39
|
+
await client.dispose();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
const startup = error instanceof AgentError || error instanceof AggregateError
|
|
43
|
+
? error : new AgentError("HARNESS_FAILED", "Claude Code startup failed.");
|
|
44
|
+
throw new AggregateError([startup, new AgentError("HARNESS_FAILED", "Claude Code worker cleanup failed.")], "Claude Code startup and cleanup failed.");
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function openClaudeWithDependencies(deps) {
|
|
48
51
|
return async (options) => {
|
|
49
52
|
if (options.harness.kind !== "claudeCode")
|
|
50
53
|
throw new AgentError("INVALID_CONFIG", "Claude Code received configuration for a different harness.");
|
|
@@ -55,12 +58,50 @@ export function createClaudeOpener(deps) {
|
|
|
55
58
|
const tools = claudeTools(options.agent);
|
|
56
59
|
const allowedTools = [
|
|
57
60
|
...(options.harness.allowedTools ?? []),
|
|
58
|
-
...
|
|
61
|
+
...tools.allowedTools,
|
|
59
62
|
...claudeDelegationPermissions(options),
|
|
60
63
|
];
|
|
61
64
|
const config = await privateClaudeConfig(settings.settings);
|
|
62
65
|
const input = new ClaudeInput();
|
|
63
66
|
const processOwner = new ClaudeProcessOwner();
|
|
67
|
+
let cleanupComplete = false;
|
|
68
|
+
let cleanupAttempt;
|
|
69
|
+
const cleanupResources = () => {
|
|
70
|
+
if (cleanupComplete)
|
|
71
|
+
return Promise.resolve();
|
|
72
|
+
if (cleanupAttempt)
|
|
73
|
+
return cleanupAttempt;
|
|
74
|
+
cleanupAttempt = (async () => {
|
|
75
|
+
const failures = [];
|
|
76
|
+
try {
|
|
77
|
+
await processOwner.close();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
failures.push(error instanceof AgentError ? error : new AgentError("HARNESS_FAILED", "Claude Code process cleanup failed."));
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await config.cleanup();
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
failures.push(new AgentError("HARNESS_FAILED", "Claude Code private configuration cleanup failed."));
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
await deps.dispose?.();
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
failures.push(error instanceof AgentError ? error : new AgentError("HARNESS_FAILED", "Claude Code worker cleanup failed."));
|
|
93
|
+
}
|
|
94
|
+
if (failures.length === 1)
|
|
95
|
+
throw failures[0];
|
|
96
|
+
if (failures.length > 1)
|
|
97
|
+
throw new AggregateError(failures, "Claude Code cleanup failed.");
|
|
98
|
+
cleanupComplete = true;
|
|
99
|
+
})().catch(error => {
|
|
100
|
+
cleanupAttempt = undefined;
|
|
101
|
+
throw error;
|
|
102
|
+
});
|
|
103
|
+
return cleanupAttempt;
|
|
104
|
+
};
|
|
64
105
|
let inputFailure;
|
|
65
106
|
const approvals = new NativeApprovals();
|
|
66
107
|
let acceptingApprovals = false;
|
|
@@ -75,12 +116,11 @@ export function createClaudeOpener(deps) {
|
|
|
75
116
|
};
|
|
76
117
|
let native;
|
|
77
118
|
try {
|
|
78
|
-
native = deps.query({ prompt: input, options: {
|
|
119
|
+
native = await deps.query({ prompt: input, options: {
|
|
79
120
|
pathToClaudeCodeExecutable: executable,
|
|
80
121
|
spawnClaudeCodeProcess: processOwner.spawn,
|
|
81
122
|
cwd: options.cwd,
|
|
82
123
|
...settings,
|
|
83
|
-
...tools.config,
|
|
84
124
|
...(allowedTools.length ? { allowedTools } : {}),
|
|
85
125
|
...(options.harness.disallowedTools !== undefined ? { disallowedTools: [...options.harness.disallowedTools] } : {}),
|
|
86
126
|
...(permissionMode !== undefined ? { permissionMode } : {}),
|
|
@@ -120,18 +160,20 @@ export function createClaudeOpener(deps) {
|
|
|
120
160
|
}
|
|
121
161
|
return { action: "decline" };
|
|
122
162
|
},
|
|
123
|
-
} });
|
|
163
|
+
} }, { tools, processOwner });
|
|
124
164
|
}
|
|
125
|
-
catch {
|
|
165
|
+
catch (error) {
|
|
126
166
|
const exit = processOwner.exitDescription();
|
|
127
167
|
input.close();
|
|
168
|
+
const failure = error instanceof AgentError && error.code === "HARNESS_FAILED"
|
|
169
|
+
? error : new AgentError("HARNESS_UNAVAILABLE", `Claude Code could not start${exit}.`);
|
|
128
170
|
try {
|
|
129
|
-
await
|
|
171
|
+
await cleanupResources();
|
|
130
172
|
}
|
|
131
|
-
|
|
132
|
-
|
|
173
|
+
catch (cleanupError) {
|
|
174
|
+
throw new AggregateError([failure, cleanupError], "Claude Code startup and cleanup failed.");
|
|
133
175
|
}
|
|
134
|
-
throw
|
|
176
|
+
throw failure;
|
|
135
177
|
}
|
|
136
178
|
const expectedModels = new Set();
|
|
137
179
|
let retainedModel;
|
|
@@ -209,15 +251,15 @@ export function createClaudeOpener(deps) {
|
|
|
209
251
|
const exit = processOwner.exitDescription();
|
|
210
252
|
input.close();
|
|
211
253
|
native.close();
|
|
254
|
+
const failure = error instanceof AgentError ? error
|
|
255
|
+
: new AgentError("HARNESS_FAILED", `Claude Code ${startupPhase} failed${exit}.`);
|
|
212
256
|
try {
|
|
213
|
-
await
|
|
257
|
+
await cleanupResources();
|
|
214
258
|
}
|
|
215
|
-
|
|
216
|
-
|
|
259
|
+
catch (cleanupError) {
|
|
260
|
+
throw new AggregateError([failure, cleanupError], "Claude Code startup and cleanup failed.");
|
|
217
261
|
}
|
|
218
|
-
|
|
219
|
-
throw error;
|
|
220
|
-
throw new AgentError("HARNESS_FAILED", `Claude Code ${startupPhase} failed${exit}.`);
|
|
262
|
+
throw failure;
|
|
221
263
|
}
|
|
222
264
|
let closed = false;
|
|
223
265
|
let preflight;
|
|
@@ -263,7 +305,10 @@ export function createClaudeOpener(deps) {
|
|
|
263
305
|
current.reject(claudeResultFailure(message.subtype));
|
|
264
306
|
}
|
|
265
307
|
}
|
|
266
|
-
catch {
|
|
308
|
+
catch (error) {
|
|
309
|
+
if (error instanceof AgentError) {
|
|
310
|
+
sessionFailure = error;
|
|
311
|
+
}
|
|
267
312
|
// Native diagnostics may contain credentials; return a stable safe message.
|
|
268
313
|
}
|
|
269
314
|
finally {
|
|
@@ -275,17 +320,60 @@ export function createClaudeOpener(deps) {
|
|
|
275
320
|
input.close();
|
|
276
321
|
await tools.drain();
|
|
277
322
|
const exit = explicitClose ? exitObservedBeforeClose : processOwner.exitDescription();
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
active = undefined;
|
|
323
|
+
const ending = active;
|
|
324
|
+
ending?.reject(sessionFailure ?? inputFailure ?? new AgentError(code, `The Claude Code process stopped${exit} before completing the turn.`));
|
|
281
325
|
try {
|
|
282
|
-
await
|
|
326
|
+
await cleanupResources();
|
|
283
327
|
}
|
|
284
328
|
finally {
|
|
285
|
-
|
|
329
|
+
ending?.stop();
|
|
330
|
+
if (active === ending)
|
|
331
|
+
active = undefined;
|
|
286
332
|
}
|
|
287
333
|
}
|
|
288
334
|
})();
|
|
335
|
+
void reading.catch(() => undefined);
|
|
336
|
+
let closeAttempt;
|
|
337
|
+
let closeComplete = false;
|
|
338
|
+
let failedCloseAttempts = 0;
|
|
339
|
+
const close = () => {
|
|
340
|
+
if (closeComplete)
|
|
341
|
+
return Promise.resolve();
|
|
342
|
+
if (closeAttempt)
|
|
343
|
+
return closeAttempt;
|
|
344
|
+
closeAttempt = (async () => {
|
|
345
|
+
exitObservedBeforeClose ??= processOwner.exitDescription();
|
|
346
|
+
closed = true;
|
|
347
|
+
acceptingApprovals = false;
|
|
348
|
+
approvals.clear();
|
|
349
|
+
const pending = preflight;
|
|
350
|
+
if (pending) {
|
|
351
|
+
pending.cancel(new AgentError("SESSION_CLOSED", "The native session closed before submission."));
|
|
352
|
+
await pending.stopped;
|
|
353
|
+
}
|
|
354
|
+
tools.stopAdmission();
|
|
355
|
+
input.close();
|
|
356
|
+
native.close();
|
|
357
|
+
const stoppingFailure = processOwner.close().then(() => new Promise(() => { }));
|
|
358
|
+
let readingFailure;
|
|
359
|
+
try {
|
|
360
|
+
await Promise.race([reading, stoppingFailure]);
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
readingFailure = error;
|
|
364
|
+
}
|
|
365
|
+
if (readingFailure && failedCloseAttempts === 0)
|
|
366
|
+
throw readingFailure;
|
|
367
|
+
if (!cleanupComplete)
|
|
368
|
+
await cleanupResources();
|
|
369
|
+
closeComplete = true;
|
|
370
|
+
})().catch(error => {
|
|
371
|
+
failedCloseAttempts += 1;
|
|
372
|
+
closeAttempt = undefined;
|
|
373
|
+
throw error;
|
|
374
|
+
});
|
|
375
|
+
return closeAttempt;
|
|
376
|
+
};
|
|
289
377
|
return {
|
|
290
378
|
async turn(prompt) {
|
|
291
379
|
if (closed)
|
|
@@ -351,34 +439,16 @@ export function createClaudeOpener(deps) {
|
|
|
351
439
|
try {
|
|
352
440
|
await native.interrupt();
|
|
353
441
|
}
|
|
354
|
-
catch {
|
|
442
|
+
catch (error) {
|
|
355
443
|
current.interrupted = false;
|
|
444
|
+
if (error instanceof AgentError && error.code === "HARNESS_FAILED")
|
|
445
|
+
throw error;
|
|
356
446
|
throw new AgentError("CANCEL_FAILED", "Claude Code did not confirm interruption.");
|
|
357
447
|
}
|
|
358
448
|
await current.stopped;
|
|
359
449
|
},
|
|
360
450
|
async resume() { throw new AgentError("RECOVERY_UNSUPPORTED", "Claude Code cannot retry failed execution without replaying input."); },
|
|
361
|
-
|
|
362
|
-
exitObservedBeforeClose ??= processOwner.exitDescription();
|
|
363
|
-
closed = true;
|
|
364
|
-
acceptingApprovals = false;
|
|
365
|
-
approvals.clear();
|
|
366
|
-
const pending = preflight;
|
|
367
|
-
if (pending) {
|
|
368
|
-
pending.cancel(new AgentError("SESSION_CLOSED", "The native session closed before submission."));
|
|
369
|
-
await pending.stopped;
|
|
370
|
-
}
|
|
371
|
-
tools.stopAdmission();
|
|
372
|
-
input.close();
|
|
373
|
-
native.close();
|
|
374
|
-
const stopping = processOwner.close();
|
|
375
|
-
try {
|
|
376
|
-
await reading;
|
|
377
|
-
}
|
|
378
|
-
finally {
|
|
379
|
-
await stopping;
|
|
380
|
-
}
|
|
381
|
-
},
|
|
451
|
+
close,
|
|
382
452
|
};
|
|
383
453
|
};
|
|
384
454
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from \"node:fs/promises\";\nimport { constants } from \"node:fs\";\nimport { delimiter, join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { query, resolveSettings, type AccountInfo, type Options, type SDKMessage, type SDKUserMessage, type Settings, type ModelInfo } from \"@anthropic-ai/claude-agent-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\nimport { privateClaudeConfig } from \"./claude-config.js\";\nimport { claudeTools } from \"./claude-tools.js\";\nimport { ClaudeInput } from \"./claude-input.js\";\nimport { claudeDelegationPermissions } from \"./claude-permissions.js\";\nimport { claudeSettings, verifyClaudeAccess, verifyClaudePolicy, verifyClaudeOptions } from \"./claude-auth.js\";\nimport { ClaudeSettingsUnavailable, claudeDefaultUnavailable, readClaudeAppliedSettings, verifyAppliedClaudeEffort } from \"./claude-settings.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { claudeApproval } from \"./claude-approvals.js\";\nimport { ClaudeProcessOwner } from \"./claude-process.js\";\nimport { claudeResultFailure } from \"./claude-result.js\";\n\ninterface ClaudeQuery extends AsyncIterable<SDKMessage> {\n accountInfo(): Promise<AccountInfo>;\n supportedModels(): Promise<ModelInfo[]>;\n interrupt(): Promise<unknown>;\n close(): void;\n getSettings?(): Promise<unknown>;\n setModel?(model?: string): Promise<void>;\n}\nexport interface ClaudeDependencies {\n query(args: {prompt: AsyncIterable<SDKUserMessage>; options: Options}): ClaudeQuery;\n executable(env: NodeJS.ProcessEnv): Promise<string>;\n managedSettings(cwd: string): Promise<Settings[]>;\n}\n\nconst dependencies: ClaudeDependencies = {\n query,\n async managedSettings(cwd) {\n const settings = await resolveSettings({cwd, settingSources:[\"user\", \"project\", \"local\"]});\n return settings.sources.filter(source => source.source === \"managed\").map(source => source.settings);\n },\n async executable(env) {\n for (const directory of (env.PATH ?? \"\").split(delimiter)) {\n const file = join(directory, \"claude\");\n try { await access(file, constants.X_OK); return file; } catch { /* Try the next PATH entry. */ }\n }\n throw new AgentError(\"HARNESS_UNAVAILABLE\", \"Install Claude Code and make claude available on PATH.\");\n },\n};\n\nfunction addCatalogEquivalentModels(expected: Set<string>, models: ModelInfo[], selected: string): void {\n expected.add(selected);\n for (const model of models) {\n if (model.value !== selected && model.resolvedModel !== selected) continue;\n expected.add(model.value);\n if (model.resolvedModel) expected.add(model.resolvedModel);\n }\n}\n\nexport const openClaude = createClaudeOpener(dependencies);\n\n/** Dependency injection is internal and replaces only the external SDK boundary in tests. */\nexport function createClaudeOpener(deps: ClaudeDependencies) {\n return async (options: AdapterOptions): Promise<NativeSession> => {\n if (options.harness.kind !== \"claudeCode\") throw new AgentError(\"INVALID_CONFIG\", \"Claude Code received configuration for a different harness.\");\n const permissionMode = options.harness.permissionMode;\n const settings = claudeSettings(options);\n const executable = await deps.executable(options.env);\n verifyClaudePolicy(await deps.managedSettings(options.cwd), settings.settings as Settings);\n const tools = claudeTools(options.agent);\n const allowedTools = [\n ...(options.harness.allowedTools ?? []),\n ...(tools.config.allowedTools ?? []),\n ...claudeDelegationPermissions(options),\n ];\n const config = await privateClaudeConfig(settings.settings as Settings);\n const input = new ClaudeInput<SDKUserMessage>();\n const processOwner = new ClaudeProcessOwner();\n let inputFailure: AgentError | undefined;\n const approvals = new NativeApprovals();\n let acceptingApprovals = false;\n const requireInput = (toolName?: string) => {\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n const subject = toolName && /^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(toolName)\n ? `approval for native tool ${toolName}`\n : \"interactive input\";\n inputFailure = new AgentError(\"INPUT_REQUIRED\", `Claude Code needs ${subject}. Configure its native permissions before retrying.`);\n };\n let native: ClaudeQuery;\n try { native = deps.query({prompt: input, options: {\n pathToClaudeCodeExecutable: executable,\n spawnClaudeCodeProcess: processOwner.spawn,\n cwd: options.cwd,\n ...settings,\n ...tools.config,\n ...(allowedTools.length ? {allowedTools} : {}),\n ...(options.harness.disallowedTools !== undefined ? {disallowedTools:[...options.harness.disallowedTools]} : {}),\n ...(permissionMode !== undefined ? {permissionMode} : {}),\n ...(permissionMode === \"bypassPermissions\" ? {allowDangerouslySkipPermissions:true} : {}),\n settings: config.path,\n stderr: () => {},\n ...(options.harness.model ? {model: options.harness.model} : {}),\n systemPrompt: options.agent.instructions\n ? {type: \"preset\", preset: \"claude_code\", append: options.agent.instructions}\n : {type: \"preset\", preset: \"claude_code\"},\n settingSources: [\"user\", \"project\", \"local\"],\n canUseTool: async (toolName, toolInput, metadata) => {\n if (options.onApproval && acceptingApprovals && toolName !== \"AskUserQuestion\") {\n try {\n const answer = await claudeApproval(approvals, options.onApproval, toolName, toolInput, metadata);\n if (!acceptingApprovals || metadata.signal.aborted) return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n return answer;\n }\n catch (error) {\n if (error instanceof AgentError && error.code === \"REQUEST_EXPIRED\") return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n }\n }\n requireInput(toolName);\n return {behavior: \"deny\", message: inputFailure!.message, interrupt: true};\n },\n onElicitation: async () => {\n acceptingApprovals = false;\n approvals.clear();\n requireInput();\n try { await native.interrupt(); } catch { native.close(); }\n return {action: \"decline\"};\n },\n }}); }\n catch {\n const exit = processOwner.exitDescription();\n input.close();\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n throw new AgentError(\"HARNESS_UNAVAILABLE\", `Claude Code could not start${exit}.`);\n }\n const expectedModels = new Set<string>();\n let retainedModel: string | undefined;\n let startupPhase: \"account inspection\" | \"model catalog retrieval\" | \"model settings validation\" = \"account inspection\";\n try {\n const account = await native.accountInfo();\n verifyClaudeAccess(account, options.access);\n startupPhase = \"model catalog retrieval\";\n const models = await native.supportedModels();\n if (options.harness.model) {\n addCatalogEquivalentModels(expectedModels, models, options.harness.model);\n verifyClaudeOptions(models, options);\n startupPhase = \"model settings validation\";\n try {\n const applied = await readClaudeAppliedSettings(native);\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during startup settings validation.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n retainedModel = applied.model;\n expectedModels.add(applied.model);\n } catch (error) {\n if (!(error instanceof ClaudeSettingsUnavailable)) throw error;\n }\n } else {\n startupPhase = \"model settings validation\";\n if (!native.getSettings || !native.setModel) throw claudeDefaultUnavailable();\n let selected;\n try { selected = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n startupPhase = \"model catalog retrieval\";\n verifyClaudeOptions(models, options, selected.model);\n startupPhase = \"model settings validation\";\n verifyAppliedClaudeEffort(selected.effort, options.harness.effort);\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, selected.model);\n startupPhase = \"model settings validation\";\n try { await native.setModel(selected.model); } catch { throw claudeDefaultUnavailable(); }\n let pinned;\n try { pinned = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n if (!expectedModels.has(pinned.model)) {\n throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the selected native default during startup settings validation. Supply --model <model>.\");\n }\n verifyAppliedClaudeEffort(pinned.effort, options.harness.effort);\n retainedModel = pinned.model;\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, pinned.model);\n startupPhase = \"model settings validation\";\n }\n if (inputFailure) throw inputFailure;\n }\n catch (error) {\n const exit = processOwner.exitDescription();\n input.close();\n native.close();\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n if (error instanceof AgentError) throw error;\n throw new AgentError(\"HARNESS_FAILED\", `Claude Code ${startupPhase} failed${exit}.`);\n }\n let closed = false;\n let preflight: {\n cancellation: Promise<never>;\n cancel(error: AgentError): void;\n stopped: Promise<void>;\n stop(): void;\n } | undefined;\n let sessionFailure: AgentError | undefined;\n let exitObservedBeforeClose: string | undefined;\n let active: {\n resolve(text: string): void; reject(error: unknown): void;\n stopped: Promise<void>; stop(): void; interrupted: boolean;\n } | undefined;\n const reading = (async () => {\n try {\n for await (const message of native) {\n if (message.type === \"system\" && message.subtype === \"init\") {\n if (!expectedModels.has(message.model)) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during native initialization.\");\n } else if (permissionMode !== undefined && message.permissionMode !== permissionMode) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code reported a different permission mode than requested.\");\n }\n if (sessionFailure) {\n tools.stopAdmission();\n native.close();\n break;\n }\n }\n if (message.type !== \"result\" || !active) continue;\n const current = active;\n acceptingApprovals = false;\n approvals.clear();\n await tools.drain();\n active = undefined;\n current.stop();\n if (inputFailure) current.reject(inputFailure);\n else if (current.interrupted) current.reject(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted.\"));\n else if (message.subtype === \"success\" && !message.is_error) {\n if (Buffer.byteLength(message.result, \"utf8\") > 1024 * 1024) {\n current.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"The Claude Code response exceeds 1 MiB.\"));\n } else current.resolve(message.result);\n }\n else current.reject(claudeResultFailure(message.subtype));\n }\n } catch {\n // Native diagnostics may contain credentials; return a stable safe message.\n } finally {\n acceptingApprovals = false;\n approvals.clear();\n const explicitClose = exitObservedBeforeClose !== undefined;\n const code = explicitClose ? \"SESSION_CLOSED\" : \"HARNESS_ERROR\";\n closed = true;\n input.close();\n await tools.drain();\n const exit = explicitClose ? exitObservedBeforeClose : processOwner.exitDescription();\n active?.reject(sessionFailure ?? inputFailure ?? new AgentError(code, `The Claude Code process stopped${exit} before completing the turn.`));\n active?.stop();\n active = undefined;\n try { await processOwner.close(); }\n finally { await config.cleanup(); }\n }\n })();\n return {\n async turn(prompt) {\n if (closed) return Promise.reject(sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\"));\n if (active || preflight) return Promise.reject(new AgentError(\"SESSION_BUSY\", \"A native turn is already active.\"));\n let cancel!: (error: AgentError) => void, stop!: () => void;\n const currentPreflight = {\n cancellation: new Promise<never>((_resolve, reject) => { cancel = reject; }),\n cancel(error: AgentError) { cancel(error); },\n stopped: new Promise<void>(resolve => { stop = resolve; }),\n stop() { stop(); },\n };\n preflight = currentPreflight;\n try {\n if (native.getSettings && retainedModel) {\n let applied;\n try { applied = await Promise.race([readClaudeAppliedSettings(native), currentPreflight.cancellation]); }\n catch (error) {\n if (error instanceof ClaudeSettingsUnavailable) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code could not verify the retained session model before submission.\");\n throw error;\n }\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the model during retained-session validation before submission.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n }\n if (closed) throw sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\");\n } finally {\n if (preflight === currentPreflight) preflight = undefined;\n currentPreflight.stop();\n }\n return await new Promise((resolve, reject) => {\n inputFailure = undefined;\n tools.start();\n let stop!: () => void;\n const stopped = new Promise<void>(resolve => { stop = resolve; });\n active = {resolve, reject, stopped, stop, interrupted:false};\n acceptingApprovals = true;\n input.push({type:\"user\",message:{role:\"user\",content:prompt},parent_tool_use_id:null,uuid:randomUUID()});\n });\n },\n async steer() { throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Claude Code does not expose verified active steering.\"); },\n async interrupt() {\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted before submission.\"));\n await pending.stopped;\n return;\n }\n const current = active;\n if (!current) return;\n current.interrupted = true;\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n try { await native.interrupt(); }\n catch {\n current.interrupted = false;\n throw new AgentError(\"CANCEL_FAILED\", \"Claude Code did not confirm interruption.\");\n }\n await current.stopped;\n },\n async resume() { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Claude Code cannot retry failed execution without replaying input.\"); },\n async close() {\n exitObservedBeforeClose ??= processOwner.exitDescription();\n closed = true;\n acceptingApprovals = false;\n approvals.clear();\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"SESSION_CLOSED\", \"The native session closed before submission.\"));\n await pending.stopped;\n }\n tools.stopAdmission();\n input.close();\n native.close();\n const stopping = processOwner.close();\n try { await reading; }\n finally { await stopping; }\n },\n };\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AccountInfo, Options, SDKMessage, SDKUserMessage, Settings, ModelInfo } from \"@anthropic-ai/claude-agent-sdk\";\nimport { AgentError } from \"../errors.js\";\nimport type { AdapterOptions, NativeSession } from \"./types.js\";\nimport { privateClaudeConfig } from \"./claude-config.js\";\nimport { claudeTools } from \"./claude-tools.js\";\nimport { ClaudeInput } from \"./claude-input.js\";\nimport { claudeDelegationPermissions } from \"./claude-permissions.js\";\nimport { claudeSettings, verifyClaudeAccess, verifyClaudePolicy, verifyClaudeOptions } from \"./claude-auth.js\";\nimport { ClaudeSettingsUnavailable, claudeDefaultUnavailable, readClaudeAppliedSettings, verifyAppliedClaudeEffort } from \"./claude-settings.js\";\nimport { NativeApprovals } from \"./approval-lifetime.js\";\nimport { claudeApproval } from \"./claude-approvals.js\";\nimport { ClaudeProcessOwner } from \"./claude-process.js\";\nimport { claudeResultFailure } from \"./claude-result.js\";\nimport { ClaudeWorkerClient } from \"./claude-worker-client.js\";\nimport type { ClaudeWorkerFactory } from \"./claude-worker-protocol.js\";\n\nexport interface ClaudeQuery extends AsyncIterable<SDKMessage> {\n accountInfo(): Promise<AccountInfo>;\n supportedModels(): Promise<ModelInfo[]>;\n interrupt(): Promise<unknown>;\n close(): void;\n getSettings?(): Promise<unknown>;\n setModel?(model?: string): Promise<void>;\n}\nexport interface ClaudeQueryBridge {\n readonly tools: ReturnType<typeof claudeTools>;\n readonly processOwner: ClaudeProcessOwner;\n}\nexport interface ClaudeDependencies {\n query(args: {prompt: AsyncIterable<SDKUserMessage>; options: Options}, bridge: ClaudeQueryBridge): ClaudeQuery | Promise<ClaudeQuery>;\n executable(env: NodeJS.ProcessEnv): Promise<string>;\n managedSettings(cwd: string): Promise<Settings[]>;\n dispose?(): Promise<void>;\n}\n\nfunction addCatalogEquivalentModels(expected: Set<string>, models: ModelInfo[], selected: string): void {\n expected.add(selected);\n for (const model of models) {\n if (model.value !== selected && model.resolvedModel !== selected) continue;\n expected.add(model.value);\n if (model.resolvedModel) expected.add(model.resolvedModel);\n }\n}\n\nexport interface ClaudeOpenerOptions {\n readonly createWorker?: ClaudeWorkerFactory;\n}\n\nfunction injectedDependencies(value: ClaudeDependencies | ClaudeOpenerOptions): value is ClaudeDependencies {\n return \"query\" in value;\n}\n\nexport const openClaude = createClaudeOpener();\n\n/** Dependency injection is internal and replaces only private process boundaries in tests. */\nexport function createClaudeOpener(configuration: ClaudeDependencies | ClaudeOpenerOptions = {}) {\n if (injectedDependencies(configuration)) return openClaudeWithDependencies(configuration);\n return async (options: AdapterOptions): Promise<NativeSession> => {\n const client = new ClaudeWorkerClient(options.env,configuration);\n try { return await openClaudeWithDependencies(client.dependencies)(options); }\n catch (error) {\n try { await client.dispose(); }\n catch {\n const startup = error instanceof AgentError || error instanceof AggregateError\n ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code startup failed.\");\n throw new AggregateError(\n [startup,new AgentError(\"HARNESS_FAILED\",\"Claude Code worker cleanup failed.\")],\n \"Claude Code startup and cleanup failed.\",\n );\n }\n throw error;\n }\n };\n}\n\nfunction openClaudeWithDependencies(deps: ClaudeDependencies) {\n return async (options: AdapterOptions): Promise<NativeSession> => {\n if (options.harness.kind !== \"claudeCode\") throw new AgentError(\"INVALID_CONFIG\", \"Claude Code received configuration for a different harness.\");\n const permissionMode = options.harness.permissionMode;\n const settings = claudeSettings(options);\n const executable = await deps.executable(options.env);\n verifyClaudePolicy(await deps.managedSettings(options.cwd), settings.settings as Settings);\n const tools = claudeTools(options.agent);\n const allowedTools = [\n ...(options.harness.allowedTools ?? []),\n ...tools.allowedTools,\n ...claudeDelegationPermissions(options),\n ];\n const config = await privateClaudeConfig(settings.settings as Settings);\n const input = new ClaudeInput<SDKUserMessage>();\n const processOwner = new ClaudeProcessOwner();\n let cleanupComplete = false;\n let cleanupAttempt: Promise<void> | undefined;\n const cleanupResources = (): Promise<void> => {\n if (cleanupComplete) return Promise.resolve();\n if (cleanupAttempt) return cleanupAttempt;\n cleanupAttempt = (async () => {\n const failures: AgentError[] = [];\n try { await processOwner.close(); }\n catch (error) { failures.push(error instanceof AgentError ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code process cleanup failed.\")); }\n try { await config.cleanup(); }\n catch { failures.push(new AgentError(\"HARNESS_FAILED\",\"Claude Code private configuration cleanup failed.\")); }\n try { await deps.dispose?.(); }\n catch (error) { failures.push(error instanceof AgentError ? error : new AgentError(\"HARNESS_FAILED\",\"Claude Code worker cleanup failed.\")); }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures,\"Claude Code cleanup failed.\");\n cleanupComplete = true;\n })().catch(error => {\n cleanupAttempt = undefined;\n throw error;\n });\n return cleanupAttempt;\n };\n let inputFailure: AgentError | undefined;\n const approvals = new NativeApprovals();\n let acceptingApprovals = false;\n const requireInput = (toolName?: string) => {\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n const subject = toolName && /^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(toolName)\n ? `approval for native tool ${toolName}`\n : \"interactive input\";\n inputFailure = new AgentError(\"INPUT_REQUIRED\", `Claude Code needs ${subject}. Configure its native permissions before retrying.`);\n };\n let native: ClaudeQuery;\n try { native = await deps.query({prompt: input, options: {\n pathToClaudeCodeExecutable: executable,\n spawnClaudeCodeProcess: processOwner.spawn,\n cwd: options.cwd,\n ...settings,\n ...(allowedTools.length ? {allowedTools} : {}),\n ...(options.harness.disallowedTools !== undefined ? {disallowedTools:[...options.harness.disallowedTools]} : {}),\n ...(permissionMode !== undefined ? {permissionMode} : {}),\n ...(permissionMode === \"bypassPermissions\" ? {allowDangerouslySkipPermissions:true} : {}),\n settings: config.path,\n stderr: () => {},\n ...(options.harness.model ? {model: options.harness.model} : {}),\n systemPrompt: options.agent.instructions\n ? {type: \"preset\", preset: \"claude_code\", append: options.agent.instructions}\n : {type: \"preset\", preset: \"claude_code\"},\n settingSources: [\"user\", \"project\", \"local\"],\n canUseTool: async (toolName, toolInput, metadata) => {\n if (options.onApproval && acceptingApprovals && toolName !== \"AskUserQuestion\") {\n try {\n const answer = await claudeApproval(approvals, options.onApproval, toolName, toolInput, metadata);\n if (!acceptingApprovals || metadata.signal.aborted) return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n return answer;\n }\n catch (error) {\n if (error instanceof AgentError && error.code === \"REQUEST_EXPIRED\") return {behavior:\"deny\",message:\"The permission request is no longer pending.\"};\n }\n }\n requireInput(toolName);\n return {behavior: \"deny\", message: inputFailure!.message, interrupt: true};\n },\n onElicitation: async () => {\n acceptingApprovals = false;\n approvals.clear();\n requireInput();\n try { await native.interrupt(); } catch { native.close(); }\n return {action: \"decline\"};\n },\n }}, {tools,processOwner}); }\n catch (error) {\n const exit = processOwner.exitDescription();\n input.close();\n const failure = error instanceof AgentError && error.code === \"HARNESS_FAILED\"\n ? error : new AgentError(\"HARNESS_UNAVAILABLE\", `Claude Code could not start${exit}.`);\n try { await cleanupResources(); }\n catch (cleanupError) { throw new AggregateError([failure,cleanupError],\"Claude Code startup and cleanup failed.\"); }\n throw failure;\n }\n const expectedModels = new Set<string>();\n let retainedModel: string | undefined;\n let startupPhase: \"account inspection\" | \"model catalog retrieval\" | \"model settings validation\" = \"account inspection\";\n try {\n const account = await native.accountInfo();\n verifyClaudeAccess(account, options.access);\n startupPhase = \"model catalog retrieval\";\n const models = await native.supportedModels();\n if (options.harness.model) {\n addCatalogEquivalentModels(expectedModels, models, options.harness.model);\n verifyClaudeOptions(models, options);\n startupPhase = \"model settings validation\";\n try {\n const applied = await readClaudeAppliedSettings(native);\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during startup settings validation.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n retainedModel = applied.model;\n expectedModels.add(applied.model);\n } catch (error) {\n if (!(error instanceof ClaudeSettingsUnavailable)) throw error;\n }\n } else {\n startupPhase = \"model settings validation\";\n if (!native.getSettings || !native.setModel) throw claudeDefaultUnavailable();\n let selected;\n try { selected = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n startupPhase = \"model catalog retrieval\";\n verifyClaudeOptions(models, options, selected.model);\n startupPhase = \"model settings validation\";\n verifyAppliedClaudeEffort(selected.effort, options.harness.effort);\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, selected.model);\n startupPhase = \"model settings validation\";\n try { await native.setModel(selected.model); } catch { throw claudeDefaultUnavailable(); }\n let pinned;\n try { pinned = await readClaudeAppliedSettings(native); }\n catch (error) { if (error instanceof ClaudeSettingsUnavailable) throw claudeDefaultUnavailable(); throw error; }\n if (!expectedModels.has(pinned.model)) {\n throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the selected native default during startup settings validation. Supply --model <model>.\");\n }\n verifyAppliedClaudeEffort(pinned.effort, options.harness.effort);\n retainedModel = pinned.model;\n startupPhase = \"model catalog retrieval\";\n addCatalogEquivalentModels(expectedModels, models, pinned.model);\n startupPhase = \"model settings validation\";\n }\n if (inputFailure) throw inputFailure;\n }\n catch (error) {\n const exit = processOwner.exitDescription();\n input.close();\n native.close();\n const failure = error instanceof AgentError ? error\n : new AgentError(\"HARNESS_FAILED\", `Claude Code ${startupPhase} failed${exit}.`);\n try { await cleanupResources(); }\n catch (cleanupError) { throw new AggregateError([failure,cleanupError],\"Claude Code startup and cleanup failed.\"); }\n throw failure;\n }\n let closed = false;\n let preflight: {\n cancellation: Promise<never>;\n cancel(error: AgentError): void;\n stopped: Promise<void>;\n stop(): void;\n } | undefined;\n let sessionFailure: AgentError | undefined;\n let exitObservedBeforeClose: string | undefined;\n let active: {\n resolve(text: string): void; reject(error: unknown): void;\n stopped: Promise<void>; stop(): void; interrupted: boolean;\n } | undefined;\n const reading = (async () => {\n try {\n for await (const message of native) {\n if (message.type === \"system\" && message.subtype === \"init\") {\n if (!expectedModels.has(message.model)) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code selected a different model than requested during native initialization.\");\n } else if (permissionMode !== undefined && message.permissionMode !== permissionMode) {\n sessionFailure = new AgentError(\"INVALID_CONFIG\", \"Claude Code reported a different permission mode than requested.\");\n }\n if (sessionFailure) {\n tools.stopAdmission();\n native.close();\n break;\n }\n }\n if (message.type !== \"result\" || !active) continue;\n const current = active;\n acceptingApprovals = false;\n approvals.clear();\n await tools.drain();\n active = undefined;\n current.stop();\n if (inputFailure) current.reject(inputFailure);\n else if (current.interrupted) current.reject(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted.\"));\n else if (message.subtype === \"success\" && !message.is_error) {\n if (Buffer.byteLength(message.result, \"utf8\") > 1024 * 1024) {\n current.reject(new AgentError(\"RESPONSE_TOO_LARGE\", \"The Claude Code response exceeds 1 MiB.\"));\n } else current.resolve(message.result);\n }\n else current.reject(claudeResultFailure(message.subtype));\n }\n } catch (error) {\n if (error instanceof AgentError) {\n sessionFailure = error;\n }\n // Native diagnostics may contain credentials; return a stable safe message.\n } finally {\n acceptingApprovals = false;\n approvals.clear();\n const explicitClose = exitObservedBeforeClose !== undefined;\n const code = explicitClose ? \"SESSION_CLOSED\" : \"HARNESS_ERROR\";\n closed = true;\n input.close();\n await tools.drain();\n const exit = explicitClose ? exitObservedBeforeClose : processOwner.exitDescription();\n const ending = active;\n ending?.reject(sessionFailure ?? inputFailure ?? new AgentError(code, `The Claude Code process stopped${exit} before completing the turn.`));\n try { await cleanupResources(); }\n finally {\n ending?.stop();\n if (active === ending) active = undefined;\n }\n }\n })();\n void reading.catch(() => undefined);\n let closeAttempt: Promise<void> | undefined;\n let closeComplete = false;\n let failedCloseAttempts = 0;\n const close = (): Promise<void> => {\n if (closeComplete) return Promise.resolve();\n if (closeAttempt) return closeAttempt;\n closeAttempt = (async () => {\n exitObservedBeforeClose ??= processOwner.exitDescription();\n closed = true;\n acceptingApprovals = false;\n approvals.clear();\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"SESSION_CLOSED\", \"The native session closed before submission.\"));\n await pending.stopped;\n }\n tools.stopAdmission();\n input.close();\n native.close();\n const stoppingFailure = processOwner.close().then(() => new Promise<never>(() => {}));\n let readingFailure: unknown;\n try { await Promise.race([reading,stoppingFailure]); }\n catch (error) { readingFailure = error; }\n if (readingFailure && failedCloseAttempts === 0) throw readingFailure;\n if (!cleanupComplete) await cleanupResources();\n closeComplete = true;\n })().catch(error => {\n failedCloseAttempts += 1;\n closeAttempt = undefined;\n throw error;\n });\n return closeAttempt;\n };\n return {\n async turn(prompt) {\n if (closed) return Promise.reject(sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\"));\n if (active || preflight) return Promise.reject(new AgentError(\"SESSION_BUSY\", \"A native turn is already active.\"));\n let cancel!: (error: AgentError) => void, stop!: () => void;\n const currentPreflight = {\n cancellation: new Promise<never>((_resolve, reject) => { cancel = reject; }),\n cancel(error: AgentError) { cancel(error); },\n stopped: new Promise<void>(resolve => { stop = resolve; }),\n stop() { stop(); },\n };\n preflight = currentPreflight;\n try {\n if (native.getSettings && retainedModel) {\n let applied;\n try { applied = await Promise.race([readClaudeAppliedSettings(native), currentPreflight.cancellation]); }\n catch (error) {\n if (error instanceof ClaudeSettingsUnavailable) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code could not verify the retained session model before submission.\");\n throw error;\n }\n if (!expectedModels.has(applied.model)) throw new AgentError(\"INVALID_CONFIG\", \"Claude Code changed the model during retained-session validation before submission.\");\n verifyAppliedClaudeEffort(applied.effort, options.harness.effort);\n }\n if (closed) throw sessionFailure ?? new AgentError(\"SESSION_CLOSED\", \"The native session has closed.\");\n } finally {\n if (preflight === currentPreflight) preflight = undefined;\n currentPreflight.stop();\n }\n return await new Promise((resolve, reject) => {\n inputFailure = undefined;\n tools.start();\n let stop!: () => void;\n const stopped = new Promise<void>(resolve => { stop = resolve; });\n active = {resolve, reject, stopped, stop, interrupted:false};\n acceptingApprovals = true;\n input.push({type:\"user\",message:{role:\"user\",content:prompt},parent_tool_use_id:null,uuid:randomUUID()});\n });\n },\n async steer() { throw new AgentError(\"UNSUPPORTED_DELIVERY\", \"Claude Code does not expose verified active steering.\"); },\n async interrupt() {\n const pending = preflight;\n if (pending) {\n pending.cancel(new AgentError(\"INTERRUPTED\", \"The native turn was interrupted before submission.\"));\n await pending.stopped;\n return;\n }\n const current = active;\n if (!current) return;\n current.interrupted = true;\n acceptingApprovals = false;\n approvals.clear();\n tools.stopAdmission();\n try { await native.interrupt(); }\n catch (error) {\n current.interrupted = false;\n if (error instanceof AgentError && error.code === \"HARNESS_FAILED\") throw error;\n throw new AgentError(\"CANCEL_FAILED\", \"Claude Code did not confirm interruption.\");\n }\n await current.stopped;\n },\n async resume() { throw new AgentError(\"RECOVERY_UNSUPPORTED\", \"Claude Code cannot retry failed execution without replaying input.\"); },\n close,\n };\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-worker.js","sourceRoot":"","sources":["../../src/cli/catalog-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAoE,EAAE,EAAE;IACnJ,IAAI,KAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc;YAC5B,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChI,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAAC,CAAC;IACxD,6FAA6F;IAC7F,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAmB,EAAE,EAAE,GAAG,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC","sourcesContent":["import { discover, loadDefinition } from \"../config/loader.js\";\nimport { errorInfo } from \"../errors.js\";\nimport type { ExecutionReference } from \"../runtime/types.js\";\nimport type { CatalogReply } from \"
|
|
1
|
+
{"version":3,"file":"catalog-worker.js","sourceRoot":"","sources":["../../src/cli/catalog-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAoE,EAAE,EAAE;IACnJ,IAAI,KAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc;YAC5B,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChI,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAAC,CAAC;IACxD,6FAA6F;IAC7F,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAmB,EAAE,EAAE,GAAG,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC","sourcesContent":["import { discover, loadDefinition } from \"../config/loader.js\";\nimport { errorInfo } from \"../errors.js\";\nimport type { ExecutionReference } from \"../runtime/types.js\";\nimport type { CatalogReply } from \"../runtime/catalog.js\";\n\nprocess.on(\"disconnect\", () => process.exit());\nprocess.once(\"message\", async ({ cwd, parent, discover: shouldDiscover = true }: { cwd: string; parent?: ExecutionReference; discover?: boolean }) => {\n let reply: CatalogReply;\n try {\n const entries = shouldDiscover\n ? (await discover(cwd)).map(({ id, name, description, scope, file }) => ({ id, name, description, scope, file }))\n : [];\n const definition = parent && 'file' in parent ? await loadDefinition(parent.file, parent.subagents) : undefined;\n const children = Object.entries(definition?.subagents ?? {}).map(([name, child]) => ({ name, description: child.description }));\n reply = { result: { entries, children } };\n } catch (error) { reply = { error: errorInfo(error) }; }\n // Wait until the caller receives the result, then end any timers created by trusted modules.\n process.once(\"message\", () => process.exit());\n process.send?.(reply, (error: Error | null) => { if (error) process.exit(1); });\n});\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isAbsolute } from 'node:path';
|
|
2
2
|
import { AgentError } from '../errors.js';
|
|
3
|
+
import { CoordinatorTransport } from '../runtime/transport.js';
|
|
3
4
|
const harnesses = new Set(['codex', 'claude', 'fx', 'opencode', 'copilot', 'cursor', 'pending']);
|
|
4
5
|
const states = new Set(['queued', 'running', 'waiting', 'awaiting_approval', 'completed', 'failed', 'cancelled', 'interrupted']);
|
|
5
6
|
const finishedStates = new Set(['completed', 'cancelled', 'interrupted']);
|
|
@@ -145,15 +146,7 @@ function outdatedCoordinator(endpoint, capability = 'overview') {
|
|
|
145
146
|
export async function fetchDashboardSession(endpoint, id, signal, timeoutMs = 5_000) {
|
|
146
147
|
const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);
|
|
147
148
|
try {
|
|
148
|
-
const
|
|
149
|
-
method: 'POST', headers: { authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json' },
|
|
150
|
-
body: JSON.stringify({ command: 'dashboard-session', id }), signal: bounded,
|
|
151
|
-
});
|
|
152
|
-
if (!response.ok) {
|
|
153
|
-
await response.body?.cancel();
|
|
154
|
-
throw new Error('Rejected session');
|
|
155
|
-
}
|
|
156
|
-
const session = JSON.parse(await response.text());
|
|
149
|
+
const session = await dashboardRecord(endpoint, { command: 'dashboard-session', id }, bounded);
|
|
157
150
|
if (isLegacyUnknownOperation(session))
|
|
158
151
|
throw outdatedCoordinator(endpoint, 'session');
|
|
159
152
|
if (!isSession(session, id))
|
|
@@ -161,7 +154,7 @@ export async function fetchDashboardSession(endpoint, id, signal, timeoutMs = 5_
|
|
|
161
154
|
return session;
|
|
162
155
|
}
|
|
163
156
|
catch (error) {
|
|
164
|
-
if (error instanceof AgentError)
|
|
157
|
+
if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED')
|
|
165
158
|
throw error;
|
|
166
159
|
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid session history.');
|
|
167
160
|
}
|
|
@@ -169,15 +162,7 @@ export async function fetchDashboardSession(endpoint, id, signal, timeoutMs = 5_
|
|
|
169
162
|
export async function fetchDashboardSnapshot(endpoint, signal, timeoutMs = 5_000) {
|
|
170
163
|
const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);
|
|
171
164
|
try {
|
|
172
|
-
const
|
|
173
|
-
method: 'POST', headers: { authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json' },
|
|
174
|
-
body: JSON.stringify({ command: 'dashboard' }), signal: bounded,
|
|
175
|
-
});
|
|
176
|
-
if (!response.ok) {
|
|
177
|
-
await response.body?.cancel();
|
|
178
|
-
throw new Error('Rejected snapshot');
|
|
179
|
-
}
|
|
180
|
-
const snapshot = JSON.parse(await response.text());
|
|
165
|
+
const snapshot = await dashboardRecord(endpoint, { command: 'dashboard' }, bounded);
|
|
181
166
|
if (isLegacyUnknownOperation(snapshot))
|
|
182
167
|
throw outdatedCoordinator(endpoint);
|
|
183
168
|
if (!isSnapshot(snapshot))
|
|
@@ -188,7 +173,7 @@ export async function fetchDashboardSnapshot(endpoint, signal, timeoutMs = 5_000
|
|
|
188
173
|
return { ...snapshot, history: true, grouping: true };
|
|
189
174
|
}
|
|
190
175
|
catch (error) {
|
|
191
|
-
if (error instanceof AgentError)
|
|
176
|
+
if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED')
|
|
192
177
|
throw error;
|
|
193
178
|
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received an invalid snapshot.');
|
|
194
179
|
}
|
|
@@ -201,15 +186,7 @@ export async function fetchDashboardDetail(endpoint, id, signal, includePrompt =
|
|
|
201
186
|
if (knownResponseId !== undefined)
|
|
202
187
|
request.knownResponseId = knownResponseId;
|
|
203
188
|
try {
|
|
204
|
-
const
|
|
205
|
-
method: 'POST', headers: { authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json' },
|
|
206
|
-
body: JSON.stringify(request), signal: bounded,
|
|
207
|
-
});
|
|
208
|
-
if (!response.ok) {
|
|
209
|
-
await response.body?.cancel();
|
|
210
|
-
throw new Error('Rejected detail');
|
|
211
|
-
}
|
|
212
|
-
const detail = JSON.parse(await response.text());
|
|
189
|
+
const detail = await dashboardRecord(endpoint, request, bounded);
|
|
213
190
|
if (isLegacyUnknownOperation(detail))
|
|
214
191
|
throw outdatedCoordinator(endpoint, 'inspection');
|
|
215
192
|
if (!isDetail(detail, id, includePrompt, knownResponseId))
|
|
@@ -217,9 +194,21 @@ export async function fetchDashboardDetail(endpoint, id, signal, includePrompt =
|
|
|
217
194
|
return detail;
|
|
218
195
|
}
|
|
219
196
|
catch (error) {
|
|
220
|
-
if (error instanceof AgentError)
|
|
197
|
+
if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED')
|
|
221
198
|
throw error;
|
|
222
199
|
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid task details.');
|
|
223
200
|
}
|
|
224
201
|
}
|
|
202
|
+
async function dashboardRecord(endpoint, body, signal) {
|
|
203
|
+
const transport = new CoordinatorTransport(endpoint);
|
|
204
|
+
let value;
|
|
205
|
+
let count = 0;
|
|
206
|
+
for await (const record of transport.records(body, signal, { allowFinalRecord: true })) {
|
|
207
|
+
value = record;
|
|
208
|
+
count++;
|
|
209
|
+
}
|
|
210
|
+
if (count !== 1)
|
|
211
|
+
throw new Error('Invalid dashboard response record count.');
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
225
214
|
//# sourceMappingURL=dashboard-client.js.map
|