harnery 0.32.0 → 0.34.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 +2 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +7 -1
- package/dist/commands/adapter.js +2 -2
- package/dist/commands/agents.d.ts +144 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +1408 -565
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +7 -6
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -16
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +234 -12
- package/dist/commands/checkpoint.d.ts.map +1 -1
- package/dist/commands/checkpoint.js +3 -2
- package/dist/commands/claude-desktop.d.ts +2 -2
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +2 -2
- package/dist/commands/context.js +1 -6
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +22 -38
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +91 -28
- package/dist/commands/doctor.d.ts +4 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +55 -7
- package/dist/commands/events.d.ts +5 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +189 -0
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +13 -4
- package/dist/commands/init.d.ts +10 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +233 -51
- package/dist/commands/instructions.d.ts +4 -0
- package/dist/commands/instructions.d.ts.map +1 -0
- package/dist/commands/instructions.js +100 -0
- package/dist/commands/journal.d.ts.map +1 -1
- package/dist/commands/journal.js +4 -13
- package/dist/commands/ledger-v3.d.ts +5 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -0
- package/dist/commands/ledger-v3.js +91 -0
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +15 -6
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/web.d.ts +6 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +67 -7
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +22 -5
- package/dist/core/adapter.d.ts +5 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapters/attest.d.ts +5 -2
- package/dist/core/adapters/attest.d.ts.map +1 -1
- package/dist/core/adapters/attest.js +8 -3
- package/dist/core/adapters/profiles.d.ts +6 -6
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +4 -4
- package/dist/core/agents/canonical-emit.d.ts +17 -15
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +27 -25
- package/dist/core/agents/cli.js +212 -235
- package/dist/core/agents/codex-archive-v3.d.ts +14 -0
- package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
- package/dist/core/agents/codex-archive-v3.js +110 -0
- package/dist/core/agents/coord-client.d.ts +19 -70
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +65 -155
- package/dist/core/agents/finalization.d.ts +4 -1
- package/dist/core/agents/finalization.d.ts.map +1 -1
- package/dist/core/agents/finalization.js +89 -32
- package/dist/core/agents/index.d.ts +5 -5
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +5 -5
- package/dist/core/agents/live-authority-v3.d.ts +59 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
- package/dist/core/agents/live-authority-v3.js +233 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
- package/dist/core/agents/live-lifecycle-v3.js +91 -0
- package/dist/core/agents/live-observation-v3.d.ts +25 -0
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
- package/dist/core/agents/live-observation-v3.js +157 -0
- package/dist/core/agents/render/prompt-context.d.ts +10 -4
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +61 -55
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +15 -33
- package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +79 -127
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +3 -18
- package/dist/core/agents/rules/stop-hook.d.ts +9 -50
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +193 -236
- package/dist/core/agents/session-events.d.ts +5 -7
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +127 -95
- package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
- package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalization-state-v3.js +40 -0
- package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalizer-v3.js +734 -0
- package/dist/core/agents/session-name-display.d.ts +40 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -0
- package/dist/core/agents/session-name-display.js +119 -0
- package/dist/core/agents/state/activity-log.d.ts +3 -3
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +7 -16
- package/dist/core/agents/state/heartbeat-writer.d.ts +29 -46
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +59 -199
- package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-view.js +209 -0
- package/dist/core/agents/state/session-state.d.ts +45 -0
- package/dist/core/agents/state/session-state.d.ts.map +1 -0
- package/dist/core/agents/state/session-state.js +90 -0
- package/dist/core/agents/state/stale-sweep.d.ts +1 -1
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +26 -15
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +5 -7
- package/dist/core/config.d.ts +33 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +98 -2
- package/dist/core/context/index.d.ts +1 -4
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +9 -9
- package/dist/core/events/span-parent.d.ts +15 -0
- package/dist/core/events/span-parent.d.ts.map +1 -0
- package/dist/core/events/span-parent.js +34 -0
- package/dist/core/events/v3/advance.d.ts +14 -0
- package/dist/core/events/v3/advance.d.ts.map +1 -0
- package/dist/core/events/v3/advance.js +134 -0
- package/dist/core/events/v3/authority-outbox.d.ts +78 -0
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
- package/dist/core/events/v3/authority-outbox.js +399 -0
- package/dist/core/events/v3/base-builder.d.ts +20 -0
- package/dist/core/events/v3/base-builder.d.ts.map +1 -0
- package/dist/core/events/v3/base-builder.js +29 -0
- package/dist/core/events/v3/base-contract.d.ts +7576 -0
- package/dist/core/events/v3/base-contract.d.ts.map +1 -0
- package/dist/core/events/v3/base-contract.js +647 -0
- package/dist/core/events/v3/bootstrap.d.ts +34 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
- package/dist/core/events/v3/bootstrap.js +175 -0
- package/dist/core/events/v3/builder.d.ts +20 -0
- package/dist/core/events/v3/builder.d.ts.map +1 -0
- package/dist/core/events/v3/builder.js +28 -0
- package/dist/core/events/v3/canonical.d.ts +31 -0
- package/dist/core/events/v3/canonical.d.ts.map +1 -0
- package/dist/core/events/v3/canonical.js +100 -0
- package/dist/core/events/v3/capabilities.d.ts +31 -0
- package/dist/core/events/v3/capabilities.d.ts.map +1 -0
- package/dist/core/events/v3/capabilities.js +107 -0
- package/dist/core/events/v3/capability-drift.d.ts +22 -0
- package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
- package/dist/core/events/v3/capability-drift.js +134 -0
- package/dist/core/events/v3/catalog.d.ts +38 -0
- package/dist/core/events/v3/catalog.d.ts.map +1 -0
- package/dist/core/events/v3/catalog.js +135 -0
- package/dist/core/events/v3/clock-order.d.ts +34 -0
- package/dist/core/events/v3/clock-order.d.ts.map +1 -0
- package/dist/core/events/v3/clock-order.js +35 -0
- package/dist/core/events/v3/contract.d.ts +171 -0
- package/dist/core/events/v3/contract.d.ts.map +1 -0
- package/dist/core/events/v3/contract.js +180 -0
- package/dist/core/events/v3/control.d.ts +111 -0
- package/dist/core/events/v3/control.d.ts.map +1 -0
- package/dist/core/events/v3/control.js +419 -0
- package/dist/core/events/v3/coordination-view.d.ts +69 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-view.js +119 -0
- package/dist/core/events/v3/economics.d.ts +77 -0
- package/dist/core/events/v3/economics.d.ts.map +1 -0
- package/dist/core/events/v3/economics.js +274 -0
- package/dist/core/events/v3/finalization-view.d.ts +26 -0
- package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
- package/dist/core/events/v3/finalization-view.js +37 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
- package/dist/core/events/v3/fingerprint-keys.js +217 -0
- package/dist/core/events/v3/generated.d.ts +4 -0
- package/dist/core/events/v3/generated.d.ts.map +1 -0
- package/dist/core/events/v3/generated.js +47 -0
- package/dist/core/events/v3/ids.d.ts +9 -0
- package/dist/core/events/v3/ids.d.ts.map +1 -0
- package/dist/core/events/v3/ids.js +25 -0
- package/dist/core/events/v3/index.d.ts +35 -0
- package/dist/core/events/v3/index.d.ts.map +1 -0
- package/dist/core/events/v3/index.js +33 -0
- package/dist/core/events/v3/latency.d.ts +63 -0
- package/dist/core/events/v3/latency.d.ts.map +1 -0
- package/dist/core/events/v3/latency.js +412 -0
- package/dist/core/events/v3/live-feed.d.ts +45 -0
- package/dist/core/events/v3/live-feed.d.ts.map +1 -0
- package/dist/core/events/v3/live-feed.js +246 -0
- package/dist/core/events/v3/live-observation.d.ts +35 -0
- package/dist/core/events/v3/live-observation.d.ts.map +1 -0
- package/dist/core/events/v3/live-observation.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts +57 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -0
- package/dist/core/events/v3/live-routing.js +107 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command-recorder.js +477 -0
- package/dist/core/events/v3/producers/command.d.ts +50 -0
- package/dist/core/events/v3/producers/command.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command.js +135 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
- package/dist/core/events/v3/producers/coordination.d.ts +90 -0
- package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination.js +229 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook-base.js +424 -0
- package/dist/core/events/v3/producers/hook.d.ts +29 -0
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook.js +71 -0
- package/dist/core/events/v3/producers/intake.d.ts +65 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
- package/dist/core/events/v3/producers/intake.js +244 -0
- package/dist/core/events/v3/producers/recorder.d.ts +240 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/recorder.js +2176 -0
- package/dist/core/events/v3/projection.d.ts +101 -0
- package/dist/core/events/v3/projection.d.ts.map +1 -0
- package/dist/core/events/v3/projection.js +479 -0
- package/dist/core/events/v3/reader.d.ts +75 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -0
- package/dist/core/events/v3/reader.js +778 -0
- package/dist/core/events/v3/recovery-record.d.ts +47 -0
- package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
- package/dist/core/events/v3/recovery-record.js +167 -0
- package/dist/core/events/v3/recovery.d.ts +22 -0
- package/dist/core/events/v3/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/recovery.js +227 -0
- package/dist/core/events/v3/span-state.d.ts +52 -0
- package/dist/core/events/v3/span-state.d.ts.map +1 -0
- package/dist/core/events/v3/span-state.js +142 -0
- package/dist/core/events/v3/targets.d.ts +23 -0
- package/dist/core/events/v3/targets.d.ts.map +1 -0
- package/dist/core/events/v3/targets.js +134 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
- package/dist/core/events/v3/turn-telemetry.js +168 -0
- package/dist/core/events/v3/validate.d.ts +9 -0
- package/dist/core/events/v3/validate.d.ts.map +1 -0
- package/dist/core/events/v3/validate.js +281 -0
- package/dist/core/events/v3/writer.d.ts +56 -0
- package/dist/core/events/v3/writer.d.ts.map +1 -0
- package/dist/core/events/v3/writer.js +335 -0
- package/dist/core/governor/index.d.ts +1 -1
- package/dist/core/governor/index.d.ts.map +1 -1
- package/dist/core/governor/index.js +1 -1
- package/dist/core/governor/plan-api.d.ts +2 -1
- package/dist/core/governor/plan-api.d.ts.map +1 -1
- package/dist/core/governor/plan-api.js +6 -3
- package/dist/core/governor/read.d.ts +1 -1
- package/dist/core/governor/read.d.ts.map +1 -1
- package/dist/core/governor/read.js +1 -1
- package/dist/core/governor/state.d.ts +9 -0
- package/dist/core/governor/state.d.ts.map +1 -1
- package/dist/core/governor/state.js +40 -3
- package/dist/core/guard/config.d.ts +5 -0
- package/dist/core/guard/config.d.ts.map +1 -0
- package/dist/core/guard/config.js +157 -0
- package/dist/core/guard/coordinator.d.ts +14 -0
- package/dist/core/guard/coordinator.d.ts.map +1 -0
- package/dist/core/guard/coordinator.js +173 -0
- package/dist/core/guard/evaluator.d.ts +4 -0
- package/dist/core/guard/evaluator.d.ts.map +1 -0
- package/dist/core/guard/evaluator.js +242 -0
- package/dist/core/guard/evidence-v3.d.ts +15 -0
- package/dist/core/guard/evidence-v3.d.ts.map +1 -0
- package/dist/core/guard/evidence-v3.js +171 -0
- package/dist/core/guard/index.d.ts +10 -0
- package/dist/core/guard/index.d.ts.map +1 -0
- package/dist/core/guard/index.js +6 -0
- package/dist/core/guard/live-source-v3.d.ts +40 -0
- package/dist/core/guard/live-source-v3.d.ts.map +1 -0
- package/dist/core/guard/live-source-v3.js +128 -0
- package/dist/core/guard/storage.d.ts +27 -0
- package/dist/core/guard/storage.d.ts.map +1 -0
- package/dist/core/guard/storage.js +140 -0
- package/dist/core/guard/types.d.ts +119 -0
- package/dist/core/guard/types.d.ts.map +1 -0
- package/dist/core/guard/types.js +1 -0
- package/dist/core/hooks/adapter/detect.d.ts +18 -1
- package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
- package/dist/core/hooks/adapter/detect.js +29 -0
- package/dist/core/hooks/adapter/events.d.ts +7 -4
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +13 -4
- package/dist/core/hooks/adapter/output.d.ts +2 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.d.ts +7 -4
- package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.js +64 -24
- package/dist/core/hooks/adapter/wiring.d.ts +30 -4
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +89 -11
- package/dist/core/hooks/cli.d.ts +1 -1
- package/dist/core/hooks/cli.js +345 -400
- package/dist/core/hooks/codex-authorization.d.ts +30 -0
- package/dist/core/hooks/codex-authorization.d.ts.map +1 -0
- package/dist/core/hooks/codex-authorization.js +199 -0
- package/dist/core/hooks/effects/image-capture.d.ts +20 -34
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +212 -221
- package/dist/core/hooks/effects/index.d.ts +1 -9
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +1 -24
- package/dist/core/hooks/events/input-hash.d.ts +7 -0
- package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
- package/dist/core/hooks/events/input-hash.js +43 -0
- package/dist/core/hooks/index.d.ts +4 -3
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +2 -3
- package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
- package/dist/core/hooks/resolve/coord-root.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +16 -15
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +51 -42
- package/dist/core/hooks/resolve/transcript.d.ts +33 -3
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +155 -14
- package/dist/core/hooks/session-name-presence.d.ts +9 -10
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +15 -15
- package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
- package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
- package/dist/core/journal/index.d.ts +2 -2
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +9 -22
- package/dist/core/presence/blob.d.ts +8 -3
- package/dist/core/presence/blob.d.ts.map +1 -1
- package/dist/core/presence/blob.js +54 -41
- package/dist/core/presence/codec-digest.d.ts +29 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -0
- package/dist/core/presence/codec-digest.js +170 -0
- package/dist/core/presence/index.js +15 -1
- package/dist/core/presence/relay-client.d.ts +1 -1
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +5 -5
- package/dist/core/work/index.d.ts +1 -1
- package/dist/core/work/index.d.ts.map +1 -1
- package/dist/core/work/index.js +1 -1
- package/dist/core/work/read.d.ts +1 -1
- package/dist/core/work/read.d.ts.map +1 -1
- package/dist/core/work/read.js +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +6 -0
- package/dist/core/work/state.d.ts +9 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +17 -3
- package/dist/core/workflow/engine.js +24 -25
- package/dist/core/workflow/live-session-v3.d.ts +19 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
- package/dist/core/workflow/live-session-v3.js +86 -0
- package/dist/core/workflow/scope-id.d.ts +3 -0
- package/dist/core/workflow/scope-id.d.ts.map +1 -0
- package/dist/core/workflow/scope-id.js +5 -0
- package/dist/core/workflow/workspaces/leases.d.ts +4 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +53 -19
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/browser/client.d.ts +41 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +203 -0
- package/dist/lib/browser/critique.d.ts +28 -2
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +74 -18
- package/dist/lib/browser/geometry.d.ts +1 -1
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +130 -6
- package/dist/lib/browser/index.d.ts +3 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +3 -0
- package/dist/lib/browser/qa-plan.d.ts +174 -0
- package/dist/lib/browser/qa-plan.d.ts.map +1 -0
- package/dist/lib/browser/qa-plan.js +321 -0
- package/dist/lib/browser/qa-reuse.d.ts +99 -0
- package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
- package/dist/lib/browser/qa-reuse.js +222 -0
- package/dist/lib/browser/qa-snapshot.d.ts +64 -0
- package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
- package/dist/lib/browser/qa-snapshot.js +171 -0
- package/dist/lib/browser/runts.d.ts.map +1 -1
- package/dist/lib/browser/runts.js +22 -1
- package/dist/lib/browser/tiling.d.ts +71 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -0
- package/dist/lib/browser/tiling.js +118 -0
- package/dist/lib/context/index.d.ts +0 -3
- package/dist/lib/context/index.d.ts.map +1 -1
- package/dist/lib/context/index.js +20 -42
- package/dist/lib/council/index.d.ts +2 -2
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +9 -20
- package/dist/lib/docs-frontmatter.d.ts +1 -6
- package/dist/lib/docs-frontmatter.d.ts.map +1 -1
- package/dist/lib/docs-frontmatter.js +12 -78
- package/dist/lib/docs-index.d.ts +9 -0
- package/dist/lib/docs-index.d.ts.map +1 -1
- package/dist/lib/docs-index.js +32 -3
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +14 -30
- package/dist/lib/docs-metadata-audit.d.ts +19 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
- package/dist/lib/docs-metadata-audit.js +132 -0
- package/dist/lib/docs-metadata-managed.d.ts +23 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
- package/dist/lib/docs-metadata-managed.js +78 -0
- package/dist/lib/docs-metadata-sync.d.ts +20 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
- package/dist/lib/docs-metadata-sync.js +222 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2-schema.js +134 -0
- package/dist/lib/docs-metadata-v2.d.ts +21 -0
- package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2.js +424 -0
- package/dist/lib/docs-new.d.ts +11 -0
- package/dist/lib/docs-new.d.ts.map +1 -0
- package/dist/lib/docs-new.js +52 -0
- package/dist/lib/docs-sweep.d.ts.map +1 -1
- package/dist/lib/docs-sweep.js +45 -29
- package/dist/lib/headless/index.d.ts +98 -0
- package/dist/lib/headless/index.d.ts.map +1 -0
- package/dist/lib/headless/index.js +211 -0
- package/dist/lib/identities/assume.d.ts +4 -4
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +52 -68
- package/dist/lib/instructions/apply.d.ts +5 -4
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +32 -20
- package/dist/lib/instructions/bundle.d.ts +33 -0
- package/dist/lib/instructions/bundle.d.ts.map +1 -0
- package/dist/lib/instructions/bundle.js +149 -0
- package/dist/lib/instructions/splice.d.ts +0 -1
- package/dist/lib/instructions/splice.d.ts.map +1 -1
- package/dist/lib/instructions/splice.js +22 -6
- package/dist/lib/instructions/templates.d.ts +7 -5
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +79 -9
- package/package.json +27 -6
- package/schemas/config.schema.json +120 -2
- package/schemas/docs-metadata-v2.schema.json +441 -0
- package/schemas/event-v3.schema.json +24472 -0
- package/src/commander.ts +7 -1
- package/src/commands/adapter.ts +2 -2
- package/src/commands/agents.ts +1737 -570
- package/src/commands/artifacts.ts +7 -6
- package/src/commands/backup.ts +29 -21
- package/src/commands/browse.ts +349 -8
- package/src/commands/checkpoint.ts +4 -3
- package/src/commands/claude-desktop.ts +7 -5
- package/src/commands/context.ts +1 -6
- package/src/commands/decision.ts +27 -44
- package/src/commands/docs.ts +100 -33
- package/src/commands/doctor.ts +73 -8
- package/src/commands/events.ts +256 -0
- package/src/commands/governor.ts +18 -4
- package/src/commands/init.ts +264 -57
- package/src/commands/instructions.ts +129 -0
- package/src/commands/journal.ts +4 -13
- package/src/commands/ledger-v3.ts +111 -0
- package/src/commands/presence.ts +18 -11
- package/src/commands/sync.ts +1 -1
- package/src/commands/web.ts +67 -8
- package/src/commands/work.ts +28 -5
- package/src/core/adapter.ts +5 -0
- package/src/core/adapters/attest.ts +8 -3
- package/src/core/adapters/profiles.ts +4 -6
- package/src/core/agents/canonical-emit.ts +39 -28
- package/src/core/agents/cli.ts +242 -263
- package/src/core/agents/codex-archive-v3.ts +138 -0
- package/src/core/agents/coord-client.ts +75 -177
- package/src/core/agents/finalization.ts +120 -38
- package/src/core/agents/index.ts +5 -5
- package/src/core/agents/live-authority-v3.ts +375 -0
- package/src/core/agents/live-lifecycle-v3.ts +140 -0
- package/src/core/agents/live-observation-v3.ts +216 -0
- package/src/core/agents/render/prompt-context.ts +89 -55
- package/src/core/agents/render/session-context.ts +23 -32
- package/src/core/agents/rules/claim-conflict.ts +85 -126
- package/src/core/agents/rules/commit-conflict.ts +3 -14
- package/src/core/agents/rules/stop-hook.ts +239 -293
- package/src/core/agents/session-events.ts +137 -104
- package/src/core/agents/session-finalization-state-v3.ts +90 -0
- package/src/core/agents/session-finalizer-v3.ts +953 -0
- package/src/core/agents/session-name-display.ts +149 -0
- package/src/core/agents/state/activity-log.ts +6 -14
- package/src/core/agents/state/heartbeat-writer.ts +98 -242
- package/src/core/agents/state/live-coordination-view.ts +290 -0
- package/src/core/agents/state/session-state.ts +143 -0
- package/src/core/agents/state/stale-sweep.ts +40 -17
- package/src/core/artifacts/index.ts +4 -5
- package/src/core/config.ts +148 -3
- package/src/core/context/index.ts +9 -17
- package/src/core/events/span-parent.ts +46 -0
- package/src/core/events/v3/advance.ts +168 -0
- package/src/core/events/v3/authority-outbox.ts +548 -0
- package/src/core/events/v3/base-builder.ts +60 -0
- package/src/core/events/v3/base-contract.ts +882 -0
- package/src/core/events/v3/bootstrap.ts +226 -0
- package/src/core/events/v3/builder.ts +59 -0
- package/src/core/events/v3/canonical.ts +153 -0
- package/src/core/events/v3/capabilities.ts +171 -0
- package/src/core/events/v3/capability-drift.ts +177 -0
- package/src/core/events/v3/catalog.ts +202 -0
- package/src/core/events/v3/clock-order.ts +41 -0
- package/src/core/events/v3/contract.ts +365 -0
- package/src/core/events/v3/control.ts +576 -0
- package/src/core/events/v3/coordination-view.ts +193 -0
- package/src/core/events/v3/economics.ts +384 -0
- package/src/core/events/v3/finalization-view.ts +67 -0
- package/src/core/events/v3/fingerprint-keys.ts +260 -0
- package/src/core/events/v3/generated.ts +48 -0
- package/src/core/events/v3/ids.ts +33 -0
- package/src/core/events/v3/index.ts +322 -0
- package/src/core/events/v3/latency.ts +551 -0
- package/src/core/events/v3/live-feed.ts +319 -0
- package/src/core/events/v3/live-observation.ts +39 -0
- package/src/core/events/v3/live-routing.ts +135 -0
- package/src/core/events/v3/producers/command-recorder.ts +631 -0
- package/src/core/events/v3/producers/command.ts +201 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
- package/src/core/events/v3/producers/coordination.ts +355 -0
- package/src/core/events/v3/producers/hook-base.ts +578 -0
- package/src/core/events/v3/producers/hook.ts +119 -0
- package/src/core/events/v3/producers/intake.ts +319 -0
- package/src/core/events/v3/producers/recorder.ts +2805 -0
- package/src/core/events/v3/projection.ts +653 -0
- package/src/core/events/v3/reader.ts +1127 -0
- package/src/core/events/v3/recovery-record.ts +244 -0
- package/src/core/events/v3/recovery.ts +271 -0
- package/src/core/events/v3/span-state.ts +187 -0
- package/src/core/events/v3/targets.ts +182 -0
- package/src/core/events/v3/turn-telemetry.ts +259 -0
- package/src/core/events/v3/validate.ts +361 -0
- package/src/core/events/v3/writer.ts +419 -0
- package/src/core/governor/index.ts +3 -0
- package/src/core/governor/plan-api.ts +10 -2
- package/src/core/governor/read.ts +3 -0
- package/src/core/governor/state.ts +52 -5
- package/src/core/guard/config.ts +206 -0
- package/src/core/guard/coordinator.ts +227 -0
- package/src/core/guard/evaluator.ts +343 -0
- package/src/core/guard/evidence-v3.ts +227 -0
- package/src/core/guard/index.ts +35 -0
- package/src/core/guard/live-source-v3.ts +204 -0
- package/src/core/guard/storage.ts +188 -0
- package/src/core/guard/types.ts +152 -0
- package/src/core/hooks/adapter/detect.ts +28 -1
- package/src/core/hooks/adapter/events.ts +15 -6
- package/src/core/hooks/adapter/output.ts +7 -2
- package/src/core/hooks/adapter/parse.ts +81 -36
- package/src/core/hooks/adapter/wiring.ts +119 -13
- package/src/core/hooks/cli.ts +398 -422
- package/src/core/hooks/codex-authorization.ts +253 -0
- package/src/core/hooks/effects/image-capture.ts +228 -238
- package/src/core/hooks/effects/index.ts +1 -36
- package/src/core/hooks/events/input-hash.ts +47 -0
- package/src/core/hooks/index.ts +4 -11
- package/src/core/hooks/resolve/coord-root.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +52 -45
- package/src/core/hooks/resolve/transcript.ts +165 -14
- package/src/core/hooks/session-name-presence.ts +14 -15
- package/src/core/hooks/unsafe-cross-shell.ts +1 -1
- package/src/core/journal/index.ts +15 -22
- package/src/core/presence/blob.ts +63 -38
- package/src/core/presence/codec-digest.ts +215 -0
- package/src/core/presence/index.ts +18 -1
- package/src/core/presence/relay-client.ts +5 -5
- package/src/core/work/index.ts +3 -0
- package/src/core/work/read.ts +3 -0
- package/src/core/work/runner.ts +6 -0
- package/src/core/work/state.ts +27 -3
- package/src/core/workflow/engine.ts +24 -24
- package/src/core/workflow/live-session-v3.ts +126 -0
- package/src/core/workflow/scope-id.ts +6 -0
- package/src/core/workflow/workspaces/leases.ts +56 -19
- package/src/index.ts +1 -1
- package/src/lib/browser/client.ts +230 -0
- package/src/lib/browser/critique.ts +104 -27
- package/src/lib/browser/geometry.ts +143 -14
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/browser/qa-plan.ts +501 -0
- package/src/lib/browser/qa-reuse.ts +306 -0
- package/src/lib/browser/qa-snapshot.ts +223 -0
- package/src/lib/browser/runts.ts +27 -2
- package/src/lib/browser/tiling.ts +164 -0
- package/src/lib/context/index.ts +22 -46
- package/src/lib/council/index.ts +9 -21
- package/src/lib/docs-frontmatter.ts +8 -79
- package/src/lib/docs-index.ts +33 -3
- package/src/lib/docs-lint.ts +15 -29
- package/src/lib/docs-metadata-audit.ts +166 -0
- package/src/lib/docs-metadata-managed.ts +83 -0
- package/src/lib/docs-metadata-sync.ts +262 -0
- package/src/lib/docs-metadata-v2-schema.ts +138 -0
- package/src/lib/docs-metadata-v2.ts +646 -0
- package/src/lib/docs-new.ts +63 -0
- package/src/lib/docs-sweep.ts +42 -28
- package/src/lib/headless/index.ts +287 -0
- package/src/lib/identities/assume.ts +67 -86
- package/src/lib/instructions/apply.ts +33 -20
- package/src/lib/instructions/bundle.ts +199 -0
- package/src/lib/instructions/splice.ts +21 -7
- package/src/lib/instructions/templates.ts +85 -13
- package/dist/core/agents/cli-emit.d.ts +0 -27
- package/dist/core/agents/cli-emit.d.ts.map +0 -1
- package/dist/core/agents/cli-emit.js +0 -57
- package/dist/core/agents/codex-replay.d.ts +0 -29
- package/dist/core/agents/codex-replay.d.ts.map +0 -1
- package/dist/core/agents/codex-replay.js +0 -138
- package/dist/core/agents/events/consume.d.ts +0 -82
- package/dist/core/agents/events/consume.d.ts.map +0 -1
- package/dist/core/agents/events/consume.js +0 -195
- package/dist/core/agents/events/emit.d.ts +0 -42
- package/dist/core/agents/events/emit.d.ts.map +0 -1
- package/dist/core/agents/events/emit.js +0 -75
- package/dist/core/agents/events/ulid.d.ts +0 -11
- package/dist/core/agents/events/ulid.d.ts.map +0 -1
- package/dist/core/agents/events/ulid.js +0 -47
- package/dist/core/agents/state/heartbeat-projector.d.ts +0 -65
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
- package/dist/core/agents/state/heartbeat-projector.js +0 -527
- package/dist/core/hooks/events/emit.d.ts +0 -31
- package/dist/core/hooks/events/emit.d.ts.map +0 -1
- package/dist/core/hooks/events/emit.js +0 -93
- package/dist/core/hooks/events/rotate.d.ts +0 -43
- package/dist/core/hooks/events/rotate.d.ts.map +0 -1
- package/dist/core/hooks/events/rotate.js +0 -142
- package/dist/core/hooks/events/schema.d.ts +0 -312
- package/dist/core/hooks/events/schema.d.ts.map +0 -1
- package/dist/core/hooks/events/schema.js +0 -12
- package/dist/core/hooks/events/ulid.d.ts +0 -10
- package/dist/core/hooks/events/ulid.d.ts.map +0 -1
- package/dist/core/hooks/events/ulid.js +0 -47
- package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
- package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
- package/dist/lib/docs-frontmatter-migrate.js +0 -364
- package/src/core/agents/cli-emit.ts +0 -64
- package/src/core/agents/codex-replay.ts +0 -163
- package/src/core/agents/events/consume.ts +0 -254
- package/src/core/agents/events/emit.ts +0 -115
- package/src/core/agents/events/ulid.ts +0 -51
- package/src/core/agents/state/heartbeat-projector.ts +0 -582
- package/src/core/hooks/events/emit.ts +0 -125
- package/src/core/hooks/events/rotate.ts +0 -151
- package/src/core/hooks/events/schema.ts +0 -538
- package/src/core/hooks/events/ulid.ts +0 -51
- package/src/lib/docs-frontmatter-migrate.ts +0 -427
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { EventV3 } from "./contract.js";
|
|
2
|
+
export declare const EVENT_V3_LEDGER_RELATIVE_ROOT: ".harnery/ledgers/v3";
|
|
3
|
+
export type EventV3DurabilityState = "committed" | "ready";
|
|
4
|
+
export interface WriteEventV3Result {
|
|
5
|
+
state: EventV3DurabilityState;
|
|
6
|
+
event_id: string;
|
|
7
|
+
row_digest: `sha256:${string}`;
|
|
8
|
+
ready_path?: string;
|
|
9
|
+
diagnostic_code?: "wal_drain_failed";
|
|
10
|
+
}
|
|
11
|
+
export interface WriteEventV3Options {
|
|
12
|
+
leaseMs?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Leave the durable row in the ready WAL instead of draining it into the
|
|
15
|
+
* active authority during this call. A later `drainReadyEventsV3` commits
|
|
16
|
+
* the batch under one append lease. Production writers default to false;
|
|
17
|
+
* the option exists for matched harness-cost experiments.
|
|
18
|
+
*/
|
|
19
|
+
deferDrain?: boolean;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
onStep?: (step: EventV3WriteStep, eventId?: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export type EventV3WriteStep = "ready_temp_flushed" | "ready_published" | "active_tail_repaired" | "active_row_appended" | "active_row_flushed" | "receipt_committed" | "receipt_removed";
|
|
24
|
+
/**
|
|
25
|
+
* Persist one already-normalized V3 event through the spool-first WAL.
|
|
26
|
+
*
|
|
27
|
+
* A successful ready rename is the durability boundary. Lease contention or
|
|
28
|
+
* append failure leaves that ready record recoverable and returns `ready`
|
|
29
|
+
* instead of changing the producing tool's result.
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeEventV3(coordRoot: string, event: EventV3, options?: WriteEventV3Options): WriteEventV3Result;
|
|
32
|
+
/** Drain every durable ready record under the fenced append lease. */
|
|
33
|
+
export declare function drainReadyEventsV3(coordRoot: string, options?: WriteEventV3Options): number;
|
|
34
|
+
export declare function withEventV3LedgerLease<T>(coordRoot: string, options: WriteEventV3Options, operation: () => T): T;
|
|
35
|
+
export declare function drainReadyEventsUnderLeaseV3(paths: ReturnType<typeof eventV3Paths>, options?: WriteEventV3Options): number;
|
|
36
|
+
export declare function eventV3Paths(coordRoot: string): {
|
|
37
|
+
root: string;
|
|
38
|
+
active: string;
|
|
39
|
+
catalog: string;
|
|
40
|
+
spool: string;
|
|
41
|
+
diagnostics: string;
|
|
42
|
+
segments: string;
|
|
43
|
+
authorityOutbox: string;
|
|
44
|
+
lease: string;
|
|
45
|
+
};
|
|
46
|
+
export declare function ensureEventV3Layout(coordRoot: string): {
|
|
47
|
+
root: string;
|
|
48
|
+
active: string;
|
|
49
|
+
catalog: string;
|
|
50
|
+
spool: string;
|
|
51
|
+
diagnostics: string;
|
|
52
|
+
segments: string;
|
|
53
|
+
authorityOutbox: string;
|
|
54
|
+
lease: string;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/writer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C,eAAO,MAAM,6BAA6B,EAAG,qBAA8B,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA4CpB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAK/F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,CAAC,GACjB,CAAC,CAoBH;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACtC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA2CR;AAsDD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;;;;;;;;;EAY7C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;EA8BpD"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { chmodSync, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, renameSync, statSync, truncateSync, unlinkSync, writeFileSync, writeSync, } from "node:fs";
|
|
3
|
+
import { hostname } from "node:os";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
import { fsyncParentDirectory } from "../../workflow/durable-record.js";
|
|
6
|
+
import { acquireNoClobberLease } from "../../workflow/workspaces/leases.js";
|
|
7
|
+
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
8
|
+
import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
|
|
9
|
+
import { assertEventV3 } from "./validate.js";
|
|
10
|
+
const MAX_LINE_BYTES = 16 * 1024;
|
|
11
|
+
const DEFAULT_LEASE_MS = 5_000;
|
|
12
|
+
export const EVENT_V3_LEDGER_RELATIVE_ROOT = ".harnery/ledgers/v3";
|
|
13
|
+
/**
|
|
14
|
+
* Persist one already-normalized V3 event through the spool-first WAL.
|
|
15
|
+
*
|
|
16
|
+
* A successful ready rename is the durability boundary. Lease contention or
|
|
17
|
+
* append failure leaves that ready record recoverable and returns `ready`
|
|
18
|
+
* instead of changing the producing tool's result.
|
|
19
|
+
*/
|
|
20
|
+
export function writeEventV3(coordRoot, event, options = {}) {
|
|
21
|
+
assertEventV3(event);
|
|
22
|
+
if (event.contract.schema_digest !== EVENT_V3_SCHEMA_DIGEST) {
|
|
23
|
+
throw new Error("event schema digest is not accepted by this V3 writer");
|
|
24
|
+
}
|
|
25
|
+
const row = `${canonicalJsonV3(event)}\n`;
|
|
26
|
+
const bytes = Buffer.byteLength(row, "utf8");
|
|
27
|
+
if (bytes > MAX_LINE_BYTES) {
|
|
28
|
+
throw new Error(`event exceeds the V3 ${MAX_LINE_BYTES}-byte row limit`);
|
|
29
|
+
}
|
|
30
|
+
const paths = ensureEventV3Layout(coordRoot);
|
|
31
|
+
const rowDigest = sha256V3(row);
|
|
32
|
+
const readyName = `${String(event.producer.sequence).padStart(16, "0")}-${event.event_id}-${rowDigest.slice(7)}.ready`;
|
|
33
|
+
const readyPath = join(paths.spool, readyName);
|
|
34
|
+
writeReadyRecord(paths.spool, readyPath, row, event.event_id, options.onStep);
|
|
35
|
+
if (options.deferDrain) {
|
|
36
|
+
return {
|
|
37
|
+
state: "ready",
|
|
38
|
+
event_id: event.event_id,
|
|
39
|
+
row_digest: rowDigest,
|
|
40
|
+
ready_path: readyPath,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
drainReadyEventsV3(coordRoot, options);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return {
|
|
48
|
+
state: "ready",
|
|
49
|
+
event_id: event.event_id,
|
|
50
|
+
row_digest: rowDigest,
|
|
51
|
+
ready_path: readyPath,
|
|
52
|
+
diagnostic_code: "wal_drain_failed",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return existsSync(readyPath)
|
|
56
|
+
? {
|
|
57
|
+
state: "ready",
|
|
58
|
+
event_id: event.event_id,
|
|
59
|
+
row_digest: rowDigest,
|
|
60
|
+
ready_path: readyPath,
|
|
61
|
+
}
|
|
62
|
+
: { state: "committed", event_id: event.event_id, row_digest: rowDigest };
|
|
63
|
+
}
|
|
64
|
+
/** Drain every durable ready record under the fenced append lease. */
|
|
65
|
+
export function drainReadyEventsV3(coordRoot, options = {}) {
|
|
66
|
+
const paths = ensureEventV3Layout(coordRoot);
|
|
67
|
+
return withEventV3LedgerLease(coordRoot, options, () => drainReadyEventsUnderLeaseV3(paths, options));
|
|
68
|
+
}
|
|
69
|
+
export function withEventV3LedgerLease(coordRoot, options, operation) {
|
|
70
|
+
const paths = ensureEventV3Layout(coordRoot);
|
|
71
|
+
const authority = createHash("sha256")
|
|
72
|
+
.update(resolve(coordRoot))
|
|
73
|
+
.update("\0")
|
|
74
|
+
.update(EVENT_V3_SCHEMA_DIGEST)
|
|
75
|
+
.digest("hex");
|
|
76
|
+
const lease = acquireNoClobberLease({
|
|
77
|
+
path: paths.lease,
|
|
78
|
+
scope: "event-v3-append",
|
|
79
|
+
authoritySha256: authority,
|
|
80
|
+
staleAfterMs: options.leaseMs ?? DEFAULT_LEASE_MS,
|
|
81
|
+
now: options.now,
|
|
82
|
+
validateStaleOwner: (owner) => owner.host === hostname() && !pidIsAlive(owner.pid),
|
|
83
|
+
});
|
|
84
|
+
try {
|
|
85
|
+
return operation();
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
lease.release();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
|
|
92
|
+
if (repairUnterminatedActiveFrame(paths.active)) {
|
|
93
|
+
options.onStep?.("active_tail_repaired");
|
|
94
|
+
}
|
|
95
|
+
requeueCommittedReceipts(paths.spool);
|
|
96
|
+
const readyNames = readdirSync(paths.spool)
|
|
97
|
+
.filter((name) => name.endsWith(".ready"))
|
|
98
|
+
.sort();
|
|
99
|
+
if (readyNames.length === 0)
|
|
100
|
+
return 0;
|
|
101
|
+
const readyRows = causallyOrderedReadyRows(readyNames.map((readyName) => {
|
|
102
|
+
const readyPath = join(paths.spool, readyName);
|
|
103
|
+
const row = readAndValidateReadyRow(readyPath);
|
|
104
|
+
return {
|
|
105
|
+
readyName,
|
|
106
|
+
readyPath,
|
|
107
|
+
row,
|
|
108
|
+
event: JSON.parse(row),
|
|
109
|
+
};
|
|
110
|
+
}));
|
|
111
|
+
const activeFd = openSync(paths.active, "a", 0o600);
|
|
112
|
+
let committed = 0;
|
|
113
|
+
try {
|
|
114
|
+
for (const { readyName, readyPath, row } of readyRows) {
|
|
115
|
+
const eventId = eventIdFromReadyName(readyName);
|
|
116
|
+
writeSync(activeFd, row, undefined, "utf8");
|
|
117
|
+
options.onStep?.("active_row_appended", eventId);
|
|
118
|
+
fsyncSync(activeFd);
|
|
119
|
+
options.onStep?.("active_row_flushed", eventId);
|
|
120
|
+
const committedPath = `${readyPath.slice(0, -".ready".length)}.committed`;
|
|
121
|
+
renameSync(readyPath, committedPath);
|
|
122
|
+
fsyncParentDirectory(committedPath);
|
|
123
|
+
options.onStep?.("receipt_committed", eventId);
|
|
124
|
+
unlinkSync(committedPath);
|
|
125
|
+
fsyncParentDirectory(committedPath);
|
|
126
|
+
options.onStep?.("receipt_removed", eventId);
|
|
127
|
+
committed += 1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
closeSync(activeFd);
|
|
132
|
+
}
|
|
133
|
+
return committed;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Keep the spool's deterministic filename order except where a ready event
|
|
137
|
+
* names another ready event as a cause. Those dependencies are committed
|
|
138
|
+
* first; a cycle stays in the WAL and never poisons the active authority.
|
|
139
|
+
*/
|
|
140
|
+
function causallyOrderedReadyRows(rows) {
|
|
141
|
+
const pending = new Map(rows.map((row) => [row.event.event_id, row]));
|
|
142
|
+
const ordered = [];
|
|
143
|
+
while (pending.size > 0) {
|
|
144
|
+
const next = rows.find(({ event }) => {
|
|
145
|
+
const causes = event.links.caused_by;
|
|
146
|
+
return pending.has(event.event_id) && causes.every((eventId) => !pending.has(eventId));
|
|
147
|
+
});
|
|
148
|
+
if (!next)
|
|
149
|
+
throw new Error("ready V3 events contain a causal dependency cycle");
|
|
150
|
+
pending.delete(next.event.event_id);
|
|
151
|
+
ordered.push(next);
|
|
152
|
+
}
|
|
153
|
+
return ordered;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* A `.committed` receipt is created only after the active row is flushed. If
|
|
157
|
+
* the process dies before unlinking it, replaying the exact canonical row is
|
|
158
|
+
* safe: the validating reader deduplicates the event ID and detects conflicts.
|
|
159
|
+
*/
|
|
160
|
+
function requeueCommittedReceipts(spool) {
|
|
161
|
+
const committedNames = readdirSync(spool)
|
|
162
|
+
.filter((name) => name.endsWith(".committed"))
|
|
163
|
+
.sort();
|
|
164
|
+
for (const committedName of committedNames) {
|
|
165
|
+
const committedPath = join(spool, committedName);
|
|
166
|
+
readAndValidateReadyRow(committedPath);
|
|
167
|
+
const readyPath = `${committedPath.slice(0, -".committed".length)}.ready`;
|
|
168
|
+
if (existsSync(readyPath)) {
|
|
169
|
+
if (readFileSync(readyPath, "utf8") !== readFileSync(committedPath, "utf8")) {
|
|
170
|
+
throw new Error("committed and ready receipts conflict");
|
|
171
|
+
}
|
|
172
|
+
unlinkSync(committedPath);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
renameSync(committedPath, readyPath);
|
|
176
|
+
}
|
|
177
|
+
fsyncParentDirectory(readyPath);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function eventV3Paths(coordRoot) {
|
|
181
|
+
const root = join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT);
|
|
182
|
+
return {
|
|
183
|
+
root,
|
|
184
|
+
active: join(root, "active.ndjson"),
|
|
185
|
+
catalog: join(root, "catalog.json"),
|
|
186
|
+
spool: join(root, "spool"),
|
|
187
|
+
diagnostics: join(root, "diagnostics"),
|
|
188
|
+
segments: join(root, "segments"),
|
|
189
|
+
authorityOutbox: join(root, "authority-outbox"),
|
|
190
|
+
lease: join(root, "append-lease"),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export function ensureEventV3Layout(coordRoot) {
|
|
194
|
+
assertSupportedPath(coordRoot);
|
|
195
|
+
const paths = eventV3Paths(coordRoot);
|
|
196
|
+
for (const path of [
|
|
197
|
+
paths.root,
|
|
198
|
+
paths.spool,
|
|
199
|
+
paths.diagnostics,
|
|
200
|
+
paths.segments,
|
|
201
|
+
paths.authorityOutbox,
|
|
202
|
+
]) {
|
|
203
|
+
mkdirSync(path, { recursive: true, mode: 0o700 });
|
|
204
|
+
chmodSync(path, 0o700);
|
|
205
|
+
}
|
|
206
|
+
if (!existsSync(paths.active)) {
|
|
207
|
+
let fd;
|
|
208
|
+
try {
|
|
209
|
+
fd = openSync(paths.active, "wx", 0o600);
|
|
210
|
+
fsyncSync(fd);
|
|
211
|
+
fsyncParentDirectory(paths.active);
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
if (error.code !== "EEXIST")
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
if (fd !== undefined)
|
|
219
|
+
closeSync(fd);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const active = lstatSync(paths.active);
|
|
223
|
+
if (!active.isFile() || active.isSymbolicLink() || (active.mode & 0o077) !== 0) {
|
|
224
|
+
throw new Error("active V3 ledger must be an owner-only regular file");
|
|
225
|
+
}
|
|
226
|
+
return paths;
|
|
227
|
+
}
|
|
228
|
+
function writeReadyRecord(spool, readyPath, row, eventId, onStep) {
|
|
229
|
+
const temporary = join(spool, `.tmp-${process.pid}-${randomUUID()}`);
|
|
230
|
+
let fd;
|
|
231
|
+
try {
|
|
232
|
+
fd = openSync(temporary, "wx", 0o600);
|
|
233
|
+
writeFileSync(fd, row, "utf8");
|
|
234
|
+
fsyncSync(fd);
|
|
235
|
+
onStep?.("ready_temp_flushed", eventId);
|
|
236
|
+
closeSync(fd);
|
|
237
|
+
fd = undefined;
|
|
238
|
+
renameSync(temporary, readyPath);
|
|
239
|
+
fsyncParentDirectory(readyPath);
|
|
240
|
+
onStep?.("ready_published", eventId);
|
|
241
|
+
}
|
|
242
|
+
finally {
|
|
243
|
+
if (fd !== undefined)
|
|
244
|
+
closeSync(fd);
|
|
245
|
+
if (existsSync(temporary))
|
|
246
|
+
unlinkSync(temporary);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function readAndValidateReadyRow(path) {
|
|
250
|
+
const size = statSync(path).size;
|
|
251
|
+
if (size <= 1 || size > MAX_LINE_BYTES)
|
|
252
|
+
throw new Error("ready event has invalid size");
|
|
253
|
+
const row = readFileSync(path, "utf8");
|
|
254
|
+
if (!row.endsWith("\n") || row.slice(0, -1).includes("\n")) {
|
|
255
|
+
throw new Error("ready event is not one complete frame");
|
|
256
|
+
}
|
|
257
|
+
let parsed;
|
|
258
|
+
try {
|
|
259
|
+
parsed = JSON.parse(row);
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
throw new Error("ready event is not valid JSON");
|
|
263
|
+
}
|
|
264
|
+
assertEventV3(parsed);
|
|
265
|
+
if (`${canonicalJsonV3(parsed)}\n` !== row) {
|
|
266
|
+
throw new Error("ready event is not canonically serialized");
|
|
267
|
+
}
|
|
268
|
+
return row;
|
|
269
|
+
}
|
|
270
|
+
function repairUnterminatedActiveFrame(activePath) {
|
|
271
|
+
const size = statSync(activePath).size;
|
|
272
|
+
if (size === 0)
|
|
273
|
+
return false;
|
|
274
|
+
const tailBytes = Math.min(size, MAX_LINE_BYTES + 1);
|
|
275
|
+
const fd = openSync(activePath, "r");
|
|
276
|
+
const tail = Buffer.allocUnsafe(tailBytes);
|
|
277
|
+
try {
|
|
278
|
+
const bytesRead = readFileTail(fd, tail, size - tailBytes);
|
|
279
|
+
if (bytesRead > 0 && tail[bytesRead - 1] === 0x0a)
|
|
280
|
+
return false;
|
|
281
|
+
const lastNewline = tail.lastIndexOf(0x0a, bytesRead - 1);
|
|
282
|
+
if (lastNewline < 0 && size > MAX_LINE_BYTES) {
|
|
283
|
+
throw new Error("active V3 tail exceeds the frame limit without a boundary");
|
|
284
|
+
}
|
|
285
|
+
const repairedSize = size - tailBytes + Math.max(0, lastNewline + 1);
|
|
286
|
+
truncateSync(activePath, repairedSize);
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
closeSync(fd);
|
|
290
|
+
}
|
|
291
|
+
const repairFd = openSync(activePath, "r+");
|
|
292
|
+
try {
|
|
293
|
+
fsyncSync(repairFd);
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
closeSync(repairFd);
|
|
297
|
+
}
|
|
298
|
+
fsyncParentDirectory(activePath);
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
function eventIdFromReadyName(name) {
|
|
302
|
+
const match = name.match(/^\d{16}-(evt_[0-9a-f-]{36})-/);
|
|
303
|
+
return match?.[1];
|
|
304
|
+
}
|
|
305
|
+
function readFileTail(fd, buffer, position) {
|
|
306
|
+
let read = 0;
|
|
307
|
+
while (read < buffer.length) {
|
|
308
|
+
const count = requireReadSync(fd, buffer, read, buffer.length - read, position + read);
|
|
309
|
+
if (count === 0)
|
|
310
|
+
break;
|
|
311
|
+
read += count;
|
|
312
|
+
}
|
|
313
|
+
return read;
|
|
314
|
+
}
|
|
315
|
+
function requireReadSync(fd, buffer, offset, length, position) {
|
|
316
|
+
// Kept in one helper so the storage state machine has a single positional-read seam.
|
|
317
|
+
return readSync(fd, buffer, offset, length, position);
|
|
318
|
+
}
|
|
319
|
+
function pidIsAlive(pid) {
|
|
320
|
+
if (!Number.isSafeInteger(pid) || pid < 1)
|
|
321
|
+
return false;
|
|
322
|
+
try {
|
|
323
|
+
process.kill(pid, 0);
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
return error.code !== "ESRCH";
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function assertSupportedPath(coordRoot) {
|
|
331
|
+
if (/^(\\\\|\/\/wsl(?:\.localhost)?\/)/i.test(coordRoot) ||
|
|
332
|
+
/^\/mnt\/[a-z](?:\/|$)/i.test(coordRoot)) {
|
|
333
|
+
throw new Error("V3 writer refuses direct UNC or cross-boundary coordination roots");
|
|
334
|
+
}
|
|
335
|
+
}
|
|
@@ -3,5 +3,5 @@ export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } f
|
|
|
3
3
|
export { type CreateGovernorPlanTemplateInput, type CreateGovernorReplanningInput, 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";
|
|
4
4
|
export { type GovernorDispatchOutcome, type GovernorRunReport, type GovernorStopReason, type RunGovernorInput, runGovernor, } from "./runner.js";
|
|
5
5
|
export { type ConfigureGovernorServiceInput, configureGovernorService, GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION, GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION, GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION, type GovernorServiceConfig, type GovernorServiceEngineConfig, type GovernorServiceGoalRuntime, type GovernorServiceGoalState, type GovernorServiceProcessState, type GovernorServiceRuntime, type GovernorServiceStatus, type GovernorServiceStatusRecord, type GovernorServiceSweepOutcome, type GovernorServiceSweepReport, governorServiceLogPath, type RunGovernorServiceDaemonInput, type RunGovernorServiceSweepInput, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, requestGovernorServiceStop, runGovernorServiceDaemon, runGovernorServiceSweep, spawnGovernorService, } from "./service.js";
|
|
6
|
-
export { assertGovernorId, type CreateGovernorInput, type CreateGovernorMissionInput, collectGovernorWork, createGovernor, GOVERNOR_INTENT_SCHEMA_VERSION, type GovernorAutomationPolicy, type GovernorIntent, type GovernorLimits, type GovernorMission, type GovernorNextAction, type GovernorProjection, type GovernorRecord, type GovernorState, listGovernors, newGovernorId, readGovernor, } from "./state.js";
|
|
6
|
+
export { assertGovernorId, type CreateGovernorInput, type CreateGovernorMissionInput, collectGovernorWork, createGovernor, GOVERNOR_INTENT_SCHEMA_VERSION, type GovernorAutomationPolicy, type GovernorIntent, type GovernorLimits, type GovernorListResult, type GovernorListWarning, type GovernorMission, type GovernorNextAction, type GovernorProjection, type GovernorRecord, type GovernorState, listGovernors, listGovernorsWithWarnings, newGovernorId, readGovernor, } from "./state.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/governor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,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,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,6BAA6B,EAClC,wBAAwB,EACxB,sCAAsC,EACtC,uCAAuC,EACvC,sCAAsC,EACtC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,cAAc,EACd,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,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/governor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,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,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,6BAA6B,EAClC,wBAAwB,EACxB,sCAAsC,EACtC,uCAAuC,EACvC,sCAAsC,EACtC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -3,4 +3,4 @@ export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } f
|
|
|
3
3
|
export { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
|
|
4
4
|
export { runGovernor, } from "./runner.js";
|
|
5
5
|
export { configureGovernorService, GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION, GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION, GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION, governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, requestGovernorServiceStop, runGovernorServiceDaemon, runGovernorServiceSweep, spawnGovernorService, } from "./service.js";
|
|
6
|
-
export { assertGovernorId, collectGovernorWork, createGovernor, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, newGovernorId, readGovernor, } from "./state.js";
|
|
6
|
+
export { assertGovernorId, collectGovernorWork, createGovernor, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, listGovernorsWithWarnings, newGovernorId, readGovernor, } from "./state.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { GovernorPlanOutcome } from "./plan-types.js";
|
|
2
|
+
import { type GovernorListWarning } from "./state.js";
|
|
2
3
|
export declare function approveGovernorPlan(input: {
|
|
3
4
|
coordRoot: string;
|
|
4
5
|
goalId: string;
|
|
@@ -19,7 +20,7 @@ export declare function rejectGovernorPlan(input: {
|
|
|
19
20
|
* `work reopen` can tell the difference between an item nothing is watching and one
|
|
20
21
|
* whose mission has already been declared complete — the case where reopening the
|
|
21
22
|
* item alone leaves it in `ready_work` that the governor will never dispatch. */
|
|
22
|
-
export declare function findCompletedMissionGoverning(coordRoot: string, workId: string): string | undefined;
|
|
23
|
+
export declare function findCompletedMissionGoverning(coordRoot: string, workId: string, onWarning?: (warning: GovernorListWarning) => void): string | undefined;
|
|
23
24
|
/** ADR 0050: reopen an accepted mission completion by appending to the plan log.
|
|
24
25
|
* Held under the goal lease so it cannot race a foreground governor run. */
|
|
25
26
|
export declare function reopenGovernorMission(input: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-api.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-api.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO3D,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CActB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,mBAAmB,CActB;AAED;;;;;iFAKiF;AACjF,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GACjD,MAAM,GAAG,SAAS,CAUpB;AAED;4EAC4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,mBAAmB,CAatB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,mBAAmB,CActB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { applyGovernorPlanProposal, rejectGovernorPlanProposal, reopenGovernorMissionPlan, retryGovernorPlanProposal, } from "./planning.js";
|
|
2
|
-
import { acquireGovernorLease,
|
|
2
|
+
import { acquireGovernorLease, listGovernorsWithWarnings, readGovernorIgnoringLease, } from "./state.js";
|
|
3
3
|
export function approveGovernorPlan(input) {
|
|
4
4
|
const actor = input.actor?.trim() || `governor:${input.goalId}`;
|
|
5
5
|
const release = acquireGovernorLease(input.coordRoot, input.goalId);
|
|
@@ -38,8 +38,11 @@ export function rejectGovernorPlan(input) {
|
|
|
38
38
|
* `work reopen` can tell the difference between an item nothing is watching and one
|
|
39
39
|
* whose mission has already been declared complete — the case where reopening the
|
|
40
40
|
* item alone leaves it in `ready_work` that the governor will never dispatch. */
|
|
41
|
-
export function findCompletedMissionGoverning(coordRoot, workId) {
|
|
42
|
-
|
|
41
|
+
export function findCompletedMissionGoverning(coordRoot, workId, onWarning) {
|
|
42
|
+
const result = listGovernorsWithWarnings(coordRoot);
|
|
43
|
+
for (const warning of result.warnings)
|
|
44
|
+
onWarning?.(warning);
|
|
45
|
+
for (const record of result.records) {
|
|
43
46
|
if (record.projection.state !== "succeeded" || !record.intent.mission)
|
|
44
47
|
continue;
|
|
45
48
|
if (record.projection.root_work_id === workId || record.projection.work_ids.includes(workId)) {
|
|
@@ -2,5 +2,5 @@ export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } f
|
|
|
2
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
3
|
export type { GovernorServiceConfig, GovernorServiceGoalRuntime, GovernorServiceGoalState, GovernorServiceProcessState, GovernorServiceRuntime, GovernorServiceStatus, GovernorServiceStatusRecord, } from "./service.js";
|
|
4
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";
|
|
5
|
+
export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, type GovernorAutomationPolicy, type GovernorIntent, type GovernorLimits, type GovernorListResult, type GovernorListWarning, type GovernorMission, type GovernorNextAction, type GovernorProjection, type GovernorRecord, type GovernorState, listGovernors, listGovernorsWithWarnings, readGovernor, } from "./state.js";
|
|
6
6
|
//# sourceMappingURL=read.d.ts.map
|
|
@@ -1 +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"}
|
|
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,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,aAAa,EACb,yBAAyB,EACzB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } from "./plan-read.js";
|
|
2
2
|
export { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
|
|
3
3
|
export { governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, } from "./service-read.js";
|
|
4
|
-
export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, readGovernor, } from "./state.js";
|
|
4
|
+
export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, listGovernorsWithWarnings, readGovernor, } from "./state.js";
|
|
@@ -92,6 +92,14 @@ export interface GovernorRecord {
|
|
|
92
92
|
work: WorkRecord[];
|
|
93
93
|
plans: GovernorPlanRecord[];
|
|
94
94
|
}
|
|
95
|
+
export interface GovernorListWarning {
|
|
96
|
+
goal_id: string;
|
|
97
|
+
reason: string;
|
|
98
|
+
}
|
|
99
|
+
export interface GovernorListResult {
|
|
100
|
+
records: GovernorRecord[];
|
|
101
|
+
warnings: GovernorListWarning[];
|
|
102
|
+
}
|
|
95
103
|
export interface CreateGovernorInput {
|
|
96
104
|
coordRoot: string;
|
|
97
105
|
rootWorkId?: string;
|
|
@@ -108,6 +116,7 @@ export declare function readGovernor(coordRoot: string, goalId: string): Governo
|
|
|
108
116
|
/** @internal Runner seam; ignores the lease held by this governor process. */
|
|
109
117
|
export declare function readGovernorIgnoringLease(coordRoot: string, goalId: string): GovernorRecord;
|
|
110
118
|
export declare function listGovernors(coordRoot: string): GovernorRecord[];
|
|
119
|
+
export declare function listGovernorsWithWarnings(coordRoot: string): GovernorListResult;
|
|
111
120
|
export declare function collectGovernorWork(coordRoot: string, rootWorkId: string): WorkRecord[];
|
|
112
121
|
export declare function assertGovernorId(goalId: string): void;
|
|
113
122
|
export declare function newGovernorId(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/governor/state.ts"],"names":[],"mappings":"AAeA,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EACL,KAAK,6BAA6B,EAElC,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAI9B,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,8BAA8B,EAAG,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/governor/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,13 @@ const MAX_ACCEPTANCE = 50;
|
|
|
15
15
|
const MAX_INTENT_BYTES = 256 * 1024;
|
|
16
16
|
const MAX_TEMPLATES = 20;
|
|
17
17
|
const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
18
|
+
const GOVERNOR_SPECIALIST_PROFILE_KEYS = [
|
|
19
|
+
"instructions",
|
|
20
|
+
"adapter",
|
|
21
|
+
"effort",
|
|
22
|
+
"maxAttempts",
|
|
23
|
+
];
|
|
24
|
+
const GOVERNOR_SPECIALIST_PROFILE_KEY_SET = new Set(GOVERNOR_SPECIALIST_PROFILE_KEYS);
|
|
18
25
|
const FOREIGN_LEASE_STALE_MS = 24 * 60 * 60 * 1_000;
|
|
19
26
|
/** Ceiling on CONSECUTIVE uncharged (upstream) replans (ADR 0046). Because an
|
|
20
27
|
* uncharged replan does not spend `max_replans`, an unending vendor outage would
|
|
@@ -27,6 +34,7 @@ export function createGovernor(input) {
|
|
|
27
34
|
const coordRoot = resolve(input.coordRoot);
|
|
28
35
|
const id = input.id ?? newGovernorId();
|
|
29
36
|
assertGovernorId(id);
|
|
37
|
+
assertGovernorSpecialistProfileKeys(input.specialists);
|
|
30
38
|
const mission = input.mission ? normalizeMission(input.mission) : undefined;
|
|
31
39
|
if (mission && !input.replanning) {
|
|
32
40
|
throw new Error("governor mission requires a replanning policy");
|
|
@@ -73,16 +81,30 @@ export function readGovernorIgnoringLease(coordRoot, goalId) {
|
|
|
73
81
|
return readGovernorInternal(coordRoot, goalId, true);
|
|
74
82
|
}
|
|
75
83
|
export function listGovernors(coordRoot) {
|
|
84
|
+
return listGovernorsWithWarnings(coordRoot).records;
|
|
85
|
+
}
|
|
86
|
+
export function listGovernorsWithWarnings(coordRoot) {
|
|
76
87
|
const base = join(resolve(coordRoot), ".harnery", "governors");
|
|
77
88
|
if (!existsSync(base))
|
|
78
|
-
return [];
|
|
89
|
+
return { records: [], warnings: [] };
|
|
79
90
|
const records = [];
|
|
91
|
+
const warnings = [];
|
|
80
92
|
for (const name of readdirSync(base)) {
|
|
81
93
|
if (!GOAL_ID.test(name) || !existsSync(governorIntentPath(coordRoot, name)))
|
|
82
94
|
continue;
|
|
83
|
-
|
|
95
|
+
try {
|
|
96
|
+
records.push(readGovernor(coordRoot, name));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
warnings.push({
|
|
100
|
+
goal_id: name,
|
|
101
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
84
104
|
}
|
|
85
|
-
|
|
105
|
+
records.sort((left, right) => right.intent.created_at.localeCompare(left.intent.created_at));
|
|
106
|
+
warnings.sort((left, right) => left.goal_id.localeCompare(right.goal_id));
|
|
107
|
+
return { records, warnings };
|
|
86
108
|
}
|
|
87
109
|
export function collectGovernorWork(coordRoot, rootWorkId) {
|
|
88
110
|
const records = new Map();
|
|
@@ -665,6 +687,21 @@ function validateIntent(intent, goalId) {
|
|
|
665
687
|
if (intent.replanning)
|
|
666
688
|
validateReplanning(intent.replanning, specialists, intent.limits, goalId);
|
|
667
689
|
}
|
|
690
|
+
function assertGovernorSpecialistProfileKeys(specialists) {
|
|
691
|
+
if (!specialists || typeof specialists !== "object" || Array.isArray(specialists))
|
|
692
|
+
return;
|
|
693
|
+
for (const [id, profile] of Object.entries(specialists)) {
|
|
694
|
+
if (!profile || typeof profile !== "object" || Array.isArray(profile))
|
|
695
|
+
continue;
|
|
696
|
+
const unsupported = Object.keys(profile)
|
|
697
|
+
.filter((key) => !GOVERNOR_SPECIALIST_PROFILE_KEY_SET.has(key))
|
|
698
|
+
.sort();
|
|
699
|
+
if (unsupported.length === 0)
|
|
700
|
+
continue;
|
|
701
|
+
throw new Error(`governor specialist ${id} has unsupported key ${JSON.stringify(unsupported[0])}; ` +
|
|
702
|
+
`allowed keys: ${GOVERNOR_SPECIALIST_PROFILE_KEYS.join(", ")}`);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
668
705
|
function normalizeMission(input) {
|
|
669
706
|
if (!Array.isArray(input.acceptance)) {
|
|
670
707
|
throw new Error("governor mission acceptance must be an array");
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { RunQualityConfig, RunQualityConfigResult } from "./types.js";
|
|
2
|
+
export declare const DEFAULT_RUN_QUALITY_CONFIG: RunQualityConfig;
|
|
3
|
+
/** Read and validate the project-owned coord.run_quality object as one unit. */
|
|
4
|
+
export declare function readRunQualityConfig(coordRoot: string): RunQualityConfigResult;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/guard/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAkB,MAAM,YAAY,CAAC;AAE3F,eAAO,MAAM,0BAA0B,EAAE,gBAexC,CAAC;AAgBF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAyD9E"}
|