open-multi-agent-kit 1.2.0 → 1.2.2
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/CHANGELOG.md +46 -0
- package/README.md +2 -2
- package/dist/approval-api.d.ts +5 -0
- package/dist/approval-api.d.ts.map +1 -0
- package/dist/approval-api.js +5 -0
- package/dist/approval-api.js.map +1 -0
- package/dist/cli/session-picker.d.ts +2 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/commands/verified-run-cli.d.ts.map +1 -1
- package/dist/commands/verified-run-cli.js +69 -22
- package/dist/commands/verified-run-cli.js.map +1 -1
- package/dist/commands/verified-run-signal.d.ts +3 -0
- package/dist/commands/verified-run-signal.d.ts.map +1 -0
- package/dist/commands/verified-run-signal.js +15 -0
- package/dist/commands/verified-run-signal.js.map +1 -0
- package/dist/coordination/broker.d.ts.map +1 -1
- package/dist/coordination/broker.js +13 -6
- package/dist/coordination/broker.js.map +1 -1
- package/dist/coordination/operation.d.ts +1 -0
- package/dist/coordination/operation.d.ts.map +1 -1
- package/dist/coordination/operation.js +55 -3
- package/dist/coordination/operation.js.map +1 -1
- package/dist/coordination/resource.d.ts +1 -1
- package/dist/coordination/resource.d.ts.map +1 -1
- package/dist/coordination/resource.js +10 -4
- package/dist/coordination/resource.js.map +1 -1
- package/dist/coordination/types.d.ts.map +1 -1
- package/dist/coordination/types.js +1 -1
- package/dist/coordination/types.js.map +1 -1
- package/dist/core/adaptorch-bridge.d.ts +1 -1
- package/dist/core/adaptorch-bridge.d.ts.map +1 -1
- package/dist/core/adaptorch-bridge.js +1 -1
- package/dist/core/adaptorch-bridge.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +16 -16
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +32 -33
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/canonical-json.d.ts +3 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +20 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +7 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +14 -29
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/fallback.d.ts +16 -5
- package/dist/core/compaction/fallback.d.ts.map +1 -1
- package/dist/core/compaction/fallback.js +4 -3
- package/dist/core/compaction/fallback.js.map +1 -1
- package/dist/core/compaction/model-failover.d.ts +21 -0
- package/dist/core/compaction/model-failover.d.ts.map +1 -0
- package/dist/core/compaction/model-failover.js +46 -0
- package/dist/core/compaction/model-failover.js.map +1 -0
- package/dist/core/compaction/session-summary.d.ts +21 -0
- package/dist/core/compaction/session-summary.d.ts.map +1 -0
- package/dist/core/compaction/session-summary.js +27 -0
- package/dist/core/compaction/session-summary.js.map +1 -0
- package/dist/core/export-html/template.js +14 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/session-lifecycle-types.d.ts +14 -0
- package/dist/core/extensions/session-lifecycle-types.d.ts.map +1 -0
- package/dist/core/extensions/session-lifecycle-types.js +2 -0
- package/dist/core/extensions/session-lifecycle-types.js.map +1 -0
- package/dist/core/extensions/types.d.ts +4 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +10 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +3 -6
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/legacy-resource-policy.d.ts +7 -0
- package/dist/core/legacy-resource-policy.d.ts.map +1 -0
- package/dist/core/legacy-resource-policy.js +9 -0
- package/dist/core/legacy-resource-policy.js.map +1 -0
- package/dist/core/mcp/config.d.ts.map +1 -1
- package/dist/core/mcp/config.js +17 -3
- package/dist/core/mcp/config.js.map +1 -1
- package/dist/core/mcp/connection-queue.d.ts +12 -0
- package/dist/core/mcp/connection-queue.d.ts.map +1 -0
- package/dist/core/mcp/connection-queue.js +46 -0
- package/dist/core/mcp/connection-queue.js.map +1 -0
- package/dist/core/mcp/manager-runtime.d.ts +55 -0
- package/dist/core/mcp/manager-runtime.d.ts.map +1 -0
- package/dist/core/mcp/manager-runtime.js +66 -0
- package/dist/core/mcp/manager-runtime.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +12 -68
- package/dist/core/mcp/manager.d.ts.map +1 -1
- package/dist/core/mcp/manager.js +33 -113
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/protocol.d.ts.map +1 -1
- package/dist/core/mcp/protocol.js +70 -40
- package/dist/core/mcp/protocol.js.map +1 -1
- package/dist/core/package-manager.d.ts +4 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +59 -129
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/package-resource-patterns.d.ts +7 -0
- package/dist/core/package-resource-patterns.d.ts.map +1 -0
- package/dist/core/package-resource-patterns.js +99 -0
- package/dist/core/package-resource-patterns.js.map +1 -0
- package/dist/core/provider-resilience.d.ts +9 -0
- package/dist/core/provider-resilience.d.ts.map +1 -1
- package/dist/core/provider-resilience.js +15 -0
- package/dist/core/provider-resilience.js.map +1 -1
- package/dist/core/reasoning-router-v4.d.ts +5 -2
- package/dist/core/reasoning-router-v4.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +4 -8
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/run-execution-api.d.ts +8 -1
- package/dist/core/run-execution-api.d.ts.map +1 -1
- package/dist/core/run-execution-api.js +4 -0
- package/dist/core/run-execution-api.js.map +1 -1
- package/dist/core/run-journal.d.ts +1 -2
- package/dist/core/run-journal.d.ts.map +1 -1
- package/dist/core/run-journal.js +2 -19
- package/dist/core/run-journal.js.map +1 -1
- package/dist/core/session-listing.d.ts +51 -0
- package/dist/core/session-listing.d.ts.map +1 -0
- package/dist/core/session-listing.js +111 -0
- package/dist/core/session-listing.js.map +1 -0
- package/dist/core/session-manager.d.ts +12 -37
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +12 -118
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-message-text.d.ts +5 -0
- package/dist/core/session-message-text.d.ts.map +1 -0
- package/dist/core/session-message-text.js +9 -0
- package/dist/core/session-message-text.js.map +1 -0
- package/dist/core/skills-catalog-cache.d.ts +2 -0
- package/dist/core/skills-catalog-cache.d.ts.map +1 -1
- package/dist/core/skills-catalog-cache.js +71 -17
- package/dist/core/skills-catalog-cache.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/verified-run/authority-clock.d.ts +3 -0
- package/dist/core/verified-run/authority-clock.d.ts.map +1 -0
- package/dist/core/verified-run/authority-clock.js +25 -0
- package/dist/core/verified-run/authority-clock.js.map +1 -0
- package/dist/core/verified-run/authority-errors.d.ts +10 -0
- package/dist/core/verified-run/authority-errors.d.ts.map +1 -0
- package/dist/core/verified-run/authority-errors.js +17 -0
- package/dist/core/verified-run/authority-errors.js.map +1 -0
- package/dist/core/verified-run/authority-events.d.ts +126 -0
- package/dist/core/verified-run/authority-events.d.ts.map +1 -0
- package/dist/core/verified-run/authority-events.js +482 -0
- package/dist/core/verified-run/authority-events.js.map +1 -0
- package/dist/core/verified-run/authority-journal.d.ts +27 -0
- package/dist/core/verified-run/authority-journal.d.ts.map +1 -0
- package/dist/core/verified-run/authority-journal.js +83 -0
- package/dist/core/verified-run/authority-journal.js.map +1 -0
- package/dist/core/verified-run/authority-meaning.d.ts +13 -0
- package/dist/core/verified-run/authority-meaning.d.ts.map +1 -0
- package/dist/core/verified-run/authority-meaning.js +40 -0
- package/dist/core/verified-run/authority-meaning.js.map +1 -0
- package/dist/core/verified-run/authority-runtime.d.ts +82 -0
- package/dist/core/verified-run/authority-runtime.d.ts.map +1 -0
- package/dist/core/verified-run/authority-runtime.js +169 -0
- package/dist/core/verified-run/authority-runtime.js.map +1 -0
- package/dist/core/verified-run/authority-store.d.ts +204 -0
- package/dist/core/verified-run/authority-store.d.ts.map +1 -0
- package/dist/core/verified-run/authority-store.js +852 -0
- package/dist/core/verified-run/authority-store.js.map +1 -0
- package/dist/core/verified-run/broker.d.ts +8 -1
- package/dist/core/verified-run/broker.d.ts.map +1 -1
- package/dist/core/verified-run/broker.js +94 -90
- package/dist/core/verified-run/broker.js.map +1 -1
- package/dist/core/verified-run/candidate-policy.d.ts +10 -0
- package/dist/core/verified-run/candidate-policy.d.ts.map +1 -0
- package/dist/core/verified-run/candidate-policy.js +33 -0
- package/dist/core/verified-run/candidate-policy.js.map +1 -0
- package/dist/core/verified-run/candidate.d.ts.map +1 -1
- package/dist/core/verified-run/candidate.js +5 -10
- package/dist/core/verified-run/candidate.js.map +1 -1
- package/dist/core/verified-run/coordinator.d.ts +35 -17
- package/dist/core/verified-run/coordinator.d.ts.map +1 -1
- package/dist/core/verified-run/coordinator.js +111 -57
- package/dist/core/verified-run/coordinator.js.map +1 -1
- package/dist/core/verified-run/dag-phase.d.ts.map +1 -1
- package/dist/core/verified-run/dag-phase.js +1 -1
- package/dist/core/verified-run/dag-phase.js.map +1 -1
- package/dist/core/verified-run/dag-recovery.d.ts +5 -1
- package/dist/core/verified-run/dag-recovery.d.ts.map +1 -1
- package/dist/core/verified-run/dag-recovery.js +10 -4
- package/dist/core/verified-run/dag-recovery.js.map +1 -1
- package/dist/core/verified-run/event-parser.d.ts.map +1 -1
- package/dist/core/verified-run/event-parser.js +33 -0
- package/dist/core/verified-run/event-parser.js.map +1 -1
- package/dist/core/verified-run/evidence-read-projection.d.ts +4 -0
- package/dist/core/verified-run/evidence-read-projection.d.ts.map +1 -0
- package/dist/core/verified-run/evidence-read-projection.js +27 -0
- package/dist/core/verified-run/evidence-read-projection.js.map +1 -0
- package/dist/core/verified-run/evidence.d.ts +12 -1
- package/dist/core/verified-run/evidence.d.ts.map +1 -1
- package/dist/core/verified-run/evidence.js +51 -2
- package/dist/core/verified-run/evidence.js.map +1 -1
- package/dist/core/verified-run/git-candidate-preflight.d.ts +4 -0
- package/dist/core/verified-run/git-candidate-preflight.d.ts.map +1 -0
- package/dist/core/verified-run/git-candidate-preflight.js +34 -0
- package/dist/core/verified-run/git-candidate-preflight.js.map +1 -0
- package/dist/core/verified-run/git-effect-supervisor.d.ts +24 -0
- package/dist/core/verified-run/git-effect-supervisor.d.ts.map +1 -0
- package/dist/core/verified-run/git-effect-supervisor.js +174 -0
- package/dist/core/verified-run/git-effect-supervisor.js.map +1 -0
- package/dist/core/verified-run/git-execution.d.ts +27 -0
- package/dist/core/verified-run/git-execution.d.ts.map +1 -0
- package/dist/core/verified-run/git-execution.js +118 -0
- package/dist/core/verified-run/git-execution.js.map +1 -0
- package/dist/core/verified-run/git-plumbing.d.ts +37 -0
- package/dist/core/verified-run/git-plumbing.d.ts.map +1 -0
- package/dist/core/verified-run/git-plumbing.js +171 -0
- package/dist/core/verified-run/git-plumbing.js.map +1 -0
- package/dist/core/verified-run/git-publication-worker.d.ts +2 -0
- package/dist/core/verified-run/git-publication-worker.d.ts.map +1 -0
- package/dist/core/verified-run/git-publication-worker.js +54 -0
- package/dist/core/verified-run/git-publication-worker.js.map +1 -0
- package/dist/core/verified-run/git-sandbox-layout.d.ts +4 -0
- package/dist/core/verified-run/git-sandbox-layout.d.ts.map +1 -0
- package/dist/core/verified-run/git-sandbox-layout.js +29 -0
- package/dist/core/verified-run/git-sandbox-layout.js.map +1 -0
- package/dist/core/verified-run/git-worker-protocol.d.ts +19 -0
- package/dist/core/verified-run/git-worker-protocol.d.ts.map +1 -0
- package/dist/core/verified-run/git-worker-protocol.js +109 -0
- package/dist/core/verified-run/git-worker-protocol.js.map +1 -0
- package/dist/core/verified-run/git-worker-runtime.d.ts +19 -0
- package/dist/core/verified-run/git-worker-runtime.d.ts.map +1 -0
- package/dist/core/verified-run/git-worker-runtime.js +74 -0
- package/dist/core/verified-run/git-worker-runtime.js.map +1 -0
- package/dist/core/verified-run/journal.d.ts +2 -3
- package/dist/core/verified-run/journal.d.ts.map +1 -1
- package/dist/core/verified-run/journal.js.map +1 -1
- package/dist/core/verified-run/namespace-identity.d.ts.map +1 -1
- package/dist/core/verified-run/namespace-identity.js +1 -1
- package/dist/core/verified-run/namespace-identity.js.map +1 -1
- package/dist/core/verified-run/owned-execution.d.ts +10 -1
- package/dist/core/verified-run/owned-execution.d.ts.map +1 -1
- package/dist/core/verified-run/owned-execution.js +124 -31
- package/dist/core/verified-run/owned-execution.js.map +1 -1
- package/dist/core/verified-run/phase-context.d.ts +2 -0
- package/dist/core/verified-run/phase-context.d.ts.map +1 -1
- package/dist/core/verified-run/phase-context.js.map +1 -1
- package/dist/core/verified-run/projection.d.ts.map +1 -1
- package/dist/core/verified-run/projection.js +51 -1
- package/dist/core/verified-run/projection.js.map +1 -1
- package/dist/core/verified-run/publish-preflight.d.ts +12 -0
- package/dist/core/verified-run/publish-preflight.d.ts.map +1 -0
- package/dist/core/verified-run/publish-preflight.js +38 -0
- package/dist/core/verified-run/publish-preflight.js.map +1 -0
- package/dist/core/verified-run/publish-start.d.ts +5 -0
- package/dist/core/verified-run/publish-start.d.ts.map +1 -0
- package/dist/core/verified-run/publish-start.js +7 -0
- package/dist/core/verified-run/publish-start.js.map +1 -0
- package/dist/core/verified-run/recovery-projection.d.ts.map +1 -1
- package/dist/core/verified-run/recovery-projection.js +5 -0
- package/dist/core/verified-run/recovery-projection.js.map +1 -1
- package/dist/core/verified-run/recovery.d.ts +5 -1
- package/dist/core/verified-run/recovery.d.ts.map +1 -1
- package/dist/core/verified-run/recovery.js +10 -4
- package/dist/core/verified-run/recovery.js.map +1 -1
- package/dist/core/verified-run/run-plan.d.ts +17 -0
- package/dist/core/verified-run/run-plan.d.ts.map +1 -0
- package/dist/core/verified-run/run-plan.js +18 -0
- package/dist/core/verified-run/run-plan.js.map +1 -0
- package/dist/core/verified-run/run-publish-owned.d.ts +6 -0
- package/dist/core/verified-run/run-publish-owned.d.ts.map +1 -0
- package/dist/core/verified-run/run-publish-owned.js +199 -0
- package/dist/core/verified-run/run-publish-owned.js.map +1 -0
- package/dist/core/verified-run/run-publish.d.ts +19 -0
- package/dist/core/verified-run/run-publish.d.ts.map +1 -0
- package/dist/core/verified-run/run-publish.js +210 -0
- package/dist/core/verified-run/run-publish.js.map +1 -0
- package/dist/core/verified-run/run-status-owned.d.ts +4 -0
- package/dist/core/verified-run/run-status-owned.d.ts.map +1 -0
- package/dist/core/verified-run/run-status-owned.js +14 -0
- package/dist/core/verified-run/run-status-owned.js.map +1 -0
- package/dist/core/verified-run/run-status.d.ts +133 -0
- package/dist/core/verified-run/run-status.d.ts.map +1 -0
- package/dist/core/verified-run/run-status.js +193 -0
- package/dist/core/verified-run/run-status.js.map +1 -0
- package/dist/core/verified-run/run-types.d.ts +31 -0
- package/dist/core/verified-run/run-types.d.ts.map +1 -1
- package/dist/core/verified-run/run-types.js.map +1 -1
- package/dist/core/verified-run/storage.d.ts.map +1 -1
- package/dist/core/verified-run/storage.js +1 -1
- package/dist/core/verified-run/storage.js.map +1 -1
- package/dist/core/verified-run/supervisor-adapter.d.ts +77 -0
- package/dist/core/verified-run/supervisor-adapter.d.ts.map +1 -0
- package/dist/core/verified-run/supervisor-adapter.js +164 -0
- package/dist/core/verified-run/supervisor-adapter.js.map +1 -0
- package/dist/core/verified-run/verification-phase.d.ts.map +1 -1
- package/dist/core/verified-run/verification-phase.js +1 -1
- package/dist/core/verified-run/verification-phase.js.map +1 -1
- package/dist/core/verified-run/writer-phase.d.ts.map +1 -1
- package/dist/core/verified-run/writer-phase.js +1 -0
- package/dist/core/verified-run/writer-phase.js.map +1 -1
- package/dist/core/verified-run/writer-recovery.d.ts +2 -0
- package/dist/core/verified-run/writer-recovery.d.ts.map +1 -1
- package/dist/core/verified-run/writer-recovery.js +1 -0
- package/dist/core/verified-run/writer-recovery.js.map +1 -1
- package/dist/core/workload-shard-execution-types.d.ts +4 -1
- package/dist/core/workload-shard-execution-types.d.ts.map +1 -1
- package/dist/core/workload-shard-execution-types.js.map +1 -1
- package/dist/core/workload-shard-executor.d.ts +2 -2
- package/dist/core/workload-shard-executor.d.ts.map +1 -1
- package/dist/core/workload-shard-executor.js +16 -37
- package/dist/core/workload-shard-executor.js.map +1 -1
- package/dist/core/workload-shard-frontier.d.ts +5 -0
- package/dist/core/workload-shard-frontier.d.ts.map +1 -0
- package/dist/core/workload-shard-frontier.js +47 -0
- package/dist/core/workload-shard-frontier.js.map +1 -0
- package/dist/core/workload-shard-runner.d.ts.map +1 -1
- package/dist/core/workload-shard-runner.js +28 -17
- package/dist/core/workload-shard-runner.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/metacognition/bridge-result.d.ts +148 -0
- package/dist/metacognition/bridge-result.d.ts.map +1 -0
- package/dist/metacognition/bridge-result.js +46 -0
- package/dist/metacognition/bridge-result.js.map +1 -0
- package/dist/metacognition/calibration-selective.d.ts.map +1 -1
- package/dist/metacognition/calibration-selective.js +8 -2
- package/dist/metacognition/calibration-selective.js.map +1 -1
- package/dist/metacognition/index.d.ts +1 -0
- package/dist/metacognition/index.d.ts.map +1 -1
- package/dist/metacognition/index.js +1 -0
- package/dist/metacognition/index.js.map +1 -1
- package/dist/metacognition/risk.d.ts.map +1 -1
- package/dist/metacognition/risk.js +28 -14
- package/dist/metacognition/risk.js.map +1 -1
- package/dist/metacognition/runtime-bridge.d.ts +41 -14
- package/dist/metacognition/runtime-bridge.d.ts.map +1 -1
- package/dist/metacognition/runtime-bridge.js +357 -39
- package/dist/metacognition/runtime-bridge.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +42 -26
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-container.d.ts +7 -0
- package/dist/modes/interactive/components/chat-container.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-container.js +14 -0
- package/dist/modes/interactive/components/chat-container.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +4 -2
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +0 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-async-search.d.ts +33 -0
- package/dist/modes/interactive/components/session-selector-async-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-async-search.js +109 -0
- package/dist/modes/interactive/components/session-selector-async-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-loaders.d.ts +6 -0
- package/dist/modes/interactive/components/session-selector-loaders.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-loaders.js +9 -0
- package/dist/modes/interactive/components/session-selector-loaders.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-tree.d.ts +16 -0
- package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-tree.js +46 -0
- package/dist/modes/interactive/components/session-selector-tree.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +6 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +36 -76
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution-images.d.ts +32 -0
- package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution-images.js +144 -0
- package/dist/modes/interactive/components/tool-execution-images.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +3 -4
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +22 -71
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +7 -9
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tui-diagnostics.d.ts +8 -4
- package/dist/modes/interactive/tui-diagnostics.d.ts.map +1 -1
- package/dist/modes/interactive/tui-diagnostics.js +35 -1
- package/dist/modes/interactive/tui-diagnostics.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +14 -17
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-response.d.ts +5 -0
- package/dist/modes/rpc/rpc-response.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-response.js +17 -0
- package/dist/modes/rpc/rpc-response.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js +2 -3
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +3 -5
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/adaptorch-preview-spec.md +7 -7
- package/docs/atomic-commit-planning.md +69 -0
- package/docs/compaction.md +26 -1
- package/docs/extensions.md +14 -0
- package/docs/mcp.md +22 -0
- package/docs/metacognition.md +79 -0
- package/docs/model-catalog-refresh.md +159 -1
- package/docs/models.md +1 -1
- package/docs/runtime-algorithms.md +49 -4
- package/docs/session-format.md +8 -0
- package/docs/sessions.md +19 -0
- package/docs/skills.md +19 -0
- package/docs/terminal-setup.md +15 -0
- package/docs/tui.md +41 -0
- package/docs/verified-run-safety.md +75 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +18 -18
- package/package.json +6 -8
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { type EffectState, type GrantToken, type ResourceClaim, type Sequence } from "../../coordination/types.ts";
|
|
2
|
+
import type { NamespaceIdentity } from "./namespace-identity.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Durable authority event contract (WP03).
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `schemas/supervisor-event.schema.json` plus the review-required
|
|
7
|
+
* extensions: `authority-epoch-advanced` (S4), `authorization-expired` (S5),
|
|
8
|
+
* `session-registered` (S2), `result-retained` (S3 tombstone), and
|
|
9
|
+
* `authority-snapshot` (GC archive boundary, §7). Quarantine reasons are
|
|
10
|
+
* carried on the transition event that caused them — `cancel-requested` /
|
|
11
|
+
* `authorization-expired` / `authority-epoch-advanced` transitions — so a
|
|
12
|
+
* replay can distinguish cancel from expiry from restart (S5).
|
|
13
|
+
*/
|
|
14
|
+
export interface AuthorityEpochTransition {
|
|
15
|
+
readonly grantSequence: Sequence;
|
|
16
|
+
readonly outcome: "cancelled" | "quarantined";
|
|
17
|
+
}
|
|
18
|
+
export interface AuthorityGrantRecord {
|
|
19
|
+
readonly token: GrantToken;
|
|
20
|
+
/** Idempotency key supplied by the caller; unique across grants and tombstones. */
|
|
21
|
+
readonly commandId: string;
|
|
22
|
+
readonly intentDigest: string;
|
|
23
|
+
/** Reserved claims (S6: distinct from `actualClaims` bound at effect-started). */
|
|
24
|
+
readonly claims: readonly ResourceClaim[];
|
|
25
|
+
readonly weight: number;
|
|
26
|
+
readonly state: EffectState;
|
|
27
|
+
readonly effectLive: boolean;
|
|
28
|
+
readonly dispatchId: string | null;
|
|
29
|
+
readonly actualClaims: readonly ResourceClaim[] | null;
|
|
30
|
+
readonly identity: NamespaceIdentity | null;
|
|
31
|
+
}
|
|
32
|
+
export interface AuthorityTombstone {
|
|
33
|
+
readonly commandId: string;
|
|
34
|
+
readonly grantSequence: Sequence;
|
|
35
|
+
readonly resultDigest: string;
|
|
36
|
+
readonly retainedAtMs: number;
|
|
37
|
+
readonly expiresAtMs: number;
|
|
38
|
+
}
|
|
39
|
+
export interface AuthoritySnapshotState {
|
|
40
|
+
readonly epoch: Sequence;
|
|
41
|
+
readonly reconciledEpoch: Sequence | null;
|
|
42
|
+
readonly incarnations: readonly {
|
|
43
|
+
readonly sessionId: string;
|
|
44
|
+
readonly incarnation: Sequence;
|
|
45
|
+
}[];
|
|
46
|
+
readonly grantCounter: Sequence;
|
|
47
|
+
readonly grants: readonly AuthorityGrantRecord[];
|
|
48
|
+
readonly tombstones: readonly AuthorityTombstone[];
|
|
49
|
+
}
|
|
50
|
+
export type AuthorityEvent = {
|
|
51
|
+
readonly kind: "authority-epoch-advanced";
|
|
52
|
+
readonly authorityEpoch: Sequence;
|
|
53
|
+
readonly writerId: string;
|
|
54
|
+
readonly transitions: readonly AuthorityEpochTransition[];
|
|
55
|
+
} | {
|
|
56
|
+
readonly kind: "authority-reconciled";
|
|
57
|
+
readonly authorityEpoch: Sequence;
|
|
58
|
+
} | {
|
|
59
|
+
readonly kind: "session-registered";
|
|
60
|
+
readonly sessionId: string;
|
|
61
|
+
readonly incarnation: Sequence;
|
|
62
|
+
} | {
|
|
63
|
+
readonly kind: "grant-reserved";
|
|
64
|
+
readonly grant: AuthorityGrantRecord;
|
|
65
|
+
} | {
|
|
66
|
+
readonly kind: "dispatch-intent";
|
|
67
|
+
readonly grantSequence: Sequence;
|
|
68
|
+
readonly authorityEpoch: Sequence;
|
|
69
|
+
readonly dispatchId: string;
|
|
70
|
+
} | {
|
|
71
|
+
readonly kind: "effect-started";
|
|
72
|
+
readonly grantSequence: Sequence;
|
|
73
|
+
readonly authorityEpoch: Sequence;
|
|
74
|
+
readonly actualClaims: readonly ResourceClaim[];
|
|
75
|
+
readonly identity?: NamespaceIdentity;
|
|
76
|
+
} | {
|
|
77
|
+
readonly kind: "cancel-requested";
|
|
78
|
+
readonly grantSequence: Sequence;
|
|
79
|
+
readonly authorityEpoch: Sequence;
|
|
80
|
+
readonly outcome: "cancelled" | "quarantined";
|
|
81
|
+
} | {
|
|
82
|
+
readonly kind: "authorization-expired";
|
|
83
|
+
readonly grantSequence: Sequence;
|
|
84
|
+
readonly authorityEpoch: Sequence;
|
|
85
|
+
readonly outcome: "cancelled" | "quarantined";
|
|
86
|
+
} | {
|
|
87
|
+
readonly kind: "quarantined";
|
|
88
|
+
readonly grantSequence: Sequence;
|
|
89
|
+
readonly authorityEpoch: Sequence;
|
|
90
|
+
readonly reason: "restart";
|
|
91
|
+
} | {
|
|
92
|
+
readonly kind: "termination-observed";
|
|
93
|
+
readonly grantSequence: Sequence;
|
|
94
|
+
readonly authorityEpoch: Sequence;
|
|
95
|
+
} | {
|
|
96
|
+
readonly kind: "result-retained";
|
|
97
|
+
readonly commandId: string;
|
|
98
|
+
readonly grantSequence: Sequence;
|
|
99
|
+
readonly resultDigest: string;
|
|
100
|
+
readonly retainedAtMs: number;
|
|
101
|
+
readonly expiresAtMs: number;
|
|
102
|
+
} | {
|
|
103
|
+
readonly kind: "authority-snapshot";
|
|
104
|
+
readonly archivedThroughSequence: number;
|
|
105
|
+
readonly continuesHash: string;
|
|
106
|
+
readonly state: AuthoritySnapshotState;
|
|
107
|
+
};
|
|
108
|
+
export interface AuthorityProjection {
|
|
109
|
+
readonly epoch: Sequence | null;
|
|
110
|
+
readonly reconciledEpoch: Sequence | null;
|
|
111
|
+
readonly incarnations: ReadonlyMap<string, Sequence>;
|
|
112
|
+
readonly grantCounter: Sequence;
|
|
113
|
+
readonly grants: ReadonlyMap<Sequence, AuthorityGrantRecord>;
|
|
114
|
+
readonly tombstones: ReadonlyMap<string, AuthorityTombstone>;
|
|
115
|
+
}
|
|
116
|
+
/** A restart that bumped the epoch but never finished reconciliation stays pending. */
|
|
117
|
+
export declare function authorityPendingReconcile(state: AuthorityProjection): boolean;
|
|
118
|
+
export declare function parseAuthorityEvent(raw: unknown): AuthorityEvent;
|
|
119
|
+
/** Deterministic replay over a seeded (post-snapshot) state. */
|
|
120
|
+
export declare function projectAuthority(events: readonly AuthorityEvent[], seed?: AuthoritySnapshotState): AuthorityProjection;
|
|
121
|
+
/** Grants still holding claims — quarantined included (broker parity). */
|
|
122
|
+
export declare function activeAuthorityGrants(state: AuthorityProjection): readonly AuthorityGrantRecord[];
|
|
123
|
+
/** Apply additional events to an existing projection (commit-time validation replay). */
|
|
124
|
+
export declare function applyAuthorityEvents(base: AuthorityProjection, events: readonly AuthorityEvent[]): AuthorityProjection;
|
|
125
|
+
export declare function snapshotFromProjection(state: AuthorityProjection): AuthoritySnapshotState;
|
|
126
|
+
//# sourceMappingURL=authority-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authority-events.d.ts","sourceRoot":"","sources":["../../../src/core/verified-run/authority-events.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalClaim, claimSetsConflict, type ResourceClaimInput } from \"../../coordination/resource.ts\";\nimport {\n\ttype EffectState,\n\ttype GrantToken,\n\ttype ResourceClaim,\n\tSETTLED_EFFECT_STATES,\n\ttype Sequence,\n\tsequence,\n} from \"../../coordination/types.ts\";\nimport type { NamespaceIdentity } from \"./namespace-identity.ts\";\nimport { parseNamespaceIdentity } from \"./namespace-identity.ts\";\nimport { VerifiedRunError } from \"./storage.ts\";\n\n/**\n * Durable authority event contract (WP03).\n *\n * Mirrors `schemas/supervisor-event.schema.json` plus the review-required\n * extensions: `authority-epoch-advanced` (S4), `authorization-expired` (S5),\n * `session-registered` (S2), `result-retained` (S3 tombstone), and\n * `authority-snapshot` (GC archive boundary, §7). Quarantine reasons are\n * carried on the transition event that caused them — `cancel-requested` /\n * `authorization-expired` / `authority-epoch-advanced` transitions — so a\n * replay can distinguish cancel from expiry from restart (S5).\n */\n\nexport interface AuthorityEpochTransition {\n\treadonly grantSequence: Sequence;\n\treadonly outcome: \"cancelled\" | \"quarantined\";\n}\n\nexport interface AuthorityGrantRecord {\n\treadonly token: GrantToken;\n\t/** Idempotency key supplied by the caller; unique across grants and tombstones. */\n\treadonly commandId: string;\n\treadonly intentDigest: string;\n\t/** Reserved claims (S6: distinct from `actualClaims` bound at effect-started). */\n\treadonly claims: readonly ResourceClaim[];\n\treadonly weight: number;\n\treadonly state: EffectState;\n\treadonly effectLive: boolean;\n\treadonly dispatchId: string | null;\n\treadonly actualClaims: readonly ResourceClaim[] | null;\n\treadonly identity: NamespaceIdentity | null;\n}\n\nexport interface AuthorityTombstone {\n\treadonly commandId: string;\n\treadonly grantSequence: Sequence;\n\treadonly resultDigest: string;\n\treadonly retainedAtMs: number;\n\treadonly expiresAtMs: number;\n}\n\nexport interface AuthoritySnapshotState {\n\treadonly epoch: Sequence;\n\treadonly reconciledEpoch: Sequence | null;\n\treadonly incarnations: readonly { readonly sessionId: string; readonly incarnation: Sequence }[];\n\treadonly grantCounter: Sequence;\n\treadonly grants: readonly AuthorityGrantRecord[];\n\treadonly tombstones: readonly AuthorityTombstone[];\n}\n\nexport type AuthorityEvent =\n\t| {\n\t\t\treadonly kind: \"authority-epoch-advanced\";\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly writerId: string;\n\t\t\treadonly transitions: readonly AuthorityEpochTransition[];\n\t }\n\t| { readonly kind: \"authority-reconciled\"; readonly authorityEpoch: Sequence }\n\t| { readonly kind: \"session-registered\"; readonly sessionId: string; readonly incarnation: Sequence }\n\t| { readonly kind: \"grant-reserved\"; readonly grant: AuthorityGrantRecord }\n\t| {\n\t\t\treadonly kind: \"dispatch-intent\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly dispatchId: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"effect-started\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly actualClaims: readonly ResourceClaim[];\n\t\t\treadonly identity?: NamespaceIdentity;\n\t }\n\t| {\n\t\t\treadonly kind: \"cancel-requested\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly outcome: \"cancelled\" | \"quarantined\";\n\t }\n\t| {\n\t\t\treadonly kind: \"authorization-expired\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly outcome: \"cancelled\" | \"quarantined\";\n\t }\n\t| {\n\t\t\treadonly kind: \"quarantined\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t\t\treadonly reason: \"restart\";\n\t }\n\t| {\n\t\t\treadonly kind: \"termination-observed\";\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly authorityEpoch: Sequence;\n\t }\n\t| {\n\t\t\treadonly kind: \"result-retained\";\n\t\t\treadonly commandId: string;\n\t\t\treadonly grantSequence: Sequence;\n\t\t\treadonly resultDigest: string;\n\t\t\treadonly retainedAtMs: number;\n\t\t\treadonly expiresAtMs: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"authority-snapshot\";\n\t\t\treadonly archivedThroughSequence: number;\n\t\t\treadonly continuesHash: string;\n\t\t\treadonly state: AuthoritySnapshotState;\n\t };\n\nexport interface AuthorityProjection {\n\treadonly epoch: Sequence | null;\n\treadonly reconciledEpoch: Sequence | null;\n\treadonly incarnations: ReadonlyMap<string, Sequence>;\n\treadonly grantCounter: Sequence;\n\treadonly grants: ReadonlyMap<Sequence, AuthorityGrantRecord>;\n\treadonly tombstones: ReadonlyMap<string, AuthorityTombstone>;\n}\n\ninterface MutableAuthorityProjection {\n\tepoch: Sequence | null;\n\treconciledEpoch: Sequence | null;\n\tincarnations: Map<string, Sequence>;\n\tgrantCounter: Sequence;\n\tgrants: Map<Sequence, AuthorityGrantRecord>;\n\ttombstones: Map<string, AuthorityTombstone>;\n}\n\n/** A restart that bumped the epoch but never finished reconciliation stays pending. */\nexport function authorityPendingReconcile(state: AuthorityProjection): boolean {\n\treturn state.reconciledEpoch !== state.epoch;\n}\n\nfunction text(value: unknown): string {\n\tif (typeof value !== \"string\" || !/^[A-Za-z0-9_-]{1,128}$/.test(value)) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\n\n/** bootId:pid style writer labels — looser than `text` but still bounded and printable. */\nfunction writerLabel(value: unknown): string {\n\tif (typeof value !== \"string\" || !/^[A-Za-z0-9_.:-]{1,160}$/.test(value)) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\n\nfunction digest(value: unknown): string {\n\tconst result = text(value);\n\tif (!/^[a-f0-9]{64}$/.test(result)) throw new VerifiedRunError(\"integrity\");\n\treturn result;\n}\n\nfunction integer(value: unknown): number {\n\tif (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) throw new VerifiedRunError(\"integrity\");\n\treturn value;\n}\n\nfunction seq(value: unknown): Sequence {\n\ttry {\n\t\treturn sequence(value);\n\t} catch {\n\t\tthrow new VerifiedRunError(\"integrity\");\n\t}\n}\n\nfunction nextSeq(value: Sequence): Sequence {\n\treturn sequence(String(BigInt(value) + 1n));\n}\n\nfunction claim(raw: unknown): ResourceClaim {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\ttry {\n\t\treturn canonicalClaim(value as unknown as ResourceClaimInput);\n\t} catch {\n\t\tthrow new VerifiedRunError(\"integrity\");\n\t}\n}\n\nfunction claimList(raw: unknown, limit = 256): readonly ResourceClaim[] {\n\tif (!Array.isArray(raw) || raw.length === 0 || raw.length > limit) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze(raw.map(claim));\n}\n\nfunction token(raw: unknown): GrantToken {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\treturn Object.freeze({\n\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\tgrantSequence: seq(value.grantSequence),\n\t\tsessionId: text(value.sessionId),\n\t\tsessionIncarnation: seq(value.sessionIncarnation),\n\t\tauthorizationDeadline: integer(value.authorizationDeadline),\n\t});\n}\n\nconst GRANT_STATES: ReadonlySet<string> = new Set([\n\t\"reserved\",\n\t\"starting\",\n\t\"running\",\n\t\"terminating\",\n\t\"quarantined\",\n\t\"terminated\",\n\t\"cancelled\",\n]);\n\nfunction grantRecord(raw: unknown): AuthorityGrantRecord {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tif (typeof value.state !== \"string\" || !GRANT_STATES.has(value.state)) throw new VerifiedRunError(\"integrity\");\n\tif (typeof value.effectLive !== \"boolean\") throw new VerifiedRunError(\"integrity\");\n\tif (SETTLED_EFFECT_STATES.has(value.state as EffectState) && value.effectLive)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tif (value.state === \"quarantined\" && !value.effectLive) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\ttoken: token(value.token),\n\t\tcommandId: text(value.commandId),\n\t\tintentDigest: digest(value.intentDigest),\n\t\tclaims: claimList(value.claims),\n\t\tweight: integer(value.weight),\n\t\tstate: value.state as EffectState,\n\t\teffectLive: value.effectLive,\n\t\tdispatchId: value.dispatchId === null ? null : text(value.dispatchId),\n\t\tactualClaims: value.actualClaims === null ? null : claimList(value.actualClaims),\n\t\tidentity: value.identity === null ? null : parseNamespaceIdentity(value.identity),\n\t});\n}\n\nfunction tombstone(raw: unknown): AuthorityTombstone {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tconst retainedAtMs = integer(value.retainedAtMs);\n\tconst expiresAtMs = integer(value.expiresAtMs);\n\tif (expiresAtMs <= retainedAtMs) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\tcommandId: text(value.commandId),\n\t\tgrantSequence: seq(value.grantSequence),\n\t\tresultDigest: digest(value.resultDigest),\n\t\tretainedAtMs,\n\t\texpiresAtMs,\n\t});\n}\n\nfunction snapshotState(raw: unknown): AuthoritySnapshotState {\n\tif (typeof raw !== \"object\" || raw === null) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tif (!Array.isArray(value.incarnations) || !Array.isArray(value.grants) || !Array.isArray(value.tombstones))\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tconst grants = value.grants.map(grantRecord);\n\tconst tombstones = value.tombstones.map(tombstone);\n\tconst sequences = new Set(grants.map((grant) => grant.token.grantSequence));\n\tif (sequences.size !== grants.length) throw new VerifiedRunError(\"integrity\");\n\t// grant commandIds are unique among grants; tombstone commandIds among\n\t// tombstones; a tombstone always references a retained grant (GC drops the\n\t// expired tombstone+grant pair together).\n\tif (new Set(grants.map((grant) => grant.commandId)).size !== grants.length) throw new VerifiedRunError(\"integrity\");\n\tif (new Set(tombstones.map((stone) => stone.commandId)).size !== tombstones.length)\n\t\tthrow new VerifiedRunError(\"integrity\");\n\tfor (const stone of tombstones) if (!sequences.has(stone.grantSequence)) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\tepoch: seq(value.epoch),\n\t\treconciledEpoch: value.reconciledEpoch === null ? null : seq(value.reconciledEpoch),\n\t\tincarnations: Object.freeze(\n\t\t\tvalue.incarnations.map((entry: unknown) => {\n\t\t\t\tif (typeof entry !== \"object\" || entry === null) throw new VerifiedRunError(\"integrity\");\n\t\t\t\tconst item: Record<string, unknown> = Object.fromEntries(Object.entries(entry));\n\t\t\t\treturn Object.freeze({ sessionId: text(item.sessionId), incarnation: seq(item.incarnation) });\n\t\t\t}),\n\t\t),\n\t\tgrantCounter: seq(value.grantCounter),\n\t\tgrants: Object.freeze(grants),\n\t\ttombstones: Object.freeze(tombstones),\n\t});\n}\n\nexport function parseAuthorityEvent(raw: unknown): AuthorityEvent {\n\tif (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) throw new VerifiedRunError(\"integrity\");\n\tconst value: Record<string, unknown> = Object.fromEntries(Object.entries(raw));\n\tswitch (value.kind) {\n\t\tcase \"authority-epoch-advanced\": {\n\t\t\tif (!Array.isArray(value.transitions) || value.transitions.length > 4096)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tconst transitions = value.transitions.map((entry: unknown) => {\n\t\t\t\tif (typeof entry !== \"object\" || entry === null) throw new VerifiedRunError(\"integrity\");\n\t\t\t\tconst item: Record<string, unknown> = Object.fromEntries(Object.entries(entry));\n\t\t\t\tif (item.outcome !== \"cancelled\" && item.outcome !== \"quarantined\") throw new VerifiedRunError(\"integrity\");\n\t\t\t\treturn Object.freeze({ grantSequence: seq(item.grantSequence), outcome: item.outcome });\n\t\t\t});\n\t\t\tconst seen = new Set(transitions.map((entry) => entry.grantSequence));\n\t\t\tif (seen.size !== transitions.length) throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t\twriterId: writerLabel(value.writerId),\n\t\t\t\ttransitions: Object.freeze(transitions),\n\t\t\t};\n\t\t}\n\t\tcase \"authority-reconciled\":\n\t\t\treturn { kind: value.kind, authorityEpoch: seq(value.authorityEpoch) };\n\t\tcase \"session-registered\":\n\t\t\treturn { kind: value.kind, sessionId: text(value.sessionId), incarnation: seq(value.incarnation) };\n\t\tcase \"grant-reserved\":\n\t\t\treturn { kind: value.kind, grant: grantRecord(value.grant) };\n\t\tcase \"dispatch-intent\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t\tdispatchId: text(value.dispatchId),\n\t\t\t};\n\t\tcase \"effect-started\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t\tactualClaims: claimList(value.actualClaims),\n\t\t\t\t...(value.identity === undefined ? {} : { identity: parseNamespaceIdentity(value.identity) }),\n\t\t\t};\n\t\tcase \"cancel-requested\":\n\t\tcase \"authorization-expired\": {\n\t\t\tif (value.outcome !== \"cancelled\" && value.outcome !== \"quarantined\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t\toutcome: value.outcome,\n\t\t\t};\n\t\t}\n\t\tcase \"quarantined\":\n\t\t\tif (value.reason !== \"restart\") throw new VerifiedRunError(\"integrity\");\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t\treason: value.reason,\n\t\t\t};\n\t\tcase \"termination-observed\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tauthorityEpoch: seq(value.authorityEpoch),\n\t\t\t};\n\t\tcase \"result-retained\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tcommandId: text(value.commandId),\n\t\t\t\tgrantSequence: seq(value.grantSequence),\n\t\t\t\tresultDigest: digest(value.resultDigest),\n\t\t\t\tretainedAtMs: integer(value.retainedAtMs),\n\t\t\t\texpiresAtMs: integer(value.expiresAtMs),\n\t\t\t};\n\t\tcase \"authority-snapshot\":\n\t\t\treturn {\n\t\t\t\tkind: value.kind,\n\t\t\t\tarchivedThroughSequence: integer(value.archivedThroughSequence),\n\t\t\t\tcontinuesHash: digest(value.continuesHash),\n\t\t\t\tstate: snapshotState(value.state),\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t}\n}\n\nfunction reduceAuthorityEvent(state: MutableAuthorityProjection, event: AuthorityEvent): void {\n\tswitch (event.kind) {\n\t\tcase \"authority-epoch-advanced\": {\n\t\t\t// An epoch may only advance once the previous epoch reconciled. The\n\t\t\t// transition set must cover every unsettled grant exactly once (S4).\n\t\t\tif (authorityPendingReconcile(state)) throw new VerifiedRunError(\"integrity\");\n\t\t\tconst expected = nextSeq(state.epoch ?? sequence(\"0\"));\n\t\t\tif (event.authorityEpoch !== expected) throw new VerifiedRunError(\"integrity\");\n\t\t\tconst unsettled = new Set(\n\t\t\t\t[...state.grants.values()]\n\t\t\t\t\t.filter((grant) => !SETTLED_EFFECT_STATES.has(grant.state))\n\t\t\t\t\t.map((grant) => grant.token.grantSequence),\n\t\t\t);\n\t\t\tfor (const transition of event.transitions) {\n\t\t\t\tconst grant = state.grants.get(transition.grantSequence);\n\t\t\t\tif (!grant || !unsettled.has(transition.grantSequence)) throw new VerifiedRunError(\"integrity\");\n\t\t\t\tconst outcome = grant.effectLive ? \"quarantined\" : \"cancelled\";\n\t\t\t\tif (transition.outcome !== outcome) throw new VerifiedRunError(\"integrity\");\n\t\t\t\tstate.grants.set(transition.grantSequence, { ...grant, state: transition.outcome });\n\t\t\t\tunsettled.delete(transition.grantSequence);\n\t\t\t}\n\t\t\tif (unsettled.size !== 0) throw new VerifiedRunError(\"integrity\");\n\t\t\tstate.epoch = event.authorityEpoch;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"authority-reconciled\": {\n\t\t\tif (state.epoch === null || event.authorityEpoch !== state.epoch) throw new VerifiedRunError(\"integrity\");\n\t\t\tif (!authorityPendingReconcile(state)) throw new VerifiedRunError(\"integrity\");\n\t\t\tfor (const grant of state.grants.values())\n\t\t\t\tif (!SETTLED_EFFECT_STATES.has(grant.state) && grant.state !== \"quarantined\")\n\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tstate.reconciledEpoch = event.authorityEpoch;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"session-registered\": {\n\t\t\tconst current = state.incarnations.get(event.sessionId);\n\t\t\tconst expected = current === undefined ? sequence(\"1\") : nextSeq(current);\n\t\t\tif (event.incarnation !== expected) throw new VerifiedRunError(\"integrity\");\n\t\t\tstate.incarnations.set(event.sessionId, event.incarnation);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"grant-reserved\": {\n\t\t\tconst grant = event.grant;\n\t\t\tif (authorityPendingReconcile(state) || state.epoch === null) throw new VerifiedRunError(\"integrity\");\n\t\t\tif (\n\t\t\t\tgrant.state !== \"reserved\" ||\n\t\t\t\tgrant.effectLive ||\n\t\t\t\tgrant.dispatchId !== null ||\n\t\t\t\tgrant.actualClaims !== null ||\n\t\t\t\tgrant.identity !== null ||\n\t\t\t\tgrant.token.authorityEpoch !== state.epoch ||\n\t\t\t\tstate.incarnations.get(grant.token.sessionId) !== grant.token.sessionIncarnation ||\n\t\t\t\tgrant.token.grantSequence !== nextSeq(state.grantCounter) ||\n\t\t\t\tstate.grants.has(grant.token.grantSequence) ||\n\t\t\t\tstate.tombstones.has(grant.commandId) ||\n\t\t\t\t[...state.grants.values()].some((other) => other.commandId === grant.commandId) ||\n\t\t\t\t[...state.grants.values()].some(\n\t\t\t\t\t(other) =>\n\t\t\t\t\t\t!SETTLED_EFFECT_STATES.has(other.state) && claimSetsConflict([...grant.claims], [...other.claims]),\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tstate.grants.set(grant.token.grantSequence, grant);\n\t\t\tstate.grantCounter = grant.token.grantSequence;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"dispatch-intent\": {\n\t\t\tconst grant = state.grants.get(event.grantSequence);\n\t\t\tif (\n\t\t\t\t!grant ||\n\t\t\t\tgrant.state !== \"reserved\" ||\n\t\t\t\tgrant.token.authorityEpoch !== event.authorityEpoch ||\n\t\t\t\tevent.authorityEpoch !== state.epoch ||\n\t\t\t\t[...state.grants.values()].some((other) => other.dispatchId === event.dispatchId)\n\t\t\t)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t// A committed intent may already have spawned: the effect is possibly\n\t\t\t// live until a termination witness says otherwise (docs/04 uncertainty\n\t\t\t// window), so effectLive is set here, not at effect-started.\n\t\t\tstate.grants.set(event.grantSequence, {\n\t\t\t\t...grant,\n\t\t\t\tstate: \"starting\",\n\t\t\t\teffectLive: true,\n\t\t\t\tdispatchId: event.dispatchId,\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"effect-started\": {\n\t\t\tconst grant = state.grants.get(event.grantSequence);\n\t\t\tif (!grant || (grant.state !== \"reserved\" && grant.state !== \"starting\"))\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tif (event.authorityEpoch !== state.epoch || grant.token.authorityEpoch !== event.authorityEpoch)\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tif (event.identity !== undefined) {\n\t\t\t\tfor (const other of state.grants.values()) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tother.token.grantSequence !== event.grantSequence &&\n\t\t\t\t\t\t!SETTLED_EFFECT_STATES.has(other.state) &&\n\t\t\t\t\t\tother.identity &&\n\t\t\t\t\t\tother.identity.namespace === event.identity.namespace &&\n\t\t\t\t\t\tother.identity.pid === event.identity.pid &&\n\t\t\t\t\t\tother.identity.startTicks === event.identity.startTicks &&\n\t\t\t\t\t\tother.identity.bootId === event.identity.bootId\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.grants.set(event.grantSequence, {\n\t\t\t\t...grant,\n\t\t\t\tstate: \"running\",\n\t\t\t\teffectLive: true,\n\t\t\t\tactualClaims: event.actualClaims,\n\t\t\t\tidentity: event.identity ?? grant.identity,\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"cancel-requested\":\n\t\tcase \"authorization-expired\":\n\t\tcase \"quarantined\": {\n\t\t\tconst grant = state.grants.get(event.grantSequence);\n\t\t\tif (!grant || SETTLED_EFFECT_STATES.has(grant.state)) throw new VerifiedRunError(\"integrity\");\n\t\t\tif (event.authorityEpoch !== state.epoch) throw new VerifiedRunError(\"integrity\");\n\t\t\tif (event.kind === \"quarantined\") {\n\t\t\t\tif (!grant.effectLive || grant.state === \"quarantined\") throw new VerifiedRunError(\"integrity\");\n\t\t\t\tstate.grants.set(event.grantSequence, { ...grant, state: \"quarantined\" });\n\t\t\t} else {\n\t\t\t\tconst outcome = grant.effectLive ? \"quarantined\" : \"cancelled\";\n\t\t\t\tif (event.outcome !== outcome) throw new VerifiedRunError(\"integrity\");\n\t\t\t\tstate.grants.set(event.grantSequence, { ...grant, state: event.outcome });\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"termination-observed\": {\n\t\t\tconst grant = state.grants.get(event.grantSequence);\n\t\t\tif (!grant || SETTLED_EFFECT_STATES.has(grant.state)) throw new VerifiedRunError(\"integrity\");\n\t\t\tstate.grants.set(event.grantSequence, { ...grant, effectLive: false, state: \"terminated\" });\n\t\t\tbreak;\n\t\t}\n\t\tcase \"result-retained\": {\n\t\t\tconst grant = state.grants.get(event.grantSequence);\n\t\t\tif (!grant || grant.commandId !== event.commandId) throw new VerifiedRunError(\"integrity\");\n\t\t\tif (event.expiresAtMs <= event.retainedAtMs || state.tombstones.has(event.commandId))\n\t\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\t\tstate.tombstones.set(\n\t\t\t\tevent.commandId,\n\t\t\t\tObject.freeze({\n\t\t\t\t\tcommandId: event.commandId,\n\t\t\t\t\tgrantSequence: event.grantSequence,\n\t\t\t\t\tresultDigest: event.resultDigest,\n\t\t\t\t\tretainedAtMs: event.retainedAtMs,\n\t\t\t\t\texpiresAtMs: event.expiresAtMs,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"authority-snapshot\":\n\t\t\t// Snapshots are archive boundaries, not stream events; the loader seeds\n\t\t\t// from them directly and rejects them mid-stream.\n\t\t\tthrow new VerifiedRunError(\"integrity\");\n\t\tdefault: {\n\t\t\tconst exhaustive: never = event;\n\t\t\tthrow new VerifiedRunError(String(exhaustive));\n\t\t}\n\t}\n}\n\n/** Deterministic replay over a seeded (post-snapshot) state. */\nexport function projectAuthority(\n\tevents: readonly AuthorityEvent[],\n\tseed?: AuthoritySnapshotState,\n): AuthorityProjection {\n\tconst state: MutableAuthorityProjection = seed\n\t\t? {\n\t\t\t\tepoch: seed.epoch,\n\t\t\t\treconciledEpoch: seed.reconciledEpoch,\n\t\t\t\tincarnations: new Map(seed.incarnations.map((entry) => [entry.sessionId, entry.incarnation])),\n\t\t\t\tgrantCounter: seed.grantCounter,\n\t\t\t\tgrants: new Map(seed.grants.map((grant) => [grant.token.grantSequence, grant])),\n\t\t\t\ttombstones: new Map(seed.tombstones.map((stone) => [stone.commandId, stone])),\n\t\t\t}\n\t\t: {\n\t\t\t\tepoch: null,\n\t\t\t\treconciledEpoch: null,\n\t\t\t\tincarnations: new Map(),\n\t\t\t\tgrantCounter: sequence(\"0\"),\n\t\t\t\tgrants: new Map(),\n\t\t\t\ttombstones: new Map(),\n\t\t\t};\n\tfor (const event of events) reduceAuthorityEvent(state, event);\n\treturn Object.freeze({\n\t\tepoch: state.epoch,\n\t\treconciledEpoch: state.reconciledEpoch,\n\t\tincarnations: state.incarnations,\n\t\tgrantCounter: state.grantCounter,\n\t\tgrants: state.grants,\n\t\ttombstones: state.tombstones,\n\t});\n}\n\n/** Grants still holding claims — quarantined included (broker parity). */\nexport function activeAuthorityGrants(state: AuthorityProjection): readonly AuthorityGrantRecord[] {\n\treturn [...state.grants.values()].filter((grant) => !SETTLED_EFFECT_STATES.has(grant.state));\n}\n\n/** Apply additional events to an existing projection (commit-time validation replay). */\nexport function applyAuthorityEvents(\n\tbase: AuthorityProjection,\n\tevents: readonly AuthorityEvent[],\n): AuthorityProjection {\n\tconst state: MutableAuthorityProjection = {\n\t\tepoch: base.epoch,\n\t\treconciledEpoch: base.reconciledEpoch,\n\t\tincarnations: new Map(base.incarnations),\n\t\tgrantCounter: base.grantCounter,\n\t\tgrants: new Map(base.grants),\n\t\ttombstones: new Map(base.tombstones),\n\t};\n\tfor (const event of events) reduceAuthorityEvent(state, event);\n\treturn Object.freeze({\n\t\tepoch: state.epoch,\n\t\treconciledEpoch: state.reconciledEpoch,\n\t\tincarnations: state.incarnations,\n\t\tgrantCounter: state.grantCounter,\n\t\tgrants: state.grants,\n\t\ttombstones: state.tombstones,\n\t});\n}\n\nexport function snapshotFromProjection(state: AuthorityProjection): AuthoritySnapshotState {\n\tif (state.epoch === null) throw new VerifiedRunError(\"integrity\");\n\treturn Object.freeze({\n\t\tepoch: state.epoch,\n\t\treconciledEpoch: state.reconciledEpoch,\n\t\tincarnations: Object.freeze(\n\t\t\t[...state.incarnations.entries()].map(([sessionId, incarnation]) => Object.freeze({ sessionId, incarnation })),\n\t\t),\n\t\tgrantCounter: state.grantCounter,\n\t\tgrants: Object.freeze([...state.grants.values()]),\n\t\ttombstones: Object.freeze([...state.tombstones.values()]),\n\t});\n}\n"]}
|