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
|
@@ -3,7 +3,7 @@ import { dirname, isAbsolute, resolve } from "node:path";
|
|
|
3
3
|
import { adapterProofInputs, createBuiltinAdapterRegistry, probeBinaryVersion, readAttestation, } from "../core/adapters/index.js";
|
|
4
4
|
import { workflowSubscriptionOnly } from "../core/config.js";
|
|
5
5
|
import { inspectAdapterSpread } from "../core/governor/adapter-spread.js";
|
|
6
|
-
import { approveGovernorPlan, configureGovernorService, createGovernor, governorServiceLogPath,
|
|
6
|
+
import { approveGovernorPlan, configureGovernorService, createGovernor, governorServiceLogPath, listGovernorsWithWarnings, readGovernor, readGovernorPlan, readGovernorServiceConfig, readGovernorServiceStatus, rejectGovernorPlan, requestGovernorServiceStop, retryGovernorPlan, runGovernor, runGovernorServiceDaemon, spawnGovernorService, } from "../core/governor/index.js";
|
|
7
7
|
import { findCoordRoot } from "../core/hooks/resolve/coord-root.js";
|
|
8
8
|
import { loadPolicyFile } from "../core/policy/index.js";
|
|
9
9
|
export function registerGovernorCommand(program, emit) {
|
|
@@ -83,16 +83,22 @@ export function registerGovernorCommand(program, emit) {
|
|
|
83
83
|
.option("--json", "Emit complete governor records as JSON")
|
|
84
84
|
.action((opts) => {
|
|
85
85
|
withGovernorRoot(emit, (coordRoot) => {
|
|
86
|
-
const records =
|
|
86
|
+
const { records, warnings } = listGovernorsWithWarnings(coordRoot);
|
|
87
87
|
if (opts.json) {
|
|
88
88
|
emit.config({ format: "json" });
|
|
89
89
|
emit.data(records);
|
|
90
|
+
for (const warning of warnings) {
|
|
91
|
+
emit.log(renderGovernorListWarning(warning.goal_id, warning.reason), "warn");
|
|
92
|
+
}
|
|
90
93
|
}
|
|
91
|
-
else if (records.length === 0) {
|
|
94
|
+
else if (records.length === 0 && warnings.length === 0) {
|
|
92
95
|
emit.text("no durable governors\n");
|
|
93
96
|
}
|
|
94
97
|
else {
|
|
95
|
-
emit.text(`${
|
|
98
|
+
emit.text(`${[
|
|
99
|
+
...records.map(renderGovernorRow),
|
|
100
|
+
...warnings.map((warning) => renderGovernorListWarning(warning.goal_id, warning.reason)),
|
|
101
|
+
].join("\n")}\n`);
|
|
96
102
|
}
|
|
97
103
|
});
|
|
98
104
|
});
|
|
@@ -693,6 +699,9 @@ function renderPlanRow(plan) {
|
|
|
693
699
|
const review = plan.review ? ` review:${plan.review.status}` : "";
|
|
694
700
|
return `${plan.request.id} ${plan.status.padEnd(18)} ${plan.request.prior_root_work_id}${review}`;
|
|
695
701
|
}
|
|
702
|
+
function renderGovernorListWarning(goalId, reason) {
|
|
703
|
+
return `warning ${goalId} unreadable: ${reason}`;
|
|
704
|
+
}
|
|
696
705
|
function delay(ms) {
|
|
697
706
|
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
698
707
|
}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -17,9 +17,18 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { Command } from "commander";
|
|
19
19
|
import type { EmitContext } from "../commander.js";
|
|
20
|
+
import type { EventV3ControlState } from "../core/events/v3/control.js";
|
|
20
21
|
import { type AdapterId, type AdapterSpec } from "../core/hooks/adapter/events.js";
|
|
21
22
|
import { type SettingsFile } from "../core/hooks/adapter/wiring.js";
|
|
22
23
|
export declare function registerInitCommand(program: Command, emit: EmitContext, binName?: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Runtime gates bound into an immutable V3 epoch. `init` is the explicit
|
|
26
|
+
* upgrade boundary: when code or capability profiles change, it archives the
|
|
27
|
+
* old epoch intact and activates a compatible one instead of letting upgraded
|
|
28
|
+
* hooks fail closed against stale approvals.
|
|
29
|
+
*/
|
|
30
|
+
export declare function eventLedgerV3RuntimeIssues(control: EventV3ControlState, harneryBuild: string): string[];
|
|
31
|
+
export declare function codexHookReviewAction(adapter: AdapterId): string | null;
|
|
23
32
|
/**
|
|
24
33
|
* Merge agent-hook entries into a adapter settings object in place, idempotently.
|
|
25
34
|
* Preserves every existing hook; rewrites events already wired to
|
|
@@ -29,8 +38,7 @@ export declare function registerInitCommand(program: Command, emit: EmitContext,
|
|
|
29
38
|
* `{ command }`) and ensures the root `version` key when the adapter requires
|
|
30
39
|
* one. Pure (no fs/git) so it's unit-testable.
|
|
31
40
|
*
|
|
32
|
-
*
|
|
33
|
-
* it keeps `stop` from matching `stop-failure`.
|
|
41
|
+
* Token-aware matching keeps `stop` from matching `stop-failure`.
|
|
34
42
|
*/
|
|
35
43
|
export declare function wireHooks(settings: SettingsFile, spec: AdapterSpec, agentHookPath: string, adapter: AdapterId): {
|
|
36
44
|
wired: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQxE,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAmBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA+P/F;AAiBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAoBV;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8CvE;AAwFD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAa1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmDhG;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCxF"}
|
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,14 +228,17 @@ 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
|
}
|
|
239
|
+
const authorizationReview = codexHookReviewAction(adapter);
|
|
240
|
+
if (authorizationReview)
|
|
241
|
+
actions.push(authorizationReview);
|
|
144
242
|
// ── 3. agent-facing instructions block + skills ────────────────────────
|
|
145
243
|
// A misconfigured host addendum aborts here rather than half-writing: the
|
|
146
244
|
// apply step validates the configured source before it touches a file, so
|
|
@@ -166,6 +264,50 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
166
264
|
emit.text(render(projectRoot, dryRun, actions, [...applied.warnings, ...gitHooks.warnings]));
|
|
167
265
|
});
|
|
168
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
|
+
}
|
|
304
|
+
export function codexHookReviewAction(adapter) {
|
|
305
|
+
if (adapter !== "codex")
|
|
306
|
+
return null;
|
|
307
|
+
return ("! Codex authorizes hook commands separately. Before starting work, review them in " +
|
|
308
|
+
"the terminal UI with `/hooks` or in Codex Desktop under Settings > Hooks. " +
|
|
309
|
+
"After approval, start a fresh task so SessionStart can run.");
|
|
310
|
+
}
|
|
169
311
|
/**
|
|
170
312
|
* Merge agent-hook entries into a adapter settings object in place, idempotently.
|
|
171
313
|
* Preserves every existing hook; rewrites events already wired to
|
|
@@ -175,8 +317,7 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
175
317
|
* `{ command }`) and ensures the root `version` key when the adapter requires
|
|
176
318
|
* one. Pure (no fs/git) so it's unit-testable.
|
|
177
319
|
*
|
|
178
|
-
*
|
|
179
|
-
* it keeps `stop` from matching `stop-failure`.
|
|
320
|
+
* Token-aware matching keeps `stop` from matching `stop-failure`.
|
|
180
321
|
*/
|
|
181
322
|
export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
182
323
|
if (spec.rootVersion !== undefined && settings.version === undefined) {
|
|
@@ -188,30 +329,41 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
188
329
|
let already = 0;
|
|
189
330
|
let removed = 0;
|
|
190
331
|
let upgraded = 0;
|
|
191
|
-
for (const {
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (kept.length === 0)
|
|
196
|
-
delete settings.hooks[settingsKey];
|
|
197
|
-
else
|
|
198
|
-
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
|
+
}
|
|
199
336
|
}
|
|
200
337
|
for (const { settingsKey, subcommand } of spec.events) {
|
|
201
338
|
const command = hookCommand(spec, agentHookPath, subcommand, adapter);
|
|
202
|
-
const groups = settings.hooks[settingsKey] ?? [];
|
|
203
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 = [];
|
|
204
347
|
for (const group of groups) {
|
|
205
|
-
|
|
348
|
+
const normalized = normalizeEventGroup(group, subcommand, command, present);
|
|
349
|
+
if (normalized.found && !present)
|
|
206
350
|
present = true;
|
|
207
|
-
|
|
351
|
+
upgraded += normalized.upgraded;
|
|
352
|
+
removed += normalized.removed;
|
|
353
|
+
if (normalized.group)
|
|
354
|
+
nextGroups.push(normalized.group);
|
|
208
355
|
}
|
|
356
|
+
if (nextGroups.length > 0)
|
|
357
|
+
settings.hooks[settingsKey] = nextGroups;
|
|
358
|
+
else
|
|
359
|
+
delete settings.hooks[settingsKey];
|
|
209
360
|
if (present) {
|
|
210
361
|
already++;
|
|
211
362
|
continue;
|
|
212
363
|
}
|
|
213
|
-
|
|
214
|
-
|
|
364
|
+
const current = settings.hooks[settingsKey] ?? [];
|
|
365
|
+
current.push(makeEntry(spec.entryShape, command));
|
|
366
|
+
settings.hooks[settingsKey] = current;
|
|
215
367
|
wired++;
|
|
216
368
|
}
|
|
217
369
|
return { wired, already, removed, upgraded };
|
|
@@ -226,40 +378,79 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
226
378
|
* that don't set the var. Only the env expansion is quoted so the
|
|
227
379
|
* `agent-hook <subcommand> ` wiring match stays byte-identical.
|
|
228
380
|
*/
|
|
229
|
-
function
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Rewrite any harnery-owned command for `subcommand` inside one hook group to
|
|
235
|
-
* the canonical form, in place. Returns the number of commands rewritten and
|
|
236
|
-
* calls `onPresent` when the subcommand is wired in this group at all.
|
|
237
|
-
*/
|
|
238
|
-
function rewriteStaleCommands(group, subcommand, canonical, onPresent) {
|
|
239
|
-
let rewritten = 0;
|
|
381
|
+
function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
|
|
382
|
+
let found = false;
|
|
383
|
+
let upgraded = 0;
|
|
384
|
+
let removed = 0;
|
|
240
385
|
if ("command" in group && typeof group.command === "string") {
|
|
241
386
|
if (commandWiresSubcommand(group.command, subcommand)) {
|
|
242
|
-
|
|
387
|
+
if (alreadyFound)
|
|
388
|
+
return { group: null, found: true, upgraded: 0, removed: 1 };
|
|
389
|
+
found = true;
|
|
243
390
|
if (group.command !== canonical) {
|
|
244
391
|
group.command = canonical;
|
|
245
|
-
|
|
392
|
+
upgraded++;
|
|
246
393
|
}
|
|
247
394
|
}
|
|
248
395
|
}
|
|
249
396
|
if ("hooks" in group && Array.isArray(group.hooks)) {
|
|
397
|
+
const kept = [];
|
|
250
398
|
for (const hook of group.hooks) {
|
|
251
|
-
if (typeof hook.command !== "string")
|
|
399
|
+
if (typeof hook.command !== "string" || !commandWiresSubcommand(hook.command, subcommand)) {
|
|
400
|
+
kept.push(hook);
|
|
252
401
|
continue;
|
|
253
|
-
|
|
402
|
+
}
|
|
403
|
+
if (alreadyFound || found) {
|
|
404
|
+
removed++;
|
|
254
405
|
continue;
|
|
255
|
-
|
|
406
|
+
}
|
|
407
|
+
found = true;
|
|
256
408
|
if (hook.command !== canonical) {
|
|
257
409
|
hook.command = canonical;
|
|
258
|
-
|
|
410
|
+
upgraded++;
|
|
259
411
|
}
|
|
412
|
+
kept.push(hook);
|
|
260
413
|
}
|
|
414
|
+
group.hooks = kept;
|
|
415
|
+
if (group.hooks.length === 0)
|
|
416
|
+
return { group: null, found, upgraded, removed };
|
|
261
417
|
}
|
|
262
|
-
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;
|
|
263
454
|
}
|
|
264
455
|
/**
|
|
265
456
|
* Inverse of {@link wireHooks}: strip every harnery-owned hook entry from a
|
|
@@ -276,21 +467,12 @@ export function unwireHooks(settings) {
|
|
|
276
467
|
return { removed: 0, remaining: 0 };
|
|
277
468
|
let removed = 0;
|
|
278
469
|
for (const key of Object.keys(settings.hooks)) {
|
|
279
|
-
|
|
280
|
-
if (!Array.isArray(groups))
|
|
281
|
-
continue;
|
|
282
|
-
const kept = groups.filter((g) => !groupCommands(g).some((c) => c.includes("agent-hook ")));
|
|
283
|
-
removed += groups.length - kept.length;
|
|
284
|
-
// removing the emptied hook key is the intent (tiny one-shot object)
|
|
285
|
-
if (kept.length === 0)
|
|
286
|
-
delete settings.hooks[key];
|
|
287
|
-
else
|
|
288
|
-
settings.hooks[key] = kept;
|
|
470
|
+
removed += removeCommandsFromKey(settings, key, isAgentHookCommand);
|
|
289
471
|
}
|
|
290
472
|
let remaining = 0;
|
|
291
473
|
for (const groups of Object.values(settings.hooks)) {
|
|
292
474
|
if (Array.isArray(groups))
|
|
293
|
-
remaining += groups.length;
|
|
475
|
+
remaining += groups.flatMap(groupCommands).length;
|
|
294
476
|
}
|
|
295
477
|
// drop the now-empty hooks object so callers see a clean shape
|
|
296
478
|
if (Object.keys(settings.hooks).length === 0)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAcnD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmDrF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { countTokens } from "gpt-tokenizer/model/gpt-4o";
|
|
5
|
+
import { monorepoRoot } from "../core/agents/index.js";
|
|
6
|
+
import { buildInstructionBundle, } from "../lib/instructions/bundle.js";
|
|
7
|
+
export function registerInstructionsCommand(program, emit) {
|
|
8
|
+
const command = program
|
|
9
|
+
.command("instructions")
|
|
10
|
+
.description("Inspect and version the repo-authored instruction bundle loaded by each adapter.");
|
|
11
|
+
command
|
|
12
|
+
.command("manifest [paths...]")
|
|
13
|
+
.description("Emit a machine-readable bundle manifest for one or more working paths")
|
|
14
|
+
.option("--adapter <adapter>", "claude-code, cursor, codex, or all", "all")
|
|
15
|
+
.option("--format <type>", "Output format: json or table", "json")
|
|
16
|
+
.option("-o, --output <file>", "Write the complete JSON manifest to a file")
|
|
17
|
+
.action((paths, options) => {
|
|
18
|
+
if (options.format === "json")
|
|
19
|
+
emit.config({ format: "json" });
|
|
20
|
+
const coordRoot = monorepoRoot() ?? process.cwd();
|
|
21
|
+
const adapters = parseAdapters(options.adapter);
|
|
22
|
+
const profiles = (paths.length > 0 ? paths : [process.cwd()]).flatMap((path) => adapters.map((adapter) => enrichBundle(buildInstructionBundle({ coordRoot, cwd: resolve(path), adapter }), coordRoot)));
|
|
23
|
+
const manifest = {
|
|
24
|
+
ok: true,
|
|
25
|
+
schema_version: 1,
|
|
26
|
+
generated_at: new Date().toISOString(),
|
|
27
|
+
source_commit: gitHead(coordRoot),
|
|
28
|
+
tokenizer: "o200k_base",
|
|
29
|
+
coord_root: ".",
|
|
30
|
+
profile_count: profiles.length,
|
|
31
|
+
profiles,
|
|
32
|
+
};
|
|
33
|
+
if (options.output) {
|
|
34
|
+
const output = resolve(options.output);
|
|
35
|
+
writeFileSync(output, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
36
|
+
emit.data({
|
|
37
|
+
ok: true,
|
|
38
|
+
output,
|
|
39
|
+
schema_version: manifest.schema_version,
|
|
40
|
+
generated_at: manifest.generated_at,
|
|
41
|
+
source_commit: manifest.source_commit,
|
|
42
|
+
profile_count: manifest.profile_count,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
emit.data(manifest);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function parseAdapters(value) {
|
|
51
|
+
if (value === "all")
|
|
52
|
+
return ["claude-code", "cursor", "codex"];
|
|
53
|
+
if (value === "claude-code" || value === "cursor" || value === "codex")
|
|
54
|
+
return [value];
|
|
55
|
+
throw new Error(`unsupported adapter '${value}' (expected claude-code, cursor, codex, or all)`);
|
|
56
|
+
}
|
|
57
|
+
function enrichBundle(bundle, coordRoot) {
|
|
58
|
+
const components = bundle.components.map((component) => enrichComponent(component, coordRoot));
|
|
59
|
+
const canonicalSources = bundle.canonical_sources.map((component) => enrichComponent(component, coordRoot));
|
|
60
|
+
return {
|
|
61
|
+
...bundle,
|
|
62
|
+
coord_root: ".",
|
|
63
|
+
components,
|
|
64
|
+
canonical_sources: canonicalSources,
|
|
65
|
+
totals: totals(components),
|
|
66
|
+
canonical_source_totals: totals(canonicalSources),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function enrichComponent(component, coordRoot) {
|
|
70
|
+
const bytes = readFileSync(resolve(coordRoot, component.path));
|
|
71
|
+
const text = bytes.includes(0) ? null : bytes.toString("utf8");
|
|
72
|
+
return {
|
|
73
|
+
...component,
|
|
74
|
+
chars: text?.length ?? null,
|
|
75
|
+
tokens: text === null ? null : countTokens(text),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function totals(components) {
|
|
79
|
+
const roles = ["always_loaded", "just_in_time", "runtime_config"];
|
|
80
|
+
return {
|
|
81
|
+
files: components.length,
|
|
82
|
+
bytes: components.reduce((sum, component) => sum + component.bytes, 0),
|
|
83
|
+
tokens: components.reduce((sum, component) => sum + (component.tokens ?? 0), 0),
|
|
84
|
+
by_role: Object.fromEntries(roles.map((role) => {
|
|
85
|
+
const selected = components.filter((component) => component.role === role);
|
|
86
|
+
return [
|
|
87
|
+
role,
|
|
88
|
+
{
|
|
89
|
+
files: selected.length,
|
|
90
|
+
bytes: selected.reduce((sum, component) => sum + component.bytes, 0),
|
|
91
|
+
tokens: selected.reduce((sum, component) => sum + (component.tokens ?? 0), 0),
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
})),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function gitHead(root) {
|
|
98
|
+
const result = spawnSync("git", ["rev-parse", "HEAD"], { cwd: root, encoding: "utf8" });
|
|
99
|
+
return result.status === 0 ? result.stdout.trim() : null;
|
|
100
|
+
}
|
|
@@ -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"}
|