harnery 0.32.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +7 -1
- package/dist/commands/adapter.js +2 -2
- package/dist/commands/agents.d.ts +144 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +1408 -565
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +7 -6
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -16
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +234 -12
- package/dist/commands/checkpoint.d.ts.map +1 -1
- package/dist/commands/checkpoint.js +3 -2
- package/dist/commands/claude-desktop.d.ts +2 -2
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +2 -2
- package/dist/commands/context.js +1 -6
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +22 -38
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +91 -28
- package/dist/commands/doctor.d.ts +4 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +55 -7
- package/dist/commands/events.d.ts +5 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +189 -0
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +13 -4
- package/dist/commands/init.d.ts +10 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +233 -51
- package/dist/commands/instructions.d.ts +4 -0
- package/dist/commands/instructions.d.ts.map +1 -0
- package/dist/commands/instructions.js +100 -0
- package/dist/commands/journal.d.ts.map +1 -1
- package/dist/commands/journal.js +4 -13
- package/dist/commands/ledger-v3.d.ts +5 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -0
- package/dist/commands/ledger-v3.js +91 -0
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +15 -6
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/web.d.ts +6 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +67 -7
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +22 -5
- package/dist/core/adapter.d.ts +5 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapters/attest.d.ts +5 -2
- package/dist/core/adapters/attest.d.ts.map +1 -1
- package/dist/core/adapters/attest.js +8 -3
- package/dist/core/adapters/profiles.d.ts +6 -6
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +4 -4
- package/dist/core/agents/canonical-emit.d.ts +17 -15
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +27 -25
- package/dist/core/agents/cli.js +212 -235
- package/dist/core/agents/codex-archive-v3.d.ts +14 -0
- package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
- package/dist/core/agents/codex-archive-v3.js +110 -0
- package/dist/core/agents/coord-client.d.ts +19 -70
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +65 -155
- package/dist/core/agents/finalization.d.ts +4 -1
- package/dist/core/agents/finalization.d.ts.map +1 -1
- package/dist/core/agents/finalization.js +89 -32
- package/dist/core/agents/index.d.ts +5 -5
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +5 -5
- package/dist/core/agents/live-authority-v3.d.ts +59 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
- package/dist/core/agents/live-authority-v3.js +233 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
- package/dist/core/agents/live-lifecycle-v3.js +91 -0
- package/dist/core/agents/live-observation-v3.d.ts +25 -0
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
- package/dist/core/agents/live-observation-v3.js +157 -0
- package/dist/core/agents/render/prompt-context.d.ts +10 -4
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +61 -55
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +15 -33
- package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +79 -127
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +3 -18
- package/dist/core/agents/rules/stop-hook.d.ts +9 -50
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +193 -236
- package/dist/core/agents/session-events.d.ts +5 -7
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +127 -95
- package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
- package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalization-state-v3.js +40 -0
- package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalizer-v3.js +734 -0
- package/dist/core/agents/session-name-display.d.ts +40 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -0
- package/dist/core/agents/session-name-display.js +119 -0
- package/dist/core/agents/state/activity-log.d.ts +3 -3
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +7 -16
- package/dist/core/agents/state/heartbeat-writer.d.ts +29 -46
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +59 -199
- package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-view.js +209 -0
- package/dist/core/agents/state/session-state.d.ts +45 -0
- package/dist/core/agents/state/session-state.d.ts.map +1 -0
- package/dist/core/agents/state/session-state.js +90 -0
- package/dist/core/agents/state/stale-sweep.d.ts +1 -1
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +26 -15
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +5 -7
- package/dist/core/config.d.ts +33 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +98 -2
- package/dist/core/context/index.d.ts +1 -4
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +9 -9
- package/dist/core/events/span-parent.d.ts +15 -0
- package/dist/core/events/span-parent.d.ts.map +1 -0
- package/dist/core/events/span-parent.js +34 -0
- package/dist/core/events/v3/advance.d.ts +14 -0
- package/dist/core/events/v3/advance.d.ts.map +1 -0
- package/dist/core/events/v3/advance.js +134 -0
- package/dist/core/events/v3/authority-outbox.d.ts +78 -0
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
- package/dist/core/events/v3/authority-outbox.js +399 -0
- package/dist/core/events/v3/base-builder.d.ts +20 -0
- package/dist/core/events/v3/base-builder.d.ts.map +1 -0
- package/dist/core/events/v3/base-builder.js +29 -0
- package/dist/core/events/v3/base-contract.d.ts +7576 -0
- package/dist/core/events/v3/base-contract.d.ts.map +1 -0
- package/dist/core/events/v3/base-contract.js +647 -0
- package/dist/core/events/v3/bootstrap.d.ts +34 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
- package/dist/core/events/v3/bootstrap.js +175 -0
- package/dist/core/events/v3/builder.d.ts +20 -0
- package/dist/core/events/v3/builder.d.ts.map +1 -0
- package/dist/core/events/v3/builder.js +28 -0
- package/dist/core/events/v3/canonical.d.ts +31 -0
- package/dist/core/events/v3/canonical.d.ts.map +1 -0
- package/dist/core/events/v3/canonical.js +100 -0
- package/dist/core/events/v3/capabilities.d.ts +31 -0
- package/dist/core/events/v3/capabilities.d.ts.map +1 -0
- package/dist/core/events/v3/capabilities.js +107 -0
- package/dist/core/events/v3/capability-drift.d.ts +22 -0
- package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
- package/dist/core/events/v3/capability-drift.js +134 -0
- package/dist/core/events/v3/catalog.d.ts +38 -0
- package/dist/core/events/v3/catalog.d.ts.map +1 -0
- package/dist/core/events/v3/catalog.js +135 -0
- package/dist/core/events/v3/clock-order.d.ts +34 -0
- package/dist/core/events/v3/clock-order.d.ts.map +1 -0
- package/dist/core/events/v3/clock-order.js +35 -0
- package/dist/core/events/v3/contract.d.ts +171 -0
- package/dist/core/events/v3/contract.d.ts.map +1 -0
- package/dist/core/events/v3/contract.js +180 -0
- package/dist/core/events/v3/control.d.ts +111 -0
- package/dist/core/events/v3/control.d.ts.map +1 -0
- package/dist/core/events/v3/control.js +419 -0
- package/dist/core/events/v3/coordination-view.d.ts +69 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-view.js +119 -0
- package/dist/core/events/v3/economics.d.ts +77 -0
- package/dist/core/events/v3/economics.d.ts.map +1 -0
- package/dist/core/events/v3/economics.js +274 -0
- package/dist/core/events/v3/finalization-view.d.ts +26 -0
- package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
- package/dist/core/events/v3/finalization-view.js +37 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
- package/dist/core/events/v3/fingerprint-keys.js +217 -0
- package/dist/core/events/v3/generated.d.ts +4 -0
- package/dist/core/events/v3/generated.d.ts.map +1 -0
- package/dist/core/events/v3/generated.js +47 -0
- package/dist/core/events/v3/ids.d.ts +9 -0
- package/dist/core/events/v3/ids.d.ts.map +1 -0
- package/dist/core/events/v3/ids.js +25 -0
- package/dist/core/events/v3/index.d.ts +35 -0
- package/dist/core/events/v3/index.d.ts.map +1 -0
- package/dist/core/events/v3/index.js +33 -0
- package/dist/core/events/v3/latency.d.ts +63 -0
- package/dist/core/events/v3/latency.d.ts.map +1 -0
- package/dist/core/events/v3/latency.js +412 -0
- package/dist/core/events/v3/live-feed.d.ts +45 -0
- package/dist/core/events/v3/live-feed.d.ts.map +1 -0
- package/dist/core/events/v3/live-feed.js +246 -0
- package/dist/core/events/v3/live-observation.d.ts +35 -0
- package/dist/core/events/v3/live-observation.d.ts.map +1 -0
- package/dist/core/events/v3/live-observation.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts +57 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -0
- package/dist/core/events/v3/live-routing.js +107 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command-recorder.js +477 -0
- package/dist/core/events/v3/producers/command.d.ts +50 -0
- package/dist/core/events/v3/producers/command.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command.js +135 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
- package/dist/core/events/v3/producers/coordination.d.ts +90 -0
- package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination.js +229 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook-base.js +424 -0
- package/dist/core/events/v3/producers/hook.d.ts +29 -0
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook.js +71 -0
- package/dist/core/events/v3/producers/intake.d.ts +65 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
- package/dist/core/events/v3/producers/intake.js +244 -0
- package/dist/core/events/v3/producers/recorder.d.ts +240 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/recorder.js +2176 -0
- package/dist/core/events/v3/projection.d.ts +101 -0
- package/dist/core/events/v3/projection.d.ts.map +1 -0
- package/dist/core/events/v3/projection.js +479 -0
- package/dist/core/events/v3/reader.d.ts +75 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -0
- package/dist/core/events/v3/reader.js +778 -0
- package/dist/core/events/v3/recovery-record.d.ts +47 -0
- package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
- package/dist/core/events/v3/recovery-record.js +167 -0
- package/dist/core/events/v3/recovery.d.ts +22 -0
- package/dist/core/events/v3/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/recovery.js +227 -0
- package/dist/core/events/v3/span-state.d.ts +52 -0
- package/dist/core/events/v3/span-state.d.ts.map +1 -0
- package/dist/core/events/v3/span-state.js +142 -0
- package/dist/core/events/v3/targets.d.ts +23 -0
- package/dist/core/events/v3/targets.d.ts.map +1 -0
- package/dist/core/events/v3/targets.js +134 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
- package/dist/core/events/v3/turn-telemetry.js +168 -0
- package/dist/core/events/v3/validate.d.ts +9 -0
- package/dist/core/events/v3/validate.d.ts.map +1 -0
- package/dist/core/events/v3/validate.js +281 -0
- package/dist/core/events/v3/writer.d.ts +56 -0
- package/dist/core/events/v3/writer.d.ts.map +1 -0
- package/dist/core/events/v3/writer.js +335 -0
- package/dist/core/governor/index.d.ts +1 -1
- package/dist/core/governor/index.d.ts.map +1 -1
- package/dist/core/governor/index.js +1 -1
- package/dist/core/governor/plan-api.d.ts +2 -1
- package/dist/core/governor/plan-api.d.ts.map +1 -1
- package/dist/core/governor/plan-api.js +6 -3
- package/dist/core/governor/read.d.ts +1 -1
- package/dist/core/governor/read.d.ts.map +1 -1
- package/dist/core/governor/read.js +1 -1
- package/dist/core/governor/state.d.ts +9 -0
- package/dist/core/governor/state.d.ts.map +1 -1
- package/dist/core/governor/state.js +40 -3
- package/dist/core/guard/config.d.ts +5 -0
- package/dist/core/guard/config.d.ts.map +1 -0
- package/dist/core/guard/config.js +157 -0
- package/dist/core/guard/coordinator.d.ts +14 -0
- package/dist/core/guard/coordinator.d.ts.map +1 -0
- package/dist/core/guard/coordinator.js +173 -0
- package/dist/core/guard/evaluator.d.ts +4 -0
- package/dist/core/guard/evaluator.d.ts.map +1 -0
- package/dist/core/guard/evaluator.js +242 -0
- package/dist/core/guard/evidence-v3.d.ts +15 -0
- package/dist/core/guard/evidence-v3.d.ts.map +1 -0
- package/dist/core/guard/evidence-v3.js +171 -0
- package/dist/core/guard/index.d.ts +10 -0
- package/dist/core/guard/index.d.ts.map +1 -0
- package/dist/core/guard/index.js +6 -0
- package/dist/core/guard/live-source-v3.d.ts +40 -0
- package/dist/core/guard/live-source-v3.d.ts.map +1 -0
- package/dist/core/guard/live-source-v3.js +128 -0
- package/dist/core/guard/storage.d.ts +27 -0
- package/dist/core/guard/storage.d.ts.map +1 -0
- package/dist/core/guard/storage.js +140 -0
- package/dist/core/guard/types.d.ts +119 -0
- package/dist/core/guard/types.d.ts.map +1 -0
- package/dist/core/guard/types.js +1 -0
- package/dist/core/hooks/adapter/detect.d.ts +18 -1
- package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
- package/dist/core/hooks/adapter/detect.js +29 -0
- package/dist/core/hooks/adapter/events.d.ts +7 -4
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +13 -4
- package/dist/core/hooks/adapter/output.d.ts +2 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.d.ts +7 -4
- package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.js +64 -24
- package/dist/core/hooks/adapter/wiring.d.ts +30 -4
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +89 -11
- package/dist/core/hooks/cli.d.ts +1 -1
- package/dist/core/hooks/cli.js +345 -400
- package/dist/core/hooks/codex-authorization.d.ts +30 -0
- package/dist/core/hooks/codex-authorization.d.ts.map +1 -0
- package/dist/core/hooks/codex-authorization.js +199 -0
- package/dist/core/hooks/effects/image-capture.d.ts +20 -34
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +212 -221
- package/dist/core/hooks/effects/index.d.ts +1 -9
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +1 -24
- package/dist/core/hooks/events/input-hash.d.ts +7 -0
- package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
- package/dist/core/hooks/events/input-hash.js +43 -0
- package/dist/core/hooks/index.d.ts +4 -3
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +2 -3
- package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
- package/dist/core/hooks/resolve/coord-root.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +16 -15
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +51 -42
- package/dist/core/hooks/resolve/transcript.d.ts +33 -3
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +155 -14
- package/dist/core/hooks/session-name-presence.d.ts +9 -10
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +15 -15
- package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
- package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
- package/dist/core/journal/index.d.ts +2 -2
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +9 -22
- package/dist/core/presence/blob.d.ts +8 -3
- package/dist/core/presence/blob.d.ts.map +1 -1
- package/dist/core/presence/blob.js +54 -41
- package/dist/core/presence/codec-digest.d.ts +29 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -0
- package/dist/core/presence/codec-digest.js +170 -0
- package/dist/core/presence/index.js +15 -1
- package/dist/core/presence/relay-client.d.ts +1 -1
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +5 -5
- package/dist/core/work/index.d.ts +1 -1
- package/dist/core/work/index.d.ts.map +1 -1
- package/dist/core/work/index.js +1 -1
- package/dist/core/work/read.d.ts +1 -1
- package/dist/core/work/read.d.ts.map +1 -1
- package/dist/core/work/read.js +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +6 -0
- package/dist/core/work/state.d.ts +9 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +17 -3
- package/dist/core/workflow/engine.js +24 -25
- package/dist/core/workflow/live-session-v3.d.ts +19 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
- package/dist/core/workflow/live-session-v3.js +86 -0
- package/dist/core/workflow/scope-id.d.ts +3 -0
- package/dist/core/workflow/scope-id.d.ts.map +1 -0
- package/dist/core/workflow/scope-id.js +5 -0
- package/dist/core/workflow/workspaces/leases.d.ts +4 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +53 -19
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/browser/client.d.ts +41 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +203 -0
- package/dist/lib/browser/critique.d.ts +28 -2
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +74 -18
- package/dist/lib/browser/geometry.d.ts +1 -1
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +130 -6
- package/dist/lib/browser/index.d.ts +3 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +3 -0
- package/dist/lib/browser/qa-plan.d.ts +174 -0
- package/dist/lib/browser/qa-plan.d.ts.map +1 -0
- package/dist/lib/browser/qa-plan.js +321 -0
- package/dist/lib/browser/qa-reuse.d.ts +99 -0
- package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
- package/dist/lib/browser/qa-reuse.js +222 -0
- package/dist/lib/browser/qa-snapshot.d.ts +64 -0
- package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
- package/dist/lib/browser/qa-snapshot.js +171 -0
- package/dist/lib/browser/runts.d.ts.map +1 -1
- package/dist/lib/browser/runts.js +22 -1
- package/dist/lib/browser/tiling.d.ts +71 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -0
- package/dist/lib/browser/tiling.js +118 -0
- package/dist/lib/context/index.d.ts +0 -3
- package/dist/lib/context/index.d.ts.map +1 -1
- package/dist/lib/context/index.js +20 -42
- package/dist/lib/council/index.d.ts +2 -2
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +9 -20
- package/dist/lib/docs-frontmatter.d.ts +1 -6
- package/dist/lib/docs-frontmatter.d.ts.map +1 -1
- package/dist/lib/docs-frontmatter.js +12 -78
- package/dist/lib/docs-index.d.ts +9 -0
- package/dist/lib/docs-index.d.ts.map +1 -1
- package/dist/lib/docs-index.js +32 -3
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +14 -30
- package/dist/lib/docs-metadata-audit.d.ts +19 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
- package/dist/lib/docs-metadata-audit.js +132 -0
- package/dist/lib/docs-metadata-managed.d.ts +23 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
- package/dist/lib/docs-metadata-managed.js +78 -0
- package/dist/lib/docs-metadata-sync.d.ts +20 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
- package/dist/lib/docs-metadata-sync.js +222 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2-schema.js +134 -0
- package/dist/lib/docs-metadata-v2.d.ts +21 -0
- package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2.js +424 -0
- package/dist/lib/docs-new.d.ts +11 -0
- package/dist/lib/docs-new.d.ts.map +1 -0
- package/dist/lib/docs-new.js +52 -0
- package/dist/lib/docs-sweep.d.ts.map +1 -1
- package/dist/lib/docs-sweep.js +45 -29
- package/dist/lib/headless/index.d.ts +98 -0
- package/dist/lib/headless/index.d.ts.map +1 -0
- package/dist/lib/headless/index.js +211 -0
- package/dist/lib/identities/assume.d.ts +4 -4
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +52 -68
- package/dist/lib/instructions/apply.d.ts +5 -4
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +32 -20
- package/dist/lib/instructions/bundle.d.ts +33 -0
- package/dist/lib/instructions/bundle.d.ts.map +1 -0
- package/dist/lib/instructions/bundle.js +149 -0
- package/dist/lib/instructions/splice.d.ts +0 -1
- package/dist/lib/instructions/splice.d.ts.map +1 -1
- package/dist/lib/instructions/splice.js +22 -6
- package/dist/lib/instructions/templates.d.ts +7 -5
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +79 -9
- package/package.json +27 -6
- package/schemas/config.schema.json +120 -2
- package/schemas/docs-metadata-v2.schema.json +441 -0
- package/schemas/event-v3.schema.json +24472 -0
- package/src/commander.ts +7 -1
- package/src/commands/adapter.ts +2 -2
- package/src/commands/agents.ts +1737 -570
- package/src/commands/artifacts.ts +7 -6
- package/src/commands/backup.ts +29 -21
- package/src/commands/browse.ts +349 -8
- package/src/commands/checkpoint.ts +4 -3
- package/src/commands/claude-desktop.ts +7 -5
- package/src/commands/context.ts +1 -6
- package/src/commands/decision.ts +27 -44
- package/src/commands/docs.ts +100 -33
- package/src/commands/doctor.ts +73 -8
- package/src/commands/events.ts +256 -0
- package/src/commands/governor.ts +18 -4
- package/src/commands/init.ts +264 -57
- package/src/commands/instructions.ts +129 -0
- package/src/commands/journal.ts +4 -13
- package/src/commands/ledger-v3.ts +111 -0
- package/src/commands/presence.ts +18 -11
- package/src/commands/sync.ts +1 -1
- package/src/commands/web.ts +67 -8
- package/src/commands/work.ts +28 -5
- package/src/core/adapter.ts +5 -0
- package/src/core/adapters/attest.ts +8 -3
- package/src/core/adapters/profiles.ts +4 -6
- package/src/core/agents/canonical-emit.ts +39 -28
- package/src/core/agents/cli.ts +242 -263
- package/src/core/agents/codex-archive-v3.ts +138 -0
- package/src/core/agents/coord-client.ts +75 -177
- package/src/core/agents/finalization.ts +120 -38
- package/src/core/agents/index.ts +5 -5
- package/src/core/agents/live-authority-v3.ts +375 -0
- package/src/core/agents/live-lifecycle-v3.ts +140 -0
- package/src/core/agents/live-observation-v3.ts +216 -0
- package/src/core/agents/render/prompt-context.ts +89 -55
- package/src/core/agents/render/session-context.ts +23 -32
- package/src/core/agents/rules/claim-conflict.ts +85 -126
- package/src/core/agents/rules/commit-conflict.ts +3 -14
- package/src/core/agents/rules/stop-hook.ts +239 -293
- package/src/core/agents/session-events.ts +137 -104
- package/src/core/agents/session-finalization-state-v3.ts +90 -0
- package/src/core/agents/session-finalizer-v3.ts +953 -0
- package/src/core/agents/session-name-display.ts +149 -0
- package/src/core/agents/state/activity-log.ts +6 -14
- package/src/core/agents/state/heartbeat-writer.ts +98 -242
- package/src/core/agents/state/live-coordination-view.ts +290 -0
- package/src/core/agents/state/session-state.ts +143 -0
- package/src/core/agents/state/stale-sweep.ts +40 -17
- package/src/core/artifacts/index.ts +4 -5
- package/src/core/config.ts +148 -3
- package/src/core/context/index.ts +9 -17
- package/src/core/events/span-parent.ts +46 -0
- package/src/core/events/v3/advance.ts +168 -0
- package/src/core/events/v3/authority-outbox.ts +548 -0
- package/src/core/events/v3/base-builder.ts +60 -0
- package/src/core/events/v3/base-contract.ts +882 -0
- package/src/core/events/v3/bootstrap.ts +226 -0
- package/src/core/events/v3/builder.ts +59 -0
- package/src/core/events/v3/canonical.ts +153 -0
- package/src/core/events/v3/capabilities.ts +171 -0
- package/src/core/events/v3/capability-drift.ts +177 -0
- package/src/core/events/v3/catalog.ts +202 -0
- package/src/core/events/v3/clock-order.ts +41 -0
- package/src/core/events/v3/contract.ts +365 -0
- package/src/core/events/v3/control.ts +576 -0
- package/src/core/events/v3/coordination-view.ts +193 -0
- package/src/core/events/v3/economics.ts +384 -0
- package/src/core/events/v3/finalization-view.ts +67 -0
- package/src/core/events/v3/fingerprint-keys.ts +260 -0
- package/src/core/events/v3/generated.ts +48 -0
- package/src/core/events/v3/ids.ts +33 -0
- package/src/core/events/v3/index.ts +322 -0
- package/src/core/events/v3/latency.ts +551 -0
- package/src/core/events/v3/live-feed.ts +319 -0
- package/src/core/events/v3/live-observation.ts +39 -0
- package/src/core/events/v3/live-routing.ts +135 -0
- package/src/core/events/v3/producers/command-recorder.ts +631 -0
- package/src/core/events/v3/producers/command.ts +201 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
- package/src/core/events/v3/producers/coordination.ts +355 -0
- package/src/core/events/v3/producers/hook-base.ts +578 -0
- package/src/core/events/v3/producers/hook.ts +119 -0
- package/src/core/events/v3/producers/intake.ts +319 -0
- package/src/core/events/v3/producers/recorder.ts +2805 -0
- package/src/core/events/v3/projection.ts +653 -0
- package/src/core/events/v3/reader.ts +1127 -0
- package/src/core/events/v3/recovery-record.ts +244 -0
- package/src/core/events/v3/recovery.ts +271 -0
- package/src/core/events/v3/span-state.ts +187 -0
- package/src/core/events/v3/targets.ts +182 -0
- package/src/core/events/v3/turn-telemetry.ts +259 -0
- package/src/core/events/v3/validate.ts +361 -0
- package/src/core/events/v3/writer.ts +419 -0
- package/src/core/governor/index.ts +3 -0
- package/src/core/governor/plan-api.ts +10 -2
- package/src/core/governor/read.ts +3 -0
- package/src/core/governor/state.ts +52 -5
- package/src/core/guard/config.ts +206 -0
- package/src/core/guard/coordinator.ts +227 -0
- package/src/core/guard/evaluator.ts +343 -0
- package/src/core/guard/evidence-v3.ts +227 -0
- package/src/core/guard/index.ts +35 -0
- package/src/core/guard/live-source-v3.ts +204 -0
- package/src/core/guard/storage.ts +188 -0
- package/src/core/guard/types.ts +152 -0
- package/src/core/hooks/adapter/detect.ts +28 -1
- package/src/core/hooks/adapter/events.ts +15 -6
- package/src/core/hooks/adapter/output.ts +7 -2
- package/src/core/hooks/adapter/parse.ts +81 -36
- package/src/core/hooks/adapter/wiring.ts +119 -13
- package/src/core/hooks/cli.ts +398 -422
- package/src/core/hooks/codex-authorization.ts +253 -0
- package/src/core/hooks/effects/image-capture.ts +228 -238
- package/src/core/hooks/effects/index.ts +1 -36
- package/src/core/hooks/events/input-hash.ts +47 -0
- package/src/core/hooks/index.ts +4 -11
- package/src/core/hooks/resolve/coord-root.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +52 -45
- package/src/core/hooks/resolve/transcript.ts +165 -14
- package/src/core/hooks/session-name-presence.ts +14 -15
- package/src/core/hooks/unsafe-cross-shell.ts +1 -1
- package/src/core/journal/index.ts +15 -22
- package/src/core/presence/blob.ts +63 -38
- package/src/core/presence/codec-digest.ts +215 -0
- package/src/core/presence/index.ts +18 -1
- package/src/core/presence/relay-client.ts +5 -5
- package/src/core/work/index.ts +3 -0
- package/src/core/work/read.ts +3 -0
- package/src/core/work/runner.ts +6 -0
- package/src/core/work/state.ts +27 -3
- package/src/core/workflow/engine.ts +24 -24
- package/src/core/workflow/live-session-v3.ts +126 -0
- package/src/core/workflow/scope-id.ts +6 -0
- package/src/core/workflow/workspaces/leases.ts +56 -19
- package/src/index.ts +1 -1
- package/src/lib/browser/client.ts +230 -0
- package/src/lib/browser/critique.ts +104 -27
- package/src/lib/browser/geometry.ts +143 -14
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/browser/qa-plan.ts +501 -0
- package/src/lib/browser/qa-reuse.ts +306 -0
- package/src/lib/browser/qa-snapshot.ts +223 -0
- package/src/lib/browser/runts.ts +27 -2
- package/src/lib/browser/tiling.ts +164 -0
- package/src/lib/context/index.ts +22 -46
- package/src/lib/council/index.ts +9 -21
- package/src/lib/docs-frontmatter.ts +8 -79
- package/src/lib/docs-index.ts +33 -3
- package/src/lib/docs-lint.ts +15 -29
- package/src/lib/docs-metadata-audit.ts +166 -0
- package/src/lib/docs-metadata-managed.ts +83 -0
- package/src/lib/docs-metadata-sync.ts +262 -0
- package/src/lib/docs-metadata-v2-schema.ts +138 -0
- package/src/lib/docs-metadata-v2.ts +646 -0
- package/src/lib/docs-new.ts +63 -0
- package/src/lib/docs-sweep.ts +42 -28
- package/src/lib/headless/index.ts +287 -0
- package/src/lib/identities/assume.ts +67 -86
- package/src/lib/instructions/apply.ts +33 -20
- package/src/lib/instructions/bundle.ts +199 -0
- package/src/lib/instructions/splice.ts +21 -7
- package/src/lib/instructions/templates.ts +85 -13
- package/dist/core/agents/cli-emit.d.ts +0 -27
- package/dist/core/agents/cli-emit.d.ts.map +0 -1
- package/dist/core/agents/cli-emit.js +0 -57
- package/dist/core/agents/codex-replay.d.ts +0 -29
- package/dist/core/agents/codex-replay.d.ts.map +0 -1
- package/dist/core/agents/codex-replay.js +0 -138
- package/dist/core/agents/events/consume.d.ts +0 -82
- package/dist/core/agents/events/consume.d.ts.map +0 -1
- package/dist/core/agents/events/consume.js +0 -195
- package/dist/core/agents/events/emit.d.ts +0 -42
- package/dist/core/agents/events/emit.d.ts.map +0 -1
- package/dist/core/agents/events/emit.js +0 -75
- package/dist/core/agents/events/ulid.d.ts +0 -11
- package/dist/core/agents/events/ulid.d.ts.map +0 -1
- package/dist/core/agents/events/ulid.js +0 -47
- package/dist/core/agents/state/heartbeat-projector.d.ts +0 -65
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
- package/dist/core/agents/state/heartbeat-projector.js +0 -527
- package/dist/core/hooks/events/emit.d.ts +0 -31
- package/dist/core/hooks/events/emit.d.ts.map +0 -1
- package/dist/core/hooks/events/emit.js +0 -93
- package/dist/core/hooks/events/rotate.d.ts +0 -43
- package/dist/core/hooks/events/rotate.d.ts.map +0 -1
- package/dist/core/hooks/events/rotate.js +0 -142
- package/dist/core/hooks/events/schema.d.ts +0 -312
- package/dist/core/hooks/events/schema.d.ts.map +0 -1
- package/dist/core/hooks/events/schema.js +0 -12
- package/dist/core/hooks/events/ulid.d.ts +0 -10
- package/dist/core/hooks/events/ulid.d.ts.map +0 -1
- package/dist/core/hooks/events/ulid.js +0 -47
- package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
- package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
- package/dist/lib/docs-frontmatter-migrate.js +0 -364
- package/src/core/agents/cli-emit.ts +0 -64
- package/src/core/agents/codex-replay.ts +0 -163
- package/src/core/agents/events/consume.ts +0 -254
- package/src/core/agents/events/emit.ts +0 -115
- package/src/core/agents/events/ulid.ts +0 -51
- package/src/core/agents/state/heartbeat-projector.ts +0 -582
- package/src/core/hooks/events/emit.ts +0 -125
- package/src/core/hooks/events/rotate.ts +0 -151
- package/src/core/hooks/events/schema.ts +0 -538
- package/src/core/hooks/events/ulid.ts +0 -51
- package/src/lib/docs-frontmatter-migrate.ts +0 -427
|
@@ -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
|
|
@@ -101,7 +102,10 @@ function formatRemoteMachines(coordRoot) {
|
|
|
101
102
|
const files = a.files_touched?.length
|
|
102
103
|
? `holds: ${a.files_touched.slice(0, 3).join(", ")}${a.files_touched.length > 3 ? `, +${a.files_touched.length - 3} more` : ""}`
|
|
103
104
|
: "nothing held";
|
|
104
|
-
|
|
105
|
+
const reason = a.task_state === "blocked" && a.task_state_reason
|
|
106
|
+
? `: ${a.task_state_reason.slice(0, 80)}`
|
|
107
|
+
: "";
|
|
108
|
+
lines.push(` - agent-${a.name ?? a.instance_id.slice(0, 8)} @${m.machine}${task} (activity=${a.activity}, lifecycle=${a.task_state}${reason}, ${files})`);
|
|
105
109
|
}
|
|
106
110
|
}
|
|
107
111
|
return `Sessions on other machines (advisory, via presence refs):\n${lines.join("\n")}`;
|
|
@@ -110,26 +114,9 @@ function formatRemoteMachines(coordRoot) {
|
|
|
110
114
|
return "";
|
|
111
115
|
}
|
|
112
116
|
}
|
|
113
|
-
/** Read
|
|
117
|
+
/** Read peers from the selected ledger route, excluding self. */
|
|
114
118
|
function readActivePeers(coordRoot, selfInstanceId) {
|
|
115
|
-
|
|
116
|
-
const dir = join(coordRoot, ".harnery", "active");
|
|
117
|
-
if (!existsSync(dir))
|
|
118
|
-
return out;
|
|
119
|
-
for (const f of readdirSync(dir)) {
|
|
120
|
-
if (!f.endsWith(".json"))
|
|
121
|
-
continue;
|
|
122
|
-
try {
|
|
123
|
-
const hb = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
|
124
|
-
if (!hb.instance_id || hb.instance_id === selfInstanceId)
|
|
125
|
-
continue;
|
|
126
|
-
out.push(hb);
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
/* skip */
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return out;
|
|
119
|
+
return readLiveCoordinationRows(coordRoot).filter((heartbeat) => heartbeat.instance_id && heartbeat.instance_id !== selfInstanceId);
|
|
133
120
|
}
|
|
134
121
|
/**
|
|
135
122
|
* Renders the peer table as
|
|
@@ -179,11 +166,12 @@ function renderSubtable(rows, header, nowSec) {
|
|
|
179
166
|
}
|
|
180
167
|
function formatRow(r, nowSec) {
|
|
181
168
|
const taskPart = r.task ? ` "${r.task.slice(0, 60)}"` : "";
|
|
169
|
+
const activity = r.activity ?? "unknown";
|
|
170
|
+
const lifecycle = r.task_state ?? "active";
|
|
171
|
+
const reason = lifecycle === "blocked" && r.task_state_reason ? `: ${r.task_state_reason.slice(0, 80)}` : "";
|
|
182
172
|
const ageFrom = fmtAge(nowSec - parseIsoSec(r.started_at));
|
|
183
173
|
const filesPart = fmtFiles(r.display_files);
|
|
184
|
-
|
|
185
|
-
const turnSummary = r.turn_summary ? `\n last turn: ${r.turn_summary.slice(0, 80)}` : "";
|
|
186
|
-
return ` - agent-${r.name ?? "unknown"}${taskPart} (${ageFrom}, ${filesPart}${lastActivity})${turnSummary}`;
|
|
174
|
+
return ` - agent-${r.name ?? "unknown"}${taskPart} (activity=${activity}, lifecycle=${lifecycle}${reason}, ${ageFrom}, ${filesPart})`;
|
|
187
175
|
}
|
|
188
176
|
function fmtFiles(files) {
|
|
189
177
|
if (files.length === 0)
|
|
@@ -192,14 +180,6 @@ function fmtFiles(files) {
|
|
|
192
180
|
return `holds: ${files.join(", ")}`;
|
|
193
181
|
return `holds: ${files.slice(0, 3).join(", ")}, +${files.length - 3} more`;
|
|
194
182
|
}
|
|
195
|
-
function fmtLastActivity(r, nowSec) {
|
|
196
|
-
if (!r.last_tool)
|
|
197
|
-
return "";
|
|
198
|
-
const lastTs = parseIsoSec(r.last_heartbeat ?? r.started_at);
|
|
199
|
-
const ageSec = nowSec - lastTs;
|
|
200
|
-
const tail = r.last_tool_target ? ` ${r.last_tool_target.slice(0, 60)}` : "";
|
|
201
|
-
return `, last: ${r.last_tool}${tail} ${fmtAge(ageSec)}`;
|
|
202
|
-
}
|
|
203
183
|
function parseIsoSec(iso) {
|
|
204
184
|
if (!iso)
|
|
205
185
|
return 0;
|
|
@@ -294,7 +274,9 @@ function extractFirstSubmodule(gitmodulesPath) {
|
|
|
294
274
|
* superproject) via a `git rev-parse --git-dir` vs `--git-common-dir` check.
|
|
295
275
|
*/
|
|
296
276
|
function isLinkedWorktree(coordRoot) {
|
|
297
|
-
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
|
+
});
|
|
298
280
|
const common = spawnSync("git", ["-C", coordRoot, "rev-parse", "--git-common-dir"], {
|
|
299
281
|
encoding: "utf8",
|
|
300
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"}
|
|
@@ -8,15 +8,16 @@
|
|
|
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
|
import { spawnSync } from "node:child_process";
|
|
17
|
-
import { existsSync
|
|
17
|
+
import { existsSync } from "node:fs";
|
|
18
18
|
import { join } from "node:path";
|
|
19
|
-
import {
|
|
19
|
+
import { recordLiveClaimChangeV3 } from "../live-authority-v3.js";
|
|
20
|
+
import { readLiveCoordinationRows } from "../state/live-coordination-view.js";
|
|
20
21
|
const FRESHNESS_SECS = 600;
|
|
21
22
|
/**
|
|
22
23
|
* Evaluate a file-claim. Returns deny when another fresh peer claims the
|
|
@@ -45,14 +46,16 @@ export function evaluateClaim(coordRoot, req) {
|
|
|
45
46
|
// prune the claim from their heartbeat and allow the edit. Skips when the
|
|
46
47
|
// file doesn't exist (intent-to-create claim); that surface IS load-bearing.
|
|
47
48
|
if (isFileCommittedClean(coordRoot, req.path)) {
|
|
48
|
-
|
|
49
|
+
if (!releaseClaimThroughLedger(coordRoot, conflict.instance_id, req.path, req)) {
|
|
50
|
+
return authorityUnavailable(req.path, "release the stale claim on");
|
|
51
|
+
}
|
|
49
52
|
// Fall through to ordering check + allow.
|
|
50
53
|
}
|
|
51
54
|
else {
|
|
52
55
|
return {
|
|
53
56
|
allow: false,
|
|
54
57
|
exit_code: 2,
|
|
55
|
-
rule: "claim.
|
|
58
|
+
rule: "claim.authority_conflict",
|
|
56
59
|
reason: `File ${req.path} is currently being edited by agent-${conflict.name ?? conflict.instance_id.slice(0, 8)}. Wait for them to finish or pick a different file. Set HARNERY_AGENT_COORD_OFF=1 to bypass (not recommended).`,
|
|
57
60
|
};
|
|
58
61
|
}
|
|
@@ -104,93 +107,37 @@ export function evaluateClaim(coordRoot, req) {
|
|
|
104
107
|
}
|
|
105
108
|
// Every blocker is a finished (committed-clean) edit: prune them so they
|
|
106
109
|
// stop constraining future acquisitions, then fall through to allow.
|
|
107
|
-
for (const p of blockers)
|
|
108
|
-
|
|
110
|
+
for (const p of blockers) {
|
|
111
|
+
if (!releaseClaimThroughLedger(coordRoot, req.instance_id, p, req)) {
|
|
112
|
+
return authorityUnavailable(p, "release the completed claim on");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
109
115
|
}
|
|
110
116
|
}
|
|
111
117
|
// Acquire the claim: atomic check-and-set. Adds req.path to my
|
|
112
118
|
// files_touched if not already present.
|
|
113
119
|
if (req.mode !== "read") {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return { allow: true, exit_code: 0, rule: "claim.pass" };
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Add `relPath` to the owner's heartbeat `files_touched` array (idempotent;
|
|
120
|
-
* no-op if already present). Atomic temp + rename. If the owner has no
|
|
121
|
-
* heartbeat yet (subagent that hasn't been initialized), creates a minimal one.
|
|
122
|
-
*/
|
|
123
|
-
function addClaimToOwner(coordRoot, instanceId, relPath) {
|
|
124
|
-
const activeDir = join(coordRoot, ".harnery", "active");
|
|
125
|
-
if (!existsSync(activeDir))
|
|
126
|
-
return;
|
|
127
|
-
const path = join(activeDir, `${instanceId}.json`);
|
|
128
|
-
if (!existsSync(path)) {
|
|
129
|
-
const now = new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
130
|
-
const minimal = {
|
|
131
|
-
schema_version: 1,
|
|
132
|
-
instance_id: instanceId,
|
|
133
|
-
session_id: instanceId,
|
|
134
|
-
files_touched: [relPath],
|
|
135
|
-
started_at: now,
|
|
136
|
-
last_heartbeat: now,
|
|
137
|
-
};
|
|
138
|
-
try {
|
|
139
|
-
const tmp = `${path}.tmp.${process.pid}`;
|
|
140
|
-
writeFileSync(tmp, JSON.stringify(minimal, null, 2), "utf8");
|
|
141
|
-
renameSync(tmp, path);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
/* silent */
|
|
120
|
+
if (!acquireClaimThroughLedger(coordRoot, req)) {
|
|
121
|
+
return authorityUnavailable(req.path, "acquire");
|
|
145
122
|
}
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
const body = JSON.parse(readFileSync(path, "utf8"));
|
|
150
|
-
const files = body.files_touched ?? [];
|
|
151
|
-
if (files.includes(relPath))
|
|
152
|
-
return;
|
|
153
|
-
body.files_touched = [...files, relPath];
|
|
154
|
-
const tmp = `${path}.tmp.${process.pid}`;
|
|
155
|
-
writeFileSync(tmp, JSON.stringify(body, null, 2), "utf8");
|
|
156
|
-
renameSync(tmp, path);
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
/* silent */
|
|
160
123
|
}
|
|
124
|
+
return { allow: true, exit_code: 0, rule: "claim.pass" };
|
|
161
125
|
}
|
|
162
126
|
function readPeers(coordRoot) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const inferredParent = hb.parent_instance_id ??
|
|
178
|
-
hb.parent_session_id ??
|
|
179
|
-
(hb.session_id && hb.session_id !== hb.instance_id ? hb.session_id : undefined);
|
|
180
|
-
out.push({
|
|
181
|
-
instance_id: hb.instance_id,
|
|
182
|
-
name: hb.name,
|
|
183
|
-
session_id: hb.session_id ?? hb.instance_id,
|
|
184
|
-
files_touched: hb.files_touched ?? [],
|
|
185
|
-
last_heartbeat: hb.last_heartbeat ?? "",
|
|
186
|
-
parent_instance_id: inferredParent,
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
/* skip */
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return out;
|
|
127
|
+
return readLiveCoordinationRows(coordRoot).map((heartbeat) => {
|
|
128
|
+
// Session IDs are opaque fingerprints. Parentage is valid only when the
|
|
129
|
+
// V3 projection supplies an explicit parent instance.
|
|
130
|
+
const inferredParent = heartbeat.parent_instance_id;
|
|
131
|
+
return {
|
|
132
|
+
instance_id: heartbeat.instance_id,
|
|
133
|
+
name: heartbeat.name,
|
|
134
|
+
session_id: heartbeat.session_id,
|
|
135
|
+
files_touched: heartbeat.files_touched ?? [],
|
|
136
|
+
last_heartbeat: heartbeat.last_heartbeat ?? "",
|
|
137
|
+
platform: heartbeat.platform,
|
|
138
|
+
parent_instance_id: inferredParent,
|
|
139
|
+
};
|
|
140
|
+
});
|
|
194
141
|
}
|
|
195
142
|
/**
|
|
196
143
|
* Compute the group root for `instanceId`. For a parent session it's instanceId
|
|
@@ -257,50 +204,55 @@ function isFileCommittedClean(coordRoot, relPath) {
|
|
|
257
204
|
return false;
|
|
258
205
|
}
|
|
259
206
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
* on failure.
|
|
263
|
-
*/
|
|
264
|
-
function pruneClaimFromPeer(coordRoot, instanceId, relPath) {
|
|
265
|
-
const path = join(coordRoot, ".harnery", "active", `${instanceId}.json`);
|
|
266
|
-
if (!existsSync(path))
|
|
267
|
-
return;
|
|
207
|
+
function acquireClaimThroughLedger(coordRoot, req) {
|
|
208
|
+
const owner = readPeers(coordRoot).find((peer) => peer.instance_id === req.instance_id);
|
|
268
209
|
try {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
catch {
|
|
300
|
-
/* soft-fail */
|
|
301
|
-
}
|
|
210
|
+
recordLiveClaimChangeV3({
|
|
211
|
+
coordRoot,
|
|
212
|
+
owner: req.instance_id,
|
|
213
|
+
nativeSessionId: req.session_id ?? owner?.session_id ?? req.instance_id,
|
|
214
|
+
adapter: adapterFromPlatform(owner?.platform),
|
|
215
|
+
operation: "acquired",
|
|
216
|
+
path: req.path,
|
|
217
|
+
access: "write",
|
|
218
|
+
});
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function releaseClaimThroughLedger(coordRoot, subjectInstanceId, relPath, actor) {
|
|
226
|
+
const owner = readPeers(coordRoot).find((peer) => peer.instance_id === actor.instance_id);
|
|
227
|
+
try {
|
|
228
|
+
recordLiveClaimChangeV3({
|
|
229
|
+
coordRoot,
|
|
230
|
+
owner: actor.instance_id,
|
|
231
|
+
subject: subjectInstanceId,
|
|
232
|
+
nativeSessionId: actor.session_id ?? owner?.session_id ?? actor.instance_id,
|
|
233
|
+
adapter: adapterFromPlatform(owner?.platform),
|
|
234
|
+
operation: "released",
|
|
235
|
+
path: relPath,
|
|
236
|
+
access: "write",
|
|
237
|
+
});
|
|
238
|
+
return true;
|
|
302
239
|
}
|
|
303
240
|
catch {
|
|
304
|
-
|
|
241
|
+
return false;
|
|
305
242
|
}
|
|
306
243
|
}
|
|
244
|
+
function adapterFromPlatform(platform) {
|
|
245
|
+
if (platform === "cursor")
|
|
246
|
+
return "cursor";
|
|
247
|
+
if (platform === "codex")
|
|
248
|
+
return "codex";
|
|
249
|
+
return "claude-code";
|
|
250
|
+
}
|
|
251
|
+
function authorityUnavailable(path, operation) {
|
|
252
|
+
return {
|
|
253
|
+
allow: false,
|
|
254
|
+
exit_code: 2,
|
|
255
|
+
rule: "claim.authority_unavailable",
|
|
256
|
+
reason: `Cannot safely ${operation} ${path}; V3 authority is unavailable.`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit-conflict.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/commit-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"commit-conflict.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/commit-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAkBH,UAAU,QAAQ;IAChB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;wEACoE;IACpE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,mBAAmB,CAuHhG"}
|
|
@@ -20,10 +20,11 @@
|
|
|
20
20
|
* in that set are matched with the staged-is-gitlink rule.
|
|
21
21
|
*/
|
|
22
22
|
import { spawnSync } from "node:child_process";
|
|
23
|
-
import { appendFileSync, existsSync
|
|
23
|
+
import { appendFileSync, existsSync } from "node:fs";
|
|
24
24
|
import { basename, dirname, join } from "node:path";
|
|
25
25
|
import { coordFreshnessSeconds } from "../../config.js";
|
|
26
26
|
import { resolveOwner } from "../../hooks/resolve/owner.js";
|
|
27
|
+
import { readLiveCoordinationRows } from "../state/live-coordination-view.js";
|
|
27
28
|
import { instanceHasLivePid } from "../state/pidmap.js";
|
|
28
29
|
export function evaluateCommit(coordRoot, req) {
|
|
29
30
|
// Resolve the committer here, not in the calling hook. The bash shims used
|
|
@@ -278,23 +279,7 @@ function isPathCleanInHead(coordRoot, relPath) {
|
|
|
278
279
|
return gitProbe(["diff", "--quiet", "HEAD", "--", base], cwd).status === 0;
|
|
279
280
|
}
|
|
280
281
|
function readActivePeers(coordRoot) {
|
|
281
|
-
|
|
282
|
-
if (!existsSync(dir))
|
|
283
|
-
return [];
|
|
284
|
-
const out = [];
|
|
285
|
-
for (const f of readdirSync(dir)) {
|
|
286
|
-
if (!f.endsWith(".json"))
|
|
287
|
-
continue;
|
|
288
|
-
try {
|
|
289
|
-
const hb = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
|
290
|
-
if (hb.instance_id)
|
|
291
|
-
out.push(hb);
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
/* skip */
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return out;
|
|
282
|
+
return readLiveCoordinationRows(coordRoot);
|
|
298
283
|
}
|
|
299
284
|
function shortName(peer) {
|
|
300
285
|
if (peer.name && peer.name.length > 0)
|
|
@@ -1,71 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* from the canonical event stream alone (no transcript scan).
|
|
2
|
+
* End-of-turn ritual verdict derived from the authoritative V3 event ledger.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Rule 2/3: latest `turn.stop` event has `status_box_present: true` (or the
|
|
11
|
-
* stop currently firing carries that field via the in-flight event
|
|
12
|
-
* agent-hook emits before the stop hook runs).
|
|
13
|
-
* Rule 3/3: `state.task_set` event with matching turn boundary exists.
|
|
14
|
-
* Session-naming rule (at most once per session, CC semantics only): the turn
|
|
15
|
-
* whose set-task produced `suggested_session_name` must carry an
|
|
16
|
-
* in-window `turn.stop` with `session_name_present: true`.
|
|
17
|
-
*
|
|
18
|
-
* Pure-prose-turn exemption: when zero `tool.pre_use` events fire in
|
|
19
|
-
* the current turn, rules 1/3 and 3/3 do not apply. Rule 2/3 still applies
|
|
20
|
-
* as a user-visible mobile cue.
|
|
21
|
-
*
|
|
22
|
-
* Remediation continuity: an adapter whose Stop channel re-prompts by
|
|
23
|
-
* submitting a new user message (Cursor's `followup_message`) opens a fresh
|
|
24
|
-
* turn to repair the previous one. Such a turn inherits the window of the turn
|
|
25
|
-
* it repairs, so ritual events accumulate instead of alternating. See
|
|
26
|
-
* `resolveTurnStartMs`.
|
|
4
|
+
* V3 keeps prompt and reply bodies private. The hook producer records only the
|
|
5
|
+
* structural observations needed here: whether the reply showed the status box
|
|
6
|
+
* and current session name, and whether a prompt was emitted by Harnery's own
|
|
7
|
+
* Cursor remediation channel. Task and status evidence comes from the existing
|
|
8
|
+
* `coord.task_changed` and `coord.status_observed` events.
|
|
27
9
|
*/
|
|
10
|
+
import type { EventV3 } from "../../events/v3/contract.js";
|
|
28
11
|
export type { VerdictResult } from "./verdict.js";
|
|
29
12
|
import type { VerdictResult } from "./verdict.js";
|
|
30
13
|
export interface StopHookRequest {
|
|
31
14
|
rule: "stop-hook";
|
|
32
15
|
instance_id: string;
|
|
33
16
|
session_id?: string;
|
|
34
|
-
/** Firing adapter. Selects the end-of-turn ack signal (see `ackSignalFor`).
|
|
35
|
-
* Undefined → Claude Code semantics (transcript-scanned status box). */
|
|
36
17
|
adapter?: string;
|
|
37
|
-
/** Wall-clock cutoff for the current turn; events strictly after this are not yet relevant. */
|
|
38
18
|
now_ms?: number;
|
|
39
|
-
/** Override the turn-window discovery (used by tests). */
|
|
40
19
|
turn_window?: {
|
|
41
20
|
start_ms: number;
|
|
42
21
|
end_ms: number;
|
|
43
22
|
};
|
|
44
|
-
/** Bypass switch: operator escape hatch identical to HARNERY_AGENT_COORD_BYPASS_STOP. */
|
|
45
23
|
bypass?: boolean;
|
|
46
|
-
/** Headless child spawned by `harn workflow` (HARNERY_WORKFLOW_CHILD=1).
|
|
47
|
-
* The end-of-turn ritual exists to surface status to a HUMAN reader; a
|
|
48
|
-
* workflow child reports to the engine's transcript instead, so the ritual is
|
|
49
|
-
* meaningless there — worse, blocking burns the child's turn budget on
|
|
50
|
-
* re-prompts (observed as error_max_turns in the Phase 1 spike). Exempting
|
|
51
|
-
* here, rather than disabling the child's hooks wholesale, keeps heartbeat +
|
|
52
|
-
* event capture on: the child stays visible to peers and the coord layer. */
|
|
53
24
|
workflow_child?: boolean;
|
|
54
25
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Machine marker that opens a Stop-remediation message. Written by
|
|
57
|
-
* `hooks/adapter/output.ts` on the adapters whose Stop channel is a new user
|
|
58
|
-
* message, and read back here off `user_prompt.submit.data.prompt_text` to
|
|
59
|
-
* recognize a turn Harnery itself opened.
|
|
60
|
-
*
|
|
61
|
-
* Leading position is deliberate: `prompt_text` is clamped when recorded, so a
|
|
62
|
-
* trailing marker could be truncated away on a long reason.
|
|
63
|
-
*/
|
|
64
26
|
export declare const STOP_REMEDIATION_MARKER = "[harnery:stop-remediation";
|
|
65
|
-
/**
|
|
66
|
-
* Evaluate the Stop-hook verdict. Returns the first failing rule (or allow
|
|
67
|
-
* when all three pass). Soft-fails open when the event stream isn't
|
|
68
|
-
* readable, fail-open posture on a verdict failure.
|
|
69
|
-
*/
|
|
70
27
|
export declare function evaluateStopHook(coordRoot: string, req: StopHookRequest): VerdictResult;
|
|
28
|
+
/** Pure V3 evaluator used by replay and regression tests after authority checks. */
|
|
29
|
+
export declare function evaluateStopHookV3Events(coordRoot: string, req: StopHookRequest, events: readonly EventV3[]): VerdictResult;
|
|
71
30
|
//# sourceMappingURL=stop-hook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-hook.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/stop-hook.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stop-hook.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/stop-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAM3D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAInE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,aAAa,CA6BvF;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,aAAa,CA2Gf"}
|