open-multi-agent-kit 1.0.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 +52 -1
- 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/help.d.ts.map +1 -1
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- 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/awareness.d.ts +32 -0
- package/dist/coordination/awareness.d.ts.map +1 -0
- package/dist/coordination/awareness.js +55 -0
- package/dist/coordination/awareness.js.map +1 -0
- package/dist/coordination/broker.d.ts +79 -0
- package/dist/coordination/broker.d.ts.map +1 -0
- package/dist/coordination/broker.js +202 -0
- package/dist/coordination/broker.js.map +1 -0
- package/dist/coordination/index.d.ts +16 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +16 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/integration.d.ts +59 -0
- package/dist/coordination/integration.d.ts.map +1 -0
- package/dist/coordination/integration.js +126 -0
- package/dist/coordination/integration.js.map +1 -0
- package/dist/coordination/operation.d.ts +107 -0
- package/dist/coordination/operation.d.ts.map +1 -0
- package/dist/coordination/operation.js +231 -0
- package/dist/coordination/operation.js.map +1 -0
- package/dist/coordination/resource.d.ts +33 -0
- package/dist/coordination/resource.d.ts.map +1 -0
- package/dist/coordination/resource.js +95 -0
- package/dist/coordination/resource.js.map +1 -0
- package/dist/coordination/session.d.ts +74 -0
- package/dist/coordination/session.d.ts.map +1 -0
- package/dist/coordination/session.js +143 -0
- package/dist/coordination/session.js.map +1 -0
- package/dist/coordination/types.d.ts +68 -0
- package/dist/coordination/types.d.ts.map +1 -0
- package/dist/coordination/types.js +26 -0
- package/dist/coordination/types.js.map +1 -0
- 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 +35 -15
- 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/control-state.d.ts +41 -0
- package/dist/core/compaction/control-state.d.ts.map +1 -0
- package/dist/core/compaction/control-state.js +85 -0
- package/dist/core/compaction/control-state.js.map +1 -0
- package/dist/core/compaction/fallback.d.ts +71 -0
- package/dist/core/compaction/fallback.d.ts.map +1 -0
- package/dist/core/compaction/fallback.js +118 -0
- package/dist/core/compaction/fallback.js.map +1 -0
- package/dist/core/compaction/index.d.ts +2 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +2 -0
- package/dist/core/compaction/index.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/context-budget-headroom-candidates.d.ts +16 -1
- package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-candidates.js +31 -13
- package/dist/core/context-budget-headroom-candidates.js.map +1 -1
- package/dist/core/context-budget-headroom-types.d.ts +7 -1
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-types.js +0 -1
- package/dist/core/context-budget-headroom-types.js.map +1 -1
- package/dist/core/context-budget-headroom.d.ts +10 -0
- package/dist/core/context-budget-headroom.d.ts.map +1 -1
- package/dist/core/context-budget-headroom.js +11 -2
- package/dist/core/context-budget-headroom.js.map +1 -1
- package/dist/core/context-budget-v2-global-pass.d.ts +21 -0
- package/dist/core/context-budget-v2-global-pass.d.ts.map +1 -0
- package/dist/core/context-budget-v2-global-pass.js +203 -0
- package/dist/core/context-budget-v2-global-pass.js.map +1 -0
- package/dist/core/context-budget-v2-planned-items.d.ts +12 -0
- package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -1
- package/dist/core/context-budget-v2-planned-items.js +21 -2
- package/dist/core/context-budget-v2-planned-items.js.map +1 -1
- package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
- package/dist/core/context-budget-v2-planner.js +18 -19
- package/dist/core/context-budget-v2-planner.js.map +1 -1
- package/dist/core/context-budget-v2-scoring.d.ts +7 -1
- package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
- package/dist/core/context-budget-v2-scoring.js.map +1 -1
- package/dist/core/context-budget-v2-selection.d.ts +3 -0
- package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
- package/dist/core/context-budget-v2-selection.js +6 -2
- package/dist/core/context-budget-v2-selection.js.map +1 -1
- package/dist/core/context-budget-v2-types.d.ts +6 -1
- package/dist/core/context-budget-v2-types.d.ts.map +1 -1
- package/dist/core/context-budget-v2-types.js +6 -1
- package/dist/core/context-budget-v2-types.js.map +1 -1
- 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-default-models.d.ts +1 -0
- package/dist/core/provider-default-models.d.ts.map +1 -1
- package/dist/core/provider-default-models.js +1 -0
- package/dist/core/provider-default-models.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- 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-resolver.d.ts +7 -0
- package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
- package/dist/core/reasoning-router-resolver.js +21 -3
- package/dist/core/reasoning-router-resolver.js.map +1 -1
- package/dist/core/reasoning-router-v4.d.ts +13 -7
- package/dist/core/reasoning-router-v4.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4.js +8 -5
- 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-compaction-service.d.ts +15 -0
- package/dist/core/session-compaction-service.d.ts.map +1 -1
- package/dist/core/session-compaction-service.js +17 -4
- package/dist/core/session-compaction-service.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/todo-runtime-state.d.ts +12 -0
- package/dist/core/todo-runtime-state.d.ts.map +1 -1
- package/dist/core/todo-runtime-state.js +23 -0
- package/dist/core/todo-runtime-state.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 +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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 +78 -0
- package/dist/metacognition/calibration-selective.d.ts.map +1 -0
- package/dist/metacognition/calibration-selective.js +167 -0
- package/dist/metacognition/calibration-selective.js.map +1 -0
- package/dist/metacognition/calibration.d.ts +62 -0
- package/dist/metacognition/calibration.d.ts.map +1 -0
- package/dist/metacognition/calibration.js +122 -0
- package/dist/metacognition/calibration.js.map +1 -0
- package/dist/metacognition/checkpoint.d.ts +60 -0
- package/dist/metacognition/checkpoint.d.ts.map +1 -0
- package/dist/metacognition/checkpoint.js +57 -0
- package/dist/metacognition/checkpoint.js.map +1 -0
- package/dist/metacognition/context7.d.ts +48 -0
- package/dist/metacognition/context7.d.ts.map +1 -0
- package/dist/metacognition/context7.js +154 -0
- package/dist/metacognition/context7.js.map +1 -0
- package/dist/metacognition/decision.d.ts +44 -0
- package/dist/metacognition/decision.d.ts.map +1 -0
- package/dist/metacognition/decision.js +111 -0
- package/dist/metacognition/decision.js.map +1 -0
- package/dist/metacognition/evaluation.d.ts +73 -0
- package/dist/metacognition/evaluation.d.ts.map +1 -0
- package/dist/metacognition/evaluation.js +97 -0
- package/dist/metacognition/evaluation.js.map +1 -0
- package/dist/metacognition/index.d.ts +32 -0
- package/dist/metacognition/index.d.ts.map +1 -0
- package/dist/metacognition/index.js +32 -0
- package/dist/metacognition/index.js.map +1 -0
- package/dist/metacognition/knowledge-action.d.ts +43 -0
- package/dist/metacognition/knowledge-action.d.ts.map +1 -0
- package/dist/metacognition/knowledge-action.js +60 -0
- package/dist/metacognition/knowledge-action.js.map +1 -0
- package/dist/metacognition/knowledge.d.ts +84 -0
- package/dist/metacognition/knowledge.d.ts.map +1 -0
- package/dist/metacognition/knowledge.js +165 -0
- package/dist/metacognition/knowledge.js.map +1 -0
- package/dist/metacognition/obligations.d.ts +82 -0
- package/dist/metacognition/obligations.d.ts.map +1 -0
- package/dist/metacognition/obligations.js +139 -0
- package/dist/metacognition/obligations.js.map +1 -0
- package/dist/metacognition/observation-validity.d.ts +83 -0
- package/dist/metacognition/observation-validity.d.ts.map +1 -0
- package/dist/metacognition/observation-validity.js +118 -0
- package/dist/metacognition/observation-validity.js.map +1 -0
- package/dist/metacognition/observe.d.ts +45 -0
- package/dist/metacognition/observe.d.ts.map +1 -0
- package/dist/metacognition/observe.js +59 -0
- package/dist/metacognition/observe.js.map +1 -0
- package/dist/metacognition/policy.d.ts +53 -0
- package/dist/metacognition/policy.d.ts.map +1 -0
- package/dist/metacognition/policy.js +155 -0
- package/dist/metacognition/policy.js.map +1 -0
- package/dist/metacognition/predictions.d.ts +78 -0
- package/dist/metacognition/predictions.d.ts.map +1 -0
- package/dist/metacognition/predictions.js +181 -0
- package/dist/metacognition/predictions.js.map +1 -0
- package/dist/metacognition/retrieval.d.ts +53 -0
- package/dist/metacognition/retrieval.d.ts.map +1 -0
- package/dist/metacognition/retrieval.js +170 -0
- package/dist/metacognition/retrieval.js.map +1 -0
- package/dist/metacognition/risk.d.ts +48 -0
- package/dist/metacognition/risk.d.ts.map +1 -0
- package/dist/metacognition/risk.js +179 -0
- package/dist/metacognition/risk.js.map +1 -0
- package/dist/metacognition/route-economics.d.ts +95 -0
- package/dist/metacognition/route-economics.d.ts.map +1 -0
- package/dist/metacognition/route-economics.js +110 -0
- package/dist/metacognition/route-economics.js.map +1 -0
- package/dist/metacognition/runtime-bridge.d.ts +81 -0
- package/dist/metacognition/runtime-bridge.d.ts.map +1 -0
- package/dist/metacognition/runtime-bridge.js +458 -0
- package/dist/metacognition/runtime-bridge.js.map +1 -0
- package/dist/metacognition/skills.d.ts +42 -0
- package/dist/metacognition/skills.d.ts.map +1 -0
- package/dist/metacognition/skills.js +220 -0
- package/dist/metacognition/skills.js.map +1 -0
- package/dist/metacognition/state.d.ts +110 -0
- package/dist/metacognition/state.d.ts.map +1 -0
- package/dist/metacognition/state.js +52 -0
- package/dist/metacognition/state.js.map +1 -0
- package/dist/metacognition/validation.d.ts +19 -0
- package/dist/metacognition/validation.d.ts.map +1 -0
- package/dist/metacognition/validation.js +58 -0
- package/dist/metacognition/validation.js.map +1 -0
- package/dist/metacognition/verification.d.ts +93 -0
- package/dist/metacognition/verification.d.ts.map +1 -0
- package/dist/metacognition/verification.js +132 -0
- package/dist/metacognition/verification.js.map +1 -0
- package/dist/metacognition/verifier.d.ts +49 -0
- package/dist/metacognition/verifier.d.ts.map +1 -0
- package/dist/metacognition/verifier.js +88 -0
- package/dist/metacognition/verifier.js.map +1 -0
- 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/observation/identity.d.ts +14 -0
- package/dist/observation/identity.d.ts.map +1 -0
- package/dist/observation/identity.js +29 -0
- package/dist/observation/identity.js.map +1 -0
- package/dist/observation/index.d.ts +13 -0
- package/dist/observation/index.d.ts.map +1 -0
- package/dist/observation/index.js +13 -0
- package/dist/observation/index.js.map +1 -0
- package/dist/observation/observe-mode.d.ts +46 -0
- package/dist/observation/observe-mode.d.ts.map +1 -0
- package/dist/observation/observe-mode.js +83 -0
- package/dist/observation/observe-mode.js.map +1 -0
- package/dist/observation/store.d.ts +53 -0
- package/dist/observation/store.d.ts.map +1 -0
- package/dist/observation/store.js +126 -0
- package/dist/observation/store.js.map +1 -0
- package/dist/observation/types.d.ts +72 -0
- package/dist/observation/types.d.ts.map +1 -0
- package/dist/observation/types.js +9 -0
- package/dist/observation/types.js.map +1 -0
- package/dist/observation/view.d.ts +39 -0
- package/dist/observation/view.d.ts.map +1 -0
- package/dist/observation/view.js +173 -0
- package/dist/observation/view.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 +130 -0
- package/docs/model-catalog-refresh.md +218 -1
- package/docs/models.md +1 -1
- package/docs/providers.md +53 -0
- package/docs/runtime-algorithms.md +156 -7
- 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,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime bridge — §13 "기존 완료 판정 호출부": projects host-owned OMK
|
|
3
|
+
* runtime artifacts (protocol ClaimGraph claims, ObservationNodes, waiver
|
|
4
|
+
* records, workspace/session facts) onto the metacognition kernel's input
|
|
5
|
+
* types.
|
|
6
|
+
*
|
|
7
|
+
* WP05 (docs/06_METACOGNITION_BRIDGE.md): every translation is loss-aware.
|
|
8
|
+
* Each claim and observation maps to `mapped`, `partial`, or `rejected`.
|
|
9
|
+
* What the previous mapper silently did — collapse claimIds to the first,
|
|
10
|
+
* force sequence 0, substitute checkId with receiptId/invalidation keys,
|
|
11
|
+
* stamp observedAtMs with bridge time, fabricate expiry as now+1, rebind any
|
|
12
|
+
* evidence to the current candidate, coerce unknown polarity to a boolean —
|
|
13
|
+
* is now either preserved verbatim or declared in `loss`, never repeated.
|
|
14
|
+
*
|
|
15
|
+
* It only translates; it never relaxes trust floors, never admits a model's
|
|
16
|
+
* JSON as runner truth, and never fabricates completion.
|
|
17
|
+
*/
|
|
18
|
+
import { OBSERVATION_TRUST_RANK } from "omk-protocol";
|
|
19
|
+
import { lossOf, mergeBridgeLoss, } from "./bridge-result.js";
|
|
20
|
+
import { createCalibrationStore } from "./calibration.js";
|
|
21
|
+
import { canonical, ensure, integer, lexical, member, text } from "./validation.js";
|
|
22
|
+
const ISO_MS = (iso) => {
|
|
23
|
+
const ms = Date.parse(iso);
|
|
24
|
+
ensure(Number.isFinite(ms), `invalid ISO timestamp: ${iso}`);
|
|
25
|
+
return ms;
|
|
26
|
+
};
|
|
27
|
+
const UNKNOWN_POLARITY = ["unknown", "neutral", "inconclusive"];
|
|
28
|
+
const isUnknownPolarity = (p) => UNKNOWN_POLARITY.includes(p);
|
|
29
|
+
/** ClaimNode → kernel Claim. Severity maps to impact; leaves keep their check demands. */
|
|
30
|
+
export function mapClaim(node, stage, binding) {
|
|
31
|
+
text(node.claimId, "claimId", 256);
|
|
32
|
+
text(node.statement, "statement", 2048);
|
|
33
|
+
member(stage, ["before-change", "after-change"], "stage");
|
|
34
|
+
let impact = 100;
|
|
35
|
+
if (node.kind === "safety")
|
|
36
|
+
impact = 1_000;
|
|
37
|
+
else if (node.severity === "required")
|
|
38
|
+
impact = 500;
|
|
39
|
+
const needsUserDecision = node.trustFloor === "model_narrative";
|
|
40
|
+
// A leaf needs at least one kernel evidence predicate. Checks come from
|
|
41
|
+
// invalidationKeys; multi-witness demands and keyless leaves need
|
|
42
|
+
// reference families; model-narrative floors need a decision.
|
|
43
|
+
const needsReference = node.invalidationKeys.length === 0 && !needsUserDecision ? true : (node.requiredWitnesses ?? 1) > 1;
|
|
44
|
+
const claim = {
|
|
45
|
+
id: node.claimId,
|
|
46
|
+
binding,
|
|
47
|
+
phase: node.kind === "requirement" || node.kind === "safety" ? "precondition" : "postcondition",
|
|
48
|
+
statement: node.statement,
|
|
49
|
+
required: node.severity === "required",
|
|
50
|
+
impact,
|
|
51
|
+
needsReference,
|
|
52
|
+
requiresVersion: false,
|
|
53
|
+
version: null,
|
|
54
|
+
minSourceFamilies: Math.max(node.requiredWitnesses ?? 1, 1),
|
|
55
|
+
requiredCheckIds: node.invalidationKeys,
|
|
56
|
+
needsUserDecision,
|
|
57
|
+
publicQuery: null,
|
|
58
|
+
};
|
|
59
|
+
if (node.scopeSensitive === true) {
|
|
60
|
+
return {
|
|
61
|
+
status: "partial",
|
|
62
|
+
claim,
|
|
63
|
+
loss: lossOf({ lostFields: [`claim:${node.claimId}.scopeSensitive`] }),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { status: "mapped", claim };
|
|
67
|
+
}
|
|
68
|
+
const floorRank = (floors, claimId) => OBSERVATION_TRUST_RANK[floors.get(claimId) ?? "deterministic_validator"];
|
|
69
|
+
const findSource = (sources, id) => sources.find((s) => s.id === id);
|
|
70
|
+
/**
|
|
71
|
+
* ObservationNode → kernel observations.
|
|
72
|
+
*
|
|
73
|
+
* The result carries every emitted edge (one per resolvable claim — the
|
|
74
|
+
* explicit relation table docs/06 asks for) or the declared reason none
|
|
75
|
+
* could be emitted. No edge is ever emitted with fabricated provenance.
|
|
76
|
+
*/
|
|
77
|
+
export function mapObservation(node, ctx) {
|
|
78
|
+
text(node.observationId, "observationId", 256);
|
|
79
|
+
text(node.sourceRoot, "sourceRoot", 512);
|
|
80
|
+
text(node.environmentDigest, "environmentDigest", 256);
|
|
81
|
+
member(node.source, Object.keys(OBSERVATION_TRUST_RANK), "observation source");
|
|
82
|
+
integer(ctx.nowMs, "nowMs");
|
|
83
|
+
if (node.claimIds.length === 0) {
|
|
84
|
+
return { status: "rejected", reason: `${node.observationId}: no claim ids` };
|
|
85
|
+
}
|
|
86
|
+
// Clock and generation conflicts reject outright — docs/06 lists
|
|
87
|
+
// generation moves, future timestamps and expiry as invalid on arrival.
|
|
88
|
+
if (node.generation !== undefined && ctx.generation !== undefined && node.generation !== ctx.generation) {
|
|
89
|
+
return { status: "rejected", reason: `${node.observationId}: generation-mismatch` };
|
|
90
|
+
}
|
|
91
|
+
if (node.observedAtMs !== undefined && node.observedAtMs > ctx.nowMs) {
|
|
92
|
+
return { status: "rejected", reason: `${node.observationId}: future-observation` };
|
|
93
|
+
}
|
|
94
|
+
const expiresAtMs = node.validUntil !== undefined ? ISO_MS(node.validUntil) : undefined;
|
|
95
|
+
if (expiresAtMs !== undefined && expiresAtMs <= ctx.nowMs) {
|
|
96
|
+
return { status: "rejected", reason: `${node.observationId}: expired-observation` };
|
|
97
|
+
}
|
|
98
|
+
if (expiresAtMs !== undefined && node.observedAtMs !== undefined && expiresAtMs < node.observedAtMs) {
|
|
99
|
+
return { status: "rejected", reason: `${node.observationId}: invalid-validity-interval` };
|
|
100
|
+
}
|
|
101
|
+
// Binding: equal ⇒ kept, different ⇒ rejected, absent ⇒ unknownBindings.
|
|
102
|
+
// The one thing that never happens is reattaching foreign or unbound
|
|
103
|
+
// evidence to ctx.binding.
|
|
104
|
+
if (node.binding !== undefined && node.binding !== ctx.binding) {
|
|
105
|
+
return { status: "rejected", reason: `${node.observationId}: binding-mismatch` };
|
|
106
|
+
}
|
|
107
|
+
// Polarity must be expressible by the kind this observation maps to.
|
|
108
|
+
const checkIds = [...new Set([...(node.checkId ? [node.checkId] : []), ...(node.checkIds ?? [])])];
|
|
109
|
+
const isCheck = node.receiptId !== undefined || checkIds.length > 0;
|
|
110
|
+
const isDecision = !isCheck && (node.source === "model_narrative" || node.actorId !== undefined);
|
|
111
|
+
if (isUnknownPolarity(node.polarity) && !isCheck) {
|
|
112
|
+
return { status: "rejected", reason: `${node.observationId}: unexpressible-polarity` };
|
|
113
|
+
}
|
|
114
|
+
// Fields required to emit an edge without fabrication. Absent provenance
|
|
115
|
+
// is declared loss; the edge is not emitted.
|
|
116
|
+
const missing = [];
|
|
117
|
+
if (node.observedAtMs === undefined)
|
|
118
|
+
missing.push("observedAtMs");
|
|
119
|
+
if (expiresAtMs === undefined)
|
|
120
|
+
missing.push("validUntil");
|
|
121
|
+
if (isCheck) {
|
|
122
|
+
if (checkIds.length === 0)
|
|
123
|
+
missing.push("checkId");
|
|
124
|
+
if (node.sequence === undefined)
|
|
125
|
+
missing.push("sequence");
|
|
126
|
+
}
|
|
127
|
+
const lostFields = missing.map((f) => `${node.observationId}.${f}`);
|
|
128
|
+
const unknownBindings = [];
|
|
129
|
+
if (node.binding === undefined)
|
|
130
|
+
unknownBindings.push(node.observationId);
|
|
131
|
+
const blockedByMissing = missing.length > 0 || node.binding === undefined;
|
|
132
|
+
const observations = [];
|
|
133
|
+
const usedSources = new Map();
|
|
134
|
+
const unmappedClaims = [];
|
|
135
|
+
const family = node.sourceFamily ?? node.independenceGroup ?? findSource(ctx.sources, node.source)?.family ?? node.source;
|
|
136
|
+
// Edge ids stay unique when one observation emits several edges.
|
|
137
|
+
const edgeCount = node.claimIds.filter((c) => ctx.claimById.has(c)).length * Math.max(checkIds.length, 1);
|
|
138
|
+
const multi = edgeCount > 1;
|
|
139
|
+
for (const claimId of node.claimIds) {
|
|
140
|
+
const claim = ctx.claimById.get(claimId);
|
|
141
|
+
if (!claim) {
|
|
142
|
+
unmappedClaims.push(`${node.observationId}->${claimId}`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (OBSERVATION_TRUST_RANK[node.source] < floorRank(ctx.claimFloors, claimId)) {
|
|
146
|
+
unmappedClaims.push(`${node.observationId}->${claimId}`);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (blockedByMissing)
|
|
150
|
+
continue; // declared above; emitted only with full provenance
|
|
151
|
+
// Guaranteed present by the missing-fields computation above. `ensure`
|
|
152
|
+
// narrows for the compiler and fails loudly instead of defaulting.
|
|
153
|
+
ensure(node.observedAtMs !== undefined, `${node.observationId}: observedAtMs required`);
|
|
154
|
+
ensure(expiresAtMs !== undefined, `${node.observationId}: validUntil required`);
|
|
155
|
+
ensure(node.binding !== undefined, `${node.observationId}: binding required`);
|
|
156
|
+
const base = {
|
|
157
|
+
id: node.observationId,
|
|
158
|
+
claimId,
|
|
159
|
+
binding: node.binding,
|
|
160
|
+
observedAtMs: node.observedAtMs,
|
|
161
|
+
expiresAtMs,
|
|
162
|
+
};
|
|
163
|
+
if (isCheck) {
|
|
164
|
+
ensure(node.sequence !== undefined, `${node.observationId}: sequence required`);
|
|
165
|
+
const verdict = node.polarity === "supports" ? "pass" : node.polarity === "violates" ? "fail" : "pending";
|
|
166
|
+
for (const checkId of checkIds) {
|
|
167
|
+
observations.push({
|
|
168
|
+
...base,
|
|
169
|
+
id: multi ? `${node.observationId}#${claimId}#${checkId}` : node.observationId,
|
|
170
|
+
kind: "check",
|
|
171
|
+
runnerId: node.source,
|
|
172
|
+
checkId,
|
|
173
|
+
sequence: node.sequence,
|
|
174
|
+
verdict,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (isDecision) {
|
|
179
|
+
observations.push({
|
|
180
|
+
...base,
|
|
181
|
+
id: multi ? `${node.observationId}#${claimId}` : node.observationId,
|
|
182
|
+
kind: "decision",
|
|
183
|
+
actorId: node.actorId ?? "model",
|
|
184
|
+
accepted: node.polarity === "supports",
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// Synthesized identity carries the witness's independence group so
|
|
189
|
+
// the kernel counts families, not citation count.
|
|
190
|
+
const sourceId = `${node.source}@${family}`;
|
|
191
|
+
if (!usedSources.has(sourceId)) {
|
|
192
|
+
const registered = findSource(ctx.sources, node.source);
|
|
193
|
+
usedSources.set(sourceId, {
|
|
194
|
+
id: sourceId,
|
|
195
|
+
family,
|
|
196
|
+
kind: registered?.kind === "model" || registered === undefined ? "community" : registered.kind,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
observations.push({
|
|
200
|
+
...base,
|
|
201
|
+
id: multi ? `${node.observationId}#${claimId}` : node.observationId,
|
|
202
|
+
kind: "reference",
|
|
203
|
+
sourceId,
|
|
204
|
+
version: null,
|
|
205
|
+
stance: node.polarity === "supports" ? "support" : "refute",
|
|
206
|
+
documentDigest: node.environmentDigest,
|
|
207
|
+
locator: node.sourceRoot,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const sources = [...usedSources.values()];
|
|
212
|
+
if (lostFields.length === 0 && unknownBindings.length === 0 && unmappedClaims.length === 0) {
|
|
213
|
+
return { status: "mapped", observations, sources };
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
status: "partial",
|
|
217
|
+
observations,
|
|
218
|
+
sources,
|
|
219
|
+
loss: lossOf({ lostFields, unmappedClaims, unknownBindings }),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/** Witness pairs that conflict on independence or polarity. */
|
|
223
|
+
function familyConflicts(edges, rejected, inputs, claimById) {
|
|
224
|
+
const conflicts = [];
|
|
225
|
+
const byClaim = new Map();
|
|
226
|
+
for (const e of edges)
|
|
227
|
+
byClaim.set(e.claimId, [...(byClaim.get(e.claimId) ?? []), e]);
|
|
228
|
+
for (const [claimId, list] of byClaim) {
|
|
229
|
+
// Opposing witnesses (support vs refute / pass vs fail) from the same
|
|
230
|
+
// source family on one claim.
|
|
231
|
+
const signs = new Map();
|
|
232
|
+
for (const e of list) {
|
|
233
|
+
const fam = e.kind === "reference" ? e.sourceId : e.kind === "check" ? e.runnerId : e.actorId;
|
|
234
|
+
const sign = e.kind === "reference"
|
|
235
|
+
? e.stance
|
|
236
|
+
: e.kind === "check"
|
|
237
|
+
? e.verdict === "pending"
|
|
238
|
+
? "pending"
|
|
239
|
+
: e.verdict === "pass"
|
|
240
|
+
? "support"
|
|
241
|
+
: "refute"
|
|
242
|
+
: e.accepted
|
|
243
|
+
? "support"
|
|
244
|
+
: "refute";
|
|
245
|
+
signs.set(fam, new Set([...(signs.get(fam) ?? []), sign]));
|
|
246
|
+
}
|
|
247
|
+
for (const [fam, s] of signs) {
|
|
248
|
+
if (s.has("support") && s.has("refute"))
|
|
249
|
+
conflicts.push(`conflicting-witness:${claimId}:${fam}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Same (claim, family) cited by several distinct observations duplicates
|
|
253
|
+
// one independence group — counted once by the kernel, declared here.
|
|
254
|
+
const cited = new Map();
|
|
255
|
+
for (const o of inputs) {
|
|
256
|
+
if (rejected.some((r) => r.id === o.observationId))
|
|
257
|
+
continue;
|
|
258
|
+
for (const claimId of o.claimIds) {
|
|
259
|
+
if (!claimById.has(claimId))
|
|
260
|
+
continue;
|
|
261
|
+
const key = `${claimId}|${o.sourceFamily ?? o.independenceGroup ?? o.source}`;
|
|
262
|
+
cited.set(key, new Set([...(cited.get(key) ?? []), o.observationId]));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
for (const [key, ids] of cited) {
|
|
266
|
+
if (ids.size > 1)
|
|
267
|
+
conflicts.push(`duplicate-citation:${key}`);
|
|
268
|
+
}
|
|
269
|
+
return conflicts.sort(lexical);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Check edges sharing (claimId, binding, checkId, sequence) must agree
|
|
273
|
+
* verbatim — the kernel `ensure`s that and would throw. Conflicting slots
|
|
274
|
+
* are ledger corruption: suppress *all* edges in the slot (admit neither)
|
|
275
|
+
* and leave the conflict declared in sourceFamilyConflicts.
|
|
276
|
+
*/
|
|
277
|
+
function suppressConflictingSequences(edges) {
|
|
278
|
+
const slots = new Map();
|
|
279
|
+
for (const e of edges) {
|
|
280
|
+
if (e.kind !== "check")
|
|
281
|
+
continue;
|
|
282
|
+
const key = canonical([e.claimId, e.binding, e.checkId, e.sequence]);
|
|
283
|
+
slots.set(key, [...(slots.get(key) ?? []), e]);
|
|
284
|
+
}
|
|
285
|
+
const drop = new Set();
|
|
286
|
+
for (const list of slots.values()) {
|
|
287
|
+
if (new Set(list.map((e) => canonical(e))).size > 1) {
|
|
288
|
+
for (const e of list)
|
|
289
|
+
drop.add(e.id);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return edges.filter((e) => !drop.has(e.id));
|
|
293
|
+
}
|
|
294
|
+
/** Build kernel inputs plus a MetaState for one safe checkpoint. Host-owned inputs only. */
|
|
295
|
+
export function toMetaState(input) {
|
|
296
|
+
text(input.taskId, "taskId", 128);
|
|
297
|
+
text(input.stageId, "stageId", 128);
|
|
298
|
+
text(input.goalScope, "goalScope", 256);
|
|
299
|
+
text(input.targetArtifact, "targetArtifact", 512);
|
|
300
|
+
text(input.candidateHash, "candidateHash", 128);
|
|
301
|
+
text(input.environmentHash, "environmentHash", 128);
|
|
302
|
+
text(input.policyVersion, "policyVersion", 64);
|
|
303
|
+
text(input.modelRevision, "modelRevision", 128);
|
|
304
|
+
integer(input.nowMs, "nowMs");
|
|
305
|
+
ensure(input.claims.length <= 128 && input.observations.length <= 4096, "runtime bridge input too large");
|
|
306
|
+
const binding = `${input.candidateHash}@${input.environmentHash}`;
|
|
307
|
+
// Only leaf claims map to kernel claims — compound satisfaction is the
|
|
308
|
+
// protocol layer's job, and is now declared instead of dropped silently.
|
|
309
|
+
const compoundIds = input.claims.filter((c) => c.satisfaction.inputs.length > 0).map((c) => c.claimId);
|
|
310
|
+
const leafClaims = input.claims.filter((c) => c.satisfaction.inputs.length === 0);
|
|
311
|
+
const claimById = new Map();
|
|
312
|
+
const claimLosses = [];
|
|
313
|
+
for (const c of leafClaims) {
|
|
314
|
+
const m = mapClaim(c, input.stage, binding);
|
|
315
|
+
if (m.status === "rejected") {
|
|
316
|
+
claimLosses.push(lossOf({ unmappedClaims: [`claim:${c.claimId}`], rejectedObservations: [] }));
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
claimById.set(c.claimId, m.claim);
|
|
320
|
+
if (m.status === "partial")
|
|
321
|
+
claimLosses.push(m.loss);
|
|
322
|
+
}
|
|
323
|
+
const kernelClaims = [...claimById.values()].sort((a, b) => lexical(a.id, b.id));
|
|
324
|
+
const claimFloors = new Map(leafClaims.map((c) => [c.claimId, c.trustFloor]));
|
|
325
|
+
const baseSources = sourceIdentities(input.sources ?? []);
|
|
326
|
+
const ctx = {
|
|
327
|
+
binding,
|
|
328
|
+
nowMs: input.nowMs,
|
|
329
|
+
generation: input.generation,
|
|
330
|
+
claimById,
|
|
331
|
+
claimFloors,
|
|
332
|
+
sources: baseSources,
|
|
333
|
+
};
|
|
334
|
+
const emitted = [];
|
|
335
|
+
const usedSources = new Map();
|
|
336
|
+
const obsLosses = [];
|
|
337
|
+
const rejectedObs = [];
|
|
338
|
+
for (const o of input.observations) {
|
|
339
|
+
const r = mapObservation(o, ctx);
|
|
340
|
+
if (r.status === "rejected") {
|
|
341
|
+
rejectedObs.push({ id: o.observationId, reason: r.reason });
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
emitted.push(...r.observations);
|
|
345
|
+
for (const s of r.sources)
|
|
346
|
+
usedSources.set(s.id, s);
|
|
347
|
+
if (r.status === "partial")
|
|
348
|
+
obsLosses.push(r.loss);
|
|
349
|
+
}
|
|
350
|
+
const kernelObservations = suppressConflictingSequences(emitted);
|
|
351
|
+
const bridgeLoss = mergeBridgeLoss([...claimLosses, ...obsLosses]);
|
|
352
|
+
const conflicts = familyConflicts(emitted, rejectedObs, input.observations, claimById);
|
|
353
|
+
const loss = {
|
|
354
|
+
...bridgeLoss,
|
|
355
|
+
unmappedClaims: [...bridgeLoss.unmappedClaims, ...compoundIds.map((id) => `claim:${id}`)].sort(lexical),
|
|
356
|
+
sourceFamilyConflicts: [...bridgeLoss.sourceFamilyConflicts, ...conflicts].sort(lexical),
|
|
357
|
+
rejectedObservations: [...bridgeLoss.rejectedObservations, ...rejectedObs].sort((a, b) => lexical(a.id, b.id)),
|
|
358
|
+
};
|
|
359
|
+
const requiredIds = new Set(input.claims.filter((c) => c.severity === "required").map((c) => c.claimId));
|
|
360
|
+
const touched = new Set();
|
|
361
|
+
for (const u of loss.unmappedClaims) {
|
|
362
|
+
for (const id of requiredIds) {
|
|
363
|
+
if (u === `claim:${id}` || u.endsWith(`->${id}`))
|
|
364
|
+
touched.add(id);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
for (const obsId of loss.unknownBindings) {
|
|
368
|
+
const src = input.observations.find((o) => o.observationId === obsId);
|
|
369
|
+
for (const c of src?.claimIds ?? [])
|
|
370
|
+
if (requiredIds.has(c))
|
|
371
|
+
touched.add(c);
|
|
372
|
+
}
|
|
373
|
+
for (const r of loss.rejectedObservations) {
|
|
374
|
+
const src = input.observations.find((o) => o.observationId === r.id);
|
|
375
|
+
for (const c of src?.claimIds ?? [])
|
|
376
|
+
if (requiredIds.has(c))
|
|
377
|
+
touched.add(c);
|
|
378
|
+
}
|
|
379
|
+
for (const f of loss.lostFields) {
|
|
380
|
+
if (f.startsWith("claim:")) {
|
|
381
|
+
const id = f.slice("claim:".length).split(".")[0] ?? "";
|
|
382
|
+
if (requiredIds.has(id))
|
|
383
|
+
touched.add(id);
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
const obsId = f.split(".")[0] ?? "";
|
|
387
|
+
const src = input.observations.find((o) => o.observationId === obsId);
|
|
388
|
+
for (const c of src?.claimIds ?? [])
|
|
389
|
+
if (requiredIds.has(c))
|
|
390
|
+
touched.add(c);
|
|
391
|
+
}
|
|
392
|
+
const state = {
|
|
393
|
+
goal: {
|
|
394
|
+
taskId: input.taskId,
|
|
395
|
+
stageId: input.stageId,
|
|
396
|
+
targetArtifact: input.targetArtifact,
|
|
397
|
+
goalScope: input.goalScope,
|
|
398
|
+
},
|
|
399
|
+
facts: {
|
|
400
|
+
candidateHash: input.candidateHash,
|
|
401
|
+
environmentHash: input.environmentHash,
|
|
402
|
+
changeScope: [input.targetArtifact],
|
|
403
|
+
analyzerCoverage: "unknown",
|
|
404
|
+
},
|
|
405
|
+
obligations: [],
|
|
406
|
+
evidence: { report: null, adoptedSourceIds: [] },
|
|
407
|
+
predictions: [],
|
|
408
|
+
hypotheses: { open: [], discriminatorCandidates: [], modelMismatch: false },
|
|
409
|
+
calibration: createCalibrationStore({
|
|
410
|
+
minSamples: 5,
|
|
411
|
+
priorAlpha: 1,
|
|
412
|
+
priorBeta: 1,
|
|
413
|
+
referenceMean: 0.3,
|
|
414
|
+
slack: 0.15,
|
|
415
|
+
threshold: 3,
|
|
416
|
+
}),
|
|
417
|
+
verifier: { evaluations: [], runnerHealth: "unverified" },
|
|
418
|
+
budget: input.budget,
|
|
419
|
+
policy: {
|
|
420
|
+
policyVersion: input.policyVersion,
|
|
421
|
+
authorizedActions: input.authorizedActions,
|
|
422
|
+
requiredApprovals: [],
|
|
423
|
+
interruptionReason: input.interruptionReason ?? null,
|
|
424
|
+
},
|
|
425
|
+
hostSequence: 0,
|
|
426
|
+
progressHistory: input.progressHistory ?? [],
|
|
427
|
+
checkpointCount: 0,
|
|
428
|
+
};
|
|
429
|
+
const sources = [...new Map([...baseSources, ...usedSources.values()].map((s) => [s.id, s])).values()];
|
|
430
|
+
const value = { state, claims: kernelClaims, observations: kernelObservations, sources };
|
|
431
|
+
const empty = loss.lostFields.length === 0 &&
|
|
432
|
+
loss.unmappedClaims.length === 0 &&
|
|
433
|
+
loss.unknownBindings.length === 0 &&
|
|
434
|
+
loss.sourceFamilyConflicts.length === 0 &&
|
|
435
|
+
loss.rejectedObservations.length === 0;
|
|
436
|
+
if (empty)
|
|
437
|
+
return { status: "mapped", value };
|
|
438
|
+
return {
|
|
439
|
+
status: "partial",
|
|
440
|
+
value,
|
|
441
|
+
loss,
|
|
442
|
+
touchesRequiredClaims: [...touched].sort(lexical),
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
/** Sources admitted for reference evidence: only repository/official qualify. */
|
|
446
|
+
export function sourceIdentities(overrides = []) {
|
|
447
|
+
return [
|
|
448
|
+
{ id: "deterministic_validator", family: "host", kind: "repository" },
|
|
449
|
+
{ id: "workspace_witness", family: "host", kind: "repository" },
|
|
450
|
+
{ id: "trusted_attestation", family: "attestation", kind: "official" },
|
|
451
|
+
{ id: "effect_reconciliation", family: "host", kind: "repository" },
|
|
452
|
+
{ id: "independent_review", family: "review", kind: "official" },
|
|
453
|
+
{ id: "self_review", family: "model", kind: "model" },
|
|
454
|
+
{ id: "model_narrative", family: "model", kind: "model" },
|
|
455
|
+
...overrides,
|
|
456
|
+
];
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=runtime-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-bridge.js","sourceRoot":"","sources":["../../src/metacognition/runtime-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime bridge — §13 \"기존 완료 판정 호출부\": projects host-owned OMK\n * runtime artifacts (protocol ClaimGraph claims, ObservationNodes, waiver\n * records, workspace/session facts) onto the metacognition kernel's input\n * types.\n *\n * WP05 (docs/06_METACOGNITION_BRIDGE.md): every translation is loss-aware.\n * Each claim and observation maps to `mapped`, `partial`, or `rejected`.\n * What the previous mapper silently did — collapse claimIds to the first,\n * force sequence 0, substitute checkId with receiptId/invalidation keys,\n * stamp observedAtMs with bridge time, fabricate expiry as now+1, rebind any\n * evidence to the current candidate, coerce unknown polarity to a boolean —\n * is now either preserved verbatim or declared in `loss`, never repeated.\n *\n * It only translates; it never relaxes trust floors, never admits a model's\n * JSON as runner truth, and never fabricates completion.\n */\nimport { type ClaimNode, OBSERVATION_TRUST_RANK, type ObservationSource } from \"omk-protocol\";\nimport {\n\ttype BridgeLoss,\n\ttype BridgeObservation,\n\ttype BridgePolarity,\n\ttype ClaimMapResult,\n\tlossOf,\n\tmergeBridgeLoss,\n\ttype ObservationMapResult,\n\ttype RuntimeBridgeOutput,\n\ttype RuntimeBridgeResult,\n} from \"./bridge-result.ts\";\nimport { createCalibrationStore } from \"./calibration.ts\";\nimport type { CheckObservation, Claim, Observation, SourceIdentity, Stage } from \"./knowledge.ts\";\nimport type { MetaState } from \"./state.ts\";\nimport { canonical, ensure, integer, lexical, member, text } from \"./validation.ts\";\n\nconst ISO_MS = (iso: string): number => {\n\tconst ms = Date.parse(iso);\n\tensure(Number.isFinite(ms), `invalid ISO timestamp: ${iso}`);\n\treturn ms;\n};\n\nconst UNKNOWN_POLARITY: readonly BridgePolarity[] = [\"unknown\", \"neutral\", \"inconclusive\"];\nconst isUnknownPolarity = (p: BridgePolarity): boolean => UNKNOWN_POLARITY.includes(p);\n\n/** ClaimNode → kernel Claim. Severity maps to impact; leaves keep their check demands. */\nexport function mapClaim(node: ClaimNode, stage: Stage, binding: string): ClaimMapResult {\n\ttext(node.claimId, \"claimId\", 256);\n\ttext(node.statement, \"statement\", 2048);\n\tmember(stage, [\"before-change\", \"after-change\"], \"stage\");\n\tlet impact = 100;\n\tif (node.kind === \"safety\") impact = 1_000;\n\telse if (node.severity === \"required\") impact = 500;\n\tconst needsUserDecision = node.trustFloor === \"model_narrative\";\n\t// A leaf needs at least one kernel evidence predicate. Checks come from\n\t// invalidationKeys; multi-witness demands and keyless leaves need\n\t// reference families; model-narrative floors need a decision.\n\tconst needsReference =\n\t\tnode.invalidationKeys.length === 0 && !needsUserDecision ? true : (node.requiredWitnesses ?? 1) > 1;\n\tconst claim: Claim = {\n\t\tid: node.claimId,\n\t\tbinding,\n\t\tphase: node.kind === \"requirement\" || node.kind === \"safety\" ? \"precondition\" : \"postcondition\",\n\t\tstatement: node.statement,\n\t\trequired: node.severity === \"required\",\n\t\timpact,\n\t\tneedsReference,\n\t\trequiresVersion: false,\n\t\tversion: null,\n\t\tminSourceFamilies: Math.max(node.requiredWitnesses ?? 1, 1),\n\t\trequiredCheckIds: node.invalidationKeys,\n\t\tneedsUserDecision,\n\t\tpublicQuery: null,\n\t};\n\tif (node.scopeSensitive === true) {\n\t\treturn {\n\t\t\tstatus: \"partial\",\n\t\t\tclaim,\n\t\t\tloss: lossOf({ lostFields: [`claim:${node.claimId}.scopeSensitive`] }),\n\t\t};\n\t}\n\treturn { status: \"mapped\", claim };\n}\n\n/** Context every observation edge is translated against. */\nexport interface ObservationMapContext {\n\t/** `candidateHash@environmentHash` of the *current* candidate — never assigned to foreign evidence. */\n\treadonly binding: string;\n\treadonly nowMs: number;\n\treadonly generation?: number;\n\t/** Leaf claims already mapped, id → kernel claim. Unresolvable ids are declared loss. */\n\treadonly claimById: ReadonlyMap<string, Claim>;\n\t/** Per-claim trust floor; a missing floor defaults to `deterministic_validator`. */\n\treadonly claimFloors: ReadonlyMap<string, ObservationSource>;\n\treadonly sources: readonly SourceIdentity[];\n}\n\nconst floorRank = (floors: ReadonlyMap<string, ObservationSource>, claimId: string): number =>\n\tOBSERVATION_TRUST_RANK[floors.get(claimId) ?? \"deterministic_validator\"];\n\nconst findSource = (sources: readonly SourceIdentity[], id: string): SourceIdentity | undefined =>\n\tsources.find((s) => s.id === id);\n\n/**\n * ObservationNode → kernel observations.\n *\n * The result carries every emitted edge (one per resolvable claim — the\n * explicit relation table docs/06 asks for) or the declared reason none\n * could be emitted. No edge is ever emitted with fabricated provenance.\n */\nexport function mapObservation(node: BridgeObservation, ctx: ObservationMapContext): ObservationMapResult {\n\ttext(node.observationId, \"observationId\", 256);\n\ttext(node.sourceRoot, \"sourceRoot\", 512);\n\ttext(node.environmentDigest, \"environmentDigest\", 256);\n\tmember(node.source, Object.keys(OBSERVATION_TRUST_RANK), \"observation source\");\n\tinteger(ctx.nowMs, \"nowMs\");\n\tif (node.claimIds.length === 0) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: no claim ids` };\n\t}\n\t// Clock and generation conflicts reject outright — docs/06 lists\n\t// generation moves, future timestamps and expiry as invalid on arrival.\n\tif (node.generation !== undefined && ctx.generation !== undefined && node.generation !== ctx.generation) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: generation-mismatch` };\n\t}\n\tif (node.observedAtMs !== undefined && node.observedAtMs > ctx.nowMs) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: future-observation` };\n\t}\n\tconst expiresAtMs = node.validUntil !== undefined ? ISO_MS(node.validUntil) : undefined;\n\tif (expiresAtMs !== undefined && expiresAtMs <= ctx.nowMs) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: expired-observation` };\n\t}\n\tif (expiresAtMs !== undefined && node.observedAtMs !== undefined && expiresAtMs < node.observedAtMs) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: invalid-validity-interval` };\n\t}\n\t// Binding: equal ⇒ kept, different ⇒ rejected, absent ⇒ unknownBindings.\n\t// The one thing that never happens is reattaching foreign or unbound\n\t// evidence to ctx.binding.\n\tif (node.binding !== undefined && node.binding !== ctx.binding) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: binding-mismatch` };\n\t}\n\t// Polarity must be expressible by the kind this observation maps to.\n\tconst checkIds = [...new Set([...(node.checkId ? [node.checkId] : []), ...(node.checkIds ?? [])])];\n\tconst isCheck = node.receiptId !== undefined || checkIds.length > 0;\n\tconst isDecision = !isCheck && (node.source === \"model_narrative\" || node.actorId !== undefined);\n\tif (isUnknownPolarity(node.polarity) && !isCheck) {\n\t\treturn { status: \"rejected\", reason: `${node.observationId}: unexpressible-polarity` };\n\t}\n\t// Fields required to emit an edge without fabrication. Absent provenance\n\t// is declared loss; the edge is not emitted.\n\tconst missing: string[] = [];\n\tif (node.observedAtMs === undefined) missing.push(\"observedAtMs\");\n\tif (expiresAtMs === undefined) missing.push(\"validUntil\");\n\tif (isCheck) {\n\t\tif (checkIds.length === 0) missing.push(\"checkId\");\n\t\tif (node.sequence === undefined) missing.push(\"sequence\");\n\t}\n\tconst lostFields: string[] = missing.map((f) => `${node.observationId}.${f}`);\n\tconst unknownBindings: string[] = [];\n\tif (node.binding === undefined) unknownBindings.push(node.observationId);\n\tconst blockedByMissing = missing.length > 0 || node.binding === undefined;\n\n\tconst observations: Observation[] = [];\n\tconst usedSources = new Map<string, SourceIdentity>();\n\tconst unmappedClaims: string[] = [];\n\tconst family =\n\t\tnode.sourceFamily ?? node.independenceGroup ?? findSource(ctx.sources, node.source)?.family ?? node.source;\n\t// Edge ids stay unique when one observation emits several edges.\n\tconst edgeCount = node.claimIds.filter((c) => ctx.claimById.has(c)).length * Math.max(checkIds.length, 1);\n\tconst multi = edgeCount > 1;\n\tfor (const claimId of node.claimIds) {\n\t\tconst claim = ctx.claimById.get(claimId);\n\t\tif (!claim) {\n\t\t\tunmappedClaims.push(`${node.observationId}->${claimId}`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (OBSERVATION_TRUST_RANK[node.source] < floorRank(ctx.claimFloors, claimId)) {\n\t\t\tunmappedClaims.push(`${node.observationId}->${claimId}`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (blockedByMissing) continue; // declared above; emitted only with full provenance\n\t\t// Guaranteed present by the missing-fields computation above. `ensure`\n\t\t// narrows for the compiler and fails loudly instead of defaulting.\n\t\tensure(node.observedAtMs !== undefined, `${node.observationId}: observedAtMs required`);\n\t\tensure(expiresAtMs !== undefined, `${node.observationId}: validUntil required`);\n\t\tensure(node.binding !== undefined, `${node.observationId}: binding required`);\n\t\tconst base = {\n\t\t\tid: node.observationId,\n\t\t\tclaimId,\n\t\t\tbinding: node.binding,\n\t\t\tobservedAtMs: node.observedAtMs,\n\t\t\texpiresAtMs,\n\t\t};\n\t\tif (isCheck) {\n\t\t\tensure(node.sequence !== undefined, `${node.observationId}: sequence required`);\n\t\t\tconst verdict: CheckObservation[\"verdict\"] =\n\t\t\t\tnode.polarity === \"supports\" ? \"pass\" : node.polarity === \"violates\" ? \"fail\" : \"pending\";\n\t\t\tfor (const checkId of checkIds) {\n\t\t\t\tobservations.push({\n\t\t\t\t\t...base,\n\t\t\t\t\tid: multi ? `${node.observationId}#${claimId}#${checkId}` : node.observationId,\n\t\t\t\t\tkind: \"check\",\n\t\t\t\t\trunnerId: node.source,\n\t\t\t\t\tcheckId,\n\t\t\t\t\tsequence: node.sequence,\n\t\t\t\t\tverdict,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (isDecision) {\n\t\t\tobservations.push({\n\t\t\t\t...base,\n\t\t\t\tid: multi ? `${node.observationId}#${claimId}` : node.observationId,\n\t\t\t\tkind: \"decision\",\n\t\t\t\tactorId: node.actorId ?? \"model\",\n\t\t\t\taccepted: node.polarity === \"supports\",\n\t\t\t});\n\t\t} else {\n\t\t\t// Synthesized identity carries the witness's independence group so\n\t\t\t// the kernel counts families, not citation count.\n\t\t\tconst sourceId = `${node.source}@${family}`;\n\t\t\tif (!usedSources.has(sourceId)) {\n\t\t\t\tconst registered = findSource(ctx.sources, node.source);\n\t\t\t\tusedSources.set(sourceId, {\n\t\t\t\t\tid: sourceId,\n\t\t\t\t\tfamily,\n\t\t\t\t\tkind: registered?.kind === \"model\" || registered === undefined ? \"community\" : registered.kind,\n\t\t\t\t});\n\t\t\t}\n\t\t\tobservations.push({\n\t\t\t\t...base,\n\t\t\t\tid: multi ? `${node.observationId}#${claimId}` : node.observationId,\n\t\t\t\tkind: \"reference\",\n\t\t\t\tsourceId,\n\t\t\t\tversion: null,\n\t\t\t\tstance: node.polarity === \"supports\" ? \"support\" : \"refute\",\n\t\t\t\tdocumentDigest: node.environmentDigest,\n\t\t\t\tlocator: node.sourceRoot,\n\t\t\t});\n\t\t}\n\t}\n\tconst sources = [...usedSources.values()];\n\tif (lostFields.length === 0 && unknownBindings.length === 0 && unmappedClaims.length === 0) {\n\t\treturn { status: \"mapped\", observations, sources };\n\t}\n\treturn {\n\t\tstatus: \"partial\",\n\t\tobservations,\n\t\tsources,\n\t\tloss: lossOf({ lostFields, unmappedClaims, unknownBindings }),\n\t};\n}\n\nexport interface RuntimeBridgeInput {\n\treadonly taskId: string;\n\treadonly stageId: string;\n\treadonly goalScope: string;\n\treadonly targetArtifact: string;\n\treadonly candidateHash: string;\n\treadonly environmentHash: string;\n\t/** Current ledger generation; compared with each observation's own when present. */\n\treadonly generation?: number;\n\treadonly claims: readonly ClaimNode[];\n\treadonly observations: readonly BridgeObservation[];\n\treadonly trustedRunnerIds: readonly string[];\n\treadonly decisionActorIds: readonly string[];\n\treadonly authorizedActions: readonly string[];\n\treadonly budget: {\n\t\tremainingMs: number;\n\t\tremainingRequests: number;\n\t\tremainingTokens: number;\n\t\tremainingConcurrent: number;\n\t};\n\treadonly policyVersion: string;\n\treadonly modelRevision: string;\n\treadonly interruptionReason?: string | null;\n\treadonly stage: Stage;\n\treadonly nowMs: number;\n\treadonly progressHistory?: readonly {\n\t\tkey: string;\n\t\tnewEvidence: boolean;\n\t\tresolvedObligations: number;\n\t\tnewValidChecks: number;\n\t}[];\n\t/** Extra admissible source identities beyond the built-in registry. */\n\treadonly sources?: readonly SourceIdentity[];\n}\n\n/** Witness pairs that conflict on independence or polarity. */\nfunction familyConflicts(\n\tedges: readonly Observation[],\n\trejected: readonly { id: string; reason: string }[],\n\tinputs: readonly BridgeObservation[],\n\tclaimById: ReadonlyMap<string, Claim>,\n): string[] {\n\tconst conflicts: string[] = [];\n\tconst byClaim = new Map<string, Observation[]>();\n\tfor (const e of edges) byClaim.set(e.claimId, [...(byClaim.get(e.claimId) ?? []), e]);\n\tfor (const [claimId, list] of byClaim) {\n\t\t// Opposing witnesses (support vs refute / pass vs fail) from the same\n\t\t// source family on one claim.\n\t\tconst signs = new Map<string, Set<string>>();\n\t\tfor (const e of list) {\n\t\t\tconst fam = e.kind === \"reference\" ? e.sourceId : e.kind === \"check\" ? e.runnerId : e.actorId;\n\t\t\tconst sign =\n\t\t\t\te.kind === \"reference\"\n\t\t\t\t\t? e.stance\n\t\t\t\t\t: e.kind === \"check\"\n\t\t\t\t\t\t? e.verdict === \"pending\"\n\t\t\t\t\t\t\t? \"pending\"\n\t\t\t\t\t\t\t: e.verdict === \"pass\"\n\t\t\t\t\t\t\t\t? \"support\"\n\t\t\t\t\t\t\t\t: \"refute\"\n\t\t\t\t\t\t: e.accepted\n\t\t\t\t\t\t\t? \"support\"\n\t\t\t\t\t\t\t: \"refute\";\n\t\t\tsigns.set(fam, new Set([...(signs.get(fam) ?? []), sign]));\n\t\t}\n\t\tfor (const [fam, s] of signs) {\n\t\t\tif (s.has(\"support\") && s.has(\"refute\")) conflicts.push(`conflicting-witness:${claimId}:${fam}`);\n\t\t}\n\t}\n\t// Same (claim, family) cited by several distinct observations duplicates\n\t// one independence group — counted once by the kernel, declared here.\n\tconst cited = new Map<string, Set<string>>();\n\tfor (const o of inputs) {\n\t\tif (rejected.some((r) => r.id === o.observationId)) continue;\n\t\tfor (const claimId of o.claimIds) {\n\t\t\tif (!claimById.has(claimId)) continue;\n\t\t\tconst key = `${claimId}|${o.sourceFamily ?? o.independenceGroup ?? o.source}`;\n\t\t\tcited.set(key, new Set([...(cited.get(key) ?? []), o.observationId]));\n\t\t}\n\t}\n\tfor (const [key, ids] of cited) {\n\t\tif (ids.size > 1) conflicts.push(`duplicate-citation:${key}`);\n\t}\n\treturn conflicts.sort(lexical);\n}\n\n/**\n * Check edges sharing (claimId, binding, checkId, sequence) must agree\n * verbatim — the kernel `ensure`s that and would throw. Conflicting slots\n * are ledger corruption: suppress *all* edges in the slot (admit neither)\n * and leave the conflict declared in sourceFamilyConflicts.\n */\nfunction suppressConflictingSequences(edges: readonly Observation[]): Observation[] {\n\tconst slots = new Map<string, Observation[]>();\n\tfor (const e of edges) {\n\t\tif (e.kind !== \"check\") continue;\n\t\tconst key = canonical([e.claimId, e.binding, e.checkId, e.sequence]);\n\t\tslots.set(key, [...(slots.get(key) ?? []), e]);\n\t}\n\tconst drop = new Set<string>();\n\tfor (const list of slots.values()) {\n\t\tif (new Set(list.map((e) => canonical(e))).size > 1) {\n\t\t\tfor (const e of list) drop.add(e.id);\n\t\t}\n\t}\n\treturn edges.filter((e) => !drop.has(e.id));\n}\n\n/** Build kernel inputs plus a MetaState for one safe checkpoint. Host-owned inputs only. */\nexport function toMetaState(input: RuntimeBridgeInput): RuntimeBridgeResult {\n\ttext(input.taskId, \"taskId\", 128);\n\ttext(input.stageId, \"stageId\", 128);\n\ttext(input.goalScope, \"goalScope\", 256);\n\ttext(input.targetArtifact, \"targetArtifact\", 512);\n\ttext(input.candidateHash, \"candidateHash\", 128);\n\ttext(input.environmentHash, \"environmentHash\", 128);\n\ttext(input.policyVersion, \"policyVersion\", 64);\n\ttext(input.modelRevision, \"modelRevision\", 128);\n\tinteger(input.nowMs, \"nowMs\");\n\tensure(input.claims.length <= 128 && input.observations.length <= 4096, \"runtime bridge input too large\");\n\tconst binding = `${input.candidateHash}@${input.environmentHash}`;\n\t// Only leaf claims map to kernel claims — compound satisfaction is the\n\t// protocol layer's job, and is now declared instead of dropped silently.\n\tconst compoundIds = input.claims.filter((c) => c.satisfaction.inputs.length > 0).map((c) => c.claimId);\n\tconst leafClaims = input.claims.filter((c) => c.satisfaction.inputs.length === 0);\n\tconst claimById = new Map<string, Claim>();\n\tconst claimLosses: BridgeLoss[] = [];\n\tfor (const c of leafClaims) {\n\t\tconst m = mapClaim(c, input.stage, binding);\n\t\tif (m.status === \"rejected\") {\n\t\t\tclaimLosses.push(lossOf({ unmappedClaims: [`claim:${c.claimId}`], rejectedObservations: [] }));\n\t\t\tcontinue;\n\t\t}\n\t\tclaimById.set(c.claimId, m.claim);\n\t\tif (m.status === \"partial\") claimLosses.push(m.loss);\n\t}\n\tconst kernelClaims = [...claimById.values()].sort((a, b) => lexical(a.id, b.id));\n\tconst claimFloors = new Map(leafClaims.map((c) => [c.claimId, c.trustFloor] as const));\n\tconst baseSources = sourceIdentities(input.sources ?? []);\n\tconst ctx: ObservationMapContext = {\n\t\tbinding,\n\t\tnowMs: input.nowMs,\n\t\tgeneration: input.generation,\n\t\tclaimById,\n\t\tclaimFloors,\n\t\tsources: baseSources,\n\t};\n\tconst emitted: Observation[] = [];\n\tconst usedSources = new Map<string, SourceIdentity>();\n\tconst obsLosses: BridgeLoss[] = [];\n\tconst rejectedObs: { id: string; reason: string }[] = [];\n\tfor (const o of input.observations) {\n\t\tconst r = mapObservation(o, ctx);\n\t\tif (r.status === \"rejected\") {\n\t\t\trejectedObs.push({ id: o.observationId, reason: r.reason });\n\t\t\tcontinue;\n\t\t}\n\t\temitted.push(...r.observations);\n\t\tfor (const s of r.sources) usedSources.set(s.id, s);\n\t\tif (r.status === \"partial\") obsLosses.push(r.loss);\n\t}\n\tconst kernelObservations = suppressConflictingSequences(emitted);\n\tconst bridgeLoss = mergeBridgeLoss([...claimLosses, ...obsLosses]);\n\tconst conflicts = familyConflicts(emitted, rejectedObs, input.observations, claimById);\n\tconst loss: BridgeLoss = {\n\t\t...bridgeLoss,\n\t\tunmappedClaims: [...bridgeLoss.unmappedClaims, ...compoundIds.map((id) => `claim:${id}`)].sort(lexical),\n\t\tsourceFamilyConflicts: [...bridgeLoss.sourceFamilyConflicts, ...conflicts].sort(lexical),\n\t\trejectedObservations: [...bridgeLoss.rejectedObservations, ...rejectedObs].sort((a, b) => lexical(a.id, b.id)),\n\t};\n\tconst requiredIds = new Set(input.claims.filter((c) => c.severity === \"required\").map((c) => c.claimId));\n\tconst touched = new Set<string>();\n\tfor (const u of loss.unmappedClaims) {\n\t\tfor (const id of requiredIds) {\n\t\t\tif (u === `claim:${id}` || u.endsWith(`->${id}`)) touched.add(id);\n\t\t}\n\t}\n\tfor (const obsId of loss.unknownBindings) {\n\t\tconst src = input.observations.find((o) => o.observationId === obsId);\n\t\tfor (const c of src?.claimIds ?? []) if (requiredIds.has(c)) touched.add(c);\n\t}\n\tfor (const r of loss.rejectedObservations) {\n\t\tconst src = input.observations.find((o) => o.observationId === r.id);\n\t\tfor (const c of src?.claimIds ?? []) if (requiredIds.has(c)) touched.add(c);\n\t}\n\tfor (const f of loss.lostFields) {\n\t\tif (f.startsWith(\"claim:\")) {\n\t\t\tconst id = f.slice(\"claim:\".length).split(\".\")[0] ?? \"\";\n\t\t\tif (requiredIds.has(id)) touched.add(id);\n\t\t\tcontinue;\n\t\t}\n\t\tconst obsId = f.split(\".\")[0] ?? \"\";\n\t\tconst src = input.observations.find((o) => o.observationId === obsId);\n\t\tfor (const c of src?.claimIds ?? []) if (requiredIds.has(c)) touched.add(c);\n\t}\n\tconst state: MetaState = {\n\t\tgoal: {\n\t\t\ttaskId: input.taskId,\n\t\t\tstageId: input.stageId,\n\t\t\ttargetArtifact: input.targetArtifact,\n\t\t\tgoalScope: input.goalScope,\n\t\t},\n\t\tfacts: {\n\t\t\tcandidateHash: input.candidateHash,\n\t\t\tenvironmentHash: input.environmentHash,\n\t\t\tchangeScope: [input.targetArtifact],\n\t\t\tanalyzerCoverage: \"unknown\",\n\t\t},\n\t\tobligations: [],\n\t\tevidence: { report: null, adoptedSourceIds: [] },\n\t\tpredictions: [],\n\t\thypotheses: { open: [], discriminatorCandidates: [], modelMismatch: false },\n\t\tcalibration: createCalibrationStore({\n\t\t\tminSamples: 5,\n\t\t\tpriorAlpha: 1,\n\t\t\tpriorBeta: 1,\n\t\t\treferenceMean: 0.3,\n\t\t\tslack: 0.15,\n\t\t\tthreshold: 3,\n\t\t}),\n\t\tverifier: { evaluations: [], runnerHealth: \"unverified\" },\n\t\tbudget: input.budget,\n\t\tpolicy: {\n\t\t\tpolicyVersion: input.policyVersion,\n\t\t\tauthorizedActions: input.authorizedActions,\n\t\t\trequiredApprovals: [],\n\t\t\tinterruptionReason: input.interruptionReason ?? null,\n\t\t},\n\t\thostSequence: 0,\n\t\tprogressHistory: input.progressHistory ?? [],\n\t\tcheckpointCount: 0,\n\t};\n\tconst sources = [...new Map([...baseSources, ...usedSources.values()].map((s) => [s.id, s])).values()];\n\tconst value: RuntimeBridgeOutput = { state, claims: kernelClaims, observations: kernelObservations, sources };\n\tconst empty =\n\t\tloss.lostFields.length === 0 &&\n\t\tloss.unmappedClaims.length === 0 &&\n\t\tloss.unknownBindings.length === 0 &&\n\t\tloss.sourceFamilyConflicts.length === 0 &&\n\t\tloss.rejectedObservations.length === 0;\n\tif (empty) return { status: \"mapped\", value };\n\treturn {\n\t\tstatus: \"partial\",\n\t\tvalue,\n\t\tloss,\n\t\ttouchesRequiredClaims: [...touched].sort(lexical),\n\t};\n}\n\n/** Sources admitted for reference evidence: only repository/official qualify. */\nexport function sourceIdentities(overrides: readonly SourceIdentity[] = []): readonly SourceIdentity[] {\n\treturn [\n\t\t{ id: \"deterministic_validator\", family: \"host\", kind: \"repository\" },\n\t\t{ id: \"workspace_witness\", family: \"host\", kind: \"repository\" },\n\t\t{ id: \"trusted_attestation\", family: \"attestation\", kind: \"official\" },\n\t\t{ id: \"effect_reconciliation\", family: \"host\", kind: \"repository\" },\n\t\t{ id: \"independent_review\", family: \"review\", kind: \"official\" },\n\t\t{ id: \"self_review\", family: \"model\", kind: \"model\" },\n\t\t{ id: \"model_narrative\", family: \"model\", kind: \"model\" },\n\t\t...overrides,\n\t];\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface CapabilityNeed {
|
|
2
|
+
readonly capability: string;
|
|
3
|
+
readonly weight: number;
|
|
4
|
+
readonly required: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface SkillDescriptor {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly contentHash: string;
|
|
9
|
+
readonly capabilities: readonly string[];
|
|
10
|
+
readonly phases: readonly string[];
|
|
11
|
+
readonly tokenCost: number;
|
|
12
|
+
readonly dependencies: readonly string[];
|
|
13
|
+
readonly conflicts: readonly string[];
|
|
14
|
+
readonly permissions: readonly string[];
|
|
15
|
+
readonly explicitOnly: boolean;
|
|
16
|
+
/** Exact versions intentionally, never a hand-written semver implementation. */
|
|
17
|
+
readonly packages: Readonly<Record<string, readonly string[]>>;
|
|
18
|
+
}
|
|
19
|
+
export interface SkillPlanInput {
|
|
20
|
+
readonly phase: string;
|
|
21
|
+
readonly needs: readonly CapabilityNeed[];
|
|
22
|
+
readonly catalog: readonly SkillDescriptor[];
|
|
23
|
+
/** Host-owned content pins, not fields supplied by the skill being selected. */
|
|
24
|
+
readonly approvedHashes: Readonly<Record<string, string>>;
|
|
25
|
+
readonly installedVersions: Readonly<Record<string, string>>;
|
|
26
|
+
readonly allowedPermissions: readonly string[];
|
|
27
|
+
readonly explicitSkills: readonly string[];
|
|
28
|
+
readonly tokenBudget: number;
|
|
29
|
+
readonly maxSkills: number;
|
|
30
|
+
}
|
|
31
|
+
export interface SkillPlan {
|
|
32
|
+
readonly selected: readonly string[];
|
|
33
|
+
readonly tokenCost: number;
|
|
34
|
+
readonly covered: readonly string[];
|
|
35
|
+
readonly uncoveredRequired: readonly string[];
|
|
36
|
+
readonly blockedExplicit: readonly string[];
|
|
37
|
+
readonly rejected: Readonly<Record<string, string>>;
|
|
38
|
+
readonly algorithm: "exact-small" | "greedy-with-singleton";
|
|
39
|
+
readonly state: "covered" | "capability-gap" | "explicit-blocked";
|
|
40
|
+
}
|
|
41
|
+
export declare function planSkills(input: SkillPlanInput): SkillPlan;
|
|
42
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/metacognition/skills.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B;AACD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAC/D;AACD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,uBAAuB,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;CAClE;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAmM3D","sourcesContent":["/**\n * Capability-coverage skill planning under host-approved constraints.\n *\n * Ported from docs/OMK_skill_knowledge_control_2026-09-19.zip\n * (src/skills.ts). Exact search for small sets, bounded greedy for large sets.\n */\nimport { arrayBound, ensure, integer, lexical, text, unique } from \"./validation.ts\";\n\nexport interface CapabilityNeed {\n\treadonly capability: string;\n\treadonly weight: number;\n\treadonly required: boolean;\n}\nexport interface SkillDescriptor {\n\treadonly id: string;\n\treadonly contentHash: string;\n\treadonly capabilities: readonly string[];\n\treadonly phases: readonly string[];\n\treadonly tokenCost: number;\n\treadonly dependencies: readonly string[];\n\treadonly conflicts: readonly string[];\n\treadonly permissions: readonly string[];\n\treadonly explicitOnly: boolean;\n\t/** Exact versions intentionally, never a hand-written semver implementation. */\n\treadonly packages: Readonly<Record<string, readonly string[]>>;\n}\nexport interface SkillPlanInput {\n\treadonly phase: string;\n\treadonly needs: readonly CapabilityNeed[];\n\treadonly catalog: readonly SkillDescriptor[];\n\t/** Host-owned content pins, not fields supplied by the skill being selected. */\n\treadonly approvedHashes: Readonly<Record<string, string>>;\n\treadonly installedVersions: Readonly<Record<string, string>>;\n\treadonly allowedPermissions: readonly string[];\n\treadonly explicitSkills: readonly string[];\n\treadonly tokenBudget: number;\n\treadonly maxSkills: number;\n}\nexport interface SkillPlan {\n\treadonly selected: readonly string[];\n\treadonly tokenCost: number;\n\treadonly covered: readonly string[];\n\treadonly uncoveredRequired: readonly string[];\n\treadonly blockedExplicit: readonly string[];\n\treadonly rejected: Readonly<Record<string, string>>;\n\treadonly algorithm: \"exact-small\" | \"greedy-with-singleton\";\n\treadonly state: \"covered\" | \"capability-gap\" | \"explicit-blocked\";\n}\ninterface Value {\n\trequired: number;\n\toptional: number;\n\tcost: number;\n\tids: string[];\n}\n\nexport function planSkills(input: SkillPlanInput): SkillPlan {\n\ttext(input.phase, \"phase\", 128);\n\tinteger(input.tokenBudget, \"tokenBudget\", 10_000_000);\n\tinteger(input.maxSkills, \"maxSkills\", 64);\n\tarrayBound(input.catalog, \"catalog\", 500);\n\tarrayBound(input.needs, \"needs\", 128);\n\tunique(\n\t\tinput.catalog.map((s) => s.id),\n\t\t\"catalog ids\",\n\t);\n\tunique(\n\t\tinput.needs.map((n) => n.capability),\n\t\t\"need ids\",\n\t\t128,\n\t);\n\tunique(input.allowedPermissions, \"permissions\");\n\tunique(input.explicitSkills, \"explicitSkills\", 64);\n\tfor (const need of input.needs) {\n\t\tensure(Number.isFinite(need.weight) && need.weight > 0 && need.weight <= 1_000_000, \"invalid need weight\");\n\t\tensure(typeof need.required === \"boolean\", \"required must be boolean\");\n\t}\n\tconst byId = new Map(input.catalog.map((skill) => [skill.id, skill]));\n\tconst rejected = new Map<string, string>();\n\tfor (const skill of input.catalog) {\n\t\ttext(skill.contentHash, \"contentHash\");\n\t\tinteger(skill.tokenCost, \"tokenCost\", 1_000_000);\n\t\tunique(skill.capabilities, \"capabilities\", 128);\n\t\tunique(skill.phases, \"phases\", 32);\n\t\tunique(skill.dependencies, \"dependencies\", 64);\n\t\tunique(skill.conflicts, \"conflicts\", 64);\n\t\tunique(skill.permissions, \"skill permissions\", 64);\n\t\tensure(typeof skill.explicitOnly === \"boolean\", \"explicitOnly must be boolean\");\n\t\tensure(skill.packages !== null && typeof skill.packages === \"object\", \"packages must be a record\");\n\t\tfor (const [name, versions] of Object.entries(skill.packages)) {\n\t\t\ttext(name, \"package\");\n\t\t\tunique(versions, \"versions\", 128);\n\t\t\tensure(versions.length > 0, \"empty supported versions\");\n\t\t}\n\t\tif (input.approvedHashes[skill.id] !== skill.contentHash) rejected.set(skill.id, \"unapproved-or-changed-content\");\n\t\telse if (!skill.phases.includes(input.phase)) rejected.set(skill.id, \"phase-mismatch\");\n\t\telse if (skill.explicitOnly && !input.explicitSkills.includes(skill.id)) rejected.set(skill.id, \"explicit-only\");\n\t\telse if (skill.permissions.some((permission) => !input.allowedPermissions.includes(permission))) {\n\t\t\trejected.set(skill.id, \"permission-denied\");\n\t\t} else if (\n\t\t\tObject.entries(skill.packages).some(\n\t\t\t\t([name, versions]) => !versions.includes(input.installedVersions[name] ?? \"\"),\n\t\t\t)\n\t\t) {\n\t\t\trejected.set(skill.id, \"version-unknown-or-incompatible\");\n\t\t}\n\t}\n\t// A cycle or unavailable prerequisite invalidates the entire dependent closure.\n\tconst closureCache = new Map<string, Set<string> | undefined>();\n\tconst closure = (id: string, trail = new Set<string>()): Set<string> | undefined => {\n\t\tif (trail.has(id) || rejected.has(id)) return undefined;\n\t\tif (closureCache.has(id)) return closureCache.get(id);\n\t\tconst skill = byId.get(id);\n\t\tif (!skill) return undefined;\n\t\tconst result = new Set([id]);\n\t\tconst next = new Set([...trail, id]);\n\t\tfor (const dependency of skill.dependencies) {\n\t\t\tconst children = closure(dependency, next);\n\t\t\tif (!children) {\n\t\t\t\tclosureCache.set(id, undefined);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tfor (const child of children) result.add(child);\n\t\t}\n\t\tclosureCache.set(id, result);\n\t\treturn result;\n\t};\n\tconst closures = new Map<string, Set<string>>();\n\tfor (const id of [...byId.keys()].sort(lexical)) {\n\t\tconst set = closure(id);\n\t\tif (set) closures.set(id, set);\n\t\telse if (!rejected.has(id)) rejected.set(id, \"invalid-dependency-closure\");\n\t}\n\tconst feasible = (ids: ReadonlySet<string>): boolean => {\n\t\tif (ids.size > input.maxSkills) return false;\n\t\tlet cost = 0;\n\t\tfor (const id of ids) {\n\t\t\tconst skill = byId.get(id);\n\t\t\tif (!skill || rejected.has(id)) return false;\n\t\t\tif (skill.dependencies.some((d) => !ids.has(d))) return false;\n\t\t\tif (skill.conflicts.some((c) => ids.has(c))) return false;\n\t\t\tcost += skill.tokenCost;\n\t\t}\n\t\treturn cost <= input.tokenBudget;\n\t};\n\tconst value = (ids: ReadonlySet<string>): Value => {\n\t\tconst coverage = new Set<string>();\n\t\tlet cost = 0;\n\t\tfor (const id of ids) {\n\t\t\tconst skill = byId.get(id)!;\n\t\t\tcost += skill.tokenCost;\n\t\t\tfor (const capability of skill.capabilities) coverage.add(capability);\n\t\t}\n\t\tlet required = 0,\n\t\t\toptional = 0;\n\t\tfor (const need of input.needs) {\n\t\t\tif (coverage.has(need.capability)) {\n\t\t\t\tif (need.required) required += need.weight;\n\t\t\t\telse optional += need.weight;\n\t\t\t}\n\t\t}\n\t\treturn { required, optional, cost, ids: [...ids].sort(lexical) };\n\t};\n\tconst better = (left: Value, right: Value): boolean =>\n\t\tleft.required !== right.required\n\t\t\t? left.required > right.required\n\t\t\t: left.optional !== right.optional\n\t\t\t\t? left.optional > right.optional\n\t\t\t\t: left.cost !== right.cost\n\t\t\t\t\t? left.cost < right.cost\n\t\t\t\t\t: left.ids.length !== right.ids.length\n\t\t\t\t\t\t? left.ids.length < right.ids.length\n\t\t\t\t\t\t: lexical(left.ids.join(\"\\0\"), right.ids.join(\"\\0\")) < 0;\n\tlet base = new Set<string>();\n\tconst blockedExplicit: string[] = [];\n\tfor (const id of [...input.explicitSkills].sort(lexical)) {\n\t\tconst set = closures.get(id);\n\t\tif (!set) blockedExplicit.push(id);\n\t\telse for (const item of set) base.add(item);\n\t}\n\tif (!feasible(base)) blockedExplicit.push(...input.explicitSkills.filter((id) => !blockedExplicit.includes(id)));\n\t// Conflicting explicit requests are never silently replaced by automatic picks.\n\tif (blockedExplicit.length > 0) base = new Set();\n\tlet best = base;\n\tconst candidates = [...closures.entries()].filter(([id]) => !base.has(id));\n\tconst algorithm = candidates.length <= 12 ? \"exact-small\" : \"greedy-with-singleton\";\n\tif (blockedExplicit.length === 0) {\n\t\tif (algorithm === \"exact-small\") {\n\t\t\tconst visit = (position: number, current: Set<string>): void => {\n\t\t\t\tif (!feasible(current)) return;\n\t\t\t\tif (better(value(current), value(best))) best = current;\n\t\t\t\tconst candidate = candidates[position];\n\t\t\t\tif (!candidate) return;\n\t\t\t\tvisit(position + 1, current);\n\t\t\t\tvisit(position + 1, new Set([...current, ...candidate[1]]));\n\t\t\t};\n\t\t\tvisit(0, base);\n\t\t} else {\n\t\t\tlet current = base;\n\t\t\twhile (true) {\n\t\t\t\tconst previous = value(current);\n\t\t\t\tlet winner: Set<string> | undefined;\n\t\t\t\tlet rank: readonly [number, number, string] = [-1, -1, \"\"];\n\t\t\t\tfor (const [id, set] of candidates) {\n\t\t\t\t\tif (current.has(id)) continue;\n\t\t\t\t\tconst joined = new Set([...current, ...set]);\n\t\t\t\t\tif (!feasible(joined)) continue;\n\t\t\t\t\tconst after = value(joined);\n\t\t\t\t\tconst requiredGain = after.required - previous.required;\n\t\t\t\t\tconst optionalGain = after.optional - previous.optional;\n\t\t\t\t\tif (requiredGain <= 0 && optionalGain <= 0) continue;\n\t\t\t\t\tconst cost = Math.max(1, after.cost - previous.cost);\n\t\t\t\t\tconst proposal = [requiredGain / cost, optionalGain / cost, id] as const;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!winner ||\n\t\t\t\t\t\tproposal[0] > rank[0] ||\n\t\t\t\t\t\t(proposal[0] === rank[0] &&\n\t\t\t\t\t\t\t(proposal[1] > rank[1] || (proposal[1] === rank[1] && lexical(proposal[2], rank[2]) < 0)))\n\t\t\t\t\t) {\n\t\t\t\t\t\twinner = joined;\n\t\t\t\t\t\trank = proposal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!winner) break;\n\t\t\t\tcurrent = winner;\n\t\t\t}\n\t\t\tbest = current;\n\t\t\tfor (const [, set] of candidates) {\n\t\t\t\tconst joined = new Set([...base, ...set]);\n\t\t\t\tif (feasible(joined) && better(value(joined), value(best))) best = joined;\n\t\t\t}\n\t\t}\n\t}\n\tconst allCovered = new Set([...best].flatMap((id) => byId.get(id)!.capabilities));\n\tconst uncoveredRequired = input.needs\n\t\t.filter((n) => n.required && !allCovered.has(n.capability))\n\t\t.map((n) => n.capability)\n\t\t.sort(lexical);\n\treturn {\n\t\tselected: [...best].sort(lexical),\n\t\ttokenCost: value(best).cost,\n\t\tcovered: input.needs\n\t\t\t.filter((n) => allCovered.has(n.capability))\n\t\t\t.map((n) => n.capability)\n\t\t\t.sort(lexical),\n\t\tuncoveredRequired,\n\t\tblockedExplicit: blockedExplicit.sort(lexical),\n\t\trejected: Object.fromEntries([...rejected].sort(([a], [b]) => lexical(a, b))),\n\t\talgorithm,\n\t\tstate: blockedExplicit.length ? \"explicit-blocked\" : uncoveredRequired.length ? \"capability-gap\" : \"covered\",\n\t};\n}\n"]}
|