harnery 0.29.0 → 0.31.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 +4 -4
- package/dist/commander.d.ts +8 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +14 -13
- package/dist/commands/adapter.d.ts +12 -0
- package/dist/commands/adapter.d.ts.map +1 -0
- package/dist/commands/{harness.js → adapter.js} +35 -35
- package/dist/commands/agents.d.ts +3 -2
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +61 -60
- package/dist/commands/artifacts.d.ts +4 -0
- package/dist/commands/artifacts.d.ts.map +1 -0
- package/dist/commands/artifacts.js +143 -0
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +5 -2
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +310 -7
- package/dist/commands/checkpoint.d.ts +12 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +162 -0
- package/dist/commands/context.d.ts +2 -2
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +3 -151
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +31 -7
- package/dist/commands/deinit.d.ts +2 -2
- package/dist/commands/deinit.js +15 -15
- package/dist/commands/doctor.js +23 -23
- package/dist/commands/governor.d.ts +4 -0
- package/dist/commands/governor.d.ts.map +1 -0
- package/dist/commands/{supervisor.js → governor.js} +133 -108
- package/dist/commands/init.d.ts +12 -12
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +44 -30
- package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
- package/dist/commands/journal.d.ts.map +1 -0
- package/dist/commands/{scratch.js → journal.js} +47 -47
- package/dist/commands/policy.js +1 -1
- package/dist/commands/presence.js +2 -2
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +3 -3
- package/dist/commands/tunnel.d.ts +16 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +193 -23
- package/dist/commands/web-fetch.js +1 -1
- package/dist/commands/web.d.ts +19 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +51 -0
- package/dist/commands/work.d.ts +2 -1
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +55 -25
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +35 -28
- package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
- package/dist/core/adapters/attest-projection.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
- package/dist/core/adapters/attest.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attest.js +9 -9
- package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
- package/dist/core/adapters/attestation.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attestation.js +20 -20
- package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
- package/dist/core/adapters/bench.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/bench.js +12 -12
- package/dist/core/adapters/index.d.ts +13 -0
- package/dist/core/adapters/index.d.ts.map +1 -0
- package/dist/core/adapters/index.js +6 -0
- package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
- package/dist/core/adapters/profiles.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/profiles.js +11 -11
- package/dist/core/adapters/registry.d.ts +15 -0
- package/dist/core/adapters/registry.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/registry.js +11 -11
- package/dist/core/{harnesses → adapters}/types.d.ts +28 -23
- package/dist/core/adapters/types.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/types.js +1 -1
- package/dist/core/agents/canonical-emit.d.ts +4 -4
- package/dist/core/agents/canonical-emit.js +5 -5
- package/dist/core/agents/cli-emit.js +1 -1
- package/dist/core/agents/cli.js +30 -26
- package/dist/core/agents/codex-replay.d.ts +1 -1
- package/dist/core/agents/codex-replay.js +6 -6
- package/dist/core/agents/coord-client.d.ts +21 -2
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +122 -27
- package/dist/core/agents/events/consume.d.ts +1 -1
- package/dist/core/agents/events/emit.d.ts +5 -6
- package/dist/core/agents/events/emit.d.ts.map +1 -1
- package/dist/core/agents/events/emit.js +2 -2
- package/dist/core/agents/render/prompt-context.d.ts +21 -9
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +82 -30
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.js +5 -5
- package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +1 -1
- package/dist/core/agents/rules/commit-conflict.js +98 -22
- package/dist/core/agents/rules/stop-hook.d.ts +9 -9
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +23 -5
- package/dist/core/agents/rules/verdict.d.ts +14 -0
- package/dist/core/agents/rules/verdict.d.ts.map +1 -0
- package/dist/core/agents/rules/verdict.js +1 -0
- package/dist/core/agents/session-events.js +3 -3
- package/dist/core/agents/state/council.d.ts +1 -1
- package/dist/core/agents/state/council.js +1 -1
- package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-projector.js +14 -10
- package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +12 -12
- package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
- package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
- package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
- package/dist/core/agents/state/pidmap.d.ts +28 -4
- package/dist/core/agents/state/pidmap.d.ts.map +1 -1
- package/dist/core/agents/state/pidmap.js +130 -15
- package/dist/core/agents/state/proc-start.d.ts +95 -0
- package/dist/core/agents/state/proc-start.d.ts.map +1 -0
- package/dist/core/agents/state/proc-start.js +199 -0
- package/dist/core/agents/state/shell-mutation.d.ts +1 -1
- package/dist/core/agents/state/shell-mutation.js +1 -1
- package/dist/core/agents/state/stale-sweep.js +7 -7
- package/dist/core/artifacts/index.d.ts +86 -0
- package/dist/core/artifacts/index.d.ts.map +1 -0
- package/dist/core/artifacts/index.js +421 -0
- package/dist/core/config.d.ts +9 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +26 -2
- package/dist/core/context/index.d.ts +12 -12
- package/dist/core/context/index.js +10 -10
- package/dist/core/governor/adapter-spread.d.ts +52 -0
- package/dist/core/governor/adapter-spread.d.ts.map +1 -0
- package/dist/core/governor/adapter-spread.js +52 -0
- package/dist/core/governor/index.d.ts +7 -0
- package/dist/core/governor/index.d.ts.map +1 -0
- package/dist/core/governor/index.js +6 -0
- package/dist/core/governor/plan-api.d.ts +38 -0
- package/dist/core/governor/plan-api.d.ts.map +1 -0
- package/dist/core/governor/plan-api.js +83 -0
- package/dist/core/governor/plan-read.d.ts +5 -0
- package/dist/core/governor/plan-read.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/plan-read.js +71 -51
- package/dist/core/governor/plan-types.d.ts +181 -0
- package/dist/core/governor/plan-types.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/plan-types.js +4 -4
- package/dist/core/governor/planning.d.ts +48 -0
- package/dist/core/governor/planning.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/planning.js +143 -94
- package/dist/core/governor/read.d.ts +6 -0
- package/dist/core/governor/read.d.ts.map +1 -0
- package/dist/core/governor/read.js +4 -0
- package/dist/core/governor/runner.d.ts +37 -0
- package/dist/core/governor/runner.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/runner.js +15 -15
- package/dist/core/governor/service-read.d.ts +6 -0
- package/dist/core/governor/service-read.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/service-read.js +12 -12
- package/dist/core/governor/service.d.ts +114 -0
- package/dist/core/governor/service.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/service.js +57 -57
- package/dist/core/governor/state.d.ts +116 -0
- package/dist/core/governor/state.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/state.js +290 -116
- package/dist/core/hooks/adapter/detect.d.ts +9 -0
- package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
- package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
- package/dist/core/hooks/adapter/events.d.ts.map +1 -0
- package/dist/core/hooks/{harness → adapter}/events.js +5 -5
- package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
- package/dist/core/hooks/adapter/output.d.ts.map +1 -0
- package/dist/core/hooks/{harness → adapter}/output.js +30 -22
- package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
- package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
- package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
- package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
- package/dist/core/hooks/cli.d.ts +3 -3
- package/dist/core/hooks/cli.js +175 -151
- package/dist/core/hooks/effects/image-capture.d.ts +5 -5
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +3 -3
- package/dist/core/hooks/effects/index.d.ts +12 -12
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +17 -17
- package/dist/core/hooks/events/emit.d.ts +2 -2
- package/dist/core/hooks/events/emit.d.ts.map +1 -1
- package/dist/core/hooks/events/emit.js +1 -1
- package/dist/core/hooks/events/rotate.js +1 -1
- package/dist/core/hooks/events/schema.d.ts +13 -5
- package/dist/core/hooks/events/schema.d.ts.map +1 -1
- package/dist/core/hooks/guard-path.d.ts +2 -2
- package/dist/core/hooks/guard-path.js +2 -2
- package/dist/core/hooks/index.d.ts +1 -1
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/resolve/anchor.d.ts +14 -5
- package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
- package/dist/core/hooks/resolve/anchor.js +64 -7
- package/dist/core/hooks/resolve/coord-root.d.ts +3 -3
- package/dist/core/hooks/resolve/coord-root.js +4 -4
- package/dist/core/hooks/resolve/intent.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +1 -1
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +11 -5
- package/dist/core/{scratch → journal}/index.d.ts +25 -25
- package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
- package/dist/core/{scratch → journal}/index.js +38 -38
- package/dist/core/policy/evaluate.d.ts +1 -1
- package/dist/core/policy/evaluate.d.ts.map +1 -1
- package/dist/core/policy/evaluate.js +7 -7
- package/dist/core/policy/types.d.ts +3 -3
- package/dist/core/policy/types.d.ts.map +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +11 -2
- package/dist/core/work/state.d.ts +28 -3
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +148 -16
- package/dist/core/workflow/adapters.d.ts +17 -0
- package/dist/core/workflow/adapters.d.ts.map +1 -0
- package/dist/core/workflow/adapters.js +21 -0
- package/dist/core/workflow/approvals.js +6 -6
- package/dist/core/workflow/billing.d.ts +9 -9
- package/dist/core/workflow/billing.js +9 -9
- package/dist/core/workflow/child-env.d.ts +10 -2
- package/dist/core/workflow/child-env.d.ts.map +1 -1
- package/dist/core/workflow/child-env.js +12 -4
- package/dist/core/workflow/engine.d.ts +15 -5
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +151 -83
- package/dist/core/workflow/evidence-preflight.d.ts +24 -0
- package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
- package/dist/core/workflow/evidence-preflight.js +134 -0
- package/dist/core/workflow/index.d.ts +3 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/proof.d.ts +28 -5
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +77 -34
- package/dist/core/workflow/run-state.d.ts +1 -1
- package/dist/core/workflow/run-state.js +7 -7
- package/dist/core/workflow/sandbox-projection.d.ts +6 -6
- package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
- package/dist/core/workflow/sandbox-projection.js +11 -11
- package/dist/core/workflow/spawn-claude.d.ts +3 -3
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +28 -8
- package/dist/core/workflow/spawn-codex.d.ts +4 -4
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +26 -8
- package/dist/core/workflow/spawn-cursor.d.ts +4 -4
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +27 -8
- package/dist/core/workflow/spawn-failure.d.ts +15 -1
- package/dist/core/workflow/spawn-failure.d.ts.map +1 -1
- package/dist/core/workflow/spawn-failure.js +35 -1
- package/dist/core/workflow/specialists.js +2 -2
- package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
- package/dist/core/workflow/transcript.d.ts.map +1 -0
- package/dist/core/workflow/{journal.js → transcript.js} +14 -14
- package/dist/core/workflow/types.d.ts +119 -46
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +11 -1
- package/dist/core/workflow/validate.d.ts +1 -1
- package/dist/core/workflow/validate.js +1 -1
- package/dist/core/workflow/workspaces/cancellation.js +2 -2
- package/dist/core/workflow/workspaces/cleanup.js +2 -2
- package/dist/core/workflow/workspaces/execution.js +6 -6
- package/dist/core/workflow/workspaces/inspect.js +9 -9
- package/dist/core/workflow/workspaces/integration.js +14 -14
- package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
- package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/lifecycle.js +9 -9
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +39 -5
- package/dist/core/workflow/workspaces/recovery.js +3 -3
- package/dist/core/workflow/workspaces/state.d.ts +1 -1
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +3 -3
- package/dist/core/workflow/workspaces/types.d.ts +1 -1
- package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
- package/dist/lib/browser/asserts.d.ts +28 -0
- package/dist/lib/browser/asserts.d.ts.map +1 -0
- package/dist/lib/browser/asserts.js +152 -0
- package/dist/lib/browser/client.d.ts +49 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +155 -14
- package/dist/lib/browser/content-checks.d.ts +108 -0
- package/dist/lib/browser/content-checks.d.ts.map +1 -0
- package/dist/lib/browser/content-checks.js +474 -0
- package/dist/lib/browser/critique.d.ts +91 -0
- package/dist/lib/browser/critique.d.ts.map +1 -0
- package/dist/lib/browser/critique.js +167 -0
- package/dist/lib/browser/geometry.d.ts +32 -0
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +244 -1
- package/dist/lib/browser/index.d.ts +4 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -0
- package/dist/lib/claude-desktop.d.ts.map +1 -1
- package/dist/lib/claude-desktop.js +4 -1
- package/dist/lib/council/index.d.ts +6 -6
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +8 -8
- package/dist/lib/exec.d.ts +7 -0
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +6 -3
- package/dist/lib/identities/assume.d.ts +2 -2
- package/dist/lib/identities/assume.js +7 -7
- package/dist/lib/instructions/apply.d.ts +3 -3
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +75 -27
- package/dist/lib/instructions/host-addendum.d.ts +54 -0
- package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
- package/dist/lib/instructions/host-addendum.js +107 -0
- package/dist/lib/instructions/templates.d.ts +10 -3
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +41 -12
- package/dist/lib/machine.d.ts +2 -2
- package/dist/lib/machine.js +2 -2
- package/package.json +26 -21
- package/schemas/config.schema.json +26 -1
- package/src/commander.ts +22 -13
- package/src/commands/{harness.ts → adapter.ts} +46 -46
- package/src/commands/agents.ts +71 -64
- package/src/commands/artifacts.ts +168 -0
- package/src/commands/backup.ts +47 -33
- package/src/commands/browse.ts +438 -2
- package/src/commands/checkpoint.ts +196 -0
- package/src/commands/context.ts +3 -176
- package/src/commands/decision.ts +41 -7
- package/src/commands/deinit.ts +16 -16
- package/src/commands/doctor.ts +28 -28
- package/src/commands/{supervisor.ts → governor.ts} +184 -154
- package/src/commands/init.ts +50 -34
- package/src/commands/{scratch.ts → journal.ts} +60 -60
- package/src/commands/policy.ts +1 -1
- package/src/commands/presence.ts +2 -2
- package/src/commands/sync.ts +3 -3
- package/src/commands/tunnel.ts +237 -34
- package/src/commands/web-fetch.ts +1 -1
- package/src/commands/web.ts +56 -1
- package/src/commands/work.ts +72 -38
- package/src/commands/workflow.ts +43 -34
- package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
- package/src/core/{harnesses → adapters}/attest.ts +27 -27
- package/src/core/{harnesses → adapters}/attestation.ts +41 -41
- package/src/core/{harnesses → adapters}/bench.ts +34 -43
- package/src/core/adapters/index.ts +56 -0
- package/src/core/{harnesses → adapters}/profiles.ts +16 -16
- package/src/core/{harnesses → adapters}/registry.ts +23 -23
- package/src/core/{harnesses → adapters}/types.ts +28 -23
- package/src/core/agents/canonical-emit.ts +6 -6
- package/src/core/agents/cli-emit.ts +1 -1
- package/src/core/agents/cli.ts +30 -28
- package/src/core/agents/codex-replay.ts +6 -6
- package/src/core/agents/coord-client.ts +119 -28
- package/src/core/agents/events/consume.ts +1 -1
- package/src/core/agents/events/emit.ts +7 -6
- package/src/core/agents/render/prompt-context.ts +107 -31
- package/src/core/agents/render/session-context.ts +6 -6
- package/src/core/agents/rules/claim-conflict.ts +4 -7
- package/src/core/agents/rules/commit-conflict.ts +103 -22
- package/src/core/agents/rules/stop-hook.ts +33 -17
- package/src/core/agents/rules/verdict.ts +13 -0
- package/src/core/agents/session-events.ts +4 -4
- package/src/core/agents/state/council.ts +1 -1
- package/src/core/agents/state/heartbeat-projector.ts +16 -12
- package/src/core/agents/state/heartbeat-writer.ts +12 -12
- package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
- package/src/core/agents/state/pidmap.ts +130 -15
- package/src/core/agents/state/proc-start.ts +208 -0
- package/src/core/agents/state/shell-mutation.ts +1 -1
- package/src/core/agents/state/stale-sweep.ts +7 -7
- package/src/core/artifacts/index.ts +557 -0
- package/src/core/config.ts +30 -2
- package/src/core/context/index.ts +15 -15
- package/src/core/governor/adapter-spread.ts +82 -0
- package/src/core/governor/index.ts +91 -0
- package/src/core/governor/plan-api.ts +115 -0
- package/src/core/{supervisor → governor}/plan-read.ts +120 -96
- package/src/core/{supervisor → governor}/plan-types.ts +64 -50
- package/src/core/{supervisor → governor}/planning.ts +240 -188
- package/src/core/governor/read.ts +59 -0
- package/src/core/{supervisor → governor}/runner.ts +39 -39
- package/src/core/{supervisor → governor}/service-read.ts +22 -22
- package/src/core/{supervisor → governor}/service.ts +117 -119
- package/src/core/{supervisor → governor}/state.ts +389 -174
- package/src/core/hooks/adapter/detect.ts +30 -0
- package/src/core/hooks/{harness → adapter}/events.ts +16 -14
- package/src/core/hooks/{harness → adapter}/output.ts +31 -23
- package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
- package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
- package/src/core/hooks/cli.ts +185 -162
- package/src/core/hooks/effects/image-capture.ts +6 -6
- package/src/core/hooks/effects/index.ts +17 -17
- package/src/core/hooks/events/emit.ts +3 -3
- package/src/core/hooks/events/rotate.ts +1 -1
- package/src/core/hooks/events/schema.ts +15 -7
- package/src/core/hooks/guard-path.ts +2 -2
- package/src/core/hooks/index.ts +1 -1
- package/src/core/hooks/resolve/anchor.ts +63 -8
- package/src/core/hooks/resolve/coord-root.ts +4 -4
- package/src/core/hooks/resolve/intent.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +11 -5
- package/src/core/{scratch → journal}/index.ts +53 -53
- package/src/core/policy/evaluate.ts +8 -8
- package/src/core/policy/types.ts +3 -3
- package/src/core/work/runner.ts +11 -2
- package/src/core/work/state.ts +185 -21
- package/src/core/workflow/adapters.ts +33 -0
- package/src/core/workflow/approvals.ts +7 -7
- package/src/core/workflow/billing.ts +12 -12
- package/src/core/workflow/child-env.ts +13 -4
- package/src/core/workflow/engine.ts +166 -90
- package/src/core/workflow/evidence-preflight.ts +165 -0
- package/src/core/workflow/index.ts +6 -3
- package/src/core/workflow/proof.ts +94 -48
- package/src/core/workflow/run-state.ts +7 -7
- package/src/core/workflow/sandbox-projection.ts +16 -16
- package/src/core/workflow/spawn-claude.ts +34 -12
- package/src/core/workflow/spawn-codex.ts +30 -12
- package/src/core/workflow/spawn-cursor.ts +31 -12
- package/src/core/workflow/spawn-failure.ts +41 -1
- package/src/core/workflow/specialists.ts +2 -2
- package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
- package/src/core/workflow/types.ts +130 -46
- package/src/core/workflow/validate.ts +1 -1
- package/src/core/workflow/workspaces/cancellation.ts +2 -2
- package/src/core/workflow/workspaces/cleanup.ts +2 -2
- package/src/core/workflow/workspaces/execution.ts +6 -6
- package/src/core/workflow/workspaces/inspect.ts +14 -11
- package/src/core/workflow/workspaces/integration.ts +18 -14
- package/src/core/workflow/workspaces/lifecycle.ts +10 -10
- package/src/core/workflow/workspaces/local-git.ts +47 -5
- package/src/core/workflow/workspaces/recovery.ts +3 -3
- package/src/core/workflow/workspaces/state.ts +4 -3
- package/src/core/workflow/workspaces/types.ts +1 -1
- package/src/lib/browser/asserts.ts +177 -0
- package/src/lib/browser/client.ts +189 -14
- package/src/lib/browser/content-checks.ts +571 -0
- package/src/lib/browser/critique.ts +231 -0
- package/src/lib/browser/geometry.ts +297 -1
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/claude-desktop.ts +4 -1
- package/src/lib/council/index.ts +9 -9
- package/src/lib/exec.ts +13 -3
- package/src/lib/identities/assume.ts +7 -7
- package/src/lib/instructions/apply.ts +87 -25
- package/src/lib/instructions/host-addendum.ts +126 -0
- package/src/lib/instructions/templates.ts +44 -15
- package/src/lib/machine.ts +2 -2
- package/dist/commands/harness.d.ts +0 -12
- package/dist/commands/harness.d.ts.map +0 -1
- package/dist/commands/scratch.d.ts +0 -4
- package/dist/commands/scratch.d.ts.map +0 -1
- package/dist/commands/session.d.ts.map +0 -1
- package/dist/commands/session.js +0 -162
- package/dist/commands/supervisor.d.ts +0 -4
- package/dist/commands/supervisor.d.ts.map +0 -1
- package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
- package/dist/core/harnesses/attest.d.ts.map +0 -1
- package/dist/core/harnesses/attestation.d.ts.map +0 -1
- package/dist/core/harnesses/bench.d.ts.map +0 -1
- package/dist/core/harnesses/index.d.ts +0 -13
- package/dist/core/harnesses/index.d.ts.map +0 -1
- package/dist/core/harnesses/index.js +0 -6
- package/dist/core/harnesses/profiles.d.ts.map +0 -1
- package/dist/core/harnesses/registry.d.ts +0 -15
- package/dist/core/harnesses/registry.d.ts.map +0 -1
- package/dist/core/harnesses/types.d.ts.map +0 -1
- package/dist/core/hooks/harness/detect.d.ts +0 -9
- package/dist/core/hooks/harness/events.d.ts.map +0 -1
- package/dist/core/hooks/harness/output.d.ts.map +0 -1
- package/dist/core/supervisor/index.d.ts +0 -7
- package/dist/core/supervisor/index.d.ts.map +0 -1
- package/dist/core/supervisor/index.js +0 -6
- package/dist/core/supervisor/plan-api.d.ts +0 -23
- package/dist/core/supervisor/plan-api.d.ts.map +0 -1
- package/dist/core/supervisor/plan-api.js +0 -50
- package/dist/core/supervisor/plan-read.d.ts +0 -5
- package/dist/core/supervisor/plan-read.d.ts.map +0 -1
- package/dist/core/supervisor/plan-types.d.ts +0 -170
- package/dist/core/supervisor/plan-types.d.ts.map +0 -1
- package/dist/core/supervisor/planning.d.ts +0 -33
- package/dist/core/supervisor/planning.d.ts.map +0 -1
- package/dist/core/supervisor/read.d.ts +0 -6
- package/dist/core/supervisor/read.d.ts.map +0 -1
- package/dist/core/supervisor/read.js +0 -4
- package/dist/core/supervisor/runner.d.ts +0 -37
- package/dist/core/supervisor/runner.d.ts.map +0 -1
- package/dist/core/supervisor/service-read.d.ts +0 -6
- package/dist/core/supervisor/service-read.d.ts.map +0 -1
- package/dist/core/supervisor/service.d.ts +0 -114
- package/dist/core/supervisor/service.d.ts.map +0 -1
- package/dist/core/supervisor/state.d.ts +0 -95
- package/dist/core/supervisor/state.d.ts.map +0 -1
- package/dist/core/workflow/harnesses.d.ts +0 -17
- package/dist/core/workflow/harnesses.d.ts.map +0 -1
- package/dist/core/workflow/harnesses.js +0 -21
- package/dist/core/workflow/journal.d.ts.map +0 -1
- package/src/commands/session.ts +0 -187
- package/src/core/harnesses/index.ts +0 -56
- package/src/core/hooks/harness/detect.ts +0 -30
- package/src/core/supervisor/index.ts +0 -89
- package/src/core/supervisor/plan-api.ts +0 -73
- package/src/core/supervisor/read.ts +0 -59
- package/src/core/workflow/harnesses.ts +0 -33
- /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject an unusable evidence kind before the first agent is spawned.
|
|
3
|
+
*
|
|
4
|
+
* `evidence()` is by construction near the end of a workflow, so an invalid
|
|
5
|
+
* kind throws after every agent has finished. Measured: a fifty-minute run with
|
|
6
|
+
* three completed agents died at its final line on `kind: "design"`, reported
|
|
7
|
+
* `work_failed`, and burned an attempt. The work survived only because it had
|
|
8
|
+
* already been written to the tree; nothing in the proof could recover it.
|
|
9
|
+
*
|
|
10
|
+
* A workflow's evidence kinds are usually written literally, and a literal is
|
|
11
|
+
* checkable by reading the file. Where a kind is computed the scan says nothing
|
|
12
|
+
* and the existing runtime validation still applies — a partial check that
|
|
13
|
+
* costs one file read is worth more than a complete one nobody can implement.
|
|
14
|
+
*/
|
|
15
|
+
export interface EvidencePreflightProblem {
|
|
16
|
+
kind: string;
|
|
17
|
+
line: number;
|
|
18
|
+
}
|
|
19
|
+
/** Every literal `evidence({ kind: … })` in this source whose kind is not in the
|
|
20
|
+
* vocabulary. Computed kinds are invisible here, by design. */
|
|
21
|
+
export declare function findInvalidEvidenceKinds(source: string): EvidencePreflightProblem[];
|
|
22
|
+
/** The thrown message, or undefined when the script is clean or unreadable. */
|
|
23
|
+
export declare function evidencePreflightError(source: string, scriptPath: string): string | undefined;
|
|
24
|
+
//# sourceMappingURL=evidence-preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-preflight.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/evidence-preflight.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;+DAC+D;AAC/D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAsBnF;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7F"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { EVIDENCE_KINDS } from "./types.js";
|
|
2
|
+
/** Every literal `evidence({ kind: … })` in this source whose kind is not in the
|
|
3
|
+
* vocabulary. Computed kinds are invisible here, by design. */
|
|
4
|
+
export function findInvalidEvidenceKinds(source) {
|
|
5
|
+
const { masked, literals } = maskSource(source);
|
|
6
|
+
const problems = [];
|
|
7
|
+
const valid = new Set(EVIDENCE_KINDS);
|
|
8
|
+
for (const call of evidenceCallRanges(masked)) {
|
|
9
|
+
// `kind` as an object key, then the value's first character. A quote there
|
|
10
|
+
// means a literal we can read; anything else is computed, so skip it.
|
|
11
|
+
const property = /\bkind\s*:\s*/g;
|
|
12
|
+
property.lastIndex = 0;
|
|
13
|
+
const slice = masked.slice(call.start, call.end);
|
|
14
|
+
let match = property.exec(slice);
|
|
15
|
+
while (match !== null) {
|
|
16
|
+
const valueAt = call.start + match.index + match[0].length;
|
|
17
|
+
const literal = literals.get(valueAt);
|
|
18
|
+
if (literal !== undefined && !valid.has(literal)) {
|
|
19
|
+
problems.push({ kind: literal, line: lineOf(source, valueAt) });
|
|
20
|
+
}
|
|
21
|
+
match = property.exec(slice);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return problems;
|
|
25
|
+
}
|
|
26
|
+
/** The thrown message, or undefined when the script is clean or unreadable. */
|
|
27
|
+
export function evidencePreflightError(source, scriptPath) {
|
|
28
|
+
const problems = findInvalidEvidenceKinds(source);
|
|
29
|
+
if (problems.length === 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
const listed = problems
|
|
32
|
+
.map((problem) => `line ${problem.line}: ${JSON.stringify(problem.kind)}`)
|
|
33
|
+
.join(", ");
|
|
34
|
+
return (`${scriptPath}: evidence kind must be one of: ${EVIDENCE_KINDS.join(", ")} ` +
|
|
35
|
+
`(${listed}). Rejected before running, because an invalid kind would otherwise ` +
|
|
36
|
+
`throw at the end of the workflow and discard the work every agent had already done.`);
|
|
37
|
+
}
|
|
38
|
+
function maskSource(source) {
|
|
39
|
+
const out = source.split("");
|
|
40
|
+
const literals = new Map();
|
|
41
|
+
let index = 0;
|
|
42
|
+
const blank = (from, to) => {
|
|
43
|
+
for (let i = from; i < to && i < out.length; i++) {
|
|
44
|
+
if (out[i] !== "\n")
|
|
45
|
+
out[i] = " ";
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
while (index < source.length) {
|
|
49
|
+
const char = source[index];
|
|
50
|
+
const next = source[index + 1];
|
|
51
|
+
if (char === "/" && next === "/") {
|
|
52
|
+
const end = source.indexOf("\n", index);
|
|
53
|
+
blank(index, end === -1 ? source.length : end);
|
|
54
|
+
index = end === -1 ? source.length : end;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (char === "/" && next === "*") {
|
|
58
|
+
const end = source.indexOf("*/", index + 2);
|
|
59
|
+
const stop = end === -1 ? source.length : end + 2;
|
|
60
|
+
blank(index, stop);
|
|
61
|
+
index = stop;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (char === '"' || char === "'" || char === "`") {
|
|
65
|
+
const start = index;
|
|
66
|
+
let cursor = index + 1;
|
|
67
|
+
let value = "";
|
|
68
|
+
while (cursor < source.length) {
|
|
69
|
+
const inner = source[cursor];
|
|
70
|
+
if (inner === "\\") {
|
|
71
|
+
value += source[cursor + 1] ?? "";
|
|
72
|
+
cursor += 2;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (inner === char)
|
|
76
|
+
break;
|
|
77
|
+
// An unterminated single- or double-quoted string cannot span lines, so
|
|
78
|
+
// stop rather than swallowing the rest of the file on a syntax error.
|
|
79
|
+
if (inner === "\n" && char !== "`")
|
|
80
|
+
break;
|
|
81
|
+
value += inner;
|
|
82
|
+
cursor++;
|
|
83
|
+
}
|
|
84
|
+
const closed = source[cursor] === char;
|
|
85
|
+
blank(start + 1, cursor);
|
|
86
|
+
if (closed && char !== "`")
|
|
87
|
+
literals.set(start, value);
|
|
88
|
+
index = closed ? cursor + 1 : cursor;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
index++;
|
|
92
|
+
}
|
|
93
|
+
return { masked: out.join(""), literals };
|
|
94
|
+
}
|
|
95
|
+
/** The argument list of every `evidence(` call, as index ranges into the masked
|
|
96
|
+
* source. A dotted receiver (`ctx.evidence(`) counts; a longer identifier that
|
|
97
|
+
* merely ends in "evidence" does not. */
|
|
98
|
+
function evidenceCallRanges(masked) {
|
|
99
|
+
const ranges = [];
|
|
100
|
+
const call = /evidence\s*\(/g;
|
|
101
|
+
let match = call.exec(masked);
|
|
102
|
+
while (match !== null) {
|
|
103
|
+
const before = match.index > 0 ? masked[match.index - 1] : "";
|
|
104
|
+
if (!/[A-Za-z0-9_$]/.test(before)) {
|
|
105
|
+
const open = match.index + match[0].length - 1;
|
|
106
|
+
const close = matchingParen(masked, open);
|
|
107
|
+
if (close > open)
|
|
108
|
+
ranges.push({ start: open + 1, end: close });
|
|
109
|
+
}
|
|
110
|
+
match = call.exec(masked);
|
|
111
|
+
}
|
|
112
|
+
return ranges;
|
|
113
|
+
}
|
|
114
|
+
function matchingParen(masked, open) {
|
|
115
|
+
let depth = 0;
|
|
116
|
+
for (let i = open; i < masked.length; i++) {
|
|
117
|
+
if (masked[i] === "(")
|
|
118
|
+
depth++;
|
|
119
|
+
else if (masked[i] === ")") {
|
|
120
|
+
depth--;
|
|
121
|
+
if (depth === 0)
|
|
122
|
+
return i;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return -1;
|
|
126
|
+
}
|
|
127
|
+
function lineOf(source, index) {
|
|
128
|
+
let line = 1;
|
|
129
|
+
for (let i = 0; i < index && i < source.length; i++) {
|
|
130
|
+
if (source[i] === "\n")
|
|
131
|
+
line++;
|
|
132
|
+
}
|
|
133
|
+
return line;
|
|
134
|
+
}
|
|
@@ -2,10 +2,11 @@ export type { CreateWorkflowApprovalInput, ResolveWorkflowApprovalInput, Workflo
|
|
|
2
2
|
export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, readWorkflowApproval, renderWorkflowApproval, resolveWorkflowApproval, WORKFLOW_APPROVAL_SCHEMA_VERSION, workflowApprovalId, } from "./approvals.js";
|
|
3
3
|
export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
|
|
4
4
|
export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
|
|
5
|
-
export { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
5
|
+
export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
6
6
|
export type { WorkflowRunManifest } from "./run-state.js";
|
|
7
7
|
export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
|
|
8
|
-
export
|
|
8
|
+
export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
|
|
9
|
+
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, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, WorkflowSpecialistProfile, WorkflowWorkContext, } from "./types.js";
|
|
9
10
|
export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
|
|
10
11
|
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, WorkspaceUnsupportedExecutionEvidence, } from "./workspaces/index.js";
|
|
11
12
|
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, prepareReclaim, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oCAAoC,EACpC,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oCAAoC,EACpC,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,YAAY,EACZ,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,EAClC,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uCAAuC,EACvC,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,kCAAkC,EAClC,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,+BAA+B,EAC/B,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,uCAAuC,EACvC,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,iCAAiC,EACjC,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,kCAAkC,EAClC,eAAe,EACf,gBAAgB,EAChB,8BAA8B,EAC9B,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,cAAc,EACd,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, readWorkflowApproval, renderWorkflowApproval, resolveWorkflowApproval, WORKFLOW_APPROVAL_SCHEMA_VERSION, workflowApprovalId, } from "./approvals.js";
|
|
2
2
|
export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
|
|
3
3
|
export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
|
|
4
|
-
export { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
4
|
+
export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
5
5
|
export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
|
|
6
|
+
export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
|
|
6
7
|
export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
|
|
7
8
|
export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, prepareReclaim, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RepoSnapshot } from "../context/index.js";
|
|
2
2
|
import type { NormalizedPolicy, PolicyDecision, PolicyIsolation, PolicyNetworkAccess } from "../policy/index.js";
|
|
3
|
-
import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary,
|
|
3
|
+
import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, AdapterAttestationCitation, AdapterEvidenceCapability, ResultDigest, SpawnFailureClass, WorkflowAgentProof, WorkflowAttemptContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof, WorkflowSandboxProjectionEvidence, WorkflowWorkContext } from "./types.js";
|
|
4
4
|
import type { WorkspaceAttestation, WorkspaceBinding, WorkspaceUnsupportedExecutionEvidence } from "./workspaces/index.js";
|
|
5
5
|
export interface NormalizedWorkflowMeta {
|
|
6
6
|
name: string;
|
|
@@ -18,23 +18,29 @@ export interface BuildWorkflowProofInput {
|
|
|
18
18
|
startedAt: string;
|
|
19
19
|
endedAt: string;
|
|
20
20
|
durationMs: number;
|
|
21
|
-
|
|
21
|
+
transcriptPath: string;
|
|
22
22
|
before: RepoSnapshot;
|
|
23
23
|
after: RepoSnapshot;
|
|
24
24
|
agents: WorkflowAgentProof[];
|
|
25
25
|
evidence: WorkflowEvidenceRecord[];
|
|
26
|
-
|
|
26
|
+
adapterEvidence?: Readonly<Record<string, AdapterEvidenceCapability | undefined>>;
|
|
27
27
|
/** Filesystem policy actually projected into children (ADR 0039). */
|
|
28
28
|
sandboxProjection?: WorkflowSandboxProjectionEvidence;
|
|
29
|
-
/** Live attestations backing each
|
|
29
|
+
/** Live attestations backing each adapter's claims (ADR 0038). Injected by
|
|
30
30
|
* the caller so proof stays free of filesystem lookups. */
|
|
31
|
-
|
|
31
|
+
adapterAttestations?: Readonly<Record<string, AdapterAttestationCitation | undefined>>;
|
|
32
32
|
policy?: {
|
|
33
33
|
config: Readonly<NormalizedPolicy>;
|
|
34
34
|
decisions: readonly PolicyDecision[];
|
|
35
35
|
isolation: PolicyIsolation;
|
|
36
36
|
networkAccess: PolicyNetworkAccess;
|
|
37
37
|
};
|
|
38
|
+
/** Set when the script called ctx.blocked(): the run stopped because a human
|
|
39
|
+
* must rule. Forces run class "decision" regardless of the agents' classes. */
|
|
40
|
+
blocked?: {
|
|
41
|
+
reason: string;
|
|
42
|
+
decisionId?: string;
|
|
43
|
+
};
|
|
38
44
|
workspaceBinding?: WorkspaceBinding;
|
|
39
45
|
workspaceAttestation?: WorkspaceAttestation;
|
|
40
46
|
workspaceFallback?: WorkspaceUnsupportedExecutionEvidence;
|
|
@@ -54,6 +60,23 @@ export declare function rollupAcceptance(criteria: AcceptanceCriterion[], eviden
|
|
|
54
60
|
summary: AcceptanceSummary;
|
|
55
61
|
};
|
|
56
62
|
export declare function digestResult(value: unknown, kind?: "text" | "json"): ResultDigest;
|
|
63
|
+
/**
|
|
64
|
+
* The run-level failure class (ADR 0046), derived from the agents rather than a
|
|
65
|
+
* single terminal throw so it survives a script's `parallel()` swallowing the
|
|
66
|
+
* rejection — a swallowed agent's proof is still recorded with its class.
|
|
67
|
+
*
|
|
68
|
+
* Rules, in order, all in service of "default to charging":
|
|
69
|
+
* 1. A succeeded run is never classed (there is nothing uncharged about it).
|
|
70
|
+
* 2. If ANY agent produced a result (succeeded or replayed from cache) the
|
|
71
|
+
* attempt was informative about the work — charge it. This also keeps a
|
|
72
|
+
* resumed run whose earlier segment did real work from being written off by
|
|
73
|
+
* a later environment failure.
|
|
74
|
+
* 3. Otherwise, among the failed agents, environment wins over upstream: a
|
|
75
|
+
* missing binary means nothing ran at all, and it is the operator-chosen
|
|
76
|
+
* hard stop.
|
|
77
|
+
* 4. Anything else is undefined ⇒ a charged work failure, exactly as today.
|
|
78
|
+
*/
|
|
79
|
+
export declare function deriveRunFailureClass(status: "succeeded" | "failed", agents: readonly Pick<WorkflowAgentProof, "status" | "class">[]): SpawnFailureClass | undefined;
|
|
57
80
|
export declare function buildWorkflowProof(input: BuildWorkflowProofInput): WorkflowProof;
|
|
58
81
|
export declare function writeWorkflowProof(path: string, proof: WorkflowProof): void;
|
|
59
82
|
export declare function readWorkflowProof(coordRoot: string, runId: string): WorkflowProof;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EAEzB,YAAY,
|
|
1
|
+
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { policyDigest } from "../policy/index.js";
|
|
|
5
5
|
import { isCanonicalWorkflowAttemptContext } from "./attempt-context.js";
|
|
6
6
|
import { stableDigest, writeImmutableJson } from "./durable-record.js";
|
|
7
7
|
import { readWorkflowRunManifest } from "./run-state.js";
|
|
8
|
-
import { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
8
|
+
import { EVIDENCE_KINDS, WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
9
9
|
import { isCanonicalWorkflowWorkContext } from "./work-context.js";
|
|
10
10
|
import { isWorkspaceBoundExecutionEvidence, isWorkspaceExecutionEvidence, isWorkspaceUnsupportedExecutionEvidence, workspaceProofLifecycle, } from "./workspaces/validate.js";
|
|
11
11
|
const MAX_ACCEPTANCE_CRITERIA = 50;
|
|
@@ -66,7 +66,7 @@ export function createEvidenceRecord(input) {
|
|
|
66
66
|
id: `e${input.sequence}`,
|
|
67
67
|
source: "workflow",
|
|
68
68
|
recorded_at: input.recordedAt ?? new Date().toISOString(),
|
|
69
|
-
kind: enumValue(value.kind,
|
|
69
|
+
kind: enumValue(value.kind, EVIDENCE_KINDS, "evidence kind"),
|
|
70
70
|
status: enumValue(value.status, ["passed", "failed", "observed", "unknown"], "evidence status"),
|
|
71
71
|
label: boundedRequired(value.label, "evidence label", MAX_LABEL_CHARS),
|
|
72
72
|
summary: boundedOptional(value.summary, "evidence summary", MAX_SUMMARY_CHARS),
|
|
@@ -108,6 +108,35 @@ export function digestResult(value, kind) {
|
|
|
108
108
|
bytes: Buffer.byteLength(serialized),
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* The run-level failure class (ADR 0046), derived from the agents rather than a
|
|
113
|
+
* single terminal throw so it survives a script's `parallel()` swallowing the
|
|
114
|
+
* rejection — a swallowed agent's proof is still recorded with its class.
|
|
115
|
+
*
|
|
116
|
+
* Rules, in order, all in service of "default to charging":
|
|
117
|
+
* 1. A succeeded run is never classed (there is nothing uncharged about it).
|
|
118
|
+
* 2. If ANY agent produced a result (succeeded or replayed from cache) the
|
|
119
|
+
* attempt was informative about the work — charge it. This also keeps a
|
|
120
|
+
* resumed run whose earlier segment did real work from being written off by
|
|
121
|
+
* a later environment failure.
|
|
122
|
+
* 3. Otherwise, among the failed agents, environment wins over upstream: a
|
|
123
|
+
* missing binary means nothing ran at all, and it is the operator-chosen
|
|
124
|
+
* hard stop.
|
|
125
|
+
* 4. Anything else is undefined ⇒ a charged work failure, exactly as today.
|
|
126
|
+
*/
|
|
127
|
+
export function deriveRunFailureClass(status, agents) {
|
|
128
|
+
if (status !== "failed")
|
|
129
|
+
return undefined;
|
|
130
|
+
if (agents.some((agent) => agent.status === "succeeded" || agent.status === "cached")) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const failed = agents.filter((agent) => agent.status === "failed");
|
|
134
|
+
if (failed.some((agent) => agent.class === "environment"))
|
|
135
|
+
return "environment";
|
|
136
|
+
if (failed.some((agent) => agent.class === "upstream"))
|
|
137
|
+
return "upstream";
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
111
140
|
export function buildWorkflowProof(input) {
|
|
112
141
|
const acceptance = rollupAcceptance(input.meta.acceptance, input.evidence);
|
|
113
142
|
const repository = buildRepoEvidence(input.before, input.after);
|
|
@@ -119,9 +148,15 @@ export function buildWorkflowProof(input) {
|
|
|
119
148
|
session_id: clippedOptional(agent.session_id, MAX_REF_CHARS),
|
|
120
149
|
error: clippedOptional(agent.error, MAX_SUMMARY_CHARS),
|
|
121
150
|
}));
|
|
122
|
-
const
|
|
123
|
-
const unknowns = buildUnknowns(agents,
|
|
124
|
-
|
|
151
|
+
const adapters = buildAdapterCoverage(agents, input.adapterEvidence, input.adapterAttestations);
|
|
152
|
+
const unknowns = buildUnknowns(agents, adapters, repository);
|
|
153
|
+
// A declared stop-on-human beats a derived spawn class. If the script said a
|
|
154
|
+
// human must rule, that is the true reason the run ended, even when some agent
|
|
155
|
+
// also happened to hit a flaky vendor on the way there.
|
|
156
|
+
const runClass = input.status === "failed" && input.blocked
|
|
157
|
+
? "decision"
|
|
158
|
+
: deriveRunFailureClass(input.status, agents);
|
|
159
|
+
const transcript = readFileSync(input.transcriptPath);
|
|
125
160
|
return {
|
|
126
161
|
schema_version: WORKFLOW_PROOF_SCHEMA_VERSION,
|
|
127
162
|
run: {
|
|
@@ -137,6 +172,10 @@ export function buildWorkflowProof(input) {
|
|
|
137
172
|
objective: input.meta.objective,
|
|
138
173
|
error: clippedOptional(input.error, MAX_SUMMARY_CHARS),
|
|
139
174
|
result: input.result === undefined ? undefined : digestResult(input.result),
|
|
175
|
+
...(runClass ? { class: runClass } : {}),
|
|
176
|
+
...(runClass === "decision" && input.blocked?.decisionId
|
|
177
|
+
? { decision_id: clipped(input.blocked.decisionId, MAX_REF_CHARS) }
|
|
178
|
+
: {}),
|
|
140
179
|
},
|
|
141
180
|
acceptance,
|
|
142
181
|
agents,
|
|
@@ -147,13 +186,13 @@ export function buildWorkflowProof(input) {
|
|
|
147
186
|
: input.workspaceFallback,
|
|
148
187
|
repository,
|
|
149
188
|
...(input.sandboxProjection ? { sandbox_projection: input.sandboxProjection } : {}),
|
|
150
|
-
|
|
189
|
+
adapters,
|
|
151
190
|
unknowns,
|
|
152
191
|
integrity: {
|
|
153
|
-
|
|
154
|
-
path: "
|
|
155
|
-
sha256: createHash("sha256").update(
|
|
156
|
-
bytes:
|
|
192
|
+
transcript: {
|
|
193
|
+
path: "transcript.jsonl",
|
|
194
|
+
sha256: createHash("sha256").update(transcript).digest("hex"),
|
|
195
|
+
bytes: transcript.byteLength,
|
|
157
196
|
},
|
|
158
197
|
},
|
|
159
198
|
};
|
|
@@ -212,6 +251,10 @@ export function readWorkflowProof(coordRoot, runId) {
|
|
|
212
251
|
}
|
|
213
252
|
if (proof.schema_version !== WORKFLOW_PROOF_SCHEMA_VERSION ||
|
|
214
253
|
proof.run?.id !== runId ||
|
|
254
|
+
(proof.run.class !== undefined &&
|
|
255
|
+
proof.run.class !== "environment" &&
|
|
256
|
+
proof.run.class !== "upstream" &&
|
|
257
|
+
proof.run.class !== "decision") ||
|
|
215
258
|
(proof.run.work_context !== undefined &&
|
|
216
259
|
(!proof.run.work_item_id ||
|
|
217
260
|
proof.run.work_context.id !== proof.run.work_item_id ||
|
|
@@ -292,7 +335,7 @@ export function renderWorkflowProof(proof) {
|
|
|
292
335
|
for (const unknown of proof.unknowns)
|
|
293
336
|
lines.push(` - ${unknown.message}`);
|
|
294
337
|
}
|
|
295
|
-
lines.push(`
|
|
338
|
+
lines.push(`transcript sha256: ${proof.integrity.transcript.sha256}`);
|
|
296
339
|
return `${lines.join("\n")}\n`;
|
|
297
340
|
}
|
|
298
341
|
function buildRepoEvidence(beforeRaw, afterRaw) {
|
|
@@ -329,39 +372,39 @@ function normalizeRepoSnapshot(snapshot) {
|
|
|
329
372
|
dirty_paths_truncated: snapshot.dirty_paths_truncated,
|
|
330
373
|
};
|
|
331
374
|
}
|
|
332
|
-
function
|
|
333
|
-
return [...new Set(agents.map((agent) => agent.
|
|
334
|
-
const
|
|
375
|
+
function buildAdapterCoverage(agents, claims, attestations) {
|
|
376
|
+
return [...new Set(agents.map((agent) => agent.adapter))].map((adapter) => {
|
|
377
|
+
const adapterAgents = agents.filter((agent) => agent.adapter === adapter);
|
|
335
378
|
return {
|
|
336
|
-
|
|
337
|
-
tool_evidence: claims?.[
|
|
379
|
+
adapter,
|
|
380
|
+
tool_evidence: claims?.[adapter]?.toolEvidence ?? {
|
|
338
381
|
support: "unknown",
|
|
339
|
-
note: "No
|
|
382
|
+
note: "No adapter capability claim was supplied to this workflow run.",
|
|
340
383
|
},
|
|
341
384
|
observed: {
|
|
342
|
-
final_results:
|
|
343
|
-
session_ids:
|
|
344
|
-
costs:
|
|
385
|
+
final_results: adapterAgents.filter((agent) => agent.result).length,
|
|
386
|
+
session_ids: adapterAgents.filter((agent) => agent.session_id).length,
|
|
387
|
+
costs: adapterAgents.filter((agent) => agent.cost_usd !== undefined).length,
|
|
345
388
|
},
|
|
346
|
-
...(attestations?.[
|
|
389
|
+
...(attestations?.[adapter] ? { attestation: attestations[adapter] } : {}),
|
|
347
390
|
};
|
|
348
391
|
});
|
|
349
392
|
}
|
|
350
|
-
function buildUnknowns(agents,
|
|
393
|
+
function buildUnknowns(agents, adapters, repository) {
|
|
351
394
|
const unknowns = [];
|
|
352
|
-
for (const
|
|
353
|
-
if (
|
|
395
|
+
for (const adapter of adapters) {
|
|
396
|
+
if (adapter.tool_evidence.support === "unknown") {
|
|
354
397
|
unknowns.push({
|
|
355
|
-
code: "
|
|
356
|
-
|
|
357
|
-
message: `${
|
|
398
|
+
code: "adapter_capability_unregistered",
|
|
399
|
+
adapter: adapter.adapter,
|
|
400
|
+
message: `${adapter.adapter}: tool-evidence capability was not registered for this run.`,
|
|
358
401
|
});
|
|
359
402
|
}
|
|
360
|
-
else if (
|
|
403
|
+
else if (adapter.tool_evidence.support !== "supported") {
|
|
361
404
|
unknowns.push({
|
|
362
405
|
code: "tool_evidence_unavailable",
|
|
363
|
-
|
|
364
|
-
message: `${
|
|
406
|
+
adapter: adapter.adapter,
|
|
407
|
+
message: `${adapter.adapter}: adapter-native tool evidence is ${adapter.tool_evidence.support}.`,
|
|
365
408
|
});
|
|
366
409
|
}
|
|
367
410
|
}
|
|
@@ -369,17 +412,17 @@ function buildUnknowns(agents, harnesses, repository) {
|
|
|
369
412
|
if (agent.cost_usd === undefined) {
|
|
370
413
|
unknowns.push({
|
|
371
414
|
code: "agent_cost_unreported",
|
|
372
|
-
|
|
415
|
+
adapter: agent.adapter,
|
|
373
416
|
agent_id: agent.id,
|
|
374
|
-
message: `${agent.id}: ${agent.
|
|
417
|
+
message: `${agent.id}: ${agent.adapter} did not report per-run cost.`,
|
|
375
418
|
});
|
|
376
419
|
}
|
|
377
420
|
if (!agent.session_id) {
|
|
378
421
|
unknowns.push({
|
|
379
422
|
code: "agent_session_unreported",
|
|
380
|
-
|
|
423
|
+
adapter: agent.adapter,
|
|
381
424
|
agent_id: agent.id,
|
|
382
|
-
message: `${agent.id}: ${agent.
|
|
425
|
+
message: `${agent.id}: ${agent.adapter} did not report a child session id.`,
|
|
383
426
|
});
|
|
384
427
|
}
|
|
385
428
|
}
|
|
@@ -73,12 +73,12 @@ export function readWorkflowRunManifest(coordRoot, runId) {
|
|
|
73
73
|
}
|
|
74
74
|
export function assertWorkflowRunResumable(coordRoot, runId) {
|
|
75
75
|
const manifest = readWorkflowRunManifest(coordRoot, runId);
|
|
76
|
-
const
|
|
77
|
-
if (!existsSync(
|
|
78
|
-
throw new Error(`workflow run ${runId} has no
|
|
76
|
+
const transcriptPath = join(coordRoot, ".harnery", "workflows", runId, "transcript.jsonl");
|
|
77
|
+
if (!existsSync(transcriptPath))
|
|
78
|
+
throw new Error(`workflow run ${runId} has no transcript`);
|
|
79
79
|
let approvalId;
|
|
80
80
|
let terminal = false;
|
|
81
|
-
for (const line of readFileSync(
|
|
81
|
+
for (const line of readFileSync(transcriptPath, "utf8").split("\n")) {
|
|
82
82
|
if (!line.trim())
|
|
83
83
|
continue;
|
|
84
84
|
try {
|
|
@@ -90,7 +90,7 @@ export function assertWorkflowRunResumable(coordRoot, runId) {
|
|
|
90
90
|
terminal = true;
|
|
91
91
|
}
|
|
92
92
|
catch {
|
|
93
|
-
throw new Error(`workflow run ${runId} has a malformed
|
|
93
|
+
throw new Error(`workflow run ${runId} has a malformed transcript line`);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
if (terminal)
|
|
@@ -195,8 +195,8 @@ function validExecution(value) {
|
|
|
195
195
|
if (!value || typeof value !== "object")
|
|
196
196
|
return false;
|
|
197
197
|
return (isAbsolute(value.cwd) &&
|
|
198
|
-
typeof value.
|
|
199
|
-
value.
|
|
198
|
+
typeof value.default_adapter === "string" &&
|
|
199
|
+
value.default_adapter.length > 0 &&
|
|
200
200
|
positiveSafeInteger(value.max_agents) &&
|
|
201
201
|
positiveSafeInteger(value.concurrency) &&
|
|
202
202
|
typeof value.subscription_only === "boolean" &&
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Project the host's filesystem policy into a
|
|
2
|
+
* Project the host's filesystem policy into a adapter's own vendor sandbox
|
|
3
3
|
* (ADR 0039).
|
|
4
4
|
*
|
|
5
5
|
* Harnery decides where a workflow child may write. Until this existed it never
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
* dropped would leave an operator believing a child was constrained when it was
|
|
14
14
|
* not, which is worse than refusing and worse than never offering the feature.
|
|
15
15
|
*/
|
|
16
|
-
import type {
|
|
16
|
+
import type { AdapterSandboxProjection } from "../adapters/types.js";
|
|
17
17
|
import type { GitAdministrativeGrant, SpawnFilesystemPolicy } from "./types.js";
|
|
18
18
|
import type { WorkspaceBinding } from "./workspaces/types.js";
|
|
19
19
|
export declare class SandboxProjectionError extends Error {
|
|
20
|
-
readonly
|
|
20
|
+
readonly adapter: string;
|
|
21
21
|
readonly reason: "mode_unrepresentable" | "writable_roots_unrepresentable" | "no_projection" | "writable_root_escapes_workspace" | "git_grant_unavailable";
|
|
22
|
-
constructor(
|
|
22
|
+
constructor(adapter: string, reason: SandboxProjectionError["reason"], message: string);
|
|
23
23
|
}
|
|
24
24
|
export interface ResolvedSandboxProjection {
|
|
25
25
|
/** Vendor-native name for the requested mode. */
|
|
@@ -30,7 +30,7 @@ export interface ResolvedSandboxProjection {
|
|
|
30
30
|
* Resolve a requested policy against what the adapter declares it can carry.
|
|
31
31
|
* Throws rather than degrading; see the module note.
|
|
32
32
|
*/
|
|
33
|
-
export declare function resolveSandboxProjection(
|
|
33
|
+
export declare function resolveSandboxProjection(adapter: string, declaration: AdapterSandboxProjection | undefined, policy: SpawnFilesystemPolicy): ResolvedSandboxProjection;
|
|
34
34
|
/**
|
|
35
35
|
* Refuse a projection that would grant write access outside the root the
|
|
36
36
|
* workspace provider already validated (ADR 0039).
|
|
@@ -39,7 +39,7 @@ export declare function resolveSandboxProjection(harness: string, declaration: H
|
|
|
39
39
|
* the provider never sanctioned would let a projection quietly widen the blast
|
|
40
40
|
* radius of a run that the workspace lifecycle believes it has contained.
|
|
41
41
|
*/
|
|
42
|
-
export declare function assertProjectionWithinWorkspace(
|
|
42
|
+
export declare function assertProjectionWithinWorkspace(adapter: string, allowedRootRealpath: string, writableRoots: readonly string[]): void;
|
|
43
43
|
/**
|
|
44
44
|
* Resolve a named Git administrative grant into concrete writable roots
|
|
45
45
|
* (ADR 0040).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-projection.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/sandbox-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sandbox-projection.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/sandbox-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EACX,sBAAsB,GACtB,gCAAgC,GAChC,eAAe,GACf,iCAAiC,GACjC,uBAAuB,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM;CAMvF;AAED,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,wBAAwB,GAAG,SAAS,EACjD,MAAM,EAAE,qBAAqB,GAC5B,yBAAyB,CAoC3B;AASD;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,IAAI,CAUN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,gBAAgB,GAAG,SAAS,GACpC,SAAS,MAAM,EAAE,CAanB"}
|