harnery 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +4 -0
- package/dist/commands/adapter.js +2 -2
- package/dist/commands/agents.d.ts +144 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +1220 -588
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +7 -6
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -16
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +234 -12
- package/dist/commands/checkpoint.d.ts.map +1 -1
- package/dist/commands/checkpoint.js +3 -2
- package/dist/commands/claude-desktop.d.ts +1 -1
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +3 -74
- package/dist/commands/context.js +1 -6
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +22 -38
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +91 -28
- package/dist/commands/doctor.js +10 -1
- package/dist/commands/events.d.ts +5 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +189 -0
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +13 -4
- package/dist/commands/init.d.ts +9 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +223 -51
- package/dist/commands/journal.d.ts.map +1 -1
- package/dist/commands/journal.js +4 -13
- package/dist/commands/ledger-v3.d.ts +5 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -0
- package/dist/commands/ledger-v3.js +91 -0
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +11 -5
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/web.d.ts +6 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +67 -7
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +22 -5
- package/dist/core/adapter.d.ts +5 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapters/attest.d.ts +5 -2
- package/dist/core/adapters/attest.d.ts.map +1 -1
- package/dist/core/adapters/attest.js +8 -3
- package/dist/core/adapters/profiles.d.ts +6 -6
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +4 -4
- package/dist/core/agents/canonical-emit.d.ts +17 -15
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +22 -22
- package/dist/core/agents/cli.js +207 -234
- package/dist/core/agents/codex-archive-v3.d.ts +14 -0
- package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
- package/dist/core/agents/codex-archive-v3.js +110 -0
- package/dist/core/agents/coord-client.d.ts +19 -81
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +65 -155
- package/dist/core/agents/finalization.d.ts +4 -1
- package/dist/core/agents/finalization.d.ts.map +1 -1
- package/dist/core/agents/finalization.js +89 -32
- package/dist/core/agents/index.d.ts +4 -5
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +4 -5
- package/dist/core/agents/live-authority-v3.d.ts +59 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
- package/dist/core/agents/live-authority-v3.js +233 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
- package/dist/core/agents/live-lifecycle-v3.js +91 -0
- package/dist/core/agents/live-observation-v3.d.ts +25 -0
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
- package/dist/core/agents/live-observation-v3.js +157 -0
- package/dist/core/agents/render/prompt-context.d.ts +4 -4
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +23 -58
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +8 -32
- package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +79 -127
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +3 -18
- package/dist/core/agents/rules/stop-hook.d.ts +9 -50
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +193 -236
- package/dist/core/agents/session-events.d.ts +5 -7
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +127 -95
- package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
- package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalization-state-v3.js +40 -0
- package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
- package/dist/core/agents/session-finalizer-v3.js +734 -0
- package/dist/core/agents/session-name-display.d.ts +40 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -0
- package/dist/core/agents/session-name-display.js +119 -0
- package/dist/core/agents/state/activity-log.d.ts +3 -3
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +7 -16
- package/dist/core/agents/state/heartbeat-writer.d.ts +23 -55
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +56 -228
- package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-view.js +209 -0
- package/dist/core/agents/state/session-state.d.ts +4 -3
- package/dist/core/agents/state/session-state.d.ts.map +1 -1
- package/dist/core/agents/state/session-state.js +18 -9
- package/dist/core/agents/state/stale-sweep.d.ts +1 -1
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +26 -15
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +5 -7
- package/dist/core/config.d.ts +33 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +98 -2
- package/dist/core/context/index.d.ts +1 -4
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +9 -9
- package/dist/core/events/span-parent.d.ts +15 -0
- package/dist/core/events/span-parent.d.ts.map +1 -0
- package/dist/core/events/span-parent.js +34 -0
- package/dist/core/events/v3/advance.d.ts +14 -0
- package/dist/core/events/v3/advance.d.ts.map +1 -0
- package/dist/core/events/v3/advance.js +134 -0
- package/dist/core/events/v3/authority-outbox.d.ts +78 -0
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
- package/dist/core/events/v3/authority-outbox.js +399 -0
- package/dist/core/events/v3/base-builder.d.ts +20 -0
- package/dist/core/events/v3/base-builder.d.ts.map +1 -0
- package/dist/core/events/v3/base-builder.js +29 -0
- package/dist/core/events/v3/base-contract.d.ts +7576 -0
- package/dist/core/events/v3/base-contract.d.ts.map +1 -0
- package/dist/core/events/v3/base-contract.js +647 -0
- package/dist/core/events/v3/bootstrap.d.ts +34 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
- package/dist/core/events/v3/bootstrap.js +175 -0
- package/dist/core/events/v3/builder.d.ts +20 -0
- package/dist/core/events/v3/builder.d.ts.map +1 -0
- package/dist/core/events/v3/builder.js +28 -0
- package/dist/core/events/v3/canonical.d.ts +31 -0
- package/dist/core/events/v3/canonical.d.ts.map +1 -0
- package/dist/core/events/v3/canonical.js +100 -0
- package/dist/core/events/v3/capabilities.d.ts +31 -0
- package/dist/core/events/v3/capabilities.d.ts.map +1 -0
- package/dist/core/events/v3/capabilities.js +107 -0
- package/dist/core/events/v3/capability-drift.d.ts +22 -0
- package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
- package/dist/core/events/v3/capability-drift.js +134 -0
- package/dist/core/events/v3/catalog.d.ts +38 -0
- package/dist/core/events/v3/catalog.d.ts.map +1 -0
- package/dist/core/events/v3/catalog.js +135 -0
- package/dist/core/events/v3/clock-order.d.ts +34 -0
- package/dist/core/events/v3/clock-order.d.ts.map +1 -0
- package/dist/core/events/v3/clock-order.js +35 -0
- package/dist/core/events/v3/contract.d.ts +171 -0
- package/dist/core/events/v3/contract.d.ts.map +1 -0
- package/dist/core/events/v3/contract.js +180 -0
- package/dist/core/events/v3/control.d.ts +111 -0
- package/dist/core/events/v3/control.d.ts.map +1 -0
- package/dist/core/events/v3/control.js +419 -0
- package/dist/core/events/v3/coordination-view.d.ts +69 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-view.js +119 -0
- package/dist/core/events/v3/economics.d.ts +77 -0
- package/dist/core/events/v3/economics.d.ts.map +1 -0
- package/dist/core/events/v3/economics.js +274 -0
- package/dist/core/events/v3/finalization-view.d.ts +26 -0
- package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
- package/dist/core/events/v3/finalization-view.js +37 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
- package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
- package/dist/core/events/v3/fingerprint-keys.js +217 -0
- package/dist/core/events/v3/generated.d.ts +4 -0
- package/dist/core/events/v3/generated.d.ts.map +1 -0
- package/dist/core/events/v3/generated.js +47 -0
- package/dist/core/events/v3/ids.d.ts +9 -0
- package/dist/core/events/v3/ids.d.ts.map +1 -0
- package/dist/core/events/v3/ids.js +25 -0
- package/dist/core/events/v3/index.d.ts +35 -0
- package/dist/core/events/v3/index.d.ts.map +1 -0
- package/dist/core/events/v3/index.js +33 -0
- package/dist/core/events/v3/latency.d.ts +63 -0
- package/dist/core/events/v3/latency.d.ts.map +1 -0
- package/dist/core/events/v3/latency.js +412 -0
- package/dist/core/events/v3/live-feed.d.ts +45 -0
- package/dist/core/events/v3/live-feed.d.ts.map +1 -0
- package/dist/core/events/v3/live-feed.js +246 -0
- package/dist/core/events/v3/live-observation.d.ts +35 -0
- package/dist/core/events/v3/live-observation.d.ts.map +1 -0
- package/dist/core/events/v3/live-observation.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts +57 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -0
- package/dist/core/events/v3/live-routing.js +107 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command-recorder.js +477 -0
- package/dist/core/events/v3/producers/command.d.ts +50 -0
- package/dist/core/events/v3/producers/command.d.ts.map +1 -0
- package/dist/core/events/v3/producers/command.js +135 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
- package/dist/core/events/v3/producers/coordination.d.ts +90 -0
- package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
- package/dist/core/events/v3/producers/coordination.js +229 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook-base.js +424 -0
- package/dist/core/events/v3/producers/hook.d.ts +29 -0
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
- package/dist/core/events/v3/producers/hook.js +71 -0
- package/dist/core/events/v3/producers/intake.d.ts +65 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
- package/dist/core/events/v3/producers/intake.js +244 -0
- package/dist/core/events/v3/producers/recorder.d.ts +240 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
- package/dist/core/events/v3/producers/recorder.js +2176 -0
- package/dist/core/events/v3/projection.d.ts +101 -0
- package/dist/core/events/v3/projection.d.ts.map +1 -0
- package/dist/core/events/v3/projection.js +479 -0
- package/dist/core/events/v3/reader.d.ts +75 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -0
- package/dist/core/events/v3/reader.js +778 -0
- package/dist/core/events/v3/recovery-record.d.ts +47 -0
- package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
- package/dist/core/events/v3/recovery-record.js +167 -0
- package/dist/core/events/v3/recovery.d.ts +22 -0
- package/dist/core/events/v3/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/recovery.js +227 -0
- package/dist/core/events/v3/span-state.d.ts +52 -0
- package/dist/core/events/v3/span-state.d.ts.map +1 -0
- package/dist/core/events/v3/span-state.js +142 -0
- package/dist/core/events/v3/targets.d.ts +23 -0
- package/dist/core/events/v3/targets.d.ts.map +1 -0
- package/dist/core/events/v3/targets.js +134 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
- package/dist/core/events/v3/turn-telemetry.js +168 -0
- package/dist/core/events/v3/validate.d.ts +9 -0
- package/dist/core/events/v3/validate.d.ts.map +1 -0
- package/dist/core/events/v3/validate.js +281 -0
- package/dist/core/events/v3/writer.d.ts +56 -0
- package/dist/core/events/v3/writer.d.ts.map +1 -0
- package/dist/core/events/v3/writer.js +335 -0
- package/dist/core/governor/index.d.ts +1 -1
- package/dist/core/governor/index.d.ts.map +1 -1
- package/dist/core/governor/index.js +1 -1
- package/dist/core/governor/plan-api.d.ts +2 -1
- package/dist/core/governor/plan-api.d.ts.map +1 -1
- package/dist/core/governor/plan-api.js +6 -3
- package/dist/core/governor/read.d.ts +1 -1
- package/dist/core/governor/read.d.ts.map +1 -1
- package/dist/core/governor/read.js +1 -1
- package/dist/core/governor/state.d.ts +9 -0
- package/dist/core/governor/state.d.ts.map +1 -1
- package/dist/core/governor/state.js +40 -3
- package/dist/core/guard/config.d.ts +5 -0
- package/dist/core/guard/config.d.ts.map +1 -0
- package/dist/core/guard/config.js +157 -0
- package/dist/core/guard/coordinator.d.ts +14 -0
- package/dist/core/guard/coordinator.d.ts.map +1 -0
- package/dist/core/guard/coordinator.js +173 -0
- package/dist/core/guard/evaluator.d.ts +4 -0
- package/dist/core/guard/evaluator.d.ts.map +1 -0
- package/dist/core/guard/evaluator.js +242 -0
- package/dist/core/guard/evidence-v3.d.ts +15 -0
- package/dist/core/guard/evidence-v3.d.ts.map +1 -0
- package/dist/core/guard/evidence-v3.js +171 -0
- package/dist/core/guard/index.d.ts +10 -0
- package/dist/core/guard/index.d.ts.map +1 -0
- package/dist/core/guard/index.js +6 -0
- package/dist/core/guard/live-source-v3.d.ts +40 -0
- package/dist/core/guard/live-source-v3.d.ts.map +1 -0
- package/dist/core/guard/live-source-v3.js +128 -0
- package/dist/core/guard/storage.d.ts +27 -0
- package/dist/core/guard/storage.d.ts.map +1 -0
- package/dist/core/guard/storage.js +140 -0
- package/dist/core/guard/types.d.ts +119 -0
- package/dist/core/guard/types.d.ts.map +1 -0
- package/dist/core/guard/types.js +1 -0
- package/dist/core/hooks/adapter/detect.d.ts +18 -1
- package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
- package/dist/core/hooks/adapter/detect.js +29 -0
- package/dist/core/hooks/adapter/events.d.ts +7 -4
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +12 -4
- package/dist/core/hooks/adapter/output.d.ts +2 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.d.ts +7 -4
- package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.js +63 -25
- package/dist/core/hooks/adapter/wiring.d.ts +30 -4
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +89 -11
- package/dist/core/hooks/cli.d.ts +1 -1
- package/dist/core/hooks/cli.js +305 -444
- package/dist/core/hooks/effects/image-capture.d.ts +20 -34
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +212 -221
- package/dist/core/hooks/effects/index.d.ts +1 -9
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +1 -24
- package/dist/core/hooks/events/input-hash.d.ts +7 -0
- package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
- package/dist/core/hooks/events/input-hash.js +43 -0
- package/dist/core/hooks/index.d.ts +4 -3
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +2 -3
- package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
- package/dist/core/hooks/resolve/coord-root.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +16 -15
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +51 -42
- package/dist/core/hooks/resolve/transcript.d.ts +33 -3
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +155 -14
- package/dist/core/hooks/session-name-presence.d.ts +9 -10
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +15 -15
- package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
- package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
- package/dist/core/journal/index.d.ts +2 -2
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +9 -22
- package/dist/core/presence/blob.d.ts +4 -3
- package/dist/core/presence/blob.d.ts.map +1 -1
- package/dist/core/presence/blob.js +45 -44
- package/dist/core/presence/codec-digest.d.ts +29 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -0
- package/dist/core/presence/codec-digest.js +170 -0
- package/dist/core/presence/relay-client.d.ts +1 -1
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +5 -5
- package/dist/core/work/index.d.ts +1 -1
- package/dist/core/work/index.d.ts.map +1 -1
- package/dist/core/work/index.js +1 -1
- package/dist/core/work/read.d.ts +1 -1
- package/dist/core/work/read.d.ts.map +1 -1
- package/dist/core/work/read.js +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +6 -0
- package/dist/core/work/state.d.ts +9 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +17 -3
- package/dist/core/workflow/engine.js +24 -25
- package/dist/core/workflow/live-session-v3.d.ts +19 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
- package/dist/core/workflow/live-session-v3.js +86 -0
- package/dist/core/workflow/scope-id.d.ts +3 -0
- package/dist/core/workflow/scope-id.d.ts.map +1 -0
- package/dist/core/workflow/scope-id.js +5 -0
- package/dist/core/workflow/workspaces/leases.d.ts +4 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +53 -19
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/browser/client.d.ts +41 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +203 -0
- package/dist/lib/browser/critique.d.ts +28 -2
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +74 -18
- package/dist/lib/browser/geometry.d.ts +1 -1
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +130 -6
- package/dist/lib/browser/index.d.ts +3 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +3 -0
- package/dist/lib/browser/qa-plan.d.ts +174 -0
- package/dist/lib/browser/qa-plan.d.ts.map +1 -0
- package/dist/lib/browser/qa-plan.js +321 -0
- package/dist/lib/browser/qa-reuse.d.ts +99 -0
- package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
- package/dist/lib/browser/qa-reuse.js +222 -0
- package/dist/lib/browser/qa-snapshot.d.ts +64 -0
- package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
- package/dist/lib/browser/qa-snapshot.js +171 -0
- package/dist/lib/browser/runts.d.ts.map +1 -1
- package/dist/lib/browser/runts.js +22 -1
- package/dist/lib/browser/tiling.d.ts +71 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -0
- package/dist/lib/browser/tiling.js +118 -0
- package/dist/lib/claude-desktop.d.ts +0 -47
- package/dist/lib/claude-desktop.d.ts.map +1 -1
- package/dist/lib/claude-desktop.js +1 -169
- package/dist/lib/context/index.d.ts +0 -3
- package/dist/lib/context/index.d.ts.map +1 -1
- package/dist/lib/context/index.js +20 -42
- package/dist/lib/council/index.d.ts +2 -2
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +9 -20
- package/dist/lib/docs-frontmatter.d.ts +1 -6
- package/dist/lib/docs-frontmatter.d.ts.map +1 -1
- package/dist/lib/docs-frontmatter.js +12 -78
- package/dist/lib/docs-index.d.ts +9 -0
- package/dist/lib/docs-index.d.ts.map +1 -1
- package/dist/lib/docs-index.js +32 -3
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +14 -30
- package/dist/lib/docs-metadata-audit.d.ts +19 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
- package/dist/lib/docs-metadata-audit.js +132 -0
- package/dist/lib/docs-metadata-managed.d.ts +23 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
- package/dist/lib/docs-metadata-managed.js +78 -0
- package/dist/lib/docs-metadata-sync.d.ts +20 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
- package/dist/lib/docs-metadata-sync.js +222 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
- package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2-schema.js +134 -0
- package/dist/lib/docs-metadata-v2.d.ts +21 -0
- package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
- package/dist/lib/docs-metadata-v2.js +424 -0
- package/dist/lib/docs-new.d.ts +11 -0
- package/dist/lib/docs-new.d.ts.map +1 -0
- package/dist/lib/docs-new.js +52 -0
- package/dist/lib/docs-sweep.d.ts.map +1 -1
- package/dist/lib/docs-sweep.js +45 -29
- package/dist/lib/headless/index.d.ts +98 -0
- package/dist/lib/headless/index.d.ts.map +1 -0
- package/dist/lib/headless/index.js +211 -0
- package/dist/lib/identities/assume.d.ts +4 -4
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +52 -68
- package/dist/lib/instructions/apply.d.ts +5 -4
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +32 -20
- package/dist/lib/instructions/bundle.d.ts +1 -1
- package/dist/lib/instructions/bundle.d.ts.map +1 -1
- package/dist/lib/instructions/bundle.js +1 -1
- package/dist/lib/instructions/splice.d.ts +0 -1
- package/dist/lib/instructions/splice.d.ts.map +1 -1
- package/dist/lib/instructions/splice.js +22 -6
- package/dist/lib/instructions/templates.d.ts +7 -5
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +79 -9
- package/package.json +26 -5
- package/schemas/config.schema.json +120 -2
- package/schemas/docs-metadata-v2.schema.json +441 -0
- package/schemas/event-v3.schema.json +24472 -0
- package/src/commander.ts +4 -0
- package/src/commands/adapter.ts +2 -2
- package/src/commands/agents.ts +1512 -592
- package/src/commands/artifacts.ts +7 -6
- package/src/commands/backup.ts +29 -21
- package/src/commands/browse.ts +349 -8
- package/src/commands/checkpoint.ts +4 -3
- package/src/commands/claude-desktop.ts +2 -101
- package/src/commands/context.ts +1 -6
- package/src/commands/decision.ts +27 -44
- package/src/commands/docs.ts +100 -33
- package/src/commands/doctor.ts +14 -1
- package/src/commands/events.ts +256 -0
- package/src/commands/governor.ts +18 -4
- package/src/commands/init.ts +253 -57
- package/src/commands/instructions.ts +1 -1
- package/src/commands/journal.ts +4 -13
- package/src/commands/ledger-v3.ts +111 -0
- package/src/commands/presence.ts +11 -10
- package/src/commands/sync.ts +1 -1
- package/src/commands/web.ts +67 -8
- package/src/commands/work.ts +28 -5
- package/src/core/adapter.ts +5 -0
- package/src/core/adapters/attest.ts +8 -3
- package/src/core/adapters/profiles.ts +4 -6
- package/src/core/agents/canonical-emit.ts +34 -25
- package/src/core/agents/cli.ts +236 -262
- package/src/core/agents/codex-archive-v3.ts +138 -0
- package/src/core/agents/coord-client.ts +75 -188
- package/src/core/agents/finalization.ts +120 -38
- package/src/core/agents/index.ts +4 -5
- package/src/core/agents/live-authority-v3.ts +375 -0
- package/src/core/agents/live-lifecycle-v3.ts +140 -0
- package/src/core/agents/live-observation-v3.ts +216 -0
- package/src/core/agents/render/prompt-context.ts +29 -60
- package/src/core/agents/render/session-context.ts +10 -31
- package/src/core/agents/rules/claim-conflict.ts +85 -126
- package/src/core/agents/rules/commit-conflict.ts +3 -14
- package/src/core/agents/rules/stop-hook.ts +239 -293
- package/src/core/agents/session-events.ts +137 -104
- package/src/core/agents/session-finalization-state-v3.ts +90 -0
- package/src/core/agents/session-finalizer-v3.ts +953 -0
- package/src/core/agents/session-name-display.ts +149 -0
- package/src/core/agents/state/activity-log.ts +6 -14
- package/src/core/agents/state/heartbeat-writer.ts +82 -277
- package/src/core/agents/state/live-coordination-view.ts +290 -0
- package/src/core/agents/state/session-state.ts +24 -12
- package/src/core/agents/state/stale-sweep.ts +40 -17
- package/src/core/artifacts/index.ts +4 -5
- package/src/core/config.ts +148 -3
- package/src/core/context/index.ts +9 -17
- package/src/core/events/span-parent.ts +46 -0
- package/src/core/events/v3/advance.ts +168 -0
- package/src/core/events/v3/authority-outbox.ts +548 -0
- package/src/core/events/v3/base-builder.ts +60 -0
- package/src/core/events/v3/base-contract.ts +882 -0
- package/src/core/events/v3/bootstrap.ts +226 -0
- package/src/core/events/v3/builder.ts +59 -0
- package/src/core/events/v3/canonical.ts +153 -0
- package/src/core/events/v3/capabilities.ts +171 -0
- package/src/core/events/v3/capability-drift.ts +177 -0
- package/src/core/events/v3/catalog.ts +202 -0
- package/src/core/events/v3/clock-order.ts +41 -0
- package/src/core/events/v3/contract.ts +365 -0
- package/src/core/events/v3/control.ts +576 -0
- package/src/core/events/v3/coordination-view.ts +193 -0
- package/src/core/events/v3/economics.ts +384 -0
- package/src/core/events/v3/finalization-view.ts +67 -0
- package/src/core/events/v3/fingerprint-keys.ts +260 -0
- package/src/core/events/v3/generated.ts +48 -0
- package/src/core/events/v3/ids.ts +33 -0
- package/src/core/events/v3/index.ts +322 -0
- package/src/core/events/v3/latency.ts +551 -0
- package/src/core/events/v3/live-feed.ts +319 -0
- package/src/core/events/v3/live-observation.ts +39 -0
- package/src/core/events/v3/live-routing.ts +135 -0
- package/src/core/events/v3/producers/command-recorder.ts +631 -0
- package/src/core/events/v3/producers/command.ts +201 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
- package/src/core/events/v3/producers/coordination.ts +355 -0
- package/src/core/events/v3/producers/hook-base.ts +578 -0
- package/src/core/events/v3/producers/hook.ts +119 -0
- package/src/core/events/v3/producers/intake.ts +319 -0
- package/src/core/events/v3/producers/recorder.ts +2805 -0
- package/src/core/events/v3/projection.ts +653 -0
- package/src/core/events/v3/reader.ts +1127 -0
- package/src/core/events/v3/recovery-record.ts +244 -0
- package/src/core/events/v3/recovery.ts +271 -0
- package/src/core/events/v3/span-state.ts +187 -0
- package/src/core/events/v3/targets.ts +182 -0
- package/src/core/events/v3/turn-telemetry.ts +259 -0
- package/src/core/events/v3/validate.ts +361 -0
- package/src/core/events/v3/writer.ts +419 -0
- package/src/core/governor/index.ts +3 -0
- package/src/core/governor/plan-api.ts +10 -2
- package/src/core/governor/read.ts +3 -0
- package/src/core/governor/state.ts +52 -5
- package/src/core/guard/config.ts +206 -0
- package/src/core/guard/coordinator.ts +227 -0
- package/src/core/guard/evaluator.ts +343 -0
- package/src/core/guard/evidence-v3.ts +227 -0
- package/src/core/guard/index.ts +35 -0
- package/src/core/guard/live-source-v3.ts +204 -0
- package/src/core/guard/storage.ts +188 -0
- package/src/core/guard/types.ts +152 -0
- package/src/core/hooks/adapter/detect.ts +28 -1
- package/src/core/hooks/adapter/events.ts +14 -6
- package/src/core/hooks/adapter/output.ts +7 -2
- package/src/core/hooks/adapter/parse.ts +80 -38
- package/src/core/hooks/adapter/wiring.ts +119 -13
- package/src/core/hooks/cli.ts +351 -466
- package/src/core/hooks/effects/image-capture.ts +228 -238
- package/src/core/hooks/effects/index.ts +1 -36
- package/src/core/hooks/events/input-hash.ts +47 -0
- package/src/core/hooks/index.ts +4 -11
- package/src/core/hooks/resolve/coord-root.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +52 -45
- package/src/core/hooks/resolve/transcript.ts +165 -14
- package/src/core/hooks/session-name-presence.ts +14 -15
- package/src/core/hooks/unsafe-cross-shell.ts +1 -1
- package/src/core/journal/index.ts +15 -22
- package/src/core/presence/blob.ts +48 -41
- package/src/core/presence/codec-digest.ts +215 -0
- package/src/core/presence/relay-client.ts +5 -5
- package/src/core/work/index.ts +3 -0
- package/src/core/work/read.ts +3 -0
- package/src/core/work/runner.ts +6 -0
- package/src/core/work/state.ts +27 -3
- package/src/core/workflow/engine.ts +24 -24
- package/src/core/workflow/live-session-v3.ts +126 -0
- package/src/core/workflow/scope-id.ts +6 -0
- package/src/core/workflow/workspaces/leases.ts +56 -19
- package/src/index.ts +1 -1
- package/src/lib/browser/client.ts +230 -0
- package/src/lib/browser/critique.ts +104 -27
- package/src/lib/browser/geometry.ts +143 -14
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/browser/qa-plan.ts +501 -0
- package/src/lib/browser/qa-reuse.ts +306 -0
- package/src/lib/browser/qa-snapshot.ts +223 -0
- package/src/lib/browser/runts.ts +27 -2
- package/src/lib/browser/tiling.ts +164 -0
- package/src/lib/claude-desktop.ts +1 -232
- package/src/lib/context/index.ts +22 -46
- package/src/lib/council/index.ts +9 -21
- package/src/lib/docs-frontmatter.ts +8 -79
- package/src/lib/docs-index.ts +33 -3
- package/src/lib/docs-lint.ts +15 -29
- package/src/lib/docs-metadata-audit.ts +166 -0
- package/src/lib/docs-metadata-managed.ts +83 -0
- package/src/lib/docs-metadata-sync.ts +262 -0
- package/src/lib/docs-metadata-v2-schema.ts +138 -0
- package/src/lib/docs-metadata-v2.ts +646 -0
- package/src/lib/docs-new.ts +63 -0
- package/src/lib/docs-sweep.ts +42 -28
- package/src/lib/headless/index.ts +287 -0
- package/src/lib/identities/assume.ts +67 -86
- package/src/lib/instructions/apply.ts +33 -20
- package/src/lib/instructions/bundle.ts +2 -2
- package/src/lib/instructions/splice.ts +21 -7
- package/src/lib/instructions/templates.ts +85 -13
- package/dist/core/agents/cli-emit.d.ts +0 -27
- package/dist/core/agents/cli-emit.d.ts.map +0 -1
- package/dist/core/agents/cli-emit.js +0 -57
- package/dist/core/agents/codex-replay.d.ts +0 -29
- package/dist/core/agents/codex-replay.d.ts.map +0 -1
- package/dist/core/agents/codex-replay.js +0 -138
- package/dist/core/agents/events/consume.d.ts +0 -82
- package/dist/core/agents/events/consume.d.ts.map +0 -1
- package/dist/core/agents/events/consume.js +0 -195
- package/dist/core/agents/events/emit.d.ts +0 -42
- package/dist/core/agents/events/emit.d.ts.map +0 -1
- package/dist/core/agents/events/emit.js +0 -75
- package/dist/core/agents/events/ulid.d.ts +0 -11
- package/dist/core/agents/events/ulid.d.ts.map +0 -1
- package/dist/core/agents/events/ulid.js +0 -47
- package/dist/core/agents/state/heartbeat-projector.d.ts +0 -76
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
- package/dist/core/agents/state/heartbeat-projector.js +0 -581
- package/dist/core/hooks/events/emit.d.ts +0 -31
- package/dist/core/hooks/events/emit.d.ts.map +0 -1
- package/dist/core/hooks/events/emit.js +0 -93
- package/dist/core/hooks/events/rotate.d.ts +0 -43
- package/dist/core/hooks/events/rotate.d.ts.map +0 -1
- package/dist/core/hooks/events/rotate.js +0 -142
- package/dist/core/hooks/events/schema.d.ts +0 -341
- package/dist/core/hooks/events/schema.d.ts.map +0 -1
- package/dist/core/hooks/events/schema.js +0 -12
- package/dist/core/hooks/events/ulid.d.ts +0 -10
- package/dist/core/hooks/events/ulid.d.ts.map +0 -1
- package/dist/core/hooks/events/ulid.js +0 -47
- package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
- package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
- package/dist/lib/docs-frontmatter-migrate.js +0 -364
- package/src/core/agents/cli-emit.ts +0 -64
- package/src/core/agents/codex-replay.ts +0 -163
- package/src/core/agents/events/consume.ts +0 -254
- package/src/core/agents/events/emit.ts +0 -115
- package/src/core/agents/events/ulid.ts +0 -51
- package/src/core/agents/state/heartbeat-projector.ts +0 -645
- package/src/core/hooks/events/emit.ts +0 -125
- package/src/core/hooks/events/rotate.ts +0 -151
- package/src/core/hooks/events/schema.ts +0 -582
- package/src/core/hooks/events/ulid.ts +0 -51
- package/src/lib/docs-frontmatter-migrate.ts +0 -427
package/dist/commands/web.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { spawn, spawnSync } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
+
import { createServer } from "node:net";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { DEFAULT_WEB_PORT, resolveWebPort } from "../core/config.js";
|
|
5
7
|
import { lazyFetchWebRoot, webRunner } from "./web-fetch.js";
|
|
6
8
|
/**
|
|
7
9
|
* `harn web`: Next.js dashboard for harnery's coord state.
|
|
@@ -83,6 +85,46 @@ function resolveWebRoot(emit, allowFetch) {
|
|
|
83
85
|
});
|
|
84
86
|
return null;
|
|
85
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Probe the exact localhost socket Next will claim. This is deliberately a
|
|
90
|
+
* check-and-report step, not an alternate-port allocator: Harnery keeps one
|
|
91
|
+
* memorable URL and asks the caller to resolve a real conflict explicitly.
|
|
92
|
+
*/
|
|
93
|
+
export async function isWebPortAvailable(port) {
|
|
94
|
+
return await new Promise((resolve, reject) => {
|
|
95
|
+
const server = createServer();
|
|
96
|
+
server.unref();
|
|
97
|
+
server.once("error", (error) => {
|
|
98
|
+
if (error.code === "EADDRINUSE" || error.code === "EACCES") {
|
|
99
|
+
resolve(false);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
reject(error);
|
|
103
|
+
});
|
|
104
|
+
server.listen({ host: "127.0.0.1", port, exclusive: true }, () => {
|
|
105
|
+
server.close((error) => (error ? reject(error) : resolve(true)));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function reportInvalidPort(emit, error) {
|
|
110
|
+
emit.error({
|
|
111
|
+
code: "invalid_web_port",
|
|
112
|
+
message: error instanceof Error ? error.message : "invalid web port",
|
|
113
|
+
hint: `Use an integer from 1024 through 65535; the default is ${DEFAULT_WEB_PORT}.`,
|
|
114
|
+
});
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
}
|
|
117
|
+
async function requireAvailablePort(emit, port) {
|
|
118
|
+
if (await isWebPortAvailable(port))
|
|
119
|
+
return true;
|
|
120
|
+
emit.error({
|
|
121
|
+
code: "web_port_in_use",
|
|
122
|
+
message: `port ${port} is already in use`,
|
|
123
|
+
hint: `Stop the process using ${port}, or choose a deliberate override with \`harn web up --port <port>\`.`,
|
|
124
|
+
});
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
86
128
|
export function registerWebCommand(program, emit) {
|
|
87
129
|
const web = program
|
|
88
130
|
.command("web")
|
|
@@ -91,7 +133,7 @@ export function registerWebCommand(program, emit) {
|
|
|
91
133
|
.command("up")
|
|
92
134
|
.description("Start the dashboard. Default: dev mode (HMR, no build needed). With " +
|
|
93
135
|
"--prod, runs next start (requires a prior `harn web build`).")
|
|
94
|
-
.option("-p, --port <port>",
|
|
136
|
+
.option("-p, --port <port>", `Listen port (default ${DEFAULT_WEB_PORT})`)
|
|
95
137
|
.option("--coord-root <dir>", "Override the coord root (default: cwd; web walks up looking for .harnery/)")
|
|
96
138
|
.option("--prod", "Use next start instead of next dev (requires prior build)")
|
|
97
139
|
.option("--no-fetch", "Don't auto-fetch the dashboard if it's missing (npm installs)")
|
|
@@ -103,7 +145,14 @@ export function registerWebCommand(program, emit) {
|
|
|
103
145
|
return;
|
|
104
146
|
}
|
|
105
147
|
const coordRoot = opts.coordRoot ?? process.cwd();
|
|
106
|
-
|
|
148
|
+
let port;
|
|
149
|
+
try {
|
|
150
|
+
port = resolveWebPort(opts.port, opts.coordRoot);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
reportInvalidPort(emit, error);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
107
156
|
const mode = opts.prod ? "start" : "dev";
|
|
108
157
|
if (opts.prod) {
|
|
109
158
|
const nextDir = path.join(root, ".next");
|
|
@@ -117,6 +166,8 @@ export function registerWebCommand(program, emit) {
|
|
|
117
166
|
return;
|
|
118
167
|
}
|
|
119
168
|
}
|
|
169
|
+
if (!(await requireAvailablePort(emit, port)))
|
|
170
|
+
return;
|
|
120
171
|
const heapMb = resolveMaxOldSpaceMb(opts.maxOldSpace);
|
|
121
172
|
emit.log(`harn web · http://localhost:${port} (${mode})`, "info");
|
|
122
173
|
emit.log(`files origin · http://harnery-files.localhost:${port}`, "info");
|
|
@@ -128,7 +179,7 @@ export function registerWebCommand(program, emit) {
|
|
|
128
179
|
env: {
|
|
129
180
|
...process.env,
|
|
130
181
|
HARNERY_COORD_ROOT: coordRoot,
|
|
131
|
-
HARNERY_WEB_PORT: port,
|
|
182
|
+
HARNERY_WEB_PORT: String(port),
|
|
132
183
|
...(nodeOptionsWithHeapCap(heapMb)
|
|
133
184
|
? { NODE_OPTIONS: nodeOptionsWithHeapCap(heapMb) }
|
|
134
185
|
: {}),
|
|
@@ -171,11 +222,11 @@ export function registerWebCommand(program, emit) {
|
|
|
171
222
|
web
|
|
172
223
|
.command("start")
|
|
173
224
|
.description("Start the production server (next start). Requires prior `harn web build`.")
|
|
174
|
-
.option("-p, --port <port>",
|
|
225
|
+
.option("-p, --port <port>", `Listen port (default ${DEFAULT_WEB_PORT})`)
|
|
175
226
|
.option("--coord-root <dir>", "Override the coord root")
|
|
176
227
|
.option("--no-fetch", "Don't auto-fetch the dashboard if it's missing (npm installs)")
|
|
177
228
|
.option("--max-old-space <mb>", `V8 old-space ceiling in MB; 0 restores Next's own sizing (default ${DEFAULT_MAX_OLD_SPACE_MB}, env HARNERY_WEB_MAX_OLD_SPACE)`)
|
|
178
|
-
.action((opts) => {
|
|
229
|
+
.action(async (opts) => {
|
|
179
230
|
const root = resolveWebRoot(emit, opts.fetch !== false);
|
|
180
231
|
if (!root) {
|
|
181
232
|
process.exitCode = 1;
|
|
@@ -192,7 +243,16 @@ export function registerWebCommand(program, emit) {
|
|
|
192
243
|
return;
|
|
193
244
|
}
|
|
194
245
|
const coordRoot = opts.coordRoot ?? process.cwd();
|
|
195
|
-
|
|
246
|
+
let port;
|
|
247
|
+
try {
|
|
248
|
+
port = resolveWebPort(opts.port, opts.coordRoot);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
reportInvalidPort(emit, error);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (!(await requireAvailablePort(emit, port)))
|
|
255
|
+
return;
|
|
196
256
|
const heapMb = resolveMaxOldSpaceMb(opts.maxOldSpace);
|
|
197
257
|
emit.log(`harn web · http://localhost:${port} (start)`, "info");
|
|
198
258
|
emit.log(`reading .harnery/ from: ${coordRoot}`, "info");
|
|
@@ -203,7 +263,7 @@ export function registerWebCommand(program, emit) {
|
|
|
203
263
|
env: {
|
|
204
264
|
...process.env,
|
|
205
265
|
HARNERY_COORD_ROOT: coordRoot,
|
|
206
|
-
HARNERY_WEB_PORT: port,
|
|
266
|
+
HARNERY_WEB_PORT: String(port),
|
|
207
267
|
...(nodeOptionsWithHeapCap(heapMb)
|
|
208
268
|
? { NODE_OPTIONS: nodeOptionsWithHeapCap(heapMb) }
|
|
209
269
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAWnD,OAAO,EAUL,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAwC/B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAWnD,OAAO,EAUL,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAwC/B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAgH7E;AA4PD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAM7D;AA0BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAK9D"}
|
package/dist/commands/work.js
CHANGED
|
@@ -4,7 +4,7 @@ import { workflowSubscriptionOnly } from "../core/config.js";
|
|
|
4
4
|
import { findCompletedMissionGoverning, reopenGovernorMission } from "../core/governor/index.js";
|
|
5
5
|
import { findCoordRoot } from "../core/hooks/resolve/coord-root.js";
|
|
6
6
|
import { loadPolicyFile } from "../core/policy/index.js";
|
|
7
|
-
import { acceptWorkItem, cancelWorkItem, createWorkItem,
|
|
7
|
+
import { acceptWorkItem, cancelWorkItem, createWorkItem, listWorkItemsWithWarnings, readWorkItem, reconcileAllWorkItems, reconcileWorkItem, reopenWorkItem, runWorkItem, } from "../core/work/index.js";
|
|
8
8
|
import { WorkflowParkedError } from "../core/workflow/index.js";
|
|
9
9
|
const MAX_ATTEMPT_TRANSCRIPT_ERROR_RENDER = 240;
|
|
10
10
|
export function registerWorkCommand(program, emit) {
|
|
@@ -53,16 +53,23 @@ export function registerWorkCommand(program, emit) {
|
|
|
53
53
|
.option("--json", "Emit complete work records as JSON")
|
|
54
54
|
.action((opts) => {
|
|
55
55
|
withWorkRoot(emit, (coordRoot) => {
|
|
56
|
-
const
|
|
56
|
+
const result = listWorkItemsWithWarnings(coordRoot);
|
|
57
|
+
const records = result.records.filter((record) => !opts.state || record.projection.state === opts.state);
|
|
57
58
|
if (opts.json) {
|
|
58
59
|
emit.config({ format: "json" });
|
|
59
60
|
emit.data(records);
|
|
61
|
+
for (const warning of result.warnings) {
|
|
62
|
+
emit.log(renderWorkListWarning(warning.work_id, warning.reason), "warn");
|
|
63
|
+
}
|
|
60
64
|
}
|
|
61
|
-
else if (records.length === 0) {
|
|
65
|
+
else if (records.length === 0 && result.warnings.length === 0) {
|
|
62
66
|
emit.text("no durable work\n");
|
|
63
67
|
}
|
|
64
68
|
else {
|
|
65
|
-
emit.text(`${
|
|
69
|
+
emit.text(`${[
|
|
70
|
+
...records.map(renderWorkRow),
|
|
71
|
+
...result.warnings.map((warning) => renderWorkListWarning(warning.work_id, warning.reason)),
|
|
72
|
+
].join("\n")}\n`);
|
|
66
73
|
}
|
|
67
74
|
});
|
|
68
75
|
});
|
|
@@ -229,7 +236,11 @@ function registerGovernanceCommand(work, name, emit) {
|
|
|
229
236
|
// mission too, or the item lands in ready_work that the governor will never
|
|
230
237
|
// dispatch. Resolve the goal BEFORE touching the work item so a refusal leaves
|
|
231
238
|
// nothing half-done.
|
|
232
|
-
const goalId = name === "reopen"
|
|
239
|
+
const goalId = name === "reopen"
|
|
240
|
+
? findCompletedMissionGoverning(coordRoot, workId, (warning) => {
|
|
241
|
+
emit.log(renderGovernorEnumerationWarning(warning.goal_id, warning.reason), "warn");
|
|
242
|
+
})
|
|
243
|
+
: undefined;
|
|
233
244
|
const record = fn(coordRoot, workId, {
|
|
234
245
|
...opts,
|
|
235
246
|
...(opts.finding?.length ? { findings: opts.finding } : {}),
|
|
@@ -316,6 +327,12 @@ function renderWorkRow(record) {
|
|
|
316
327
|
const projection = record.projection;
|
|
317
328
|
return `${record.intent.id} ${projection.state.padEnd(17)} ${renderAttemptBudget(record).padEnd(18)} ${projection.next_action.padEnd(21)} ${record.intent.title}`;
|
|
318
329
|
}
|
|
330
|
+
function renderWorkListWarning(workId, reason) {
|
|
331
|
+
return `warning ${workId} unreadable: ${reason}`;
|
|
332
|
+
}
|
|
333
|
+
function renderGovernorEnumerationWarning(goalId, reason) {
|
|
334
|
+
return `skipped unreadable governor ${goalId}: ${reason}`;
|
|
335
|
+
}
|
|
319
336
|
// `max_attempts` budgets CHARGED attempts (ADR 0046), so the budget is
|
|
320
337
|
// charged/max, not the raw attempt count. When uncharged environment/upstream
|
|
321
338
|
// attempts happened, surface them as a suffix rather than folding them into the
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** First-party harness adapters supported by Harnery's canonical V3 ledger. */
|
|
2
|
+
export type Adapter = "claude-code" | "cursor" | "codex";
|
|
3
|
+
/** Canonical producer classes used by V3 provenance. */
|
|
4
|
+
export type EventSource = "agent-hooks" | "agent-coord" | "user" | "system";
|
|
5
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The opt-in live probe that produces an attestation (ADR 0038).
|
|
3
3
|
*
|
|
4
|
-
* One bounded
|
|
4
|
+
* One bounded probe per adapter, through the same `spawn` the workflow engine
|
|
5
5
|
* uses, so what gets attested is the path production takes rather than a
|
|
6
|
-
* parallel test rig.
|
|
6
|
+
* parallel test rig. The probe permits a small tool-iteration budget because
|
|
7
|
+
* repository instructions can require workflow children to register before
|
|
8
|
+
* replying; a one-iteration ceiling made a healthy Claude CLI look unreachable.
|
|
7
9
|
*/
|
|
8
10
|
import type { SpawnResult } from "../workflow/types.js";
|
|
9
11
|
import { probeFilesystemProjection } from "./attest-projection.js";
|
|
@@ -14,6 +16,7 @@ import type { AdapterId, CapabilitySupport } from "./types.js";
|
|
|
14
16
|
* the turn stays as cheap as a turn can be. */
|
|
15
17
|
export declare const ATTESTATION_PROMPT = "Reply with the single word: ok";
|
|
16
18
|
export declare const DEFAULT_ATTESTATION_TIMEOUT_MS = 120000;
|
|
19
|
+
export declare const ATTESTATION_MAX_TURNS = 4;
|
|
17
20
|
export type AttestationOutcome = "recorded" | "skipped" | "unreachable" | "failed";
|
|
18
21
|
export interface AdapterAttestationResult {
|
|
19
22
|
adapter: AdapterId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/attest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/attest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D;+CAC+C;AAC/C,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AAEnE,eAAO,MAAM,8BAA8B,SAAU,CAAC;AAGtD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAqBvC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnF,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB;8DAC0D;IAC1D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;mDAG+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,+DAA+D;IAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACxF,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACnD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,eAAe,EACzB,IAAI,GAAE,4BAAiC,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAyGnC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The opt-in live probe that produces an attestation (ADR 0038).
|
|
3
3
|
*
|
|
4
|
-
* One bounded
|
|
4
|
+
* One bounded probe per adapter, through the same `spawn` the workflow engine
|
|
5
5
|
* uses, so what gets attested is the path production takes rather than a
|
|
6
|
-
* parallel test rig.
|
|
6
|
+
* parallel test rig. The probe permits a small tool-iteration budget because
|
|
7
|
+
* repository instructions can require workflow children to register before
|
|
8
|
+
* replying; a one-iteration ceiling made a healthy Claude CLI look unreachable.
|
|
7
9
|
*/
|
|
8
10
|
import { probeFilesystemProjection } from "./attest-projection.js";
|
|
9
11
|
import { ATTESTATION_SCHEMA_VERSION, profileDigest, sealAttestation, writeAttestation, } from "./attestation.js";
|
|
@@ -12,6 +14,9 @@ import { probeBinaryVersion } from "./bench.js";
|
|
|
12
14
|
* the turn stays as cheap as a turn can be. */
|
|
13
15
|
export const ATTESTATION_PROMPT = "Reply with the single word: ok";
|
|
14
16
|
export const DEFAULT_ATTESTATION_TIMEOUT_MS = 120_000;
|
|
17
|
+
// Claude may consume three iterations on repository-required set-task,
|
|
18
|
+
// identity recovery, and end-turn status before it can return the probe word.
|
|
19
|
+
export const ATTESTATION_MAX_TURNS = 4;
|
|
15
20
|
/** Vendor failures arrive as whole console transcripts, banner and prompt echo
|
|
16
21
|
* included. Reports are bounded evidence, so the reason is collapsed to one
|
|
17
22
|
* short line and the echoed prompt is removed. */
|
|
@@ -57,7 +62,7 @@ export async function runAdapterAttestation(registry, opts = {}) {
|
|
|
57
62
|
: await adapter.spawn({
|
|
58
63
|
prompt: ATTESTATION_PROMPT,
|
|
59
64
|
timeoutMs,
|
|
60
|
-
maxTurns:
|
|
65
|
+
maxTurns: ATTESTATION_MAX_TURNS,
|
|
61
66
|
cwd,
|
|
62
67
|
subscriptionOnly,
|
|
63
68
|
});
|
|
@@ -14,8 +14,8 @@ export declare const BUILTIN_ADAPTER_PROFILES: {
|
|
|
14
14
|
readonly modelFamily: "claude";
|
|
15
15
|
readonly effortValues: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
16
16
|
readonly verified: {
|
|
17
|
-
readonly date: "2026-
|
|
18
|
-
readonly version: "2.1.
|
|
17
|
+
readonly date: "2026-08-18";
|
|
18
|
+
readonly version: "2.1.233 (Claude Code)";
|
|
19
19
|
};
|
|
20
20
|
readonly capabilities: AdapterCapabilities;
|
|
21
21
|
};
|
|
@@ -31,7 +31,7 @@ export declare const BUILTIN_ADAPTER_PROFILES: {
|
|
|
31
31
|
readonly modelFamily: "gpt";
|
|
32
32
|
readonly effortValues: readonly ["none", "minimal", "low", "medium", "high", "xhigh"];
|
|
33
33
|
readonly verified: {
|
|
34
|
-
readonly date: "2026-
|
|
34
|
+
readonly date: "2026-08-04";
|
|
35
35
|
readonly version: "codex-cli 0.144.5";
|
|
36
36
|
};
|
|
37
37
|
readonly sandboxProjection: {
|
|
@@ -55,14 +55,14 @@ export declare const BUILTIN_ADAPTER_PROFILES: {
|
|
|
55
55
|
readonly modelFamily: "multi";
|
|
56
56
|
readonly effortValues: readonly [];
|
|
57
57
|
readonly verified: {
|
|
58
|
-
readonly date: "2026-
|
|
59
|
-
readonly version: "2026.
|
|
58
|
+
readonly date: "2026-08-18";
|
|
59
|
+
readonly version: "2026.08.11-e8db854";
|
|
60
60
|
};
|
|
61
61
|
readonly capabilities: AdapterCapabilities;
|
|
62
62
|
};
|
|
63
63
|
};
|
|
64
64
|
export type BuiltinAdapterId = keyof typeof BUILTIN_ADAPTER_PROFILES;
|
|
65
|
-
export declare const BUILTIN_ADAPTER_IDS: readonly ("claude-code" | "
|
|
65
|
+
export declare const BUILTIN_ADAPTER_IDS: readonly ("claude-code" | "cursor" | "codex")[];
|
|
66
66
|
export declare function isBuiltinAdapter(id: string): id is BuiltinAdapterId;
|
|
67
67
|
export declare function builtinAdapterProfile(id: string): AdapterProfile | undefined;
|
|
68
68
|
export declare function validateAdapterEffort(id: string, effort: string | undefined): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAC;AAgCvF;gFACgF;AAChF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAC;AAgCvF;gFACgF;AAChF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFc,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAErE,eAAO,MAAM,mBAAmB,iDAE/B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,gBAAgB,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE5E;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUlF"}
|
|
@@ -40,7 +40,7 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
40
40
|
authModel: "own-auth",
|
|
41
41
|
modelFamily: "claude",
|
|
42
42
|
effortValues: ["low", "medium", "high", "xhigh", "max"],
|
|
43
|
-
verified: { date: "2026-
|
|
43
|
+
verified: { date: "2026-08-18", version: "2.1.233 (Claude Code)" },
|
|
44
44
|
capabilities: capabilities({
|
|
45
45
|
effortSelection: supported("Mapped to `--effort <level>`."),
|
|
46
46
|
maxTurns: supported("Mapped to `--max-turns <n>`."),
|
|
@@ -62,7 +62,7 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
62
62
|
authModel: "own-auth",
|
|
63
63
|
modelFamily: "gpt",
|
|
64
64
|
effortValues: ["none", "minimal", "low", "medium", "high", "xhigh"],
|
|
65
|
-
verified: { date: "2026-
|
|
65
|
+
verified: { date: "2026-08-04", version: "codex-cli 0.144.5" },
|
|
66
66
|
// Verified against codex-cli 0.144.5: `--sandbox <mode>` plus
|
|
67
67
|
// `sandbox_workspace_write.writable_roots`. Without the writable-root entry
|
|
68
68
|
// a workspace-write child still cannot write a repository's .git directory.
|
|
@@ -92,14 +92,14 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
92
92
|
authModel: "own-auth",
|
|
93
93
|
modelFamily: "multi",
|
|
94
94
|
effortValues: [],
|
|
95
|
-
verified: { date: "2026-
|
|
95
|
+
verified: { date: "2026-08-18", version: "2026.08.11-e8db854" },
|
|
96
96
|
capabilities: capabilities({
|
|
97
97
|
effortSelection: unsupported("Cursor embeds effort in some parameterized model ids; Harnery does not rewrite model ids."),
|
|
98
98
|
maxTurns: unsupported("cursor-agent exposes no turn-ceiling flag."),
|
|
99
99
|
sessionId: supported("Read from the JSON result envelope."),
|
|
100
100
|
cost: unsupported("The JSON result envelope carries no cost."),
|
|
101
101
|
contextTelemetry: unknown("No stable Cursor context-usage payload has been certified."),
|
|
102
|
-
preCompactionSignal:
|
|
102
|
+
preCompactionSignal: supported("Cursor preCompact is wired to a durable checkpoint."),
|
|
103
103
|
postCompactionSignal: unsupported("Harnery does not wire an unverified Cursor postCompact hook."),
|
|
104
104
|
}),
|
|
105
105
|
},
|
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Emit canonical
|
|
3
|
-
*
|
|
2
|
+
* Emit canonical V3 observations by spawning `agent-coord emit-event`. Used by
|
|
3
|
+
* coordination commands whose durable state change also has a V3 audit event.
|
|
4
4
|
*
|
|
5
5
|
* Soft-fails: never throws into the caller. A failed emit logs to stderr
|
|
6
6
|
* (visible to operators in their terminal) but never breaks the CLI flow.
|
|
7
7
|
*
|
|
8
|
-
* Synchronous spawn: the projector runs before the CLI returns.
|
|
9
|
-
*
|
|
8
|
+
* Synchronous spawn: the projector runs before the CLI returns. The child has
|
|
9
|
+
* a 15-second safety budget; loaded-host checks normally finish in a few
|
|
10
|
+
* seconds and record the observation before the parent command exits.
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
import type { LiveCoordinationObservationV3 } from "../events/v3/live-observation.js";
|
|
13
|
+
export type EventV3EmitObservation = LiveCoordinationObservationV3 | {
|
|
14
|
+
event_type: "coord.lifecycle_changed";
|
|
15
|
+
new_state: "active" | "blocked" | "done";
|
|
16
|
+
reason?: string;
|
|
17
|
+
suggested_session_name?: string;
|
|
18
|
+
};
|
|
19
|
+
export interface EventV3EmitInput {
|
|
13
20
|
owner: string;
|
|
14
21
|
session: string;
|
|
15
22
|
adapter: "claude-code" | "cursor" | "codex";
|
|
16
|
-
|
|
17
|
-
turnId?: string;
|
|
18
|
-
parentSessionId?: string;
|
|
19
|
-
parentTurnId?: string;
|
|
23
|
+
observation: EventV3EmitObservation;
|
|
20
24
|
}
|
|
21
25
|
/**
|
|
22
26
|
* Resolve the coord root for a canonical emit.
|
|
23
27
|
*
|
|
24
28
|
* Delegates to `resolveCoordRoot()`, the single resolution the hooks and the
|
|
25
|
-
* CLI's reads also use. An
|
|
26
|
-
*
|
|
27
|
-
* root, so a divergent emit root blocks rule 1/3 on a turn that did run
|
|
28
|
-
* `agents status`, and no sequence of CLI commands can satisfy it.
|
|
29
|
+
* CLI's reads also use. An observation resolved any other way can disappear
|
|
30
|
+
* from the live V3 generation even though the command itself succeeded.
|
|
29
31
|
*/
|
|
30
32
|
export declare function resolveEmitRoot(start?: string): string | null;
|
|
31
|
-
export declare function
|
|
33
|
+
export declare function emitEventV3(input: EventV3EmitInput): boolean;
|
|
32
34
|
/**
|
|
33
35
|
* Normalize the heartbeat's `platform` field to the canonical Adapter type.
|
|
34
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-emit.d.ts","sourceRoot":"","sources":["../../../src/core/agents/canonical-emit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"canonical-emit.d.ts","sourceRoot":"","sources":["../../../src/core/agents/canonical-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAItF,MAAM,MAAM,sBAAsB,GAC9B,6BAA6B,GAC7B;IACE,UAAU,EAAE,yBAAyB,CAAC;IACtC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CA4C5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAIjG"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Emit canonical
|
|
3
|
-
*
|
|
2
|
+
* Emit canonical V3 observations by spawning `agent-coord emit-event`. Used by
|
|
3
|
+
* coordination commands whose durable state change also has a V3 audit event.
|
|
4
4
|
*
|
|
5
5
|
* Soft-fails: never throws into the caller. A failed emit logs to stderr
|
|
6
6
|
* (visible to operators in their terminal) but never breaks the CLI flow.
|
|
7
7
|
*
|
|
8
|
-
* Synchronous spawn: the projector runs before the CLI returns.
|
|
9
|
-
*
|
|
8
|
+
* Synchronous spawn: the projector runs before the CLI returns. The child has
|
|
9
|
+
* a 15-second safety budget; loaded-host checks normally finish in a few
|
|
10
|
+
* seconds and record the observation before the parent command exits.
|
|
10
11
|
*/
|
|
11
12
|
import { spawnSync } from "node:child_process";
|
|
12
13
|
import { coordBinPath } from "./coord-bin.js";
|
|
@@ -15,15 +16,13 @@ import { resolveCoordRoot } from "./coord-client.js";
|
|
|
15
16
|
* Resolve the coord root for a canonical emit.
|
|
16
17
|
*
|
|
17
18
|
* Delegates to `resolveCoordRoot()`, the single resolution the hooks and the
|
|
18
|
-
* CLI's reads also use. An
|
|
19
|
-
*
|
|
20
|
-
* root, so a divergent emit root blocks rule 1/3 on a turn that did run
|
|
21
|
-
* `agents status`, and no sequence of CLI commands can satisfy it.
|
|
19
|
+
* CLI's reads also use. An observation resolved any other way can disappear
|
|
20
|
+
* from the live V3 generation even though the command itself succeeded.
|
|
22
21
|
*/
|
|
23
22
|
export function resolveEmitRoot(start = process.cwd()) {
|
|
24
23
|
return resolveCoordRoot(start);
|
|
25
24
|
}
|
|
26
|
-
export function
|
|
25
|
+
export function emitEventV3(input) {
|
|
27
26
|
const root = resolveEmitRoot();
|
|
28
27
|
if (!root)
|
|
29
28
|
return false;
|
|
@@ -34,34 +33,35 @@ export function emitCanonical(input) {
|
|
|
34
33
|
const args = [
|
|
35
34
|
"emit-event",
|
|
36
35
|
"--type",
|
|
37
|
-
input.
|
|
36
|
+
input.observation.event_type,
|
|
38
37
|
"--owner",
|
|
39
38
|
input.owner,
|
|
40
39
|
"--session",
|
|
41
40
|
input.session,
|
|
42
41
|
"--adapter",
|
|
43
42
|
input.adapter,
|
|
44
|
-
"--data-
|
|
45
|
-
JSON.stringify(input.data),
|
|
43
|
+
"--data-stdin",
|
|
46
44
|
];
|
|
47
|
-
if (input.turnId)
|
|
48
|
-
args.push("--turn-id", input.turnId);
|
|
49
|
-
if (input.parentSessionId)
|
|
50
|
-
args.push("--parent-session-id", input.parentSessionId);
|
|
51
|
-
if (input.parentTurnId)
|
|
52
|
-
args.push("--parent-turn-id", input.parentTurnId);
|
|
53
45
|
// Pin cwd + HARNERY_COORD_ROOT_OVERRIDE so the child writes to the SAME
|
|
54
46
|
// stream we resolved, regardless of where the caller's shell is cd'd.
|
|
55
47
|
const result = spawnSync(binary, args, {
|
|
56
48
|
encoding: "utf8",
|
|
57
|
-
stdio: "ignore",
|
|
58
|
-
|
|
49
|
+
stdio: ["pipe", "ignore", "pipe"],
|
|
50
|
+
input: JSON.stringify(input.observation),
|
|
51
|
+
// Budget the append generously. Under multi-agent contention a single
|
|
52
|
+
// `agent-coord emit-event` has been measured at 3.4-4.1s on a loaded
|
|
53
|
+
// host, so a 3s cap timed out every emit and blocked end-of-turn checks
|
|
54
|
+
// -- exactly the failure this module's doc warns about.
|
|
55
|
+
timeout: 15000,
|
|
59
56
|
cwd: root,
|
|
60
57
|
env: { ...process.env, HARNERY_COORD_ROOT_OVERRIDE: root },
|
|
61
58
|
});
|
|
62
59
|
if (result.error || result.status !== 0) {
|
|
63
|
-
const
|
|
64
|
-
|
|
60
|
+
const detail = typeof result.stderr === "string" ? result.stderr.trim() : "";
|
|
61
|
+
const why = result.error
|
|
62
|
+
? result.error.message
|
|
63
|
+
: `exit ${result.status}${detail ? `: ${detail}` : ""}`;
|
|
64
|
+
process.stderr.write(`emitEventV3: ${input.observation.event_type} emit failed (${why})\n`); // lint-ok-emission: soft-fail diagnostic promised by the module doc; silent drops cost blocked turns
|
|
65
65
|
return false;
|
|
66
66
|
}
|
|
67
67
|
return true;
|