harnery 0.30.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.map +1 -1
- package/dist/commands/work.js +38 -22
- 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 +23 -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 +66 -52
- package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
- 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 +125 -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 +228 -108
- 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/state.d.ts +12 -4
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +50 -17
- 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 +138 -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 +1 -1
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/proof.d.ts +11 -5
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +45 -36
- 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 +9 -6
- 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 +9 -6
- 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 +9 -6
- package/dist/core/workflow/spawn-failure.d.ts +1 -1
- package/dist/core/workflow/spawn-failure.js +1 -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 +98 -51
- 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/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 +50 -35
- 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 +23 -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 +112 -97
- package/src/core/{supervisor → governor}/plan-types.ts +59 -56
- package/src/core/{supervisor → governor}/planning.ts +223 -192
- 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 +325 -167
- 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/state.ts +65 -23
- 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 +155 -90
- package/src/core/workflow/evidence-preflight.ts +165 -0
- package/src/core/workflow/index.ts +3 -3
- package/src/core/workflow/proof.ts +60 -50
- 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 +13 -10
- package/src/core/workflow/spawn-codex.ts +13 -10
- package/src/core/workflow/spawn-cursor.ts +13 -10
- package/src/core/workflow/spawn-failure.ts +1 -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 +108 -51
- 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/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.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,7 +164,7 @@ 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
169
|
// ADR 0046: a planner workflow that never touched the plan (its binary was
|
|
170
170
|
// absent, or the vendor refused) writes a proof carrying run.class. Stamp it
|
|
@@ -196,7 +196,7 @@ async function recoverReviewedPlan(input) {
|
|
|
196
196
|
const review = input.policy.review;
|
|
197
197
|
if (!review)
|
|
198
198
|
return undefined;
|
|
199
|
-
const existing =
|
|
199
|
+
const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
|
|
200
200
|
const receipt = existing ??
|
|
201
201
|
reconstructReviewReceiptFromProof({
|
|
202
202
|
coordRoot: input.coordRoot,
|
|
@@ -209,7 +209,7 @@ async function recoverReviewedPlan(input) {
|
|
|
209
209
|
if (!receipt)
|
|
210
210
|
return undefined;
|
|
211
211
|
if (!existing) {
|
|
212
|
-
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");
|
|
213
213
|
}
|
|
214
214
|
return finalizeReviewedProposal({
|
|
215
215
|
coordRoot: input.coordRoot,
|
|
@@ -221,17 +221,17 @@ async function recoverReviewedPlan(input) {
|
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
223
|
async function ensurePlanReview(input) {
|
|
224
|
-
const existing =
|
|
224
|
+
const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
|
|
225
225
|
if (existing)
|
|
226
226
|
return existing;
|
|
227
227
|
const reconstructed = reconstructReviewReceiptFromProof(input);
|
|
228
228
|
if (reconstructed) {
|
|
229
|
-
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");
|
|
230
230
|
return reconstructed;
|
|
231
231
|
}
|
|
232
232
|
const reviewScript = reviewScriptPath(input.coordRoot, input.record.intent.id, input.request.id);
|
|
233
|
-
writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "
|
|
234
|
-
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");
|
|
235
235
|
const review = input.policy.review;
|
|
236
236
|
const runId = reviewWorkflowRunId(input.request.id);
|
|
237
237
|
const runExists = existsSync(join(input.coordRoot, ".harnery", "workflows", runId, "run.json"));
|
|
@@ -254,7 +254,7 @@ async function ensurePlanReview(input) {
|
|
|
254
254
|
trigger: input.trigger,
|
|
255
255
|
policy: input.policy,
|
|
256
256
|
});
|
|
257
|
-
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");
|
|
258
258
|
return receipt;
|
|
259
259
|
}
|
|
260
260
|
function finalizeReviewedProposal(input) {
|
|
@@ -265,7 +265,7 @@ function finalizeReviewedProposal(input) {
|
|
|
265
265
|
actor: input.actor,
|
|
266
266
|
reason: reviewStatusReason(input.receipt),
|
|
267
267
|
});
|
|
268
|
-
return outcome(
|
|
268
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
|
|
269
269
|
}
|
|
270
270
|
// The review authority must become durable before the proposal can become
|
|
271
271
|
// visible. If the process stops after this event, the plan remains
|
|
@@ -276,22 +276,22 @@ function finalizeReviewedProposal(input) {
|
|
|
276
276
|
actor: input.actor,
|
|
277
277
|
reason: `plan review passed after ${input.receipt.rounds.length} round(s)`,
|
|
278
278
|
});
|
|
279
|
-
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");
|
|
280
280
|
appendPlanEventIfMissing(input.coordRoot, input.record.intent.id, input.request.id, "plan.proposed", {
|
|
281
281
|
event: "plan.proposed",
|
|
282
282
|
actor: input.actor,
|
|
283
283
|
reason: input.receipt.final_candidate.rationale,
|
|
284
284
|
});
|
|
285
285
|
if (input.policy.auto_apply) {
|
|
286
|
-
return
|
|
286
|
+
return applyGovernorPlanProposal({
|
|
287
287
|
coordRoot: input.coordRoot,
|
|
288
288
|
record: input.record,
|
|
289
289
|
planId: input.request.id,
|
|
290
290
|
actor: input.actor,
|
|
291
|
-
reason: "proposal applied by frozen
|
|
291
|
+
reason: "proposal applied by frozen governor replanning policy",
|
|
292
292
|
});
|
|
293
293
|
}
|
|
294
|
-
return outcome(
|
|
294
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
|
|
295
295
|
}
|
|
296
296
|
function reviewStatusReason(receipt) {
|
|
297
297
|
if (receipt.status === "revision_exhausted") {
|
|
@@ -301,35 +301,35 @@ function reviewStatusReason(receipt) {
|
|
|
301
301
|
return "plan review failed";
|
|
302
302
|
return "plan review requires attention";
|
|
303
303
|
}
|
|
304
|
-
export function
|
|
304
|
+
export function applyGovernorPlanProposal(input) {
|
|
305
305
|
const coordRoot = resolve(input.coordRoot);
|
|
306
306
|
const policy = input.record.intent.replanning;
|
|
307
307
|
if (!policy)
|
|
308
|
-
throw new Error(`
|
|
309
|
-
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);
|
|
310
310
|
if (plan.status === "applied" || plan.status === "completed")
|
|
311
311
|
return outcome(plan);
|
|
312
312
|
if (plan.status !== "proposed" ||
|
|
313
313
|
!plan.proposal ||
|
|
314
314
|
!["apply", "complete"].includes(plan.proposal.decision)) {
|
|
315
|
-
throw new Error(`
|
|
315
|
+
throw new Error(`governor plan ${input.planId} cannot be applied from ${plan.status}`);
|
|
316
316
|
}
|
|
317
317
|
if (policy.review) {
|
|
318
|
-
const receipt =
|
|
318
|
+
const receipt = readGovernorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
|
|
319
319
|
if (receipt?.status !== "passed") {
|
|
320
|
-
throw new Error(`
|
|
320
|
+
throw new Error(`governor plan ${input.planId} has no passed review receipt`);
|
|
321
321
|
}
|
|
322
322
|
if (candidateDigest(plan.proposal) !== receipt.candidate_sha256) {
|
|
323
|
-
throw new Error(`
|
|
323
|
+
throw new Error(`governor plan ${input.planId} proposal does not match its passed review`);
|
|
324
324
|
}
|
|
325
325
|
if (!plan.events.some((event) => event.event === "plan.reviewed")) {
|
|
326
|
-
throw new Error(`
|
|
326
|
+
throw new Error(`governor plan ${input.planId} has no reviewed authority event`);
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
329
|
if (plan.request.prior_root_work_id !== input.record.projection.root_work_id) {
|
|
330
|
-
throw new Error(`
|
|
330
|
+
throw new Error(`governor plan ${input.planId} targets stale root ${plan.request.prior_root_work_id}`);
|
|
331
331
|
}
|
|
332
|
-
const history =
|
|
332
|
+
const history = readGovernorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
|
|
333
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");
|
|
334
334
|
if (proposal.decision === "complete") {
|
|
335
335
|
appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
|
|
@@ -337,7 +337,7 @@ export function applySupervisorPlanProposal(input) {
|
|
|
337
337
|
actor: input.actor,
|
|
338
338
|
reason: input.reason ?? proposal.rationale,
|
|
339
339
|
});
|
|
340
|
-
return outcome(
|
|
340
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
|
|
341
341
|
}
|
|
342
342
|
const ids = new Map();
|
|
343
343
|
const created = [];
|
|
@@ -359,7 +359,7 @@ export function applySupervisorPlanProposal(input) {
|
|
|
359
359
|
max_attempts: template.max_attempts,
|
|
360
360
|
source: {
|
|
361
361
|
kind: "workflow",
|
|
362
|
-
ref: `
|
|
362
|
+
ref: `governor:${input.record.intent.id}/plan:${input.planId}`,
|
|
363
363
|
},
|
|
364
364
|
};
|
|
365
365
|
if (existsSync(join(coordRoot, ".harnery", "work", workId, "intent.json"))) {
|
|
@@ -400,74 +400,105 @@ export function applySupervisorPlanProposal(input) {
|
|
|
400
400
|
appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
|
|
401
401
|
event: "plan.applied",
|
|
402
402
|
actor: input.actor,
|
|
403
|
-
reason: input.reason ?? "
|
|
403
|
+
reason: input.reason ?? "governor plan explicitly approved",
|
|
404
404
|
root_work_id: rootWorkId,
|
|
405
405
|
work_ids: created,
|
|
406
406
|
});
|
|
407
|
-
return outcome(
|
|
407
|
+
return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
|
|
408
408
|
}
|
|
409
|
-
export function
|
|
410
|
-
const plan =
|
|
409
|
+
export function rejectGovernorPlanProposal(input) {
|
|
410
|
+
const plan = readGovernorPlan(input.coordRoot, input.goalId, input.planId);
|
|
411
411
|
if (plan.status === "rejected")
|
|
412
412
|
return outcome(plan);
|
|
413
413
|
if (plan.status !== "proposed") {
|
|
414
|
-
throw new Error(`
|
|
414
|
+
throw new Error(`governor plan ${input.planId} cannot be rejected from ${plan.status}`);
|
|
415
415
|
}
|
|
416
416
|
appendPlanEvent(input.coordRoot, input.goalId, input.planId, {
|
|
417
417
|
event: "plan.rejected",
|
|
418
418
|
actor: input.actor,
|
|
419
419
|
reason: input.reason,
|
|
420
420
|
});
|
|
421
|
-
return outcome(
|
|
421
|
+
return outcome(readGovernorPlan(input.coordRoot, input.goalId, input.planId));
|
|
422
422
|
}
|
|
423
|
-
|
|
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) {
|
|
424
455
|
const policy = input.record.intent.replanning;
|
|
425
456
|
if (!policy) {
|
|
426
|
-
throw new Error(`
|
|
457
|
+
throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
|
|
427
458
|
}
|
|
428
459
|
const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
|
|
429
|
-
const history =
|
|
460
|
+
const history = readGovernorPlans(input.coordRoot, input.record.intent.id, input.record.intent.root_work_id);
|
|
430
461
|
const latest = history.latest;
|
|
431
462
|
if (!latest || latest.request.id !== input.planId) {
|
|
432
|
-
throw new Error(`
|
|
463
|
+
throw new Error(`governor plan ${input.planId} is not the latest plan`);
|
|
433
464
|
}
|
|
434
|
-
const triggerFingerprint =
|
|
465
|
+
const triggerFingerprint = governorGraphFingerprint({
|
|
435
466
|
rootWorkId: history.active_root_work_id,
|
|
436
467
|
generation: history.generation,
|
|
437
468
|
work: input.record.work,
|
|
438
469
|
});
|
|
439
470
|
if (latest.request.trigger_fingerprint !== triggerFingerprint ||
|
|
440
471
|
latest.request.prior_root_work_id !== history.active_root_work_id) {
|
|
441
|
-
throw new Error(`
|
|
472
|
+
throw new Error(`governor plan ${input.planId} no longer matches the active graph`);
|
|
442
473
|
}
|
|
443
474
|
if (history.completed) {
|
|
444
|
-
throw new Error(`
|
|
475
|
+
throw new Error(`governor ${input.record.intent.id} mission is already complete`);
|
|
445
476
|
}
|
|
446
477
|
if (latest.status === "retry_requested")
|
|
447
478
|
return outcome(latest);
|
|
448
479
|
if (latest.status !== "attention") {
|
|
449
|
-
throw new Error(`
|
|
480
|
+
throw new Error(`governor plan ${input.planId} cannot be retried from ${latest.status}`);
|
|
450
481
|
}
|
|
451
482
|
if (history.plans.length >= policy.max_replans) {
|
|
452
|
-
throw new Error(`
|
|
483
|
+
throw new Error(`governor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`);
|
|
453
484
|
}
|
|
454
485
|
appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
|
|
455
486
|
event: "plan.retry_requested",
|
|
456
487
|
actor: input.actor,
|
|
457
488
|
reason,
|
|
458
489
|
});
|
|
459
|
-
return outcome(
|
|
490
|
+
return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.planId));
|
|
460
491
|
}
|
|
461
492
|
function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trigger) {
|
|
462
493
|
const policy = record.intent.replanning;
|
|
463
494
|
if (!policy)
|
|
464
|
-
throw new Error(`
|
|
495
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
465
496
|
if (sequence > policy.max_replans) {
|
|
466
|
-
throw new Error(`
|
|
497
|
+
throw new Error(`governor ${record.intent.id} exhausted its ${policy.max_replans} replans`);
|
|
467
498
|
}
|
|
468
499
|
const planId = `plan-${String(sequence).padStart(4, "0")}-${randomBytes(4).toString("hex")}`;
|
|
469
500
|
const request = {
|
|
470
|
-
schema_version:
|
|
501
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
471
502
|
id: planId,
|
|
472
503
|
goal_id: record.intent.id,
|
|
473
504
|
sequence,
|
|
@@ -481,14 +512,14 @@ function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trig
|
|
|
481
512
|
const dir = planDir(coordRoot, record.intent.id, planId);
|
|
482
513
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
483
514
|
chmodSync(dir, 0o700);
|
|
484
|
-
writeExclusiveJson(join(dir, "request.json"), request, "
|
|
485
|
-
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");
|
|
486
517
|
return request;
|
|
487
518
|
}
|
|
488
519
|
function plannerScript(coordRoot, record, planId, trigger) {
|
|
489
520
|
const policy = record.intent.replanning;
|
|
490
521
|
if (!policy)
|
|
491
|
-
throw new Error(`
|
|
522
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
492
523
|
const prompt = [
|
|
493
524
|
"You are producing one bounded replacement plan or milestone decision for a durable supervised goal.",
|
|
494
525
|
record.intent.mission
|
|
@@ -563,7 +594,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
563
594
|
const policy = record.intent.replanning;
|
|
564
595
|
const review = policy?.review;
|
|
565
596
|
if (!policy || !review)
|
|
566
|
-
throw new Error(`
|
|
597
|
+
throw new Error(`governor ${record.intent.id} does not review plans`);
|
|
567
598
|
const proposalSchema = planProposalSchema(record, trigger);
|
|
568
599
|
const reviewerSchema = {
|
|
569
600
|
type: "object",
|
|
@@ -624,7 +655,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
624
655
|
" stage('Review round ' + round);",
|
|
625
656
|
" const reviewersOut = await Promise.all(reviewers.map(async (specialist) => {",
|
|
626
657
|
" const prompt = [",
|
|
627
|
-
" 'Review this bounded
|
|
658
|
+
" 'Review this bounded governor plan candidate independently.',",
|
|
628
659
|
" 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
|
|
629
660
|
" 'Return revise for blocking defects. Return attention when human judgment is required.',",
|
|
630
661
|
" 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
|
|
@@ -644,7 +675,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
|
|
|
644
675
|
" if (round > maxRevisionRounds) break;",
|
|
645
676
|
" stage('Revise round ' + round);",
|
|
646
677
|
" const revisionPrompt = [",
|
|
647
|
-
" 'Revise this
|
|
678
|
+
" 'Revise this governor plan candidate. Return a complete replacement candidate, not a patch.',",
|
|
648
679
|
" 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
|
|
649
680
|
" 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
|
|
650
681
|
" 'Goal context: ' + JSON.stringify(goalContext),",
|
|
@@ -720,7 +751,7 @@ function normalizeReviewReceipt(input) {
|
|
|
720
751
|
}
|
|
721
752
|
status ??= "attention";
|
|
722
753
|
return {
|
|
723
|
-
schema_version:
|
|
754
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
724
755
|
plan_id: input.request.id,
|
|
725
756
|
status,
|
|
726
757
|
candidate_sha256: candidateDigest(candidate),
|
|
@@ -807,12 +838,12 @@ function reconstructReviewReceiptFromProof(input) {
|
|
|
807
838
|
}
|
|
808
839
|
function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedSpecialists) {
|
|
809
840
|
const inputPath = reviewInputPath(coordRoot, goalId, planId);
|
|
810
|
-
const reviewInput = readBoundedJson(inputPath, "
|
|
811
|
-
const
|
|
841
|
+
const reviewInput = readBoundedJson(inputPath, "governor plan review input");
|
|
842
|
+
const transcript = readVerifiedWorkflowTranscript(coordRoot, reviewWorkflowRunId(planId), proof);
|
|
812
843
|
const starts = new Map();
|
|
813
844
|
const byRound = new Map();
|
|
814
845
|
let currentCandidate = reviewInput.candidate;
|
|
815
|
-
for (const line of
|
|
846
|
+
for (const line of transcript.split("\n")) {
|
|
816
847
|
if (!line.trim())
|
|
817
848
|
continue;
|
|
818
849
|
const event = JSON.parse(line);
|
|
@@ -823,7 +854,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
823
854
|
}
|
|
824
855
|
if (event.event !== "agent.end" || event.result_kind !== "json")
|
|
825
856
|
continue;
|
|
826
|
-
const round =
|
|
857
|
+
const round = workflowTranscriptRound(event.stage);
|
|
827
858
|
if (!round)
|
|
828
859
|
continue;
|
|
829
860
|
let record = byRound.get(round.round);
|
|
@@ -834,7 +865,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
834
865
|
if (round.kind === "review") {
|
|
835
866
|
const specialist = typeof event.id === "string" ? starts.get(event.id)?.specialist : undefined;
|
|
836
867
|
if (!event.result || typeof event.result !== "object" || Array.isArray(event.result)) {
|
|
837
|
-
throw new Error("
|
|
868
|
+
throw new Error("governor plan review transcript contains an invalid reviewer result");
|
|
838
869
|
}
|
|
839
870
|
record.reviewers.push({
|
|
840
871
|
specialist,
|
|
@@ -866,18 +897,18 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
|
|
|
866
897
|
result: { rounds },
|
|
867
898
|
};
|
|
868
899
|
}
|
|
869
|
-
function
|
|
870
|
-
const
|
|
871
|
-
const
|
|
872
|
-
const bytes = Buffer.byteLength(
|
|
873
|
-
if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.
|
|
874
|
-
throw new Error(`
|
|
875
|
-
}
|
|
876
|
-
const sha256 = createHash("sha256").update(
|
|
877
|
-
if (sha256 !== proof.integrity.
|
|
878
|
-
throw new Error(`
|
|
879
|
-
}
|
|
880
|
-
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;
|
|
881
912
|
}
|
|
882
913
|
function orderRecoveredReviewers(raw, expectedSpecialists) {
|
|
883
914
|
if (!Array.isArray(raw) || raw.length !== expectedSpecialists.length)
|
|
@@ -921,16 +952,16 @@ function aggregateRecoveredReviewers(reviewers) {
|
|
|
921
952
|
}
|
|
922
953
|
function assertResultDigest(raw, expected, runId) {
|
|
923
954
|
if (!expected) {
|
|
924
|
-
throw new Error(`
|
|
955
|
+
throw new Error(`governor plan review proof ${runId} is missing its result digest`);
|
|
925
956
|
}
|
|
926
957
|
const actual = digestResult(raw, "json");
|
|
927
958
|
if (actual.kind !== expected.kind ||
|
|
928
959
|
actual.sha256 !== expected.sha256 ||
|
|
929
960
|
actual.bytes !== expected.bytes) {
|
|
930
|
-
throw new Error(`
|
|
961
|
+
throw new Error(`governor plan review result does not match proof digest`);
|
|
931
962
|
}
|
|
932
963
|
}
|
|
933
|
-
function
|
|
964
|
+
function workflowTranscriptRound(stage) {
|
|
934
965
|
if (typeof stage !== "string")
|
|
935
966
|
return undefined;
|
|
936
967
|
const review = /^Review round ([1-9][0-9]*)$/.exec(stage);
|
|
@@ -964,7 +995,7 @@ function hasReviewRecoveryEvidence(coordRoot, goalId, planId) {
|
|
|
964
995
|
function planProposalSchema(record, trigger) {
|
|
965
996
|
const policy = record.intent.replanning;
|
|
966
997
|
if (!policy)
|
|
967
|
-
throw new Error(`
|
|
998
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
968
999
|
const rationale = { type: "string", minLength: 1, maxLength: MAX_REASON };
|
|
969
1000
|
const workItem = {
|
|
970
1001
|
type: "object",
|
|
@@ -1055,7 +1086,7 @@ function planProposalSchema(record, trigger) {
|
|
|
1055
1086
|
function normalizeProposal(planId, raw, record, previouslyApplied, trigger, preservedProposedAt) {
|
|
1056
1087
|
const policy = record.intent.replanning;
|
|
1057
1088
|
if (!policy)
|
|
1058
|
-
throw new Error(`
|
|
1089
|
+
throw new Error(`governor ${record.intent.id} does not allow replanning`);
|
|
1059
1090
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
1060
1091
|
throw new Error("planner result must be an object");
|
|
1061
1092
|
}
|
|
@@ -1074,7 +1105,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
|
|
|
1074
1105
|
throw new Error("mission completion may be proposed only at a milestone boundary");
|
|
1075
1106
|
}
|
|
1076
1107
|
return {
|
|
1077
|
-
schema_version:
|
|
1108
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1078
1109
|
plan_id: planId,
|
|
1079
1110
|
decision,
|
|
1080
1111
|
rationale,
|
|
@@ -1161,7 +1192,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
|
|
|
1161
1192
|
if (unused.length)
|
|
1162
1193
|
throw new Error(`plan contains work not reachable from root: ${unused.map((item) => item.key).join(", ")}`);
|
|
1163
1194
|
return {
|
|
1164
|
-
schema_version:
|
|
1195
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1165
1196
|
plan_id: planId,
|
|
1166
1197
|
decision,
|
|
1167
1198
|
rationale,
|
|
@@ -1213,9 +1244,9 @@ function planTrigger(record) {
|
|
|
1213
1244
|
function appendPlanEvent(coordRootRaw, goalId, planId, input) {
|
|
1214
1245
|
const coordRoot = resolve(coordRootRaw);
|
|
1215
1246
|
const path = join(planDir(coordRoot, goalId, planId), "events.jsonl");
|
|
1216
|
-
const current =
|
|
1247
|
+
const current = readGovernorPlan(coordRoot, goalId, planId).events;
|
|
1217
1248
|
const event = {
|
|
1218
|
-
schema_version:
|
|
1249
|
+
schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
|
|
1219
1250
|
plan_id: planId,
|
|
1220
1251
|
seq: current.length + 1,
|
|
1221
1252
|
ts: new Date().toISOString(),
|
|
@@ -1226,13 +1257,13 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
|
|
|
1226
1257
|
const line = `${JSON.stringify(event)}\n`;
|
|
1227
1258
|
const existing = existsSync(path) ? statSync(path).size : 0;
|
|
1228
1259
|
if (existing + Buffer.byteLength(line) > MAX_EVENTS_BYTES) {
|
|
1229
|
-
throw new Error("
|
|
1260
|
+
throw new Error("governor plan event log would exceed its byte limit");
|
|
1230
1261
|
}
|
|
1231
1262
|
appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
|
|
1232
1263
|
chmodSync(path, 0o600);
|
|
1233
1264
|
}
|
|
1234
1265
|
function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
|
|
1235
|
-
const plan =
|
|
1266
|
+
const plan = readGovernorPlan(coordRoot, goalId, planId);
|
|
1236
1267
|
if (plan.events.some((event) => event.event === eventType))
|
|
1237
1268
|
return;
|
|
1238
1269
|
appendPlanEvent(coordRoot, goalId, planId, input);
|
|
@@ -1280,7 +1311,7 @@ function writeExclusive(path, body, label) {
|
|
|
1280
1311
|
}
|
|
1281
1312
|
}
|
|
1282
1313
|
function planDir(coordRoot, goalId, planId) {
|
|
1283
|
-
return join(coordRoot, ".harnery", "
|
|
1314
|
+
return join(coordRoot, ".harnery", "governors", goalId, "plans", planId);
|
|
1284
1315
|
}
|
|
1285
1316
|
function planScriptPath(coordRoot, goalId, planId) {
|
|
1286
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";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type RunWorkItemInput } from "../work/index.js";
|
|
2
|
+
import type { GovernorPlanOutcome } from "./plan-types.js";
|
|
3
|
+
import { type GovernorProjection } from "./state.js";
|
|
4
|
+
export type GovernorStopReason = "succeeded" | "awaiting_attention" | "blocked" | "budget_exhausted" | "no_progress" | "tick_complete";
|
|
5
|
+
export interface GovernorDispatchOutcome {
|
|
6
|
+
work_id: string;
|
|
7
|
+
action: "run" | "resume" | "retry";
|
|
8
|
+
status: "completed" | "parked" | "failed";
|
|
9
|
+
run_id?: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GovernorRunReport {
|
|
13
|
+
goal_id: string;
|
|
14
|
+
mode: "tick" | "run";
|
|
15
|
+
stop_reason: GovernorStopReason;
|
|
16
|
+
reason: string;
|
|
17
|
+
started_at: string;
|
|
18
|
+
ended_at: string;
|
|
19
|
+
duration_ms: number;
|
|
20
|
+
cycles: number;
|
|
21
|
+
dispatches: number;
|
|
22
|
+
acceptances: number;
|
|
23
|
+
replans: number;
|
|
24
|
+
outcomes: GovernorDispatchOutcome[];
|
|
25
|
+
plan_outcomes: GovernorPlanOutcome[];
|
|
26
|
+
projection: GovernorProjection;
|
|
27
|
+
}
|
|
28
|
+
export interface RunGovernorInput {
|
|
29
|
+
coordRoot: string;
|
|
30
|
+
goalId: string;
|
|
31
|
+
mode?: "tick" | "run";
|
|
32
|
+
actor?: string;
|
|
33
|
+
engine: Omit<RunWorkItemInput["engine"], "maxAgents" | "concurrency" | "specialists">;
|
|
34
|
+
onLog?: (line: string) => void;
|
|
35
|
+
}
|
|
36
|
+
export declare function runGovernor(input: RunGovernorInput): Promise<GovernorRunReport>;
|
|
37
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/governor/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,oBAAoB,GACpB,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;IACtF,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAQD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4LrF"}
|