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
|
@@ -4,8 +4,8 @@ import type { TurnHarnessV3, TurnInferenceV3, TurnUsageV3 } from "./contract.js"
|
|
|
4
4
|
export type TelemetryObservationV3<T> = {
|
|
5
5
|
state: "observed";
|
|
6
6
|
value: T;
|
|
7
|
-
attestation: "native" | "derived";
|
|
8
|
-
confidence: "exact" | "high";
|
|
7
|
+
attestation: "native" | "derived" | "inferred";
|
|
8
|
+
confidence: "exact" | "high" | "medium" | "low";
|
|
9
9
|
} | {
|
|
10
10
|
state: "unsupported";
|
|
11
11
|
capability: string;
|
|
@@ -14,13 +14,18 @@ export type TelemetryObservationV3<T> = {
|
|
|
14
14
|
capability: string;
|
|
15
15
|
reason: string;
|
|
16
16
|
};
|
|
17
|
-
|
|
18
|
-
used_tokens: number;
|
|
19
|
-
limit_tokens: number;
|
|
20
|
-
remaining_tokens?: number;
|
|
17
|
+
interface ContextMeasurementClockV3 {
|
|
21
18
|
measured_at: string;
|
|
22
19
|
method: string;
|
|
23
20
|
}
|
|
21
|
+
export type ContextMeasurementV3 = ContextMeasurementClockV3 & ({
|
|
22
|
+
used_tokens: number;
|
|
23
|
+
limit_tokens: number;
|
|
24
|
+
remaining_tokens?: number;
|
|
25
|
+
} | {
|
|
26
|
+
used_percent: number;
|
|
27
|
+
remaining_percent?: number;
|
|
28
|
+
});
|
|
24
29
|
export interface TurnTelemetryV3 {
|
|
25
30
|
usage: TelemetryObservationV3<TurnUsageV3>;
|
|
26
31
|
inference: TelemetryObservationV3<TurnInferenceV3>;
|
|
@@ -32,8 +37,8 @@ export interface ContextTelemetryProvenanceV3 {
|
|
|
32
37
|
source_event: string;
|
|
33
38
|
source_witness?: string;
|
|
34
39
|
runtime_version?: string;
|
|
35
|
-
attestation: "native" | "derived";
|
|
36
|
-
confidence: "exact" | "high";
|
|
40
|
+
attestation: "native" | "derived" | "inferred";
|
|
41
|
+
confidence: "exact" | "high" | "medium" | "low";
|
|
37
42
|
}
|
|
38
43
|
export type TurnTelemetryCapabilitySupportV3 = Partial<Pick<Record<AdapterSignalV3, CapabilitySupportV3>, "model_usage" | "inference_timing" | "context_usage">>;
|
|
39
44
|
export interface HarnessTimingAccumulatorV3 {
|
|
@@ -47,4 +52,5 @@ export declare function extractTurnTelemetryV3(adapter: Adapter, payload: Record
|
|
|
47
52
|
export declare function emptyHarnessTimingV3(): HarnessTimingAccumulatorV3;
|
|
48
53
|
export declare function recordHarnessTimingV3(accumulator: HarnessTimingAccumulatorV3, hook: string, durationMs: number): HarnessTimingAccumulatorV3;
|
|
49
54
|
export declare function harnessObservationV3(accumulator: HarnessTimingAccumulatorV3): TelemetryObservationV3<TurnHarnessV3>;
|
|
55
|
+
export {};
|
|
50
56
|
//# sourceMappingURL=turn-telemetry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/turn-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;
|
|
1
|
+
{"version":3,"file":"turn-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/turn-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACjD,GACD;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAC1D,CACI;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CACJ,CAAC;AAEJ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IACtD,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;CACnD;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACjD;AAED,MAAM,MAAM,gCAAgC,GAAG,OAAO,CACpD,IAAI,CACF,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAC5C,aAAa,GAAG,kBAAkB,GAAG,eAAe,CACrD,CACF,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAA2B,EACrC,OAAO,GAAE,gCAAqC,GAC7C,eAAe,CAyFjB;AA+DD,wBAAgB,oBAAoB,IAAI,0BAA0B,CAEjE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,0BAA0B,EACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAU5B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,0BAA0B,GACtC,sBAAsB,CAAC,aAAa,CAAC,CAsBvC"}
|
|
@@ -40,9 +40,11 @@ export function extractTurnTelemetryV3(adapter, payload, observedAt = new Date()
|
|
|
40
40
|
}
|
|
41
41
|
: missing(adapter, "inference_timing", support.inference_timing);
|
|
42
42
|
const usedTokens = number(context?.used_tokens) ??
|
|
43
|
+
number(context?.context_tokens) ??
|
|
43
44
|
number(context?.input_tokens) ??
|
|
44
45
|
number(context?.total_tokens) ??
|
|
45
46
|
number(payload.used_tokens) ??
|
|
47
|
+
number(payload.context_tokens) ??
|
|
46
48
|
number(payload.total_input_tokens) ??
|
|
47
49
|
number(usage?.total_tokens) ??
|
|
48
50
|
number(usage?.prompt_tokens) ??
|
|
@@ -60,10 +62,15 @@ export function extractTurnTelemetryV3(adapter, payload, observedAt = new Date()
|
|
|
60
62
|
number(payload.context_window_size) ??
|
|
61
63
|
number(payload.context_window_tokens) ??
|
|
62
64
|
(typeof payload.context_window === "number" ? number(payload.context_window) : undefined);
|
|
63
|
-
const
|
|
65
|
+
const usedPercent = finiteNumber(context?.context_usage_percent) ??
|
|
66
|
+
finiteNumber(context?.used_percent) ??
|
|
67
|
+
finiteNumber(context?.used_percentage) ??
|
|
68
|
+
finiteNumber(payload.context_usage_percent) ??
|
|
69
|
+
finiteNumber(payload.used_percent);
|
|
70
|
+
const contextMeasurement = contextObservation(adapter, usedTokens, limitTokens, usedPercent, observedAt, support.context_usage);
|
|
64
71
|
return { usage: usageObservation, inference: inferenceObservation, context: contextMeasurement };
|
|
65
72
|
}
|
|
66
|
-
function contextObservation(adapter, usedTokens, limitTokens, observedAt, override) {
|
|
73
|
+
function contextObservation(adapter, usedTokens, limitTokens, usedPercent, observedAt, override) {
|
|
67
74
|
if (usedTokens !== undefined && limitTokens !== undefined && limitTokens > 0) {
|
|
68
75
|
return {
|
|
69
76
|
state: "observed",
|
|
@@ -78,6 +85,26 @@ function contextObservation(adapter, usedTokens, limitTokens, observedAt, overri
|
|
|
78
85
|
confidence: "exact",
|
|
79
86
|
};
|
|
80
87
|
}
|
|
88
|
+
if (usedPercent !== undefined && usedPercent >= 0 && usedPercent <= 100) {
|
|
89
|
+
return {
|
|
90
|
+
state: "observed",
|
|
91
|
+
value: {
|
|
92
|
+
used_percent: usedPercent,
|
|
93
|
+
remaining_percent: Math.max(0, 100 - usedPercent),
|
|
94
|
+
measured_at: observedAt,
|
|
95
|
+
method: `${adapter.replaceAll("-", "_")}_hook`,
|
|
96
|
+
},
|
|
97
|
+
attestation: "native",
|
|
98
|
+
confidence: "exact",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (usedPercent !== undefined) {
|
|
102
|
+
return {
|
|
103
|
+
state: "expected_but_missing",
|
|
104
|
+
capability: "context_usage",
|
|
105
|
+
reason: "context_usage_percent_invalid",
|
|
106
|
+
};
|
|
107
|
+
}
|
|
81
108
|
if (usedTokens !== undefined || limitTokens !== undefined) {
|
|
82
109
|
return {
|
|
83
110
|
state: "expected_but_missing",
|
|
@@ -151,6 +178,9 @@ function record(value) {
|
|
|
151
178
|
function number(value) {
|
|
152
179
|
return typeof value === "number" ? safeInteger(value) : undefined;
|
|
153
180
|
}
|
|
181
|
+
function finiteNumber(value) {
|
|
182
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
183
|
+
}
|
|
154
184
|
function safeInteger(value) {
|
|
155
185
|
return Number.isFinite(value) && value >= 0 ? Math.floor(value) : undefined;
|
|
156
186
|
}
|
|
@@ -2,7 +2,7 @@ import type { EventV3 } from "./contract.js";
|
|
|
2
2
|
export declare const EVENT_V3_LEDGER_RELATIVE_ROOT: ".harnery/ledgers/v3";
|
|
3
3
|
export type EventV3DurabilityState = "committed" | "ready";
|
|
4
4
|
export interface WriteEventV3Result {
|
|
5
|
-
state: EventV3DurabilityState;
|
|
5
|
+
state: EventV3DurabilityState | "epoch_replaced";
|
|
6
6
|
event_id: string;
|
|
7
7
|
row_digest: `sha256:${string}`;
|
|
8
8
|
ready_path?: string;
|
|
@@ -17,6 +17,16 @@ export interface WriteEventV3Options {
|
|
|
17
17
|
* the option exists for matched harness-cost experiments.
|
|
18
18
|
*/
|
|
19
19
|
deferDrain?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Epoch fence: the genesis id of the epoch this event was produced for.
|
|
22
|
+
* An event carries per-epoch authority (producer boot sequences start at 1
|
|
23
|
+
* and every causal link must resolve inside its own epoch), so committing
|
|
24
|
+
* it into a replaced epoch would poison the new authority. When set, the
|
|
25
|
+
* write refuses with `epoch_replaced` if the live genesis no longer
|
|
26
|
+
* matches, the spooled ready row is tagged with the id, and the drain
|
|
27
|
+
* quarantines any tagged row whose epoch has been replaced underneath it.
|
|
28
|
+
*/
|
|
29
|
+
expectedGenesisId?: `gex_${string}`;
|
|
20
30
|
now?: () => number;
|
|
21
31
|
onStep?: (step: EventV3WriteStep, eventId?: string) => void;
|
|
22
32
|
}
|
|
@@ -34,6 +44,7 @@ export declare function drainReadyEventsV3(coordRoot: string, options?: WriteEve
|
|
|
34
44
|
export declare function withEventV3LedgerLease<T>(coordRoot: string, options: WriteEventV3Options, operation: () => T): T;
|
|
35
45
|
export declare function drainReadyEventsUnderLeaseV3(paths: ReturnType<typeof eventV3Paths>, options?: WriteEventV3Options): number;
|
|
36
46
|
export declare function eventV3Paths(coordRoot: string): {
|
|
47
|
+
coordRoot: string;
|
|
37
48
|
root: string;
|
|
38
49
|
active: string;
|
|
39
50
|
catalog: string;
|
|
@@ -44,6 +55,7 @@ export declare function eventV3Paths(coordRoot: string): {
|
|
|
44
55
|
lease: string;
|
|
45
56
|
};
|
|
46
57
|
export declare function ensureEventV3Layout(coordRoot: string): {
|
|
58
|
+
coordRoot: string;
|
|
47
59
|
root: string;
|
|
48
60
|
active: string;
|
|
49
61
|
catalog: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/writer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/writer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAa7C,eAAO,MAAM,6BAA6B,EAAG,qBAA8B,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,GAAG,gBAAgB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAoDpB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAK/F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,CAAC,GACjB,CAAC,CAoBH;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACtC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA4DR;AAkID,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;EAc7C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;EA8BpD"}
|
|
@@ -5,7 +5,10 @@ import { join, resolve } from "node:path";
|
|
|
5
5
|
import { fsyncParentDirectory } from "../../workflow/durable-record.js";
|
|
6
6
|
import { acquireNoClobberLease } from "../../workflow/workspaces/leases.js";
|
|
7
7
|
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
8
|
+
import { genesisIdFromManifestV3, liveGenesisIdV3 } from "./control.js";
|
|
9
|
+
import { advanceControlWitnessV3, readAdvanceableControlWitnessV3 } from "./control-witness.js";
|
|
8
10
|
import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
|
|
11
|
+
import { readEventV3AppendValidationCheckpointV3, } from "./reader.js";
|
|
9
12
|
import { assertEventV3 } from "./validate.js";
|
|
10
13
|
const MAX_LINE_BYTES = 16 * 1024;
|
|
11
14
|
const DEFAULT_LEASE_MS = 5_000;
|
|
@@ -29,7 +32,11 @@ export function writeEventV3(coordRoot, event, options = {}) {
|
|
|
29
32
|
}
|
|
30
33
|
const paths = ensureEventV3Layout(coordRoot);
|
|
31
34
|
const rowDigest = sha256V3(row);
|
|
32
|
-
|
|
35
|
+
if (options.expectedGenesisId && liveGenesisIdV3(coordRoot) !== options.expectedGenesisId) {
|
|
36
|
+
return { state: "epoch_replaced", event_id: event.event_id, row_digest: rowDigest };
|
|
37
|
+
}
|
|
38
|
+
const epochTag = options.expectedGenesisId ? `-${options.expectedGenesisId}` : "";
|
|
39
|
+
const readyName = `${String(event.producer.sequence).padStart(16, "0")}-${event.event_id}-${rowDigest.slice(7)}${epochTag}.ready`;
|
|
33
40
|
const readyPath = join(paths.spool, readyName);
|
|
34
41
|
writeReadyRecord(paths.spool, readyPath, row, event.event_id, options.onStep);
|
|
35
42
|
if (options.deferDrain) {
|
|
@@ -52,14 +59,18 @@ export function writeEventV3(coordRoot, event, options = {}) {
|
|
|
52
59
|
diagnostic_code: "wal_drain_failed",
|
|
53
60
|
};
|
|
54
61
|
}
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
if (existsSync(readyPath)) {
|
|
63
|
+
return {
|
|
57
64
|
state: "ready",
|
|
58
65
|
event_id: event.event_id,
|
|
59
66
|
row_digest: rowDigest,
|
|
60
67
|
ready_path: readyPath,
|
|
61
|
-
}
|
|
62
|
-
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (existsSync(`${readyPath.slice(0, -".ready".length)}.epoch-replaced`)) {
|
|
71
|
+
return { state: "epoch_replaced", event_id: event.event_id, row_digest: rowDigest };
|
|
72
|
+
}
|
|
73
|
+
return { state: "committed", event_id: event.event_id, row_digest: rowDigest };
|
|
63
74
|
}
|
|
64
75
|
/** Drain every durable ready record under the fenced append lease. */
|
|
65
76
|
export function drainReadyEventsV3(coordRoot, options = {}) {
|
|
@@ -89,8 +100,12 @@ export function withEventV3LedgerLease(coordRoot, options, operation) {
|
|
|
89
100
|
}
|
|
90
101
|
}
|
|
91
102
|
export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
|
|
103
|
+
let priorWitness = readAdvanceableControlWitnessV3(paths.coordRoot);
|
|
92
104
|
if (repairUnterminatedActiveFrame(paths.active)) {
|
|
93
105
|
options.onStep?.("active_tail_repaired");
|
|
106
|
+
// The repair can remove IDs that the old witness considered committed.
|
|
107
|
+
// Never use that stale checkpoint to release a dependent ready row.
|
|
108
|
+
priorWitness = undefined;
|
|
94
109
|
}
|
|
95
110
|
requeueCommittedReceipts(paths.spool);
|
|
96
111
|
const readyNames = readdirSync(paths.spool)
|
|
@@ -98,7 +113,11 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
|
|
|
98
113
|
.sort();
|
|
99
114
|
if (readyNames.length === 0)
|
|
100
115
|
return 0;
|
|
101
|
-
const
|
|
116
|
+
const drainableNames = quarantineReplacedEpochRows(paths, readyNames);
|
|
117
|
+
if (drainableNames.length === 0)
|
|
118
|
+
return 0;
|
|
119
|
+
const checkpoint = priorWitness?.checkpoint ?? readEventV3AppendValidationCheckpointV3(paths.coordRoot);
|
|
120
|
+
const readyRows = causallyOrderedReadyRows(drainableNames.map((readyName) => {
|
|
102
121
|
const readyPath = join(paths.spool, readyName);
|
|
103
122
|
const row = readAndValidateReadyRow(readyPath);
|
|
104
123
|
return {
|
|
@@ -107,7 +126,9 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
|
|
|
107
126
|
row,
|
|
108
127
|
event: JSON.parse(row),
|
|
109
128
|
};
|
|
110
|
-
}));
|
|
129
|
+
}), checkpoint?.genesis_id ? checkpoint : undefined);
|
|
130
|
+
if (readyRows.length === 0)
|
|
131
|
+
return 0;
|
|
111
132
|
const activeFd = openSync(paths.active, "a", 0o600);
|
|
112
133
|
let committed = 0;
|
|
113
134
|
try {
|
|
@@ -130,14 +151,51 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
|
|
|
130
151
|
finally {
|
|
131
152
|
closeSync(activeFd);
|
|
132
153
|
}
|
|
154
|
+
if (committed > 0 && priorWitness) {
|
|
155
|
+
advanceControlWitnessV3(paths.coordRoot, priorWitness, genesisIdFromManifestV3(join(paths.root, "genesis.json")));
|
|
156
|
+
}
|
|
133
157
|
return committed;
|
|
134
158
|
}
|
|
135
159
|
/**
|
|
136
|
-
* Keep the spool's deterministic filename order except where
|
|
137
|
-
*
|
|
138
|
-
*
|
|
160
|
+
* Keep the spool's deterministic filename order except where an event depends
|
|
161
|
+
* on an uncommitted cause or attestation declaration. The authenticated
|
|
162
|
+
* checkpoint proves what the active authority already contains; rows whose
|
|
163
|
+
* prerequisite has not reached either the authority or this ready batch stay
|
|
164
|
+
* in the WAL. This covers the cross-process window where a dependent row is
|
|
165
|
+
* published before the row that mints its attestation.
|
|
139
166
|
*/
|
|
140
|
-
function causallyOrderedReadyRows(rows) {
|
|
167
|
+
function causallyOrderedReadyRows(rows, checkpoint) {
|
|
168
|
+
// Bare writer fixtures and pre-genesis bootstrap rows have no semantic
|
|
169
|
+
// authority to consult. Preserve the original within-batch causal ordering;
|
|
170
|
+
// once a genesis exists, the validated checkpoint becomes the writer fence.
|
|
171
|
+
if (!checkpoint)
|
|
172
|
+
return causallyOrderedReadyRowsWithinBatch(rows);
|
|
173
|
+
const pending = new Map(rows.map((row) => [row.event.event_id, row]));
|
|
174
|
+
const ordered = [];
|
|
175
|
+
const committedEventIds = new Set(checkpoint.seen_event_ids);
|
|
176
|
+
const committedAttestationIds = new Set(checkpoint.attestation_ids);
|
|
177
|
+
while (pending.size > 0) {
|
|
178
|
+
const next = rows.find(({ event }) => {
|
|
179
|
+
const causes = event.links.caused_by;
|
|
180
|
+
return (pending.has(event.event_id) &&
|
|
181
|
+
causes.every((eventId) => committedEventIds.has(eventId)) &&
|
|
182
|
+
attestationPrerequisitesV3(event).every((attestationId) => committedAttestationIds.has(attestationId)));
|
|
183
|
+
});
|
|
184
|
+
if (!next)
|
|
185
|
+
break;
|
|
186
|
+
pending.delete(next.event.event_id);
|
|
187
|
+
ordered.push(next);
|
|
188
|
+
committedEventIds.add(next.event.event_id);
|
|
189
|
+
const minted = mintedAttestationV3(next.event);
|
|
190
|
+
if (minted)
|
|
191
|
+
committedAttestationIds.add(minted);
|
|
192
|
+
}
|
|
193
|
+
if (pending.size > 0 && dependenciesResolveInsidePendingV3(pending, committedEventIds)) {
|
|
194
|
+
throw new Error("ready V3 events contain a causal dependency cycle");
|
|
195
|
+
}
|
|
196
|
+
return ordered;
|
|
197
|
+
}
|
|
198
|
+
function causallyOrderedReadyRowsWithinBatch(rows) {
|
|
141
199
|
const pending = new Map(rows.map((row) => [row.event.event_id, row]));
|
|
142
200
|
const ordered = [];
|
|
143
201
|
while (pending.size > 0) {
|
|
@@ -152,6 +210,31 @@ function causallyOrderedReadyRows(rows) {
|
|
|
152
210
|
}
|
|
153
211
|
return ordered;
|
|
154
212
|
}
|
|
213
|
+
function mintedAttestationV3(event) {
|
|
214
|
+
return event.event_type === "session.started" ||
|
|
215
|
+
event.event_type === "session.attestation_changed"
|
|
216
|
+
? event.attestation_id
|
|
217
|
+
: undefined;
|
|
218
|
+
}
|
|
219
|
+
function attestationPrerequisitesV3(event) {
|
|
220
|
+
if (event.event_type === "session.started")
|
|
221
|
+
return [];
|
|
222
|
+
if (event.event_type === "session.attestation_changed") {
|
|
223
|
+
return [event.payload.prior_attestation_id];
|
|
224
|
+
}
|
|
225
|
+
return event.attestation_id ? [event.attestation_id] : [];
|
|
226
|
+
}
|
|
227
|
+
function dependenciesResolveInsidePendingV3(pending, committedEventIds) {
|
|
228
|
+
const pendingAttestations = new Set([...pending.values()]
|
|
229
|
+
.map(({ event }) => mintedAttestationV3(event))
|
|
230
|
+
.filter((value) => value !== undefined));
|
|
231
|
+
return [...pending.values()].every(({ event }) => {
|
|
232
|
+
const causes = event.links.caused_by;
|
|
233
|
+
const causesStayInside = causes.every((eventId) => committedEventIds.has(eventId) || pending.has(eventId));
|
|
234
|
+
const attestationsStayInside = attestationPrerequisitesV3(event).every((attestationId) => pendingAttestations.has(attestationId));
|
|
235
|
+
return causesStayInside && attestationsStayInside;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
155
238
|
/**
|
|
156
239
|
* A `.committed` receipt is created only after the active row is flushed. If
|
|
157
240
|
* the process dies before unlinking it, replaying the exact canonical row is
|
|
@@ -178,8 +261,10 @@ function requeueCommittedReceipts(spool) {
|
|
|
178
261
|
}
|
|
179
262
|
}
|
|
180
263
|
export function eventV3Paths(coordRoot) {
|
|
181
|
-
const
|
|
264
|
+
const resolvedCoordRoot = resolve(coordRoot);
|
|
265
|
+
const root = join(resolvedCoordRoot, EVENT_V3_LEDGER_RELATIVE_ROOT);
|
|
182
266
|
return {
|
|
267
|
+
coordRoot: resolvedCoordRoot,
|
|
183
268
|
root,
|
|
184
269
|
active: join(root, "active.ndjson"),
|
|
185
270
|
catalog: join(root, "catalog.json"),
|
|
@@ -302,6 +387,35 @@ function eventIdFromReadyName(name) {
|
|
|
302
387
|
const match = name.match(/^\d{16}-(evt_[0-9a-f-]{36})-/);
|
|
303
388
|
return match?.[1];
|
|
304
389
|
}
|
|
390
|
+
function epochTagFromReadyName(name) {
|
|
391
|
+
const match = name.match(/-(gex_[0-9a-f-]{36})\.ready$/);
|
|
392
|
+
return match ? match[1] : undefined;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Move every ready row tagged with a replaced epoch out of the drainable
|
|
396
|
+
* spool. A tagged row was produced for exactly one epoch; committing it into
|
|
397
|
+
* a successor would break that epoch's boot-sequence and causal-link
|
|
398
|
+
* authority, so the row is preserved beside the spool as `.epoch-replaced`
|
|
399
|
+
* evidence instead of ever reaching the active file.
|
|
400
|
+
*/
|
|
401
|
+
function quarantineReplacedEpochRows(paths, readyNames) {
|
|
402
|
+
if (!readyNames.some((name) => epochTagFromReadyName(name) !== undefined))
|
|
403
|
+
return readyNames;
|
|
404
|
+
const liveGenesisId = genesisIdFromManifestV3(join(paths.root, "genesis.json"));
|
|
405
|
+
const drainable = [];
|
|
406
|
+
for (const name of readyNames) {
|
|
407
|
+
const tag = epochTagFromReadyName(name);
|
|
408
|
+
if (tag === undefined || tag === liveGenesisId) {
|
|
409
|
+
drainable.push(name);
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
const readyPath = join(paths.spool, name);
|
|
413
|
+
const quarantinePath = `${readyPath.slice(0, -".ready".length)}.epoch-replaced`;
|
|
414
|
+
renameSync(readyPath, quarantinePath);
|
|
415
|
+
fsyncParentDirectory(quarantinePath);
|
|
416
|
+
}
|
|
417
|
+
return drainable;
|
|
418
|
+
}
|
|
305
419
|
function readFileTail(fd, buffer, position) {
|
|
306
420
|
let read = 0;
|
|
307
421
|
while (read < buffer.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-read.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EAGvB,KAAK,yBAAyB,EAQ/B,MAAM,iBAAiB,CAAC;AAwBzB,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,mBAAmB,CAwErB;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,kBAAkB,CAsBpB;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,yBAAyB,GAAG,SAAS,CAWvC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
|
+
import { readSegmentedJsonlFileSync } from "../storage/durable-history.js";
|
|
4
5
|
import { readWorkItem } from "../work/read.js";
|
|
5
6
|
import { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
|
|
6
7
|
const PLAN_ID = /^plan-[0-9]{4}-[a-f0-9]{8}$/;
|
|
@@ -11,8 +12,6 @@ const PLAN_KEY = /^[a-z][a-z0-9-]{0,31}$/;
|
|
|
11
12
|
const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
12
13
|
const MAX_PLANS = 100;
|
|
13
14
|
const MAX_RECORD_BYTES = 256 * 1024;
|
|
14
|
-
const MAX_EVENTS_BYTES = 512 * 1024;
|
|
15
|
-
const MAX_EVENTS = 100;
|
|
16
15
|
const EVENT_TYPES = new Set([
|
|
17
16
|
"plan.awaiting_approval",
|
|
18
17
|
"plan.resumed",
|
|
@@ -192,25 +191,10 @@ function deriveStatus(coordRoot, events, proposal) {
|
|
|
192
191
|
return { status: "interrupted", work_ids: [], reason: latest?.reason };
|
|
193
192
|
}
|
|
194
193
|
function readEvents(path, planId) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
throw new Error("governor plan events exceed their byte limit");
|
|
200
|
-
const body = readFileSync(path, "utf8");
|
|
201
|
-
if (body && !body.endsWith("\n"))
|
|
202
|
-
throw new Error(`governor plan ${planId} has a partial event`);
|
|
203
|
-
const lines = body.split("\n").filter(Boolean);
|
|
204
|
-
if (lines.length > MAX_EVENTS)
|
|
205
|
-
throw new Error(`governor plan exceeds ${MAX_EVENTS} events`);
|
|
206
|
-
return lines.map((line, index) => {
|
|
207
|
-
let event;
|
|
208
|
-
try {
|
|
209
|
-
event = JSON.parse(line);
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
throw new Error(`cannot parse governor plan ${planId} event ${index + 1}: ${error.message}`);
|
|
213
|
-
}
|
|
194
|
+
return readSegmentedJsonlFileSync(path, {
|
|
195
|
+
max_record_bytes: MAX_RECORD_BYTES,
|
|
196
|
+
max_records: 1_000_000,
|
|
197
|
+
}).map((event, index) => {
|
|
214
198
|
validateEvent(event, planId, index + 1);
|
|
215
199
|
return event;
|
|
216
200
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { chmodSync, existsSync, linkSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { appendSegmentedJsonlFile } from "../storage/durable-history.js";
|
|
4
5
|
import { createWorkItem, readWorkItem } from "../work/index.js";
|
|
5
6
|
import { digestResult, readWorkflowProof, runWorkflow, WorkflowParkedError, workflowScriptDigest, } from "../workflow/index.js";
|
|
6
7
|
import { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans } from "./plan-read.js";
|
|
@@ -1253,13 +1254,10 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
|
|
|
1253
1254
|
actor: bounded(input.actor, "plan actor", 200),
|
|
1254
1255
|
reason: bounded(input.reason, "plan reason", MAX_REASON),
|
|
1255
1256
|
};
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
}
|
|
1261
|
-
appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
|
|
1262
|
-
chmodSync(path, 0o600);
|
|
1257
|
+
appendSegmentedJsonlFile(path, event, {
|
|
1258
|
+
max_record_bytes: MAX_RECORD_BYTES,
|
|
1259
|
+
max_segment_bytes: MAX_EVENTS_BYTES,
|
|
1260
|
+
});
|
|
1263
1261
|
}
|
|
1264
1262
|
function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
|
|
1265
1263
|
const plan = readGovernorPlan(coordRoot, goalId, planId);
|
|
@@ -3,4 +3,16 @@ export declare function readGovernorServiceConfig(coordRootRaw: string): Governo
|
|
|
3
3
|
export declare function readGovernorServiceRuntime(coordRootRaw: string): GovernorServiceRuntime | undefined;
|
|
4
4
|
export declare function readGovernorServiceStatus(coordRootRaw: string): GovernorServiceStatus;
|
|
5
5
|
export declare function governorServiceLogPath(coordRoot: string): string;
|
|
6
|
+
export interface GovernorServiceLogReadOptions {
|
|
7
|
+
max_bytes?: number;
|
|
8
|
+
max_records?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface GovernorServiceLogReadResult {
|
|
11
|
+
lines: readonly string[];
|
|
12
|
+
bytes_read: number;
|
|
13
|
+
records_examined: number;
|
|
14
|
+
truncated: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Read shared generations plus untouched legacy history under one aggregate budget. */
|
|
17
|
+
export declare function readGovernorServiceLogs(coordRootRaw: string, options?: GovernorServiceLogReadOptions): GovernorServiceLogReadResult;
|
|
6
18
|
//# sourceMappingURL=service-read.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/service-read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/service-read.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAOtB,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CA0BrF;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,GACnB,sBAAsB,GAAG,SAAS,CAgBpC;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAkBrF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAahE;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AAeD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,6BAAkC,GAC1C,4BAA4B,CA6D9B"}
|