harnery 0.33.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/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 +1220 -588
- 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 +305 -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 +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 +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 +1512 -592
- 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 +351 -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 +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 +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
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { copyFileSync, createReadStream, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
2
|
import { homedir } from "node:os";
|
|
4
3
|
import { basename, dirname, join } from "node:path";
|
|
5
|
-
import { createInterface } from "node:readline";
|
|
6
4
|
const SESSIONS_DIRNAME = "claude-code-sessions";
|
|
7
5
|
function isWsl() {
|
|
8
6
|
if (process.env.WSL_DISTRO_NAME)
|
|
@@ -220,169 +218,3 @@ export function applyMirror(plan) {
|
|
|
220
218
|
}
|
|
221
219
|
return { copied };
|
|
222
220
|
}
|
|
223
|
-
/**
|
|
224
|
-
* Read the latest durable lifecycle declaration for every Harnery session.
|
|
225
|
-
*
|
|
226
|
-
* The canonical ledger rotates into `events-*.ndjson` archives. Stream each
|
|
227
|
-
* file rather than loading the whole history into one string, then compare
|
|
228
|
-
* event timestamps because adapter replay may append an older event later.
|
|
229
|
-
* Records are indexed by both session_id and instance_id so a desktop
|
|
230
|
-
* cliSessionId can match either identity shape used by older adapters.
|
|
231
|
-
*/
|
|
232
|
-
export async function readDesktopLifecycleIndex(coordRoot) {
|
|
233
|
-
const coordDir = join(coordRoot, ".harnery");
|
|
234
|
-
const archives = safeReaddir(coordDir)
|
|
235
|
-
.filter((name) => name.startsWith("events-") && name.endsWith(".ndjson"))
|
|
236
|
-
.sort();
|
|
237
|
-
const files = [...archives, "events.ndjson"]
|
|
238
|
-
.map((name) => join(coordDir, name))
|
|
239
|
-
.filter((path) => existsSync(path));
|
|
240
|
-
const records = new Map();
|
|
241
|
-
const timestamps = new Map();
|
|
242
|
-
for (const file of files) {
|
|
243
|
-
let lines = null;
|
|
244
|
-
try {
|
|
245
|
-
lines = createInterface({
|
|
246
|
-
input: createReadStream(file, { encoding: "utf8" }),
|
|
247
|
-
crlfDelay: Infinity,
|
|
248
|
-
});
|
|
249
|
-
for await (const line of lines) {
|
|
250
|
-
if (!line.trim())
|
|
251
|
-
continue;
|
|
252
|
-
let raw;
|
|
253
|
-
try {
|
|
254
|
-
raw = JSON.parse(line);
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
if (!raw || typeof raw !== "object")
|
|
260
|
-
continue;
|
|
261
|
-
const event = raw;
|
|
262
|
-
if (event.event_type !== "state.task_state" || typeof event.ts !== "string")
|
|
263
|
-
continue;
|
|
264
|
-
const data = event.data;
|
|
265
|
-
if (!data || typeof data !== "object")
|
|
266
|
-
continue;
|
|
267
|
-
const state = data.state;
|
|
268
|
-
if (state !== "active" && state !== "blocked" && state !== "done")
|
|
269
|
-
continue;
|
|
270
|
-
const instanceId = typeof event.instance_id === "string" ? event.instance_id : null;
|
|
271
|
-
const sessionId = typeof event.session_id === "string" ? event.session_id : null;
|
|
272
|
-
const reasonValue = data.reason;
|
|
273
|
-
const record = {
|
|
274
|
-
state,
|
|
275
|
-
updatedAt: event.ts,
|
|
276
|
-
instanceId,
|
|
277
|
-
sessionId,
|
|
278
|
-
reason: typeof reasonValue === "string" && reasonValue.length > 0 ? reasonValue : null,
|
|
279
|
-
};
|
|
280
|
-
const timestamp = Number.isFinite(Date.parse(event.ts)) ? Date.parse(event.ts) : 0;
|
|
281
|
-
for (const key of new Set([sessionId, instanceId].filter((value) => !!value))) {
|
|
282
|
-
const priorTimestamp = timestamps.get(key);
|
|
283
|
-
if (priorTimestamp !== undefined && priorTimestamp > timestamp)
|
|
284
|
-
continue;
|
|
285
|
-
timestamps.set(key, timestamp);
|
|
286
|
-
records.set(key, record);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
catch {
|
|
291
|
-
// A missing or concurrently rotated event file cannot make tidy unsafe:
|
|
292
|
-
// absent lifecycle evidence leaves entries unmatched and therefore skipped.
|
|
293
|
-
}
|
|
294
|
-
finally {
|
|
295
|
-
lines?.close();
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return records;
|
|
299
|
-
}
|
|
300
|
-
/** Select desktop entries whose durable lifecycle is done. */
|
|
301
|
-
export function planTidy(accounts, lifecycleBySession, opts = {}) {
|
|
302
|
-
const selectedAccounts = accounts.filter((account) => !opts.accounts?.length ||
|
|
303
|
-
opts.accounts.some((prefix) => account.accountUuid.startsWith(prefix)));
|
|
304
|
-
const actions = [];
|
|
305
|
-
const skipped = [];
|
|
306
|
-
for (const account of selectedAccounts) {
|
|
307
|
-
for (const entry of account.entries) {
|
|
308
|
-
const lifecycle = lifecycleForEntry(entry, lifecycleBySession);
|
|
309
|
-
if (entry.isArchived) {
|
|
310
|
-
skipped.push({ entry, reason: "already_archived", lifecycle });
|
|
311
|
-
continue;
|
|
312
|
-
}
|
|
313
|
-
if (hasLifecyclePrefix(entry.title, "BLOCKED")) {
|
|
314
|
-
skipped.push({ entry, reason: "blocked_title", lifecycle });
|
|
315
|
-
continue;
|
|
316
|
-
}
|
|
317
|
-
if (lifecycle) {
|
|
318
|
-
if (lifecycle.state === "done") {
|
|
319
|
-
actions.push({ entry, source: "lifecycle", lifecycle });
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
skipped.push({ entry, reason: `lifecycle_${lifecycle.state}`, lifecycle });
|
|
323
|
-
}
|
|
324
|
-
continue;
|
|
325
|
-
}
|
|
326
|
-
if (opts.includeLegacyPrefix && hasLifecyclePrefix(entry.title, "DONE")) {
|
|
327
|
-
actions.push({ entry, source: "legacy-prefix", lifecycle: null });
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
skipped.push({ entry, reason: "unmatched", lifecycle: null });
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return { actions, skipped };
|
|
335
|
-
}
|
|
336
|
-
/** Apply a tidy plan with same-directory temp files and atomic renames. */
|
|
337
|
-
export function applyTidy(plan) {
|
|
338
|
-
let archived = 0;
|
|
339
|
-
let alreadyArchived = 0;
|
|
340
|
-
for (const action of plan.actions) {
|
|
341
|
-
if (archiveEntry(action.entry.file))
|
|
342
|
-
archived++;
|
|
343
|
-
else
|
|
344
|
-
alreadyArchived++;
|
|
345
|
-
}
|
|
346
|
-
return { archived, alreadyArchived };
|
|
347
|
-
}
|
|
348
|
-
function lifecycleForEntry(entry, lifecycleBySession) {
|
|
349
|
-
if (entry.cliSessionId) {
|
|
350
|
-
const lifecycle = lifecycleBySession.get(entry.cliSessionId);
|
|
351
|
-
if (lifecycle)
|
|
352
|
-
return lifecycle;
|
|
353
|
-
}
|
|
354
|
-
return entry.sessionId ? (lifecycleBySession.get(entry.sessionId) ?? null) : null;
|
|
355
|
-
}
|
|
356
|
-
function hasLifecyclePrefix(title, state) {
|
|
357
|
-
if (!title)
|
|
358
|
-
return false;
|
|
359
|
-
return new RegExp(`^\\s*\\[${state}\\](?:\\s*-|\\s|$)`, "i").test(title);
|
|
360
|
-
}
|
|
361
|
-
function archiveEntry(file) {
|
|
362
|
-
const text = readFileSync(file, "utf8");
|
|
363
|
-
const raw = JSON.parse(text);
|
|
364
|
-
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
365
|
-
throw new Error(`desktop entry is not a JSON object: ${file}`);
|
|
366
|
-
}
|
|
367
|
-
const entry = raw;
|
|
368
|
-
if (entry.isArchived === true)
|
|
369
|
-
return false;
|
|
370
|
-
entry.isArchived = true;
|
|
371
|
-
const pretty = text.includes("\n");
|
|
372
|
-
const trailingNewline = text.endsWith("\n") ? "\n" : "";
|
|
373
|
-
const next = `${JSON.stringify(entry, null, pretty ? 2 : undefined)}${trailingNewline}`;
|
|
374
|
-
const temp = join(dirname(file), `.${basename(file)}.${process.pid}.${randomUUID()}.tmp`);
|
|
375
|
-
try {
|
|
376
|
-
writeFileSync(temp, next, { encoding: "utf8", mode: statSync(file).mode });
|
|
377
|
-
renameSync(temp, file);
|
|
378
|
-
}
|
|
379
|
-
finally {
|
|
380
|
-
try {
|
|
381
|
-
unlinkSync(temp);
|
|
382
|
-
}
|
|
383
|
-
catch {
|
|
384
|
-
// rename already consumed the temp file, or creation failed before it existed
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
return true;
|
|
388
|
-
}
|
|
@@ -58,8 +58,6 @@ export interface SelfSection {
|
|
|
58
58
|
instance_id: string;
|
|
59
59
|
session_age_secs: number;
|
|
60
60
|
task: string | null;
|
|
61
|
-
last_tool: string | null;
|
|
62
|
-
last_tool_target: string | null;
|
|
63
61
|
files_held: string[];
|
|
64
62
|
}
|
|
65
63
|
export interface TimeSection {
|
|
@@ -91,7 +89,6 @@ export interface PeersSection {
|
|
|
91
89
|
instance_id_short: string;
|
|
92
90
|
age_min: number;
|
|
93
91
|
files: number;
|
|
94
|
-
last_tool: string | null;
|
|
95
92
|
task: string | null;
|
|
96
93
|
}[];
|
|
97
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/context/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/context/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
import { monorepoRoot,
|
|
3
|
+
import { monorepoRoot, resolveOwner } from "../../core/agents/index.js";
|
|
4
|
+
import { readLiveCoordinationRow, readLiveCoordinationRows, } from "../../core/agents/state/live-coordination-view.js";
|
|
4
5
|
import { exec } from "../exec.js";
|
|
5
6
|
import { NO_DATA } from "../format.js";
|
|
6
7
|
export const DEFAULT_SECTIONS = [
|
|
@@ -48,17 +49,14 @@ function buildSelf() {
|
|
|
48
49
|
const owner = resolveOwner();
|
|
49
50
|
if (!owner)
|
|
50
51
|
throw new Error("not in an agent session (no pid-map entry)");
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
// heartbeat no reader ever resolves — so the session still looks unhealable
|
|
56
|
-
// and now has a junk file shadowing it. Same rule as `noHeartbeatMessage` in
|
|
57
|
-
// the agents command.
|
|
52
|
+
const root = monorepoRoot();
|
|
53
|
+
const hb = root ? readLiveCoordinationRow(root, owner) : null;
|
|
54
|
+
// Full id, never abbreviated: command surfaces pass this identity back to
|
|
55
|
+
// the authority-safe V3 coordination projection.
|
|
58
56
|
if (!hb) {
|
|
59
|
-
throw new Error(`pid-map resolved owner=${owner} but no
|
|
57
|
+
throw new Error(`pid-map resolved owner=${owner} but no live V3 generation exists for it`);
|
|
60
58
|
}
|
|
61
|
-
const startedMs = Date.parse(hb.started_at);
|
|
59
|
+
const startedMs = Date.parse(hb.started_at ?? "");
|
|
62
60
|
const ageSecs = Number.isFinite(startedMs)
|
|
63
61
|
? Math.max(0, Math.floor((Date.now() - startedMs) / 1000))
|
|
64
62
|
: 0;
|
|
@@ -67,8 +65,6 @@ function buildSelf() {
|
|
|
67
65
|
instance_id: hb.instance_id,
|
|
68
66
|
session_age_secs: ageSecs,
|
|
69
67
|
task: hb.task ?? null,
|
|
70
|
-
last_tool: hb.last_tool ?? null,
|
|
71
|
-
last_tool_target: hb.last_tool_target ?? null,
|
|
72
68
|
files_held: hb.files_touched ?? [],
|
|
73
69
|
};
|
|
74
70
|
}
|
|
@@ -183,38 +179,20 @@ function buildPeers() {
|
|
|
183
179
|
const root = monorepoRoot();
|
|
184
180
|
if (!root)
|
|
185
181
|
throw new Error("coord_root() returned null");
|
|
186
|
-
const activeDir = resolve(root, ".harnery", "active");
|
|
187
|
-
if (!existsSync(activeDir))
|
|
188
|
-
return { rows: [] };
|
|
189
182
|
const myOwner = resolveOwner();
|
|
190
|
-
// No freshness filter; matches the SessionStart/UserPromptSubmit snapshot.
|
|
191
|
-
// Stale entries get swept by the SessionStart janitor on the next session start.
|
|
192
183
|
const rows = [];
|
|
193
|
-
for (const
|
|
194
|
-
if (
|
|
184
|
+
for (const row of readLiveCoordinationRows(root)) {
|
|
185
|
+
if (row.instance_id === myOwner || row.kind === "transient")
|
|
195
186
|
continue;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const ageMin = Number.isFinite(startedMs) ? Math.floor((Date.now() - startedMs) / 60000) : 0;
|
|
206
|
-
rows.push({
|
|
207
|
-
name: hb.name ?? "unknown",
|
|
208
|
-
instance_id_short: hb.instance_id.slice(0, 8),
|
|
209
|
-
age_min: ageMin,
|
|
210
|
-
files: hb.files_touched?.length ?? 0,
|
|
211
|
-
last_tool: hb.last_tool ?? null,
|
|
212
|
-
task: hb.task ?? null,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
// skip
|
|
217
|
-
}
|
|
187
|
+
const startedMs = Date.parse(row.started_at ?? row.last_heartbeat);
|
|
188
|
+
const ageMin = Number.isFinite(startedMs) ? Math.floor((Date.now() - startedMs) / 60000) : 0;
|
|
189
|
+
rows.push({
|
|
190
|
+
name: row.name ?? "unknown",
|
|
191
|
+
instance_id_short: row.instance_id.slice(0, 8),
|
|
192
|
+
age_min: ageMin,
|
|
193
|
+
files: row.files_touched.length,
|
|
194
|
+
task: row.task ?? null,
|
|
195
|
+
});
|
|
218
196
|
}
|
|
219
197
|
// Sort: file-holders first (more activity), then by recency (younger age first).
|
|
220
198
|
rows.sort((a, b) => b.files - a.files || a.age_min - b.age_min);
|
|
@@ -98,14 +98,14 @@ export declare function setCouncilSteward(councilId: string, steward: string | n
|
|
|
98
98
|
export interface KnownAgent {
|
|
99
99
|
/** `agent-<Name>` canonical handle. */
|
|
100
100
|
name: string;
|
|
101
|
-
/** `active` = currently has
|
|
101
|
+
/** `active` = currently has an authority-eligible V3 generation. `stale` =
|
|
102
102
|
* recently ended (journal archived within the lookback window). */
|
|
103
103
|
state: "active" | "stale";
|
|
104
104
|
/** ISO timestamp of the most-recent signal. */
|
|
105
105
|
last_seen: string;
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
|
-
* Active
|
|
108
|
+
* Active V3 generations + recently-archived journals, deduped by name.
|
|
109
109
|
* Used by `agents council set-steward` to refuse arbitrary names;
|
|
110
110
|
* pass `--allow-unknown` to bypass when bootstrapping a new agent.
|
|
111
111
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/council/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/council/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,CAAC;AACtD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,OAAO,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB;0CACsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;wEAEoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAElE;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAI3C;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAIlD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAKhF;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAKxF;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAQ7D;AAED,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAgBtE;AAED;;;qDAGqD;AACrD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAkB9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,CAsB5F;AAED,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;uEACmE;IACnE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,UAAU,EAAE,CA+C9C;AAED,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,eAAe,EAAE,CAejD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAwBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA2BvD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAsBhE;AAED,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAe/E;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CA6BrE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAKf;AAED,wEAAwE;AACxE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9E;AAED;kDACkD;AAClD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAMhF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAarE;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1E;AAED;uEACuE;AACvE,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAU7F;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc3D;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;yEAEyE;AACzE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAkBP;AAED;;;kBAGkB;AAClB,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CAcR;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAO7C;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,CAAC;CAC3B,CAAC,CAkCD"}
|
|
@@ -9,6 +9,7 @@ import { createHash, randomBytes } from "node:crypto";
|
|
|
9
9
|
import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
10
10
|
import { basename, resolve } from "node:path";
|
|
11
11
|
import { monorepoRoot } from "../../core/agents/index.js";
|
|
12
|
+
import { readLiveCoordinationRows } from "../../core/agents/state/live-coordination-view.js";
|
|
12
13
|
import { resolveBinName } from "../../core/config.js";
|
|
13
14
|
import { ensureIdentity, lookupById as lookupIdentityById } from "../identities/index.js";
|
|
14
15
|
export const COUNCIL_SCHEMA_VERSION = 2;
|
|
@@ -176,7 +177,7 @@ export function setCouncilSteward(councilId, steward) {
|
|
|
176
177
|
* next-app's same-named constant. */
|
|
177
178
|
const KNOWN_AGENT_STALE_WINDOW_MS = 30 * 24 * 60 * 60 * 1000;
|
|
178
179
|
/**
|
|
179
|
-
* Active
|
|
180
|
+
* Active V3 generations + recently-archived journals, deduped by name.
|
|
180
181
|
* Used by `agents council set-steward` to refuse arbitrary names;
|
|
181
182
|
* pass `--allow-unknown` to bypass when bootstrapping a new agent.
|
|
182
183
|
*/
|
|
@@ -184,27 +185,15 @@ export function listKnownAgents() {
|
|
|
184
185
|
const root = monorepoRoot();
|
|
185
186
|
if (!root)
|
|
186
187
|
return [];
|
|
187
|
-
const activeDir = resolve(root, ".harnery", "active");
|
|
188
188
|
const archiveDir = resolve(root, ".harnery", "journal", "archived");
|
|
189
189
|
const byName = new Map();
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
continue;
|
|
198
|
-
const name = hb.name.startsWith("agent-") ? hb.name : `agent-${hb.name}`;
|
|
199
|
-
const last_seen = hb.last_heartbeat ?? new Date().toISOString();
|
|
200
|
-
const existing = byName.get(name);
|
|
201
|
-
if (existing?.state !== "active") {
|
|
202
|
-
byName.set(name, { name, state: "active", last_seen });
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
/* skip unreadable */
|
|
207
|
-
}
|
|
190
|
+
for (const row of readLiveCoordinationRows(root)) {
|
|
191
|
+
if (!row.name)
|
|
192
|
+
continue;
|
|
193
|
+
const name = row.name.startsWith("agent-") ? row.name : `agent-${row.name}`;
|
|
194
|
+
const existing = byName.get(name);
|
|
195
|
+
if (existing?.state !== "active") {
|
|
196
|
+
byName.set(name, { name, state: "active", last_seen: row.last_heartbeat });
|
|
208
197
|
}
|
|
209
198
|
}
|
|
210
199
|
const cutoff = Date.now() - KNOWN_AGENT_STALE_WINDOW_MS;
|
|
@@ -19,12 +19,7 @@ export type DocKind = "plan" | "issue" | "handoff";
|
|
|
19
19
|
* stripped from `body`, so status readers do not need try/catch.
|
|
20
20
|
*/
|
|
21
21
|
export declare function parseFrontmatter(text: string): ParsedFrontmatter;
|
|
22
|
-
/**
|
|
23
|
-
* Normalize a raw status token to the canonical enum for its kind.
|
|
24
|
-
* Returns null when the token can't be mapped (caller may fail loud).
|
|
25
|
-
*/
|
|
26
|
-
export declare function normalizeStatus(raw: string, kind?: DocKind): string | null;
|
|
27
|
-
/** Read and normalize a doc's YAML lifecycle status, or null when absent/invalid. */
|
|
22
|
+
/** Read a canonical v2 lifecycle status, or null when absent or invalid. */
|
|
28
23
|
export declare function readDocStatus(filePath: string, kind?: DocKind): string | null;
|
|
29
24
|
/** Same as {@link readDocStatus} but from an in-memory string (testable). */
|
|
30
25
|
export declare function readDocStatusFromText(content: string, kind?: DocKind): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-frontmatter.d.ts","sourceRoot":"","sources":["../../src/lib/docs-frontmatter.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAKnD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAgBhE;
|
|
1
|
+
{"version":3,"file":"docs-frontmatter.d.ts","sourceRoot":"","sources":["../../src/lib/docs-frontmatter.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAKnD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAgBhE;AAOD,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7E;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASpF;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGtD"}
|
|
@@ -26,84 +26,12 @@ export function parseFrontmatter(text) {
|
|
|
26
26
|
}
|
|
27
27
|
return { data, body: text.slice(m[0].length), raw: m[1] };
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Kind-independent token normalization (spacing / casing / punctuation
|
|
31
|
-
* variants). Kind-specific collapses (done -> shipped vs resolved) are applied
|
|
32
|
-
* in `normalizeStatus`.
|
|
33
|
-
*/
|
|
34
|
-
const GENERIC_NORMALIZE = {
|
|
35
|
-
in_progress: "in-progress",
|
|
36
|
-
inprogress: "in-progress",
|
|
37
|
-
"in progress": "in-progress",
|
|
38
|
-
"in-progress": "in-progress",
|
|
39
|
-
wip: "in-progress",
|
|
40
|
-
"wont-fix": "wontfix",
|
|
41
|
-
wontfix: "wontfix",
|
|
42
|
-
proposed: "proposed",
|
|
43
|
-
abandoned: "abandoned",
|
|
44
|
-
open: "open",
|
|
45
|
-
resolved: "resolved",
|
|
46
|
-
shipped: "shipped",
|
|
47
|
-
};
|
|
48
|
-
// "done"-family tokens collapse to different canonical values per kind.
|
|
49
|
-
const DONE_FAMILY = new Set(["done", "complete", "completed", "finished"]);
|
|
50
|
-
const KIND_NORMALIZE = {
|
|
51
|
-
plan: {
|
|
52
|
-
planning: "proposed",
|
|
53
|
-
draft: "proposed",
|
|
54
|
-
approved: "proposed",
|
|
55
|
-
plan: "proposed",
|
|
56
|
-
open: "proposed",
|
|
57
|
-
deferred: "proposed",
|
|
58
|
-
implemented: "shipped",
|
|
59
|
-
resolved: "shipped",
|
|
60
|
-
fixed: "shipped",
|
|
61
|
-
archived: "shipped",
|
|
62
|
-
shelved: "abandoned",
|
|
63
|
-
},
|
|
64
|
-
issue: {
|
|
65
|
-
"in progress": "open",
|
|
66
|
-
in_progress: "open",
|
|
67
|
-
"in-progress": "open",
|
|
68
|
-
blocked: "open",
|
|
69
|
-
mitigated: "open",
|
|
70
|
-
fixed: "resolved",
|
|
71
|
-
shipped: "resolved",
|
|
72
|
-
},
|
|
73
|
-
handoff: {
|
|
74
|
-
"in progress": "open",
|
|
75
|
-
in_progress: "open",
|
|
76
|
-
"in-progress": "open",
|
|
77
|
-
blocked: "open",
|
|
78
|
-
fixed: "resolved",
|
|
79
|
-
shipped: "resolved",
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
29
|
const ALLOWED_BY_KIND = {
|
|
83
30
|
plan: new Set(["proposed", "in-progress", "shipped", "abandoned"]),
|
|
84
31
|
issue: new Set(["open", "resolved", "wontfix"]),
|
|
85
32
|
handoff: new Set(["open", "resolved", "abandoned"]),
|
|
86
33
|
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Normalize a raw status token to the canonical enum for its kind.
|
|
90
|
-
* Returns null when the token can't be mapped (caller may fail loud).
|
|
91
|
-
*/
|
|
92
|
-
export function normalizeStatus(raw, kind) {
|
|
93
|
-
const t = raw.trim().toLowerCase();
|
|
94
|
-
if (!t)
|
|
95
|
-
return null;
|
|
96
|
-
if (DONE_FAMILY.has(t)) {
|
|
97
|
-
// plans ship; issues/handoffs resolve. Default to "shipped" when unknown.
|
|
98
|
-
return kind === "issue" || kind === "handoff" ? "resolved" : "shipped";
|
|
99
|
-
}
|
|
100
|
-
const normalized = (kind ? KIND_NORMALIZE[kind][t] : undefined) ?? GENERIC_NORMALIZE[t];
|
|
101
|
-
if (!normalized)
|
|
102
|
-
return null;
|
|
103
|
-
const allowed = kind ? ALLOWED_BY_KIND[kind] : ALL_CANONICAL;
|
|
104
|
-
return allowed.has(normalized) ? normalized : null;
|
|
105
|
-
}
|
|
106
|
-
/** Read and normalize a doc's YAML lifecycle status, or null when absent/invalid. */
|
|
34
|
+
/** Read a canonical v2 lifecycle status, or null when absent or invalid. */
|
|
107
35
|
export function readDocStatus(filePath, kind) {
|
|
108
36
|
let content;
|
|
109
37
|
try {
|
|
@@ -117,11 +45,17 @@ export function readDocStatus(filePath, kind) {
|
|
|
117
45
|
/** Same as {@link readDocStatus} but from an in-memory string (testable). */
|
|
118
46
|
export function readDocStatusFromText(content, kind) {
|
|
119
47
|
const { data } = parseFrontmatter(content);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
48
|
+
if (data.schema !== "harnery-doc/v2")
|
|
49
|
+
return null;
|
|
50
|
+
if (kind && data.type !== kind)
|
|
51
|
+
return null;
|
|
52
|
+
if (typeof data.status !== "string")
|
|
53
|
+
return null;
|
|
54
|
+
if (kind)
|
|
55
|
+
return ALLOWED_BY_KIND[kind].has(data.status) ? data.status : null;
|
|
56
|
+
return Object.values(ALLOWED_BY_KIND).some((allowed) => allowed.has(data.status))
|
|
57
|
+
? data.status
|
|
58
|
+
: null;
|
|
125
59
|
}
|
|
126
60
|
/** Whether a doc carries a non-empty status in leading YAML frontmatter. */
|
|
127
61
|
export function hasYamlStatus(content) {
|
package/dist/lib/docs-index.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export declare function initDocsContext(opts: {
|
|
|
7
7
|
* Idempotent: safe to run on every commit. Reads the first ~30 lines of
|
|
8
8
|
* each dated file to extract title and (for issues) status.
|
|
9
9
|
*
|
|
10
|
+
* Targets: the host root, every initialized git submodule, and first-level
|
|
11
|
+
* in-tree packages that keep `docs/audits` or `docs/issues` without being
|
|
12
|
+
* git submodules. Marker rules are unchanged.
|
|
13
|
+
*
|
|
10
14
|
* Preserves hand-written preambles. The command updates only the section
|
|
11
15
|
* between `<!-- BEGIN INDEX -->` and `<!-- END INDEX -->` markers. If a
|
|
12
16
|
* README exists without markers, the command refuses to overwrite it and
|
|
@@ -25,5 +29,10 @@ export interface IndexResult {
|
|
|
25
29
|
after: string;
|
|
26
30
|
}
|
|
27
31
|
export declare function extractStatus(content: string): string | undefined;
|
|
32
|
+
/** Root + initialized submodules + first-level in-tree packages with docs indexes. */
|
|
33
|
+
export declare function collectIndexTargets(): {
|
|
34
|
+
name: string;
|
|
35
|
+
path: string;
|
|
36
|
+
}[];
|
|
28
37
|
export declare function runIndex(opts: IndexOpts): Promise<IndexResult[]>;
|
|
29
38
|
//# sourceMappingURL=docs-index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-index.d.ts","sourceRoot":"","sources":["../../src/lib/docs-index.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAG/F;AAeD
|
|
1
|
+
{"version":3,"file":"docs-index.d.ts","sourceRoot":"","sources":["../../src/lib/docs-index.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAG/F;AAeD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAkBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAsGD,sFAAsF;AACtF,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAqBtE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA2CtE"}
|
package/dist/lib/docs-index.js
CHANGED
|
@@ -122,13 +122,42 @@ function hasMarkers(existing) {
|
|
|
122
122
|
function buildNewReadme(kind, body) {
|
|
123
123
|
return `${defaultPreamble(kind)}\n${BEGIN_MARKER}\n${body}${END_MARKER}\n`;
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
const SKIP_NESTED_DIR_NAMES = new Set(["node_modules", "dist", "target"]);
|
|
126
|
+
function hasIndexableDocs(path) {
|
|
127
|
+
return existsSync(join(path, "docs", "audits")) || existsSync(join(path, "docs", "issues"));
|
|
128
|
+
}
|
|
129
|
+
/** Root + initialized submodules + first-level in-tree packages with docs indexes. */
|
|
130
|
+
export function collectIndexTargets() {
|
|
131
|
+
const byPath = new Map();
|
|
132
|
+
const add = (name, path) => {
|
|
133
|
+
byPath.set(path, { name, path });
|
|
134
|
+
};
|
|
135
|
+
add("(root)", REPO_ROOT);
|
|
127
136
|
for (const name of SUBMODULES) {
|
|
128
137
|
if (!isSubmoduleInitialized(name))
|
|
129
138
|
continue;
|
|
130
|
-
|
|
139
|
+
add(name, submodulePath(name));
|
|
140
|
+
}
|
|
141
|
+
if (!existsSync(REPO_ROOT))
|
|
142
|
+
return [...byPath.values()];
|
|
143
|
+
for (const ent of readdirSync(REPO_ROOT, { withFileTypes: true })) {
|
|
144
|
+
if (!ent.isDirectory() && !ent.isSymbolicLink())
|
|
145
|
+
continue;
|
|
146
|
+
if (ent.name.startsWith("."))
|
|
147
|
+
continue;
|
|
148
|
+
if (SKIP_NESTED_DIR_NAMES.has(ent.name))
|
|
149
|
+
continue;
|
|
150
|
+
if (isSubmoduleInitialized(ent.name))
|
|
151
|
+
continue;
|
|
152
|
+
const child = join(REPO_ROOT, ent.name);
|
|
153
|
+
if (!hasIndexableDocs(child))
|
|
154
|
+
continue;
|
|
155
|
+
add(ent.name, child);
|
|
131
156
|
}
|
|
157
|
+
return [...byPath.values()];
|
|
158
|
+
}
|
|
159
|
+
export async function runIndex(opts) {
|
|
160
|
+
const targets = collectIndexTargets();
|
|
132
161
|
const filter = opts.repo === "." ? "(root)" : opts.repo;
|
|
133
162
|
const filtered = filter ? targets.filter((t) => t.name === filter) : targets;
|
|
134
163
|
const results = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-lint.d.ts","sourceRoot":"","sources":["../../src/lib/docs-lint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docs-lint.d.ts","sourceRoot":"","sources":["../../src/lib/docs-lint.ts"],"names":[],"mappings":"AAeA,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,GAAG,IAAI,CAMP;AAaD;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0HD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AA0OD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAiClE"}
|