harnery 0.42.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/commander.d.ts +16 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +18 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +95 -52
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +38 -11
- package/dist/commands/diagnostics.d.ts.map +1 -1
- package/dist/commands/diagnostics.js +10 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +22 -7
- package/dist/commands/governor.js +22 -10
- package/dist/commands/inbox.d.ts +1 -1
- package/dist/commands/inbox.d.ts.map +1 -1
- package/dist/commands/inbox.js +55 -2
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +28 -4
- package/dist/commands/servers.d.ts.map +1 -1
- package/dist/commands/servers.js +16 -1
- package/dist/commands/supervisor.d.ts.map +1 -1
- package/dist/commands/supervisor.js +7 -2
- package/dist/commands/toc.d.ts +14 -0
- package/dist/commands/toc.d.ts.map +1 -1
- package/dist/commands/toc.js +7 -4
- package/dist/commands/tunnel.d.ts +65 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +290 -101
- package/dist/commands/web-fetch.d.ts +3 -2
- package/dist/commands/web-fetch.d.ts.map +1 -1
- package/dist/commands/web-fetch.js +25 -19
- package/dist/commands/web.d.ts +7 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +9 -3
- package/dist/commands/workflow.js +24 -30
- package/dist/core/agents/live-authority-v3.d.ts +1 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +11 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +4 -2
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -1
- package/dist/core/agents/live-lifecycle-v3.js +28 -7
- package/dist/core/agents/mailbox.d.ts +9 -8
- package/dist/core/agents/mailbox.d.ts.map +1 -1
- package/dist/core/agents/mailbox.js +24 -17
- package/dist/core/agents/render/prompt-context.d.ts +2 -0
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +19 -17
- package/dist/core/agents/render/session-context.d.ts +2 -8
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +64 -43
- package/dist/core/agents/rules/stop-hook.js +3 -3
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +25 -14
- package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-writer.js +5 -0
- package/dist/core/agents/state/names.d.ts +43 -3
- package/dist/core/agents/state/names.d.ts.map +1 -1
- package/dist/core/agents/state/names.js +87 -3
- package/dist/core/agents/state/pidmap.d.ts.map +1 -1
- package/dist/core/agents/state/pidmap.js +5 -0
- package/dist/core/agents/state/proc-start.d.ts +19 -0
- package/dist/core/agents/state/proc-start.d.ts.map +1 -1
- package/dist/core/agents/state/proc-start.js +41 -0
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +180 -70
- package/dist/core/agents/state/unchanged-file.d.ts +44 -0
- package/dist/core/agents/state/unchanged-file.d.ts.map +1 -0
- package/dist/core/agents/state/unchanged-file.js +390 -0
- package/dist/core/context/index.d.ts +22 -10
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +381 -119
- package/dist/core/context/observation.d.ts +26 -0
- package/dist/core/context/observation.d.ts.map +1 -0
- package/dist/core/context/observation.js +11 -0
- package/dist/core/diagnostics/bundle.d.ts.map +1 -1
- package/dist/core/diagnostics/bundle.js +25 -14
- package/dist/core/diagnostics/path-identity.d.ts +3 -0
- package/dist/core/diagnostics/path-identity.d.ts.map +1 -0
- package/dist/core/diagnostics/path-identity.js +12 -0
- package/dist/core/diagnostics/sanitize.d.ts.map +1 -1
- package/dist/core/diagnostics/sanitize.js +4 -3
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
- package/dist/core/events/v3/authority-outbox.js +29 -0
- package/dist/core/events/v3/generation-custody.d.ts +5 -0
- package/dist/core/events/v3/generation-custody.d.ts.map +1 -0
- package/dist/core/events/v3/generation-custody.js +50 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +7 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +77 -64
- package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/pack-reader.js +42 -16
- package/dist/core/governor/planning.d.ts.map +1 -1
- package/dist/core/governor/planning.js +14 -1
- package/dist/core/governor/service-read.d.ts +10 -2
- package/dist/core/governor/service-read.d.ts.map +1 -1
- package/dist/core/governor/service-read.js +105 -22
- package/dist/core/governor/service.d.ts +20 -2
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +72 -47
- package/dist/core/hooks/cli.js +120 -23
- package/dist/core/hooks/fork-lineage.d.ts +40 -0
- package/dist/core/hooks/fork-lineage.d.ts.map +1 -0
- package/dist/core/hooks/fork-lineage.js +62 -0
- package/dist/core/hooks/resolve/transcript.d.ts +16 -0
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +84 -0
- package/dist/core/hooks/shell-rm.d.ts +2 -0
- package/dist/core/hooks/shell-rm.d.ts.map +1 -0
- package/dist/core/hooks/shell-rm.js +105 -0
- package/dist/core/hooks/shell-tokens.d.ts +12 -0
- package/dist/core/hooks/shell-tokens.d.ts.map +1 -0
- package/dist/core/hooks/shell-tokens.js +97 -0
- package/dist/core/hooks/shell-waiter.d.ts.map +1 -1
- package/dist/core/hooks/shell-waiter.js +3 -93
- package/dist/core/inbox/contract.d.ts +2 -1
- package/dist/core/inbox/contract.d.ts.map +1 -1
- package/dist/core/inbox/index.d.ts +2 -0
- package/dist/core/inbox/index.d.ts.map +1 -1
- package/dist/core/inbox/index.js +2 -0
- package/dist/core/inbox/peer-messages.d.ts +37 -0
- package/dist/core/inbox/peer-messages.d.ts.map +1 -0
- package/dist/core/inbox/peer-messages.js +72 -0
- package/dist/core/inbox/service.d.ts +8 -1
- package/dist/core/inbox/service.d.ts.map +1 -1
- package/dist/core/inbox/service.js +67 -21
- package/dist/core/inbox/targets.d.ts +22 -0
- package/dist/core/inbox/targets.d.ts.map +1 -0
- package/dist/core/inbox/targets.js +108 -0
- package/dist/core/inbox/watcher.js +7 -3
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +17 -2
- package/dist/core/resources/contract.d.ts +3 -0
- package/dist/core/resources/contract.d.ts.map +1 -1
- package/dist/core/resources/service-status.d.ts +14 -1
- package/dist/core/resources/service-status.d.ts.map +1 -1
- package/dist/core/resources/service-status.js +23 -13
- package/dist/core/resources/service.d.ts +9 -1
- package/dist/core/resources/service.d.ts.map +1 -1
- package/dist/core/resources/service.js +47 -27
- package/dist/core/resources/status.d.ts +2 -5
- package/dist/core/resources/status.d.ts.map +1 -1
- package/dist/core/resources/status.js +36 -7
- package/dist/core/semantic/contract.d.ts +5 -5
- package/dist/core/servers/index.d.ts +24 -13
- package/dist/core/servers/index.d.ts.map +1 -1
- package/dist/core/servers/index.js +132 -92
- package/dist/core/servers/tunnels.d.ts +3 -5
- package/dist/core/servers/tunnels.d.ts.map +1 -1
- package/dist/core/servers/tunnels.js +3 -9
- package/dist/core/storage/process-log.d.ts +12 -0
- package/dist/core/storage/process-log.d.ts.map +1 -1
- package/dist/core/storage/process-log.js +10 -2
- package/dist/core/supervisor/contract.d.ts +12 -0
- package/dist/core/supervisor/contract.d.ts.map +1 -1
- package/dist/core/supervisor/explanations.d.ts.map +1 -1
- package/dist/core/supervisor/explanations.js +2 -1
- package/dist/core/supervisor/findings.d.ts.map +1 -1
- package/dist/core/supervisor/findings.js +54 -9
- package/dist/core/supervisor/service.d.ts +9 -1
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/supervisor/service.js +59 -29
- package/dist/core/supervisor/services.d.ts.map +1 -1
- package/dist/core/supervisor/services.js +22 -1
- package/dist/core/supervisor/status.d.ts +17 -2
- package/dist/core/supervisor/status.d.ts.map +1 -1
- package/dist/core/supervisor/status.js +70 -12
- package/dist/core/supervisor/timeline.d.ts.map +1 -1
- package/dist/core/supervisor/timeline.js +2 -1
- package/dist/core/work/state.js +7 -7
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +105 -32
- package/dist/core/workflow/failure-evidence.d.ts +16 -0
- package/dist/core/workflow/failure-evidence.d.ts.map +1 -0
- package/dist/core/workflow/failure-evidence.js +114 -0
- package/dist/core/workflow/index.d.ts +1 -1
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +1 -1
- package/dist/core/workflow/live-session-v3.d.ts +6 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +126 -5
- package/dist/core/workflow/proof.d.ts +5 -5
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +115 -20
- package/dist/core/workflow/run-state.d.ts +3 -1
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +31 -27
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +19 -0
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +13 -0
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +19 -0
- package/dist/core/workflow/spawn-opencode.d.ts.map +1 -1
- package/dist/core/workflow/spawn-opencode.js +14 -0
- package/dist/core/workflow/types.d.ts +64 -17
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/index.d.ts +0 -1
- package/dist/core/workflow/workspaces/index.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/index.js +0 -1
- package/dist/core/workflow/workspaces/leases.d.ts +3 -1
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +30 -16
- package/dist/core/workflow/workspaces/local-git.d.ts +6 -2
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +270 -6
- package/dist/core/workflow/workspaces/ownership.d.ts +11 -0
- package/dist/core/workflow/workspaces/ownership.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/ownership.js +194 -0
- package/dist/core/workflow/workspaces/reclaim.d.ts +35 -0
- package/dist/core/workflow/workspaces/reclaim.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/reclaim.js +14 -0
- package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/recovery.js +21 -13
- package/dist/core/workflow/workspaces/state.d.ts +1 -0
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +21 -1
- package/dist/lib/browser/windows-chrome.d.ts +100 -12
- package/dist/lib/browser/windows-chrome.d.ts.map +1 -1
- package/dist/lib/browser/windows-chrome.js +262 -73
- package/dist/lib/docs-links.d.ts.map +1 -1
- package/dist/lib/docs-links.js +45 -2
- package/dist/lib/guarded-remove.d.ts +7 -0
- package/dist/lib/guarded-remove.d.ts.map +1 -1
- package/dist/lib/guarded-remove.js +106 -12
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +4 -0
- package/dist/lib/tunnel/allowlist.d.ts +44 -0
- package/dist/lib/tunnel/allowlist.d.ts.map +1 -0
- package/dist/lib/tunnel/allowlist.js +204 -0
- package/dist/lib/tunnel/current-address.d.ts +41 -0
- package/dist/lib/tunnel/current-address.d.ts.map +1 -0
- package/dist/lib/tunnel/current-address.js +123 -0
- package/dist/lib/tunnel/gate.js +13 -6
- package/dist/lib/tunnel/processes.d.ts +39 -0
- package/dist/lib/tunnel/processes.d.ts.map +1 -0
- package/dist/lib/tunnel/processes.js +121 -0
- package/dist/lib/tunnel/state.d.ts +28 -3
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +98 -27
- package/dist/lib/zip/index.d.ts +41 -0
- package/dist/lib/zip/index.d.ts.map +1 -0
- package/dist/lib/zip/index.js +398 -0
- package/package.json +8 -1
- package/src/commander.ts +32 -0
- package/src/commands/agents.ts +151 -74
- package/src/commands/browse.ts +50 -14
- package/src/commands/diagnostics.ts +10 -0
- package/src/commands/doctor.ts +26 -7
- package/src/commands/governor.ts +23 -10
- package/src/commands/inbox.ts +52 -2
- package/src/commands/rm.ts +43 -4
- package/src/commands/servers.ts +16 -4
- package/src/commands/supervisor.ts +7 -2
- package/src/commands/toc.ts +14 -6
- package/src/commands/tunnel.ts +394 -116
- package/src/commands/web-fetch.ts +30 -19
- package/src/commands/web.ts +9 -3
- package/src/commands/workflow.ts +30 -30
- package/src/core/agents/live-authority-v3.ts +17 -0
- package/src/core/agents/live-lifecycle-v3.ts +52 -14
- package/src/core/agents/mailbox.ts +26 -17
- package/src/core/agents/render/prompt-context.ts +35 -20
- package/src/core/agents/render/session-context.ts +92 -48
- package/src/core/agents/rules/stop-hook.ts +3 -3
- package/src/core/agents/state/heartbeat-writer.ts +29 -12
- package/src/core/agents/state/live-coordination-writer.ts +29 -0
- package/src/core/agents/state/names.ts +117 -6
- package/src/core/agents/state/pidmap.ts +13 -0
- package/src/core/agents/state/proc-start.ts +57 -0
- package/src/core/agents/state/stale-sweep.ts +247 -82
- package/src/core/agents/state/unchanged-file.ts +456 -0
- package/src/core/context/index.ts +446 -136
- package/src/core/context/observation.ts +29 -0
- package/src/core/diagnostics/bundle.ts +23 -18
- package/src/core/diagnostics/path-identity.ts +15 -0
- package/src/core/diagnostics/sanitize.ts +4 -3
- package/src/core/events/v3/authority-outbox.ts +56 -0
- package/src/core/events/v3/generation-custody.ts +59 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +15 -0
- package/src/core/events/v3/producers/recorder.ts +94 -68
- package/src/core/events/v3/support-storage/pack-reader.ts +45 -19
- package/src/core/governor/planning.ts +20 -8
- package/src/core/governor/service-read.ts +128 -20
- package/src/core/governor/service.ts +119 -42
- package/src/core/hooks/cli.ts +139 -22
- package/src/core/hooks/fork-lineage.ts +82 -0
- package/src/core/hooks/resolve/transcript.ts +88 -0
- package/src/core/hooks/shell-rm.ts +103 -0
- package/src/core/hooks/shell-tokens.ts +96 -0
- package/src/core/hooks/shell-waiter.ts +4 -91
- package/src/core/inbox/contract.ts +2 -1
- package/src/core/inbox/index.ts +2 -0
- package/src/core/inbox/peer-messages.ts +94 -0
- package/src/core/inbox/service.ts +88 -22
- package/src/core/inbox/targets.ts +148 -0
- package/src/core/inbox/watcher.ts +8 -9
- package/src/core/journal/index.ts +19 -2
- package/src/core/resources/contract.ts +4 -0
- package/src/core/resources/service-status.ts +35 -12
- package/src/core/resources/service.ts +71 -24
- package/src/core/resources/status.ts +57 -8
- package/src/core/servers/index.ts +177 -91
- package/src/core/servers/tunnels.ts +3 -11
- package/src/core/storage/process-log.ts +17 -2
- package/src/core/supervisor/contract.ts +13 -0
- package/src/core/supervisor/explanations.ts +4 -1
- package/src/core/supervisor/findings.ts +68 -10
- package/src/core/supervisor/service.ts +88 -26
- package/src/core/supervisor/services.ts +26 -8
- package/src/core/supervisor/status.ts +89 -12
- package/src/core/supervisor/timeline.ts +2 -1
- package/src/core/work/state.ts +7 -7
- package/src/core/workflow/engine.ts +131 -49
- package/src/core/workflow/failure-evidence.ts +141 -0
- package/src/core/workflow/index.ts +0 -1
- package/src/core/workflow/live-session-v3.ts +146 -5
- package/src/core/workflow/proof.ts +134 -26
- package/src/core/workflow/run-state.ts +31 -29
- package/src/core/workflow/spawn-claude.ts +18 -0
- package/src/core/workflow/spawn-codex.ts +13 -0
- package/src/core/workflow/spawn-cursor.ts +18 -0
- package/src/core/workflow/spawn-opencode.ts +14 -0
- package/src/core/workflow/types.ts +51 -17
- package/src/core/workflow/workspaces/index.ts +0 -1
- package/src/core/workflow/workspaces/leases.ts +48 -17
- package/src/core/workflow/workspaces/local-git.ts +315 -5
- package/src/core/workflow/workspaces/ownership.ts +232 -0
- package/src/core/workflow/workspaces/reclaim.ts +58 -0
- package/src/core/workflow/workspaces/recovery.ts +25 -13
- package/src/core/workflow/workspaces/state.ts +20 -0
- package/src/lib/browser/windows-chrome.ts +346 -86
- package/src/lib/docs-links.ts +49 -2
- package/src/lib/guarded-remove.ts +132 -14
- package/src/lib/identities/assume.ts +4 -0
- package/src/lib/tunnel/allowlist.ts +208 -0
- package/src/lib/tunnel/current-address.ts +158 -0
- package/src/lib/tunnel/gate.ts +16 -8
- package/src/lib/tunnel/processes.ts +149 -0
- package/src/lib/tunnel/state.ts +123 -27
- package/src/lib/zip/index.ts +483 -0
|
@@ -1,28 +1,66 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
1
2
|
import { hostname } from "node:os";
|
|
2
|
-
import {
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { verifyProcessGeneration, } from "../agents/state/proc-start.js";
|
|
5
|
+
import { currentHarneryRuntimeBuild, harneryPackageRoot } from "../events/v3/runtime-build.js";
|
|
3
6
|
import { SUPERVISOR_STATUS_SCHEMA_VERSION, } from "./contract.js";
|
|
4
7
|
import { readSupervisorServiceRecord, supervisorPaths } from "./storage.js";
|
|
5
8
|
const STALE_HEARTBEAT_MS = 15_000;
|
|
6
|
-
export function
|
|
9
|
+
export function installedSupervisorBuild() {
|
|
10
|
+
let version = "unknown";
|
|
11
|
+
let revision = "unknown";
|
|
12
|
+
try {
|
|
13
|
+
const pkg = JSON.parse(readFileSync(join(harneryPackageRoot(), "package.json"), "utf8"));
|
|
14
|
+
if (typeof pkg.version === "string")
|
|
15
|
+
version = pkg.version;
|
|
16
|
+
revision = currentHarneryRuntimeBuild();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Missing build evidence must still produce an inspectable status.
|
|
20
|
+
}
|
|
21
|
+
return { version, revision };
|
|
22
|
+
}
|
|
23
|
+
export function readSupervisorStatus(coordRoot, nowMs = Date.now(), dependencies = {}) {
|
|
7
24
|
const paths = supervisorPaths(coordRoot);
|
|
8
25
|
const record = readSupervisorServiceRecord(coordRoot);
|
|
26
|
+
const installedBuild = installedSupervisorBuild();
|
|
27
|
+
const runningBuild = validBuild(record?.running_build) ? record.running_build : null;
|
|
28
|
+
const restartNeeded = !runningBuild ||
|
|
29
|
+
installedBuild.version === "unknown" ||
|
|
30
|
+
installedBuild.revision === "unknown" ||
|
|
31
|
+
runningBuild.version !== installedBuild.version ||
|
|
32
|
+
runningBuild.revision !== installedBuild.revision;
|
|
33
|
+
const build = {
|
|
34
|
+
running_build: runningBuild,
|
|
35
|
+
installed_build: installedBuild,
|
|
36
|
+
restart_needed: restartNeeded,
|
|
37
|
+
build_status: !runningBuild
|
|
38
|
+
? "running build unknown; restart needed"
|
|
39
|
+
: restartNeeded
|
|
40
|
+
? "restart needed"
|
|
41
|
+
: "current",
|
|
42
|
+
};
|
|
9
43
|
if (!validRecord(record)) {
|
|
10
44
|
return {
|
|
11
45
|
running: false,
|
|
12
46
|
stale: false,
|
|
47
|
+
generation: "unknown",
|
|
48
|
+
liveness: existsSync(paths.service) ? "unknown" : "stopped",
|
|
49
|
+
...build,
|
|
13
50
|
status_path: paths.service,
|
|
14
51
|
snapshot_path: paths.snapshot,
|
|
15
52
|
};
|
|
16
53
|
}
|
|
17
54
|
const heartbeatAt = Date.parse(record.heartbeat_at);
|
|
18
55
|
const stale = !Number.isFinite(heartbeatAt) || nowMs - heartbeatAt > STALE_HEARTBEAT_MS;
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
(record.state === "starting" || record.state === "running" || record.state === "stopping") &&
|
|
22
|
-
pidStillMatches(record.pid, record.start_token);
|
|
56
|
+
const owner = supervisorProcessLiveness(record, dependencies);
|
|
57
|
+
const liveness = owner.generation === "same" && record.state === "stopped" ? "stopped" : owner.liveness;
|
|
23
58
|
return {
|
|
24
|
-
running,
|
|
59
|
+
running: liveness === "running" && !stale && record.state !== "stopped",
|
|
25
60
|
stale,
|
|
61
|
+
generation: owner.generation,
|
|
62
|
+
liveness,
|
|
63
|
+
...build,
|
|
26
64
|
record,
|
|
27
65
|
status_path: paths.service,
|
|
28
66
|
snapshot_path: paths.snapshot,
|
|
@@ -36,13 +74,33 @@ function validRecord(value) {
|
|
|
36
74
|
typeof value.heartbeat_at === "string" &&
|
|
37
75
|
typeof value.keep_alive === "boolean");
|
|
38
76
|
}
|
|
39
|
-
|
|
77
|
+
/** A stale heartbeat does not prove that a process has exited. */
|
|
78
|
+
export function supervisorProcessLiveness(owner, dependencies = {}) {
|
|
79
|
+
if (owner.host !== hostname())
|
|
80
|
+
return { liveness: "unknown", generation: "unknown" };
|
|
40
81
|
try {
|
|
41
|
-
process.kill(pid, 0);
|
|
82
|
+
(dependencies.probePid ?? ((pid) => process.kill(pid, 0)))(owner.pid);
|
|
42
83
|
}
|
|
43
84
|
catch (error) {
|
|
44
|
-
|
|
45
|
-
|
|
85
|
+
return {
|
|
86
|
+
liveness: error.code === "ESRCH" ? "stopped" : "unknown",
|
|
87
|
+
generation: "unknown",
|
|
88
|
+
};
|
|
46
89
|
}
|
|
47
|
-
|
|
90
|
+
const generation = verifyProcessGeneration(owner.pid, owner.start_token, dependencies.readToken);
|
|
91
|
+
return {
|
|
92
|
+
generation,
|
|
93
|
+
liveness: generation === "same" ? "running" : generation === "different" ? "stopped" : "unknown",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function validBuild(value) {
|
|
97
|
+
if (!value || typeof value !== "object")
|
|
98
|
+
return false;
|
|
99
|
+
const build = value;
|
|
100
|
+
return (typeof build.version === "string" &&
|
|
101
|
+
!!build.version &&
|
|
102
|
+
build.version !== "unknown" &&
|
|
103
|
+
typeof build.revision === "string" &&
|
|
104
|
+
!!build.revision &&
|
|
105
|
+
build.revision !== "unknown");
|
|
48
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/timeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/timeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AAEvB,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,cAAc,GAAE,SAAS,yBAAyB,EAAO,GACxD,kBAAkB,CAoDpB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { canonicalizeDiagnosticIdentity } from "../diagnostics/path-identity.js";
|
|
2
3
|
import { SUPERVISOR_DIAGNOSTIC_LIMITS, SUPERVISOR_TIMELINE_SCHEMA_VERSION, } from "./contract.js";
|
|
3
4
|
export function buildSupervisorTimeline(finding, relatedSources = []) {
|
|
4
5
|
const relatedEntries = clusterRelatedSources(relatedSources);
|
|
@@ -83,5 +84,5 @@ function clusterRelatedSources(sources) {
|
|
|
83
84
|
});
|
|
84
85
|
}
|
|
85
86
|
function stableId(prefix, value) {
|
|
86
|
-
return `${prefix}_${createHash("sha256").update(value).digest("hex").slice(0, 24)}`;
|
|
87
|
+
return `${prefix}_${createHash("sha256").update(canonicalizeDiagnosticIdentity(value)).digest("hex").slice(0, 24)}`;
|
|
87
88
|
}
|
package/dist/core/work/state.js
CHANGED
|
@@ -6,7 +6,7 @@ import { appendSegmentedJsonlFile, readSegmentedJsonlFileSync, } from "../storag
|
|
|
6
6
|
import { stateDirMode, stateFileMode } from "../storage/modes.js";
|
|
7
7
|
import { readWorkflowApproval } from "../workflow/approvals.js";
|
|
8
8
|
import { stableDigest } from "../workflow/durable-record.js";
|
|
9
|
-
import { readWorkflowProof } from "../workflow/proof.js";
|
|
9
|
+
import { deriveRunFailureClass, readWorkflowProof } from "../workflow/proof.js";
|
|
10
10
|
import { readWorkflowRunManifest, workflowScriptDigest } from "../workflow/run-state.js";
|
|
11
11
|
import { WORKFLOW_TRANSCRIPT_EVENT_BYTES, workflowTranscriptPath } from "../workflow/transcript.js";
|
|
12
12
|
import { isWorkspaceBoundExecutionEvidence } from "../workflow/workspaces/validate.js";
|
|
@@ -464,13 +464,13 @@ function inspectAttempt(coordRoot, event, intent, priorRunId) {
|
|
|
464
464
|
proof.acceptance.summary.unknown === 0
|
|
465
465
|
? "succeeded"
|
|
466
466
|
: "failed";
|
|
467
|
-
//
|
|
468
|
-
//
|
|
469
|
-
//
|
|
467
|
+
// Re-derive no-effect eligibility from every participant rather than
|
|
468
|
+
// trusting a persisted transport class. Missing evidence stays charged.
|
|
469
|
+
// The script's explicit decision authority remains a separate path.
|
|
470
470
|
if (attempt.status === "failed" &&
|
|
471
|
-
(proof.run.class === "
|
|
472
|
-
proof.run.class === "upstream"
|
|
473
|
-
|
|
471
|
+
(proof.run.class === "decision" ||
|
|
472
|
+
((proof.run.class === "environment" || proof.run.class === "upstream") &&
|
|
473
|
+
deriveRunFailureClass(proof.run.status, proof.agents) === proof.run.class))) {
|
|
474
474
|
attempt.uncharged = proof.run.class;
|
|
475
475
|
if (proof.run.class === "decision" && typeof proof.run.decision_id === "string") {
|
|
476
476
|
attempt.blocked_on = proof.run.decision_id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0DH,OAAO,KAAK,EAIV,UAAU,EAGV,SAAS,EAeV,MAAM,YAAY,CAAC;AAuDpB,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAM/E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAOvF;AAED;;;;6EAI6E;AAC7E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAUhD;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA6E1F"}
|
|
@@ -37,7 +37,8 @@ import { freezeWorkflowAttemptContext } from "./attempt-context.js";
|
|
|
37
37
|
import { probeBilling } from "./billing.js";
|
|
38
38
|
import { stableDigest } from "./durable-record.js";
|
|
39
39
|
import { evidencePreflightError } from "./evidence-preflight.js";
|
|
40
|
-
import {
|
|
40
|
+
import { canRetryFailedSpawn, observeSpawnFailure, resolveFailureEvidence, } from "./failure-evidence.js";
|
|
41
|
+
import { endWorkflowChildSessionV3, recordWorkflowChildTerminalFailureV3, startWorkflowChildSessionV3, } from "./live-session-v3.js";
|
|
41
42
|
import { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, writeWorkflowProof, } from "./proof.js";
|
|
42
43
|
import { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
|
|
43
44
|
import { assertProjectionWithinWorkspace, resolveGitGrantRoots } from "./sandbox-projection.js";
|
|
@@ -310,7 +311,12 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
310
311
|
durationMs,
|
|
311
312
|
transcriptPath,
|
|
312
313
|
before: resumeState.manifest.repository_before,
|
|
313
|
-
after:
|
|
314
|
+
after: {
|
|
315
|
+
cwd: frozenBinding.active_root,
|
|
316
|
+
observation: "unavailable",
|
|
317
|
+
observation_detail: "Workspace reattachment failed; no trusted after-run snapshot was observed.",
|
|
318
|
+
dirty_paths: [],
|
|
319
|
+
},
|
|
314
320
|
agents: [],
|
|
315
321
|
evidence: [],
|
|
316
322
|
diagnosticAdmission: initialDiagnosticAdmissionProof(diagnosticAdmissionConfig),
|
|
@@ -476,6 +482,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
476
482
|
let policySeq = 0;
|
|
477
483
|
const billingProbed = new Map();
|
|
478
484
|
const agentProofs = new Map();
|
|
485
|
+
let terminalRecordingError;
|
|
479
486
|
const evidenceRecords = [];
|
|
480
487
|
const policyDecisions = new Map(history?.policyDecisions.map((decision) => [decision.id, decision]));
|
|
481
488
|
const acceptanceIds = new Set(meta.acceptance.map((criterion) => criterion.id));
|
|
@@ -858,6 +865,51 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
858
865
|
},
|
|
859
866
|
});
|
|
860
867
|
agentProof.access = access;
|
|
868
|
+
let childGenerationId;
|
|
869
|
+
let recordAgentEnd;
|
|
870
|
+
const finalizeChild = () => {
|
|
871
|
+
try {
|
|
872
|
+
if (childGenerationId)
|
|
873
|
+
endWorkflowChildSessionV3({
|
|
874
|
+
coordRoot: opts.coordRoot,
|
|
875
|
+
instanceId: childInstanceId(runId, id),
|
|
876
|
+
runId,
|
|
877
|
+
agentId: id,
|
|
878
|
+
adapter,
|
|
879
|
+
cleanExit: agentProof.status === "succeeded",
|
|
880
|
+
expectedGenerationId: childGenerationId,
|
|
881
|
+
});
|
|
882
|
+
// Result publication is the resume-cache boundary, after canonical custody.
|
|
883
|
+
recordAgentEnd?.();
|
|
884
|
+
}
|
|
885
|
+
catch (error) {
|
|
886
|
+
let reason = `V3 terminal recording failed: ${error.message}`;
|
|
887
|
+
try {
|
|
888
|
+
if (childGenerationId)
|
|
889
|
+
recordWorkflowChildTerminalFailureV3({
|
|
890
|
+
coordRoot: opts.coordRoot,
|
|
891
|
+
instanceId: childInstanceId(runId, id),
|
|
892
|
+
runId,
|
|
893
|
+
agentId: id,
|
|
894
|
+
adapter,
|
|
895
|
+
expectedGenerationId: childGenerationId,
|
|
896
|
+
reason,
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
catch (visibilityError) {
|
|
900
|
+
reason += `; blocked lifecycle recording failed: ${visibilityError.message}`;
|
|
901
|
+
}
|
|
902
|
+
const failure = new Error(agentProof.error ? `${agentProof.error}; ${reason}` : reason, {
|
|
903
|
+
cause: error,
|
|
904
|
+
});
|
|
905
|
+
terminalRecordingError ??= failure;
|
|
906
|
+
agentProof.status = "failed";
|
|
907
|
+
agentProof.error = failure.message;
|
|
908
|
+
transcript("agent.failed", { id, key, error: failure.message });
|
|
909
|
+
log(`[${name}] ${failure.message}`);
|
|
910
|
+
throw failure;
|
|
911
|
+
}
|
|
912
|
+
};
|
|
861
913
|
await acquire();
|
|
862
914
|
try {
|
|
863
915
|
await ensureDiagnosticAdmissionObserved();
|
|
@@ -878,7 +930,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
878
930
|
// Headless children do not reliably fire adapter hooks. The engine owns
|
|
879
931
|
// their canonical V3 start so every dispatched child has an auditable
|
|
880
932
|
// generation before it begins work.
|
|
881
|
-
startWorkflowChildSessionV3({
|
|
933
|
+
const child = startWorkflowChildSessionV3({
|
|
882
934
|
coordRoot: opts.coordRoot,
|
|
883
935
|
instanceId: childInstanceId(runId, id),
|
|
884
936
|
runId,
|
|
@@ -887,9 +939,13 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
887
939
|
label,
|
|
888
940
|
model: agentOpts.model,
|
|
889
941
|
});
|
|
942
|
+
if (!child.v3_generation_id)
|
|
943
|
+
throw new Error("workflow_child_v3_generation_missing");
|
|
944
|
+
childGenerationId = child.v3_generation_id;
|
|
890
945
|
let attemptPrompt = dispatchPrompt;
|
|
891
946
|
let last = null;
|
|
892
947
|
let agentCostUsd = 0;
|
|
948
|
+
let informativeAttempt;
|
|
893
949
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
894
950
|
last = await spawner({
|
|
895
951
|
prompt: attemptPrompt,
|
|
@@ -911,30 +967,45 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
911
967
|
agentCostUsd += last.costUsd ?? 0;
|
|
912
968
|
costUsd += last.costUsd ?? 0;
|
|
913
969
|
if (!last.ok) {
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
970
|
+
const observed = last.failureEvidence === undefined
|
|
971
|
+
? observeSpawnFailure({}, last.text, "final_message")
|
|
972
|
+
: resolveFailureEvidence(last.failureEvidence);
|
|
973
|
+
agentProof.failure_evidence = informativeAttempt
|
|
974
|
+
? {
|
|
975
|
+
...observed,
|
|
976
|
+
effect: { state: "unknown" },
|
|
977
|
+
partial_output: informativeAttempt.partial_output,
|
|
978
|
+
}
|
|
979
|
+
: observed;
|
|
980
|
+
transcript("agent.attempt_failed", {
|
|
981
|
+
id,
|
|
982
|
+
attempt,
|
|
983
|
+
error: last.error,
|
|
984
|
+
failure_evidence: observed,
|
|
985
|
+
result_digest: digestResult(last.text, "text"),
|
|
986
|
+
text: last.text,
|
|
987
|
+
});
|
|
988
|
+
if (!canRetryFailedSpawn({ ...last, failureEvidence: agentProof.failure_evidence }))
|
|
920
989
|
break;
|
|
921
|
-
continue;
|
|
990
|
+
continue;
|
|
922
991
|
}
|
|
992
|
+
informativeAttempt = observeSpawnFailure({}, last.text, "final_message");
|
|
923
993
|
if (!agentOpts.schema) {
|
|
924
994
|
agentProof.status = "succeeded";
|
|
925
995
|
agentProof.cost_usd =
|
|
926
996
|
agentCostUsd > 0 || last.costUsd !== undefined ? agentCostUsd : undefined;
|
|
927
997
|
agentProof.session_id = last.sessionId;
|
|
928
998
|
agentProof.result = digestResult(last.text, "text");
|
|
929
|
-
|
|
999
|
+
const completed = last;
|
|
1000
|
+
recordAgentEnd = () => transcriptAgentEnd({
|
|
930
1001
|
id,
|
|
931
1002
|
key,
|
|
932
1003
|
attempts: attempt,
|
|
933
|
-
cost_usd:
|
|
1004
|
+
cost_usd: completed.costUsd,
|
|
934
1005
|
total_cost_usd: agentCostUsd,
|
|
935
|
-
duration_ms:
|
|
936
|
-
session_id:
|
|
937
|
-
}, "text",
|
|
1006
|
+
duration_ms: completed.durationMs,
|
|
1007
|
+
session_id: completed.sessionId,
|
|
1008
|
+
}, "text", completed.text);
|
|
938
1009
|
return last.text;
|
|
939
1010
|
}
|
|
940
1011
|
const parsed = parseStageOutput(last.text);
|
|
@@ -947,18 +1018,26 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
947
1018
|
agentCostUsd > 0 || last.costUsd !== undefined ? agentCostUsd : undefined;
|
|
948
1019
|
agentProof.session_id = last.sessionId;
|
|
949
1020
|
agentProof.result = digestResult(parsed.value, "json");
|
|
950
|
-
|
|
1021
|
+
const completed = last;
|
|
1022
|
+
recordAgentEnd = () => transcriptAgentEnd({
|
|
951
1023
|
id,
|
|
952
1024
|
key,
|
|
953
1025
|
attempts: attempt,
|
|
954
|
-
cost_usd:
|
|
1026
|
+
cost_usd: completed.costUsd,
|
|
955
1027
|
total_cost_usd: agentCostUsd,
|
|
956
|
-
duration_ms:
|
|
957
|
-
session_id:
|
|
1028
|
+
duration_ms: completed.durationMs,
|
|
1029
|
+
session_id: completed.sessionId,
|
|
958
1030
|
}, "json", parsed.value);
|
|
959
1031
|
return parsed.value;
|
|
960
1032
|
}
|
|
961
|
-
|
|
1033
|
+
agentProof.failure_evidence = informativeAttempt;
|
|
1034
|
+
transcript("agent.schema_retry", {
|
|
1035
|
+
id,
|
|
1036
|
+
attempt,
|
|
1037
|
+
problems,
|
|
1038
|
+
rejected_text: last.text,
|
|
1039
|
+
result_digest: digestResult(last.text, "text"),
|
|
1040
|
+
});
|
|
962
1041
|
// Keep the original cache identity while making the actual output
|
|
963
1042
|
// contract explicit. A full bounded copy of the rejected value lets the
|
|
964
1043
|
// child repair omissions instead of reconstructing an unseen object.
|
|
@@ -993,21 +1072,13 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
993
1072
|
}
|
|
994
1073
|
finally {
|
|
995
1074
|
reservedCostUsd = Math.max(0, reservedCostUsd - reservedForDispatch);
|
|
996
|
-
// Record the canonical terminal before removing the disposable cache.
|
|
997
1075
|
try {
|
|
998
|
-
|
|
999
|
-
coordRoot: opts.coordRoot,
|
|
1000
|
-
instanceId: childInstanceId(runId, id),
|
|
1001
|
-
runId,
|
|
1002
|
-
agentId: id,
|
|
1003
|
-
adapter,
|
|
1004
|
-
cleanExit: agentProof.status === "succeeded",
|
|
1005
|
-
});
|
|
1076
|
+
finalizeChild();
|
|
1006
1077
|
}
|
|
1007
|
-
|
|
1008
|
-
|
|
1078
|
+
finally {
|
|
1079
|
+
// A slot is disposable; unresolved custody remains visible and failed.
|
|
1080
|
+
release();
|
|
1009
1081
|
}
|
|
1010
|
-
release();
|
|
1011
1082
|
}
|
|
1012
1083
|
};
|
|
1013
1084
|
const parallel = async (thunks) => {
|
|
@@ -1105,6 +1176,8 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
|
|
|
1105
1176
|
if (!workflow)
|
|
1106
1177
|
throw new Error("workflow module initialization did not produce an executable");
|
|
1107
1178
|
const result = await workflow(ctx);
|
|
1179
|
+
if (terminalRecordingError)
|
|
1180
|
+
throw terminalRecordingError;
|
|
1108
1181
|
const endedAt = new Date().toISOString();
|
|
1109
1182
|
const durationMs = Date.now() - t0;
|
|
1110
1183
|
const workspaceAttestation = workspaceBinding
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AdapterRawResult } from "../adapters/types.js";
|
|
2
|
+
import type { SpawnFailureEvidence, SpawnOutputSource, SpawnResult } from "./types.js";
|
|
3
|
+
export declare function unknownFailureEvidence(): SpawnFailureEvidence;
|
|
4
|
+
/** Built-in subprocess adapters observe output and process-start failures.
|
|
5
|
+
* Their current vendor envelopes do not prove effects or native refusal.
|
|
6
|
+
* In particular, blank output and 429/5xx statuses leave both unknown. */
|
|
7
|
+
export declare function observeSpawnFailure(raw: Pick<AdapterRawResult, "spawnErrno" | "timedOut"> & Partial<Pick<AdapterRawResult, "stdout" | "resultFileText">>, text: string, source: SpawnOutputSource): SpawnFailureEvidence;
|
|
8
|
+
export declare function isSpawnFailureEvidence(value: unknown): value is SpawnFailureEvidence;
|
|
9
|
+
/** Missing observations are unknown; malformed positive claims are rejected.
|
|
10
|
+
* This is also used when reading persisted workflow proof. */
|
|
11
|
+
export declare function resolveFailureEvidence(value: unknown): SpawnFailureEvidence;
|
|
12
|
+
export declare function failureEvidenceAllowsUncharged(value: unknown): boolean;
|
|
13
|
+
/** A provider retry requires positive no-effect evidence. A missing binary is
|
|
14
|
+
* known not to have started, but retrying that unchanged environment cannot help. */
|
|
15
|
+
export declare function canRetryFailedSpawn(result: SpawnResult): boolean;
|
|
16
|
+
//# sourceMappingURL=failure-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-evidence.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/failure-evidence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvF,wBAAgB,sBAAsB,IAAI,oBAAoB,CAM7D;AAED;;0EAE0E;AAC1E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,UAAU,CAAC,GACpD,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC,EAC9D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,CAsBtB;AA+DD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAQpF;AAED;8DAC8D;AAC9D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAI3E;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOtE;AAED;qFACqF;AACrF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAMhE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export function unknownFailureEvidence() {
|
|
3
|
+
return {
|
|
4
|
+
effect: { state: "unknown" },
|
|
5
|
+
refusal: { state: "unknown" },
|
|
6
|
+
partial_output: { state: "unknown" },
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/** Built-in subprocess adapters observe output and process-start failures.
|
|
10
|
+
* Their current vendor envelopes do not prove effects or native refusal.
|
|
11
|
+
* In particular, blank output and 429/5xx statuses leave both unknown. */
|
|
12
|
+
export function observeSpawnFailure(raw, text, source) {
|
|
13
|
+
const bytes = Buffer.byteLength(text);
|
|
14
|
+
return {
|
|
15
|
+
effect: raw.spawnErrno === "ENOENT" &&
|
|
16
|
+
!raw.timedOut &&
|
|
17
|
+
bytes === 0 &&
|
|
18
|
+
!raw.stdout?.trim() &&
|
|
19
|
+
!raw.resultFileText?.trim()
|
|
20
|
+
? { state: "none", source: "spawn_errno", reference: "ENOENT" }
|
|
21
|
+
: { state: "unknown" },
|
|
22
|
+
refusal: { state: "unknown" },
|
|
23
|
+
partial_output: bytes > 0
|
|
24
|
+
? {
|
|
25
|
+
state: "present",
|
|
26
|
+
source,
|
|
27
|
+
bytes,
|
|
28
|
+
sha256: createHash("sha256").update(text).digest("hex"),
|
|
29
|
+
}
|
|
30
|
+
: { state: "absent", source },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function record(value) {
|
|
34
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
|
+
}
|
|
36
|
+
function keys(value, expected) {
|
|
37
|
+
return (Object.keys(value).length === expected.length &&
|
|
38
|
+
expected.every((key) => Object.hasOwn(value, key)));
|
|
39
|
+
}
|
|
40
|
+
function reference(value) {
|
|
41
|
+
return typeof value === "string" && value.trim().length > 0 && value.length <= 512;
|
|
42
|
+
}
|
|
43
|
+
function validEffect(value) {
|
|
44
|
+
if (!record(value))
|
|
45
|
+
return false;
|
|
46
|
+
if (value.state === "unknown")
|
|
47
|
+
return keys(value, ["state"]);
|
|
48
|
+
if (!keys(value, ["state", "source", "reference"]))
|
|
49
|
+
return false;
|
|
50
|
+
if (value.state === "none" && value.source === "spawn_errno") {
|
|
51
|
+
return value.reference === "ENOENT";
|
|
52
|
+
}
|
|
53
|
+
return ((value.state === "none" || value.state === "observed") &&
|
|
54
|
+
value.source === "adapter_evidence" &&
|
|
55
|
+
reference(value.reference));
|
|
56
|
+
}
|
|
57
|
+
function validRefusal(value) {
|
|
58
|
+
if (!record(value))
|
|
59
|
+
return false;
|
|
60
|
+
if (value.state === "unknown")
|
|
61
|
+
return keys(value, ["state"]);
|
|
62
|
+
return (keys(value, ["state", "source", "reference"]) &&
|
|
63
|
+
value.state === "refused" &&
|
|
64
|
+
value.source === "vendor_envelope" &&
|
|
65
|
+
reference(value.reference));
|
|
66
|
+
}
|
|
67
|
+
function validOutput(value) {
|
|
68
|
+
if (!record(value))
|
|
69
|
+
return false;
|
|
70
|
+
if (value.state === "unknown")
|
|
71
|
+
return keys(value, ["state"]);
|
|
72
|
+
if (value.source !== "final_message" &&
|
|
73
|
+
value.source !== "vendor_envelope" &&
|
|
74
|
+
value.source !== "stdout") {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (value.state === "absent")
|
|
78
|
+
return keys(value, ["state", "source"]);
|
|
79
|
+
return (value.state === "present" &&
|
|
80
|
+
keys(value, ["state", "source", "bytes", "sha256"]) &&
|
|
81
|
+
Number.isSafeInteger(value.bytes) &&
|
|
82
|
+
value.bytes > 0 &&
|
|
83
|
+
typeof value.sha256 === "string" &&
|
|
84
|
+
/^[a-f0-9]{64}$/.test(value.sha256));
|
|
85
|
+
}
|
|
86
|
+
export function isSpawnFailureEvidence(value) {
|
|
87
|
+
return (record(value) &&
|
|
88
|
+
keys(value, ["effect", "refusal", "partial_output"]) &&
|
|
89
|
+
validEffect(value.effect) &&
|
|
90
|
+
validRefusal(value.refusal) &&
|
|
91
|
+
validOutput(value.partial_output));
|
|
92
|
+
}
|
|
93
|
+
/** Missing observations are unknown; malformed positive claims are rejected.
|
|
94
|
+
* This is also used when reading persisted workflow proof. */
|
|
95
|
+
export function resolveFailureEvidence(value) {
|
|
96
|
+
if (value === undefined)
|
|
97
|
+
return unknownFailureEvidence();
|
|
98
|
+
if (!isSpawnFailureEvidence(value))
|
|
99
|
+
throw new Error("invalid spawn failure evidence");
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
export function failureEvidenceAllowsUncharged(value) {
|
|
103
|
+
const evidence = resolveFailureEvidence(value);
|
|
104
|
+
return (evidence.effect.state === "none" &&
|
|
105
|
+
evidence.refusal.state !== "refused" &&
|
|
106
|
+
evidence.partial_output.state === "absent");
|
|
107
|
+
}
|
|
108
|
+
/** A provider retry requires positive no-effect evidence. A missing binary is
|
|
109
|
+
* known not to have started, but retrying that unchanged environment cannot help. */
|
|
110
|
+
export function canRetryFailedSpawn(result) {
|
|
111
|
+
return (!result.ok &&
|
|
112
|
+
result.class !== "environment" &&
|
|
113
|
+
failureEvidenceAllowsUncharged(result.failureEvidence));
|
|
114
|
+
}
|
|
@@ -10,5 +10,5 @@ export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
|
|
|
10
10
|
export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AdapterEvidenceCapability, AdapterEvidenceCoverage, AdapterName, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, ResultDigest, RunReport, Spawner, SpawnFailureClass, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowApprovalMode, WorkflowAttemptContext, WorkflowAttemptFailureCause, WorkflowAttemptPriorContext, WorkflowAttemptUnresolvedCriterion, WorkflowContext, WorkflowDiagnosticAdmissionConfig, WorkflowDiagnosticAdmissionObservation, WorkflowDiagnosticAdmissionProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, WorkflowSpecialistProfile, WorkflowWorkContext, } from "./types.js";
|
|
11
11
|
export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
|
|
12
12
|
export type { ApplyIntegrationInput, AuthorizedIntegrationPlan, AuthorizedProviderIntegrationInput, CancelWorkspaceInput, CleanupWorkspaceInput, FilesystemIdentity, IntegrationApplyAttempt, IntegrationApplyReceipt, IntegrationAuthorization, IntegrationPlan, IntegrationReviewRecord, IntegrationTarget, LocalGitWorktreeProviderOptions, PrepareIntegrationInput, ProviderIntegrationInput, ProviderIntegrationPreview, ProviderIntegrationResult, ProviderUnknown, ProviderUnsupportedReason, RepositoryBinding, ValidatedFilesystemPath, WorkflowWorkspaceInspection, WorkflowWorkspaceSelection, WorkflowWorkspaceStatus, WorkflowWorkspaceVerification, WorkspaceAllocationRequest, WorkspaceAttestation, WorkspaceBinding, WorkspaceBoundExecutionEvidence, WorkspaceCancellationReceipt, WorkspaceCancellationResult, WorkspaceCleanupAttempt, WorkspaceCleanupIntent, WorkspaceCleanupMode, WorkspaceCleanupReceipt, WorkspaceCleanupResult, WorkspaceCompatibilityExecutionEvidence, WorkspaceExecutionEvidence, WorkspaceIntegrationState, WorkspaceIsolation, WorkspaceLifecycleProjection, WorkspaceLifecycleProjectionInput, WorkspaceLifecycleState, WorkspaceObservation, WorkspaceOwner, WorkspaceProbeInput, WorkspaceProbeResult, WorkspaceProofOutcome, WorkspaceProvider, WorkspaceProviderCapabilities, WorkspaceProviderRef, WorkspaceResourceState, } from "./workspaces/index.js";
|
|
13
|
-
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration,
|
|
13
|
+
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,4 @@ export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digest
|
|
|
6
6
|
export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
|
|
7
7
|
export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
|
|
8
8
|
export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
|
|
9
|
-
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration,
|
|
9
|
+
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
|
|
@@ -14,6 +14,12 @@ export declare function startWorkflowChildSessionV3(input: WorkflowChildSessionV
|
|
|
14
14
|
/** Record the authoritative terminal before removing the disposable coordination cache. */
|
|
15
15
|
export declare function endWorkflowChildSessionV3(input: WorkflowChildSessionV3Input & {
|
|
16
16
|
cleanExit: boolean;
|
|
17
|
+
expectedGenerationId: string;
|
|
18
|
+
}): void;
|
|
19
|
+
/** Persist unresolved terminal custody only for the generation this dispatch owns. */
|
|
20
|
+
export declare function recordWorkflowChildTerminalFailureV3(input: WorkflowChildSessionV3Input & {
|
|
21
|
+
expectedGenerationId: string;
|
|
22
|
+
reason: string;
|
|
17
23
|
}): void;
|
|
18
24
|
export { stableScopeId } from "./scope-id.js";
|
|
19
25
|
//# sourceMappingURL=live-session-v3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-session-v3.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/live-session-v3.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"live-session-v3.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/live-session-v3.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,qCAAqC,CAAC;AAoB7C,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8FAA8F;AAC9F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,2BAA2B,GAAG,SAAS,CAqDzF;AAED,2FAA2F;AAC3F,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,2BAA2B,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,GACxF,IAAI,CAIN;AA0CD,sFAAsF;AACtF,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,2BAA2B,GAAG;IAAE,oBAAoB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpF,IAAI,CAcN;AA8FD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|