harnery 0.33.0 → 0.34.1
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/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +4 -0
- 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 +1237 -590
- 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 +1 -1
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +3 -74
- 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.js +10 -1
- 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 +9 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +223 -51
- 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 +11 -5
- 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 +22 -22
- package/dist/core/agents/cli.js +207 -234
- 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 -81
- 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 +4 -5
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +4 -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 +4 -4
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +23 -58
- 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 +8 -32
- 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 +23 -55
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +56 -228
- 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 +4 -3
- package/dist/core/agents/state/session-state.d.ts.map +1 -1
- package/dist/core/agents/state/session-state.js +18 -9
- 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 +12 -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 +63 -25
- 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 +306 -444
- 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 +161 -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 +4 -3
- package/dist/core/presence/blob.d.ts.map +1 -1
- package/dist/core/presence/blob.js +45 -44
- 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/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/claude-desktop.d.ts +0 -47
- package/dist/lib/claude-desktop.d.ts.map +1 -1
- package/dist/lib/claude-desktop.js +1 -169
- 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 +1 -1
- package/dist/lib/instructions/bundle.d.ts.map +1 -1
- package/dist/lib/instructions/bundle.js +1 -1
- 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 +26 -5
- 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 +4 -0
- package/src/commands/adapter.ts +2 -2
- package/src/commands/agents.ts +1530 -593
- 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 +2 -101
- 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 +14 -1
- package/src/commands/events.ts +256 -0
- package/src/commands/governor.ts +18 -4
- package/src/commands/init.ts +253 -57
- package/src/commands/instructions.ts +1 -1
- package/src/commands/journal.ts +4 -13
- package/src/commands/ledger-v3.ts +111 -0
- package/src/commands/presence.ts +11 -10
- 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 +34 -25
- package/src/core/agents/cli.ts +236 -262
- package/src/core/agents/codex-archive-v3.ts +138 -0
- package/src/core/agents/coord-client.ts +75 -188
- package/src/core/agents/finalization.ts +120 -38
- package/src/core/agents/index.ts +4 -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 +29 -60
- package/src/core/agents/render/session-context.ts +10 -31
- 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 +82 -277
- package/src/core/agents/state/live-coordination-view.ts +290 -0
- package/src/core/agents/state/session-state.ts +24 -12
- 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 +14 -6
- package/src/core/hooks/adapter/output.ts +7 -2
- package/src/core/hooks/adapter/parse.ts +80 -38
- package/src/core/hooks/adapter/wiring.ts +119 -13
- package/src/core/hooks/cli.ts +352 -466
- 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 +171 -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 +48 -41
- package/src/core/presence/codec-digest.ts +215 -0
- 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/claude-desktop.ts +1 -232
- 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 +2 -2
- 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 -76
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
- package/dist/core/agents/state/heartbeat-projector.js +0 -581
- 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 -341
- 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 -645
- 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 -582
- package/src/core/hooks/events/ulid.ts +0 -51
- package/src/lib/docs-frontmatter-migrate.ts +0 -427
package/dist/commands/init.js
CHANGED
|
@@ -16,12 +16,18 @@
|
|
|
16
16
|
* already wired, so it's safe to re-run. `--dry-run` previews without writing.
|
|
17
17
|
*/
|
|
18
18
|
import { spawnSync } from "node:child_process";
|
|
19
|
+
import { createHash } from "node:crypto";
|
|
19
20
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
20
21
|
import { dirname, relative, resolve } from "node:path";
|
|
21
22
|
import { fileURLToPath } from "node:url";
|
|
22
23
|
import { DEFAULT_BIN_NAME, pinnedBinName, stripJsonComments } from "../core/config.js";
|
|
24
|
+
import { canonicalJsonV3 } from "../core/events/v3/canonical.js";
|
|
25
|
+
import { ADAPTER_CAPABILITY_PROFILES_V3 } from "../core/events/v3/capabilities.js";
|
|
26
|
+
import { EVENT_V3_SCHEMA_DIGEST } from "../core/events/v3/generated.js";
|
|
27
|
+
import { initializeEventLedgerV3, readEventV3ControlState, sha256V3, } from "../core/events/v3/index.js";
|
|
28
|
+
import { liveEventV3BuildId } from "../core/events/v3/live-routing.js";
|
|
23
29
|
import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
|
|
24
|
-
import { commandWiresSubcommand, groupCommands, makeEntry, } from "../core/hooks/adapter/wiring.js";
|
|
30
|
+
import { agentHookPathForProject, commandWiresSubcommand, diffWiring, groupCommands, hookCommand, isAgentHookCommand, makeEntry, } from "../core/hooks/adapter/wiring.js";
|
|
25
31
|
import { applyInstructions, checkInstructions, } from "../lib/instructions/apply.js";
|
|
26
32
|
import { applyGitHooks, checkGitHooks } from "../lib/instructions/git-hooks.js";
|
|
27
33
|
import { HostAddendumError } from "../lib/instructions/host-addendum.js";
|
|
@@ -53,15 +59,76 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
53
59
|
// init inside any checkout). Without this, re-running init from a host
|
|
54
60
|
// CLI re-stamps the host's name into committed agent-facing surfaces.
|
|
55
61
|
const bin = pinnedBinName(projectRoot) ?? (binName?.trim() ? binName : DEFAULT_BIN_NAME);
|
|
56
|
-
// ── --check: read-only drift report on
|
|
62
|
+
// ── --check: read-only drift report on every init-managed surface ─────
|
|
57
63
|
if (opts.check === true) {
|
|
58
64
|
const { status, issues } = checkInstructions(projectRoot, { binName: bin, adapter });
|
|
65
|
+
let hookCheckError = false;
|
|
66
|
+
let hookDrift = false;
|
|
67
|
+
const settingsPath = resolve(projectRoot, spec.settingsFile);
|
|
68
|
+
const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
|
|
69
|
+
if (!existsSync(settingsPath)) {
|
|
70
|
+
hookDrift = true;
|
|
71
|
+
issues.push(`${spec.settingsFile}: missing (re-run init)`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
try {
|
|
75
|
+
const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
76
|
+
const hookDiff = diffWiring(settings, spec, { agentHookPath: agentHook, adapter });
|
|
77
|
+
hookDrift =
|
|
78
|
+
hookDiff.missing.length > 0 ||
|
|
79
|
+
hookDiff.stale.length > 0 ||
|
|
80
|
+
hookDiff.duplicates.length > 0 ||
|
|
81
|
+
hookDiff.misplaced.length > 0 ||
|
|
82
|
+
hookDiff.orphans.length > 0 ||
|
|
83
|
+
hookDiff.invalidTopLevelKeys.length > 0 ||
|
|
84
|
+
hookDiff.invalidEventKeys.length > 0;
|
|
85
|
+
if (hookDiff.missing.length > 0) {
|
|
86
|
+
issues.push(`${spec.settingsFile}: missing hooks (${hookDiff.missing.map((e) => e.settingsKey).join(", ")})`);
|
|
87
|
+
}
|
|
88
|
+
if (hookDiff.stale.length > 0) {
|
|
89
|
+
issues.push(`${spec.settingsFile}: stale hook commands (${hookDiff.stale.map((e) => e.settingsKey).join(", ")})`);
|
|
90
|
+
}
|
|
91
|
+
if (hookDiff.duplicates.length > 0) {
|
|
92
|
+
issues.push(`${spec.settingsFile}: duplicate hooks (${hookDiff.duplicates.map((e) => e.settingsKey).join(", ")})`);
|
|
93
|
+
}
|
|
94
|
+
if (hookDiff.misplaced.length > 0) {
|
|
95
|
+
issues.push(`${spec.settingsFile}: hooks under the wrong event (${hookDiff.misplaced.map((e) => e.subcommand).join(", ")})`);
|
|
96
|
+
}
|
|
97
|
+
if (hookDiff.orphans.length > 0) {
|
|
98
|
+
issues.push(`${spec.settingsFile}: obsolete hooks (${hookDiff.orphans.join(", ")})`);
|
|
99
|
+
}
|
|
100
|
+
if (hookDiff.invalidTopLevelKeys.length > 0) {
|
|
101
|
+
issues.push(`${spec.settingsFile}: invalid fields (${hookDiff.invalidTopLevelKeys.join(", ")})`);
|
|
102
|
+
}
|
|
103
|
+
if (hookDiff.invalidEventKeys.length > 0) {
|
|
104
|
+
issues.push(`${spec.settingsFile}: unsupported events (${hookDiff.invalidEventKeys.join(", ")})`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
hookCheckError = true;
|
|
109
|
+
issues.push(`${spec.settingsFile}: invalid JSON (${error.message})`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
59
112
|
const gitHooks = checkGitHooks(projectRoot);
|
|
60
113
|
if (gitHooks.status !== "fresh")
|
|
61
114
|
issues.push(...gitHooks.issues);
|
|
62
|
-
const
|
|
115
|
+
const ledger = readEventV3ControlState(projectRoot);
|
|
116
|
+
if (ledger.state !== "active")
|
|
117
|
+
issues.push(`event ledger V3 is ${ledger.state}`);
|
|
118
|
+
const ledgerRuntimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
|
|
119
|
+
if (ledgerRuntimeIssues.length > 0) {
|
|
120
|
+
issues.push(`event ledger V3 is runtime-stale (${ledgerRuntimeIssues.join(", ")})`);
|
|
121
|
+
}
|
|
122
|
+
const merged = status === "error" || hookCheckError
|
|
123
|
+
? "error"
|
|
124
|
+
: hookDrift ||
|
|
125
|
+
gitHooks.status !== "fresh" ||
|
|
126
|
+
ledger.state !== "active" ||
|
|
127
|
+
ledgerRuntimeIssues.length > 0
|
|
128
|
+
? "drift"
|
|
129
|
+
: status;
|
|
63
130
|
const head = merged === "fresh"
|
|
64
|
-
? "harn init --check: instructions + skills +
|
|
131
|
+
? "harn init --check: hooks + instructions + skills + event ledger V3 are current"
|
|
65
132
|
: merged === "drift"
|
|
66
133
|
? "harn init --check: drift found (re-run `init` to refresh)"
|
|
67
134
|
: "harn init --check: error";
|
|
@@ -109,9 +176,37 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
109
176
|
if (stamp)
|
|
110
177
|
actions.push(stamp);
|
|
111
178
|
}
|
|
179
|
+
// ── 1d. universal V3 event ledger ────────────────────────────────────
|
|
180
|
+
if (dryRun) {
|
|
181
|
+
const ledger = readEventV3ControlState(projectRoot);
|
|
182
|
+
const runtimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
|
|
183
|
+
actions.push(ledger.state === "active" && runtimeIssues.length === 0
|
|
184
|
+
? "· event ledger V3 is active"
|
|
185
|
+
: ledger.state === "active"
|
|
186
|
+
? `+ would refresh event ledger V3 runtime profile (${runtimeIssues.join(", ")})`
|
|
187
|
+
: `+ would initialize event ledger V3 (current state: ${ledger.state})`);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const harneryBuild = gitBuild(HARNERY_ROOT);
|
|
191
|
+
const ledgerBefore = readEventV3ControlState(projectRoot);
|
|
192
|
+
const runtimeIssues = eventLedgerV3RuntimeIssues(ledgerBefore, harneryBuild);
|
|
193
|
+
const initialized = initializeEventLedgerV3({
|
|
194
|
+
coordRoot: projectRoot,
|
|
195
|
+
harneryBuild,
|
|
196
|
+
hostBuild: gitBuild(projectRoot),
|
|
197
|
+
configDigest: digestConfig(resolve(coordDir, "config.jsonc")),
|
|
198
|
+
approvalRecordId: "harnery-init-v3-universal",
|
|
199
|
+
forceNewEpoch: runtimeIssues.length > 0,
|
|
200
|
+
});
|
|
201
|
+
actions.push(initialized.archived_epoch
|
|
202
|
+
? `+ refreshed event ledger V3 runtime profile (${runtimeIssues.join(", ")}); archived the prior epoch intact`
|
|
203
|
+
: initialized.initialized
|
|
204
|
+
? "+ initialized event ledger V3"
|
|
205
|
+
: "· event ledger V3 already active");
|
|
206
|
+
}
|
|
112
207
|
// ── 2. adapter hooks ───────────────────────────────────────────────────
|
|
113
208
|
const settingsPath = resolve(projectRoot, spec.settingsFile);
|
|
114
|
-
const agentHook =
|
|
209
|
+
const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
|
|
115
210
|
let settings;
|
|
116
211
|
if (existsSync(settingsPath)) {
|
|
117
212
|
try {
|
|
@@ -133,13 +228,13 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
133
228
|
}
|
|
134
229
|
else if (dryRun) {
|
|
135
230
|
actions.push(`+ would wire ${wired} hook(s), upgrade ${upgraded} stale command(s), and remove ` +
|
|
136
|
-
`${removed}
|
|
231
|
+
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
137
232
|
}
|
|
138
233
|
else {
|
|
139
234
|
mkdirSync(dirname(settingsPath), { recursive: true });
|
|
140
235
|
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`);
|
|
141
236
|
actions.push(`+ wired ${wired} hook(s), upgraded ${upgraded} stale command(s), and removed ` +
|
|
142
|
-
`${removed}
|
|
237
|
+
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
143
238
|
}
|
|
144
239
|
const authorizationReview = codexHookReviewAction(adapter);
|
|
145
240
|
if (authorizationReview)
|
|
@@ -169,6 +264,43 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
169
264
|
emit.text(render(projectRoot, dryRun, actions, [...applied.warnings, ...gitHooks.warnings]));
|
|
170
265
|
});
|
|
171
266
|
}
|
|
267
|
+
function gitBuild(root) {
|
|
268
|
+
const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
|
|
269
|
+
encoding: "utf8",
|
|
270
|
+
timeout: 5000,
|
|
271
|
+
});
|
|
272
|
+
const commit = result.status === 0 ? result.stdout.trim() : "";
|
|
273
|
+
return /^[0-9a-f]{40,64}$/.test(commit)
|
|
274
|
+
? commit
|
|
275
|
+
: createHash("sha256").update(resolve(root)).digest("hex");
|
|
276
|
+
}
|
|
277
|
+
function digestConfig(path) {
|
|
278
|
+
return sha256V3(existsSync(path) ? readFileSync(path) : Buffer.from("{}\n"));
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Runtime gates bound into an immutable V3 epoch. `init` is the explicit
|
|
282
|
+
* upgrade boundary: when code or capability profiles change, it archives the
|
|
283
|
+
* old epoch intact and activates a compatible one instead of letting upgraded
|
|
284
|
+
* hooks fail closed against stale approvals.
|
|
285
|
+
*/
|
|
286
|
+
export function eventLedgerV3RuntimeIssues(control, harneryBuild) {
|
|
287
|
+
if (control.state !== "active")
|
|
288
|
+
return [];
|
|
289
|
+
const issues = [];
|
|
290
|
+
const profile = control.genesis.profile;
|
|
291
|
+
if (profile.initial_schema_digest !== EVENT_V3_SCHEMA_DIGEST)
|
|
292
|
+
issues.push("schema digest");
|
|
293
|
+
if (profile.contract_source_digest !== EVENT_V3_SCHEMA_DIGEST)
|
|
294
|
+
issues.push("contract digest");
|
|
295
|
+
if (!profile.producer_build_ids.includes(liveEventV3BuildId(harneryBuild))) {
|
|
296
|
+
issues.push("producer build");
|
|
297
|
+
}
|
|
298
|
+
const expectedCapabilities = Object.values(ADAPTER_CAPABILITY_PROFILES_V3).map((value) => sha256V3(canonicalJsonV3(value)));
|
|
299
|
+
if (expectedCapabilities.some((digest) => !profile.adapter_capability_profile_digests.includes(digest))) {
|
|
300
|
+
issues.push("adapter capabilities");
|
|
301
|
+
}
|
|
302
|
+
return issues;
|
|
303
|
+
}
|
|
172
304
|
export function codexHookReviewAction(adapter) {
|
|
173
305
|
if (adapter !== "codex")
|
|
174
306
|
return null;
|
|
@@ -185,8 +317,7 @@ export function codexHookReviewAction(adapter) {
|
|
|
185
317
|
* `{ command }`) and ensures the root `version` key when the adapter requires
|
|
186
318
|
* one. Pure (no fs/git) so it's unit-testable.
|
|
187
319
|
*
|
|
188
|
-
*
|
|
189
|
-
* it keeps `stop` from matching `stop-failure`.
|
|
320
|
+
* Token-aware matching keeps `stop` from matching `stop-failure`.
|
|
190
321
|
*/
|
|
191
322
|
export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
192
323
|
if (spec.rootVersion !== undefined && settings.version === undefined) {
|
|
@@ -198,30 +329,41 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
198
329
|
let already = 0;
|
|
199
330
|
let removed = 0;
|
|
200
331
|
let upgraded = 0;
|
|
201
|
-
for (const {
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if (kept.length === 0)
|
|
206
|
-
delete settings.hooks[settingsKey];
|
|
207
|
-
else
|
|
208
|
-
settings.hooks[settingsKey] = kept;
|
|
332
|
+
for (const { subcommand } of spec.legacyEvents ?? []) {
|
|
333
|
+
for (const settingsKey of Object.keys(settings.hooks)) {
|
|
334
|
+
removed += removeCommandsFromKey(settings, settingsKey, (command) => commandWiresSubcommand(command, subcommand));
|
|
335
|
+
}
|
|
209
336
|
}
|
|
210
337
|
for (const { settingsKey, subcommand } of spec.events) {
|
|
211
338
|
const command = hookCommand(spec, agentHookPath, subcommand, adapter);
|
|
212
|
-
const groups = settings.hooks[settingsKey] ?? [];
|
|
213
339
|
let present = false;
|
|
340
|
+
for (const key of Object.keys(settings.hooks)) {
|
|
341
|
+
if (key === settingsKey)
|
|
342
|
+
continue;
|
|
343
|
+
removed += removeCommandsFromKey(settings, key, (candidate) => commandWiresSubcommand(candidate, subcommand));
|
|
344
|
+
}
|
|
345
|
+
const groups = settings.hooks[settingsKey] ?? [];
|
|
346
|
+
const nextGroups = [];
|
|
214
347
|
for (const group of groups) {
|
|
215
|
-
|
|
348
|
+
const normalized = normalizeEventGroup(group, subcommand, command, present);
|
|
349
|
+
if (normalized.found && !present)
|
|
216
350
|
present = true;
|
|
217
|
-
|
|
351
|
+
upgraded += normalized.upgraded;
|
|
352
|
+
removed += normalized.removed;
|
|
353
|
+
if (normalized.group)
|
|
354
|
+
nextGroups.push(normalized.group);
|
|
218
355
|
}
|
|
356
|
+
if (nextGroups.length > 0)
|
|
357
|
+
settings.hooks[settingsKey] = nextGroups;
|
|
358
|
+
else
|
|
359
|
+
delete settings.hooks[settingsKey];
|
|
219
360
|
if (present) {
|
|
220
361
|
already++;
|
|
221
362
|
continue;
|
|
222
363
|
}
|
|
223
|
-
|
|
224
|
-
|
|
364
|
+
const current = settings.hooks[settingsKey] ?? [];
|
|
365
|
+
current.push(makeEntry(spec.entryShape, command));
|
|
366
|
+
settings.hooks[settingsKey] = current;
|
|
225
367
|
wired++;
|
|
226
368
|
}
|
|
227
369
|
return { wired, already, removed, upgraded };
|
|
@@ -236,40 +378,79 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
236
378
|
* that don't set the var. Only the env expansion is quoted so the
|
|
237
379
|
* `agent-hook <subcommand> ` wiring match stays byte-identical.
|
|
238
380
|
*/
|
|
239
|
-
function
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Rewrite any harnery-owned command for `subcommand` inside one hook group to
|
|
245
|
-
* the canonical form, in place. Returns the number of commands rewritten and
|
|
246
|
-
* calls `onPresent` when the subcommand is wired in this group at all.
|
|
247
|
-
*/
|
|
248
|
-
function rewriteStaleCommands(group, subcommand, canonical, onPresent) {
|
|
249
|
-
let rewritten = 0;
|
|
381
|
+
function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
|
|
382
|
+
let found = false;
|
|
383
|
+
let upgraded = 0;
|
|
384
|
+
let removed = 0;
|
|
250
385
|
if ("command" in group && typeof group.command === "string") {
|
|
251
386
|
if (commandWiresSubcommand(group.command, subcommand)) {
|
|
252
|
-
|
|
387
|
+
if (alreadyFound)
|
|
388
|
+
return { group: null, found: true, upgraded: 0, removed: 1 };
|
|
389
|
+
found = true;
|
|
253
390
|
if (group.command !== canonical) {
|
|
254
391
|
group.command = canonical;
|
|
255
|
-
|
|
392
|
+
upgraded++;
|
|
256
393
|
}
|
|
257
394
|
}
|
|
258
395
|
}
|
|
259
396
|
if ("hooks" in group && Array.isArray(group.hooks)) {
|
|
397
|
+
const kept = [];
|
|
260
398
|
for (const hook of group.hooks) {
|
|
261
|
-
if (typeof hook.command !== "string")
|
|
399
|
+
if (typeof hook.command !== "string" || !commandWiresSubcommand(hook.command, subcommand)) {
|
|
400
|
+
kept.push(hook);
|
|
262
401
|
continue;
|
|
263
|
-
|
|
402
|
+
}
|
|
403
|
+
if (alreadyFound || found) {
|
|
404
|
+
removed++;
|
|
264
405
|
continue;
|
|
265
|
-
|
|
406
|
+
}
|
|
407
|
+
found = true;
|
|
266
408
|
if (hook.command !== canonical) {
|
|
267
409
|
hook.command = canonical;
|
|
268
|
-
|
|
410
|
+
upgraded++;
|
|
269
411
|
}
|
|
412
|
+
kept.push(hook);
|
|
270
413
|
}
|
|
414
|
+
group.hooks = kept;
|
|
415
|
+
if (group.hooks.length === 0)
|
|
416
|
+
return { group: null, found, upgraded, removed };
|
|
271
417
|
}
|
|
272
|
-
return
|
|
418
|
+
return { group, found, upgraded, removed };
|
|
419
|
+
}
|
|
420
|
+
/** Remove matching command handlers while preserving unrelated handlers in a mixed group. */
|
|
421
|
+
function removeCommandsFromKey(settings, settingsKey, predicate) {
|
|
422
|
+
const groups = settings.hooks?.[settingsKey];
|
|
423
|
+
if (!Array.isArray(groups))
|
|
424
|
+
return 0;
|
|
425
|
+
let removed = 0;
|
|
426
|
+
const kept = [];
|
|
427
|
+
for (const group of groups) {
|
|
428
|
+
if ("command" in group && typeof group.command === "string") {
|
|
429
|
+
if (predicate(group.command))
|
|
430
|
+
removed++;
|
|
431
|
+
else
|
|
432
|
+
kept.push(group);
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
if ("hooks" in group && Array.isArray(group.hooks)) {
|
|
436
|
+
const handlers = group.hooks.filter((hook) => {
|
|
437
|
+
if (typeof hook.command !== "string" || !predicate(hook.command))
|
|
438
|
+
return true;
|
|
439
|
+
removed++;
|
|
440
|
+
return false;
|
|
441
|
+
});
|
|
442
|
+
group.hooks = handlers;
|
|
443
|
+
if (handlers.length > 0)
|
|
444
|
+
kept.push(group);
|
|
445
|
+
continue;
|
|
446
|
+
}
|
|
447
|
+
kept.push(group);
|
|
448
|
+
}
|
|
449
|
+
if (kept.length === 0)
|
|
450
|
+
delete settings.hooks?.[settingsKey];
|
|
451
|
+
else
|
|
452
|
+
settings.hooks[settingsKey] = kept;
|
|
453
|
+
return removed;
|
|
273
454
|
}
|
|
274
455
|
/**
|
|
275
456
|
* Inverse of {@link wireHooks}: strip every harnery-owned hook entry from a
|
|
@@ -286,21 +467,12 @@ export function unwireHooks(settings) {
|
|
|
286
467
|
return { removed: 0, remaining: 0 };
|
|
287
468
|
let removed = 0;
|
|
288
469
|
for (const key of Object.keys(settings.hooks)) {
|
|
289
|
-
|
|
290
|
-
if (!Array.isArray(groups))
|
|
291
|
-
continue;
|
|
292
|
-
const kept = groups.filter((g) => !groupCommands(g).some((c) => c.includes("agent-hook ")));
|
|
293
|
-
removed += groups.length - kept.length;
|
|
294
|
-
// removing the emptied hook key is the intent (tiny one-shot object)
|
|
295
|
-
if (kept.length === 0)
|
|
296
|
-
delete settings.hooks[key];
|
|
297
|
-
else
|
|
298
|
-
settings.hooks[key] = kept;
|
|
470
|
+
removed += removeCommandsFromKey(settings, key, isAgentHookCommand);
|
|
299
471
|
}
|
|
300
472
|
let remaining = 0;
|
|
301
473
|
for (const groups of Object.values(settings.hooks)) {
|
|
302
474
|
if (Array.isArray(groups))
|
|
303
|
-
remaining += groups.length;
|
|
475
|
+
remaining += groups.flatMap(groupCommands).length;
|
|
304
476
|
}
|
|
305
477
|
// drop the now-empty hooks object so callers see a clean shape
|
|
306
478
|
if (Object.keys(settings.hooks).length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA8BnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAgRrF"}
|
package/dist/commands/journal.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync, statSync, unlinkSync, watch } from "node:fs";
|
|
2
2
|
import { resolve as resolvePath } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { monorepoRoot } from "../core/agents/index.js";
|
|
4
|
+
import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
|
|
4
5
|
import { resolveBinName } from "../core/config.js";
|
|
5
6
|
import { appendEntry, archiveJournal, currentOwnerOrThrow, JOURNAL_CATEGORIES, journalDir, journalPath, lintJournal, listArchives, loadJournal, parseJournal, pruneArchives, resolveOwnerByName, sweepOrphanJournals, } from "../core/journal/index.js";
|
|
6
7
|
/**
|
|
@@ -30,17 +31,6 @@ export function registerJournalCommand(program, emitParam) {
|
|
|
30
31
|
try {
|
|
31
32
|
const owner = currentOwnerOrThrow();
|
|
32
33
|
const doc = appendEntry(owner, cat, body);
|
|
33
|
-
const hb = readHeartbeat(owner);
|
|
34
|
-
emitCanonical({
|
|
35
|
-
type: "state.journal_append",
|
|
36
|
-
owner,
|
|
37
|
-
session: hb?.session_id ?? owner,
|
|
38
|
-
adapter: normalizeAdapter(hb?.platform),
|
|
39
|
-
data: {
|
|
40
|
-
category: cat,
|
|
41
|
-
body_summary: body.length > 1000 ? `${body.slice(0, 997)}...` : body,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
34
|
emit.data({
|
|
45
35
|
instance_id: owner,
|
|
46
36
|
name: doc.header.name,
|
|
@@ -313,7 +303,8 @@ function runRead(opts) {
|
|
|
313
303
|
});
|
|
314
304
|
process.exit(1);
|
|
315
305
|
}
|
|
316
|
-
const
|
|
306
|
+
const root = monorepoRoot();
|
|
307
|
+
const hb = root ? readLiveCoordinationRow(root, owner) : null;
|
|
317
308
|
const staleBanner = renderStaleBannerIfNeeded(hb?.last_heartbeat);
|
|
318
309
|
process.stdout.write(`${staleBanner + renderJournal(doc, limit)}\n`); // lint-ok-emission: pretty render, multi-line markdown for direct TTY/pipe consumption
|
|
319
310
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
3
|
+
/** Inspect or initialize the universal V3 event ledger. */
|
|
4
|
+
export declare function registerLedgerV3Command(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
|
|
5
|
+
//# sourceMappingURL=ledger-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQ1E,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+DN"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { initializeEventLedgerV3, readEventV3ControlState, recoverInvalidEventLedgerV3, sha256V3, } from "../core/events/v3/index.js";
|
|
6
|
+
/** Inspect or initialize the universal V3 event ledger. */
|
|
7
|
+
export function registerLedgerV3Command(program, emit, context) {
|
|
8
|
+
const command = program
|
|
9
|
+
.command("ledger-v3")
|
|
10
|
+
.description("Inspect or initialize the universal event-ledger V3 epoch");
|
|
11
|
+
command
|
|
12
|
+
.command("status")
|
|
13
|
+
.description("Read the V3 control boundary without changing it")
|
|
14
|
+
.action(() => {
|
|
15
|
+
try {
|
|
16
|
+
emit.data(readEventV3ControlState(coordRoot(context)));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
emitFailure(emit, "ledger_v3_status_failed", error);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
command
|
|
23
|
+
.command("initialize")
|
|
24
|
+
.description("Create V3 control state, or archive and replace the current V3 epoch")
|
|
25
|
+
.option("--root <path>", "Explicit coordination root")
|
|
26
|
+
.requiredOption("--approval-record-id <id>", "Durable approval record identifier")
|
|
27
|
+
.option("--force-new-epoch", "Archive the current V3 epoch and create a new one")
|
|
28
|
+
.action((options) => {
|
|
29
|
+
try {
|
|
30
|
+
const root = resolve(options.root ?? coordRoot(context));
|
|
31
|
+
emit.data(initializeEventLedgerV3({
|
|
32
|
+
coordRoot: root,
|
|
33
|
+
harneryBuild: repositoryBuild(resolve(import.meta.dir, "..", "..")),
|
|
34
|
+
hostBuild: repositoryBuild(root),
|
|
35
|
+
configDigest: configDigest(root),
|
|
36
|
+
approvalRecordId: options.approvalRecordId,
|
|
37
|
+
forceNewEpoch: options.forceNewEpoch === true,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
emitFailure(emit, "ledger_v3_initialize_failed", error);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
command
|
|
45
|
+
.command("recover")
|
|
46
|
+
.description("Quarantine one invalid active authority and start a clean V3 epoch")
|
|
47
|
+
.option("--root <path>", "Explicit coordination root")
|
|
48
|
+
.requiredOption("--approval-record-id <id>", "Durable approval record identifier")
|
|
49
|
+
.option("--yes", "Confirm the failed authority should be quarantined")
|
|
50
|
+
.action((options) => {
|
|
51
|
+
try {
|
|
52
|
+
if (!options.yes)
|
|
53
|
+
throw new Error("--yes is required to recover an invalid V3 authority");
|
|
54
|
+
const root = resolve(options.root ?? coordRoot(context));
|
|
55
|
+
emit.data(recoverInvalidEventLedgerV3({
|
|
56
|
+
coordRoot: root,
|
|
57
|
+
harneryBuild: repositoryBuild(resolve(import.meta.dir, "..", "..")),
|
|
58
|
+
hostBuild: repositoryBuild(root),
|
|
59
|
+
configDigest: configDigest(root),
|
|
60
|
+
approvalRecordId: options.approvalRecordId,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
emitFailure(emit, "ledger_v3_recovery_failed", error);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function coordRoot(context) {
|
|
69
|
+
return resolve(context?.resolveCoordRoot?.() ??
|
|
70
|
+
context?.repoRoot ??
|
|
71
|
+
process.env.HARNERY_COORD_ROOT ??
|
|
72
|
+
process.cwd());
|
|
73
|
+
}
|
|
74
|
+
function repositoryBuild(root) {
|
|
75
|
+
const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
|
|
76
|
+
encoding: "utf8",
|
|
77
|
+
timeout: 5000,
|
|
78
|
+
});
|
|
79
|
+
const commit = result.status === 0 ? result.stdout.trim() : "";
|
|
80
|
+
if (/^[0-9a-f]{40,64}$/.test(commit))
|
|
81
|
+
return commit;
|
|
82
|
+
return createHash("sha256").update(resolve(root)).digest("hex");
|
|
83
|
+
}
|
|
84
|
+
function configDigest(root) {
|
|
85
|
+
const path = resolve(root, ".harnery", "config.jsonc");
|
|
86
|
+
return sha256V3(existsSync(path) ? readFileSync(path) : Buffer.from("{}\n"));
|
|
87
|
+
}
|
|
88
|
+
function emitFailure(emit, code, error) {
|
|
89
|
+
emit.error({ code, message: error instanceof Error ? error.message : String(error) });
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsBnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA8KjF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { monorepoRoot } from "../core/agents/coord-client.js";
|
|
2
|
-
import {
|
|
2
|
+
import { emitEventV3, normalizeAdapter, resolveOwner } from "../core/agents/index.js";
|
|
3
|
+
import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
|
|
3
4
|
import { fetchPresence, publishPresence, readRemoteMachines, relayDaemonStatus, runRelayDaemon, } from "../core/presence/index.js";
|
|
4
5
|
import { ageSeconds, applyDetection, clearPresence, formatAge, presenceFilePath, readPresence, writePresence, } from "../lib/presence.js";
|
|
5
6
|
/**
|
|
@@ -198,12 +199,17 @@ function emitPresenceChange(from, to, source) {
|
|
|
198
199
|
const owner = resolveOwner();
|
|
199
200
|
if (!owner)
|
|
200
201
|
return;
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
202
|
+
const root = monorepoRoot();
|
|
203
|
+
const hb = root ? readLiveCoordinationRow(root, owner) : null;
|
|
204
|
+
emitEventV3({
|
|
204
205
|
owner,
|
|
205
206
|
session: hb?.session_id ?? owner,
|
|
206
207
|
adapter: normalizeAdapter(hb?.platform),
|
|
207
|
-
|
|
208
|
+
observation: {
|
|
209
|
+
event_type: "coord.presence_changed",
|
|
210
|
+
prior_state: from,
|
|
211
|
+
new_state: to,
|
|
212
|
+
reason: `presence_${source}`,
|
|
213
|
+
},
|
|
208
214
|
});
|
|
209
215
|
}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Scope: a deliberately small set of file types: durable identities,
|
|
6
6
|
* archived journals, council manifests. The high-churn machine-local
|
|
7
|
-
*
|
|
7
|
+
* state (ledgers/, .pid-map/, active/, .last-intent.*) stays put.
|
|
8
8
|
*
|
|
9
9
|
* Subcommands:
|
|
10
10
|
* init: interactive: `rclone config` walks through Google OAuth, then
|
package/dist/commands/sync.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Scope: a deliberately small set of file types: durable identities,
|
|
6
6
|
* archived journals, council manifests. The high-churn machine-local
|
|
7
|
-
*
|
|
7
|
+
* state (ledgers/, .pid-map/, active/, .last-intent.*) stays put.
|
|
8
8
|
*
|
|
9
9
|
* Subcommands:
|
|
10
10
|
* init: interactive: `rclone config` walks through Google OAuth, then
|
package/dist/commands/web.d.ts
CHANGED
|
@@ -19,5 +19,11 @@ export declare function resolveMaxOldSpaceMb(flag?: string): number;
|
|
|
19
19
|
* wins without clobbering flags the caller set (source maps, inspector, …).
|
|
20
20
|
*/
|
|
21
21
|
export declare function nodeOptionsWithHeapCap(mb: number): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Probe the exact localhost socket Next will claim. This is deliberately a
|
|
24
|
+
* check-and-report step, not an alternate-port allocator: Harnery keeps one
|
|
25
|
+
* memorable URL and asks the caller to resolve a real conflict explicitly.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isWebPortAvailable(port: number): Promise<boolean>;
|
|
22
28
|
export declare function registerWebCommand(program: Command, emit: EmitContext): void;
|
|
23
29
|
//# sourceMappingURL=web.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiCnD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AA8BD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAevE;AAsBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA0K5E"}
|