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
|
@@ -4,27 +4,27 @@ import { appendFileSync, chmodSync, closeSync, existsSync, mkdirSync, openSync,
|
|
|
4
4
|
import { hostname } from "node:os";
|
|
5
5
|
import { dirname, join, resolve } from "node:path";
|
|
6
6
|
import { normalizePolicy } from "../policy/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
export const
|
|
10
|
-
export const
|
|
11
|
-
export const
|
|
7
|
+
import { runGovernor } from "./runner.js";
|
|
8
|
+
import { readGovernor } from "./state.js";
|
|
9
|
+
export const GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION = 1;
|
|
10
|
+
export const GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION = 1;
|
|
11
|
+
export const GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION = 1;
|
|
12
12
|
const MAX_FILE_BYTES = 512 * 1024;
|
|
13
13
|
const MAX_GOALS = 100;
|
|
14
14
|
const MAX_ERROR = 2_000;
|
|
15
15
|
const FOREIGN_STATUS_STALE_MS = 30_000;
|
|
16
|
-
export function
|
|
16
|
+
export function configureGovernorService(input) {
|
|
17
17
|
const coordRoot = resolve(input.coordRoot);
|
|
18
18
|
const active = readStatusRecord(coordRoot);
|
|
19
19
|
if (active && statusOwnerIsLive(active)) {
|
|
20
|
-
throw new Error(`stop
|
|
20
|
+
throw new Error(`stop governor service pid ${active.pid} before changing its configuration`);
|
|
21
21
|
}
|
|
22
22
|
const goalIds = unique(input.goalIds.map((value) => value.trim()).filter(Boolean));
|
|
23
23
|
if (goalIds.length < 1 || goalIds.length > MAX_GOALS) {
|
|
24
|
-
throw new Error(`
|
|
24
|
+
throw new Error(`governor service requires from 1 to ${MAX_GOALS} unique goal ids`);
|
|
25
25
|
}
|
|
26
26
|
for (const goalId of goalIds)
|
|
27
|
-
|
|
27
|
+
readGovernor(coordRoot, goalId);
|
|
28
28
|
const wakeIntervalMs = positive(input.wakeIntervalMs ?? 5_000, "service wake_interval_ms", 60 * 60 * 1_000);
|
|
29
29
|
const heartbeatIntervalMs = positive(input.heartbeatIntervalMs ?? 2_000, "service heartbeat_interval_ms", 60_000);
|
|
30
30
|
const errorBackoffBaseMs = positive(input.errorBackoffBaseMs ?? 2_000, "service error_backoff_base_ms", 60 * 60 * 1_000);
|
|
@@ -33,7 +33,7 @@ export function configureSupervisorService(input) {
|
|
|
33
33
|
throw new Error("service error_backoff_max_ms must be at least error_backoff_base_ms");
|
|
34
34
|
}
|
|
35
35
|
const config = {
|
|
36
|
-
schema_version:
|
|
36
|
+
schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
|
|
37
37
|
goal_ids: goalIds,
|
|
38
38
|
wake_interval_ms: wakeIntervalMs,
|
|
39
39
|
heartbeat_interval_ms: heartbeatIntervalMs,
|
|
@@ -46,42 +46,42 @@ export function configureSupervisorService(input) {
|
|
|
46
46
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
47
47
|
chmodSync(dir, 0o700);
|
|
48
48
|
writePrivateJsonAtomic(serviceConfigPath(coordRoot), config);
|
|
49
|
-
return
|
|
49
|
+
return readGovernorServiceConfig(coordRoot);
|
|
50
50
|
}
|
|
51
|
-
export function
|
|
51
|
+
export function readGovernorServiceConfig(coordRootRaw) {
|
|
52
52
|
const coordRoot = resolve(coordRootRaw);
|
|
53
|
-
const config = readBoundedJson(serviceConfigPath(coordRoot), "
|
|
53
|
+
const config = readBoundedJson(serviceConfigPath(coordRoot), "governor service configuration");
|
|
54
54
|
validateConfig(coordRoot, config);
|
|
55
55
|
return config;
|
|
56
56
|
}
|
|
57
|
-
export function
|
|
57
|
+
export function readGovernorServiceRuntime(coordRootRaw) {
|
|
58
58
|
const coordRoot = resolve(coordRootRaw);
|
|
59
59
|
if (!existsSync(serviceRuntimePath(coordRoot)))
|
|
60
60
|
return undefined;
|
|
61
|
-
const runtime = readBoundedJson(serviceRuntimePath(coordRoot), "
|
|
62
|
-
if (runtime.schema_version !==
|
|
61
|
+
const runtime = readBoundedJson(serviceRuntimePath(coordRoot), "governor service runtime");
|
|
62
|
+
if (runtime.schema_version !== GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION ||
|
|
63
63
|
!validTimestamp(runtime.config_created_at) ||
|
|
64
64
|
!validTimestamp(runtime.updated_at) ||
|
|
65
65
|
!runtime.goals ||
|
|
66
66
|
typeof runtime.goals !== "object" ||
|
|
67
67
|
Array.isArray(runtime.goals)) {
|
|
68
|
-
throw new Error("
|
|
68
|
+
throw new Error("governor service runtime has an unsupported schema");
|
|
69
69
|
}
|
|
70
70
|
return runtime;
|
|
71
71
|
}
|
|
72
|
-
export function
|
|
72
|
+
export function readGovernorServiceStatus(coordRootRaw) {
|
|
73
73
|
const coordRoot = resolve(coordRootRaw);
|
|
74
74
|
const record = readStatusRecord(coordRoot);
|
|
75
75
|
let config;
|
|
76
76
|
let runtime;
|
|
77
77
|
try {
|
|
78
|
-
config =
|
|
78
|
+
config = readGovernorServiceConfig(coordRoot);
|
|
79
79
|
}
|
|
80
80
|
catch {
|
|
81
81
|
// A service has no usable configuration until explicitly configured.
|
|
82
82
|
}
|
|
83
83
|
try {
|
|
84
|
-
runtime =
|
|
84
|
+
runtime = readGovernorServiceRuntime(coordRoot);
|
|
85
85
|
}
|
|
86
86
|
catch {
|
|
87
87
|
// Status remains readable when recoverable runtime state is corrupt.
|
|
@@ -91,12 +91,12 @@ export function readSupervisorServiceStatus(coordRootRaw) {
|
|
|
91
91
|
const running = statusOwnerIsLive(record);
|
|
92
92
|
return { running, stale: !running && record.state !== "stopped", record, config, runtime };
|
|
93
93
|
}
|
|
94
|
-
export async function
|
|
94
|
+
export async function spawnGovernorService(coordRootRaw) {
|
|
95
95
|
const coordRoot = resolve(coordRootRaw);
|
|
96
|
-
|
|
97
|
-
const current =
|
|
96
|
+
readGovernorServiceConfig(coordRoot);
|
|
97
|
+
const current = readGovernorServiceStatus(coordRoot);
|
|
98
98
|
if (current.running) {
|
|
99
|
-
throw new Error(`
|
|
99
|
+
throw new Error(`governor service is already running under pid ${current.record?.pid}`);
|
|
100
100
|
}
|
|
101
101
|
mkdirSync(serviceDir(coordRoot), { recursive: true, mode: 0o700 });
|
|
102
102
|
const logFd = openSync(serviceLogPath(coordRoot), "a", 0o600);
|
|
@@ -107,7 +107,7 @@ export async function spawnSupervisorService(coordRootRaw) {
|
|
|
107
107
|
throw new Error(`cannot find harn executable at ${harnBin}`);
|
|
108
108
|
}
|
|
109
109
|
let spawnError;
|
|
110
|
-
const child = spawn(harnBin, ["
|
|
110
|
+
const child = spawn(harnBin, ["governor", "service", "daemon"], {
|
|
111
111
|
cwd: coordRoot,
|
|
112
112
|
detached: true,
|
|
113
113
|
stdio: ["ignore", logFd, logFd],
|
|
@@ -127,17 +127,17 @@ export async function spawnSupervisorService(coordRootRaw) {
|
|
|
127
127
|
await delay(50);
|
|
128
128
|
if (spawnError)
|
|
129
129
|
throw spawnError;
|
|
130
|
-
const status =
|
|
130
|
+
const status = readGovernorServiceStatus(coordRoot);
|
|
131
131
|
if (status.running && status.record?.pid === child.pid)
|
|
132
132
|
return status;
|
|
133
133
|
if (child.exitCode !== null)
|
|
134
134
|
break;
|
|
135
135
|
}
|
|
136
|
-
throw new Error(`
|
|
136
|
+
throw new Error(`governor service failed to start; inspect ${serviceLogPath(coordRoot)}`);
|
|
137
137
|
}
|
|
138
|
-
export function
|
|
138
|
+
export function requestGovernorServiceStop(coordRootRaw) {
|
|
139
139
|
const coordRoot = resolve(coordRootRaw);
|
|
140
|
-
const status =
|
|
140
|
+
const status = readGovernorServiceStatus(coordRoot);
|
|
141
141
|
if (!status.running || !status.record)
|
|
142
142
|
return status;
|
|
143
143
|
writePrivateJsonAtomic(serviceStopPath(coordRoot), {
|
|
@@ -152,24 +152,24 @@ export function requestSupervisorServiceStop(coordRootRaw) {
|
|
|
152
152
|
// The durable stop request remains for a racing or restarted daemon.
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
-
return
|
|
155
|
+
return readGovernorServiceStatus(coordRoot);
|
|
156
156
|
}
|
|
157
|
-
export async function
|
|
157
|
+
export async function runGovernorServiceSweep(input) {
|
|
158
158
|
const coordRoot = resolve(input.coordRoot);
|
|
159
159
|
const now = input.now ?? Date.now;
|
|
160
|
-
const readGoal = input.readGoal ??
|
|
160
|
+
const readGoal = input.readGoal ?? readGovernor;
|
|
161
161
|
const runtime = runtimeForConfig(coordRoot, input.config, now());
|
|
162
162
|
const startedAt = new Date(now()).toISOString();
|
|
163
163
|
const outcomes = [];
|
|
164
164
|
const runGoal = input.runGoal ??
|
|
165
165
|
(async (goalId) => {
|
|
166
166
|
if (!input.engine)
|
|
167
|
-
throw new Error("
|
|
168
|
-
return await
|
|
167
|
+
throw new Error("governor service sweep requires an engine");
|
|
168
|
+
return await runGovernor({
|
|
169
169
|
coordRoot,
|
|
170
170
|
goalId,
|
|
171
171
|
mode: "tick",
|
|
172
|
-
actor: input.actor ?? "
|
|
172
|
+
actor: input.actor ?? "governor-service",
|
|
173
173
|
engine: input.engine,
|
|
174
174
|
});
|
|
175
175
|
});
|
|
@@ -287,14 +287,14 @@ export async function runSupervisorServiceSweep(input) {
|
|
|
287
287
|
persistRuntime(coordRoot, runtime, Date.parse(endedAt));
|
|
288
288
|
return { started_at: startedAt, ended_at: endedAt, outcomes };
|
|
289
289
|
}
|
|
290
|
-
export async function
|
|
290
|
+
export async function runGovernorServiceDaemon(input) {
|
|
291
291
|
const coordRoot = resolve(input.coordRoot);
|
|
292
|
-
const config =
|
|
292
|
+
const config = readGovernorServiceConfig(coordRoot);
|
|
293
293
|
const release = acquireServiceLease(coordRoot);
|
|
294
294
|
rmSync(serviceStopPath(coordRoot), { force: true });
|
|
295
295
|
const now = new Date().toISOString();
|
|
296
296
|
const status = {
|
|
297
|
-
schema_version:
|
|
297
|
+
schema_version: GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION,
|
|
298
298
|
pid: process.pid,
|
|
299
299
|
host: hostname(),
|
|
300
300
|
nonce: randomUUID(),
|
|
@@ -325,20 +325,20 @@ export async function runSupervisorServiceDaemon(input) {
|
|
|
325
325
|
goals: config.goal_ids,
|
|
326
326
|
config_created_at: config.created_at,
|
|
327
327
|
});
|
|
328
|
-
log(`
|
|
328
|
+
log(`governor service started for ${config.goal_ids.length} goal(s)`);
|
|
329
329
|
const heartbeat = setInterval(() => {
|
|
330
330
|
try {
|
|
331
331
|
writeStatus();
|
|
332
332
|
}
|
|
333
333
|
catch (error) {
|
|
334
|
-
log(`
|
|
334
|
+
log(`governor service heartbeat error: ${boundedError(error.message)}`);
|
|
335
335
|
}
|
|
336
336
|
}, config.heartbeat_interval_ms);
|
|
337
337
|
try {
|
|
338
338
|
while (!stopRequested && !existsSync(serviceStopPath(coordRoot))) {
|
|
339
339
|
let sleepMs = config.wake_interval_ms;
|
|
340
340
|
try {
|
|
341
|
-
const report = await
|
|
341
|
+
const report = await runGovernorServiceSweep({
|
|
342
342
|
coordRoot,
|
|
343
343
|
config,
|
|
344
344
|
engine: input.engine,
|
|
@@ -368,7 +368,7 @@ export async function runSupervisorServiceDaemon(input) {
|
|
|
368
368
|
event: "service.sweep_error",
|
|
369
369
|
error: status.last_error,
|
|
370
370
|
});
|
|
371
|
-
log(`
|
|
371
|
+
log(`governor service sweep error: ${status.last_error}`);
|
|
372
372
|
}
|
|
373
373
|
if (input.maxSweeps !== undefined && status.sweep_count >= input.maxSweeps)
|
|
374
374
|
break;
|
|
@@ -395,13 +395,13 @@ export async function runSupervisorServiceDaemon(input) {
|
|
|
395
395
|
}
|
|
396
396
|
return status;
|
|
397
397
|
}
|
|
398
|
-
export function
|
|
398
|
+
export function governorServiceLogPath(coordRoot) {
|
|
399
399
|
return serviceLogPath(resolve(coordRoot));
|
|
400
400
|
}
|
|
401
401
|
function runtimeForConfig(coordRoot, config, timestamp) {
|
|
402
402
|
let existing;
|
|
403
403
|
try {
|
|
404
|
-
existing =
|
|
404
|
+
existing = readGovernorServiceRuntime(coordRoot);
|
|
405
405
|
}
|
|
406
406
|
catch {
|
|
407
407
|
// Runtime is a recoverable scheduling hint; durable goal state remains authoritative.
|
|
@@ -411,7 +411,7 @@ function runtimeForConfig(coordRoot, config, timestamp) {
|
|
|
411
411
|
return { ...existing, goals };
|
|
412
412
|
}
|
|
413
413
|
return {
|
|
414
|
-
schema_version:
|
|
414
|
+
schema_version: GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION,
|
|
415
415
|
config_created_at: config.created_at,
|
|
416
416
|
updated_at: new Date(timestamp).toISOString(),
|
|
417
417
|
goals: Object.fromEntries(config.goal_ids.map((goalId) => [goalId, emptyGoalRuntime()])),
|
|
@@ -453,7 +453,7 @@ function wakeDue(value, now) {
|
|
|
453
453
|
}
|
|
454
454
|
function normalizeEngineConfig(coordRoot, input) {
|
|
455
455
|
return {
|
|
456
|
-
|
|
456
|
+
default_adapter: optionalBounded(input?.default_adapter, "default_adapter", 100),
|
|
457
457
|
cwd: input?.cwd ? resolve(input.cwd) : coordRoot,
|
|
458
458
|
subscription_only: bool(input?.subscription_only ?? false, "subscription_only"),
|
|
459
459
|
allow_api_billing: bool(input?.allow_api_billing ?? false, "allow_api_billing"),
|
|
@@ -463,13 +463,13 @@ function normalizeEngineConfig(coordRoot, input) {
|
|
|
463
463
|
};
|
|
464
464
|
}
|
|
465
465
|
function validateConfig(coordRoot, config) {
|
|
466
|
-
if (config.schema_version !==
|
|
466
|
+
if (config.schema_version !== GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION ||
|
|
467
467
|
!validTimestamp(config.created_at) ||
|
|
468
468
|
!Array.isArray(config.goal_ids)) {
|
|
469
|
-
throw new Error("
|
|
469
|
+
throw new Error("governor service configuration has an unsupported schema");
|
|
470
470
|
}
|
|
471
471
|
const normalized = {
|
|
472
|
-
schema_version:
|
|
472
|
+
schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
|
|
473
473
|
goal_ids: unique(config.goal_ids.map((goalId) => goalId.trim()).filter(Boolean)),
|
|
474
474
|
wake_interval_ms: positive(config.wake_interval_ms, "service wake_interval_ms", 60 * 60 * 1_000),
|
|
475
475
|
heartbeat_interval_ms: positive(config.heartbeat_interval_ms, "service heartbeat_interval_ms", 60_000),
|
|
@@ -482,7 +482,7 @@ function validateConfig(coordRoot, config) {
|
|
|
482
482
|
normalized.goal_ids.length > MAX_GOALS ||
|
|
483
483
|
normalized.error_backoff_max_ms < normalized.error_backoff_base_ms ||
|
|
484
484
|
JSON.stringify(normalized) !== JSON.stringify(config)) {
|
|
485
|
-
throw new Error("
|
|
485
|
+
throw new Error("governor service configuration is not canonical");
|
|
486
486
|
}
|
|
487
487
|
}
|
|
488
488
|
function normalizeIsolation(value) {
|
|
@@ -522,11 +522,11 @@ function acquireServiceLease(coordRoot) {
|
|
|
522
522
|
if (!acquire()) {
|
|
523
523
|
const existing = readLease(path);
|
|
524
524
|
if (existing && leaseOwnerIsLive(existing)) {
|
|
525
|
-
throw new Error(`
|
|
525
|
+
throw new Error(`governor service is already running under pid ${existing.pid}`);
|
|
526
526
|
}
|
|
527
527
|
unlinkSync(path);
|
|
528
528
|
if (!acquire())
|
|
529
|
-
throw new Error("
|
|
529
|
+
throw new Error("governor service lease raced with another process");
|
|
530
530
|
}
|
|
531
531
|
return () => {
|
|
532
532
|
try {
|
|
@@ -565,8 +565,8 @@ function readStatusRecord(coordRoot) {
|
|
|
565
565
|
if (!existsSync(serviceStatusPath(coordRoot)))
|
|
566
566
|
return undefined;
|
|
567
567
|
try {
|
|
568
|
-
const value = readBoundedJson(serviceStatusPath(coordRoot), "
|
|
569
|
-
if (value.schema_version !==
|
|
568
|
+
const value = readBoundedJson(serviceStatusPath(coordRoot), "governor service status");
|
|
569
|
+
if (value.schema_version !== GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION ||
|
|
570
570
|
!Number.isSafeInteger(value.pid) ||
|
|
571
571
|
value.pid < 1 ||
|
|
572
572
|
typeof value.host !== "string" ||
|
|
@@ -611,7 +611,7 @@ function renderSweepLog(report) {
|
|
|
611
611
|
}, {});
|
|
612
612
|
if (!counts.tick && !counts.backoff)
|
|
613
613
|
return undefined;
|
|
614
|
-
return `
|
|
614
|
+
return `governor service sweep: ${counts.tick ?? 0} tick, ${counts.skip ?? 0} skip, ${counts.backoff ?? 0} backoff`;
|
|
615
615
|
}
|
|
616
616
|
function readBoundedJson(path, label) {
|
|
617
617
|
if (!existsSync(path))
|
|
@@ -629,7 +629,7 @@ function readBoundedJson(path, label) {
|
|
|
629
629
|
function writePrivateJsonAtomic(path, value) {
|
|
630
630
|
const body = `${JSON.stringify(value, null, 2)}\n`;
|
|
631
631
|
if (Buffer.byteLength(body) > MAX_FILE_BYTES) {
|
|
632
|
-
throw new Error(`
|
|
632
|
+
throw new Error(`governor service file exceeds ${MAX_FILE_BYTES} bytes`);
|
|
633
633
|
}
|
|
634
634
|
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
635
635
|
chmodSync(dirname(path), 0o700);
|
|
@@ -639,7 +639,7 @@ function writePrivateJsonAtomic(path, value) {
|
|
|
639
639
|
chmodSync(path, 0o600);
|
|
640
640
|
}
|
|
641
641
|
function serviceDir(coordRoot) {
|
|
642
|
-
return join(resolve(coordRoot), ".harnery", "
|
|
642
|
+
return join(resolve(coordRoot), ".harnery", "governor-service");
|
|
643
643
|
}
|
|
644
644
|
function serviceConfigPath(coordRoot) {
|
|
645
645
|
return join(serviceDir(coordRoot), "config.json");
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type WorkRecord } from "../work/read.js";
|
|
2
|
+
import type { WorkflowSpecialistProfile } from "../workflow/types.js";
|
|
3
|
+
import { type CreateGovernorReplanningInput, type GovernorPlanRecord, type GovernorReplanningPolicy } from "./plan-types.js";
|
|
4
|
+
export declare const GOVERNOR_INTENT_SCHEMA_VERSION: 1;
|
|
5
|
+
export interface GovernorLimits {
|
|
6
|
+
max_cycles: number;
|
|
7
|
+
max_runtime_ms: number;
|
|
8
|
+
max_parallel_work: number;
|
|
9
|
+
max_total_attempts: number;
|
|
10
|
+
max_agents_per_work: number;
|
|
11
|
+
agent_concurrency: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GovernorAutomationPolicy {
|
|
14
|
+
accept_passing_proof: boolean;
|
|
15
|
+
resume_approved: boolean;
|
|
16
|
+
retry_blocked: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface GovernorMission {
|
|
19
|
+
objective: string;
|
|
20
|
+
acceptance: string[];
|
|
21
|
+
max_milestones: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateGovernorMissionInput {
|
|
24
|
+
objective: string;
|
|
25
|
+
acceptance: readonly string[];
|
|
26
|
+
maxMilestones?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface GovernorIntent {
|
|
29
|
+
schema_version: typeof GOVERNOR_INTENT_SCHEMA_VERSION;
|
|
30
|
+
id: string;
|
|
31
|
+
title: string;
|
|
32
|
+
root_work_id: string;
|
|
33
|
+
specialists: Record<string, WorkflowSpecialistProfile>;
|
|
34
|
+
limits: GovernorLimits;
|
|
35
|
+
automation: GovernorAutomationPolicy;
|
|
36
|
+
mission?: GovernorMission;
|
|
37
|
+
replanning?: GovernorReplanningPolicy;
|
|
38
|
+
created_at: string;
|
|
39
|
+
}
|
|
40
|
+
export type GovernorState = "ready" | "running" | "awaiting_attention" | "blocked" | "budget_exhausted" | "succeeded";
|
|
41
|
+
export type GovernorNextAction = "run" | "wait_for_run" | "resolve_approval" | "review" | "retry" | "replan" | "plan_initial" | "plan_milestone" | "review_plan" | "retry_plan" | "none";
|
|
42
|
+
export interface GovernorProjection {
|
|
43
|
+
id: string;
|
|
44
|
+
title: string;
|
|
45
|
+
root_work_id: string;
|
|
46
|
+
root_materialized: boolean;
|
|
47
|
+
state: GovernorState;
|
|
48
|
+
reason: string;
|
|
49
|
+
next_action: GovernorNextAction;
|
|
50
|
+
work_ids: string[];
|
|
51
|
+
ready_work: string[];
|
|
52
|
+
resumable_work: string[];
|
|
53
|
+
retryable_work: string[];
|
|
54
|
+
attention_work: string[];
|
|
55
|
+
/** Work stopped because a human must rule, with the docket id when the script
|
|
56
|
+
* named one. Empty in the ordinary case. A reader that wants to tell an
|
|
57
|
+
* operator what is actually waiting on them should start here. */
|
|
58
|
+
decision_blocked_work: Array<{
|
|
59
|
+
work_id: string;
|
|
60
|
+
decision_id?: string;
|
|
61
|
+
}>;
|
|
62
|
+
attempts_used: number;
|
|
63
|
+
attempts_remaining: number;
|
|
64
|
+
specialists: string[];
|
|
65
|
+
plan_generation: number;
|
|
66
|
+
replans_used: number;
|
|
67
|
+
replans_remaining: number;
|
|
68
|
+
milestones_completed: number;
|
|
69
|
+
milestones_remaining: number;
|
|
70
|
+
pending_plan_id?: string;
|
|
71
|
+
attention_plan_id?: string;
|
|
72
|
+
latest_plan_status?: GovernorPlanRecord["status"];
|
|
73
|
+
/**
|
|
74
|
+
* How consumed (charged) replans that did not advance the graph broke down,
|
|
75
|
+
* present only when at least one replan was spent by a planner run that
|
|
76
|
+
* produced no proposal. `reviewer_rejection` counts replans where a proposal
|
|
77
|
+
* was produced and independent review rejected it (review-round exhaustion,
|
|
78
|
+
* reviewer attention, or review failure); `planner_no_proposal` counts replans
|
|
79
|
+
* where the planner run produced no reviewable proposal at all. Absent when a
|
|
80
|
+
* goal has no planner no-proposal history, so goals that only ever reached
|
|
81
|
+
* review project exactly as before this field existed.
|
|
82
|
+
*/
|
|
83
|
+
replan_consumption?: {
|
|
84
|
+
reviewer_rejection: number;
|
|
85
|
+
planner_no_proposal: number;
|
|
86
|
+
};
|
|
87
|
+
governed_work_ids: string[];
|
|
88
|
+
}
|
|
89
|
+
export interface GovernorRecord {
|
|
90
|
+
intent: GovernorIntent;
|
|
91
|
+
projection: GovernorProjection;
|
|
92
|
+
work: WorkRecord[];
|
|
93
|
+
plans: GovernorPlanRecord[];
|
|
94
|
+
}
|
|
95
|
+
export interface CreateGovernorInput {
|
|
96
|
+
coordRoot: string;
|
|
97
|
+
rootWorkId?: string;
|
|
98
|
+
specialists: Readonly<Record<string, WorkflowSpecialistProfile>>;
|
|
99
|
+
title?: string;
|
|
100
|
+
id?: string;
|
|
101
|
+
limits?: Partial<GovernorLimits>;
|
|
102
|
+
automation?: Partial<GovernorAutomationPolicy>;
|
|
103
|
+
mission?: CreateGovernorMissionInput;
|
|
104
|
+
replanning?: CreateGovernorReplanningInput;
|
|
105
|
+
}
|
|
106
|
+
export declare function createGovernor(input: CreateGovernorInput): GovernorRecord;
|
|
107
|
+
export declare function readGovernor(coordRoot: string, goalId: string): GovernorRecord;
|
|
108
|
+
/** @internal Runner seam; ignores the lease held by this governor process. */
|
|
109
|
+
export declare function readGovernorIgnoringLease(coordRoot: string, goalId: string): GovernorRecord;
|
|
110
|
+
export declare function listGovernors(coordRoot: string): GovernorRecord[];
|
|
111
|
+
export declare function collectGovernorWork(coordRoot: string, rootWorkId: string): WorkRecord[];
|
|
112
|
+
export declare function assertGovernorId(goalId: string): void;
|
|
113
|
+
export declare function newGovernorId(): string;
|
|
114
|
+
/** @internal Runner seam; one exclusive crash-recoverable governor lease. */
|
|
115
|
+
export declare function acquireGovernorLease(coordRoot: string, goalId: string): () => void;
|
|
116
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/governor/state.ts"],"names":[],"mappings":"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"}
|