harnery 0.34.1 → 0.36.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 +30 -5
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +124 -94
- package/dist/commands/agents.d.ts +37 -6
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +466 -371
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +10 -10
- package/dist/commands/browse-session.d.ts.map +1 -1
- package/dist/commands/browse-session.js +12 -0
- package/dist/commands/browse.d.ts +1 -1
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +31 -6
- package/dist/commands/conversations.d.ts +10 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +201 -0
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +2 -2
- package/dist/commands/deinit.d.ts.map +1 -1
- package/dist/commands/deinit.js +5 -0
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +13 -2
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +51 -7
- package/dist/commands/events.d.ts.map +1 -1
- package/dist/commands/events.js +18 -1
- package/dist/commands/fetch.js +6 -5
- package/dist/commands/files.d.ts +22 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +113 -0
- package/dist/commands/governor.js +14 -12
- package/dist/commands/inbox.d.ts +5 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +57 -0
- package/dist/commands/init.d.ts +4 -5
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +63 -13
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +347 -1
- package/dist/commands/logs.d.ts +4 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +169 -0
- package/dist/commands/messages.d.ts +5 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +45 -0
- package/dist/commands/outline.d.ts +1 -1
- package/dist/commands/outline.d.ts.map +1 -1
- package/dist/commands/outline.js +2 -2
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +2 -2
- package/dist/commands/read.d.ts +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +2 -2
- package/dist/commands/semantic.d.ts +4 -0
- package/dist/commands/semantic.d.ts.map +1 -0
- package/dist/commands/semantic.js +199 -0
- package/dist/commands/storage.d.ts +4 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +238 -0
- package/dist/commands/tunnel.d.ts +5 -1
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +44 -31
- package/dist/commands/web.d.ts +3 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +84 -7
- package/dist/commands/work.js +3 -3
- package/dist/commands/workflow.js +13 -13
- package/dist/core/adapters/profiles.d.ts +1 -1
- package/dist/core/agents/canonical-emit.d.ts +3 -0
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +12 -0
- package/dist/core/agents/claim-path.d.ts +11 -0
- package/dist/core/agents/claim-path.d.ts.map +1 -0
- package/dist/core/agents/claim-path.js +22 -0
- package/dist/core/agents/cli.js +209 -39
- package/dist/core/agents/coord-client.d.ts +29 -3
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +88 -9
- package/dist/core/agents/live-authority-v3.d.ts +47 -1
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +245 -13
- package/dist/core/agents/live-lifecycle-v3.js +9 -4
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
- package/dist/core/agents/live-observation-v3.js +8 -3
- package/dist/core/agents/render/prompt-context.d.ts +9 -3
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +36 -17
- package/dist/core/agents/rules/stop-hook.d.ts +2 -0
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +115 -22
- package/dist/core/agents/rules/verdict.d.ts +1 -0
- package/dist/core/agents/rules/verdict.d.ts.map +1 -1
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +4 -0
- package/dist/core/agents/session-finalization-state-v3.js +1 -1
- package/dist/core/agents/session-finalizer-v3.js +5 -1
- package/dist/core/agents/session-name-display.d.ts +1 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -1
- package/dist/core/agents/session-name-display.js +8 -1
- package/dist/core/agents/state/activity-log.d.ts +3 -0
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +6 -3
- package/dist/core/agents/state/heartbeat-reader.d.ts +46 -0
- package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -0
- package/dist/core/agents/state/heartbeat-reader.js +25 -0
- package/dist/core/agents/state/heartbeat-writer.d.ts +9 -48
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +34 -34
- package/dist/core/agents/state/live-coordination-view.d.ts +6 -8
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +16 -67
- package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
- package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-writer.js +92 -0
- package/dist/core/agents/state/names.d.ts +9 -1
- package/dist/core/agents/state/names.d.ts.map +1 -1
- package/dist/core/agents/state/names.js +190 -182
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +23 -5
- package/dist/core/artifacts/constants.d.ts +5 -0
- package/dist/core/artifacts/constants.d.ts.map +1 -0
- package/dist/core/artifacts/constants.js +4 -0
- package/dist/core/artifacts/index.d.ts +24 -3
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +96 -8
- package/dist/core/config.d.ts +62 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +98 -4
- package/dist/core/conversations/archive.d.ts +49 -0
- package/dist/core/conversations/archive.d.ts.map +1 -0
- package/dist/core/conversations/archive.js +136 -0
- package/dist/core/conversations/catalog.d.ts +10 -0
- package/dist/core/conversations/catalog.d.ts.map +1 -0
- package/dist/core/conversations/catalog.js +72 -0
- package/dist/core/conversations/context-pack.d.ts +6 -0
- package/dist/core/conversations/context-pack.d.ts.map +1 -0
- package/dist/core/conversations/context-pack.js +60 -0
- package/dist/core/conversations/contract.d.ts +155 -0
- package/dist/core/conversations/contract.d.ts.map +1 -0
- package/dist/core/conversations/contract.js +1 -0
- package/dist/core/conversations/evaluation.d.ts +16 -0
- package/dist/core/conversations/evaluation.d.ts.map +1 -0
- package/dist/core/conversations/evaluation.js +9 -0
- package/dist/core/conversations/index.d.ts +10 -0
- package/dist/core/conversations/index.d.ts.map +1 -0
- package/dist/core/conversations/index.js +9 -0
- package/dist/core/conversations/lifecycle.d.ts +28 -0
- package/dist/core/conversations/lifecycle.d.ts.map +1 -0
- package/dist/core/conversations/lifecycle.js +29 -0
- package/dist/core/conversations/normalize.d.ts +14 -0
- package/dist/core/conversations/normalize.d.ts.map +1 -0
- package/dist/core/conversations/normalize.js +82 -0
- package/dist/core/conversations/query.d.ts +8 -0
- package/dist/core/conversations/query.d.ts.map +1 -0
- package/dist/core/conversations/query.js +280 -0
- package/dist/core/conversations/search-index.d.ts +9 -0
- package/dist/core/conversations/search-index.d.ts.map +1 -0
- package/dist/core/conversations/search-index.js +29 -0
- package/dist/core/events/legacy-storage/canary.d.ts +18 -0
- package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/canary.js +150 -0
- package/dist/core/events/legacy-storage/fence.d.ts +15 -0
- package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/fence.js +115 -0
- package/dist/core/events/legacy-storage/index.d.ts +6 -0
- package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/index.js +5 -0
- package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
- package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/inventory.js +40 -0
- package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
- package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/manifest.js +108 -0
- package/dist/core/events/legacy-storage/reader.d.ts +15 -0
- package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/reader.js +154 -0
- package/dist/core/events/v3/authority-outbox.d.ts +7 -2
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
- package/dist/core/events/v3/authority-outbox.js +16 -3
- package/dist/core/events/v3/base-contract.d.ts +851 -16
- package/dist/core/events/v3/base-contract.d.ts.map +1 -1
- package/dist/core/events/v3/base-contract.js +50 -7
- package/dist/core/events/v3/bootstrap.d.ts +39 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
- package/dist/core/events/v3/bootstrap.js +167 -3
- package/dist/core/events/v3/capabilities.d.ts +11 -0
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +26 -3
- package/dist/core/events/v3/control-witness.d.ts +44 -0
- package/dist/core/events/v3/control-witness.d.ts.map +1 -0
- package/dist/core/events/v3/control-witness.js +233 -0
- package/dist/core/events/v3/control-writer.d.ts +4 -0
- package/dist/core/events/v3/control-writer.d.ts.map +1 -0
- package/dist/core/events/v3/control-writer.js +16 -0
- package/dist/core/events/v3/control.d.ts +8 -2
- package/dist/core/events/v3/control.d.ts.map +1 -1
- package/dist/core/events/v3/control.js +46 -18
- package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
- package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
- package/dist/core/events/v3/coordination-view.js +16 -1
- package/dist/core/events/v3/generated.d.ts +1 -1
- package/dist/core/events/v3/generated.js +1 -1
- package/dist/core/events/v3/index.d.ts +8 -5
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +7 -4
- package/dist/core/events/v3/latency.d.ts +31 -1
- package/dist/core/events/v3/latency.d.ts.map +1 -1
- package/dist/core/events/v3/latency.js +127 -3
- package/dist/core/events/v3/live-route-observer.d.ts +31 -0
- package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
- package/dist/core/events/v3/live-route-observer.js +58 -0
- package/dist/core/events/v3/live-routing.d.ts +42 -20
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +153 -41
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/command-recorder.js +10 -1
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +90 -13
- package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
- package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
- package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +17 -1
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +83 -2
- package/dist/core/events/v3/producers/intake.d.ts +13 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +36 -2
- package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
- package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
- package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
- package/dist/core/events/v3/producers/recorder.d.ts +117 -1
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +992 -27
- package/dist/core/events/v3/reader.d.ts +51 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -1
- package/dist/core/events/v3/reader.js +181 -1
- package/dist/core/events/v3/rotation-config.d.ts +9 -0
- package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
- package/dist/core/events/v3/rotation-config.js +91 -0
- package/dist/core/events/v3/runtime-build.d.ts +11 -0
- package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
- package/dist/core/events/v3/runtime-build.js +39 -0
- package/dist/core/events/v3/runtime-identity.d.ts +5 -0
- package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
- package/dist/core/events/v3/runtime-identity.js +18 -0
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +52 -0
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -0
- package/dist/core/events/v3/runtime-telemetry-capabilities.js +54 -0
- package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
- package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/classify.js +149 -0
- package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
- package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/eligibility.js +35 -0
- package/dist/core/events/v3/support-storage/index.d.ts +10 -0
- package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/index.js +9 -0
- package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
- package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/inventory.js +94 -0
- package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
- package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
- package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
- package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/maintenance.js +352 -0
- package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
- package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
- package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
- package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
- package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
- package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
- package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
- package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/recovery.js +22 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +21 -6
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
- package/dist/core/events/v3/turn-telemetry.js +32 -2
- package/dist/core/events/v3/writer.d.ts +13 -1
- package/dist/core/events/v3/writer.d.ts.map +1 -1
- package/dist/core/events/v3/writer.js +126 -12
- package/dist/core/governor/plan-read.d.ts.map +1 -1
- package/dist/core/governor/plan-read.js +5 -21
- package/dist/core/governor/planning.js +6 -8
- package/dist/core/governor/service-read.d.ts +12 -0
- package/dist/core/governor/service-read.d.ts.map +1 -1
- package/dist/core/governor/service-read.js +266 -2
- package/dist/core/governor/service.d.ts +1 -0
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +53 -18
- package/dist/core/guard/evidence-v3.d.ts.map +1 -1
- package/dist/core/guard/evidence-v3.js +2 -0
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +1 -0
- package/dist/core/hooks/adapter/output.d.ts +4 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +13 -5
- package/dist/core/hooks/adapter/parse.d.ts +3 -0
- package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
- package/dist/core/hooks/adapter/parse.js +14 -0
- package/dist/core/hooks/adapter/runtime-telemetry.d.ts +142 -0
- package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -0
- package/dist/core/hooks/adapter/runtime-telemetry.js +869 -0
- package/dist/core/hooks/cli.js +318 -61
- package/dist/core/hooks/effects/image-capture.d.ts +1 -1
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +4 -2
- package/dist/core/hooks/remediation-cap.d.ts +39 -0
- package/dist/core/hooks/remediation-cap.d.ts.map +1 -0
- package/dist/core/hooks/remediation-cap.js +63 -0
- package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
- package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
- package/dist/core/hooks/resolve/coord-root.js +92 -11
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +5 -0
- package/dist/core/hooks/resolve/transcript.d.ts +33 -9
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +33 -10
- package/dist/core/inbox/contract.d.ts +64 -0
- package/dist/core/inbox/contract.d.ts.map +1 -0
- package/dist/core/inbox/contract.js +13 -0
- package/dist/core/inbox/index.d.ts +5 -0
- package/dist/core/inbox/index.d.ts.map +1 -0
- package/dist/core/inbox/index.js +4 -0
- package/dist/core/inbox/lifecycle.d.ts +22 -0
- package/dist/core/inbox/lifecycle.d.ts.map +1 -0
- package/dist/core/inbox/lifecycle.js +41 -0
- package/dist/core/inbox/service.d.ts +36 -0
- package/dist/core/inbox/service.d.ts.map +1 -0
- package/dist/core/inbox/service.js +210 -0
- package/dist/core/inbox/watcher.d.ts +7 -0
- package/dist/core/inbox/watcher.d.ts.map +1 -0
- package/dist/core/inbox/watcher.js +26 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -1
- package/dist/core/presence/codec-digest.js +14 -3
- package/dist/core/presence/relay-client.d.ts +1 -0
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +52 -8
- package/dist/core/semantic/adapters.d.ts +37 -0
- package/dist/core/semantic/adapters.d.ts.map +1 -0
- package/dist/core/semantic/adapters.js +360 -0
- package/dist/core/semantic/contract.d.ts +1072 -0
- package/dist/core/semantic/contract.d.ts.map +1 -0
- package/dist/core/semantic/contract.js +331 -0
- package/dist/core/semantic/evidence.d.ts +11 -0
- package/dist/core/semantic/evidence.d.ts.map +1 -0
- package/dist/core/semantic/evidence.js +262 -0
- package/dist/core/semantic/index.d.ts +14 -0
- package/dist/core/semantic/index.d.ts.map +1 -0
- package/dist/core/semantic/index.js +13 -0
- package/dist/core/semantic/once.d.ts +38 -0
- package/dist/core/semantic/once.d.ts.map +1 -0
- package/dist/core/semantic/once.js +364 -0
- package/dist/core/semantic/prompt.d.ts +12 -0
- package/dist/core/semantic/prompt.d.ts.map +1 -0
- package/dist/core/semantic/prompt.js +83 -0
- package/dist/core/semantic/review.d.ts +144 -0
- package/dist/core/semantic/review.d.ts.map +1 -0
- package/dist/core/semantic/review.js +544 -0
- package/dist/core/semantic/routes.d.ts +10 -0
- package/dist/core/semantic/routes.d.ts.map +1 -0
- package/dist/core/semantic/routes.js +21 -0
- package/dist/core/semantic/scheduler.d.ts +27 -0
- package/dist/core/semantic/scheduler.d.ts.map +1 -0
- package/dist/core/semantic/scheduler.js +91 -0
- package/dist/core/semantic/service-status.d.ts +51 -0
- package/dist/core/semantic/service-status.d.ts.map +1 -0
- package/dist/core/semantic/service-status.js +140 -0
- package/dist/core/semantic/service.d.ts +52 -0
- package/dist/core/semantic/service.d.ts.map +1 -0
- package/dist/core/semantic/service.js +559 -0
- package/dist/core/semantic/soak.d.ts +75 -0
- package/dist/core/semantic/soak.d.ts.map +1 -0
- package/dist/core/semantic/soak.js +476 -0
- package/dist/core/semantic/storage.d.ts +81 -0
- package/dist/core/semantic/storage.d.ts.map +1 -0
- package/dist/core/semantic/storage.js +180 -0
- package/dist/core/semantic/usage.d.ts +43 -0
- package/dist/core/semantic/usage.d.ts.map +1 -0
- package/dist/core/semantic/usage.js +193 -0
- package/dist/core/semantic/validate.d.ts +18 -0
- package/dist/core/semantic/validate.d.ts.map +1 -0
- package/dist/core/semantic/validate.js +207 -0
- package/dist/core/storage/buffer.d.ts +28 -0
- package/dist/core/storage/buffer.d.ts.map +1 -0
- package/dist/core/storage/buffer.js +101 -0
- package/dist/core/storage/builtins.d.ts +3 -0
- package/dist/core/storage/builtins.d.ts.map +1 -0
- package/dist/core/storage/builtins.js +683 -0
- package/dist/core/storage/catalog.d.ts +19 -0
- package/dist/core/storage/catalog.d.ts.map +1 -0
- package/dist/core/storage/catalog.js +365 -0
- package/dist/core/storage/config.d.ts +16 -0
- package/dist/core/storage/config.d.ts.map +1 -0
- package/dist/core/storage/config.js +311 -0
- package/dist/core/storage/contract.d.ts +275 -0
- package/dist/core/storage/contract.d.ts.map +1 -0
- package/dist/core/storage/contract.js +3 -0
- package/dist/core/storage/durable-history.d.ts +36 -0
- package/dist/core/storage/durable-history.d.ts.map +1 -0
- package/dist/core/storage/durable-history.js +606 -0
- package/dist/core/storage/health.d.ts +4 -0
- package/dist/core/storage/health.d.ts.map +1 -0
- package/dist/core/storage/health.js +65 -0
- package/dist/core/storage/index.d.ts +16 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +15 -0
- package/dist/core/storage/inventory.d.ts +25 -0
- package/dist/core/storage/inventory.d.ts.map +1 -0
- package/dist/core/storage/inventory.js +666 -0
- package/dist/core/storage/jsonl.d.ts +52 -0
- package/dist/core/storage/jsonl.d.ts.map +1 -0
- package/dist/core/storage/jsonl.js +156 -0
- package/dist/core/storage/log-retention.d.ts +52 -0
- package/dist/core/storage/log-retention.d.ts.map +1 -0
- package/dist/core/storage/log-retention.js +419 -0
- package/dist/core/storage/logger.d.ts +82 -0
- package/dist/core/storage/logger.d.ts.map +1 -0
- package/dist/core/storage/logger.js +411 -0
- package/dist/core/storage/maintenance-providers.d.ts +26 -0
- package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
- package/dist/core/storage/maintenance-providers.js +141 -0
- package/dist/core/storage/maintenance.d.ts +125 -0
- package/dist/core/storage/maintenance.d.ts.map +1 -0
- package/dist/core/storage/maintenance.js +609 -0
- package/dist/core/storage/metrics.d.ts +60 -0
- package/dist/core/storage/metrics.d.ts.map +1 -0
- package/dist/core/storage/metrics.js +134 -0
- package/dist/core/storage/policy.d.ts +7 -0
- package/dist/core/storage/policy.d.ts.map +1 -0
- package/dist/core/storage/policy.js +110 -0
- package/dist/core/storage/process-log.d.ts +38 -0
- package/dist/core/storage/process-log.d.ts.map +1 -0
- package/dist/core/storage/process-log.js +165 -0
- package/dist/core/storage/query.d.ts +34 -0
- package/dist/core/storage/query.d.ts.map +1 -0
- package/dist/core/storage/query.js +295 -0
- package/dist/core/storage/receipts.d.ts +23 -0
- package/dist/core/storage/receipts.d.ts.map +1 -0
- package/dist/core/storage/receipts.js +117 -0
- package/dist/core/storage/segments.d.ts +84 -0
- package/dist/core/storage/segments.d.ts.map +1 -0
- package/dist/core/storage/segments.js +542 -0
- package/dist/core/storage/sink-graph.d.ts +65 -0
- package/dist/core/storage/sink-graph.d.ts.map +1 -0
- package/dist/core/storage/sink-graph.js +213 -0
- package/dist/core/storage/storm-control.d.ts +23 -0
- package/dist/core/storage/storm-control.d.ts.map +1 -0
- package/dist/core/storage/storm-control.js +59 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +10 -14
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +2 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lazy-commands.d.ts +26 -0
- package/dist/lazy-commands.d.ts.map +1 -0
- package/dist/lazy-commands.js +210 -0
- package/dist/lib/browser/client.d.ts +11 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +13 -0
- package/dist/lib/browser/index.d.ts +1 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/standalone-html.d.ts +25 -0
- package/dist/lib/browser/standalone-html.d.ts.map +1 -0
- package/dist/lib/browser/standalone-html.js +284 -0
- package/dist/lib/docs-lint.d.ts +2 -0
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +45 -80
- package/dist/lib/docs-metadata-audit.d.ts +3 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
- package/dist/lib/docs-metadata-audit.js +13 -23
- package/dist/lib/docs-metadata-sync.d.ts +1 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
- package/dist/lib/docs-metadata-sync.js +28 -10
- package/dist/lib/docs-repository-view.d.ts +22 -0
- package/dist/lib/docs-repository-view.d.ts.map +1 -0
- package/dist/lib/docs-repository-view.js +185 -0
- package/dist/lib/http/client.d.ts +11 -5
- package/dist/lib/http/client.d.ts.map +1 -1
- package/dist/lib/http/client.js +22 -4
- package/dist/lib/http/index.d.ts +1 -1
- package/dist/lib/http/index.d.ts.map +1 -1
- package/dist/lib/http/index.js +1 -1
- package/dist/lib/indexer-exclusions.d.ts +27 -0
- package/dist/lib/indexer-exclusions.d.ts.map +1 -0
- package/dist/lib/indexer-exclusions.js +176 -0
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +1 -0
- package/dist/lib/instructions/templates.d.ts +2 -0
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +149 -4
- package/dist/lib/local-file-url.d.ts +9 -0
- package/dist/lib/local-file-url.d.ts.map +1 -0
- package/dist/lib/local-file-url.js +20 -0
- package/dist/lib/web-performance.d.ts +118 -0
- package/dist/lib/web-performance.d.ts.map +1 -0
- package/dist/lib/web-performance.js +192 -0
- package/package.json +34 -2
- package/schemas/config.schema.json +58 -0
- package/schemas/event-v3.schema.json +3073 -581
- package/src/commander.ts +462 -93
- package/src/commands/agents.ts +617 -355
- package/src/commands/backup.ts +18 -14
- package/src/commands/browse-session.ts +12 -0
- package/src/commands/browse.ts +31 -9
- package/src/commands/conversations.ts +279 -0
- package/src/commands/decision.ts +8 -2
- package/src/commands/deinit.ts +6 -0
- package/src/commands/docs.ts +25 -6
- package/src/commands/doctor.ts +75 -9
- package/src/commands/events.ts +21 -1
- package/src/commands/fetch.ts +7 -6
- package/src/commands/files.ts +143 -0
- package/src/commands/governor.ts +13 -12
- package/src/commands/inbox.ts +61 -0
- package/src/commands/init.ts +78 -16
- package/src/commands/ledger-v3.ts +421 -1
- package/src/commands/logs.ts +224 -0
- package/src/commands/messages.ts +61 -0
- package/src/commands/outline.ts +6 -2
- package/src/commands/presence.ts +7 -2
- package/src/commands/read.ts +6 -2
- package/src/commands/semantic.ts +244 -0
- package/src/commands/storage.ts +310 -0
- package/src/commands/tunnel.ts +66 -52
- package/src/commands/web.ts +92 -7
- package/src/commands/work.ts +3 -3
- package/src/commands/workflow.ts +13 -13
- package/src/core/agents/canonical-emit.ts +15 -0
- package/src/core/agents/claim-path.ts +23 -0
- package/src/core/agents/cli.ts +259 -53
- package/src/core/agents/coord-client.ts +92 -8
- package/src/core/agents/live-authority-v3.ts +342 -14
- package/src/core/agents/live-lifecycle-v3.ts +14 -4
- package/src/core/agents/live-observation-v3.ts +13 -3
- package/src/core/agents/render/prompt-context.ts +40 -16
- package/src/core/agents/rules/stop-hook.ts +129 -25
- package/src/core/agents/rules/verdict.ts +1 -0
- package/src/core/agents/session-events.ts +4 -0
- package/src/core/agents/session-finalization-state-v3.ts +1 -1
- package/src/core/agents/session-finalizer-v3.ts +4 -1
- package/src/core/agents/session-name-display.ts +9 -1
- package/src/core/agents/state/activity-log.ts +7 -2
- package/src/core/agents/state/heartbeat-reader.ts +69 -0
- package/src/core/agents/state/heartbeat-writer.ts +47 -84
- package/src/core/agents/state/live-coordination-view.ts +17 -81
- package/src/core/agents/state/live-coordination-writer.ts +141 -0
- package/src/core/agents/state/names.ts +190 -182
- package/src/core/agents/state/stale-sweep.ts +25 -5
- package/src/core/artifacts/constants.ts +4 -0
- package/src/core/artifacts/index.ts +113 -8
- package/src/core/config.ts +126 -5
- package/src/core/conversations/archive.ts +237 -0
- package/src/core/conversations/catalog.ts +79 -0
- package/src/core/conversations/context-pack.ts +72 -0
- package/src/core/conversations/contract.ts +178 -0
- package/src/core/conversations/evaluation.ts +30 -0
- package/src/core/conversations/index.ts +9 -0
- package/src/core/conversations/lifecycle.ts +63 -0
- package/src/core/conversations/normalize.ts +105 -0
- package/src/core/conversations/query.ts +318 -0
- package/src/core/conversations/search-index.ts +48 -0
- package/src/core/events/legacy-storage/canary.ts +177 -0
- package/src/core/events/legacy-storage/fence.ts +129 -0
- package/src/core/events/legacy-storage/index.ts +5 -0
- package/src/core/events/legacy-storage/inventory.ts +51 -0
- package/src/core/events/legacy-storage/manifest.ts +136 -0
- package/src/core/events/legacy-storage/reader.ts +178 -0
- package/src/core/events/v3/authority-outbox.ts +22 -1
- package/src/core/events/v3/base-contract.ts +56 -7
- package/src/core/events/v3/bootstrap.ts +195 -2
- package/src/core/events/v3/capabilities.ts +37 -3
- package/src/core/events/v3/control-witness.ts +339 -0
- package/src/core/events/v3/control-writer.ts +16 -0
- package/src/core/events/v3/control.ts +54 -18
- package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
- package/src/core/events/v3/coordination-view.ts +17 -1
- package/src/core/events/v3/generated.ts +1 -1
- package/src/core/events/v3/index.ts +26 -2
- package/src/core/events/v3/latency.ts +213 -2
- package/src/core/events/v3/live-route-observer.ts +80 -0
- package/src/core/events/v3/live-routing.ts +182 -45
- package/src/core/events/v3/producers/command-recorder.ts +10 -1
- package/src/core/events/v3/producers/coordination-recorder.ts +112 -15
- package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
- package/src/core/events/v3/producers/hook-base.ts +116 -2
- package/src/core/events/v3/producers/intake.ts +48 -2
- package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
- package/src/core/events/v3/producers/recorder.ts +1403 -30
- package/src/core/events/v3/reader.ts +243 -2
- package/src/core/events/v3/rotation-config.ts +98 -0
- package/src/core/events/v3/runtime-build.ts +41 -0
- package/src/core/events/v3/runtime-identity.ts +16 -0
- package/src/core/events/v3/runtime-telemetry-capabilities.ts +143 -0
- package/src/core/events/v3/support-storage/classify.ts +209 -0
- package/src/core/events/v3/support-storage/eligibility.ts +58 -0
- package/src/core/events/v3/support-storage/index.ts +9 -0
- package/src/core/events/v3/support-storage/inventory.ts +135 -0
- package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
- package/src/core/events/v3/support-storage/maintenance.ts +501 -0
- package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
- package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
- package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
- package/src/core/events/v3/support-storage/recovery.ts +43 -0
- package/src/core/events/v3/turn-telemetry.ts +66 -5
- package/src/core/events/v3/writer.ts +168 -16
- package/src/core/governor/plan-read.ts +5 -18
- package/src/core/governor/planning.ts +5 -8
- package/src/core/governor/service-read.ts +320 -2
- package/src/core/governor/service.ts +49 -22
- package/src/core/guard/evidence-v3.ts +1 -0
- package/src/core/hooks/adapter/events.ts +1 -0
- package/src/core/hooks/adapter/output.ts +12 -5
- package/src/core/hooks/adapter/parse.ts +16 -0
- package/src/core/hooks/adapter/runtime-telemetry.ts +1200 -0
- package/src/core/hooks/cli.ts +342 -64
- package/src/core/hooks/effects/image-capture.ts +4 -1
- package/src/core/hooks/remediation-cap.ts +83 -0
- package/src/core/hooks/resolve/coord-root.ts +91 -11
- package/src/core/hooks/resolve/owner.ts +4 -0
- package/src/core/hooks/resolve/transcript.ts +55 -11
- package/src/core/inbox/contract.ts +81 -0
- package/src/core/inbox/index.ts +4 -0
- package/src/core/inbox/lifecycle.ts +104 -0
- package/src/core/inbox/service.ts +305 -0
- package/src/core/inbox/watcher.ts +36 -0
- package/src/core/presence/codec-digest.ts +15 -9
- package/src/core/presence/relay-client.ts +55 -7
- package/src/core/semantic/adapters.ts +452 -0
- package/src/core/semantic/contract.ts +430 -0
- package/src/core/semantic/evidence.ts +336 -0
- package/src/core/semantic/index.ts +201 -0
- package/src/core/semantic/once.ts +496 -0
- package/src/core/semantic/prompt.ts +96 -0
- package/src/core/semantic/review.ts +803 -0
- package/src/core/semantic/routes.ts +30 -0
- package/src/core/semantic/scheduler.ts +151 -0
- package/src/core/semantic/service-status.ts +212 -0
- package/src/core/semantic/service.ts +681 -0
- package/src/core/semantic/soak.ts +638 -0
- package/src/core/semantic/storage.ts +300 -0
- package/src/core/semantic/usage.ts +272 -0
- package/src/core/semantic/validate.ts +243 -0
- package/src/core/storage/buffer.ts +124 -0
- package/src/core/storage/builtins.ts +916 -0
- package/src/core/storage/catalog.ts +467 -0
- package/src/core/storage/config.ts +423 -0
- package/src/core/storage/contract.ts +342 -0
- package/src/core/storage/durable-history.ts +738 -0
- package/src/core/storage/health.ts +76 -0
- package/src/core/storage/index.ts +15 -0
- package/src/core/storage/inventory.ts +859 -0
- package/src/core/storage/jsonl.ts +213 -0
- package/src/core/storage/log-retention.ts +555 -0
- package/src/core/storage/logger.ts +546 -0
- package/src/core/storage/maintenance-providers.ts +200 -0
- package/src/core/storage/maintenance.ts +929 -0
- package/src/core/storage/metrics.ts +199 -0
- package/src/core/storage/policy.ts +141 -0
- package/src/core/storage/process-log.ts +203 -0
- package/src/core/storage/query.ts +360 -0
- package/src/core/storage/receipts.ts +162 -0
- package/src/core/storage/segments.ts +721 -0
- package/src/core/storage/sink-graph.ts +343 -0
- package/src/core/storage/storm-control.ts +91 -0
- package/src/core/work/state.ts +12 -21
- package/src/core/workflow/live-session-v3.ts +2 -4
- package/src/index.ts +2 -0
- package/src/lazy-commands.ts +294 -0
- package/src/lib/browser/client.ts +21 -0
- package/src/lib/browser/index.ts +4 -0
- package/src/lib/browser/standalone-html.ts +312 -0
- package/src/lib/docs-lint.ts +58 -77
- package/src/lib/docs-metadata-audit.ts +26 -21
- package/src/lib/docs-metadata-sync.ts +32 -9
- package/src/lib/docs-repository-view.ts +220 -0
- package/src/lib/http/client.ts +44 -8
- package/src/lib/http/index.ts +6 -1
- package/src/lib/indexer-exclusions.ts +173 -0
- package/src/lib/instructions/apply.ts +1 -0
- package/src/lib/instructions/templates.ts +154 -4
- package/src/lib/local-file-url.ts +31 -0
- package/src/lib/web-performance.ts +335 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
2
|
+
import { ADAPTER_WAIT_KINDS_V3 } from "./capabilities.js";
|
|
3
|
+
export const EVENT_V3_LATENCY_PROJECTION_VERSION = "event-v3-latency-v3";
|
|
2
4
|
export function projectLatencyV3(read) {
|
|
3
5
|
if (!read.complete)
|
|
4
6
|
throw new Error("latency projection requires a complete V3 ledger read");
|
|
5
7
|
const events = read.events.map(({ event }) => event);
|
|
6
8
|
const diagnostics = [];
|
|
7
9
|
const terminalByTurn = new Map();
|
|
10
|
+
const telemetryByGeneration = latestTelemetryByGeneration(events);
|
|
8
11
|
for (const event of events) {
|
|
9
12
|
if (event.event_type !== "turn.completed")
|
|
10
13
|
continue;
|
|
@@ -18,13 +21,13 @@ export function projectLatencyV3(read) {
|
|
|
18
21
|
const turns = [...terminalByTurn.values()].map((terminal) => {
|
|
19
22
|
const key = turnKey(terminal);
|
|
20
23
|
const turnEvents = events.filter((event) => turnKey(event) === key);
|
|
21
|
-
return projectTurn(terminal, turnEvents, diagnostics);
|
|
24
|
+
return projectTurn(terminal, turnEvents, diagnostics, telemetryByGeneration.get(terminal.scope.generation_id ?? "") ?? null);
|
|
22
25
|
});
|
|
23
26
|
turns.sort((left, right) => left.generation_id.localeCompare(right.generation_id) ||
|
|
24
27
|
left.turn_id.localeCompare(right.turn_id));
|
|
25
28
|
return { projection_version: EVENT_V3_LATENCY_PROJECTION_VERSION, turns, diagnostics };
|
|
26
29
|
}
|
|
27
|
-
function projectTurn(terminal, events, diagnostics) {
|
|
30
|
+
function projectTurn(terminal, events, diagnostics, telemetryCapabilities) {
|
|
28
31
|
const span = record(terminal.payload.span);
|
|
29
32
|
const wall = metricFromObservation(span.duration_ms, "turn_duration_unknown");
|
|
30
33
|
const wallInterval = intervalFromSpan(terminal);
|
|
@@ -60,6 +63,9 @@ function projectTurn(terminal, events, diagnostics) {
|
|
|
60
63
|
(expectedWaitCount !== undefined && expectedWaitCount !== endedWaitIds.size)) {
|
|
61
64
|
waits.reasons.push("wait_terminal_count_mismatch");
|
|
62
65
|
}
|
|
66
|
+
const waitCoverageComplete = expectedWaitCount !== undefined &&
|
|
67
|
+
expectedWaitCount === endedWaitIds.size &&
|
|
68
|
+
!waitStartEvents.some(({ payload }) => !endedWaitIds.has(string(record(payload).wait_id)));
|
|
63
69
|
const tool = metricFromIntervals(tools);
|
|
64
70
|
const command = metricFromIntervals(commands);
|
|
65
71
|
const wait = metricFromIntervals(waits);
|
|
@@ -74,6 +80,7 @@ function projectTurn(terminal, events, diagnostics) {
|
|
|
74
80
|
reasons: [...tools.reasons, ...commands.reasons, ...waits.reasons],
|
|
75
81
|
});
|
|
76
82
|
const inference = metricFromNestedObservation(terminal.payload.inference, "api_time_ms", "inference_timing_unknown");
|
|
83
|
+
const responseLatency = projectResponseLatency(terminal, events, wall, tools, expectedToolCount);
|
|
77
84
|
const harness = metricFromNestedObservation(terminal.payload.harness, "hook_time_ms", "harness_timing_unknown");
|
|
78
85
|
const slowestHook = slowestHookFromObservation(terminal.payload.harness);
|
|
79
86
|
const residual = residualMetric(wall, occupied, inference, harness);
|
|
@@ -107,6 +114,7 @@ function projectTurn(terminal, events, diagnostics) {
|
|
|
107
114
|
wait_ms: wait,
|
|
108
115
|
occupied_ms: occupied,
|
|
109
116
|
inference_ms: inference,
|
|
117
|
+
response_latency: responseLatency,
|
|
110
118
|
harness_ms: harness,
|
|
111
119
|
slowest_hook: slowestHook.name,
|
|
112
120
|
slowest_hook_ms: slowestHook.duration_ms,
|
|
@@ -114,6 +122,11 @@ function projectTurn(terminal, events, diagnostics) {
|
|
|
114
122
|
over_attributed_ms: overAttributed,
|
|
115
123
|
context_percent: context.percent,
|
|
116
124
|
context_coverage: context.coverage,
|
|
125
|
+
telemetry_capabilities: telemetryCapabilities,
|
|
126
|
+
telemetry_evidence_key: telemetryCapabilities
|
|
127
|
+
? runtimeTelemetryEvidenceKeyV3(telemetryCapabilities)
|
|
128
|
+
: null,
|
|
129
|
+
wait_coverage_by_kind: projectWaitCoverageByKind(waitStartEvents, waitEvents, wallInterval, waitCoverageComplete, waitCount, diagnostics),
|
|
117
130
|
span_counts: {
|
|
118
131
|
tool: toolEvents.length,
|
|
119
132
|
command: commandEvents.length,
|
|
@@ -122,6 +135,117 @@ function projectTurn(terminal, events, diagnostics) {
|
|
|
122
135
|
tool_breakdown: toolBreakdown,
|
|
123
136
|
};
|
|
124
137
|
}
|
|
138
|
+
/** Reports may compare a telemetry-backed channel only inside one evidence key. */
|
|
139
|
+
export function runtimeTelemetryEvidenceKeyV3(telemetry) {
|
|
140
|
+
return sha256V3(canonicalJsonV3(telemetry));
|
|
141
|
+
}
|
|
142
|
+
function latestTelemetryByGeneration(events) {
|
|
143
|
+
const result = new Map();
|
|
144
|
+
for (const event of events) {
|
|
145
|
+
if (event.event_type !== "session.started" &&
|
|
146
|
+
event.event_type !== "session.attestation_changed") {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const attestation = record(event.payload.runtime_attestation);
|
|
150
|
+
const telemetry = record(attestation.telemetry);
|
|
151
|
+
if (Object.keys(telemetry).length === 0)
|
|
152
|
+
continue;
|
|
153
|
+
result.set(event.scope.generation_id ?? "", telemetry);
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
function projectResponseLatency(terminal, events, wall, tools, expectedToolCount) {
|
|
158
|
+
const turnStart = Date.parse(string(record(terminal.payload.span).opened_at));
|
|
159
|
+
const turnEnd = Number.isFinite(turnStart) && wall.state === "observed" ? turnStart + wall.value_ms : undefined;
|
|
160
|
+
const requests = events
|
|
161
|
+
.filter(({ event_type }) => event_type === "tool.requested")
|
|
162
|
+
.map(({ time }) => Date.parse(string(time.observed_at)))
|
|
163
|
+
.filter(Number.isFinite)
|
|
164
|
+
.sort((left, right) => left - right);
|
|
165
|
+
const firstRequest = requests[0];
|
|
166
|
+
const firstTool = Number.isFinite(turnStart) && firstRequest !== undefined
|
|
167
|
+
? observedLatency(firstRequest - turnStart)
|
|
168
|
+
: unknownLatency(expectedToolCount === 0 ? "no_tool_request" : "tool_request_unobserved");
|
|
169
|
+
const noToolTerminal = expectedToolCount === 0
|
|
170
|
+
? wall
|
|
171
|
+
: unknownLatency(expectedToolCount === undefined ? "tool_channel_unattested" : "turn_contains_tools");
|
|
172
|
+
const agentAction = firstRequest !== undefined
|
|
173
|
+
? firstTool
|
|
174
|
+
: expectedToolCount === 0
|
|
175
|
+
? noToolTerminal
|
|
176
|
+
: unknownLatency(expectedToolCount === undefined ? "tool_channel_unattested" : "tool_request_unobserved");
|
|
177
|
+
let postTool = unknownLatency(expectedToolCount === 0
|
|
178
|
+
? "no_tool_completion"
|
|
179
|
+
: expectedToolCount === undefined
|
|
180
|
+
? "tool_channel_unattested"
|
|
181
|
+
: "final_tool_completion_unknown");
|
|
182
|
+
if (turnEnd !== undefined &&
|
|
183
|
+
expectedToolCount !== undefined &&
|
|
184
|
+
expectedToolCount > 0 &&
|
|
185
|
+
tools.reasons.length === 0 &&
|
|
186
|
+
tools.intervals.length === expectedToolCount) {
|
|
187
|
+
postTool = observedLatency(turnEnd - Math.max(...tools.intervals.map(({ end }) => end)));
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
agent_action_ms: agentAction,
|
|
191
|
+
first_tool_request_ms: firstTool,
|
|
192
|
+
post_tool_response_ms: postTool,
|
|
193
|
+
no_tool_terminal_response_ms: noToolTerminal,
|
|
194
|
+
method: "canonical_event_timestamps_v1",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function projectWaitCoverageByKind(starts, ends, wall, complete, waitCount, diagnostics) {
|
|
198
|
+
const endedIds = new Set(ends.map(({ payload }) => string(record(payload).wait_id)));
|
|
199
|
+
const unsupported = waitCount.state === "unsupported";
|
|
200
|
+
return Object.fromEntries(ADAPTER_WAIT_KINDS_V3.map((kind) => {
|
|
201
|
+
const kindStarts = starts.filter(({ payload }) => waitKind(payload) === kind);
|
|
202
|
+
const kindEnds = ends.filter(({ payload }) => waitKind(payload) === kind);
|
|
203
|
+
const openCount = kindStarts.filter(({ payload }) => !endedIds.has(string(record(payload).wait_id))).length;
|
|
204
|
+
const set = intervalSet(kindEnds, wall, diagnostics);
|
|
205
|
+
if (!complete)
|
|
206
|
+
set.reasons.push("wait_kind_completeness_unattested");
|
|
207
|
+
const completeness = complete
|
|
208
|
+
? "complete"
|
|
209
|
+
: unsupported
|
|
210
|
+
? kindStarts.length > 0 || kindEnds.length > 0
|
|
211
|
+
? "lower_bound"
|
|
212
|
+
: "unsupported"
|
|
213
|
+
: kindStarts.length > 0 || kindEnds.length > 0
|
|
214
|
+
? "lower_bound"
|
|
215
|
+
: "unknown";
|
|
216
|
+
const reason = complete
|
|
217
|
+
? null
|
|
218
|
+
: unsupported
|
|
219
|
+
? "turn_wait_count_unsupported"
|
|
220
|
+
: "turn_wait_count_unattested";
|
|
221
|
+
return [
|
|
222
|
+
kind,
|
|
223
|
+
{
|
|
224
|
+
kind,
|
|
225
|
+
started_count: kindStarts.length,
|
|
226
|
+
ended_count: kindEnds.length,
|
|
227
|
+
open_count: openCount,
|
|
228
|
+
duration_ms: metricFromIntervals(set),
|
|
229
|
+
completeness,
|
|
230
|
+
reason,
|
|
231
|
+
},
|
|
232
|
+
];
|
|
233
|
+
}));
|
|
234
|
+
}
|
|
235
|
+
function waitKind(payload) {
|
|
236
|
+
const value = string(record(payload).kind);
|
|
237
|
+
return ADAPTER_WAIT_KINDS_V3.includes(value)
|
|
238
|
+
? value
|
|
239
|
+
: "unknown";
|
|
240
|
+
}
|
|
241
|
+
function observedLatency(value) {
|
|
242
|
+
return Number.isFinite(value) && value >= 0
|
|
243
|
+
? { state: "observed", value_ms: Math.floor(value) }
|
|
244
|
+
: unknownLatency("event_time_order_invalid");
|
|
245
|
+
}
|
|
246
|
+
function unknownLatency(reason) {
|
|
247
|
+
return { state: "unknown", known_ms: 0, reasons: [reason] };
|
|
248
|
+
}
|
|
125
249
|
function groupByTool(events) {
|
|
126
250
|
const groups = new Map();
|
|
127
251
|
for (const event of events) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type EventV3ControlState, type EventV3WriteMode } from "./control.js";
|
|
2
|
+
export type LiveEventLedgerRouteV3 = {
|
|
3
|
+
state: "v3";
|
|
4
|
+
mode: EventV3WriteMode;
|
|
5
|
+
build_id: `build_${string}`;
|
|
6
|
+
/** Genesis id of the epoch this route was resolved against: the epoch fence for derived writes. */
|
|
7
|
+
genesis_id: `gex_${string}`;
|
|
8
|
+
} | {
|
|
9
|
+
state: "blocked";
|
|
10
|
+
reason: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Observe the V3-only ledger route without repairing control pairs, replacing
|
|
14
|
+
* epochs, launching processes, or writing files. Read-only consumers fail
|
|
15
|
+
* closed until a command or producer repairs the route.
|
|
16
|
+
*/
|
|
17
|
+
export declare function observeLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
|
|
18
|
+
/** Project one already-read control state into the passive route contract. */
|
|
19
|
+
export declare function liveEventLedgerRouteFromControlV3(control: EventV3ControlState): LiveEventLedgerRouteV3;
|
|
20
|
+
export declare function runtimeCapabilityProfileCurrentV3(control: Extract<EventV3ControlState, {
|
|
21
|
+
state: "candidate" | "active";
|
|
22
|
+
}>): boolean;
|
|
23
|
+
export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
|
|
24
|
+
/**
|
|
25
|
+
* The adapter-native id a canonical `inst_*` id carries, for display and for
|
|
26
|
+
* joins against native-keyed records. Only the direct prefix form round-trips:
|
|
27
|
+
* a hashed id has no recoverable native form and is returned unchanged, so
|
|
28
|
+
* never treat this as a guaranteed inverse of `liveInstanceIdV3`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function nativeInstanceIdV3(instanceId: string): string;
|
|
31
|
+
//# sourceMappingURL=live-route-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-route-observer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-route-observer.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAEtB,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,sBAAsB,GAC9B;IACE,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,mGAAmG;IACnG,UAAU,EAAE,OAAO,MAAM,EAAE,CAAC;CAC7B,GACD;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAEvF;AAED,8EAA8E;AAC9E,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,mBAAmB,GAC3B,sBAAsB,CAkBxB;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAE,CAAC,GACvE,OAAO,CAST;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,MAAM,EAAE,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
3
|
+
import { ADAPTER_CAPABILITY_PROFILES_V3 } from "./capabilities.js";
|
|
4
|
+
import { readEventV3ControlState, } from "./control.js";
|
|
5
|
+
import { liveEventV3BuildId } from "./runtime-identity.js";
|
|
6
|
+
/**
|
|
7
|
+
* Observe the V3-only ledger route without repairing control pairs, replacing
|
|
8
|
+
* epochs, launching processes, or writing files. Read-only consumers fail
|
|
9
|
+
* closed until a command or producer repairs the route.
|
|
10
|
+
*/
|
|
11
|
+
export function observeLiveEventLedgerRouteV3(coordRoot) {
|
|
12
|
+
return liveEventLedgerRouteFromControlV3(readEventV3ControlState(coordRoot));
|
|
13
|
+
}
|
|
14
|
+
/** Project one already-read control state into the passive route contract. */
|
|
15
|
+
export function liveEventLedgerRouteFromControlV3(control) {
|
|
16
|
+
if (control.state === "closed")
|
|
17
|
+
return { state: "blocked", reason: "v3_not_initialized" };
|
|
18
|
+
if (control.state !== "candidate" && control.state !== "active") {
|
|
19
|
+
return { state: "blocked", reason: `${control.state}:${control.reason}` };
|
|
20
|
+
}
|
|
21
|
+
if (!runtimeCapabilityProfileCurrentV3(control)) {
|
|
22
|
+
return { state: "blocked", reason: "runtime_capability_profile_incompatible" };
|
|
23
|
+
}
|
|
24
|
+
const buildId = liveEventV3BuildId(control.genesis.profile.harnery_commit);
|
|
25
|
+
if (!control.genesis.profile.producer_build_ids.includes(buildId)) {
|
|
26
|
+
return { state: "blocked", reason: "live_producer_build_not_approved" };
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
state: "v3",
|
|
30
|
+
mode: control.state,
|
|
31
|
+
build_id: buildId,
|
|
32
|
+
genesis_id: control.genesis.event.payload.genesis_id,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function runtimeCapabilityProfileCurrentV3(control) {
|
|
36
|
+
const expected = Object.values(ADAPTER_CAPABILITY_PROFILES_V3).map((profile) => sha256V3(canonicalJsonV3(profile)));
|
|
37
|
+
const approved = control.genesis.profile.adapter_capability_profile_digests;
|
|
38
|
+
const expectedDigests = new Set(expected);
|
|
39
|
+
return control.state === "candidate"
|
|
40
|
+
? approved.some((digest) => expectedDigests.has(digest))
|
|
41
|
+
: expected.every((digest) => approved.includes(digest));
|
|
42
|
+
}
|
|
43
|
+
export function liveInstanceIdV3(instanceId) {
|
|
44
|
+
if (/^inst_[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
|
|
45
|
+
return instanceId;
|
|
46
|
+
if (/^[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
|
|
47
|
+
return `inst_${instanceId}`;
|
|
48
|
+
return `inst_${createHash("sha256").update(instanceId.normalize("NFC")).digest("hex")}`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The adapter-native id a canonical `inst_*` id carries, for display and for
|
|
52
|
+
* joins against native-keyed records. Only the direct prefix form round-trips:
|
|
53
|
+
* a hashed id has no recoverable native form and is returned unchanged, so
|
|
54
|
+
* never treat this as a guaranteed inverse of `liveInstanceIdV3`.
|
|
55
|
+
*/
|
|
56
|
+
export function nativeInstanceIdV3(instanceId) {
|
|
57
|
+
return instanceId.startsWith("inst_") ? instanceId.slice("inst_".length) : instanceId;
|
|
58
|
+
}
|
|
@@ -1,36 +1,28 @@
|
|
|
1
1
|
import type { Adapter } from "../../adapter.js";
|
|
2
2
|
import type { ParsedPayload } from "../../hooks/adapter/parse.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { EventV3 } from "./contract.js";
|
|
4
|
+
import { type LiveEventLedgerRouteV3 } from "./live-route-observer.js";
|
|
4
5
|
import type { HookSignalV3 } from "./producers/hook.js";
|
|
5
6
|
import type { TurnRitualEvidenceV3 } from "./producers/hook-base.js";
|
|
6
|
-
import { type RecordHookSignalV3Result } from "./producers/recorder.js";
|
|
7
|
+
import { type ReconcilePendingRuntimeContextV3Result, type RecordHookSignalV3Result } from "./producers/recorder.js";
|
|
8
|
+
export { type LiveEventLedgerRouteV3, liveInstanceIdV3, nativeInstanceIdV3, } from "./live-route-observer.js";
|
|
9
|
+
export { liveEventV3BuildId, livePlatformV3 } from "./runtime-identity.js";
|
|
7
10
|
export declare const LIVE_HOOK_V3_PRODUCER_ID: "prd_agent-hook";
|
|
8
11
|
export declare const LIVE_COMMAND_V3_PRODUCER_ID: "prd_session-tee";
|
|
9
|
-
export type LiveEventLedgerRouteV3 = {
|
|
10
|
-
state: "v3";
|
|
11
|
-
mode: EventV3WriteMode;
|
|
12
|
-
build_id: `build_${string}`;
|
|
13
|
-
} | {
|
|
14
|
-
state: "blocked";
|
|
15
|
-
reason: string;
|
|
16
|
-
};
|
|
17
12
|
/**
|
|
18
13
|
* Resolve the V3-only ledger route. A root without an initialized V3 control
|
|
19
|
-
* packet is blocked; no producer
|
|
14
|
+
* packet is blocked; no mutating producer may fall back to an older ledger.
|
|
20
15
|
* Manifest-first crashes are repaired from the immutable packet and every
|
|
21
16
|
* other invalid state closes the writer gate.
|
|
22
17
|
*/
|
|
23
18
|
export declare function resolveLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
|
|
24
|
-
export declare function
|
|
25
|
-
export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
|
|
19
|
+
export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
|
|
26
20
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* never treat this as a guaranteed inverse of `liveInstanceIdV3`.
|
|
21
|
+
* Tool lifecycle hooks may stop after publishing their event to the durable
|
|
22
|
+
* ready WAL. The next non-tool hook drains the causal batch into the active
|
|
23
|
+
* ledger, avoiding one global append-lease cycle for every tool boundary.
|
|
31
24
|
*/
|
|
32
|
-
export declare function
|
|
33
|
-
export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
|
|
25
|
+
export declare function liveHookSignalDefersDrainV3(eventName: string, override?: string): boolean;
|
|
34
26
|
export declare function recordLiveHookSignalV3(input: {
|
|
35
27
|
coordRoot: string;
|
|
36
28
|
route: Extract<LiveEventLedgerRouteV3, {
|
|
@@ -53,5 +45,35 @@ export declare function recordLiveHookSignalV3(input: {
|
|
|
53
45
|
}): RecordHookSignalV3Result | {
|
|
54
46
|
state: "ignored";
|
|
55
47
|
};
|
|
56
|
-
export declare function
|
|
48
|
+
export declare function reconcileLivePendingRuntimeContextV3(input: {
|
|
49
|
+
coordRoot: string;
|
|
50
|
+
route: Extract<LiveEventLedgerRouteV3, {
|
|
51
|
+
state: "v3";
|
|
52
|
+
}>;
|
|
53
|
+
nativeSessionId: string;
|
|
54
|
+
finalAttempt?: boolean;
|
|
55
|
+
}): ReconcilePendingRuntimeContextV3Result;
|
|
56
|
+
/**
|
|
57
|
+
* Open the child generation named by a native SubagentStart event.
|
|
58
|
+
*
|
|
59
|
+
* The parent producer owns the delegation span and mints its child generation
|
|
60
|
+
* id. This second crash-safe session-start gives that exact generation its own
|
|
61
|
+
* producer authority, so later child tool hooks can resolve away from the
|
|
62
|
+
* parent session and the disposable heartbeat projection has a real source.
|
|
63
|
+
*/
|
|
64
|
+
export declare function recordLiveDelegatedChildSessionV3(input: {
|
|
65
|
+
coordRoot: string;
|
|
66
|
+
route: Extract<LiveEventLedgerRouteV3, {
|
|
67
|
+
state: "v3";
|
|
68
|
+
}>;
|
|
69
|
+
parentEvent: Extract<EventV3, {
|
|
70
|
+
event_type: "agent.started";
|
|
71
|
+
}>;
|
|
72
|
+
payload: ParsedPayload;
|
|
73
|
+
adapter: Adapter;
|
|
74
|
+
bridge?: "codex-wsl";
|
|
75
|
+
monotonic_ns?: string;
|
|
76
|
+
}): RecordHookSignalV3Result | {
|
|
77
|
+
state: "ignored";
|
|
78
|
+
};
|
|
57
79
|
//# sourceMappingURL=live-routing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-routing.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-routing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"live-routing.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EACL,KAAK,sBAAsB,EAI5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,KAAK,sCAAsC,EAC3C,KAAK,wBAAwB,EAG9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE3E,eAAO,MAAM,wBAAwB,EAAG,gBAAyB,CAAC;AAClE,eAAO,MAAM,2BAA2B,EAAG,iBAA0B,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CA8BvF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAuBxE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAOzF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,wBAAwB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAwClD;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,sCAAsC,CAUzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAC/D,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,wBAAwB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAsElD"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { readEventV3ControlState
|
|
3
|
-
import {
|
|
1
|
+
import { refreshIncompatibleEventLedgerV3, rotateOversizedEventLedgerV3 } from "./bootstrap.js";
|
|
2
|
+
import { readEventV3ControlState } from "./control.js";
|
|
3
|
+
import { repairEventV3ControlPair } from "./control-writer.js";
|
|
4
|
+
import { liveEventLedgerRouteFromControlV3, liveInstanceIdV3, runtimeCapabilityProfileCurrentV3, } from "./live-route-observer.js";
|
|
5
|
+
import { reconcilePendingRuntimeContextV3, recordHookSignalV3, } from "./producers/recorder.js";
|
|
6
|
+
import { livePlatformV3 } from "./runtime-identity.js";
|
|
7
|
+
export { liveInstanceIdV3, nativeInstanceIdV3, } from "./live-route-observer.js";
|
|
8
|
+
export { liveEventV3BuildId, livePlatformV3 } from "./runtime-identity.js";
|
|
4
9
|
export const LIVE_HOOK_V3_PRODUCER_ID = "prd_agent-hook";
|
|
5
10
|
export const LIVE_COMMAND_V3_PRODUCER_ID = "prd_session-tee";
|
|
6
11
|
/**
|
|
7
12
|
* Resolve the V3-only ledger route. A root without an initialized V3 control
|
|
8
|
-
* packet is blocked; no producer
|
|
13
|
+
* packet is blocked; no mutating producer may fall back to an older ledger.
|
|
9
14
|
* Manifest-first crashes are repaired from the immutable packet and every
|
|
10
15
|
* other invalid state closes the writer gate.
|
|
11
16
|
*/
|
|
@@ -15,36 +20,33 @@ export function resolveLiveEventLedgerRouteV3(coordRoot) {
|
|
|
15
20
|
return { state: "blocked", reason: "v3_not_initialized" };
|
|
16
21
|
if (control.state === "repairable")
|
|
17
22
|
control = repairEventV3ControlPair(coordRoot);
|
|
18
|
-
if (control.state
|
|
19
|
-
|
|
23
|
+
if ((control.state === "invalid" && control.reason === "genesis_schema_digest_incompatible") ||
|
|
24
|
+
((control.state === "candidate" || control.state === "active") &&
|
|
25
|
+
!runtimeCapabilityProfileCurrentV3(control))) {
|
|
26
|
+
try {
|
|
27
|
+
control = refreshIncompatibleEventLedgerV3(coordRoot).control;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return {
|
|
31
|
+
state: "blocked",
|
|
32
|
+
reason: `runtime_refresh_failed:${error instanceof Error ? error.message : String(error)}`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
20
35
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
if (control.state === "active") {
|
|
37
|
+
// Bound the epoch every producer must re-validate: an oversized active
|
|
38
|
+
// segment rotates into the archive here, on the shared route boundary.
|
|
39
|
+
// Rotation failure never blocks recording; the current epoch stays live.
|
|
40
|
+
try {
|
|
41
|
+
const rotated = rotateOversizedEventLedgerV3(coordRoot);
|
|
42
|
+
if (rotated.state === "rotated" && rotated.control)
|
|
43
|
+
control = rotated.control;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// The oversized epoch keeps serving; the next route resolution retries.
|
|
47
|
+
}
|
|
24
48
|
}
|
|
25
|
-
return
|
|
26
|
-
}
|
|
27
|
-
export function liveEventV3BuildId(harneryCommit) {
|
|
28
|
-
const exact = harneryCommit.normalize("NFC");
|
|
29
|
-
if (/^[a-zA-Z0-9._-]{1,120}$/.test(exact))
|
|
30
|
-
return `build_${exact}`;
|
|
31
|
-
return `build_${createHash("sha256").update(exact).digest("hex")}`;
|
|
32
|
-
}
|
|
33
|
-
export function liveInstanceIdV3(instanceId) {
|
|
34
|
-
if (/^inst_[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
|
|
35
|
-
return instanceId;
|
|
36
|
-
if (/^[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
|
|
37
|
-
return `inst_${instanceId}`;
|
|
38
|
-
return `inst_${createHash("sha256").update(instanceId.normalize("NFC")).digest("hex")}`;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* The adapter-native id a canonical `inst_*` id carries, for display and for
|
|
42
|
-
* joins against native-keyed records. Only the direct prefix form round-trips:
|
|
43
|
-
* a hashed id has no recoverable native form and is returned unchanged, so
|
|
44
|
-
* never treat this as a guaranteed inverse of `liveInstanceIdV3`.
|
|
45
|
-
*/
|
|
46
|
-
export function nativeInstanceIdV3(instanceId) {
|
|
47
|
-
return instanceId.startsWith("inst_") ? instanceId.slice("inst_".length) : instanceId;
|
|
49
|
+
return liveEventLedgerRouteFromControlV3(control);
|
|
48
50
|
}
|
|
49
51
|
export function hookSignalV3(eventName) {
|
|
50
52
|
switch (eventName) {
|
|
@@ -70,15 +72,43 @@ export function hookSignalV3(eventName) {
|
|
|
70
72
|
return undefined;
|
|
71
73
|
}
|
|
72
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Tool lifecycle hooks may stop after publishing their event to the durable
|
|
77
|
+
* ready WAL. The next non-tool hook drains the causal batch into the active
|
|
78
|
+
* ledger, avoiding one global append-lease cycle for every tool boundary.
|
|
79
|
+
*/
|
|
80
|
+
export function liveHookSignalDefersDrainV3(eventName, override) {
|
|
81
|
+
if (override === "1")
|
|
82
|
+
return true;
|
|
83
|
+
if (override === "0")
|
|
84
|
+
return false;
|
|
85
|
+
const signal = hookSignalV3(eventName);
|
|
86
|
+
return (signal === "pre-tool-use" || signal === "post-tool-use" || signal === "post-tool-use-failure");
|
|
87
|
+
}
|
|
73
88
|
export function recordLiveHookSignalV3(input) {
|
|
74
89
|
const signal = hookSignalV3(input.eventName);
|
|
75
90
|
if (!signal)
|
|
76
91
|
return { state: "ignored" };
|
|
92
|
+
const nativeChild = input.payload?.subagent_id ?? input.payload?.agent_id;
|
|
93
|
+
const childOwnsSignal = signal !== "sub-agent-start" &&
|
|
94
|
+
signal !== "sub-agent-stop" &&
|
|
95
|
+
nativeChild !== undefined &&
|
|
96
|
+
liveInstanceIdV3(input.instanceId) === liveInstanceIdV3(nativeChild);
|
|
97
|
+
const payload = input.payload
|
|
98
|
+
? childOwnsSignal
|
|
99
|
+
? {
|
|
100
|
+
...input.payload,
|
|
101
|
+
session_id: nativeChild,
|
|
102
|
+
conversation_id: undefined,
|
|
103
|
+
parent_session_id: input.payload.session_id ?? input.payload.conversation_id,
|
|
104
|
+
}
|
|
105
|
+
: input.payload
|
|
106
|
+
: { raw: {} };
|
|
77
107
|
return recordHookSignalV3({
|
|
78
108
|
coordRoot: input.coordRoot,
|
|
79
109
|
mode: input.route.mode,
|
|
80
110
|
signal,
|
|
81
|
-
payload
|
|
111
|
+
payload,
|
|
82
112
|
adapter: input.adapter,
|
|
83
113
|
instance_id: liveInstanceIdV3(input.instanceId),
|
|
84
114
|
run_id: input.run_id,
|
|
@@ -96,12 +126,94 @@ export function recordLiveHookSignalV3(input) {
|
|
|
96
126
|
...(input.defer_drain ? { writerOptions: { deferDrain: true } } : {}),
|
|
97
127
|
});
|
|
98
128
|
}
|
|
99
|
-
export function
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
129
|
+
export function reconcileLivePendingRuntimeContextV3(input) {
|
|
130
|
+
return reconcilePendingRuntimeContextV3({
|
|
131
|
+
coordRoot: input.coordRoot,
|
|
132
|
+
mode: input.route.mode,
|
|
133
|
+
nativeSessionId: input.nativeSessionId,
|
|
134
|
+
producer_id: LIVE_HOOK_V3_PRODUCER_ID,
|
|
135
|
+
build_id: input.route.build_id,
|
|
136
|
+
platform: livePlatformV3(),
|
|
137
|
+
finalAttempt: input.finalAttempt,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Open the child generation named by a native SubagentStart event.
|
|
142
|
+
*
|
|
143
|
+
* The parent producer owns the delegation span and mints its child generation
|
|
144
|
+
* id. This second crash-safe session-start gives that exact generation its own
|
|
145
|
+
* producer authority, so later child tool hooks can resolve away from the
|
|
146
|
+
* parent session and the disposable heartbeat projection has a real source.
|
|
147
|
+
*/
|
|
148
|
+
export function recordLiveDelegatedChildSessionV3(input) {
|
|
149
|
+
const nativeChild = input.payload.subagent_id ?? input.payload.agent_id;
|
|
150
|
+
if (!nativeChild)
|
|
151
|
+
return { state: "ignored" };
|
|
152
|
+
const parentGeneration = input.parentEvent.links
|
|
153
|
+
.parent_generation_id;
|
|
154
|
+
if (!parentGeneration)
|
|
155
|
+
return { state: "ignored" };
|
|
156
|
+
const nativeParent = input.payload.session_id ?? input.payload.conversation_id;
|
|
157
|
+
const childPayload = {
|
|
158
|
+
session_id: nativeChild,
|
|
159
|
+
agent_id: nativeChild,
|
|
160
|
+
parent_session_id: nativeParent,
|
|
161
|
+
source: "startup",
|
|
162
|
+
model: input.payload.model,
|
|
163
|
+
cwd: input.payload.cwd,
|
|
164
|
+
raw: {
|
|
165
|
+
session_id: nativeChild,
|
|
166
|
+
agent_id: nativeChild,
|
|
167
|
+
...(nativeParent ? { parent_session_id: nativeParent } : {}),
|
|
168
|
+
...(input.payload.raw.agent_type ? { agent_type: input.payload.raw.agent_type } : {}),
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
const started = recordHookSignalV3({
|
|
172
|
+
coordRoot: input.coordRoot,
|
|
173
|
+
mode: input.route.mode,
|
|
174
|
+
signal: "session-start",
|
|
175
|
+
payload: childPayload,
|
|
176
|
+
adapter: input.adapter,
|
|
177
|
+
instance_id: liveInstanceIdV3(nativeChild),
|
|
178
|
+
producer_id: LIVE_HOOK_V3_PRODUCER_ID,
|
|
179
|
+
build_id: input.route.build_id,
|
|
180
|
+
platform: livePlatformV3(),
|
|
181
|
+
...(input.bridge ? { bridge: input.bridge } : {}),
|
|
182
|
+
monotonic_ns: input.monotonic_ns,
|
|
183
|
+
hook_name: "sub-agent-start-child-session",
|
|
184
|
+
delegated_child: {
|
|
185
|
+
generation_id: input.parentEvent.payload.child_generation_id,
|
|
186
|
+
parent_generation_id: parentGeneration,
|
|
187
|
+
delegation_id: input.parentEvent.payload.delegation_id,
|
|
188
|
+
caused_by_event_id: input.parentEvent.event_id,
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
if (started.state !== "recorded" && started.state !== "already_started")
|
|
192
|
+
return started;
|
|
193
|
+
const childStartEventId = (started.state === "recorded" ? started.event.event_id : started.event_id);
|
|
194
|
+
recordHookSignalV3({
|
|
195
|
+
coordRoot: input.coordRoot,
|
|
196
|
+
mode: input.route.mode,
|
|
197
|
+
signal: "user-prompt-submit",
|
|
198
|
+
payload: {
|
|
199
|
+
...childPayload,
|
|
200
|
+
turn_id: `delegated:${nativeChild}`,
|
|
201
|
+
raw: { ...childPayload.raw, turn_id: `delegated:${nativeChild}` },
|
|
202
|
+
},
|
|
203
|
+
adapter: input.adapter,
|
|
204
|
+
instance_id: liveInstanceIdV3(nativeChild),
|
|
205
|
+
producer_id: LIVE_HOOK_V3_PRODUCER_ID,
|
|
206
|
+
build_id: input.route.build_id,
|
|
207
|
+
platform: livePlatformV3(),
|
|
208
|
+
...(input.bridge ? { bridge: input.bridge } : {}),
|
|
209
|
+
monotonic_ns: input.monotonic_ns,
|
|
210
|
+
hook_name: "sub-agent-start-child-turn",
|
|
211
|
+
delegated_child: {
|
|
212
|
+
generation_id: input.parentEvent.payload.child_generation_id,
|
|
213
|
+
parent_generation_id: parentGeneration,
|
|
214
|
+
delegation_id: input.parentEvent.payload.delegation_id,
|
|
215
|
+
caused_by_event_id: childStartEventId,
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
return started;
|
|
107
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAwI7B;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CA8HpC"}
|
|
@@ -51,6 +51,14 @@ export function recordCommandSignalV3(input) {
|
|
|
51
51
|
if (state && !matchesHookState(state, hook, input, epochId)) {
|
|
52
52
|
throw new Error("V3 command producer state does not match the joined hook generation");
|
|
53
53
|
}
|
|
54
|
+
if (state && state.attestation_id !== hook.attestation_id) {
|
|
55
|
+
// A mid-generation re-attestation (session.attestation_changed) moves
|
|
56
|
+
// the hook's attestation id without opening a new generation or turn. A
|
|
57
|
+
// command span that straddles the change keeps its span, sequence, and
|
|
58
|
+
// dedupe state; later events ride the live attestation, the same
|
|
59
|
+
// in-place adoption the hook producer performs.
|
|
60
|
+
state.attestation_id = hook.attestation_id;
|
|
61
|
+
}
|
|
54
62
|
let recovered = false;
|
|
55
63
|
if (state?.pending) {
|
|
56
64
|
const pending = state.pending;
|
|
@@ -309,7 +317,8 @@ function matchesHookState(state, hook, input, epochId) {
|
|
|
309
317
|
state.session_id === hook.session_id &&
|
|
310
318
|
state.generation_id === hook.generation_id &&
|
|
311
319
|
state.turn_id === hook.current_turn_id &&
|
|
312
|
-
|
|
320
|
+
// attestation_id is deliberately absent: a re-attestation within the
|
|
321
|
+
// generation is a continuation, adopted by the caller, not a mismatch.
|
|
313
322
|
state.privacy_epoch_id === epochId);
|
|
314
323
|
}
|
|
315
324
|
function observationSourceId(input, context) {
|