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
|
@@ -3,21 +3,21 @@ import { appendFileSync, chmodSync, existsSync, linkSync, mkdirSync, readFileSyn
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { createWorkItem, readWorkItem } from "../work/index.js";
|
|
5
5
|
import { digestResult, readWorkflowProof, runWorkflow, WorkflowParkedError, workflowScriptDigest, } from "../workflow/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans } from "./plan-read.js";
|
|
7
|
+
import { GOVERNOR_PLAN_SCHEMA_VERSION, governorGraphFingerprint, } from "./plan-types.js";
|
|
8
8
|
const PLAN_KEY = /^[a-z][a-z0-9-]{0,31}$/;
|
|
9
9
|
const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
10
10
|
const MAX_RECORD_BYTES = 256 * 1024;
|
|
11
11
|
const MAX_EVENTS_BYTES = 512 * 1024;
|
|
12
12
|
const MAX_REASON = 2_000;
|
|
13
13
|
const PROPOSAL_ROOT_RULE = "proposal.root names one newly proposed work key using a root-capable template; it does not preserve or repeat active_root, which is context only";
|
|
14
|
-
export async function
|
|
14
|
+
export async function runGovernorPlanner(input) {
|
|
15
15
|
const coordRoot = resolve(input.coordRoot);
|
|
16
16
|
const policy = input.record.intent.replanning;
|
|
17
17
|
if (!policy)
|
|
18
|
-
throw new Error(`
|
|
19
|
-
const history =
|
|
20
|
-
const triggerFingerprint =
|
|
18
|
+
throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
|
|
19
|
+
const history = readGovernorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
|
|
20
|
+
const triggerFingerprint = governorGraphFingerprint({
|
|
21
21
|
rootWorkId: input.record.projection.root_work_id,
|
|
22
22
|
generation: input.record.projection.plan_generation,
|
|
23
23
|
work: input.record.work,
|
|
@@ -69,7 +69,7 @@ export async function runSupervisorPlanner(input) {
|
|
|
69
69
|
existsSync(reviewInputPath(coordRoot, input.record.intent.id, request.id)) &&
|
|
70
70
|
existsSync(join(coordRoot, ".harnery", "workflows", reviewRunId, "run.json")));
|
|
71
71
|
const reviewInput = resumingReview
|
|
72
|
-
? readBoundedJson(reviewInputPath(coordRoot, input.record.intent.id, request.id), "
|
|
72
|
+
? readBoundedJson(reviewInputPath(coordRoot, input.record.intent.id, request.id), "governor plan review input")
|
|
73
73
|
: undefined;
|
|
74
74
|
const rawProposal = reviewInput
|
|
75
75
|
? reviewInput.candidate
|
|
@@ -92,7 +92,7 @@ export async function runSupervisorPlanner(input) {
|
|
|
92
92
|
actor: input.actor,
|
|
93
93
|
reason: proposal.rationale,
|
|
94
94
|
});
|
|
95
|
-
return outcome(
|
|
95
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
|
|
96
96
|
}
|
|
97
97
|
let receipt;
|
|
98
98
|
try {
|
|
@@ -117,7 +117,7 @@ export async function runSupervisorPlanner(input) {
|
|
|
117
117
|
actor: input.actor,
|
|
118
118
|
reason: bounded(`plan review requires attention: ${error.message}`, "plan review attention", MAX_REASON),
|
|
119
119
|
});
|
|
120
|
-
return outcome(
|
|
120
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
|
|
121
121
|
}
|
|
122
122
|
return finalizeReviewedProposal({
|
|
123
123
|
coordRoot,
|
|
@@ -128,7 +128,7 @@ export async function runSupervisorPlanner(input) {
|
|
|
128
128
|
actor: input.actor,
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
|
-
writeExclusiveJson(planProposalPath(coordRoot, input.record.intent.id, request.id), proposal, "
|
|
131
|
+
writeExclusiveJson(planProposalPath(coordRoot, input.record.intent.id, request.id), proposal, "governor plan proposal");
|
|
132
132
|
appendPlanEvent(coordRoot, input.record.intent.id, request.id, {
|
|
133
133
|
event: "plan.proposed",
|
|
134
134
|
actor: input.actor,
|
|
@@ -141,18 +141,18 @@ export async function runSupervisorPlanner(input) {
|
|
|
141
141
|
actor: input.actor,
|
|
142
142
|
reason: proposal.rationale,
|
|
143
143
|
});
|
|
144
|
-
return outcome(
|
|
144
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
|
|
145
145
|
}
|
|
146
146
|
if (policy.auto_apply) {
|
|
147
|
-
return
|
|
147
|
+
return applyGovernorPlanProposal({
|
|
148
148
|
coordRoot,
|
|
149
149
|
record: input.record,
|
|
150
150
|
planId: request.id,
|
|
151
151
|
actor: input.actor,
|
|
152
|
-
reason: "proposal applied by frozen
|
|
152
|
+
reason: "proposal applied by frozen governor replanning policy",
|
|
153
153
|
});
|
|
154
154
|
}
|
|
155
|
-
return outcome(
|
|
155
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
|
|
156
156
|
}
|
|
157
157
|
catch (error) {
|
|
158
158
|
if (proposalWritten)
|
|
@@ -164,21 +164,39 @@ export async function runSupervisorPlanner(input) {
|
|
|
164
164
|
reason: `planning workflow parked for approval ${error.approvalId}`,
|
|
165
165
|
approval_id: error.approvalId,
|
|
166
166
|
});
|
|
167
|
-
return outcome(
|
|
167
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
|
|
168
168
|
}
|
|
169
|
+
// ADR 0046: a planner workflow that never touched the plan (its binary was
|
|
170
|
+
// absent, or the vendor refused) writes a proof carrying run.class. Stamp it
|
|
171
|
+
// on the failure so the projection can stop an environment failure and bound
|
|
172
|
+
// consecutive upstream ones, instead of replanning an unchanged environment
|
|
173
|
+
// to budget exhaustion — the failure mode that burned the measured 19.
|
|
174
|
+
const failureClass = plannerFailureClass(coordRoot, request.workflow_run_id);
|
|
169
175
|
appendPlanEvent(coordRoot, input.record.intent.id, request.id, {
|
|
170
176
|
event: "plan.failed",
|
|
171
177
|
actor: input.actor,
|
|
172
178
|
reason: bounded(error.message, "plan failure", MAX_REASON),
|
|
179
|
+
...(failureClass ? { class: failureClass } : {}),
|
|
173
180
|
});
|
|
174
181
|
throw error;
|
|
175
182
|
}
|
|
176
183
|
}
|
|
184
|
+
/** The failure class (ADR 0046) of a planner workflow run, read from its proof.
|
|
185
|
+
* Undefined when no proof was written, the proof is unreadable, or the run was
|
|
186
|
+
* informative about the plan — all of which default to a charged replan. */
|
|
187
|
+
function plannerFailureClass(coordRoot, workflowRunId) {
|
|
188
|
+
try {
|
|
189
|
+
return readWorkflowProof(coordRoot, workflowRunId).run.class;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
177
195
|
async function recoverReviewedPlan(input) {
|
|
178
196
|
const review = input.policy.review;
|
|
179
197
|
if (!review)
|
|
180
198
|
return undefined;
|
|
181
|
-
const existing =
|
|
199
|
+
const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
|
|
182
200
|
const receipt = existing ??
|
|
183
201
|
reconstructReviewReceiptFromProof({
|
|
184
202
|
coordRoot: input.coordRoot,
|
|
@@ -191,7 +209,7 @@ async function recoverReviewedPlan(input) {
|
|
|
191
209
|
if (!receipt)
|
|
192
210
|
return undefined;
|
|
193
211
|
if (!existing) {
|
|
194
|
-
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "
|
|
212
|
+
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "governor plan review receipt");
|
|
195
213
|
}
|
|
196
214
|
return finalizeReviewedProposal({
|
|
197
215
|
coordRoot: input.coordRoot,
|
|
@@ -203,17 +221,17 @@ async function recoverReviewedPlan(input) {
|
|
|
203
221
|
});
|
|
204
222
|
}
|
|
205
223
|
async function ensurePlanReview(input) {
|
|
206
|
-
const existing =
|
|
224
|
+
const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
|
|
207
225
|
if (existing)
|
|
208
226
|
return existing;
|
|
209
227
|
const reconstructed = reconstructReviewReceiptFromProof(input);
|
|
210
228
|
if (reconstructed) {
|
|
211
|
-
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), reconstructed, "
|
|
229
|
+
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), reconstructed, "governor plan review receipt");
|
|
212
230
|
return reconstructed;
|
|
213
231
|
}
|
|
214
232
|
const reviewScript = reviewScriptPath(input.coordRoot, input.record.intent.id, input.request.id);
|
|
215
|
-
writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "
|
|
216
|
-
writeExclusive(reviewScript, plannerReviewScript(input.record, input.request.id, input.proposal, input.trigger), "
|
|
233
|
+
writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "governor plan review input");
|
|
234
|
+
writeExclusive(reviewScript, plannerReviewScript(input.record, input.request.id, input.proposal, input.trigger), "governor plan review script");
|
|
217
235
|
const review = input.policy.review;
|
|
218
236
|
const runId = reviewWorkflowRunId(input.request.id);
|
|
219
237
|
const runExists = existsSync(join(input.coordRoot, ".harnery", "workflows", runId, "run.json"));
|
|
@@ -236,7 +254,7 @@ async function ensurePlanReview(input) {
|
|
|
236
254
|
trigger: input.trigger,
|
|
237
255
|
policy: input.policy,
|
|
238
256
|
});
|
|
239
|
-
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "
|
|
257
|
+
writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "governor plan review receipt");
|
|
240
258
|
return receipt;
|
|
241
259
|
}
|
|
242
260
|
function finalizeReviewedProposal(input) {
|
|
@@ -247,7 +265,7 @@ function finalizeReviewedProposal(input) {
|
|
|
247
265
|
actor: input.actor,
|
|
248
266
|
reason: reviewStatusReason(input.receipt),
|
|
249
267
|
});
|
|
250
|
-
return outcome(
|
|
268
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
|
|
251
269
|
}
|
|
252
270
|
// The review authority must become durable before the proposal can become
|
|
253
271
|
// visible. If the process stops after this event, the plan remains
|
|
@@ -258,22 +276,22 @@ function finalizeReviewedProposal(input) {
|
|
|
258
276
|
actor: input.actor,
|
|
259
277
|
reason: `plan review passed after ${input.receipt.rounds.length} round(s)`,
|
|
260
278
|
});
|
|
261
|
-
writeExclusiveJson(planProposalPath(input.coordRoot, input.record.intent.id, input.request.id), input.receipt.final_candidate, "
|
|
279
|
+
writeExclusiveJson(planProposalPath(input.coordRoot, input.record.intent.id, input.request.id), input.receipt.final_candidate, "governor plan proposal");
|
|
262
280
|
appendPlanEventIfMissing(input.coordRoot, input.record.intent.id, input.request.id, "plan.proposed", {
|
|
263
281
|
event: "plan.proposed",
|
|
264
282
|
actor: input.actor,
|
|
265
283
|
reason: input.receipt.final_candidate.rationale,
|
|
266
284
|
});
|
|
267
285
|
if (input.policy.auto_apply) {
|
|
268
|
-
return
|
|
286
|
+
return applyGovernorPlanProposal({
|
|
269
287
|
coordRoot: input.coordRoot,
|
|
270
288
|
record: input.record,
|
|
271
289
|
planId: input.request.id,
|
|
272
290
|
actor: input.actor,
|
|
273
|
-
reason: "proposal applied by frozen
|
|
291
|
+
reason: "proposal applied by frozen governor replanning policy",
|
|
274
292
|
});
|
|
275
293
|
}
|
|
276
|
-
return outcome(
|
|
294
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
|
|
277
295
|
}
|
|
278
296
|
function reviewStatusReason(receipt) {
|
|
279
297
|
if (receipt.status === "revision_exhausted") {
|
|
@@ -283,35 +301,35 @@ function reviewStatusReason(receipt) {
|
|
|
283
301
|
return "plan review failed";
|
|
284
302
|
return "plan review requires attention";
|
|
285
303
|
}
|
|
286
|
-
export function
|
|
304
|
+
export function applyGovernorPlanProposal(input) {
|
|
287
305
|
const coordRoot = resolve(input.coordRoot);
|
|
288
306
|
const policy = input.record.intent.replanning;
|
|
289
307
|
if (!policy)
|
|
290
|
-
throw new Error(`
|
|
291
|
-
const plan =
|
|
308
|
+
throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
|
|
309
|
+
const plan = readGovernorPlan(coordRoot, input.record.intent.id, input.planId);
|
|
292
310
|
if (plan.status === "applied" || plan.status === "completed")
|
|
293
311
|
return outcome(plan);
|
|
294
312
|
if (plan.status !== "proposed" ||
|
|
295
313
|
!plan.proposal ||
|
|
296
314
|
!["apply", "complete"].includes(plan.proposal.decision)) {
|
|
297
|
-
throw new Error(`
|
|
315
|
+
throw new Error(`governor plan ${input.planId} cannot be applied from ${plan.status}`);
|
|
298
316
|
}
|
|
299
317
|
if (policy.review) {
|
|
300
|
-
const receipt =
|
|
318
|
+
const receipt = readGovernorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
|
|
301
319
|
if (receipt?.status !== "passed") {
|
|
302
|
-
throw new Error(`
|
|
320
|
+
throw new Error(`governor plan ${input.planId} has no passed review receipt`);
|
|
303
321
|
}
|
|
304
322
|
if (candidateDigest(plan.proposal) !== receipt.candidate_sha256) {
|
|
305
|
-
throw new Error(`
|
|
323
|
+
throw new Error(`governor plan ${input.planId} proposal does not match its passed review`);
|
|
306
324
|
}
|
|
307
325
|
if (!plan.events.some((event) => event.event === "plan.reviewed")) {
|
|
308
|
-
throw new Error(`
|
|
326
|
+
throw new Error(`governor plan ${input.planId} has no reviewed authority event`);
|
|
309
327
|
}
|
|
310
328
|
}
|
|
311
329
|
if (plan.request.prior_root_work_id !== input.record.projection.root_work_id) {
|
|
312
|
-
throw new Error(`
|
|
330
|
+
throw new Error(`governor plan ${input.planId} targets stale root ${plan.request.prior_root_work_id}`);
|
|
313
331
|
}
|
|
314
|
-
const history =
|
|
332
|
+
const history = readGovernorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
|
|
315
333
|
const proposal = normalizeProposal(input.planId, plan.proposal, input.record, history.materialized_work_ids.filter((workId) => !workId.startsWith(`${input.planId}-`)).length, plan.request.trigger ?? "recovery");
|
|
316
334
|
if (proposal.decision === "complete") {
|
|
317
335
|
appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
|
|
@@ -319,7 +337,7 @@ export function applySupervisorPlanProposal(input) {
|
|
|
319
337
|
actor: input.actor,
|
|
320
338
|
reason: input.reason ?? proposal.rationale,
|
|
321
339
|
});
|
|
322
|
-
return outcome(
|
|
340
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
|
|
323
341
|
}
|
|
324
342
|
const ids = new Map();
|
|
325
343
|
const created = [];
|
|
@@ -341,7 +359,7 @@ export function applySupervisorPlanProposal(input) {
|
|
|
341
359
|
max_attempts: template.max_attempts,
|
|
342
360
|
source: {
|
|
343
361
|
kind: "workflow",
|
|
344
|
-
ref: `
|
|
362
|
+
ref: `governor:${input.record.intent.id}/plan:${input.planId}`,
|
|
345
363
|
},
|
|
346
364
|
};
|
|
347
365
|
if (existsSync(join(coordRoot, ".harnery", "work", workId, "intent.json"))) {
|
|
@@ -382,74 +400,105 @@ export function applySupervisorPlanProposal(input) {
|
|
|
382
400
|
appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
|
|
383
401
|
event: "plan.applied",
|
|
384
402
|
actor: input.actor,
|
|
385
|
-
reason: input.reason ?? "
|
|
403
|
+
reason: input.reason ?? "governor plan explicitly approved",
|
|
386
404
|
root_work_id: rootWorkId,
|
|
387
405
|
work_ids: created,
|
|
388
406
|
});
|
|
389
|
-
return outcome(
|
|
407
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
|
|
390
408
|
}
|
|
391
|
-
export function
|
|
392
|
-
const plan =
|
|
409
|
+
export function rejectGovernorPlanProposal(input) {
|
|
410
|
+
const plan = readGovernorPlan(input.coordRoot, input.goalId, input.planId);
|
|
393
411
|
if (plan.status === "rejected")
|
|
394
412
|
return outcome(plan);
|
|
395
413
|
if (plan.status !== "proposed") {
|
|
396
|
-
throw new Error(`
|
|
414
|
+
throw new Error(`governor plan ${input.planId} cannot be rejected from ${plan.status}`);
|
|
397
415
|
}
|
|
398
416
|
appendPlanEvent(input.coordRoot, input.goalId, input.planId, {
|
|
399
417
|
event: "plan.rejected",
|
|
400
418
|
actor: input.actor,
|
|
401
419
|
reason: input.reason,
|
|
402
420
|
});
|
|
403
|
-
return outcome(
|
|
421
|
+
return outcome(readGovernorPlan(input.coordRoot, input.goalId, input.planId));
|
|
404
422
|
}
|
|
405
|
-
|
|
423
|
+
/** ADR 0050: reopen a mission whose completion was already accepted, so an operator
|
|
424
|
+
* finding on work beneath it can be dispatched through the normal governor rather
|
|
425
|
+
* than only by running the work item by hand.
|
|
426
|
+
*
|
|
427
|
+
* The accepted `plan.completed` event is never rewritten. This appends a superseding
|
|
428
|
+
* `plan.reopened` alongside it, which is why the prior completion survives as history
|
|
429
|
+
* and why a reader that cannot understand the new event still sees a completed plan
|
|
430
|
+
* rather than a silently altered one. Refuses when the mission is not complete, so a
|
|
431
|
+
* caller cannot use it to skip the ordinary completion path. */
|
|
432
|
+
export function reopenGovernorMissionPlan(input) {
|
|
433
|
+
const goalId = input.record.intent.id;
|
|
434
|
+
if (!input.record.intent.mission) {
|
|
435
|
+
throw new Error(`governor ${goalId} is not a mission`);
|
|
436
|
+
}
|
|
437
|
+
const history = readGovernorPlans(input.coordRoot, goalId, input.record.intent.root_work_id);
|
|
438
|
+
const latest = history.latest;
|
|
439
|
+
if (!latest) {
|
|
440
|
+
throw new Error(`governor ${goalId} has no plan to reopen`);
|
|
441
|
+
}
|
|
442
|
+
if (latest.status === "reopened")
|
|
443
|
+
return outcome(latest);
|
|
444
|
+
if (!history.completed || latest.status !== "completed") {
|
|
445
|
+
throw new Error(`governor ${goalId} mission is not complete, so there is nothing to reopen`);
|
|
446
|
+
}
|
|
447
|
+
appendPlanEvent(input.coordRoot, goalId, latest.request.id, {
|
|
448
|
+
event: "plan.reopened",
|
|
449
|
+
actor: input.actor,
|
|
450
|
+
reason: bounded(input.reason, "mission reopen reason", MAX_REASON),
|
|
451
|
+
});
|
|
452
|
+
return outcome(readGovernorPlan(input.coordRoot, goalId, latest.request.id));
|
|
453
|
+
}
|
|
454
|
+
export function retryGovernorPlanProposal(input) {
|
|
406
455
|
const policy = input.record.intent.replanning;
|
|
407
456
|
if (!policy) {
|
|
408
|
-
throw new Error(`
|
|
457
|
+
throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
|
|
409
458
|
}
|
|
410
459
|
const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
|
|
411
|
-
const history =
|
|
460
|
+
const history = readGovernorPlans(input.coordRoot, input.record.intent.id, input.record.intent.root_work_id);
|
|
412
461
|
const latest = history.latest;
|
|
413
462
|
if (!latest || latest.request.id !== input.planId) {
|
|
414
|
-
throw new Error(`
|
|
463
|
+
throw new Error(`governor plan ${input.planId} is not the latest plan`);
|
|
415
464
|
}
|
|
416
|
-
const triggerFingerprint =
|
|
465
|
+
const triggerFingerprint = governorGraphFingerprint({
|
|
417
466
|
rootWorkId: history.active_root_work_id,
|
|
418
467
|
generation: history.generation,
|
|
419
468
|
work: input.record.work,
|
|
420
469
|
});
|
|
421
470
|
if (latest.request.trigger_fingerprint !== triggerFingerprint ||
|
|
422
471
|
latest.request.prior_root_work_id !== history.active_root_work_id) {
|
|
423
|
-
throw new Error(`
|
|
472
|
+
throw new Error(`governor plan ${input.planId} no longer matches the active graph`);
|
|
424
473
|
}
|
|
425
474
|
if (history.completed) {
|
|
426
|
-
throw new Error(`
|
|
475
|
+
throw new Error(`governor ${input.record.intent.id} mission is already complete`);
|
|
427
476
|
}
|
|
428
477
|
if (latest.status === "retry_requested")
|
|
429
478
|
return outcome(latest);
|
|
430
479
|
if (latest.status !== "attention") {
|
|
431
|
-
throw new Error(`
|
|
480
|
+
throw new Error(`governor plan ${input.planId} cannot be retried from ${latest.status}`);
|
|
432
481
|
}
|
|
433
482
|
if (history.plans.length >= policy.max_replans) {
|
|
434
|
-
throw new Error(`
|
|
483
|
+
throw new Error(`governor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`);
|
|
435
484
|
}
|
|
436
485
|
appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
|
|
437
486
|
event: "plan.retry_requested",
|
|
438
487
|
actor: input.actor,
|
|
439
488
|
reason,
|
|
440
489
|
});
|
|
441
|
-
return outcome(
|
|
490
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.planId));
|
|
442
491
|
}
|
|
443
492
|
function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trigger) {
|
|
444
493
|
const policy = record.intent.replanning;
|
|
445
494
|
if (!policy)
|
|
446
|
-
throw new Error(`
|
|
495
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
447
496
|
if (sequence > policy.max_replans) {
|
|
448
|
-
throw new Error(`
|
|
497
|
+
throw new Error(`governor ${record.intent.id} exhausted its ${policy.max_replans} replans`);
|
|
449
498
|
}
|
|
450
499
|
const planId = `plan-${String(sequence).padStart(4, "0")}-${randomBytes(4).toString("hex")}`;
|
|
451
500
|
const request = {
|
|
452
|
-
schema_version:
|
|
501
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
453
502
|
id: planId,
|
|
454
503
|
goal_id: record.intent.id,
|
|
455
504
|
sequence,
|
|
@@ -463,14 +512,14 @@ function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trig
|
|
|
463
512
|
const dir = planDir(coordRoot, record.intent.id, planId);
|
|
464
513
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
465
514
|
chmodSync(dir, 0o700);
|
|
466
|
-
writeExclusiveJson(join(dir, "request.json"), request, "
|
|
467
|
-
writeExclusive(join(dir, "planner.mjs"), script, "
|
|
515
|
+
writeExclusiveJson(join(dir, "request.json"), request, "governor plan request");
|
|
516
|
+
writeExclusive(join(dir, "planner.mjs"), script, "governor planner script");
|
|
468
517
|
return request;
|
|
469
518
|
}
|
|
470
519
|
function plannerScript(coordRoot, record, planId, trigger) {
|
|
471
520
|
const policy = record.intent.replanning;
|
|
472
521
|
if (!policy)
|
|
473
|
-
throw new Error(`
|
|
522
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
474
523
|
const prompt = [
|
|
475
524
|
"You are producing one bounded replacement plan or milestone decision for a durable supervised goal.",
|
|
476
525
|
record.intent.mission
|
|
@@ -545,7 +594,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
545
594
|
const policy = record.intent.replanning;
|
|
546
595
|
const review = policy?.review;
|
|
547
596
|
if (!policy || !review)
|
|
548
|
-
throw new Error(`
|
|
597
|
+
throw new Error(`governor ${record.intent.id} does not review plans`);
|
|
549
598
|
const proposalSchema = planProposalSchema(record, trigger);
|
|
550
599
|
const reviewerSchema = {
|
|
551
600
|
type: "object",
|
|
@@ -606,7 +655,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
606
655
|
" stage('Review round ' + round);",
|
|
607
656
|
" const reviewersOut = await Promise.all(reviewers.map(async (specialist) => {",
|
|
608
657
|
" const prompt = [",
|
|
609
|
-
" 'Review this bounded
|
|
658
|
+
" 'Review this bounded governor plan candidate independently.',",
|
|
610
659
|
" 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
|
|
611
660
|
" 'Return revise for blocking defects. Return attention when human judgment is required.',",
|
|
612
661
|
" 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
|
|
@@ -626,7 +675,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
626
675
|
" if (round > maxRevisionRounds) break;",
|
|
627
676
|
" stage('Revise round ' + round);",
|
|
628
677
|
" const revisionPrompt = [",
|
|
629
|
-
" 'Revise this
|
|
678
|
+
" 'Revise this governor plan candidate. Return a complete replacement candidate, not a patch.',",
|
|
630
679
|
" 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
|
|
631
680
|
" 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
|
|
632
681
|
" 'Goal context: ' + JSON.stringify(goalContext),",
|
|
@@ -702,7 +751,7 @@ function normalizeReviewReceipt(input) {
|
|
|
702
751
|
}
|
|
703
752
|
status ??= "attention";
|
|
704
753
|
return {
|
|
705
|
-
schema_version:
|
|
754
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
706
755
|
plan_id: input.request.id,
|
|
707
756
|
status,
|
|
708
757
|
candidate_sha256: candidateDigest(candidate),
|
|
@@ -789,12 +838,12 @@ function reconstructReviewReceiptFromProof(input) {
|
|
|
789
838
|
}
|
|
790
839
|
function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedSpecialists) {
|
|
791
840
|
const inputPath = reviewInputPath(coordRoot, goalId, planId);
|
|
792
|
-
const reviewInput = readBoundedJson(inputPath, "
|
|
793
|
-
const
|
|
841
|
+
const reviewInput = readBoundedJson(inputPath, "governor plan review input");
|
|
842
|
+
const transcript = readVerifiedWorkflowTranscript(coordRoot, reviewWorkflowRunId(planId), proof);
|
|
794
843
|
const starts = new Map();
|
|
795
844
|
const byRound = new Map();
|
|
796
845
|
let currentCandidate = reviewInput.candidate;
|
|
797
|
-
for (const line of
|
|
846
|
+
for (const line of transcript.split("\n")) {
|
|
798
847
|
if (!line.trim())
|
|
799
848
|
continue;
|
|
800
849
|
const event = JSON.parse(line);
|
|
@@ -805,7 +854,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
805
854
|
}
|
|
806
855
|
if (event.event !== "agent.end" || event.result_kind !== "json")
|
|
807
856
|
continue;
|
|
808
|
-
const round =
|
|
857
|
+
const round = workflowTranscriptRound(event.stage);
|
|
809
858
|
if (!round)
|
|
810
859
|
continue;
|
|
811
860
|
let record = byRound.get(round.round);
|
|
@@ -816,7 +865,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
816
865
|
if (round.kind === "review") {
|
|
817
866
|
const specialist = typeof event.id === "string" ? starts.get(event.id)?.specialist : undefined;
|
|
818
867
|
if (!event.result || typeof event.result !== "object" || Array.isArray(event.result)) {
|
|
819
|
-
throw new Error("
|
|
868
|
+
throw new Error("governor plan review transcript contains an invalid reviewer result");
|
|
820
869
|
}
|
|
821
870
|
record.reviewers.push({
|
|
822
871
|
specialist,
|
|
@@ -848,18 +897,18 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
848
897
|
result: { rounds },
|
|
849
898
|
};
|
|
850
899
|
}
|
|
851
|
-
function
|
|
852
|
-
const
|
|
853
|
-
const
|
|
854
|
-
const bytes = Buffer.byteLength(
|
|
855
|
-
if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.
|
|
856
|
-
throw new Error(`
|
|
857
|
-
}
|
|
858
|
-
const sha256 = createHash("sha256").update(
|
|
859
|
-
if (sha256 !== proof.integrity.
|
|
860
|
-
throw new Error(`
|
|
861
|
-
}
|
|
862
|
-
return
|
|
900
|
+
function readVerifiedWorkflowTranscript(coordRoot, runId, proof) {
|
|
901
|
+
const transcriptPath = join(coordRoot, ".harnery", "workflows", runId, proof.integrity.transcript.path);
|
|
902
|
+
const transcript = readFileSync(transcriptPath, "utf8");
|
|
903
|
+
const bytes = Buffer.byteLength(transcript);
|
|
904
|
+
if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.transcript.bytes) {
|
|
905
|
+
throw new Error(`governor plan review transcript does not match proof integrity`);
|
|
906
|
+
}
|
|
907
|
+
const sha256 = createHash("sha256").update(transcript).digest("hex");
|
|
908
|
+
if (sha256 !== proof.integrity.transcript.sha256) {
|
|
909
|
+
throw new Error(`governor plan review transcript does not match proof integrity`);
|
|
910
|
+
}
|
|
911
|
+
return transcript;
|
|
863
912
|
}
|
|
864
913
|
function orderRecoveredReviewers(raw, expectedSpecialists) {
|
|
865
914
|
if (!Array.isArray(raw) || raw.length !== expectedSpecialists.length)
|
|
@@ -903,16 +952,16 @@ function aggregateRecoveredReviewers(reviewers) {
|
|
|
903
952
|
}
|
|
904
953
|
function assertResultDigest(raw, expected, runId) {
|
|
905
954
|
if (!expected) {
|
|
906
|
-
throw new Error(`
|
|
955
|
+
throw new Error(`governor plan review proof ${runId} is missing its result digest`);
|
|
907
956
|
}
|
|
908
957
|
const actual = digestResult(raw, "json");
|
|
909
958
|
if (actual.kind !== expected.kind ||
|
|
910
959
|
actual.sha256 !== expected.sha256 ||
|
|
911
960
|
actual.bytes !== expected.bytes) {
|
|
912
|
-
throw new Error(`
|
|
961
|
+
throw new Error(`governor plan review result does not match proof digest`);
|
|
913
962
|
}
|
|
914
963
|
}
|
|
915
|
-
function
|
|
964
|
+
function workflowTranscriptRound(stage) {
|
|
916
965
|
if (typeof stage !== "string")
|
|
917
966
|
return undefined;
|
|
918
967
|
const review = /^Review round ([1-9][0-9]*)$/.exec(stage);
|
|
@@ -946,7 +995,7 @@ function hasReviewRecoveryEvidence(coordRoot, goalId, planId) {
|
|
|
946
995
|
function planProposalSchema(record, trigger) {
|
|
947
996
|
const policy = record.intent.replanning;
|
|
948
997
|
if (!policy)
|
|
949
|
-
throw new Error(`
|
|
998
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
950
999
|
const rationale = { type: "string", minLength: 1, maxLength: MAX_REASON };
|
|
951
1000
|
const workItem = {
|
|
952
1001
|
type: "object",
|
|
@@ -1037,7 +1086,7 @@ function planProposalSchema(record, trigger) {
|
|
|
1037
1086
|
function normalizeProposal(planId, raw, record, previouslyApplied, trigger, preservedProposedAt) {
|
|
1038
1087
|
const policy = record.intent.replanning;
|
|
1039
1088
|
if (!policy)
|
|
1040
|
-
throw new Error(`
|
|
1089
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
1041
1090
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
1042
1091
|
throw new Error("planner result must be an object");
|
|
1043
1092
|
}
|
|
@@ -1056,7 +1105,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
|
|
|
1056
1105
|
throw new Error("mission completion may be proposed only at a milestone boundary");
|
|
1057
1106
|
}
|
|
1058
1107
|
return {
|
|
1059
|
-
schema_version:
|
|
1108
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1060
1109
|
plan_id: planId,
|
|
1061
1110
|
decision,
|
|
1062
1111
|
rationale,
|
|
@@ -1143,7 +1192,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
|
|
|
1143
1192
|
if (unused.length)
|
|
1144
1193
|
throw new Error(`plan contains work not reachable from root: ${unused.map((item) => item.key).join(", ")}`);
|
|
1145
1194
|
return {
|
|
1146
|
-
schema_version:
|
|
1195
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1147
1196
|
plan_id: planId,
|
|
1148
1197
|
decision,
|
|
1149
1198
|
rationale,
|
|
@@ -1195,9 +1244,9 @@ function planTrigger(record) {
|
|
|
1195
1244
|
function appendPlanEvent(coordRootRaw, goalId, planId, input) {
|
|
1196
1245
|
const coordRoot = resolve(coordRootRaw);
|
|
1197
1246
|
const path = join(planDir(coordRoot, goalId, planId), "events.jsonl");
|
|
1198
|
-
const current =
|
|
1247
|
+
const current = readGovernorPlan(coordRoot, goalId, planId).events;
|
|
1199
1248
|
const event = {
|
|
1200
|
-
schema_version:
|
|
1249
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1201
1250
|
plan_id: planId,
|
|
1202
1251
|
seq: current.length + 1,
|
|
1203
1252
|
ts: new Date().toISOString(),
|
|
@@ -1208,13 +1257,13 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
|
|
|
1208
1257
|
const line = `${JSON.stringify(event)}\n`;
|
|
1209
1258
|
const existing = existsSync(path) ? statSync(path).size : 0;
|
|
1210
1259
|
if (existing + Buffer.byteLength(line) > MAX_EVENTS_BYTES) {
|
|
1211
|
-
throw new Error("
|
|
1260
|
+
throw new Error("governor plan event log would exceed its byte limit");
|
|
1212
1261
|
}
|
|
1213
1262
|
appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
|
|
1214
1263
|
chmodSync(path, 0o600);
|
|
1215
1264
|
}
|
|
1216
1265
|
function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
|
|
1217
|
-
const plan =
|
|
1266
|
+
const plan = readGovernorPlan(coordRoot, goalId, planId);
|
|
1218
1267
|
if (plan.events.some((event) => event.event === eventType))
|
|
1219
1268
|
return;
|
|
1220
1269
|
appendPlanEvent(coordRoot, goalId, planId, input);
|
|
@@ -1262,7 +1311,7 @@ function writeExclusive(path, body, label) {
|
|
|
1262
1311
|
}
|
|
1263
1312
|
}
|
|
1264
1313
|
function planDir(coordRoot, goalId, planId) {
|
|
1265
|
-
return join(coordRoot, ".harnery", "
|
|
1314
|
+
return join(coordRoot, ".harnery", "governors", goalId, "plans", planId);
|
|
1266
1315
|
}
|
|
1267
1316
|
function planScriptPath(coordRoot, goalId, planId) {
|
|
1268
1317
|
return join(planDir(coordRoot, goalId, planId), "planner.mjs");
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } from "./plan-read.js";
|
|
2
|
+
export { GOVERNOR_PLAN_SCHEMA_VERSION, type GovernorPlanEvent, type GovernorPlanEventType, type GovernorPlanHistory, type GovernorPlanMilestone, type GovernorPlanOutcome, type GovernorPlanProposal, type GovernorPlanRecord, type GovernorPlanRequest, type GovernorPlanReviewFinding, type GovernorPlanReviewReceipt, type GovernorPlanReviewReviewer, type GovernorPlanReviewRound, type GovernorPlanReviewStatus, type GovernorPlanReviewSummary, type GovernorPlanReviewVerdict, type GovernorPlanStatus, type GovernorPlanTemplate, type GovernorPlanWorkSpec, type GovernorReplanningPolicy, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
|
|
3
|
+
export type { GovernorServiceConfig, GovernorServiceGoalRuntime, GovernorServiceGoalState, GovernorServiceProcessState, GovernorServiceRuntime, GovernorServiceStatus, GovernorServiceStatusRecord, } from "./service.js";
|
|
4
|
+
export { governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, } from "./service-read.js";
|
|
5
|
+
export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, type GovernorAutomationPolicy, type GovernorIntent, type GovernorLimits, type GovernorMission, type GovernorNextAction, type GovernorProjection, type GovernorRecord, type GovernorState, listGovernors, readGovernor, } from "./state.js";
|
|
6
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/read.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } from "./plan-read.js";
|
|
2
|
+
export { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
|
|
3
|
+
export { governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, } from "./service-read.js";
|
|
4
|
+
export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, readGovernor, } from "./state.js";
|