harnery 0.33.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +4 -0
- package/dist/commands/adapter.js +2 -2
- package/dist/commands/agents.d.ts +144 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +1237 -590
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +7 -6
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -16
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +234 -12
- package/dist/commands/checkpoint.d.ts.map +1 -1
- package/dist/commands/checkpoint.js +3 -2
- package/dist/commands/claude-desktop.d.ts +1 -1
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +3 -74
- package/dist/commands/context.js +1 -6
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +22 -38
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +91 -28
- package/dist/commands/doctor.js +10 -1
- package/dist/commands/events.d.ts +5 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +189 -0
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +13 -4
- package/dist/commands/init.d.ts +9 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +223 -51
- package/dist/commands/journal.d.ts.map +1 -1
- package/dist/commands/journal.js +4 -13
- package/dist/commands/ledger-v3.d.ts +5 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -0
- package/dist/commands/ledger-v3.js +91 -0
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +11 -5
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/web.d.ts +6 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +67 -7
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +22 -5
- package/dist/core/adapter.d.ts +5 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapters/attest.d.ts +5 -2
- package/dist/core/adapters/attest.d.ts.map +1 -1
- package/dist/core/adapters/attest.js +8 -3
- package/dist/core/adapters/profiles.d.ts +6 -6
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +4 -4
- package/dist/core/agents/canonical-emit.d.ts +17 -15
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +22 -22
- package/dist/core/agents/cli.js +207 -234
- package/dist/core/agents/codex-archive-v3.d.ts +14 -0
- package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
- package/dist/core/agents/codex-archive-v3.js +110 -0
- package/dist/core/agents/coord-client.d.ts +19 -81
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +65 -155
- package/dist/core/agents/finalization.d.ts +4 -1
- package/dist/core/agents/finalization.d.ts.map +1 -1
- package/dist/core/agents/finalization.js +89 -32
- package/dist/core/agents/index.d.ts +4 -5
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +4 -5
- package/dist/core/agents/live-authority-v3.d.ts +59 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
- package/dist/core/agents/live-authority-v3.js +233 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
- package/dist/core/agents/live-lifecycle-v3.js +91 -0
- package/dist/core/agents/live-observation-v3.d.ts +25 -0
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
- package/dist/core/agents/live-observation-v3.js +157 -0
- package/dist/core/agents/render/prompt-context.d.ts +4 -4
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +23 -58
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +8 -32
- package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +79 -127
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +3 -18
- package/dist/core/agents/rules/stop-hook.d.ts +9 -50
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +193 -236
- package/dist/core/agents/session-events.d.ts +5 -7
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +127 -95
- package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
- package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalization-state-v3.js +40 -0
- package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalizer-v3.js +734 -0
- package/dist/core/agents/session-name-display.d.ts +40 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -0
- package/dist/core/agents/session-name-display.js +119 -0
- package/dist/core/agents/state/activity-log.d.ts +3 -3
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +7 -16
- package/dist/core/agents/state/heartbeat-writer.d.ts +23 -55
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +56 -228
- package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-view.js +209 -0
- package/dist/core/agents/state/session-state.d.ts +4 -3
- package/dist/core/agents/state/session-state.d.ts.map +1 -1
- package/dist/core/agents/state/session-state.js +18 -9
- package/dist/core/agents/state/stale-sweep.d.ts +1 -1
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +26 -15
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +5 -7
- package/dist/core/config.d.ts +33 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +98 -2
- package/dist/core/context/index.d.ts +1 -4
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +9 -9
- package/dist/core/events/span-parent.d.ts +15 -0
- package/dist/core/events/span-parent.d.ts.map +1 -0
- package/dist/core/events/span-parent.js +34 -0
- package/dist/core/events/v3/advance.d.ts +14 -0
- package/dist/core/events/v3/advance.d.ts.map +1 -0
- package/dist/core/events/v3/advance.js +134 -0
- package/dist/core/events/v3/authority-outbox.d.ts +78 -0
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
- package/dist/core/events/v3/authority-outbox.js +399 -0
- package/dist/core/events/v3/base-builder.d.ts +20 -0
- package/dist/core/events/v3/base-builder.d.ts.map +1 -0
- package/dist/core/events/v3/base-builder.js +29 -0
- package/dist/core/events/v3/base-contract.d.ts +7576 -0
- package/dist/core/events/v3/base-contract.d.ts.map +1 -0
- package/dist/core/events/v3/base-contract.js +647 -0
- package/dist/core/events/v3/bootstrap.d.ts +34 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
- package/dist/core/events/v3/bootstrap.js +175 -0
- package/dist/core/events/v3/builder.d.ts +20 -0
- package/dist/core/events/v3/builder.d.ts.map +1 -0
- package/dist/core/events/v3/builder.js +28 -0
- package/dist/core/events/v3/canonical.d.ts +31 -0
- package/dist/core/events/v3/canonical.d.ts.map +1 -0
- package/dist/core/events/v3/canonical.js +100 -0
- package/dist/core/events/v3/capabilities.d.ts +31 -0
- package/dist/core/events/v3/capabilities.d.ts.map +1 -0
- package/dist/core/events/v3/capabilities.js +107 -0
- package/dist/core/events/v3/capability-drift.d.ts +22 -0
- package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
- package/dist/core/events/v3/capability-drift.js +134 -0
- package/dist/core/events/v3/catalog.d.ts +38 -0
- package/dist/core/events/v3/catalog.d.ts.map +1 -0
- package/dist/core/events/v3/catalog.js +135 -0
- package/dist/core/events/v3/clock-order.d.ts +34 -0
- package/dist/core/events/v3/clock-order.d.ts.map +1 -0
- package/dist/core/events/v3/clock-order.js +35 -0
- package/dist/core/events/v3/contract.d.ts +171 -0
- package/dist/core/events/v3/contract.d.ts.map +1 -0
- package/dist/core/events/v3/contract.js +180 -0
- package/dist/core/events/v3/control.d.ts +111 -0
- package/dist/core/events/v3/control.d.ts.map +1 -0
- package/dist/core/events/v3/control.js +419 -0
- package/dist/core/events/v3/coordination-view.d.ts +69 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-view.js +119 -0
- package/dist/core/events/v3/economics.d.ts +77 -0
- package/dist/core/events/v3/economics.d.ts.map +1 -0
- package/dist/core/events/v3/economics.js +274 -0
- package/dist/core/events/v3/finalization-view.d.ts +26 -0
- package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
- package/dist/core/events/v3/finalization-view.js +37 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
- package/dist/core/events/v3/fingerprint-keys.js +217 -0
- package/dist/core/events/v3/generated.d.ts +4 -0
- package/dist/core/events/v3/generated.d.ts.map +1 -0
- package/dist/core/events/v3/generated.js +47 -0
- package/dist/core/events/v3/ids.d.ts +9 -0
- package/dist/core/events/v3/ids.d.ts.map +1 -0
- package/dist/core/events/v3/ids.js +25 -0
- package/dist/core/events/v3/index.d.ts +35 -0
- package/dist/core/events/v3/index.d.ts.map +1 -0
- package/dist/core/events/v3/index.js +33 -0
- package/dist/core/events/v3/latency.d.ts +63 -0
- package/dist/core/events/v3/latency.d.ts.map +1 -0
- package/dist/core/events/v3/latency.js +412 -0
- package/dist/core/events/v3/live-feed.d.ts +45 -0
- package/dist/core/events/v3/live-feed.d.ts.map +1 -0
- package/dist/core/events/v3/live-feed.js +246 -0
- package/dist/core/events/v3/live-observation.d.ts +35 -0
- package/dist/core/events/v3/live-observation.d.ts.map +1 -0
- package/dist/core/events/v3/live-observation.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts +57 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -0
- package/dist/core/events/v3/live-routing.js +107 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command-recorder.js +477 -0
- package/dist/core/events/v3/producers/command.d.ts +50 -0
- package/dist/core/events/v3/producers/command.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command.js +135 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
- package/dist/core/events/v3/producers/coordination.d.ts +90 -0
- package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination.js +229 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook-base.js +424 -0
- package/dist/core/events/v3/producers/hook.d.ts +29 -0
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook.js +71 -0
- package/dist/core/events/v3/producers/intake.d.ts +65 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
- package/dist/core/events/v3/producers/intake.js +244 -0
- package/dist/core/events/v3/producers/recorder.d.ts +240 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/recorder.js +2176 -0
- package/dist/core/events/v3/projection.d.ts +101 -0
- package/dist/core/events/v3/projection.d.ts.map +1 -0
- package/dist/core/events/v3/projection.js +479 -0
- package/dist/core/events/v3/reader.d.ts +75 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -0
- package/dist/core/events/v3/reader.js +778 -0
- package/dist/core/events/v3/recovery-record.d.ts +47 -0
- package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
- package/dist/core/events/v3/recovery-record.js +167 -0
- package/dist/core/events/v3/recovery.d.ts +22 -0
- package/dist/core/events/v3/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/recovery.js +227 -0
- package/dist/core/events/v3/span-state.d.ts +52 -0
- package/dist/core/events/v3/span-state.d.ts.map +1 -0
- package/dist/core/events/v3/span-state.js +142 -0
- package/dist/core/events/v3/targets.d.ts +23 -0
- package/dist/core/events/v3/targets.d.ts.map +1 -0
- package/dist/core/events/v3/targets.js +134 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
- package/dist/core/events/v3/turn-telemetry.js +168 -0
- package/dist/core/events/v3/validate.d.ts +9 -0
- package/dist/core/events/v3/validate.d.ts.map +1 -0
- package/dist/core/events/v3/validate.js +281 -0
- package/dist/core/events/v3/writer.d.ts +56 -0
- package/dist/core/events/v3/writer.d.ts.map +1 -0
- package/dist/core/events/v3/writer.js +335 -0
- package/dist/core/governor/index.d.ts +1 -1
- package/dist/core/governor/index.d.ts.map +1 -1
- package/dist/core/governor/index.js +1 -1
- package/dist/core/governor/plan-api.d.ts +2 -1
- package/dist/core/governor/plan-api.d.ts.map +1 -1
- package/dist/core/governor/plan-api.js +6 -3
- package/dist/core/governor/read.d.ts +1 -1
- package/dist/core/governor/read.d.ts.map +1 -1
- package/dist/core/governor/read.js +1 -1
- package/dist/core/governor/state.d.ts +9 -0
- package/dist/core/governor/state.d.ts.map +1 -1
- package/dist/core/governor/state.js +40 -3
- package/dist/core/guard/config.d.ts +5 -0
- package/dist/core/guard/config.d.ts.map +1 -0
- package/dist/core/guard/config.js +157 -0
- package/dist/core/guard/coordinator.d.ts +14 -0
- package/dist/core/guard/coordinator.d.ts.map +1 -0
- package/dist/core/guard/coordinator.js +173 -0
- package/dist/core/guard/evaluator.d.ts +4 -0
- package/dist/core/guard/evaluator.d.ts.map +1 -0
- package/dist/core/guard/evaluator.js +242 -0
- package/dist/core/guard/evidence-v3.d.ts +15 -0
- package/dist/core/guard/evidence-v3.d.ts.map +1 -0
- package/dist/core/guard/evidence-v3.js +171 -0
- package/dist/core/guard/index.d.ts +10 -0
- package/dist/core/guard/index.d.ts.map +1 -0
- package/dist/core/guard/index.js +6 -0
- package/dist/core/guard/live-source-v3.d.ts +40 -0
- package/dist/core/guard/live-source-v3.d.ts.map +1 -0
- package/dist/core/guard/live-source-v3.js +128 -0
- package/dist/core/guard/storage.d.ts +27 -0
- package/dist/core/guard/storage.d.ts.map +1 -0
- package/dist/core/guard/storage.js +140 -0
- package/dist/core/guard/types.d.ts +119 -0
- package/dist/core/guard/types.d.ts.map +1 -0
- package/dist/core/guard/types.js +1 -0
- package/dist/core/hooks/adapter/detect.d.ts +18 -1
- package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
- package/dist/core/hooks/adapter/detect.js +29 -0
- package/dist/core/hooks/adapter/events.d.ts +7 -4
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +12 -4
- package/dist/core/hooks/adapter/output.d.ts +2 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.d.ts +7 -4
- package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.js +63 -25
- package/dist/core/hooks/adapter/wiring.d.ts +30 -4
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +89 -11
- package/dist/core/hooks/cli.d.ts +1 -1
- package/dist/core/hooks/cli.js +306 -444
- package/dist/core/hooks/effects/image-capture.d.ts +20 -34
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +212 -221
- package/dist/core/hooks/effects/index.d.ts +1 -9
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +1 -24
- package/dist/core/hooks/events/input-hash.d.ts +7 -0
- package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
- package/dist/core/hooks/events/input-hash.js +43 -0
- package/dist/core/hooks/index.d.ts +4 -3
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +2 -3
- package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
- package/dist/core/hooks/resolve/coord-root.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +16 -15
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +51 -42
- package/dist/core/hooks/resolve/transcript.d.ts +33 -3
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +161 -14
- package/dist/core/hooks/session-name-presence.d.ts +9 -10
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +15 -15
- package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
- package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
- package/dist/core/journal/index.d.ts +2 -2
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +9 -22
- package/dist/core/presence/blob.d.ts +4 -3
- package/dist/core/presence/blob.d.ts.map +1 -1
- package/dist/core/presence/blob.js +45 -44
- package/dist/core/presence/codec-digest.d.ts +29 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -0
- package/dist/core/presence/codec-digest.js +170 -0
- package/dist/core/presence/relay-client.d.ts +1 -1
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +5 -5
- package/dist/core/work/index.d.ts +1 -1
- package/dist/core/work/index.d.ts.map +1 -1
- package/dist/core/work/index.js +1 -1
- package/dist/core/work/read.d.ts +1 -1
- package/dist/core/work/read.d.ts.map +1 -1
- package/dist/core/work/read.js +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +6 -0
- package/dist/core/work/state.d.ts +9 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +17 -3
- package/dist/core/workflow/engine.js +24 -25
- package/dist/core/workflow/live-session-v3.d.ts +19 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
- package/dist/core/workflow/live-session-v3.js +86 -0
- package/dist/core/workflow/scope-id.d.ts +3 -0
- package/dist/core/workflow/scope-id.d.ts.map +1 -0
- package/dist/core/workflow/scope-id.js +5 -0
- package/dist/core/workflow/workspaces/leases.d.ts +4 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +53 -19
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/browser/client.d.ts +41 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +203 -0
- package/dist/lib/browser/critique.d.ts +28 -2
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +74 -18
- package/dist/lib/browser/geometry.d.ts +1 -1
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +130 -6
- package/dist/lib/browser/index.d.ts +3 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +3 -0
- package/dist/lib/browser/qa-plan.d.ts +174 -0
- package/dist/lib/browser/qa-plan.d.ts.map +1 -0
- package/dist/lib/browser/qa-plan.js +321 -0
- package/dist/lib/browser/qa-reuse.d.ts +99 -0
- package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
- package/dist/lib/browser/qa-reuse.js +222 -0
- package/dist/lib/browser/qa-snapshot.d.ts +64 -0
- package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
- package/dist/lib/browser/qa-snapshot.js +171 -0
- package/dist/lib/browser/runts.d.ts.map +1 -1
- package/dist/lib/browser/runts.js +22 -1
- package/dist/lib/browser/tiling.d.ts +71 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -0
- package/dist/lib/browser/tiling.js +118 -0
- package/dist/lib/claude-desktop.d.ts +0 -47
- package/dist/lib/claude-desktop.d.ts.map +1 -1
- package/dist/lib/claude-desktop.js +1 -169
- package/dist/lib/context/index.d.ts +0 -3
- package/dist/lib/context/index.d.ts.map +1 -1
- package/dist/lib/context/index.js +20 -42
- package/dist/lib/council/index.d.ts +2 -2
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +9 -20
- package/dist/lib/docs-frontmatter.d.ts +1 -6
- package/dist/lib/docs-frontmatter.d.ts.map +1 -1
- package/dist/lib/docs-frontmatter.js +12 -78
- package/dist/lib/docs-index.d.ts +9 -0
- package/dist/lib/docs-index.d.ts.map +1 -1
- package/dist/lib/docs-index.js +32 -3
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +14 -30
- package/dist/lib/docs-metadata-audit.d.ts +19 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
- package/dist/lib/docs-metadata-audit.js +132 -0
- package/dist/lib/docs-metadata-managed.d.ts +23 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
- package/dist/lib/docs-metadata-managed.js +78 -0
- package/dist/lib/docs-metadata-sync.d.ts +20 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
- package/dist/lib/docs-metadata-sync.js +222 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2-schema.js +134 -0
- package/dist/lib/docs-metadata-v2.d.ts +21 -0
- package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2.js +424 -0
- package/dist/lib/docs-new.d.ts +11 -0
- package/dist/lib/docs-new.d.ts.map +1 -0
- package/dist/lib/docs-new.js +52 -0
- package/dist/lib/docs-sweep.d.ts.map +1 -1
- package/dist/lib/docs-sweep.js +45 -29
- package/dist/lib/headless/index.d.ts +98 -0
- package/dist/lib/headless/index.d.ts.map +1 -0
- package/dist/lib/headless/index.js +211 -0
- package/dist/lib/identities/assume.d.ts +4 -4
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +52 -68
- package/dist/lib/instructions/apply.d.ts +5 -4
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +32 -20
- package/dist/lib/instructions/bundle.d.ts +1 -1
- package/dist/lib/instructions/bundle.d.ts.map +1 -1
- package/dist/lib/instructions/bundle.js +1 -1
- package/dist/lib/instructions/splice.d.ts +0 -1
- package/dist/lib/instructions/splice.d.ts.map +1 -1
- package/dist/lib/instructions/splice.js +22 -6
- package/dist/lib/instructions/templates.d.ts +7 -5
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +79 -9
- package/package.json +26 -5
- package/schemas/config.schema.json +120 -2
- package/schemas/docs-metadata-v2.schema.json +441 -0
- package/schemas/event-v3.schema.json +24472 -0
- package/src/commander.ts +4 -0
- package/src/commands/adapter.ts +2 -2
- package/src/commands/agents.ts +1530 -593
- package/src/commands/artifacts.ts +7 -6
- package/src/commands/backup.ts +29 -21
- package/src/commands/browse.ts +349 -8
- package/src/commands/checkpoint.ts +4 -3
- package/src/commands/claude-desktop.ts +2 -101
- package/src/commands/context.ts +1 -6
- package/src/commands/decision.ts +27 -44
- package/src/commands/docs.ts +100 -33
- package/src/commands/doctor.ts +14 -1
- package/src/commands/events.ts +256 -0
- package/src/commands/governor.ts +18 -4
- package/src/commands/init.ts +253 -57
- package/src/commands/instructions.ts +1 -1
- package/src/commands/journal.ts +4 -13
- package/src/commands/ledger-v3.ts +111 -0
- package/src/commands/presence.ts +11 -10
- package/src/commands/sync.ts +1 -1
- package/src/commands/web.ts +67 -8
- package/src/commands/work.ts +28 -5
- package/src/core/adapter.ts +5 -0
- package/src/core/adapters/attest.ts +8 -3
- package/src/core/adapters/profiles.ts +4 -6
- package/src/core/agents/canonical-emit.ts +34 -25
- package/src/core/agents/cli.ts +236 -262
- package/src/core/agents/codex-archive-v3.ts +138 -0
- package/src/core/agents/coord-client.ts +75 -188
- package/src/core/agents/finalization.ts +120 -38
- package/src/core/agents/index.ts +4 -5
- package/src/core/agents/live-authority-v3.ts +375 -0
- package/src/core/agents/live-lifecycle-v3.ts +140 -0
- package/src/core/agents/live-observation-v3.ts +216 -0
- package/src/core/agents/render/prompt-context.ts +29 -60
- package/src/core/agents/render/session-context.ts +10 -31
- package/src/core/agents/rules/claim-conflict.ts +85 -126
- package/src/core/agents/rules/commit-conflict.ts +3 -14
- package/src/core/agents/rules/stop-hook.ts +239 -293
- package/src/core/agents/session-events.ts +137 -104
- package/src/core/agents/session-finalization-state-v3.ts +90 -0
- package/src/core/agents/session-finalizer-v3.ts +953 -0
- package/src/core/agents/session-name-display.ts +149 -0
- package/src/core/agents/state/activity-log.ts +6 -14
- package/src/core/agents/state/heartbeat-writer.ts +82 -277
- package/src/core/agents/state/live-coordination-view.ts +290 -0
- package/src/core/agents/state/session-state.ts +24 -12
- package/src/core/agents/state/stale-sweep.ts +40 -17
- package/src/core/artifacts/index.ts +4 -5
- package/src/core/config.ts +148 -3
- package/src/core/context/index.ts +9 -17
- package/src/core/events/span-parent.ts +46 -0
- package/src/core/events/v3/advance.ts +168 -0
- package/src/core/events/v3/authority-outbox.ts +548 -0
- package/src/core/events/v3/base-builder.ts +60 -0
- package/src/core/events/v3/base-contract.ts +882 -0
- package/src/core/events/v3/bootstrap.ts +226 -0
- package/src/core/events/v3/builder.ts +59 -0
- package/src/core/events/v3/canonical.ts +153 -0
- package/src/core/events/v3/capabilities.ts +171 -0
- package/src/core/events/v3/capability-drift.ts +177 -0
- package/src/core/events/v3/catalog.ts +202 -0
- package/src/core/events/v3/clock-order.ts +41 -0
- package/src/core/events/v3/contract.ts +365 -0
- package/src/core/events/v3/control.ts +576 -0
- package/src/core/events/v3/coordination-view.ts +193 -0
- package/src/core/events/v3/economics.ts +384 -0
- package/src/core/events/v3/finalization-view.ts +67 -0
- package/src/core/events/v3/fingerprint-keys.ts +260 -0
- package/src/core/events/v3/generated.ts +48 -0
- package/src/core/events/v3/ids.ts +33 -0
- package/src/core/events/v3/index.ts +322 -0
- package/src/core/events/v3/latency.ts +551 -0
- package/src/core/events/v3/live-feed.ts +319 -0
- package/src/core/events/v3/live-observation.ts +39 -0
- package/src/core/events/v3/live-routing.ts +135 -0
- package/src/core/events/v3/producers/command-recorder.ts +631 -0
- package/src/core/events/v3/producers/command.ts +201 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
- package/src/core/events/v3/producers/coordination.ts +355 -0
- package/src/core/events/v3/producers/hook-base.ts +578 -0
- package/src/core/events/v3/producers/hook.ts +119 -0
- package/src/core/events/v3/producers/intake.ts +319 -0
- package/src/core/events/v3/producers/recorder.ts +2805 -0
- package/src/core/events/v3/projection.ts +653 -0
- package/src/core/events/v3/reader.ts +1127 -0
- package/src/core/events/v3/recovery-record.ts +244 -0
- package/src/core/events/v3/recovery.ts +271 -0
- package/src/core/events/v3/span-state.ts +187 -0
- package/src/core/events/v3/targets.ts +182 -0
- package/src/core/events/v3/turn-telemetry.ts +259 -0
- package/src/core/events/v3/validate.ts +361 -0
- package/src/core/events/v3/writer.ts +419 -0
- package/src/core/governor/index.ts +3 -0
- package/src/core/governor/plan-api.ts +10 -2
- package/src/core/governor/read.ts +3 -0
- package/src/core/governor/state.ts +52 -5
- package/src/core/guard/config.ts +206 -0
- package/src/core/guard/coordinator.ts +227 -0
- package/src/core/guard/evaluator.ts +343 -0
- package/src/core/guard/evidence-v3.ts +227 -0
- package/src/core/guard/index.ts +35 -0
- package/src/core/guard/live-source-v3.ts +204 -0
- package/src/core/guard/storage.ts +188 -0
- package/src/core/guard/types.ts +152 -0
- package/src/core/hooks/adapter/detect.ts +28 -1
- package/src/core/hooks/adapter/events.ts +14 -6
- package/src/core/hooks/adapter/output.ts +7 -2
- package/src/core/hooks/adapter/parse.ts +80 -38
- package/src/core/hooks/adapter/wiring.ts +119 -13
- package/src/core/hooks/cli.ts +352 -466
- package/src/core/hooks/effects/image-capture.ts +228 -238
- package/src/core/hooks/effects/index.ts +1 -36
- package/src/core/hooks/events/input-hash.ts +47 -0
- package/src/core/hooks/index.ts +4 -11
- package/src/core/hooks/resolve/coord-root.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +52 -45
- package/src/core/hooks/resolve/transcript.ts +171 -14
- package/src/core/hooks/session-name-presence.ts +14 -15
- package/src/core/hooks/unsafe-cross-shell.ts +1 -1
- package/src/core/journal/index.ts +15 -22
- package/src/core/presence/blob.ts +48 -41
- package/src/core/presence/codec-digest.ts +215 -0
- package/src/core/presence/relay-client.ts +5 -5
- package/src/core/work/index.ts +3 -0
- package/src/core/work/read.ts +3 -0
- package/src/core/work/runner.ts +6 -0
- package/src/core/work/state.ts +27 -3
- package/src/core/workflow/engine.ts +24 -24
- package/src/core/workflow/live-session-v3.ts +126 -0
- package/src/core/workflow/scope-id.ts +6 -0
- package/src/core/workflow/workspaces/leases.ts +56 -19
- package/src/index.ts +1 -1
- package/src/lib/browser/client.ts +230 -0
- package/src/lib/browser/critique.ts +104 -27
- package/src/lib/browser/geometry.ts +143 -14
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/browser/qa-plan.ts +501 -0
- package/src/lib/browser/qa-reuse.ts +306 -0
- package/src/lib/browser/qa-snapshot.ts +223 -0
- package/src/lib/browser/runts.ts +27 -2
- package/src/lib/browser/tiling.ts +164 -0
- package/src/lib/claude-desktop.ts +1 -232
- package/src/lib/context/index.ts +22 -46
- package/src/lib/council/index.ts +9 -21
- package/src/lib/docs-frontmatter.ts +8 -79
- package/src/lib/docs-index.ts +33 -3
- package/src/lib/docs-lint.ts +15 -29
- package/src/lib/docs-metadata-audit.ts +166 -0
- package/src/lib/docs-metadata-managed.ts +83 -0
- package/src/lib/docs-metadata-sync.ts +262 -0
- package/src/lib/docs-metadata-v2-schema.ts +138 -0
- package/src/lib/docs-metadata-v2.ts +646 -0
- package/src/lib/docs-new.ts +63 -0
- package/src/lib/docs-sweep.ts +42 -28
- package/src/lib/headless/index.ts +287 -0
- package/src/lib/identities/assume.ts +67 -86
- package/src/lib/instructions/apply.ts +33 -20
- package/src/lib/instructions/bundle.ts +2 -2
- package/src/lib/instructions/splice.ts +21 -7
- package/src/lib/instructions/templates.ts +85 -13
- package/dist/core/agents/cli-emit.d.ts +0 -27
- package/dist/core/agents/cli-emit.d.ts.map +0 -1
- package/dist/core/agents/cli-emit.js +0 -57
- package/dist/core/agents/codex-replay.d.ts +0 -29
- package/dist/core/agents/codex-replay.d.ts.map +0 -1
- package/dist/core/agents/codex-replay.js +0 -138
- package/dist/core/agents/events/consume.d.ts +0 -82
- package/dist/core/agents/events/consume.d.ts.map +0 -1
- package/dist/core/agents/events/consume.js +0 -195
- package/dist/core/agents/events/emit.d.ts +0 -42
- package/dist/core/agents/events/emit.d.ts.map +0 -1
- package/dist/core/agents/events/emit.js +0 -75
- package/dist/core/agents/events/ulid.d.ts +0 -11
- package/dist/core/agents/events/ulid.d.ts.map +0 -1
- package/dist/core/agents/events/ulid.js +0 -47
- package/dist/core/agents/state/heartbeat-projector.d.ts +0 -76
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
- package/dist/core/agents/state/heartbeat-projector.js +0 -581
- package/dist/core/hooks/events/emit.d.ts +0 -31
- package/dist/core/hooks/events/emit.d.ts.map +0 -1
- package/dist/core/hooks/events/emit.js +0 -93
- package/dist/core/hooks/events/rotate.d.ts +0 -43
- package/dist/core/hooks/events/rotate.d.ts.map +0 -1
- package/dist/core/hooks/events/rotate.js +0 -142
- package/dist/core/hooks/events/schema.d.ts +0 -341
- package/dist/core/hooks/events/schema.d.ts.map +0 -1
- package/dist/core/hooks/events/schema.js +0 -12
- package/dist/core/hooks/events/ulid.d.ts +0 -10
- package/dist/core/hooks/events/ulid.d.ts.map +0 -1
- package/dist/core/hooks/events/ulid.js +0 -47
- package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
- package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
- package/dist/lib/docs-frontmatter-migrate.js +0 -364
- package/src/core/agents/cli-emit.ts +0 -64
- package/src/core/agents/codex-replay.ts +0 -163
- package/src/core/agents/events/consume.ts +0 -254
- package/src/core/agents/events/emit.ts +0 -115
- package/src/core/agents/events/ulid.ts +0 -51
- package/src/core/agents/state/heartbeat-projector.ts +0 -645
- package/src/core/hooks/events/emit.ts +0 -125
- package/src/core/hooks/events/rotate.ts +0 -151
- package/src/core/hooks/events/schema.ts +0 -582
- package/src/core/hooks/events/ulid.ts +0 -51
- package/src/lib/docs-frontmatter-migrate.ts +0 -427
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { buildEventV3 } from "../events/v3/builder.js";
|
|
3
|
+
import { normalizeNativeIdV3 } from "../events/v3/canonical.js";
|
|
4
|
+
import { readEventV3ControlState } from "../events/v3/control.js";
|
|
5
|
+
import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
|
|
6
|
+
import { liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
|
|
7
|
+
import { readHookProducerStateV3 } from "../events/v3/producers/recorder.js";
|
|
8
|
+
import { writeEventV3 } from "../events/v3/writer.js";
|
|
9
|
+
import { LiveCoordinationAuthorityV3Error } from "./live-authority-v3.js";
|
|
10
|
+
import { liveCoordinationAdapterV3 } from "./state/live-coordination-view.js";
|
|
11
|
+
export function recordLiveSweepObservationV3(input) {
|
|
12
|
+
return recordObservation(input, "lifecycle.sweep_observed", {
|
|
13
|
+
subject_instance_id: liveInstanceIdV3(input.owner),
|
|
14
|
+
observation: input.observation,
|
|
15
|
+
provisional: true,
|
|
16
|
+
age_ms: Math.max(0, Math.floor(input.ageMs)),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function recordLiveResumeObservationV3(input) {
|
|
20
|
+
const normalized = withAttestedAdapter(input);
|
|
21
|
+
const hook = requireHookState(normalized);
|
|
22
|
+
return recordObservation(normalized, "session.resumed", {
|
|
23
|
+
prior_generation_id: hook.generation_id,
|
|
24
|
+
continuity: "native",
|
|
25
|
+
evidence_reference: "heartbeat_recreated",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function recordObservation(input, eventType, payload) {
|
|
29
|
+
const route = resolveLiveEventLedgerRouteV3(input.coordRoot);
|
|
30
|
+
if (route.state === "blocked")
|
|
31
|
+
throw new LiveCoordinationAuthorityV3Error(route.reason);
|
|
32
|
+
input = withAttestedAdapter(input);
|
|
33
|
+
const control = readEventV3ControlState(input.coordRoot);
|
|
34
|
+
if (control.state !== route.mode) {
|
|
35
|
+
throw new LiveCoordinationAuthorityV3Error("control_state_changed");
|
|
36
|
+
}
|
|
37
|
+
const hook = requireHookState(input);
|
|
38
|
+
if (!hook.last_event_id)
|
|
39
|
+
throw new LiveCoordinationAuthorityV3Error("generation_has_no_event");
|
|
40
|
+
const rootId = control.genesis.event.scope.root_id;
|
|
41
|
+
const context = fingerprintContextV3(input.coordRoot, rootId, hook.generation_id, control.genesis.profile.privacy_key_epoch);
|
|
42
|
+
const nativeObservationId = `${eventType}\0${input.owner}\0${input.observedAt ?? "now"}\0${JSON.stringify(payload)}`;
|
|
43
|
+
const common = {
|
|
44
|
+
producer: {
|
|
45
|
+
producer_id: "prd_agent-coord-lifecycle",
|
|
46
|
+
boot_id: `boot_${randomUUID()}`,
|
|
47
|
+
sequence: 1,
|
|
48
|
+
component: "agent-coord",
|
|
49
|
+
build_id: route.build_id,
|
|
50
|
+
platform: livePlatformV3(),
|
|
51
|
+
},
|
|
52
|
+
scope: {
|
|
53
|
+
root_id: rootId,
|
|
54
|
+
instance_id: hook.instance_id,
|
|
55
|
+
session_id: hook.session_id,
|
|
56
|
+
generation_id: hook.generation_id,
|
|
57
|
+
},
|
|
58
|
+
attestation_id: hook.attestation_id,
|
|
59
|
+
links: { caused_by: [hook.last_event_id] },
|
|
60
|
+
provenance: {
|
|
61
|
+
source_event: `agent-coord.${eventType}`,
|
|
62
|
+
attestation: "derived",
|
|
63
|
+
confidence: "exact",
|
|
64
|
+
source_record_id: normalizeNativeIdV3(context, `agent-coord.${eventType}`, nativeObservationId),
|
|
65
|
+
attribution: {
|
|
66
|
+
method: "heartbeat_match",
|
|
67
|
+
state: "verified",
|
|
68
|
+
observer_instance_id: hook.instance_id,
|
|
69
|
+
subject_instance_id: hook.instance_id,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
observed_at: input.observedAt,
|
|
73
|
+
monotonic_ns: process.hrtime.bigint().toString(),
|
|
74
|
+
};
|
|
75
|
+
const event = buildEventV3(eventType, { ...common, payload });
|
|
76
|
+
writeEventV3(input.coordRoot, event);
|
|
77
|
+
return { state: "recorded", event };
|
|
78
|
+
}
|
|
79
|
+
function withAttestedAdapter(input) {
|
|
80
|
+
const adapter = liveCoordinationAdapterV3(input.coordRoot, input.owner);
|
|
81
|
+
if (!adapter)
|
|
82
|
+
return input;
|
|
83
|
+
return { ...input, adapter };
|
|
84
|
+
}
|
|
85
|
+
function requireHookState(input) {
|
|
86
|
+
const hook = readHookProducerStateV3(input.coordRoot, input.adapter, input.nativeSessionId);
|
|
87
|
+
if (!hook || hook.instance_id !== liveInstanceIdV3(input.owner)) {
|
|
88
|
+
throw new LiveCoordinationAuthorityV3Error("hook_generation_not_joinable");
|
|
89
|
+
}
|
|
90
|
+
return hook;
|
|
91
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Adapter } from "../adapter.js";
|
|
2
|
+
import type { EventTypeV3, EventV3 } from "../events/v3/contract.js";
|
|
3
|
+
import type { LiveCoordinationObservationV3 } from "../events/v3/live-observation.js";
|
|
4
|
+
export type { LiveCoordinationObservationV3 } from "../events/v3/live-observation.js";
|
|
5
|
+
export interface RecordLiveCoordinationObservationV3Input {
|
|
6
|
+
coordRoot: string;
|
|
7
|
+
owner: string;
|
|
8
|
+
nativeSessionId: string;
|
|
9
|
+
adapter: Adapter;
|
|
10
|
+
observation: LiveCoordinationObservationV3;
|
|
11
|
+
observationId?: string;
|
|
12
|
+
observedAt?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface RecordLiveCoordinationObservationV3Result {
|
|
15
|
+
state: "recorded";
|
|
16
|
+
event: EventV3;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Append a non-authority coordination observation against one attested live
|
|
20
|
+
* generation. Raw message and record bodies are used only to derive keyed
|
|
21
|
+
* fingerprints or content digests; they never enter the ledger payload.
|
|
22
|
+
*/
|
|
23
|
+
export declare function recordLiveCoordinationObservationV3(input: RecordLiveCoordinationObservationV3Input): RecordLiveCoordinationObservationV3Result;
|
|
24
|
+
export type LiveCoordinationObservationEventTypeV3 = Extract<EventTypeV3, LiveCoordinationObservationV3["event_type"]>;
|
|
25
|
+
//# sourceMappingURL=live-observation-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-observation-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/live-observation-v3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIrE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAWtF,YAAY,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF,MAAM,WAAW,wCAAwC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,6BAA6B,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yCAAyC;IACxD,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,GAC9C,yCAAyC,CAkJ3C;AAkBD,MAAM,MAAM,sCAAsC,GAAG,OAAO,CAC1D,WAAW,EACX,6BAA6B,CAAC,YAAY,CAAC,CAC5C,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { buildEventV3 } from "../events/v3/builder.js";
|
|
3
|
+
import { canonicalJsonV3, fingerprintV3, normalizeNativeIdV3, sha256V3, } from "../events/v3/canonical.js";
|
|
4
|
+
import { readEventV3ControlState } from "../events/v3/control.js";
|
|
5
|
+
import { readCoordinationViewV3 } from "../events/v3/coordination-view.js";
|
|
6
|
+
import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
|
|
7
|
+
import { liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
|
|
8
|
+
import { readHookProducerStateV3 } from "../events/v3/producers/recorder.js";
|
|
9
|
+
import { writeEventV3 } from "../events/v3/writer.js";
|
|
10
|
+
import { LiveCoordinationAuthorityV3Error } from "./live-authority-v3.js";
|
|
11
|
+
import { liveCoordinationAdapterV3 } from "./state/live-coordination-view.js";
|
|
12
|
+
/**
|
|
13
|
+
* Append a non-authority coordination observation against one attested live
|
|
14
|
+
* generation. Raw message and record bodies are used only to derive keyed
|
|
15
|
+
* fingerprints or content digests; they never enter the ledger payload.
|
|
16
|
+
*/
|
|
17
|
+
export function recordLiveCoordinationObservationV3(input) {
|
|
18
|
+
const route = resolveLiveEventLedgerRouteV3(input.coordRoot);
|
|
19
|
+
if (route.state === "blocked")
|
|
20
|
+
throw new LiveCoordinationAuthorityV3Error(route.reason);
|
|
21
|
+
const control = readEventV3ControlState(input.coordRoot);
|
|
22
|
+
if (control.state !== route.mode) {
|
|
23
|
+
throw new LiveCoordinationAuthorityV3Error("control_state_changed");
|
|
24
|
+
}
|
|
25
|
+
const adapter = liveCoordinationAdapterV3(input.coordRoot, input.owner) ?? input.adapter;
|
|
26
|
+
const hook = readHookProducerStateV3(input.coordRoot, adapter, input.nativeSessionId);
|
|
27
|
+
if (!hook ||
|
|
28
|
+
hook.terminal ||
|
|
29
|
+
!hook.last_event_id ||
|
|
30
|
+
hook.instance_id !== liveInstanceIdV3(input.owner)) {
|
|
31
|
+
throw new LiveCoordinationAuthorityV3Error("hook_generation_not_joinable");
|
|
32
|
+
}
|
|
33
|
+
const rootId = control.genesis.event.scope.root_id;
|
|
34
|
+
const fingerprintContext = fingerprintContextV3(input.coordRoot, rootId, hook.generation_id, control.genesis.profile.privacy_key_epoch);
|
|
35
|
+
const observationId = input.observationId ?? `${input.observation.event_type}-${randomUUID()}`;
|
|
36
|
+
const subject = "subject" in input.observation && input.observation.subject
|
|
37
|
+
? liveInstanceIdV3(input.observation.subject)
|
|
38
|
+
: hook.instance_id;
|
|
39
|
+
const common = {
|
|
40
|
+
producer: {
|
|
41
|
+
producer_id: "prd_agent-coord-observation",
|
|
42
|
+
boot_id: `boot_${randomUUID()}`,
|
|
43
|
+
sequence: 1,
|
|
44
|
+
component: "agent-coord",
|
|
45
|
+
build_id: route.build_id,
|
|
46
|
+
platform: livePlatformV3(),
|
|
47
|
+
},
|
|
48
|
+
scope: {
|
|
49
|
+
root_id: rootId,
|
|
50
|
+
instance_id: hook.instance_id,
|
|
51
|
+
session_id: hook.session_id,
|
|
52
|
+
generation_id: hook.generation_id,
|
|
53
|
+
},
|
|
54
|
+
attestation_id: hook.attestation_id,
|
|
55
|
+
links: { caused_by: [hook.last_event_id] },
|
|
56
|
+
provenance: {
|
|
57
|
+
source_event: `agent-coord.${input.observation.event_type}`,
|
|
58
|
+
attestation: "derived",
|
|
59
|
+
confidence: "exact",
|
|
60
|
+
source_record_id: normalizeNativeIdV3(fingerprintContext, "agent-coord.observation", observationId),
|
|
61
|
+
attribution: {
|
|
62
|
+
method: "session_env",
|
|
63
|
+
state: "verified",
|
|
64
|
+
observer_instance_id: hook.instance_id,
|
|
65
|
+
subject_instance_id: subject,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
observed_at: input.observedAt,
|
|
69
|
+
monotonic_ns: process.hrtime.bigint().toString(),
|
|
70
|
+
};
|
|
71
|
+
const observation = input.observation;
|
|
72
|
+
let event;
|
|
73
|
+
switch (observation.event_type) {
|
|
74
|
+
case "coord.status_observed":
|
|
75
|
+
event = buildEventV3("coord.status_observed", {
|
|
76
|
+
...common,
|
|
77
|
+
payload: {
|
|
78
|
+
observer_instance_id: hook.instance_id,
|
|
79
|
+
subject_instance_id: subject,
|
|
80
|
+
status: safeToken(observation.status),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
break;
|
|
84
|
+
case "coord.presence_changed": {
|
|
85
|
+
// The ledger projection, not the independently versioned presence file,
|
|
86
|
+
// owns the canonical prior state. Omitting an unknown first prior keeps
|
|
87
|
+
// the transition honest and avoids manufacturing a history.
|
|
88
|
+
const projectedPrior = readCoordinationViewV3(input.coordRoot).instances[hook.instance_id]
|
|
89
|
+
?.presence_state;
|
|
90
|
+
event = buildEventV3("coord.presence_changed", {
|
|
91
|
+
...common,
|
|
92
|
+
payload: {
|
|
93
|
+
actor_instance_id: hook.instance_id,
|
|
94
|
+
subject_instance_id: hook.instance_id,
|
|
95
|
+
...(projectedPrior ? { prior_state: safeToken(projectedPrior) } : {}),
|
|
96
|
+
new_state: safeToken(observation.new_state),
|
|
97
|
+
reason: reasonCode(observation.reason),
|
|
98
|
+
authority: {},
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case "coord.message_observed":
|
|
104
|
+
event = buildEventV3("coord.message_observed", {
|
|
105
|
+
...common,
|
|
106
|
+
payload: {
|
|
107
|
+
message_id: safeToken(observation.message_id ?? `msg_${randomUUID()}`),
|
|
108
|
+
direction: observation.direction,
|
|
109
|
+
peer_instance_id: subject,
|
|
110
|
+
body_length: Buffer.byteLength(observation.body, "utf8"),
|
|
111
|
+
body_fingerprint: fingerprintV3(fingerprintContext, "coord.message.body", observation.body, "generation"),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
break;
|
|
115
|
+
case "council.state_changed":
|
|
116
|
+
event = buildEventV3("council.state_changed", {
|
|
117
|
+
...common,
|
|
118
|
+
payload: {
|
|
119
|
+
council_id: safeToken(observation.council_id),
|
|
120
|
+
...(observation.prior_state ? { prior_state: safeToken(observation.prior_state) } : {}),
|
|
121
|
+
new_state: safeToken(observation.new_state),
|
|
122
|
+
record_digest: sha256V3(canonicalJsonV3(observation.record)),
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
break;
|
|
126
|
+
case "decision.state_changed": {
|
|
127
|
+
const projectedDecisionPrior = readCoordinationViewV3(input.coordRoot).decisions[observation.decision_id];
|
|
128
|
+
event = buildEventV3("decision.state_changed", {
|
|
129
|
+
...common,
|
|
130
|
+
payload: {
|
|
131
|
+
decision_id: safeToken(observation.decision_id),
|
|
132
|
+
...(projectedDecisionPrior ? { prior_state: safeToken(projectedDecisionPrior) } : {}),
|
|
133
|
+
new_state: safeToken(observation.new_state),
|
|
134
|
+
record_digest: sha256V3(canonicalJsonV3(observation.record)),
|
|
135
|
+
authority: { record_id: safeToken(observation.decision_id) },
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
writeEventV3(input.coordRoot, event);
|
|
142
|
+
return { state: "recorded", event };
|
|
143
|
+
}
|
|
144
|
+
function safeToken(value) {
|
|
145
|
+
const normalized = value.normalize("NFC");
|
|
146
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._:/+-]{0,127}$/.test(normalized)) {
|
|
147
|
+
throw new LiveCoordinationAuthorityV3Error(`invalid_safe_token:${value}`);
|
|
148
|
+
}
|
|
149
|
+
return normalized;
|
|
150
|
+
}
|
|
151
|
+
function reasonCode(value) {
|
|
152
|
+
const normalized = value.normalize("NFC");
|
|
153
|
+
if (!/^[a-z0-9][a-z0-9._-]{0,79}$/.test(normalized)) {
|
|
154
|
+
throw new LiveCoordinationAuthorityV3Error(`invalid_reason_code:${value}`);
|
|
155
|
+
}
|
|
156
|
+
return normalized;
|
|
157
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* council-pending hash-dedup, the cross-adapter first-session naming nudge,
|
|
4
4
|
* the Cursor/Codex set-task staleness nudge, and the Codex status-footer
|
|
5
5
|
* reminder.
|
|
6
|
-
* agent-hook's
|
|
6
|
+
* agent-hook's turn.started post-emit handler calls this
|
|
7
7
|
* and forwards the result as the adapter-shaped additionalContext payload.
|
|
8
8
|
*
|
|
9
9
|
* Four subsections combined into one additionalContext payload:
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* + sorted(files_touched) + platform, sorted by instance_id).
|
|
13
13
|
* 2. Council pending: pending open-council IDs hashed; re-emits when the
|
|
14
14
|
* ID set changes.
|
|
15
|
-
* 3. Focus nudge. Until the session has
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* 3. Focus nudge. Until the session has displayed its current suggested
|
|
16
|
+
* name, tells every adapter on every prompt to send the exact fenced block
|
|
17
|
+
* before prose or another tool call.
|
|
18
18
|
* Cursor/Codex additionally get the existing unset/stale-task reminder
|
|
19
19
|
* because their Stop hooks do not enforce task declarations as reliably
|
|
20
20
|
* as Claude Code's.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
1
|
+
{"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AA4CH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8EAC0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;kFAC8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;uEACmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;wBAIoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAqDnE"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* council-pending hash-dedup, the cross-adapter first-session naming nudge,
|
|
4
4
|
* the Cursor/Codex set-task staleness nudge, and the Codex status-footer
|
|
5
5
|
* reminder.
|
|
6
|
-
* agent-hook's
|
|
6
|
+
* agent-hook's turn.started post-emit handler calls this
|
|
7
7
|
* and forwards the result as the adapter-shaped additionalContext payload.
|
|
8
8
|
*
|
|
9
9
|
* Four subsections combined into one additionalContext payload:
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* + sorted(files_touched) + platform, sorted by instance_id).
|
|
13
13
|
* 2. Council pending: pending open-council IDs hashed; re-emits when the
|
|
14
14
|
* ID set changes.
|
|
15
|
-
* 3. Focus nudge. Until the session has
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* 3. Focus nudge. Until the session has displayed its current suggested
|
|
16
|
+
* name, tells every adapter on every prompt to send the exact fenced block
|
|
17
|
+
* before prose or another tool call.
|
|
18
18
|
* Cursor/Codex additionally get the existing unset/stale-task reminder
|
|
19
19
|
* because their Stop hooks do not enforce task declarations as reliably
|
|
20
20
|
* as Claude Code's.
|
|
@@ -35,6 +35,8 @@ import { join } from "node:path";
|
|
|
35
35
|
import { coordEnv } from "../../../lib/env.js";
|
|
36
36
|
import { endOfTurnStatusCommand, resolveBinName } from "../../config.js";
|
|
37
37
|
import { readRemoteMachines } from "../../presence/index.js";
|
|
38
|
+
import { sessionNameDisplayBlock, sessionNameDisplayPending } from "../session-name-display.js";
|
|
39
|
+
import { readLiveCoordinationRow, readLiveCoordinationRows, } from "../state/live-coordination-view.js";
|
|
38
40
|
import { formatPendingCouncils } from "./session-context.js";
|
|
39
41
|
/**
|
|
40
42
|
* Build the combined UserPromptSubmit additionalContext string. Returns "" when
|
|
@@ -89,7 +91,7 @@ export function renderPromptContext(opts) {
|
|
|
89
91
|
return sections.join("\n\n");
|
|
90
92
|
}
|
|
91
93
|
function renderTurnRitualReminder(coordRoot, selfInstanceId, adapter) {
|
|
92
|
-
const hb =
|
|
94
|
+
const hb = readLiveCoordinationRow(coordRoot, selfInstanceId);
|
|
93
95
|
if (!hb || hb.kind === "subagent" || hb.kind === "transient" || hb.workflow_run_id)
|
|
94
96
|
return "";
|
|
95
97
|
const bin = resolveBinName(coordRoot);
|
|
@@ -103,7 +105,7 @@ function renderTurnRitualReminder(coordRoot, selfInstanceId, adapter) {
|
|
|
103
105
|
"A turn that ends without these is bounced by the Stop hook and costs a retry.");
|
|
104
106
|
}
|
|
105
107
|
function renderStatusFooterReminder(coordRoot, selfInstanceId) {
|
|
106
|
-
const hb =
|
|
108
|
+
const hb = readLiveCoordinationRow(coordRoot, selfInstanceId);
|
|
107
109
|
if (!hb || hb.kind === "subagent" || hb.kind === "transient" || hb.workflow_run_id)
|
|
108
110
|
return "";
|
|
109
111
|
const statusCommand = endOfTurnStatusCommand(coordRoot);
|
|
@@ -118,16 +120,9 @@ function renderStatusFooterReminder(coordRoot, selfInstanceId) {
|
|
|
118
120
|
* `agents set-task` uses for `first_of_session`; clears still stamp the field.
|
|
119
121
|
*/
|
|
120
122
|
function computeFocusNudgeIfChanged(coordRoot, selfInstanceId, opts) {
|
|
121
|
-
const
|
|
122
|
-
if (!
|
|
123
|
+
const hb = readLiveCoordinationRow(coordRoot, selfInstanceId);
|
|
124
|
+
if (!hb)
|
|
123
125
|
return "";
|
|
124
|
-
let hb;
|
|
125
|
-
try {
|
|
126
|
-
hb = JSON.parse(readFileSync(hbPath, "utf8"));
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
return "";
|
|
130
|
-
}
|
|
131
126
|
const hashFile = join(coordRoot, ".harnery", `.last-task-nudge-hash.${selfInstanceId}`);
|
|
132
127
|
// Subagents and workflow children have no human-owned session/tab to rename.
|
|
133
128
|
if (hb.kind === "subagent" || hb.kind === "transient" || hb.workflow_run_id) {
|
|
@@ -140,18 +135,16 @@ function computeFocusNudgeIfChanged(coordRoot, selfInstanceId, opts) {
|
|
|
140
135
|
let needsNudge = false;
|
|
141
136
|
let message = "";
|
|
142
137
|
let nudgeKind = "";
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
(hb.session_name_seen_for !== undefined &&
|
|
146
|
-
hb.suggested_session_name !== hb.session_name_seen_for))) {
|
|
138
|
+
const pendingSessionName = sessionNameDisplayPending(hb);
|
|
139
|
+
if (opts.sessionNameNudge && (!hb.suggested_session_name || pendingSessionName)) {
|
|
147
140
|
// Keyed on "a name was ever produced", not task_updated_at: a bare clear
|
|
148
141
|
// as the first declaration must not end the naming window.
|
|
149
142
|
needsNudge = true;
|
|
150
143
|
nudgeKind = "session-name";
|
|
151
|
-
message =
|
|
152
|
-
? `This session
|
|
144
|
+
message = pendingSessionName
|
|
145
|
+
? `This session name is still pending display. Before any prose or another tool call, send this exact block as your next assistant text:\n\n${sessionNameDisplayBlock(pendingSessionName)}`
|
|
153
146
|
: `This session has no name yet: run \`${bin} agents set-task "<2-5 word session topic>"\` as your first tool call. ` +
|
|
154
|
-
"When it returns `first_of_session: true`,
|
|
147
|
+
"When it returns `first_of_session: true`, send its `suggested_session_name` as the exact fenced block requested by the PostToolUse instruction before any prose or another tool call. " +
|
|
155
148
|
"Then continue with the task; that `set-task` also satisfies this turn's focus declaration.";
|
|
156
149
|
}
|
|
157
150
|
else if (opts.taskNudge && !taskValue) {
|
|
@@ -197,28 +190,20 @@ function computeFocusNudgeIfChanged(coordRoot, selfInstanceId, opts) {
|
|
|
197
190
|
return message;
|
|
198
191
|
}
|
|
199
192
|
function computePeerTableIfChanged(coordRoot, selfInstanceId, selfSessionIdFallback) {
|
|
200
|
-
const activeDir = join(coordRoot, ".harnery", "active");
|
|
201
|
-
if (!existsSync(activeDir))
|
|
202
|
-
return "";
|
|
203
193
|
// Read self heartbeat for session_id (group key); fall back to the caller's hint.
|
|
204
194
|
let mySessionId = selfSessionIdFallback;
|
|
205
|
-
const
|
|
195
|
+
const rows = readLiveCoordinationRows(coordRoot);
|
|
196
|
+
const selfHb = readLiveCoordinationRow(coordRoot, selfInstanceId);
|
|
206
197
|
if (selfHb?.session_id)
|
|
207
198
|
mySessionId = selfHb.session_id;
|
|
208
199
|
if (!mySessionId)
|
|
209
200
|
return "";
|
|
210
|
-
// Collect
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if (!f.endsWith(".json"))
|
|
214
|
-
continue;
|
|
215
|
-
const hb = readHeartbeat(join(activeDir, f));
|
|
216
|
-
if (!hb?.instance_id || hb.instance_id === selfInstanceId)
|
|
217
|
-
continue;
|
|
218
|
-
peers.push(hb);
|
|
219
|
-
}
|
|
201
|
+
// Collect peers from the selected ledger route. Under V3 this is the
|
|
202
|
+
// canonical projection, never the legacy active directory.
|
|
203
|
+
const peers = rows.filter((heartbeat) => heartbeat.instance_id && heartbeat.instance_id !== selfInstanceId);
|
|
220
204
|
// Cross-machine presence (ADR 0016): sessions on other machines, from the
|
|
221
|
-
// locally-fetched presence refs. Advisory
|
|
205
|
+
// locally-fetched presence refs. Advisory only; remote presence never grants
|
|
206
|
+
// claim authority.
|
|
222
207
|
const remote = readRemoteMachinesSafe(coordRoot);
|
|
223
208
|
if (peers.length === 0 && remote.length === 0)
|
|
224
209
|
return "";
|
|
@@ -343,14 +328,6 @@ function computeCouncilPendingIfChanged(coordRoot, selfInstanceId, agentName) {
|
|
|
343
328
|
return formatPendingCouncils(coordRoot, agentName);
|
|
344
329
|
}
|
|
345
330
|
/* ---------- helpers ---------- */
|
|
346
|
-
function readHeartbeat(path) {
|
|
347
|
-
try {
|
|
348
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
349
|
-
}
|
|
350
|
-
catch {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
331
|
function safeRead(path) {
|
|
355
332
|
try {
|
|
356
333
|
return readFileSync(path, "utf8").trim();
|
|
@@ -433,12 +410,10 @@ function formatRow(r, nowSec) {
|
|
|
433
410
|
const startedSec = parseIsoSec(r.started_at) ?? parseIsoSec(r.last_heartbeat);
|
|
434
411
|
const ageFrom = startedSec === null ? "age unknown" : fmtAge(nowSec - startedSec);
|
|
435
412
|
const filesPart = fmtFiles(r.display_files);
|
|
436
|
-
const lastActivity = fmtLastActivity(r, nowSec);
|
|
437
|
-
const turnSummary = r.turn_summary ? `\n last turn: ${r.turn_summary.slice(0, 80)}` : "";
|
|
438
413
|
// Prefer a short instance_id over a bare "unknown" so an incomplete row is
|
|
439
414
|
// still identifiable.
|
|
440
415
|
const label = r.name ?? (r.instance_id ? r.instance_id.slice(0, 8) : "unknown");
|
|
441
|
-
return ` - agent-${label}${taskPart} (${statePart}, ${ageFrom}, ${filesPart}
|
|
416
|
+
return ` - agent-${label}${taskPart} (${statePart}, ${ageFrom}, ${filesPart})`;
|
|
442
417
|
}
|
|
443
418
|
function formatState(r) {
|
|
444
419
|
const activity = r.activity ?? "unknown";
|
|
@@ -453,16 +428,6 @@ function fmtFiles(files) {
|
|
|
453
428
|
return `holds: ${files.join(", ")}`;
|
|
454
429
|
return `holds: ${files.slice(0, 3).join(", ")}, +${files.length - 3} more`;
|
|
455
430
|
}
|
|
456
|
-
function fmtLastActivity(r, nowSec) {
|
|
457
|
-
if (!r.last_tool)
|
|
458
|
-
return "";
|
|
459
|
-
const lastTs = parseIsoSec(r.last_heartbeat) ?? parseIsoSec(r.started_at);
|
|
460
|
-
const tail = r.last_tool_target ? ` ${r.last_tool_target.slice(0, 60)}` : "";
|
|
461
|
-
// No valid timestamp → render the tool without an absurd age.
|
|
462
|
-
if (lastTs === null)
|
|
463
|
-
return `, last: ${r.last_tool}${tail}`;
|
|
464
|
-
return `, last: ${r.last_tool}${tail} ${fmtAge(nowSec - lastTs)}`;
|
|
465
|
-
}
|
|
466
431
|
/** Epoch-seconds for an ISO string, or null when missing/unparseable (so callers
|
|
467
432
|
* can render "age unknown" instead of an epoch-derived absurd age). */
|
|
468
433
|
function parseIsoSec(iso) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SessionStart UX renderer: combines the peer table, the wiring check, and
|
|
3
|
-
* the pending-council formatter so agent-hook session.
|
|
3
|
+
* the pending-council formatter so agent-hook session.started can emit the
|
|
4
4
|
* combined `systemMessage` JSON directly.
|
|
5
5
|
*
|
|
6
6
|
* Outputs a Claude Code SessionStart hookSpecificOutput.additionalContext
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAyC,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAyC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAwB1E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+BAC2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA6E7D;AAkID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBvD;AA0DD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiDlF;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,iBAAW,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SessionStart UX renderer: combines the peer table, the wiring check, and
|
|
3
|
-
* the pending-council formatter so agent-hook session.
|
|
3
|
+
* the pending-council formatter so agent-hook session.started can emit the
|
|
4
4
|
* combined `systemMessage` JSON directly.
|
|
5
5
|
*
|
|
6
6
|
* Outputs a Claude Code SessionStart hookSpecificOutput.additionalContext
|
|
@@ -12,6 +12,7 @@ import { join } from "node:path";
|
|
|
12
12
|
import { resolveBinName, resolveHooksSetupHint } from "../../config.js";
|
|
13
13
|
import { harneryVersion, loadAdapterWiring } from "../../hooks/adapter/wiring.js";
|
|
14
14
|
import { readRemoteMachines } from "../../presence/index.js";
|
|
15
|
+
import { readLiveCoordinationRows } from "../state/live-coordination-view.js";
|
|
15
16
|
import { readForkParent } from "../state/names.js";
|
|
16
17
|
/**
|
|
17
18
|
* Build the combined SessionStart systemMessage. Returns the additionalContext
|
|
@@ -113,26 +114,9 @@ function formatRemoteMachines(coordRoot) {
|
|
|
113
114
|
return "";
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
/** Read
|
|
117
|
+
/** Read peers from the selected ledger route, excluding self. */
|
|
117
118
|
function readActivePeers(coordRoot, selfInstanceId) {
|
|
118
|
-
|
|
119
|
-
const dir = join(coordRoot, ".harnery", "active");
|
|
120
|
-
if (!existsSync(dir))
|
|
121
|
-
return out;
|
|
122
|
-
for (const f of readdirSync(dir)) {
|
|
123
|
-
if (!f.endsWith(".json"))
|
|
124
|
-
continue;
|
|
125
|
-
try {
|
|
126
|
-
const hb = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
|
127
|
-
if (!hb.instance_id || hb.instance_id === selfInstanceId)
|
|
128
|
-
continue;
|
|
129
|
-
out.push(hb);
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
/* skip */
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return out;
|
|
119
|
+
return readLiveCoordinationRows(coordRoot).filter((heartbeat) => heartbeat.instance_id && heartbeat.instance_id !== selfInstanceId);
|
|
136
120
|
}
|
|
137
121
|
/**
|
|
138
122
|
* Renders the peer table as
|
|
@@ -187,9 +171,7 @@ function formatRow(r, nowSec) {
|
|
|
187
171
|
const reason = lifecycle === "blocked" && r.task_state_reason ? `: ${r.task_state_reason.slice(0, 80)}` : "";
|
|
188
172
|
const ageFrom = fmtAge(nowSec - parseIsoSec(r.started_at));
|
|
189
173
|
const filesPart = fmtFiles(r.display_files);
|
|
190
|
-
|
|
191
|
-
const turnSummary = r.turn_summary ? `\n last turn: ${r.turn_summary.slice(0, 80)}` : "";
|
|
192
|
-
return ` - agent-${r.name ?? "unknown"}${taskPart} (activity=${activity}, lifecycle=${lifecycle}${reason}, ${ageFrom}, ${filesPart}${lastActivity})${turnSummary}`;
|
|
174
|
+
return ` - agent-${r.name ?? "unknown"}${taskPart} (activity=${activity}, lifecycle=${lifecycle}${reason}, ${ageFrom}, ${filesPart})`;
|
|
193
175
|
}
|
|
194
176
|
function fmtFiles(files) {
|
|
195
177
|
if (files.length === 0)
|
|
@@ -198,14 +180,6 @@ function fmtFiles(files) {
|
|
|
198
180
|
return `holds: ${files.join(", ")}`;
|
|
199
181
|
return `holds: ${files.slice(0, 3).join(", ")}, +${files.length - 3} more`;
|
|
200
182
|
}
|
|
201
|
-
function fmtLastActivity(r, nowSec) {
|
|
202
|
-
if (!r.last_tool)
|
|
203
|
-
return "";
|
|
204
|
-
const lastTs = parseIsoSec(r.last_heartbeat ?? r.started_at);
|
|
205
|
-
const ageSec = nowSec - lastTs;
|
|
206
|
-
const tail = r.last_tool_target ? ` ${r.last_tool_target.slice(0, 60)}` : "";
|
|
207
|
-
return `, last: ${r.last_tool}${tail} ${fmtAge(ageSec)}`;
|
|
208
|
-
}
|
|
209
183
|
function parseIsoSec(iso) {
|
|
210
184
|
if (!iso)
|
|
211
185
|
return 0;
|
|
@@ -300,7 +274,9 @@ function extractFirstSubmodule(gitmodulesPath) {
|
|
|
300
274
|
* superproject) via a `git rev-parse --git-dir` vs `--git-common-dir` check.
|
|
301
275
|
*/
|
|
302
276
|
function isLinkedWorktree(coordRoot) {
|
|
303
|
-
const dir = spawnSync("git", ["-C", coordRoot, "rev-parse", "--git-dir"], {
|
|
277
|
+
const dir = spawnSync("git", ["-C", coordRoot, "rev-parse", "--git-dir"], {
|
|
278
|
+
encoding: "utf8",
|
|
279
|
+
});
|
|
304
280
|
const common = spawnSync("git", ["-C", coordRoot, "rev-parse", "--git-common-dir"], {
|
|
305
281
|
encoding: "utf8",
|
|
306
282
|
});
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* the peer's name in the reason.
|
|
9
9
|
* 2. Ordering: if we already hold a claim on path A and want path
|
|
10
10
|
* B, B must sort > A lexicographically. Otherwise emit
|
|
11
|
-
* claim.
|
|
11
|
+
* claim.authority_conflict (ordering_violation) and block.
|
|
12
12
|
*
|
|
13
|
-
* Reads
|
|
14
|
-
*
|
|
13
|
+
* Reads the authority-safe V3 coordination projection. Disposable heartbeat
|
|
14
|
+
* caches are materialization targets, never the source of claim authority.
|
|
15
15
|
*/
|
|
16
16
|
export type { VerdictResult } from "./verdict.js";
|
|
17
17
|
import type { VerdictResult } from "./verdict.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim-conflict.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/claim-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"claim-conflict.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/claim-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgBlD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,aAAa,CA4GjF"}
|