harnery 0.35.0 → 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 -96
- package/dist/commands/agents.d.ts +23 -3
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +379 -198
- 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 +5 -4
- 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/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/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/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.map +1 -1
- package/dist/commands/semantic.js +54 -2
- 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 +67 -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/cli.js +209 -39
- 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 +244 -10
- package/dist/core/agents/live-lifecycle-v3.js +6 -1
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
- package/dist/core/agents/live-observation-v3.js +6 -1
- 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 +24 -7
- 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 +94 -13
- 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/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-writer.d.ts +6 -0
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +18 -0
- package/dist/core/agents/state/live-coordination-view.d.ts +5 -7
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +15 -90
- 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/artifacts/index.d.ts +21 -0
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +46 -1
- 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 +81 -41
- package/dist/core/events/v3/base-contract.d.ts.map +1 -1
- package/dist/core/events/v3/base-contract.js +17 -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.js +3 -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 +4 -2
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +3 -1
- 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 +13 -21
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +45 -41
- 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 +76 -10
- 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.js +1 -1
- package/dist/core/events/v3/producers/intake.d.ts +7 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +25 -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 +55 -1
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +353 -24
- 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 +6 -5
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/runtime-telemetry-capabilities.js +1 -1
- 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 +14 -8
- 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/runtime-telemetry.d.ts +27 -4
- package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -1
- package/dist/core/hooks/adapter/runtime-telemetry.js +307 -6
- package/dist/core/hooks/cli.js +212 -30
- 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 +8 -3
- package/dist/core/hooks/remediation-cap.d.ts.map +1 -1
- package/dist/core/hooks/remediation-cap.js +3 -11
- 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 +8 -0
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +11 -0
- 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 +11 -8
- package/dist/core/semantic/adapters.d.ts.map +1 -1
- package/dist/core/semantic/adapters.js +169 -31
- package/dist/core/semantic/contract.d.ts +532 -48
- package/dist/core/semantic/contract.d.ts.map +1 -1
- package/dist/core/semantic/contract.js +104 -3
- package/dist/core/semantic/index.d.ts +7 -3
- package/dist/core/semantic/index.d.ts.map +1 -1
- package/dist/core/semantic/index.js +7 -3
- package/dist/core/semantic/once.d.ts +6 -1
- package/dist/core/semantic/once.d.ts.map +1 -1
- package/dist/core/semantic/once.js +80 -9
- package/dist/core/semantic/prompt.d.ts.map +1 -1
- package/dist/core/semantic/prompt.js +14 -1
- 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 +14 -3
- package/dist/core/semantic/scheduler.d.ts.map +1 -1
- package/dist/core/semantic/scheduler.js +30 -6
- package/dist/core/semantic/service-status.d.ts +20 -0
- package/dist/core/semantic/service-status.d.ts.map +1 -1
- package/dist/core/semantic/service-status.js +60 -4
- package/dist/core/semantic/service.d.ts +1 -0
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +104 -15
- 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 +11 -1
- package/dist/core/semantic/storage.d.ts.map +1 -1
- package/dist/core/semantic/storage.js +4 -3
- 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 +3 -1
- package/dist/core/semantic/validate.d.ts.map +1 -1
- package/dist/core/semantic/validate.js +34 -1
- 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/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/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +5 -0
- 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 +29 -2
- package/schemas/config.schema.json +58 -0
- package/schemas/event-v3.schema.json +324 -112
- package/src/commander.ts +462 -95
- package/src/commands/agents.ts +517 -190
- package/src/commands/backup.ts +18 -14
- package/src/commands/browse-session.ts +12 -0
- package/src/commands/browse.ts +6 -7
- package/src/commands/conversations.ts +279 -0
- package/src/commands/deinit.ts +6 -0
- package/src/commands/docs.ts +25 -6
- package/src/commands/doctor.ts +75 -9
- 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/read.ts +6 -2
- package/src/commands/semantic.ts +66 -1
- package/src/commands/storage.ts +310 -0
- package/src/commands/tunnel.ts +66 -52
- package/src/commands/web.ts +77 -7
- package/src/commands/work.ts +3 -3
- package/src/commands/workflow.ts +13 -13
- package/src/core/agents/cli.ts +259 -53
- package/src/core/agents/live-authority-v3.ts +341 -10
- package/src/core/agents/live-lifecycle-v3.ts +6 -1
- package/src/core/agents/live-observation-v3.ts +6 -1
- package/src/core/agents/render/prompt-context.ts +27 -6
- package/src/core/agents/rules/stop-hook.ts +107 -16
- 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/state/activity-log.ts +7 -2
- package/src/core/agents/state/heartbeat-writer.ts +27 -0
- package/src/core/agents/state/live-coordination-view.ts +16 -105
- package/src/core/agents/state/live-coordination-writer.ts +141 -0
- package/src/core/artifacts/index.ts +64 -1
- 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 +17 -7
- package/src/core/events/v3/bootstrap.ts +195 -2
- package/src/core/events/v3/capabilities.ts +3 -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 +5 -2
- package/src/core/events/v3/live-route-observer.ts +80 -0
- package/src/core/events/v3/live-routing.ts +64 -46
- package/src/core/events/v3/producers/coordination-recorder.ts +95 -10
- package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
- package/src/core/events/v3/producers/hook-base.ts +1 -1
- package/src/core/events/v3/producers/intake.ts +30 -2
- package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
- package/src/core/events/v3/producers/recorder.ts +571 -33
- 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 +14 -8
- 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 +58 -7
- 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/runtime-telemetry.ts +408 -13
- package/src/core/hooks/cli.ts +226 -32
- package/src/core/hooks/effects/image-capture.ts +4 -1
- package/src/core/hooks/remediation-cap.ts +12 -6
- 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 +18 -0
- 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 +200 -41
- package/src/core/semantic/contract.ts +135 -3
- package/src/core/semantic/index.ts +76 -2
- package/src/core/semantic/once.ts +93 -7
- package/src/core/semantic/prompt.ts +13 -1
- package/src/core/semantic/review.ts +803 -0
- package/src/core/semantic/routes.ts +30 -0
- package/src/core/semantic/scheduler.ts +49 -5
- package/src/core/semantic/service-status.ts +99 -5
- package/src/core/semantic/service.ts +116 -15
- package/src/core/semantic/soak.ts +638 -0
- package/src/core/semantic/storage.ts +20 -6
- package/src/core/semantic/usage.ts +272 -0
- package/src/core/semantic/validate.ts +31 -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/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/templates.ts +5 -0
- package/src/lib/local-file-url.ts +31 -0
- package/src/lib/web-performance.ts +335 -0
|
@@ -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,21 @@
|
|
|
1
1
|
import type { Adapter } from "../../adapter.js";
|
|
2
2
|
import type { ParsedPayload } from "../../hooks/adapter/parse.js";
|
|
3
3
|
import type { EventV3 } from "./contract.js";
|
|
4
|
-
import { type
|
|
4
|
+
import { type LiveEventLedgerRouteV3 } from "./live-route-observer.js";
|
|
5
5
|
import type { HookSignalV3 } from "./producers/hook.js";
|
|
6
6
|
import type { TurnRitualEvidenceV3 } from "./producers/hook-base.js";
|
|
7
|
-
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";
|
|
8
10
|
export declare const LIVE_HOOK_V3_PRODUCER_ID: "prd_agent-hook";
|
|
9
11
|
export declare const LIVE_COMMAND_V3_PRODUCER_ID: "prd_session-tee";
|
|
10
|
-
export type LiveEventLedgerRouteV3 = {
|
|
11
|
-
state: "v3";
|
|
12
|
-
mode: EventV3WriteMode;
|
|
13
|
-
build_id: `build_${string}`;
|
|
14
|
-
} | {
|
|
15
|
-
state: "blocked";
|
|
16
|
-
reason: string;
|
|
17
|
-
};
|
|
18
12
|
/**
|
|
19
13
|
* Resolve the V3-only ledger route. A root without an initialized V3 control
|
|
20
|
-
* packet is blocked; no producer
|
|
14
|
+
* packet is blocked; no mutating producer may fall back to an older ledger.
|
|
21
15
|
* Manifest-first crashes are repaired from the immutable packet and every
|
|
22
16
|
* other invalid state closes the writer gate.
|
|
23
17
|
*/
|
|
24
18
|
export declare function resolveLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
|
|
25
|
-
export declare function liveEventV3BuildId(harneryCommit: string): `build_${string}`;
|
|
26
|
-
export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
|
|
27
|
-
/**
|
|
28
|
-
* The adapter-native id a canonical `inst_*` id carries, for display and for
|
|
29
|
-
* joins against native-keyed records. Only the direct prefix form round-trips:
|
|
30
|
-
* a hashed id has no recoverable native form and is returned unchanged, so
|
|
31
|
-
* never treat this as a guaranteed inverse of `liveInstanceIdV3`.
|
|
32
|
-
*/
|
|
33
|
-
export declare function nativeInstanceIdV3(instanceId: string): string;
|
|
34
19
|
export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
|
|
35
20
|
/**
|
|
36
21
|
* Tool lifecycle hooks may stop after publishing their event to the durable
|
|
@@ -60,6 +45,14 @@ export declare function recordLiveHookSignalV3(input: {
|
|
|
60
45
|
}): RecordHookSignalV3Result | {
|
|
61
46
|
state: "ignored";
|
|
62
47
|
};
|
|
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;
|
|
63
56
|
/**
|
|
64
57
|
* Open the child generation named by a native SubagentStart event.
|
|
65
58
|
*
|
|
@@ -83,5 +76,4 @@ export declare function recordLiveDelegatedChildSessionV3(input: {
|
|
|
83
76
|
}): RecordHookSignalV3Result | {
|
|
84
77
|
state: "ignored";
|
|
85
78
|
};
|
|
86
|
-
export declare function livePlatformV3(): "linux" | "windows" | "macos" | "unknown";
|
|
87
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) {
|
|
@@ -124,6 +126,17 @@ export function recordLiveHookSignalV3(input) {
|
|
|
124
126
|
...(input.defer_drain ? { writerOptions: { deferDrain: true } } : {}),
|
|
125
127
|
});
|
|
126
128
|
}
|
|
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
|
+
}
|
|
127
140
|
/**
|
|
128
141
|
* Open the child generation named by a native SubagentStart event.
|
|
129
142
|
*
|
|
@@ -204,12 +217,3 @@ export function recordLiveDelegatedChildSessionV3(input) {
|
|
|
204
217
|
});
|
|
205
218
|
return started;
|
|
206
219
|
}
|
|
207
|
-
export function livePlatformV3() {
|
|
208
|
-
if (process.platform === "linux")
|
|
209
|
-
return "linux";
|
|
210
|
-
if (process.platform === "win32")
|
|
211
|
-
return "windows";
|
|
212
|
-
if (process.platform === "darwin")
|
|
213
|
-
return "macos";
|
|
214
|
-
return "unknown";
|
|
215
|
-
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { Adapter } from "../../../adapter.js";
|
|
2
|
-
import { type AuthorityReceiptV3, type AuthorityReconcilerV3 } from "../authority-outbox.js";
|
|
2
|
+
import { type AuthorityReceiptV3, type AuthorityReconcilerV3, type AuthorityTransactionV3 } from "../authority-outbox.js";
|
|
3
3
|
import type { EventV3 } from "../contract.js";
|
|
4
4
|
import { type EventV3WriteMode } from "../control.js";
|
|
5
5
|
import { type CoordinationAuthoritySignalV3, type CoordinationObservationBySignalV3 } from "./coordination.js";
|
|
6
|
+
export interface PendingCoordinationTransactionV3Location {
|
|
7
|
+
producer_state_file: string;
|
|
8
|
+
transaction: AuthorityTransactionV3;
|
|
9
|
+
}
|
|
6
10
|
export interface RecordCoordinationAuthorityV3Input<S extends CoordinationAuthoritySignalV3 = CoordinationAuthoritySignalV3> {
|
|
7
11
|
coordRoot: string;
|
|
8
12
|
mode: EventV3WriteMode;
|
|
@@ -50,4 +54,10 @@ export type RecordCoordinationAuthorityV3Result = {
|
|
|
50
54
|
* settled is refused rather than guessed at.
|
|
51
55
|
*/
|
|
52
56
|
export declare function recordCoordinationAuthorityV3<S extends CoordinationAuthoritySignalV3>(input: RecordCoordinationAuthorityV3Input<S>): RecordCoordinationAuthorityV3Result;
|
|
57
|
+
/** Locate the one private producer state that owns a pending authority transaction. */
|
|
58
|
+
export declare function findPendingCoordinationTransactionV3(coordRoot: string, transactionId: string): PendingCoordinationTransactionV3Location | null;
|
|
59
|
+
/** Clear one transaction from its exact producer state after durable quarantine is established. */
|
|
60
|
+
export declare function withPendingCoordinationTransactionRecoveryV3<T>(coordRoot: string, producerStateFile: string, transaction: AuthorityTransactionV3, allowAlreadyCleared: boolean, operation: (control: {
|
|
61
|
+
clearPending: () => "cleared" | "already_cleared";
|
|
62
|
+
}) => T): T;
|
|
53
63
|
//# sourceMappingURL=coordination-recorder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAK5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAK/E,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EAEvC,MAAM,mBAAmB,CAAC;AAyC3B,MAAM,WAAW,wCAAwC;IACvD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC,CACjD,CAAC,SAAS,6BAA6B,GAAG,6BAA6B;IAEvE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACtC,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,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,MAAM,mCAAmC,GAC3C;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,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,6BAA6B,EACnF,KAAK,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAC3C,mCAAmC,CAwNrC;AAED,uFAAuF;AACvF,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,wCAAwC,GAAG,IAAI,CAgBjD;AAED,mGAAmG;AACnG,wBAAgB,4CAA4C,CAAC,CAAC,EAC5D,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,sBAAsB,EACnC,mBAAmB,EAAE,OAAO,EAC5B,SAAS,EAAE,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,SAAS,GAAG,iBAAiB,CAAA;CAAE,KAAK,CAAC,GAC/E,CAAC,CA+BH"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
-
import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { hostname } from "node:os";
|
|
4
|
-
import { join, resolve } from "node:path";
|
|
4
|
+
import { basename, join, resolve } from "node:path";
|
|
5
5
|
import { fsyncParentDirectory } from "../../../workflow/durable-record.js";
|
|
6
6
|
import { acquireNoClobberLease } from "../../../workflow/workspaces/leases.js";
|
|
7
|
-
import { buildAuthorityTransactionV3, publishAuthorityTransactionV3, reconcileAuthorityTransactionV3, } from "../authority-outbox.js";
|
|
7
|
+
import { authorityRecoveryIntentPathV3, buildAuthorityTransactionV3, publishAuthorityTransactionV3, reconcileAuthorityTransactionV3, } from "../authority-outbox.js";
|
|
8
8
|
import { canonicalJsonV3, normalizeNativeIdV3 } from "../canonical.js";
|
|
9
9
|
import { markObservedClockRegressionV3 } from "../clock-order.js";
|
|
10
10
|
import { readEventV3ControlState } from "../control.js";
|
|
@@ -37,6 +37,9 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
37
37
|
}
|
|
38
38
|
const rootId = control.genesis.event.scope.root_id;
|
|
39
39
|
const epochId = control.genesis.profile.privacy_key_epoch;
|
|
40
|
+
const epochFence = {
|
|
41
|
+
expectedGenesisId: control.genesis.event.payload.genesis_id,
|
|
42
|
+
};
|
|
40
43
|
const rootContext = fingerprintContextV3(input.coordRoot, rootId, undefined, epochId);
|
|
41
44
|
const producerSource = normalizeNativeIdV3(rootContext, "agent-coord.producer", `${input.adapter}\0${input.native_actor_session_id}\0${hook.generation_id}`);
|
|
42
45
|
const sourceId = normalizeNativeIdV3(rootContext, "agent-coord.observation", input.observation.native_observation_id);
|
|
@@ -58,6 +61,13 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
58
61
|
state.attestation_id = hook.attestation_id;
|
|
59
62
|
}
|
|
60
63
|
if (state?.pending) {
|
|
64
|
+
if (existsSync(authorityRecoveryIntentPathV3(input.coordRoot, state.pending.transaction.transaction_id))) {
|
|
65
|
+
return {
|
|
66
|
+
state: "pending_transaction",
|
|
67
|
+
transaction_id: state.pending.transaction.transaction_id,
|
|
68
|
+
mutation_kind: state.pending.transaction.mutation.kind,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
61
71
|
if (state.pending.source_id !== sourceId) {
|
|
62
72
|
// A writer that died mid-commit leaves `pending` owned by an
|
|
63
73
|
// observation that will never retry (hook observations are one-shot).
|
|
@@ -68,8 +78,8 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
68
78
|
// still refuses rather than guessing at a conflicting mutation.
|
|
69
79
|
const stale = state.pending;
|
|
70
80
|
try {
|
|
71
|
-
publishAuthorityTransactionV3(input.coordRoot, stale.transaction);
|
|
72
|
-
reconcileAuthorityTransactionV3(input.coordRoot, stale.transaction.transaction_id, input.reconciler);
|
|
81
|
+
publishAuthorityTransactionV3(input.coordRoot, stale.transaction, epochFence);
|
|
82
|
+
reconcileAuthorityTransactionV3(input.coordRoot, stale.transaction.transaction_id, input.reconciler, epochFence);
|
|
73
83
|
}
|
|
74
84
|
catch {
|
|
75
85
|
return {
|
|
@@ -84,8 +94,8 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
84
94
|
}
|
|
85
95
|
else {
|
|
86
96
|
const pending = state.pending;
|
|
87
|
-
publishAuthorityTransactionV3(input.coordRoot, pending.transaction);
|
|
88
|
-
const receipt = reconcileAuthorityTransactionV3(input.coordRoot, pending.transaction.transaction_id, input.reconciler);
|
|
97
|
+
publishAuthorityTransactionV3(input.coordRoot, pending.transaction, epochFence);
|
|
98
|
+
const receipt = reconcileAuthorityTransactionV3(input.coordRoot, pending.transaction.transaction_id, input.reconciler, epochFence);
|
|
89
99
|
const event = eventFromTransaction(pending.transaction);
|
|
90
100
|
applyCoordinationEvent(state, pending.source_id, pending.transaction, event);
|
|
91
101
|
state.pending = undefined;
|
|
@@ -178,8 +188,8 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
178
188
|
delete state.open_waits[waitId];
|
|
179
189
|
state.pending = { source_id: sourceId, transaction };
|
|
180
190
|
publishCoordinationState(path, state);
|
|
181
|
-
publishAuthorityTransactionV3(input.coordRoot, transaction);
|
|
182
|
-
const receipt = reconcileAuthorityTransactionV3(input.coordRoot, transaction.transaction_id, input.reconciler);
|
|
191
|
+
publishAuthorityTransactionV3(input.coordRoot, transaction, epochFence);
|
|
192
|
+
const receipt = reconcileAuthorityTransactionV3(input.coordRoot, transaction.transaction_id, input.reconciler, epochFence);
|
|
183
193
|
applyCoordinationEvent(state, sourceId, transaction, normalized.event);
|
|
184
194
|
state.pending = undefined;
|
|
185
195
|
publishCoordinationState(path, state);
|
|
@@ -189,6 +199,59 @@ export function recordCoordinationAuthorityV3(input) {
|
|
|
189
199
|
lease.release();
|
|
190
200
|
}
|
|
191
201
|
}
|
|
202
|
+
/** Locate the one private producer state that owns a pending authority transaction. */
|
|
203
|
+
export function findPendingCoordinationTransactionV3(coordRoot, transactionId) {
|
|
204
|
+
const directory = coordinationProducerDirectory(coordRoot);
|
|
205
|
+
if (!existsSync(directory))
|
|
206
|
+
return null;
|
|
207
|
+
const matches = readdirSync(directory)
|
|
208
|
+
.filter((name) => /^hid_[a-f0-9]{64}\.json$/.test(name))
|
|
209
|
+
.sort()
|
|
210
|
+
.flatMap((name) => {
|
|
211
|
+
const state = readCoordinationState(join(directory, name));
|
|
212
|
+
return state.pending?.transaction.transaction_id === transactionId
|
|
213
|
+
? [{ producer_state_file: name, transaction: state.pending.transaction }]
|
|
214
|
+
: [];
|
|
215
|
+
});
|
|
216
|
+
if (matches.length > 1) {
|
|
217
|
+
throw new Error("authority transaction is pending in more than one coordination producer");
|
|
218
|
+
}
|
|
219
|
+
return matches[0] ?? null;
|
|
220
|
+
}
|
|
221
|
+
/** Clear one transaction from its exact producer state after durable quarantine is established. */
|
|
222
|
+
export function withPendingCoordinationTransactionRecoveryV3(coordRoot, producerStateFile, transaction, allowAlreadyCleared, operation) {
|
|
223
|
+
if (!/^hid_[a-f0-9]{64}\.json$/.test(producerStateFile)) {
|
|
224
|
+
throw new Error("coordination producer state file is invalid");
|
|
225
|
+
}
|
|
226
|
+
const path = join(coordinationProducerDirectory(coordRoot), basename(producerStateFile));
|
|
227
|
+
if (!existsSync(path))
|
|
228
|
+
throw new Error("coordination producer state is missing");
|
|
229
|
+
const lease = acquireCoordinationLease(coordRoot, path);
|
|
230
|
+
try {
|
|
231
|
+
const state = readCoordinationState(path);
|
|
232
|
+
if (!state.pending && !allowAlreadyCleared) {
|
|
233
|
+
throw new Error("coordination producer no longer owns the pending transaction");
|
|
234
|
+
}
|
|
235
|
+
if (state.pending) {
|
|
236
|
+
if (state.pending.transaction.transaction_id !== transaction.transaction_id ||
|
|
237
|
+
canonicalJsonV3(state.pending.transaction) !== canonicalJsonV3(transaction)) {
|
|
238
|
+
throw new Error("coordination producer pending transaction changed during recovery");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return operation({
|
|
242
|
+
clearPending: () => {
|
|
243
|
+
if (!state.pending)
|
|
244
|
+
return "already_cleared";
|
|
245
|
+
state.pending = undefined;
|
|
246
|
+
publishCoordinationState(path, state);
|
|
247
|
+
return "cleared";
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
lease.release();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
192
255
|
function newCoordinationState(input, hook, epochId) {
|
|
193
256
|
return {
|
|
194
257
|
format: COORDINATION_STATE_FORMAT,
|
|
@@ -240,7 +303,10 @@ function eventFromTransaction(transaction) {
|
|
|
240
303
|
return JSON.parse(transaction.event_row);
|
|
241
304
|
}
|
|
242
305
|
function coordinationStatePath(coordRoot, producerSource) {
|
|
243
|
-
return join(
|
|
306
|
+
return join(coordinationProducerDirectory(coordRoot), `${producerSource}.json`);
|
|
307
|
+
}
|
|
308
|
+
function coordinationProducerDirectory(coordRoot) {
|
|
309
|
+
return join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT, "private-producers/agent-coord");
|
|
244
310
|
}
|
|
245
311
|
function acquireCoordinationLease(coordRoot, statePath) {
|
|
246
312
|
const directory = join(statePath, "..");
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Producer-side bound on duplicate diagnostic file creation.
|
|
3
|
+
*
|
|
4
|
+
* A producer fault can emit the same diagnostic thousands of times per day,
|
|
5
|
+
* and every emission used to become one loose file in the diagnostics spool.
|
|
6
|
+
* This module keeps the first bounded loose exemplars per
|
|
7
|
+
* (category, reason, instance) key and UTC day unchanged, then coalesces
|
|
8
|
+
* further identical emissions into one deterministic summary file per key and
|
|
9
|
+
* window, preserving the exact logical count, first and last times,
|
|
10
|
+
* represented bytes, hourly rate buckets, and bounded exemplar digests.
|
|
11
|
+
*
|
|
12
|
+
* Below the bound the gate creates no state at all: admitted loose filenames
|
|
13
|
+
* carry the key digest as a suffix, and the gate counts a key's emissions for
|
|
14
|
+
* the window from those filenames alone. A summary file and its short-lived
|
|
15
|
+
* per-key lease exist only for a key that actually crossed the bound, so a
|
|
16
|
+
* healthy spool gains zero files and zero directories from this mitigation.
|
|
17
|
+
*
|
|
18
|
+
* The mitigation is fail-open: any count, lease, read, or publish failure
|
|
19
|
+
* admits the loose diagnostic exactly as before and appends to a lock-free,
|
|
20
|
+
* size-capped emergency log. It never deletes, moves, or rewrites an existing
|
|
21
|
+
* loose diagnostic, and it never calls back into the diagnostic writer.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DIAGNOSTIC_SUMMARY_FORMAT: "harnery-v3-diagnostic-summary";
|
|
24
|
+
export declare const DIAGNOSTIC_SUMMARY_VERSION: 1;
|
|
25
|
+
/**
|
|
26
|
+
* Loose exemplars admitted per (category, reason, instance) key per UTC day
|
|
27
|
+
* before identical emissions coalesce into the key's summary. Frozen from a
|
|
28
|
+
* whole-history measurement: healthy categories peak well under this value
|
|
29
|
+
* per day across ALL keys combined, while a producer fault exceeds it within
|
|
30
|
+
* minutes. The bound is enforced from filename counts without cross-process
|
|
31
|
+
* locking, so simultaneous writers straddling the crossing can admit a few
|
|
32
|
+
* extra exemplars; the bound is a flood stop, not an exact quota.
|
|
33
|
+
*/
|
|
34
|
+
export declare const DIAGNOSTIC_LOOSE_EXEMPLAR_LIMIT = 32;
|
|
35
|
+
export declare const DIAGNOSTIC_MITIGATION_HEALTH_FILE = "mitigation-health.ndjson";
|
|
36
|
+
export interface DiagnosticContentFingerprint {
|
|
37
|
+
bytes: number;
|
|
38
|
+
sha256: string;
|
|
39
|
+
}
|
|
40
|
+
export interface DiagnosticGateInputV3 {
|
|
41
|
+
/** Already sanitized by the diagnostic writer. */
|
|
42
|
+
category: string;
|
|
43
|
+
reason?: string;
|
|
44
|
+
instanceId?: string;
|
|
45
|
+
fingerprint: DiagnosticContentFingerprint;
|
|
46
|
+
/** Approved scalar metadata only; stored once per summary. */
|
|
47
|
+
metadata: Record<string, string | number | boolean | null>;
|
|
48
|
+
}
|
|
49
|
+
export type DiagnosticGateDecisionV3 = {
|
|
50
|
+
admit: true;
|
|
51
|
+
/**
|
|
52
|
+
* Appended to the loose filename before `.json` so future gate calls
|
|
53
|
+
* can count the key's admitted exemplars from the directory listing.
|
|
54
|
+
* Empty when the gate is disabled.
|
|
55
|
+
*/
|
|
56
|
+
loose_name_suffix: string;
|
|
57
|
+
} | {
|
|
58
|
+
admit: false;
|
|
59
|
+
/** The summary file the emission was durably coalesced into. */
|
|
60
|
+
summary_path: string;
|
|
61
|
+
};
|
|
62
|
+
export interface DiagnosticSummaryV3 {
|
|
63
|
+
format: typeof DIAGNOSTIC_SUMMARY_FORMAT;
|
|
64
|
+
format_version: typeof DIAGNOSTIC_SUMMARY_VERSION;
|
|
65
|
+
category: string;
|
|
66
|
+
reason: string;
|
|
67
|
+
instance_id: string;
|
|
68
|
+
/** UTC day this summary covers, as YYYY-MM-DD. */
|
|
69
|
+
window: string;
|
|
70
|
+
/** Loose exemplar files observed for the key when the bound was crossed. */
|
|
71
|
+
loose_count: number;
|
|
72
|
+
/** Identical emissions coalesced here instead of becoming loose files. */
|
|
73
|
+
summarized_count: number;
|
|
74
|
+
first_summarized_at: string | null;
|
|
75
|
+
last_summarized_at: string | null;
|
|
76
|
+
/** Sum of content-fingerprint bytes across summarized emissions. */
|
|
77
|
+
represented_bytes: number;
|
|
78
|
+
/** Digests of the first summarized emissions, bounded. */
|
|
79
|
+
exemplars: DiagnosticContentFingerprint[];
|
|
80
|
+
/** Approved scalar metadata from the first summarized emission. */
|
|
81
|
+
metadata: Record<string, string | number | boolean | null>;
|
|
82
|
+
/** Summarized-only counts per UTC hour ("YYYY-MM-DDTHH"), pruned. */
|
|
83
|
+
recent_hours: Record<string, number>;
|
|
84
|
+
}
|
|
85
|
+
/** Aggregate of the append-only emergency fail-open log. */
|
|
86
|
+
export interface DiagnosticMitigationHealthV3 {
|
|
87
|
+
fail_open_count: number;
|
|
88
|
+
last_fail_open_at: string | null;
|
|
89
|
+
by_stage: Record<string, number>;
|
|
90
|
+
/** True when the log hit its size cap and later fail-opens were dropped. */
|
|
91
|
+
truncated: boolean;
|
|
92
|
+
}
|
|
93
|
+
export declare function diagnosticSummariesRootV3(coordRoot: string): string;
|
|
94
|
+
export declare function diagnosticSummariesEnabledV3(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Decide whether one diagnostic emission may become a loose file.
|
|
97
|
+
*
|
|
98
|
+
* Below the per-key bound (counted from digest-suffixed loose filenames) the
|
|
99
|
+
* emission is admitted with the suffix to append, and no summary or lease
|
|
100
|
+
* state is created. At or past the bound the emission is durably coalesced
|
|
101
|
+
* into the key's summary under a short per-key lease and `admit: false` is
|
|
102
|
+
* returned with the summary path. Any mitigation failure, and the disabled
|
|
103
|
+
* gate, admit the loose write exactly as before.
|
|
104
|
+
*/
|
|
105
|
+
export declare function gateProducerDiagnosticV3(coordRoot: string, input: DiagnosticGateInputV3, nowMs?: number): DiagnosticGateDecisionV3;
|
|
106
|
+
export interface DiagnosticSummaryListingV3 {
|
|
107
|
+
summaries: DiagnosticSummaryV3[];
|
|
108
|
+
/** Physical summary files, including any that failed validation. */
|
|
109
|
+
file_count: number;
|
|
110
|
+
unreadable_count: number;
|
|
111
|
+
mitigation_health: DiagnosticMitigationHealthV3 | null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Read every summary in the active epoch's `diagnostic-summaries/` subtree.
|
|
115
|
+
* Skips lease state, temp files, and the mitigation health log (which is
|
|
116
|
+
* aggregated into `mitigation_health` instead). Never throws; a missing
|
|
117
|
+
* subtree returns an empty listing.
|
|
118
|
+
*/
|
|
119
|
+
export declare function listDiagnosticSummariesV3(coordRoot: string): DiagnosticSummaryListingV3;
|
|
120
|
+
/**
|
|
121
|
+
* Sum summarized-only occurrences inside a lookback window, from hour
|
|
122
|
+
* buckets. Hour-granular and conservative: a bucket is counted only when its
|
|
123
|
+
* whole hour lies inside `[sinceMs, nowMs]`, so a boundary bucket is excluded
|
|
124
|
+
* (up to 59 minutes undercounted) rather than fully included (up to 59
|
|
125
|
+
* minutes overcounted), and a future-dated bucket from clock skew never
|
|
126
|
+
* inflates a window.
|
|
127
|
+
*/
|
|
128
|
+
export declare function countSummarizedSinceV3(summaries: readonly DiagnosticSummaryV3[], sinceMs: number, filter?: (summary: DiagnosticSummaryV3) => boolean, nowMs?: number): number;
|
|
129
|
+
//# sourceMappingURL=diagnostic-summaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic-summaries.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/diagnostic-summaries.ts"],"names":[],"mappings":"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"}
|