subharness 0.0.4 → 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 +95 -9
- package/dist/adapters/claude-process.d.ts +3 -0
- package/dist/adapters/claude-process.js +19 -2
- package/dist/adapters/claude-process.js.map +1 -1
- package/dist/adapters/claude-result.d.ts +2 -0
- package/dist/adapters/claude-result.js +22 -0
- package/dist/adapters/claude-result.js.map +1 -0
- 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 +164 -75
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/codex.js +4 -1
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/copilot-permissions.d.ts +26 -0
- package/dist/adapters/copilot-permissions.js +121 -0
- package/dist/adapters/copilot-permissions.js.map +1 -0
- package/dist/adapters/copilot-tools.d.ts +12 -0
- package/dist/adapters/copilot-tools.js +61 -0
- package/dist/adapters/copilot-tools.js.map +1 -0
- package/dist/adapters/copilot.d.ts +108 -0
- package/dist/adapters/copilot.js +819 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor-cli-approvals.d.ts +2 -0
- package/dist/adapters/cursor-cli-approvals.js +83 -0
- package/dist/adapters/cursor-cli-approvals.js.map +1 -0
- package/dist/adapters/cursor-cli-model.d.ts +4 -0
- package/dist/adapters/cursor-cli-model.js +64 -0
- package/dist/adapters/cursor-cli-model.js.map +1 -0
- package/dist/adapters/cursor-cli-session.d.ts +32 -0
- package/dist/adapters/cursor-cli-session.js +316 -0
- package/dist/adapters/cursor-cli-session.js.map +1 -0
- package/dist/adapters/cursor-cli-tools.d.ts +20 -0
- package/dist/adapters/cursor-cli-tools.js +181 -0
- package/dist/adapters/cursor-cli-tools.js.map +1 -0
- package/dist/adapters/cursor-cli.d.ts +2 -0
- package/dist/adapters/cursor-cli.js +306 -0
- package/dist/adapters/cursor-cli.js.map +1 -0
- package/dist/adapters/cursor-model.d.ts +7 -0
- package/dist/adapters/cursor-model.js +67 -0
- package/dist/adapters/cursor-model.js.map +1 -0
- package/dist/adapters/cursor-rpc.d.ts +42 -0
- package/dist/adapters/cursor-rpc.js +271 -0
- package/dist/adapters/cursor-rpc.js.map +1 -0
- package/dist/adapters/cursor-session.d.ts +4 -0
- package/dist/adapters/cursor-session.js +327 -0
- package/dist/adapters/cursor-session.js.map +1 -0
- package/dist/adapters/cursor-startup.d.ts +16 -0
- package/dist/adapters/cursor-startup.js +74 -0
- package/dist/adapters/cursor-startup.js.map +1 -0
- package/dist/adapters/cursor-tools.d.ts +11 -0
- package/dist/adapters/cursor-tools.js +49 -0
- package/dist/adapters/cursor-tools.js.map +1 -0
- package/dist/adapters/cursor.d.ts +6 -0
- package/dist/adapters/cursor.js +17 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/fx-auth.d.ts +12 -2
- package/dist/adapters/fx-auth.js +51 -61
- package/dist/adapters/fx-auth.js.map +1 -1
- package/dist/adapters/fx-profile.d.ts +8 -0
- package/dist/adapters/fx-profile.js +101 -0
- package/dist/adapters/fx-profile.js.map +1 -0
- package/dist/adapters/fx-rpc.d.ts +2 -0
- package/dist/adapters/fx-rpc.js +30 -4
- package/dist/adapters/fx-rpc.js.map +1 -1
- package/dist/adapters/fx-status.d.ts +2 -0
- package/dist/adapters/fx-status.js +96 -0
- package/dist/adapters/fx-status.js.map +1 -0
- package/dist/adapters/fx.js +28 -12
- package/dist/adapters/fx.js.map +1 -1
- package/dist/adapters/opencode-access.d.ts +13 -0
- package/dist/adapters/opencode-access.js +76 -0
- package/dist/adapters/opencode-access.js.map +1 -0
- package/dist/adapters/opencode-config.d.ts +11 -0
- package/dist/adapters/opencode-config.js +238 -0
- package/dist/adapters/opencode-config.js.map +1 -0
- package/dist/adapters/opencode-http.d.ts +28 -0
- package/dist/adapters/opencode-http.js +297 -0
- package/dist/adapters/opencode-http.js.map +1 -0
- package/dist/adapters/opencode-tools.d.ts +19 -0
- package/dist/adapters/opencode-tools.js +127 -0
- package/dist/adapters/opencode-tools.js.map +1 -0
- package/dist/adapters/opencode.d.ts +2 -0
- package/dist/adapters/opencode.js +569 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/rpc.d.ts +3 -0
- package/dist/adapters/rpc.js +45 -4
- package/dist/adapters/rpc.js.map +1 -1
- package/dist/adapters/types.d.ts +5 -0
- package/dist/adapters/types.js.map +1 -1
- package/dist/approvals/types.d.ts +1 -1
- package/dist/approvals/types.js.map +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.js +4 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/catalog-worker.js.map +1 -1
- package/dist/cli/dashboard-client.js +20 -31
- package/dist/cli/dashboard-client.js.map +1 -1
- package/dist/cli/dashboard-controller.d.ts +7 -0
- package/dist/cli/dashboard-controller.js +27 -0
- package/dist/cli/dashboard-controller.js.map +1 -0
- package/dist/cli/dashboard-detail-view.d.ts +1 -1
- package/dist/cli/dashboard-detail-view.js +3 -4
- package/dist/cli/dashboard-detail-view.js.map +1 -1
- package/dist/cli/dashboard-history-view.js.map +1 -1
- package/dist/cli/dashboard-input.d.ts +1 -1
- package/dist/cli/dashboard-input.js +11 -1
- package/dist/cli/dashboard-input.js.map +1 -1
- package/dist/cli/dashboard-layout.js +3 -3
- package/dist/cli/dashboard-layout.js.map +1 -1
- package/dist/cli/dashboard-renderer.js.map +1 -1
- package/dist/cli/dashboard-style.js +2 -2
- package/dist/cli/dashboard-style.js.map +1 -1
- package/dist/cli/dashboard.d.ts +2 -2
- package/dist/cli/dashboard.js +7 -32
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +30 -12
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +55 -43
- package/dist/cli/main.js.map +1 -1
- package/dist/config/access-provenance.d.ts +10 -0
- package/dist/config/access-provenance.js +31 -0
- package/dist/config/access-provenance.js.map +1 -0
- package/dist/config/access.d.ts +12 -2
- package/dist/config/access.js +125 -27
- package/dist/config/access.js.map +1 -1
- package/dist/config/loader.js +1 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/oidc.js +4 -2
- package/dist/config/oidc.js.map +1 -1
- package/dist/config/project.js +2 -1
- package/dist/config/project.js.map +1 -1
- package/dist/config/resolve-access.js +24 -10
- package/dist/config/resolve-access.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/process-diagnostics.d.ts +2 -0
- package/dist/process-diagnostics.js +11 -0
- package/dist/process-diagnostics.js.map +1 -0
- package/dist/runtime/access-errors.d.ts +4 -0
- package/dist/runtime/access-errors.js +25 -0
- package/dist/runtime/access-errors.js.map +1 -0
- package/dist/runtime/approval-registry.d.ts +9 -0
- package/dist/runtime/approval-registry.js +144 -5
- 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 +74 -47
- 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-sanitize.d.ts +2 -0
- package/dist/runtime/dashboard-sanitize.js +7 -0
- package/dist/runtime/dashboard-sanitize.js.map +1 -0
- package/dist/runtime/dashboard-workspace.js +5 -1
- package/dist/runtime/dashboard-workspace.js.map +1 -1
- package/dist/runtime/dashboard.d.ts +1 -1
- package/dist/runtime/dashboard.js +2 -3
- package/dist/runtime/dashboard.js.map +1 -1
- package/dist/runtime/definition.d.ts +6 -1
- package/dist/runtime/definition.js +42 -2
- 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 +28 -13
- 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 +40 -13
- 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/definitions.d.ts +4 -1
- package/dist/sdk/definitions.js +16 -2
- package/dist/sdk/definitions.js.map +1 -1
- 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/permission-validation.js +10 -1
- package/dist/sdk/permission-validation.js.map +1 -1
- 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/dist/sdk/types.d.ts +29 -1
- package/dist/sdk/types.js.map +1 -1
- package/package.json +6 -3
- package/sdk/access-config.md +60 -4
- package/sdk/adapter-contract.md +13 -3
- package/sdk/additional-harnesses.md +43 -0
- package/sdk/agent-skill.md +2 -2
- package/sdk/agent.md +6 -4
- package/sdk/approvals.md +5 -1
- package/sdk/authentication.md +1 -1
- package/sdk/cli/dashboard-design.md +6 -0
- package/sdk/cli/index.md +9 -6
- package/sdk/cli/output.md +3 -1
- package/sdk/completion-notifications.md +2 -0
- package/sdk/config.md +1 -1
- package/sdk/copilot.md +53 -0
- package/sdk/cursor.md +68 -0
- package/sdk/diagnostics.md +29 -0
- package/sdk/distribution.md +5 -3
- package/sdk/evals.md +1 -1
- package/sdk/examples/chat-tool.ts +126 -0
- package/sdk/execution.md +743 -0
- package/sdk/fx.md +50 -5
- package/sdk/harnesses.md +13 -13
- package/sdk/index.md +45 -20
- package/sdk/message-delivery.md +2 -0
- package/sdk/opencode.md +57 -0
- package/sdk/permissions.md +6 -2
- package/sdk/plugins/sub-agents.md +4 -2
- package/sdk/project-team.md +25 -1
- package/sdk/sessions.md +2 -0
- package/sdk/tools.md +4 -2
- package/sdk/v1-runtime.md +8 -6
- 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/runtime/client.js
CHANGED
|
@@ -1,50 +1,77 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
3
3
|
import { AgentError } from '../errors.js';
|
|
4
|
-
import {
|
|
4
|
+
import { processExitDescription } from '../process-diagnostics.js';
|
|
5
|
+
import { localProgram, privateDirectory, probeEndpoint, resolveStateDirectory, } from './state.js';
|
|
5
6
|
import { startupOutcome, startupRetirementRequest } from './startup-protocol.js';
|
|
7
|
+
import { CoordinatorTransport } from './transport.js';
|
|
6
8
|
const retirementConfirmationMs = 1_000;
|
|
9
|
+
const finalProbeMs = 250;
|
|
7
10
|
export async function connect(start, options = {}) {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
11
|
+
const deadline = Date.now() + (options.timeoutMs ?? 15_000);
|
|
12
|
+
const directory = resolveStateDirectory(options.directory);
|
|
13
|
+
const capability = options.capability ?? 'cli-v1';
|
|
14
|
+
const initial = await probeEndpoint(directory, { capability, timeoutMs: remaining(deadline) });
|
|
15
|
+
const available = usableEndpoint(initial, start);
|
|
10
16
|
if (available)
|
|
11
17
|
return available;
|
|
12
18
|
if (!start)
|
|
13
|
-
throw
|
|
19
|
+
throw unavailable();
|
|
14
20
|
await privateDirectory(directory);
|
|
15
|
-
const deadline = Date.now() + (options.timeoutMs ?? 15_000);
|
|
16
21
|
let child;
|
|
17
22
|
let candidate;
|
|
18
23
|
try {
|
|
19
24
|
if (Date.now() >= deadline)
|
|
20
25
|
throw new AgentError('STARTUP_FAILED', 'Another command did not finish coordinator startup.');
|
|
21
26
|
const program = options.program ?? localProgram('daemon');
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
try {
|
|
28
|
+
child = spawn(process.execPath, [...program.execArgv, program.file, String(Math.max(1, deadline - Date.now()))], {
|
|
29
|
+
detached: true, stdio: ['ignore', 'ignore', 'ignore', 'ipc'], env: { ...process.env, AGENT_STATE_DIR: directory },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new AgentError('STARTUP_FAILED', 'The local coordinator could not be spawned.');
|
|
34
|
+
}
|
|
25
35
|
candidate = observeCandidate(child);
|
|
26
36
|
options.afterSpawn?.(child);
|
|
27
37
|
child.unref();
|
|
28
38
|
while (Date.now() < deadline && !candidate.current()) {
|
|
29
39
|
await delay(50);
|
|
30
|
-
const
|
|
40
|
+
const probe = await probeEndpoint(directory, { capability, timeoutMs: remaining(deadline) });
|
|
41
|
+
const endpoint = usableEndpoint(probe, true);
|
|
31
42
|
if (endpoint)
|
|
32
43
|
return endpoint;
|
|
33
44
|
}
|
|
34
45
|
const observed = candidate.current();
|
|
35
|
-
if (observed?.state === 'published')
|
|
36
|
-
|
|
46
|
+
if (observed?.state === 'published') {
|
|
47
|
+
const published = usableEndpoint(await probeEndpoint(directory, { capability, timeoutMs: finalProbeTimeout(deadline) }), true);
|
|
48
|
+
if (published)
|
|
49
|
+
return published;
|
|
50
|
+
throw unavailable();
|
|
51
|
+
}
|
|
37
52
|
if (!observed) {
|
|
38
53
|
await options.beforeRetirement?.(child);
|
|
39
54
|
requestRetirement(child);
|
|
40
55
|
}
|
|
41
56
|
const outcome = observed ?? await within(candidate.outcome, retirementConfirmationMs);
|
|
42
|
-
if (outcome?.state === 'published')
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
if (outcome?.state === 'published') {
|
|
58
|
+
const published = usableEndpoint(await probeEndpoint(directory, { capability, timeoutMs: finalProbeTimeout(deadline) }), true);
|
|
59
|
+
if (published)
|
|
60
|
+
return published;
|
|
61
|
+
throw unavailable();
|
|
62
|
+
}
|
|
63
|
+
const replacement = usableEndpoint(await probeEndpoint(directory, { capability, timeoutMs: finalProbeTimeout(deadline) }), true);
|
|
45
64
|
if (replacement)
|
|
46
65
|
return replacement;
|
|
47
|
-
if (
|
|
66
|
+
if (!observed && outcome)
|
|
67
|
+
throw new AgentError('STARTUP_FAILED', 'The local coordinator timed out before publishing an endpoint.');
|
|
68
|
+
if (observed?.state === 'spawn-failed')
|
|
69
|
+
throw new AgentError('STARTUP_FAILED', 'The local coordinator could not be spawned.');
|
|
70
|
+
if (observed?.state === 'exited')
|
|
71
|
+
throw new AgentError('STARTUP_FAILED', `The local coordinator exited before startup completed${processExitDescription(observed.code, observed.signal)}.`);
|
|
72
|
+
if (observed?.state === 'retired')
|
|
73
|
+
throw new AgentError('STARTUP_FAILED', 'The local coordinator retired before startup completed.');
|
|
74
|
+
if (outcome?.state === 'retired' || outcome?.state === 'exited' || outcome?.state === 'spawn-failed')
|
|
48
75
|
throw new AgentError('STARTUP_FAILED', 'The local coordinator could not start.');
|
|
49
76
|
throw new AgentError('STARTUP_FAILED', 'The local coordinator timed out, and its retirement could not be confirmed. It was left untouched because it may have published.');
|
|
50
77
|
}
|
|
@@ -58,6 +85,31 @@ export async function connect(start, options = {}) {
|
|
|
58
85
|
}
|
|
59
86
|
}
|
|
60
87
|
}
|
|
88
|
+
function remaining(deadline) {
|
|
89
|
+
return Math.max(1, deadline - Date.now());
|
|
90
|
+
}
|
|
91
|
+
function finalProbeTimeout(deadline) {
|
|
92
|
+
return Math.max(finalProbeMs, remaining(deadline));
|
|
93
|
+
}
|
|
94
|
+
function unavailable() {
|
|
95
|
+
return new AgentError('COORDINATOR_UNAVAILABLE', 'No compatible coordinator is reachable from the selected state directory.');
|
|
96
|
+
}
|
|
97
|
+
function usableEndpoint(probe, allowProvenAbsent) {
|
|
98
|
+
switch (probe.kind) {
|
|
99
|
+
case 'reachable': return probe.endpoint;
|
|
100
|
+
case 'absent': return;
|
|
101
|
+
case 'malformed': throw new AgentError('INVALID_CONFIG', 'Coordinator endpoint metadata is malformed.');
|
|
102
|
+
case 'authentication-failed':
|
|
103
|
+
throw new AgentError('COORDINATOR_AUTH_FAILED', 'The local coordinator rejected its private authentication token.');
|
|
104
|
+
case 'incompatible':
|
|
105
|
+
throw new AgentError('COORDINATOR_INCOMPATIBLE', 'The local coordinator does not support the required protocol capability.');
|
|
106
|
+
case 'instance-mismatch': throw unavailable();
|
|
107
|
+
case 'unresponsive':
|
|
108
|
+
if (allowProvenAbsent && probe.owner === 'dead')
|
|
109
|
+
return;
|
|
110
|
+
throw unavailable();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
61
113
|
function observeCandidate(child) {
|
|
62
114
|
let current;
|
|
63
115
|
let settle;
|
|
@@ -73,16 +125,17 @@ function observeCandidate(child) {
|
|
|
73
125
|
if (value)
|
|
74
126
|
finish(value);
|
|
75
127
|
};
|
|
76
|
-
const
|
|
128
|
+
const onError = () => finish({ state: 'spawn-failed' });
|
|
129
|
+
const onExit = (code, signal) => finish({ state: 'exited', code, signal });
|
|
77
130
|
child.on('message', onMessage);
|
|
78
|
-
child.once('error',
|
|
131
|
+
child.once('error', onError);
|
|
79
132
|
child.once('exit', onExit);
|
|
80
133
|
return {
|
|
81
134
|
outcome,
|
|
82
135
|
current: () => current,
|
|
83
136
|
close() {
|
|
84
137
|
child.off('message', onMessage);
|
|
85
|
-
child.off('error',
|
|
138
|
+
child.off('error', onError);
|
|
86
139
|
child.off('exit', onExit);
|
|
87
140
|
},
|
|
88
141
|
};
|
|
@@ -109,34 +162,8 @@ async function within(promise, timeoutMs) {
|
|
|
109
162
|
}
|
|
110
163
|
}
|
|
111
164
|
export async function* request(endpoint, body) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
throw new AgentError('COORDINATOR_UNAVAILABLE', 'Connection to the local coordinator failed. The task was not automatically retried.');
|
|
118
|
-
}
|
|
119
|
-
if (!response.ok || !response.body)
|
|
120
|
-
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The coordinator rejected the request.');
|
|
121
|
-
let buffer = '';
|
|
122
|
-
const decoder = new TextDecoder();
|
|
123
|
-
try {
|
|
124
|
-
for await (const chunk of response.body) {
|
|
125
|
-
buffer += decoder.decode(chunk, { stream: true });
|
|
126
|
-
let newline;
|
|
127
|
-
while ((newline = buffer.indexOf('\n')) >= 0) {
|
|
128
|
-
const line = buffer.slice(0, newline);
|
|
129
|
-
buffer = buffer.slice(newline + 1);
|
|
130
|
-
if (line)
|
|
131
|
-
yield JSON.parse(line);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
buffer += decoder.decode();
|
|
135
|
-
if (buffer.trim())
|
|
136
|
-
throw new Error('Incomplete response record');
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The coordinator response was interrupted or invalid. The task was not automatically retried.');
|
|
140
|
-
}
|
|
165
|
+
const transport = new CoordinatorTransport(endpoint);
|
|
166
|
+
for await (const record of transport.records(body))
|
|
167
|
+
yield record;
|
|
141
168
|
}
|
|
142
169
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process';\nimport { setTimeout as delay } from 'node:timers/promises';\nimport { AgentError } from '../errors.js';\nimport type { OutputRecord } from '../cli/output.js';\nimport { type Endpoint, localProgram, privateDirectory, readEndpoint, stateDirectory } from './state.js';\nimport { startupOutcome, startupRetirementRequest, type StartupOutcome } from './startup-protocol.js';\n\ninterface ConnectionOptions {\n directory?: string;\n timeoutMs?: number;\n afterSpawn?: (child: ChildProcess) => void;\n beforeRetirement?: (child: ChildProcess) => void | Promise<void>;\n program?: ReturnType<typeof localProgram>;\n}\n\ntype CandidateOutcome = StartupOutcome | {state:'exited'};\nconst retirementConfirmationMs = 1_000;\n\nexport async function connect(start: boolean, options: ConnectionOptions = {}): Promise<Endpoint> {\n const directory = options.directory ?? stateDirectory();\n const available = await readEndpoint(directory);\n if (available) return available;\n if (!start) throw new AgentError('UNKNOWN_SESSION','No coordinator is reachable from this environment. Its sessions may have ended, or native permissions may block access to its local endpoint.');\n await privateDirectory(directory);\n const deadline = Date.now() + (options.timeoutMs ?? 15_000);\n let child: ChildProcess | undefined;\n let candidate: ReturnType<typeof observeCandidate> | undefined;\n try {\n if (Date.now() >= deadline) throw new AgentError('STARTUP_FAILED','Another command did not finish coordinator startup.');\n const program = options.program ?? localProgram('daemon');\n child = spawn(process.execPath,[...program.execArgv,program.file,String(Math.max(1,deadline-Date.now()))],{\n detached:true,stdio:['ignore','ignore','ignore','ipc'],env:{...process.env,AGENT_STATE_DIR:directory},\n });\n candidate = observeCandidate(child);\n options.afterSpawn?.(child);\n child.unref();\n while (Date.now() < deadline && !candidate.current()) {\n await delay(50);\n const endpoint = await readEndpoint(directory);\n if (endpoint) return endpoint;\n }\n const observed = candidate.current();\n if (observed?.state === 'published') return observed.endpoint;\n if (!observed) {\n await options.beforeRetirement?.(child);\n requestRetirement(child);\n }\n const outcome = observed ?? await within(candidate.outcome,retirementConfirmationMs);\n if (outcome?.state === 'published') return outcome.endpoint;\n const replacement = await readEndpoint(directory);\n if (replacement) return replacement;\n if (outcome?.state === 'retired' || outcome?.state === 'exited')\n throw new AgentError('STARTUP_FAILED','The local coordinator could not start.');\n throw new AgentError('STARTUP_FAILED','The local coordinator timed out, and its retirement could not be confirmed. It was left untouched because it may have published.');\n } finally {\n candidate?.close();\n if (child?.connected) {\n try { child.disconnect(); } catch { /* The candidate may have disconnected after retirement. */ }\n }\n }\n}\n\nfunction observeCandidate(child: ChildProcess) {\n let current: CandidateOutcome | undefined;\n let settle!: (outcome: CandidateOutcome) => void;\n const outcome = new Promise<CandidateOutcome>(resolve => { settle = resolve; });\n const finish = (value: CandidateOutcome) => {\n if (current) return;\n current = value;\n settle(value);\n };\n const onMessage = (message: unknown) => {\n const value = startupOutcome(message);\n if (value) finish(value);\n };\n const onExit = () => finish({state:'exited'});\n child.on('message',onMessage);\n child.once('error',onExit);\n child.once('exit',onExit);\n return {\n outcome,\n current:() => current,\n close() {\n child.off('message',onMessage);\n child.off('error',onExit);\n child.off('exit',onExit);\n },\n };\n}\n\nfunction requestRetirement(child: ChildProcess) {\n if (!child.connected) return;\n try { child.send(startupRetirementRequest,()=>{}); }\n catch { /* The bounded outcome wait reports an unconfirmed retirement. */ }\n}\n\nasync function within<T>(promise: Promise<T>, timeoutMs: number): Promise<T | undefined> {\n let timer: number | NodeJS.Timeout | undefined;\n try {\n return await Promise.race([\n promise,\n new Promise<undefined>(resolve => { timer = setTimeout(resolve,timeoutMs); }),\n ]);\n } finally { if (timer) clearTimeout(timer); }\n}\n\nexport async function* request(endpoint: Endpoint, body: unknown): AsyncGenerator<OutputRecord> {\n let response: globalThis.Response;\n try {\n response = await fetch(endpoint.url,{method:'POST',headers:{authorization:`Bearer ${endpoint.token}`,'content-type':'application/json'},body:JSON.stringify(body)});\n } catch { throw new AgentError('COORDINATOR_UNAVAILABLE','Connection to the local coordinator failed. The task was not automatically retried.'); }\n if (!response.ok || !response.body) throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator rejected the request.');\n let buffer = '';\n const decoder = new TextDecoder();\n try {\n for await (const chunk of response.body) {\n buffer += decoder.decode(chunk,{stream:true});\n let newline;\n while ((newline = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0,newline); buffer = buffer.slice(newline + 1);\n if (line) yield JSON.parse(line) as OutputRecord;\n }\n }\n buffer += decoder.decode();\n if (buffer.trim()) throw new Error('Incomplete response record');\n } catch {\n throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator response was interrupted or invalid. The task was not automatically retried.');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process';\nimport { setTimeout as delay } from 'node:timers/promises';\nimport { AgentError } from '../errors.js';\nimport { processExitDescription } from '../process-diagnostics.js';\nimport type { OutputRecord } from '../cli/output.js';\nimport {\n type Endpoint,\n type EndpointCapability,\n type EndpointProbe,\n localProgram,\n privateDirectory,\n probeEndpoint,\n resolveStateDirectory,\n} from './state.js';\nimport { startupOutcome, startupRetirementRequest, type StartupOutcome } from './startup-protocol.js';\nimport { CoordinatorTransport } from './transport.js';\n\ninterface ConnectionOptions {\n directory?: string;\n timeoutMs?: number;\n capability?: EndpointCapability;\n afterSpawn?: (child: ChildProcess) => void;\n beforeRetirement?: (child: ChildProcess) => void | Promise<void>;\n program?: ReturnType<typeof localProgram>;\n}\n\ntype CandidateOutcome = StartupOutcome\n | {state:'spawn-failed'}\n | {state:'exited';code:unknown;signal:unknown};\nconst retirementConfirmationMs = 1_000;\nconst finalProbeMs = 250;\nexport async function connect(start: boolean, options: ConnectionOptions = {}): Promise<Endpoint> {\n const deadline = Date.now() + (options.timeoutMs ?? 15_000);\n const directory = resolveStateDirectory(options.directory);\n const capability = options.capability ?? 'cli-v1';\n const initial = await probeEndpoint(directory,{capability,timeoutMs:remaining(deadline)});\n const available = usableEndpoint(initial,start);\n if (available) return available;\n if (!start) throw unavailable();\n await privateDirectory(directory);\n let child: ChildProcess | undefined;\n let candidate: ReturnType<typeof observeCandidate> | undefined;\n try {\n if (Date.now() >= deadline) throw new AgentError('STARTUP_FAILED','Another command did not finish coordinator startup.');\n const program = options.program ?? localProgram('daemon');\n try {\n child = spawn(process.execPath,[...program.execArgv,program.file,String(Math.max(1,deadline-Date.now()))],{\n detached:true,stdio:['ignore','ignore','ignore','ipc'],env:{...process.env,AGENT_STATE_DIR:directory},\n });\n } catch {\n throw new AgentError('STARTUP_FAILED','The local coordinator could not be spawned.');\n }\n candidate = observeCandidate(child);\n options.afterSpawn?.(child);\n child.unref();\n while (Date.now() < deadline && !candidate.current()) {\n await delay(50);\n const probe = await probeEndpoint(directory,{capability,timeoutMs:remaining(deadline)});\n const endpoint = usableEndpoint(probe,true);\n if (endpoint) return endpoint;\n }\n const observed = candidate.current();\n if (observed?.state === 'published') {\n const published = usableEndpoint(await probeEndpoint(directory,{capability,timeoutMs:finalProbeTimeout(deadline)}),true);\n if (published) return published;\n throw unavailable();\n }\n if (!observed) {\n await options.beforeRetirement?.(child);\n requestRetirement(child);\n }\n const outcome = observed ?? await within(candidate.outcome,retirementConfirmationMs);\n if (outcome?.state === 'published') {\n const published = usableEndpoint(await probeEndpoint(directory,{capability,timeoutMs:finalProbeTimeout(deadline)}),true);\n if (published) return published;\n throw unavailable();\n }\n const replacement = usableEndpoint(await probeEndpoint(directory,{capability,timeoutMs:finalProbeTimeout(deadline)}),true);\n if (replacement) return replacement;\n if (!observed && outcome)\n throw new AgentError('STARTUP_FAILED','The local coordinator timed out before publishing an endpoint.');\n if (observed?.state === 'spawn-failed')\n throw new AgentError('STARTUP_FAILED','The local coordinator could not be spawned.');\n if (observed?.state === 'exited')\n throw new AgentError('STARTUP_FAILED',\n `The local coordinator exited before startup completed${processExitDescription(observed.code, observed.signal)}.`);\n if (observed?.state === 'retired')\n throw new AgentError('STARTUP_FAILED','The local coordinator retired before startup completed.');\n if (outcome?.state === 'retired' || outcome?.state === 'exited' || outcome?.state === 'spawn-failed')\n throw new AgentError('STARTUP_FAILED','The local coordinator could not start.');\n throw new AgentError('STARTUP_FAILED','The local coordinator timed out, and its retirement could not be confirmed. It was left untouched because it may have published.');\n } finally {\n candidate?.close();\n if (child?.connected) {\n try { child.disconnect(); } catch { /* The candidate may have disconnected after retirement. */ }\n }\n }\n}\n\nfunction remaining(deadline: number): number {\n return Math.max(1,deadline-Date.now());\n}\n\nfunction finalProbeTimeout(deadline:number):number {\n return Math.max(finalProbeMs,remaining(deadline));\n}\n\nfunction unavailable(): AgentError {\n return new AgentError('COORDINATOR_UNAVAILABLE','No compatible coordinator is reachable from the selected state directory.');\n}\n\nfunction usableEndpoint(probe: EndpointProbe, allowProvenAbsent: boolean): Endpoint | undefined {\n switch (probe.kind) {\n case 'reachable': return probe.endpoint;\n case 'absent': return;\n case 'malformed': throw new AgentError('INVALID_CONFIG','Coordinator endpoint metadata is malformed.');\n case 'authentication-failed':\n throw new AgentError('COORDINATOR_AUTH_FAILED','The local coordinator rejected its private authentication token.');\n case 'incompatible':\n throw new AgentError('COORDINATOR_INCOMPATIBLE','The local coordinator does not support the required protocol capability.');\n case 'instance-mismatch': throw unavailable();\n case 'unresponsive':\n if (allowProvenAbsent && probe.owner === 'dead') return;\n throw unavailable();\n }\n}\n\nfunction observeCandidate(child: ChildProcess) {\n let current: CandidateOutcome | undefined;\n let settle!: (outcome: CandidateOutcome) => void;\n const outcome = new Promise<CandidateOutcome>(resolve => { settle = resolve; });\n const finish = (value: CandidateOutcome) => {\n if (current) return;\n current = value;\n settle(value);\n };\n const onMessage = (message: unknown) => {\n const value = startupOutcome(message);\n if (value) finish(value);\n };\n const onError = () => finish({state:'spawn-failed'});\n const onExit = (code: unknown, signal: unknown) => finish({state:'exited',code,signal});\n child.on('message',onMessage);\n child.once('error',onError);\n child.once('exit',onExit);\n return {\n outcome,\n current:() => current,\n close() {\n child.off('message',onMessage);\n child.off('error',onError);\n child.off('exit',onExit);\n },\n };\n}\n\nfunction requestRetirement(child: ChildProcess) {\n if (!child.connected) return;\n try { child.send(startupRetirementRequest,()=>{}); }\n catch { /* The bounded outcome wait reports an unconfirmed retirement. */ }\n}\n\nasync function within<T>(promise: Promise<T>, timeoutMs: number): Promise<T | undefined> {\n let timer: number | NodeJS.Timeout | undefined;\n try {\n return await Promise.race([\n promise,\n new Promise<undefined>(resolve => { timer = setTimeout(resolve,timeoutMs); }),\n ]);\n } finally { if (timer) clearTimeout(timer); }\n}\n\nexport async function* request(endpoint: Endpoint, body: unknown): AsyncGenerator<OutputRecord> {\n const transport=new CoordinatorTransport(endpoint);\n for await (const record of transport.records(body)) yield record as OutputRecord;\n}\n"]}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import { type DriverFactory, type Observation, type Receipt, type SessionInput, type Delivery } from './types.js';
|
|
1
|
+
import { type DriverFactory, type Observation, type Receipt, type SessionInput, type SessionCreateInput, type Delivery, type PreparedExecution } from './types.js';
|
|
2
2
|
import { type DashboardDetail, type DashboardSession, type DashboardSnapshot } from './dashboard.js';
|
|
3
|
+
import { type SessionSnapshot, type TaskSnapshot, type SdkSessionSnapshot, type SdkSessionSummary, type SdkTaskDetails, type SdkTaskSnapshot, type SdkTaskSummary, type TaskResult, type CompleteResponse, type Page, type PageOptions } from './snapshots.js';
|
|
4
|
+
import type { ApprovalResponse } from './task-data.js';
|
|
3
5
|
export declare class Coordinator {
|
|
4
6
|
private readonly factory;
|
|
5
7
|
private readonly now;
|
|
8
|
+
private readonly instanceId;
|
|
6
9
|
private sessions;
|
|
7
10
|
private tasks;
|
|
8
11
|
private dashboardHistory?;
|
|
9
12
|
private closed;
|
|
13
|
+
private closeComplete;
|
|
14
|
+
private closePromise?;
|
|
15
|
+
private membership;
|
|
10
16
|
private approvals;
|
|
11
|
-
constructor(factory: DriverFactory, now?: () => number);
|
|
17
|
+
constructor(factory: DriverFactory, now?: () => number, instanceId?: string);
|
|
12
18
|
parentContext(token: string): {
|
|
13
19
|
taskId: string;
|
|
20
|
+
sessionId: string;
|
|
14
21
|
reference: import("./types.js").ExecutionReference;
|
|
15
22
|
cwd: string;
|
|
16
23
|
};
|
|
17
|
-
|
|
24
|
+
createSession(input: SessionCreateInput, prepared?: PreparedExecution): string;
|
|
25
|
+
run(input: SessionInput, prepared?: PreparedExecution): Receipt;
|
|
18
26
|
send(id: string, prompt: string, delivery: Delivery, parentToken?: string): Promise<Receipt>;
|
|
19
27
|
observe(id: string, after?: string, readerToken?: string, signal?: AbortSignal): Promise<Observation>;
|
|
20
28
|
private acknowledge;
|
|
@@ -23,8 +31,8 @@ export declare class Coordinator {
|
|
|
23
31
|
type: string;
|
|
24
32
|
taskId: string;
|
|
25
33
|
sessionId: string;
|
|
26
|
-
state: import("./
|
|
27
|
-
requests?: import("./
|
|
34
|
+
state: import("./task-data.js").TaskState;
|
|
35
|
+
requests?: import("./task-data.js").ApprovalRequest[] | undefined;
|
|
28
36
|
error?: import("../errors.js").ErrorInfo | undefined;
|
|
29
37
|
response?: {
|
|
30
38
|
responseId: string;
|
|
@@ -32,6 +40,26 @@ export declare class Coordinator {
|
|
|
32
40
|
truncated: boolean;
|
|
33
41
|
} | undefined;
|
|
34
42
|
};
|
|
43
|
+
snapshot(id: string): TaskSnapshot;
|
|
44
|
+
sessionSnapshot(id: string): SessionSnapshot;
|
|
45
|
+
sdkTaskSnapshot(id: string): SdkTaskSnapshot;
|
|
46
|
+
sdkSessionSnapshot(id: string): Promise<SdkSessionSnapshot>;
|
|
47
|
+
taskDetails(id: string): SdkTaskDetails;
|
|
48
|
+
taskResult(id: string, signal?: AbortSignal): Promise<TaskResult>;
|
|
49
|
+
taskResponses(id: string, after?: string, signal?: AbortSignal): AsyncIterable<CompleteResponse>;
|
|
50
|
+
watchTask(id: string, signal?: AbortSignal): AsyncIterable<SdkTaskSnapshot>;
|
|
51
|
+
listSessions(options?: PageOptions): Promise<Page<SdkSessionSummary>>;
|
|
52
|
+
listTasks(options?: PageOptions & {
|
|
53
|
+
readonly sessionId?: string;
|
|
54
|
+
}): Page<SdkTaskSummary>;
|
|
55
|
+
respondSdk(id: string, response: ApprovalResponse): {
|
|
56
|
+
version: 1;
|
|
57
|
+
type: 'approval_answered';
|
|
58
|
+
requestId: string;
|
|
59
|
+
taskId: string;
|
|
60
|
+
sessionId: string;
|
|
61
|
+
};
|
|
62
|
+
watch(id: string, signal?: AbortSignal): AsyncIterable<TaskSnapshot>;
|
|
35
63
|
respond(id: string, content: unknown, parentToken?: string): {
|
|
36
64
|
version: 1;
|
|
37
65
|
type: 'approval_answered';
|
|
@@ -52,17 +80,20 @@ export declare class Coordinator {
|
|
|
52
80
|
paused: boolean;
|
|
53
81
|
active?: {
|
|
54
82
|
taskId: string;
|
|
55
|
-
state: import("./
|
|
83
|
+
state: import("./task-data.js").TaskState;
|
|
56
84
|
description: string;
|
|
57
85
|
} | undefined;
|
|
58
86
|
tasks: {
|
|
59
87
|
taskId: string;
|
|
60
|
-
state: import("./
|
|
88
|
+
state: import("./task-data.js").TaskState;
|
|
61
89
|
description: string;
|
|
62
90
|
}[];
|
|
63
91
|
};
|
|
64
92
|
resume(id: string): Promise<Receipt>;
|
|
65
93
|
close(): Promise<void>;
|
|
94
|
+
closeSession(id: string): Promise<void>;
|
|
95
|
+
private cleanupSession;
|
|
96
|
+
private cleanupErrors;
|
|
66
97
|
cancel(id: string): Promise<Receipt>;
|
|
67
98
|
private command;
|
|
68
99
|
private stop;
|
|
@@ -74,7 +105,13 @@ export declare class Coordinator {
|
|
|
74
105
|
private pending;
|
|
75
106
|
private deliver;
|
|
76
107
|
private continueParent;
|
|
108
|
+
private summary;
|
|
109
|
+
private sdkSummary;
|
|
110
|
+
private sdkSessionSummary;
|
|
111
|
+
private sdkSessionSummaryResolved;
|
|
112
|
+
private sdkPendingApprovals;
|
|
77
113
|
private touch;
|
|
114
|
+
private publish;
|
|
78
115
|
private pendingApprovals;
|
|
79
116
|
private approvalChanged;
|
|
80
117
|
private notify;
|