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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type EventV3ControlState } from "./control.js";
|
|
2
|
+
export interface InitializeEventLedgerV3Input {
|
|
3
|
+
coordRoot: string;
|
|
4
|
+
harneryBuild: string;
|
|
5
|
+
hostBuild: string;
|
|
6
|
+
configDigest: `sha256:${string}`;
|
|
7
|
+
approvalRecordId: string;
|
|
8
|
+
forceNewEpoch?: boolean;
|
|
9
|
+
resumeCandidate?: boolean;
|
|
10
|
+
now?: () => Date;
|
|
11
|
+
}
|
|
12
|
+
export interface InitializeEventLedgerV3Result {
|
|
13
|
+
state: "active";
|
|
14
|
+
initialized: boolean;
|
|
15
|
+
archived_epoch?: string;
|
|
16
|
+
control: Extract<EventV3ControlState, {
|
|
17
|
+
state: "active";
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Ensure programmatic Harnery entry points have the same universal V3
|
|
22
|
+
* boundary as `harn init`. Only a genuinely absent control pair is created;
|
|
23
|
+
* candidate, damaged, or incompatible state still fails closed.
|
|
24
|
+
*/
|
|
25
|
+
export declare function ensureEventLedgerV3(coordRoot: string, approvalRecordId?: string): Extract<EventV3ControlState, {
|
|
26
|
+
state: "active";
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Ensure a root has one current V3 epoch. An incompatible or explicitly
|
|
30
|
+
* replaced epoch is moved intact to the V3 archive before the new control
|
|
31
|
+
* pair is published. No historical ledger bytes are rewritten or deleted.
|
|
32
|
+
*/
|
|
33
|
+
export declare function initializeEventLedgerV3(input: InitializeEventLedgerV3Input): InitializeEventLedgerV3Result;
|
|
34
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/bootstrap.ts"],"names":[],"mappings":"AAiBA,OAAO,EAML,KAAK,mBAAmB,EAGzB,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,UAAU,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAiC,GAChD,OAAO,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,CAenD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAkE/B"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
4
|
+
import { dirname, join, resolve } from "node:path";
|
|
5
|
+
import { fsyncParentDirectory } from "../../workflow/durable-record.js";
|
|
6
|
+
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
7
|
+
import { ADAPTER_CAPABILITY_PROFILES_V3 } from "./capabilities.js";
|
|
8
|
+
import { buildActivationManifestV3, buildCandidateGenesisManifestV3, EVENT_V3_ACTIVATION_MANIFEST, EVENT_V3_GENESIS_MANIFEST, readEventV3ControlState, repairEventV3ControlPair, } from "./control.js";
|
|
9
|
+
import { loadOrCreateFingerprintKeyStoreV3 } from "./fingerprint-keys.js";
|
|
10
|
+
import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
|
|
11
|
+
import { liveEventV3BuildId, livePlatformV3 } from "./live-routing.js";
|
|
12
|
+
/**
|
|
13
|
+
* Ensure programmatic Harnery entry points have the same universal V3
|
|
14
|
+
* boundary as `harn init`. Only a genuinely absent control pair is created;
|
|
15
|
+
* candidate, damaged, or incompatible state still fails closed.
|
|
16
|
+
*/
|
|
17
|
+
export function ensureEventLedgerV3(coordRoot, approvalRecordId = "harnery-runtime-v3-universal") {
|
|
18
|
+
const root = resolve(coordRoot);
|
|
19
|
+
const current = readEventV3ControlState(root);
|
|
20
|
+
if (current.state === "active")
|
|
21
|
+
return current;
|
|
22
|
+
if (current.state !== "closed") {
|
|
23
|
+
throw new Error(`event_v3_control_unavailable:${current.state}`);
|
|
24
|
+
}
|
|
25
|
+
const configPath = join(root, ".harnery", "config.jsonc");
|
|
26
|
+
return initializeEventLedgerV3({
|
|
27
|
+
coordRoot: root,
|
|
28
|
+
harneryBuild: repositoryBuild(rootOfHarnery()),
|
|
29
|
+
hostBuild: repositoryBuild(root),
|
|
30
|
+
configDigest: sha256V3(existsSync(configPath) ? readFileSync(configPath) : Buffer.from("{}\n")),
|
|
31
|
+
approvalRecordId,
|
|
32
|
+
}).control;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Ensure a root has one current V3 epoch. An incompatible or explicitly
|
|
36
|
+
* replaced epoch is moved intact to the V3 archive before the new control
|
|
37
|
+
* pair is published. No historical ledger bytes are rewritten or deleted.
|
|
38
|
+
*/
|
|
39
|
+
export function initializeEventLedgerV3(input) {
|
|
40
|
+
const root = resolve(input.coordRoot);
|
|
41
|
+
let current = readEventV3ControlState(root);
|
|
42
|
+
if (input.resumeCandidate && current.state === "repairable") {
|
|
43
|
+
current = repairEventV3ControlPair(root);
|
|
44
|
+
}
|
|
45
|
+
if (!input.forceNewEpoch && current.state === "active") {
|
|
46
|
+
return { state: "active", initialized: false, control: current };
|
|
47
|
+
}
|
|
48
|
+
if (!input.forceNewEpoch && input.resumeCandidate && current.state === "candidate") {
|
|
49
|
+
return activateCandidateEpoch(root, current.genesis, input.approvalRecordId);
|
|
50
|
+
}
|
|
51
|
+
if (!input.forceNewEpoch && current.state === "candidate") {
|
|
52
|
+
throw new Error("event_v3_candidate_requires_explicit_activation_or_epoch_replacement");
|
|
53
|
+
}
|
|
54
|
+
const now = input.now ?? (() => new Date());
|
|
55
|
+
const createdAt = now().toISOString();
|
|
56
|
+
const archivedEpoch = archiveCurrentEpoch(root, createdAt);
|
|
57
|
+
const keys = loadOrCreateFingerprintKeyStoreV3(root, now);
|
|
58
|
+
const harneryBuild = safeBuild(input.harneryBuild);
|
|
59
|
+
const hostBuild = safeBuild(input.hostBuild);
|
|
60
|
+
const producerId = "prd_harnery-init";
|
|
61
|
+
const bootId = `boot_${createHash("sha256").update(`${root}\0${createdAt}`).digest("hex")}`;
|
|
62
|
+
const buildId = liveEventV3BuildId(harneryBuild);
|
|
63
|
+
const rootId = `root_${createHash("sha256").update(root).digest("hex")}`;
|
|
64
|
+
const instanceId = `inst_init_${createHash("sha256").update(`${root}\0${createdAt}`).digest("hex")}`;
|
|
65
|
+
const capabilityDigests = Object.values(ADAPTER_CAPABILITY_PROFILES_V3)
|
|
66
|
+
.map((profile) => sha256V3(canonicalJsonV3(profile)))
|
|
67
|
+
.sort();
|
|
68
|
+
const candidate = buildCandidateGenesisManifestV3({
|
|
69
|
+
profile: {
|
|
70
|
+
initial_schema_digest: EVENT_V3_SCHEMA_DIGEST,
|
|
71
|
+
contract_source_digest: EVENT_V3_SCHEMA_DIGEST,
|
|
72
|
+
harnery_commit: harneryBuild,
|
|
73
|
+
host_repository_commit: hostBuild,
|
|
74
|
+
producer_build_ids: [buildId],
|
|
75
|
+
adapter_capability_profile_digests: capabilityDigests,
|
|
76
|
+
config_digest: input.configDigest,
|
|
77
|
+
canonicalizer_version: "harnery-jcs-nfc-v1",
|
|
78
|
+
fingerprint_version: "hmac-sha256-v1",
|
|
79
|
+
privacy_key_epoch: keys.active_epoch_id,
|
|
80
|
+
candidate_created_at: createdAt,
|
|
81
|
+
},
|
|
82
|
+
root_id: rootId,
|
|
83
|
+
instance_id: instanceId,
|
|
84
|
+
producer: {
|
|
85
|
+
producer_id: producerId,
|
|
86
|
+
boot_id: bootId,
|
|
87
|
+
sequence: 1,
|
|
88
|
+
build_id: buildId,
|
|
89
|
+
platform: livePlatformV3(),
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
publishControlFile(join(root, EVENT_V3_GENESIS_MANIFEST), candidate);
|
|
93
|
+
const candidateState = repairEventV3ControlPair(root);
|
|
94
|
+
if (candidateState.state !== "candidate") {
|
|
95
|
+
throw new Error(`event_v3_candidate_initialization_failed:${candidateState.state}`);
|
|
96
|
+
}
|
|
97
|
+
const activated = activateCandidateEpoch(root, candidate, input.approvalRecordId);
|
|
98
|
+
return {
|
|
99
|
+
...activated,
|
|
100
|
+
...(archivedEpoch ? { archived_epoch: archivedEpoch } : {}),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function activateCandidateEpoch(root, candidate, approvalRecordId) {
|
|
104
|
+
const producer = candidate.event.producer;
|
|
105
|
+
const activation = buildActivationManifestV3({
|
|
106
|
+
candidate,
|
|
107
|
+
approval_record_id: approvalRecordId,
|
|
108
|
+
activation_approved_at: candidate.profile.candidate_created_at,
|
|
109
|
+
producer: {
|
|
110
|
+
producer_id: producer.producer_id,
|
|
111
|
+
boot_id: producer.boot_id,
|
|
112
|
+
sequence: producer.sequence + 1,
|
|
113
|
+
build_id: producer.build_id,
|
|
114
|
+
platform: producer.platform,
|
|
115
|
+
...(producer.bridge ? { bridge: producer.bridge } : {}),
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
publishControlFile(join(root, EVENT_V3_ACTIVATION_MANIFEST), activation);
|
|
119
|
+
const active = repairEventV3ControlPair(root);
|
|
120
|
+
if (active.state !== "active") {
|
|
121
|
+
throw new Error(`event_v3_activation_failed:${active.state}`);
|
|
122
|
+
}
|
|
123
|
+
return { state: "active", initialized: true, control: active };
|
|
124
|
+
}
|
|
125
|
+
function archiveCurrentEpoch(root, createdAt) {
|
|
126
|
+
const current = join(root, ".harnery", "ledgers", "v3");
|
|
127
|
+
if (!existsSync(current))
|
|
128
|
+
return undefined;
|
|
129
|
+
const archives = join(root, ".harnery", "ledgers", "v3-archives");
|
|
130
|
+
mkdirSync(archives, { recursive: true, mode: 0o700 });
|
|
131
|
+
const stamp = createdAt.replace(/[^0-9]/g, "");
|
|
132
|
+
let target = join(archives, `epoch-${stamp}`);
|
|
133
|
+
let suffix = 0;
|
|
134
|
+
while (existsSync(target))
|
|
135
|
+
target = join(archives, `epoch-${stamp}-${++suffix}`);
|
|
136
|
+
renameSync(current, target);
|
|
137
|
+
fsyncParentDirectory(target);
|
|
138
|
+
return target;
|
|
139
|
+
}
|
|
140
|
+
function publishControlFile(path, value) {
|
|
141
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
142
|
+
const temp = `${path}.tmp.${process.pid}`;
|
|
143
|
+
const fd = openSync(temp, "wx", 0o600);
|
|
144
|
+
try {
|
|
145
|
+
writeFileSync(fd, `${canonicalJsonV3(value)}\n`, "utf8");
|
|
146
|
+
fsyncSync(fd);
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
closeSync(fd);
|
|
150
|
+
}
|
|
151
|
+
chmodSync(temp, 0o600);
|
|
152
|
+
renameSync(temp, path);
|
|
153
|
+
fsyncParentDirectory(path);
|
|
154
|
+
}
|
|
155
|
+
function safeBuild(value) {
|
|
156
|
+
const normalized = value.normalize("NFC").trim();
|
|
157
|
+
if (/^[a-zA-Z0-9._-]{1,120}$/.test(normalized))
|
|
158
|
+
return normalized;
|
|
159
|
+
return createHash("sha256")
|
|
160
|
+
.update(normalized || "unknown")
|
|
161
|
+
.digest("hex");
|
|
162
|
+
}
|
|
163
|
+
function rootOfHarnery() {
|
|
164
|
+
return resolve(import.meta.dir, "../../../..");
|
|
165
|
+
}
|
|
166
|
+
function repositoryBuild(root) {
|
|
167
|
+
const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
|
|
168
|
+
encoding: "utf8",
|
|
169
|
+
timeout: 5000,
|
|
170
|
+
});
|
|
171
|
+
const commit = result.status === 0 ? result.stdout.trim() : "";
|
|
172
|
+
if (/^[0-9a-f]{40,64}$/.test(commit))
|
|
173
|
+
return commit;
|
|
174
|
+
return createHash("sha256").update(resolve(root)).digest("hex");
|
|
175
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EventOfTypeV3, EventPayloadV3, EventTypeV3 } from "./contract.js";
|
|
2
|
+
type EventWithoutDiscriminator<T extends EventTypeV3> = Omit<EventOfTypeV3<T>, "attestation_id" | "contract" | "event_id" | "event_type" | "payload" | "time">;
|
|
3
|
+
type RootEventTypeV3 = "ledger.genesis" | "ledger.activated" | "ledger.schema_advanced" | "ledger.comparability_advanced";
|
|
4
|
+
type AttestationInputV3<T extends EventTypeV3> = T extends RootEventTypeV3 ? {
|
|
5
|
+
attestation_id?: never;
|
|
6
|
+
} : {
|
|
7
|
+
attestation_id: `att_${string}`;
|
|
8
|
+
};
|
|
9
|
+
export type BuildEventV3Input<T extends EventTypeV3> = EventWithoutDiscriminator<T> & AttestationInputV3<T> & {
|
|
10
|
+
payload: EventPayloadV3<T>;
|
|
11
|
+
event_id?: `evt_${string}`;
|
|
12
|
+
observed_at?: string;
|
|
13
|
+
recorded_at?: string;
|
|
14
|
+
monotonic_ns?: string;
|
|
15
|
+
clock_id?: `clk_${string}`;
|
|
16
|
+
skew?: "normal" | "regressed" | "unknown";
|
|
17
|
+
};
|
|
18
|
+
export declare function buildEventV3<T extends EventTypeV3>(eventType: T, input: BuildEventV3Input<T>): EventOfTypeV3<T>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKhF,KAAK,yBAAyB,CAAC,CAAC,SAAS,WAAW,IAAI,IAAI,CAC1D,aAAa,CAAC,CAAC,CAAC,EAChB,gBAAgB,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAC/E,CAAC;AAEF,KAAK,eAAe,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,GACxB,+BAA+B,CAAC;AAEpC,KAAK,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,eAAe,GACtE;IAAE,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1B;IAAE,cAAc,EAAE,OAAO,MAAM,EAAE,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IAAI,yBAAyB,CAAC,CAAC,CAAC,GACjF,kBAAkB,CAAC,CAAC,CAAC,GAAG;IACtB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEJ,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAChD,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAwBlB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EVENT_V3_CONTRACT_MAJOR, EVENT_V3_CONTRACT_NAME } from "./contract.js";
|
|
2
|
+
import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
|
|
3
|
+
import { clockIdV3, eventIdV3 } from "./ids.js";
|
|
4
|
+
export function buildEventV3(eventType, input) {
|
|
5
|
+
const now = input.recorded_at ?? new Date().toISOString();
|
|
6
|
+
return {
|
|
7
|
+
contract: {
|
|
8
|
+
name: EVENT_V3_CONTRACT_NAME,
|
|
9
|
+
major: EVENT_V3_CONTRACT_MAJOR,
|
|
10
|
+
schema_digest: EVENT_V3_SCHEMA_DIGEST,
|
|
11
|
+
},
|
|
12
|
+
event_id: input.event_id ?? eventIdV3(),
|
|
13
|
+
event_type: eventType,
|
|
14
|
+
time: {
|
|
15
|
+
observed_at: input.observed_at ?? now,
|
|
16
|
+
recorded_at: now,
|
|
17
|
+
...(input.monotonic_ns ? { monotonic_ns: input.monotonic_ns } : {}),
|
|
18
|
+
clock_id: input.clock_id ?? clockIdV3(),
|
|
19
|
+
skew: input.skew ?? "unknown",
|
|
20
|
+
},
|
|
21
|
+
producer: input.producer,
|
|
22
|
+
scope: input.scope,
|
|
23
|
+
...(input.attestation_id ? { attestation_id: input.attestation_id } : {}),
|
|
24
|
+
links: input.links,
|
|
25
|
+
provenance: input.provenance,
|
|
26
|
+
payload: input.payload,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const EVENT_V3_CANONICALIZER: "harnery-jcs-nfc-v1";
|
|
2
|
+
export type JsonPrimitive = null | boolean | number | string;
|
|
3
|
+
export type JsonValue = JsonPrimitive | JsonValue[] | {
|
|
4
|
+
[key: string]: JsonValue;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Canonical JSON used for V3 contract digests, event bytes, and fingerprints.
|
|
8
|
+
*
|
|
9
|
+
* It follows RFC 8785's ECMAScript number and string serialization, adds the
|
|
10
|
+
* V3 NFC rule for keys and values, and rejects values that JSON would silently
|
|
11
|
+
* erase or reinterpret. Object keys are serialized directly instead of via an
|
|
12
|
+
* intermediate object so integer-looking keys remain in lexical order.
|
|
13
|
+
*/
|
|
14
|
+
export declare function canonicalJsonV3(value: unknown): string;
|
|
15
|
+
export declare function sha256V3(value: string | Uint8Array): `sha256:${string}`;
|
|
16
|
+
export interface FingerprintV3 {
|
|
17
|
+
algorithm: "hmac-sha256";
|
|
18
|
+
canonicalizer: typeof EVENT_V3_CANONICALIZER;
|
|
19
|
+
key_epoch: `pep_${string}`;
|
|
20
|
+
scope: "generation" | "root";
|
|
21
|
+
digest: `sha256:${string}`;
|
|
22
|
+
}
|
|
23
|
+
export interface FingerprintContextV3 {
|
|
24
|
+
epochId: `pep_${string}`;
|
|
25
|
+
epochKey: Uint8Array;
|
|
26
|
+
rootId: `root_${string}`;
|
|
27
|
+
generationId?: `gen_${string}`;
|
|
28
|
+
}
|
|
29
|
+
export declare function fingerprintV3(context: FingerprintContextV3, domain: string, value: unknown, scope?: "generation" | "root"): FingerprintV3;
|
|
30
|
+
export declare function normalizeNativeIdV3(context: FingerprintContextV3, namespace: string, nativeId: string): `hid_${string}`;
|
|
31
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/canonical.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,EAAG,oBAA6B,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,MAAM,EAAE,CAEvE;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,OAAO,sBAAsB,CAAC;IAC7C,SAAS,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,QAAQ,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,YAAY,GAAG,MAAqB,GAC1C,aAAa,CAqCf;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,MAAM,EAAE,CAkBjB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createHash, createHmac, hkdfSync } from "node:crypto";
|
|
2
|
+
export const EVENT_V3_CANONICALIZER = "harnery-jcs-nfc-v1";
|
|
3
|
+
/**
|
|
4
|
+
* Canonical JSON used for V3 contract digests, event bytes, and fingerprints.
|
|
5
|
+
*
|
|
6
|
+
* It follows RFC 8785's ECMAScript number and string serialization, adds the
|
|
7
|
+
* V3 NFC rule for keys and values, and rejects values that JSON would silently
|
|
8
|
+
* erase or reinterpret. Object keys are serialized directly instead of via an
|
|
9
|
+
* intermediate object so integer-looking keys remain in lexical order.
|
|
10
|
+
*/
|
|
11
|
+
export function canonicalJsonV3(value) {
|
|
12
|
+
return serialize(value, new Set());
|
|
13
|
+
}
|
|
14
|
+
export function sha256V3(value) {
|
|
15
|
+
return `sha256:${createHash("sha256").update(value).digest("hex")}`;
|
|
16
|
+
}
|
|
17
|
+
export function fingerprintV3(context, domain, value, scope = "generation") {
|
|
18
|
+
assertDomain(domain);
|
|
19
|
+
const rootKey = Buffer.from(hkdfSync("sha256", context.epochKey, Buffer.from(context.epochId, "utf8"), Buffer.from(`harnery:v3:root\0${context.rootId}`, "utf8"), 32));
|
|
20
|
+
let comparisonKey = rootKey;
|
|
21
|
+
if (scope === "generation") {
|
|
22
|
+
if (!context.generationId) {
|
|
23
|
+
throw new Error("generation-scoped fingerprint requires a generation ID");
|
|
24
|
+
}
|
|
25
|
+
comparisonKey = Buffer.from(hkdfSync("sha256", rootKey, Buffer.from(context.generationId, "utf8"), Buffer.from("harnery:v3:generation", "utf8"), 32));
|
|
26
|
+
}
|
|
27
|
+
const digest = createHmac("sha256", comparisonKey)
|
|
28
|
+
.update(`harnery:v3:${domain}\0`, "utf8")
|
|
29
|
+
.update(canonicalJsonV3(value), "utf8")
|
|
30
|
+
.digest("hex");
|
|
31
|
+
return {
|
|
32
|
+
algorithm: "hmac-sha256",
|
|
33
|
+
canonicalizer: EVENT_V3_CANONICALIZER,
|
|
34
|
+
key_epoch: context.epochId,
|
|
35
|
+
scope,
|
|
36
|
+
digest: `sha256:${digest}`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function normalizeNativeIdV3(context, namespace, nativeId) {
|
|
40
|
+
if (!/^[a-z][a-z0-9._-]{0,63}$/.test(namespace)) {
|
|
41
|
+
throw new Error("native ID namespace is invalid");
|
|
42
|
+
}
|
|
43
|
+
const rootKey = Buffer.from(hkdfSync("sha256", context.epochKey, Buffer.from(context.epochId, "utf8"), Buffer.from(`harnery:v3:root\0${context.rootId}`, "utf8"), 32));
|
|
44
|
+
const digest = createHmac("sha256", rootKey)
|
|
45
|
+
.update(`harnery:v3:native-id\0${namespace}\0`, "utf8")
|
|
46
|
+
.update(nativeId.normalize("NFC"), "utf8")
|
|
47
|
+
.digest("hex");
|
|
48
|
+
return `hid_${digest}`;
|
|
49
|
+
}
|
|
50
|
+
function serialize(value, ancestors) {
|
|
51
|
+
if (value === null)
|
|
52
|
+
return "null";
|
|
53
|
+
if (typeof value === "boolean")
|
|
54
|
+
return value ? "true" : "false";
|
|
55
|
+
if (typeof value === "string")
|
|
56
|
+
return JSON.stringify(value.normalize("NFC"));
|
|
57
|
+
if (typeof value === "number") {
|
|
58
|
+
if (!Number.isFinite(value))
|
|
59
|
+
throw new Error("canonical JSON rejects non-finite numbers");
|
|
60
|
+
return JSON.stringify(Object.is(value, -0) ? 0 : value);
|
|
61
|
+
}
|
|
62
|
+
if (typeof value !== "object") {
|
|
63
|
+
throw new Error(`canonical JSON rejects ${typeof value}`);
|
|
64
|
+
}
|
|
65
|
+
if (ancestors.has(value))
|
|
66
|
+
throw new Error("canonical JSON rejects cycles");
|
|
67
|
+
ancestors.add(value);
|
|
68
|
+
try {
|
|
69
|
+
if (Array.isArray(value)) {
|
|
70
|
+
return `[${value.map((item) => serialize(item, ancestors)).join(",")}]`;
|
|
71
|
+
}
|
|
72
|
+
const prototype = Object.getPrototypeOf(value);
|
|
73
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
74
|
+
throw new Error("canonical JSON accepts only plain objects");
|
|
75
|
+
}
|
|
76
|
+
const normalized = new Map();
|
|
77
|
+
for (const [key, item] of Object.entries(value)) {
|
|
78
|
+
const normalizedKey = key.normalize("NFC");
|
|
79
|
+
if (normalized.has(normalizedKey)) {
|
|
80
|
+
throw new Error("canonical JSON key collision after Unicode normalization");
|
|
81
|
+
}
|
|
82
|
+
normalized.set(normalizedKey, item);
|
|
83
|
+
}
|
|
84
|
+
const keys = [...normalized.keys()].sort(compareUtf16);
|
|
85
|
+
return `{${keys
|
|
86
|
+
.map((key) => `${JSON.stringify(key)}:${serialize(normalized.get(key), ancestors)}`)
|
|
87
|
+
.join(",")}}`;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
ancestors.delete(value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function compareUtf16(left, right) {
|
|
94
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
95
|
+
}
|
|
96
|
+
function assertDomain(domain) {
|
|
97
|
+
if (!/^[a-z][a-z0-9._-]{0,63}$/.test(domain)) {
|
|
98
|
+
throw new Error("fingerprint domain is invalid");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Adapter } from "../../adapter.js";
|
|
2
|
+
export type CapabilitySupportV3 = "native" | "derived" | "conditional" | "unsupported";
|
|
3
|
+
export type CursorExecutionModeV3 = "local" | "cloud" | "unknown";
|
|
4
|
+
export type AdapterWaitKindV3 = "permission" | "needs_input" | "decision" | "approval" | "scheduled" | "rate_limit" | "unknown";
|
|
5
|
+
export type BaseAdapterSignalV3 = "session_start" | "session_end" | "prompt" | "turn_id" | "turn_completion" | "tool_request" | "tool_result" | "tool_failure" | "tool_call_id" | "tool_duration" | "permission" | "subagent" | "shell" | "pre_compaction" | "post_compaction" | "context_usage" | "model_identity";
|
|
6
|
+
export type AdapterSignalV3 = BaseAdapterSignalV3 | "model_usage" | "inference_timing" | "harness_timing" | "capability_drift";
|
|
7
|
+
export interface AdapterCapabilityProfileV3 {
|
|
8
|
+
format: "harnery-v3-adapter-capabilities";
|
|
9
|
+
format_version: 1;
|
|
10
|
+
adapter: Adapter;
|
|
11
|
+
signals: Record<AdapterSignalV3, CapabilitySupportV3>;
|
|
12
|
+
}
|
|
13
|
+
export declare const ADAPTER_CAPABILITY_PROFILES_V3: Record<Adapter, AdapterCapabilityProfileV3>;
|
|
14
|
+
export declare function adapterCapabilityProfileV3(adapter: Adapter): AdapterCapabilityProfileV3;
|
|
15
|
+
export declare function adapterCapabilityProfileDigestV3(adapter: Adapter): `cap_${string}`;
|
|
16
|
+
export declare function adapterSignalSupportV3(adapter: Adapter, signal: AdapterSignalV3): CapabilitySupportV3;
|
|
17
|
+
/**
|
|
18
|
+
* Adapter hooks only expose permission waits today. Other wait kinds can be
|
|
19
|
+
* authored by coordination producers, but they are not observable from an
|
|
20
|
+
* adapter's native turn channel.
|
|
21
|
+
*/
|
|
22
|
+
export declare function adapterWaitKindSupportV3(adapter: Adapter, kind: AdapterWaitKindV3): CapabilitySupportV3;
|
|
23
|
+
/** No current adapter supplies an independent completed-turn wait aggregate. */
|
|
24
|
+
export declare function adapterTurnWaitCountSupportV3(_adapter: Adapter): CapabilitySupportV3;
|
|
25
|
+
/**
|
|
26
|
+
* Local Cursor sessions expose the generic tool channel. Cloud/private-worker
|
|
27
|
+
* sessions cannot guarantee whole-turn delivery because hooks may start only
|
|
28
|
+
* after the execution environment becomes writable.
|
|
29
|
+
*/
|
|
30
|
+
export declare function cursorToolChannelSupportV3(mode: CursorExecutionModeV3): CapabilitySupportV3;
|
|
31
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,UAAU,GACV,WAAW,GACX,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,GACf,YAAY,GACZ,UAAU,GACV,OAAO,GACP,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,iCAAiC,CAAC;IAC1C,cAAc,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;CACvD;AAmED,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAatF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CAEvF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,MAAM,EAAE,CAElF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,GACtB,mBAAmB,CAErB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAErB;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,GAAG,mBAAmB,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAI3F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
2
|
+
const SHARED_SIGNAL_SUPPORT = {
|
|
3
|
+
session_start: "native",
|
|
4
|
+
prompt: "native",
|
|
5
|
+
turn_completion: "native",
|
|
6
|
+
tool_request: "native",
|
|
7
|
+
tool_result: "native",
|
|
8
|
+
tool_failure: "native",
|
|
9
|
+
tool_call_id: "native",
|
|
10
|
+
tool_duration: "derived",
|
|
11
|
+
subagent: "native",
|
|
12
|
+
shell: "native",
|
|
13
|
+
pre_compaction: "native",
|
|
14
|
+
model_identity: "conditional",
|
|
15
|
+
};
|
|
16
|
+
const BASE_SIGNAL_SUPPORT = {
|
|
17
|
+
"claude-code": {
|
|
18
|
+
...SHARED_SIGNAL_SUPPORT,
|
|
19
|
+
session_end: "native",
|
|
20
|
+
turn_id: "conditional",
|
|
21
|
+
permission: "native",
|
|
22
|
+
post_compaction: "native",
|
|
23
|
+
context_usage: "unsupported",
|
|
24
|
+
},
|
|
25
|
+
codex: {
|
|
26
|
+
...SHARED_SIGNAL_SUPPORT,
|
|
27
|
+
session_end: "native",
|
|
28
|
+
turn_id: "native",
|
|
29
|
+
permission: "native",
|
|
30
|
+
post_compaction: "native",
|
|
31
|
+
context_usage: "unsupported",
|
|
32
|
+
},
|
|
33
|
+
cursor: {
|
|
34
|
+
...SHARED_SIGNAL_SUPPORT,
|
|
35
|
+
session_end: "native",
|
|
36
|
+
turn_id: "unsupported",
|
|
37
|
+
tool_request: "conditional",
|
|
38
|
+
tool_result: "conditional",
|
|
39
|
+
tool_failure: "conditional",
|
|
40
|
+
tool_call_id: "conditional",
|
|
41
|
+
tool_duration: "conditional",
|
|
42
|
+
shell: "conditional",
|
|
43
|
+
permission: "conditional",
|
|
44
|
+
post_compaction: "unsupported",
|
|
45
|
+
context_usage: "unsupported",
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
function profile(adapter, economics) {
|
|
49
|
+
return {
|
|
50
|
+
format: "harnery-v3-adapter-capabilities",
|
|
51
|
+
format_version: 1,
|
|
52
|
+
adapter,
|
|
53
|
+
signals: {
|
|
54
|
+
...BASE_SIGNAL_SUPPORT[adapter],
|
|
55
|
+
...economics,
|
|
56
|
+
harness_timing: "derived",
|
|
57
|
+
capability_drift: "derived",
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export const ADAPTER_CAPABILITY_PROFILES_V3 = {
|
|
62
|
+
"claude-code": profile("claude-code", {
|
|
63
|
+
model_usage: "conditional",
|
|
64
|
+
inference_timing: "unsupported",
|
|
65
|
+
}),
|
|
66
|
+
codex: profile("codex", {
|
|
67
|
+
model_usage: "conditional",
|
|
68
|
+
inference_timing: "unsupported",
|
|
69
|
+
}),
|
|
70
|
+
cursor: profile("cursor", {
|
|
71
|
+
model_usage: "unsupported",
|
|
72
|
+
inference_timing: "unsupported",
|
|
73
|
+
}),
|
|
74
|
+
};
|
|
75
|
+
export function adapterCapabilityProfileV3(adapter) {
|
|
76
|
+
return ADAPTER_CAPABILITY_PROFILES_V3[adapter];
|
|
77
|
+
}
|
|
78
|
+
export function adapterCapabilityProfileDigestV3(adapter) {
|
|
79
|
+
return `cap_${sha256V3(canonicalJsonV3(adapterCapabilityProfileV3(adapter))).slice(7)}`;
|
|
80
|
+
}
|
|
81
|
+
export function adapterSignalSupportV3(adapter, signal) {
|
|
82
|
+
return adapterCapabilityProfileV3(adapter).signals[signal];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Adapter hooks only expose permission waits today. Other wait kinds can be
|
|
86
|
+
* authored by coordination producers, but they are not observable from an
|
|
87
|
+
* adapter's native turn channel.
|
|
88
|
+
*/
|
|
89
|
+
export function adapterWaitKindSupportV3(adapter, kind) {
|
|
90
|
+
return kind === "permission" ? adapterSignalSupportV3(adapter, "permission") : "unsupported";
|
|
91
|
+
}
|
|
92
|
+
/** No current adapter supplies an independent completed-turn wait aggregate. */
|
|
93
|
+
export function adapterTurnWaitCountSupportV3(_adapter) {
|
|
94
|
+
return "unsupported";
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Local Cursor sessions expose the generic tool channel. Cloud/private-worker
|
|
98
|
+
* sessions cannot guarantee whole-turn delivery because hooks may start only
|
|
99
|
+
* after the execution environment becomes writable.
|
|
100
|
+
*/
|
|
101
|
+
export function cursorToolChannelSupportV3(mode) {
|
|
102
|
+
if (mode === "local")
|
|
103
|
+
return "native";
|
|
104
|
+
if (mode === "cloud")
|
|
105
|
+
return "unsupported";
|
|
106
|
+
return "conditional";
|
|
107
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Adapter } from "../../adapter.js";
|
|
2
|
+
import { type AdapterSignalV3 } from "./capabilities.js";
|
|
3
|
+
import type { EventPayloadV3, EventV3 } from "./contract.js";
|
|
4
|
+
export interface CapabilityDeliveryV3 {
|
|
5
|
+
signal: AdapterSignalV3;
|
|
6
|
+
expected_count: number;
|
|
7
|
+
observed_count: number;
|
|
8
|
+
}
|
|
9
|
+
export type CapabilityDriftPayloadV3 = EventPayloadV3<"health.capability_drift">;
|
|
10
|
+
/**
|
|
11
|
+
* Compare measurable adapter promises against one completed generation.
|
|
12
|
+
*
|
|
13
|
+
* Conditional and unsupported promises never drift: absence is allowed by
|
|
14
|
+
* their contract. Native and derived promises report only when a concrete
|
|
15
|
+
* opportunity existed, keeping a quiet generation from manufacturing health
|
|
16
|
+
* failures.
|
|
17
|
+
*/
|
|
18
|
+
export declare function capabilityDriftPayloadsV3(adapter: Adapter, events: readonly EventV3[], options?: {
|
|
19
|
+
generation_ended?: boolean;
|
|
20
|
+
}): CapabilityDriftPayloadV3[];
|
|
21
|
+
export declare function measurableDeliveriesV3(events: readonly EventV3[]): CapabilityDeliveryV3[];
|
|
22
|
+
//# sourceMappingURL=capability-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-drift.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capability-drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAEjF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,OAAO,EAAE,EAC1B,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,wBAAwB,EAAE,CAsB5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAEzF"}
|