chainlesschain 0.166.17 → 0.166.18
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/README.md +14 -7
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-CVW2n2rh.js → AIOps-CQSBl3hY.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DtuM163O.js → ActionButton-IQt-vRLt.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BXvl_qHu.js → Analytics-DkHC8O7k.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-VDBTFKOp.js → AppLayout-CSti2P2T.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-BNz2xCiG.js → Artifacts-C57hxn3v.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DTu9Hn9P.js → Audit-DByLntcf.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D2OCPzLe.js → BackgroundAgents-D1Bd2EOa.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-C9M-vG7G.js → Backup-VstHzHng.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BUkCNiUQ.js → BaseInput-CLhdexIf.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-OJ2ajF7l.js → Chat-BefC_JZS.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BdZt76Ab.js → ChatBubbleRenderer-DbXMvgmn.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C1gXKDsc.js → Checkbox-CEY982vx.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BXbznLg7.js → Codegen-Dcm_DTvJ.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CbCq5N0i.js → Col-C8SSu4KA.js} +1 -1
- package/src/assets/web-panel/assets/{Community-V8Ks6Yun.js → Community-BVV9vwRR.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DkeHQTpQ.js → Compact-B7c5Vo18.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-JeLKwn4Q.js → Compliance-Tq9jSZ5a.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-azfetcBz.js → Cowork-BJUjT09Q.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Q691i_Gp.js → Cron-CjV9PEaS.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BLjDRbr_.js → Crosschain-Dl7ReL8F.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D8ptXplK.js → DID-CG8PjWmM.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Ctj2VVZL.js → Dashboard-CDBM6wmF.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-D8VgkMJ8.js → Dropdown-8_55bXTD.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CQPe5S6q.js → EmailListRenderer-D3qOU1Cm.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-ySA-7SiN.js → FamilyGuardDashboard-Bv5oWMZF.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-1PMD-fBf.js → Federation-hpZ1xkKd.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C_jr6U4Q.js → FormItemContext-BN7GT191.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-Bu3bKf2B.js → GenericCardRenderer-PCRhfA7M.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Dv4Fa_T5.js → Git-CIlP2vy7.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DOEy1n1k.js → Governance-81lgm7YL.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DkvqzWcJ.js → Inference-Cs24xMOV.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DdUJK949.js → KnowledgeGraph-CrJLVCZo.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CRelcdUZ.js → Logs-DLyO8RKT.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-0AHbbTA4.js → MarkdownRenderer-DBOqijrP.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BuuBKsev.js → Marketplace-Dz7AbQZc.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DlgpEmA1.js → McpTools-BM0aFiWv.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DTfdqUGy.js → Memory-C9SJzENX.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CXLE5ZFO.js → MobileBridge-BO2HnNRk.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Dz25OB0n.js → MobileProjects-CK_jMz0l.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-kEL0fhgD.js → Mtc-CfhrJsdO.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BE4UvFJU.js → MtcAudit-BE2ELxgI.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CSApSn8c.js → Multisig-CgR_E3Jd.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D11FpKWx.js → NLProgramming-Cw9445_K.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CDL-D2CS.js → Notes-DZimkTrb.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-C0Q6lO-c.js → NotificationSettings-DxHVh4uT.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Iy-pnX56.js +1 -0
- package/src/assets/web-panel/assets/{Organization-Dc-maVAq.js → Organization-pPXJtWo4.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-B5mUpSvi.js → Overflow-YamdTJwA.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-TjXV53wq.js → P2P-BvqP53x7.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-Blz1Xn2n.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-DKRzQ2O6.js → Permissions-CgFRQqFJ.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dx2eqft8.js → PersonalDataHub-CFeo3-6O.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-CnYZMB5p.js → Pipeline-BkaRojEK.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BonKpPnp.js → Privacy-BNZEx2Qp.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DWO0Du3J.js → ProjectInit-HUBOgEEK.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-C9jqyYRv.js → ProjectSettings-CFMmhROS.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-CYpKwXbz.js → Projects-Dc517BXp.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CW-fkwJq.js → Providers-DTLf8bgj.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Cw0J3Zud.js → QrScannerModal-BBNjPszk.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BH4A4IpR.js → QuickAsk-DCsHvk3G.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CDwMwJus.js → Recommend-Dpr5YSop.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DKIPwzTf.js → RemoteSession-DmKnvqGg.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CklDj7qS.js → Reputation-CSRfuurX.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DJWZKsH0.js → Row-CDj3pQ_w.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BfSLCewo.js → RssFeed-DI0a_kNq.js} +2 -2
- package/src/assets/web-panel/assets/{Search-B0IST--x.js → Search-jAy7B2nU.js} +1 -1
- package/src/assets/web-panel/assets/{Security-h1sYNWtt.js → Security-CkHTqYhc.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Gh0-oxI_.js → Services-CP-0Nzga.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CNDV_jOs.js → Skeleton-BkF5-p3n.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-ByCLTh1n.js → Skills-BDu-utDE.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BfyrJTJz.js → Sla-CQvq_2Qb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BQzo9kNX.js → SpeechSettings-T7Ap512g.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B6fS6z_1.js → SyncSettings-Bt-PLvot.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-C-uKCP-l.js → Tasks-yLEcCogg.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-D6oDy7wL.js → Templates-ByN3fmbr.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-D3LT2wNQ.js → Tenant-DBI7hITH.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BteLcv_O.js → Terminal-B77_DlGX.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DHHuxfqH.js → TimelineRenderer-CsLTB_QO.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BRQeykXw.js → Tokens-BV2N6cR8.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-p2XaFWEu.js → Trigger-CjXWGH3p.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BxadBMft.js → Trust-uqXIq3WC.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DRBP7LDk.js → UkeySign-D-6qu4vY.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CZ3NZkh7.js → VideoEditing-CxGmx_2e.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C3NTBN7G.js → Wallet-DSq7WlAg.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C7LVgMlb.js → WebAuthn-CDBiD57O.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-0_Iveog7.js → WorkflowEditor-Z8f63TSb.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DzzluYo3.js → chat-B-UZFBjy.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DSMYXpaj.js → colors-CFk7K-7Q.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-W76u1VSV.js → compact-item-X0IVMvgi.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-otsESjb5.js → createContext-DWg4j2n6.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B2IW1J_J.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-3sNLrvug.js → hasIn-CkVCwNNF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdtmEKat.js → index-5OcZHdzc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DS9WYDMf.js → index-B273IY-E.js} +1 -1
- package/src/assets/web-panel/assets/{index-NaO9AE-F.js → index-B3-B3FWD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcGJtmHM.js → index-BB4KHHcv.js} +1 -1
- package/src/assets/web-panel/assets/index-BCp2ir-1.js +1 -0
- package/src/assets/web-panel/assets/{index-pVm_iUre.js → index-BG-GaZri.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpcQYzP7.js → index-BPBia4b-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXLx9HfA.js → index-BipwEbTA.js} +1 -1
- package/src/assets/web-panel/assets/{index-uSCkbpZH.js → index-BoskgPt9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMmdIpLA.js → index-Btqk6zWb.js} +1 -1
- package/src/assets/web-panel/assets/index-Bw4iuzRD.js +1 -0
- package/src/assets/web-panel/assets/{index-DLDh1OW3.js → index-BzXjYUmd.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9X_jqXe.js → index-C1ZAOJRW.js} +1 -1
- package/src/assets/web-panel/assets/{index-vBKPcmAP.js → index-CCLwoATF.js} +1 -1
- package/src/assets/web-panel/assets/{index-vUmYkqmu.js → index-CDfSD07S.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7A5U2IH.js → index-CLlP1E4X.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClOFeZ-t.js → index-CMCEXBRh.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cg86EzNp.js → index-CN8HZlLH.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ddd4mird.js → index-CNKFsBlz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CE7tSow-.js → index-CUBkvFPH.js} +1 -1
- package/src/assets/web-panel/assets/{index-GlIOE4ja.js → index-Ca0mij1n.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdU7IkKX.js → index-CbIAWbma.js} +1 -1
- package/src/assets/web-panel/assets/{index-UUHCwfNq.js → index-CbihMThv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRsD1PT2.js → index-CvOa-IFV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2aht9-M.js → index-Cvwu_rA_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJsQio5O.js → index-D-EJNxgR.js} +1 -1
- package/src/assets/web-panel/assets/{index-q7ftLqNt.js → index-D8uEL8Uw.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1I1AYJs.js → index-D92g4l3n.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZKAzEge.js → index-DCqpl_E_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKoFyHYQ.js → index-DLSBks8h.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDlDO2px.js → index-Db_5xhrU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CENWwjef.js → index-DcDggpWR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DH4cl52p.js → index-DeWKPQGs.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTA8Iavv.js → index-DhVHoqGL.js} +3 -3
- package/src/assets/web-panel/assets/{index-DmpaC2yk.js → index-DyWlOuak.js} +1 -1
- package/src/assets/web-panel/assets/{index-BA8mZxd-.js → index-LU54bChK.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtFOt5x1.js → index-OjnAwUJo.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5LOYdYm.js → index-P83LDnCz.js} +1 -1
- package/src/assets/web-panel/assets/{index-MhQQ3h8q.js → index-_-9k3Tna.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DF6llUXV.js → initDefaultProps-CFNgY8lJ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-vtDV8_5K.js → motion-D-5RrDzn.js} +1 -1
- package/src/assets/web-panel/assets/{move-B6c0bdy2.js → move-DN-L0Bd-.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DlLYWuBK.js → mtc-parser-6mgLSeCK.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BH0zOxLN.js → omit-ClWW8eTP.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D9di8_In.js → pickAttrs-Vystq3R8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BDSngufM.js → placementArrow-D0H9hK4W.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C_EawMvP.js → responsiveObserve-B3iNRU-a.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B_4wShxA.js → slide-CiMXe6am.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CbQu6qJ-.js → statusUtils-CGDZJ1uT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CvXJWYXb.js → styleChecker-D2zA6NkY.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-jjY1XknO.js → useFlexGapSupport-C1sYU6QE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CMXBdsK_.js → useFs-BzUHSjg2.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-YbAhhPXx.js → usePersonalDataHub-CxB5yZCq.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BFCTKc0H.js → vnode-BfUfMwtc.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CY9aBl5O.js → zoom-CFYmj1TO.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +80 -2
- package/src/commands/evolution.js +33 -27
- package/src/commands/serve.js +11 -2
- package/src/data/changelog.json +5 -5
- package/src/gateways/ws/session-protocol.js +1 -0
- package/src/gateways/ws/ws-agent-handler.js +70 -2
- package/src/gateways/ws/ws-server.js +8 -0
- package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
- package/src/lib/app-server/graph-runtime.js +115 -8
- package/src/lib/app-server/server.js +21 -2
- package/src/lib/app-server/websocket-transport.js +2 -0
- package/src/lib/evolution/agent-evolution-ingress.js +300 -0
- package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +22 -0
- package/src/lib/evolution/agent-evolution-runtime-composition.js +369 -0
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +752 -0
- package/src/lib/evolution/evolution-artifact-ports.js +48 -0
- package/src/lib/evolution/evolution-eval-gate.js +11 -4
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +499 -0
- package/src/lib/evolution/evolution-evidence-projector.js +61 -1
- package/src/lib/evolution/evolution-file-witness.js +601 -0
- package/src/lib/evolution/evolution-ledger-file-backend.js +176 -0
- package/src/lib/evolution/evolution-ledger-ports.js +353 -16
- package/src/lib/evolution/evolution-ledger.js +1355 -54
- package/src/lib/evolution/evolution-run-ledger-adapter.js +409 -0
- package/src/lib/evolution/evolution-run-wiki-maintenance-source.js +300 -0
- package/src/lib/evolution/scheduled-batch-wiki-maintenance-source.js +368 -0
- package/src/lib/evolution/skill-candidate-registry.js +649 -0
- package/src/lib/evolution/skill-promotion-controller.js +109 -38
- package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +451 -0
- package/src/lib/evolution/skill-promotion-review.js +793 -0
- package/src/lib/evolution/skill-registry-transition-capability.js +55 -0
- package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +1280 -0
- package/src/lib/evolution/skill-registry-transition-source.js +372 -0
- package/src/lib/evolution/skill-release-registry.js +2191 -11
- package/src/lib/evolution/skill-target-matrix-eval.js +133 -10
- package/src/lib/evolution/structured-memory-agent-control-plane.js +222 -0
- package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +351 -0
- package/src/lib/evolution/structured-memory-ledger-adapter.js +220 -0
- package/src/lib/evolution/structured-memory-policy-receipt-writer.js +164 -0
- package/src/lib/evolution/structured-memory-post-compact-hook.js +87 -0
- package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +221 -0
- package/src/lib/evolution/structured-memory-semantic-review-pipeline.js +313 -0
- package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +200 -0
- package/src/lib/evolution/wiki-maintenance-trigger-ledger-adapter.js +687 -0
- package/src/lib/evolution-system.js +65 -30
- package/src/lib/mcp-lifecycle-authority.js +21 -2
- package/src/lib/remote-approval-bridge.js +24 -0
- package/src/lib/scheduler-kernel/store.js +62 -14
- package/src/repl/agent-repl.js +45 -0
- package/src/runtime/agent-runtime.js +114 -1
- package/src/runtime/headless-runner.js +19 -0
- package/src/runtime/headless-stream.js +43 -0
- package/src/runtime/runtime-factory.js +19 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-ZRE0OKbj.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-DvV2btIr.js +0 -7
- package/src/assets/web-panel/assets/devWarning-BztaXF84.js +0 -1
- package/src/assets/web-panel/assets/index-4jP_hG_4.js +0 -1
- package/src/assets/web-panel/assets/index-zxwuAXL5.js +0 -1
- package/src/lib/learning/learning-hooks.js +0 -123
|
@@ -17,9 +17,9 @@ import {
|
|
|
17
17
|
} from "./skill-execution-manifest.js";
|
|
18
18
|
|
|
19
19
|
export const SKILL_TARGET_MATRIX_EVAL_PLAN_SCHEMA =
|
|
20
|
-
"chainlesschain.skill-target-matrix-eval-plan/
|
|
20
|
+
"chainlesschain.skill-target-matrix-eval-plan/v2";
|
|
21
21
|
export const SKILL_TARGET_MATRIX_EVAL_RECEIPT_SCHEMA =
|
|
22
|
-
"chainlesschain.skill-target-matrix-eval-receipt/
|
|
22
|
+
"chainlesschain.skill-target-matrix-eval-receipt/v2";
|
|
23
23
|
export const SKILL_TARGET_MATRIX_EVAL_PLAN_RESOLUTION_SCHEMA =
|
|
24
24
|
"chainlesschain.skill-target-matrix-eval-plan-resolution/v1";
|
|
25
25
|
export const SKILL_TARGET_MATRIX_EVAL_RESERVATION_SCHEMA =
|
|
@@ -38,15 +38,15 @@ export const SKILL_TARGET_MATRIX_EVAL_DEADLINE_CODE =
|
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* This module commits trusted composition metadata and performs an all-cell
|
|
41
|
-
* conjunction
|
|
42
|
-
*
|
|
41
|
+
* conjunction with a preregistered family-wise confidence correction. It is
|
|
42
|
+
* not a proof of JavaScript callable bytes or a production grader deployment.
|
|
43
43
|
*/
|
|
44
44
|
export const SKILL_TARGET_MATRIX_EVAL_FOUNDATION_SEMANTICS = Object.freeze({
|
|
45
45
|
kind: "trusted-composition-configuration-commitment",
|
|
46
46
|
decision: "all-cells-conjunction",
|
|
47
47
|
cellSettlement:
|
|
48
48
|
"trusted-composition-bound-total-settlement-window-before-root-deadline",
|
|
49
|
-
crossCellStatistics:
|
|
49
|
+
crossCellStatistics: "bonferroni-two-sided-family-wise-confidence",
|
|
50
50
|
requiresAttestedLoader: true,
|
|
51
51
|
residuals: Object.freeze([
|
|
52
52
|
"attested descriptor-to-callable loader",
|
|
@@ -100,6 +100,8 @@ const PLAN_INPUT_KEYS = new Set([
|
|
|
100
100
|
"matrixAuthorityRoot",
|
|
101
101
|
"maxTotalWallClockMs",
|
|
102
102
|
"aggregateReceiptTtlMs",
|
|
103
|
+
"familywiseErrorRate",
|
|
104
|
+
"comparisonCorrection",
|
|
103
105
|
"issuedAt",
|
|
104
106
|
"expiresAt",
|
|
105
107
|
"cells",
|
|
@@ -232,6 +234,7 @@ const CELL_RESULT_KEYS = new Set([
|
|
|
232
234
|
"evaluationContextDigest",
|
|
233
235
|
"childReceiptDigest",
|
|
234
236
|
"childFullDigest",
|
|
237
|
+
"confidenceZ",
|
|
235
238
|
"decision",
|
|
236
239
|
"reasonCodes",
|
|
237
240
|
"issuedAt",
|
|
@@ -257,6 +260,8 @@ const RECEIPT_KEYS = new Set([
|
|
|
257
260
|
"planIssuedAt",
|
|
258
261
|
"planExpiresAt",
|
|
259
262
|
"aggregateReceiptTtlMs",
|
|
263
|
+
"familywiseErrorRate",
|
|
264
|
+
"comparisonCorrection",
|
|
260
265
|
"planAuthentication",
|
|
261
266
|
"reservation",
|
|
262
267
|
"finalization",
|
|
@@ -494,6 +499,71 @@ function normalizeInteger(value, label, { minimum = 0, maximum } = {}) {
|
|
|
494
499
|
return value;
|
|
495
500
|
}
|
|
496
501
|
|
|
502
|
+
function normalizeFinite(value, label, { minimum, maximum } = {}) {
|
|
503
|
+
if (
|
|
504
|
+
typeof value !== "number" ||
|
|
505
|
+
!Number.isFinite(value) ||
|
|
506
|
+
(minimum !== undefined && value < minimum) ||
|
|
507
|
+
(maximum !== undefined && value > maximum)
|
|
508
|
+
) {
|
|
509
|
+
throw matrixError(
|
|
510
|
+
SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
|
|
511
|
+
`${label} must be a finite number in range`,
|
|
512
|
+
);
|
|
513
|
+
}
|
|
514
|
+
return value;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Peter J. Acklam's rational approximation. The returned quantile is used
|
|
518
|
+
// only to verify a preregistered confidence bound, never to manufacture one
|
|
519
|
+
// after observing evaluation outcomes.
|
|
520
|
+
function standardNormalQuantile(probability) {
|
|
521
|
+
const p = normalizeFinite(probability, "normal quantile probability", {
|
|
522
|
+
minimum: Number.EPSILON,
|
|
523
|
+
maximum: 1 - Number.EPSILON,
|
|
524
|
+
});
|
|
525
|
+
const a = [
|
|
526
|
+
-39.69683028665376, 220.9460984245205, -275.9285104469687, 138.357751867269,
|
|
527
|
+
-30.66479806614716, 2.506628277459239,
|
|
528
|
+
];
|
|
529
|
+
const b = [
|
|
530
|
+
-54.47609879822406, 161.5858368580409, -155.6989798598866,
|
|
531
|
+
66.80131188771972, -13.28068155288572,
|
|
532
|
+
];
|
|
533
|
+
const c = [
|
|
534
|
+
-0.007784894002430293, -0.3223964580411365, -2.400758277161838,
|
|
535
|
+
-2.549732539343734, 4.374664141464968, 2.938163982698783,
|
|
536
|
+
];
|
|
537
|
+
const d = [
|
|
538
|
+
0.007784695709041462, 0.3224671290700398, 2.445134137142996,
|
|
539
|
+
3.754408661907416,
|
|
540
|
+
];
|
|
541
|
+
const low = 0.02425;
|
|
542
|
+
const high = 1 - low;
|
|
543
|
+
if (p < low) {
|
|
544
|
+
const q = Math.sqrt(-2 * Math.log(p));
|
|
545
|
+
return (
|
|
546
|
+
(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /
|
|
547
|
+
((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
if (p > high) return -standardNormalQuantile(1 - p);
|
|
551
|
+
const q = p - 0.5;
|
|
552
|
+
const r = q * q;
|
|
553
|
+
return (
|
|
554
|
+
((((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) *
|
|
555
|
+
q) /
|
|
556
|
+
(((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1)
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
function requiredFamilywiseConfidenceZ(familywiseErrorRate, cellCount) {
|
|
561
|
+
const comparisonCount = cellCount * 2;
|
|
562
|
+
return standardNormalQuantile(
|
|
563
|
+
1 - familywiseErrorRate / (2 * comparisonCount),
|
|
564
|
+
);
|
|
565
|
+
}
|
|
566
|
+
|
|
497
567
|
function normalizeTimestamp(value, label) {
|
|
498
568
|
if (typeof value !== "string" || value.length > 64) {
|
|
499
569
|
throw matrixError(
|
|
@@ -982,6 +1052,20 @@ function planCore(input) {
|
|
|
982
1052
|
"plan.aggregateReceiptTtlMs",
|
|
983
1053
|
{ minimum: 1_000, maximum: MAX_RECEIPT_TTL_MS },
|
|
984
1054
|
),
|
|
1055
|
+
familywiseErrorRate: normalizeFinite(
|
|
1056
|
+
input.familywiseErrorRate,
|
|
1057
|
+
"plan.familywiseErrorRate",
|
|
1058
|
+
{ minimum: 0.001, maximum: 0.1 },
|
|
1059
|
+
),
|
|
1060
|
+
comparisonCorrection:
|
|
1061
|
+
input.comparisonCorrection === "bonferroni-two-sided"
|
|
1062
|
+
? input.comparisonCorrection
|
|
1063
|
+
: (() => {
|
|
1064
|
+
throw matrixError(
|
|
1065
|
+
SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
|
|
1066
|
+
"plan.comparisonCorrection is invalid",
|
|
1067
|
+
);
|
|
1068
|
+
})(),
|
|
985
1069
|
issuedAt: issued.timestamp,
|
|
986
1070
|
expiresAt: expires.timestamp,
|
|
987
1071
|
cells: normalizePlanCells(input.cells),
|
|
@@ -2017,7 +2101,7 @@ async function reservePlan(state, plan, deadlineMs, wallDeadlineAt) {
|
|
|
2017
2101
|
return validated.snapshot;
|
|
2018
2102
|
}
|
|
2019
2103
|
|
|
2020
|
-
function deriveMatrixDecision(cellResults) {
|
|
2104
|
+
function deriveMatrixDecision(cellResults, statisticalPlan) {
|
|
2021
2105
|
let decision = "accepted";
|
|
2022
2106
|
let reasonCodes = ["MATRIX_ALL_CELLS_ACCEPTED"];
|
|
2023
2107
|
if (cellResults.some((cell) => cell.decision === "rejected")) {
|
|
@@ -2028,6 +2112,18 @@ function deriveMatrixDecision(cellResults) {
|
|
|
2028
2112
|
) {
|
|
2029
2113
|
decision = "needs-more-evidence";
|
|
2030
2114
|
reasonCodes = ["MATRIX_CELL_NEEDS_MORE_EVIDENCE"];
|
|
2115
|
+
} else if (
|
|
2116
|
+
cellResults.some(
|
|
2117
|
+
(cell) =>
|
|
2118
|
+
cell.confidenceZ + Number.EPSILON <
|
|
2119
|
+
requiredFamilywiseConfidenceZ(
|
|
2120
|
+
statisticalPlan.familywiseErrorRate,
|
|
2121
|
+
cellResults.length,
|
|
2122
|
+
),
|
|
2123
|
+
)
|
|
2124
|
+
) {
|
|
2125
|
+
decision = "needs-more-evidence";
|
|
2126
|
+
reasonCodes = ["MATRIX_FAMILYWISE_CONFIDENCE_INSUFFICIENT"];
|
|
2031
2127
|
}
|
|
2032
2128
|
return deepFreeze({ decision, reasonCodes: deepFreeze(reasonCodes) });
|
|
2033
2129
|
}
|
|
@@ -2049,6 +2145,8 @@ function matrixDecisionCommitment(input) {
|
|
|
2049
2145
|
targetMatrixRoot: input.plan.targetMatrixRoot,
|
|
2050
2146
|
matrixAuthorityRoot: input.plan.matrixAuthorityRoot,
|
|
2051
2147
|
planDigest: input.plan.planDigest,
|
|
2148
|
+
familywiseErrorRate: input.plan.familywiseErrorRate,
|
|
2149
|
+
comparisonCorrection: input.plan.comparisonCorrection,
|
|
2052
2150
|
planAuthenticationDigest: input.planAuthentication.evidenceDigest,
|
|
2053
2151
|
reservationReceiptDigest: input.reservation.receiptDigest,
|
|
2054
2152
|
cellCount: input.cellResults.length,
|
|
@@ -2219,6 +2317,10 @@ function normalizeCellResult(value, label) {
|
|
|
2219
2317
|
value.childFullDigest,
|
|
2220
2318
|
`${label}.childFullDigest`,
|
|
2221
2319
|
),
|
|
2320
|
+
confidenceZ: normalizeFinite(value.confidenceZ, `${label}.confidenceZ`, {
|
|
2321
|
+
minimum: 1.64,
|
|
2322
|
+
maximum: 4,
|
|
2323
|
+
}),
|
|
2222
2324
|
decision: normalizeDecision(value.decision, `${label}.decision`),
|
|
2223
2325
|
reasonCodes: normalizeReasonCodes(
|
|
2224
2326
|
value.reasonCodes,
|
|
@@ -2358,7 +2460,7 @@ function verifyMatrixReceiptStructure(
|
|
|
2358
2460
|
const reservation = normalizeStandaloneReservation(snapshot.reservation);
|
|
2359
2461
|
const finalization = normalizeStandaloneFinalization(snapshot.finalization);
|
|
2360
2462
|
const cellResults = normalizeCellResults(snapshot.cellResults);
|
|
2361
|
-
const decision = deriveMatrixDecision(cellResults);
|
|
2463
|
+
const decision = deriveMatrixDecision(cellResults, snapshot);
|
|
2362
2464
|
const normalized = deepFreeze({
|
|
2363
2465
|
schema: SKILL_TARGET_MATRIX_EVAL_RECEIPT_SCHEMA,
|
|
2364
2466
|
matrixEvalId: normalizeId(snapshot.matrixEvalId, "receipt.matrixEvalId"),
|
|
@@ -2413,6 +2515,20 @@ function verifyMatrixReceiptStructure(
|
|
|
2413
2515
|
"receipt.aggregateReceiptTtlMs",
|
|
2414
2516
|
{ minimum: 1_000, maximum: MAX_RECEIPT_TTL_MS },
|
|
2415
2517
|
),
|
|
2518
|
+
familywiseErrorRate: normalizeFinite(
|
|
2519
|
+
snapshot.familywiseErrorRate,
|
|
2520
|
+
"receipt.familywiseErrorRate",
|
|
2521
|
+
{ minimum: 0.001, maximum: 0.1 },
|
|
2522
|
+
),
|
|
2523
|
+
comparisonCorrection:
|
|
2524
|
+
snapshot.comparisonCorrection === "bonferroni-two-sided"
|
|
2525
|
+
? snapshot.comparisonCorrection
|
|
2526
|
+
: (() => {
|
|
2527
|
+
throw matrixError(
|
|
2528
|
+
SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
|
|
2529
|
+
"receipt.comparisonCorrection is invalid",
|
|
2530
|
+
);
|
|
2531
|
+
})(),
|
|
2416
2532
|
planAuthentication,
|
|
2417
2533
|
reservation,
|
|
2418
2534
|
finalization,
|
|
@@ -2459,7 +2575,7 @@ function verifyMatrixReceiptStructure(
|
|
|
2459
2575
|
reasonCodes: decision.reasonCodes,
|
|
2460
2576
|
});
|
|
2461
2577
|
const expectedCommitmentDigest = domainDigest(
|
|
2462
|
-
"chainlesschain.skill-target-matrix-eval-decision-commitment/
|
|
2578
|
+
"chainlesschain.skill-target-matrix-eval-decision-commitment/v2",
|
|
2463
2579
|
expectedCommitment,
|
|
2464
2580
|
"matrix decision commitment",
|
|
2465
2581
|
);
|
|
@@ -2880,6 +2996,11 @@ export class SkillTargetMatrixEvalAggregator {
|
|
|
2880
2996
|
verifiedSnapshot,
|
|
2881
2997
|
`matrix cell ${planCell.cellId} verified full receipt`,
|
|
2882
2998
|
),
|
|
2999
|
+
confidenceZ: normalizeFinite(
|
|
3000
|
+
verifiedSnapshot.confidenceZ,
|
|
3001
|
+
`matrix cell ${planCell.cellId} confidenceZ`,
|
|
3002
|
+
{ minimum: 1.64, maximum: 4 },
|
|
3003
|
+
),
|
|
2883
3004
|
decision: normalizeDecision(
|
|
2884
3005
|
verifiedSnapshot.decision,
|
|
2885
3006
|
`matrix cell ${planCell.cellId} decision`,
|
|
@@ -2895,7 +3016,7 @@ export class SkillTargetMatrixEvalAggregator {
|
|
|
2895
3016
|
}
|
|
2896
3017
|
const normalizedCells = normalizeCellResults(cellResults);
|
|
2897
3018
|
const root = childReceiptRoot(normalizedCells);
|
|
2898
|
-
const derived = deriveMatrixDecision(normalizedCells);
|
|
3019
|
+
const derived = deriveMatrixDecision(normalizedCells, plan);
|
|
2899
3020
|
const commitment = matrixDecisionCommitment({
|
|
2900
3021
|
plan,
|
|
2901
3022
|
planAuthentication: resolved.authentication,
|
|
@@ -2906,7 +3027,7 @@ export class SkillTargetMatrixEvalAggregator {
|
|
|
2906
3027
|
reasonCodes: derived.reasonCodes,
|
|
2907
3028
|
});
|
|
2908
3029
|
const decisionCommitmentDigest = domainDigest(
|
|
2909
|
-
"chainlesschain.skill-target-matrix-eval-decision-commitment/
|
|
3030
|
+
"chainlesschain.skill-target-matrix-eval-decision-commitment/v2",
|
|
2910
3031
|
commitment,
|
|
2911
3032
|
"matrix decision commitment",
|
|
2912
3033
|
);
|
|
@@ -2953,6 +3074,8 @@ export class SkillTargetMatrixEvalAggregator {
|
|
|
2953
3074
|
planIssuedAt: plan.issuedAt,
|
|
2954
3075
|
planExpiresAt: plan.expiresAt,
|
|
2955
3076
|
aggregateReceiptTtlMs: plan.aggregateReceiptTtlMs,
|
|
3077
|
+
familywiseErrorRate: plan.familywiseErrorRate,
|
|
3078
|
+
comparisonCorrection: plan.comparisonCorrection,
|
|
2956
3079
|
planAuthentication: resolved.authentication,
|
|
2957
3080
|
reservation,
|
|
2958
3081
|
finalization,
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import structuredMemory from "@chainlesschain/session-core/structured-evolution-memory";
|
|
2
|
+
import { StructuredMemoryLedgerAdapter } from "./structured-memory-ledger-adapter.js";
|
|
3
|
+
import { StructuredMemoryAuthorityLedgerAdapter } from "./structured-memory-authority-ledger-adapter.js";
|
|
4
|
+
import { captureStructuredMemoryPromotionReceiptWriter } from "./structured-memory-promotion-receipt-writer.js";
|
|
5
|
+
import { captureStructuredMemoryPolicyReceiptWriter } from "./structured-memory-policy-receipt-writer.js";
|
|
6
|
+
import { createStructuredMemorySemanticReviewPipeline } from "./structured-memory-semantic-review-pipeline.js";
|
|
7
|
+
import { createSkillEvaluatedPromotionControlPlane } from "./skill-promotion-controller.js";
|
|
8
|
+
|
|
9
|
+
const { captureStructuredMemoryAuthority } = structuredMemory;
|
|
10
|
+
|
|
11
|
+
export const STRUCTURED_MEMORY_AGENT_CONTROL_PLANE_SCHEMA =
|
|
12
|
+
"chainlesschain.structured-memory-agent-control-plane/v1";
|
|
13
|
+
|
|
14
|
+
const CONTROL_PLANES = new WeakSet();
|
|
15
|
+
|
|
16
|
+
function sameStorage(left, right) {
|
|
17
|
+
return (
|
|
18
|
+
left.tenantId === right.tenantId &&
|
|
19
|
+
left.artifactTenantId === right.artifactTenantId &&
|
|
20
|
+
left.streamId === right.streamId &&
|
|
21
|
+
left.audience === right.audience &&
|
|
22
|
+
left.purpose === right.purpose
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function createStructuredMemoryAgentControlPlane({
|
|
27
|
+
memoryAdapter,
|
|
28
|
+
authorityAdapter,
|
|
29
|
+
critic,
|
|
30
|
+
evaluator,
|
|
31
|
+
proposerAuthority,
|
|
32
|
+
governorAuthority,
|
|
33
|
+
promotionAuthority,
|
|
34
|
+
promotionReceiptWriter,
|
|
35
|
+
policyReceiptWriter,
|
|
36
|
+
} = {}) {
|
|
37
|
+
if (!(memoryAdapter instanceof StructuredMemoryLedgerAdapter)) {
|
|
38
|
+
throw new TypeError("a StructuredMemoryLedgerAdapter is required");
|
|
39
|
+
}
|
|
40
|
+
if (!(authorityAdapter instanceof StructuredMemoryAuthorityLedgerAdapter)) {
|
|
41
|
+
throw new TypeError("a StructuredMemoryAuthorityLedgerAdapter is required");
|
|
42
|
+
}
|
|
43
|
+
if (!sameStorage(memoryAdapter.descriptor, authorityAdapter.descriptor)) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
"memory and authority adapters must share one durable stream",
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
const promotion = captureStructuredMemoryPromotionReceiptWriter(
|
|
49
|
+
promotionReceiptWriter,
|
|
50
|
+
);
|
|
51
|
+
const policy =
|
|
52
|
+
captureStructuredMemoryPolicyReceiptWriter(policyReceiptWriter);
|
|
53
|
+
const tenantId = memoryAdapter.descriptor.tenantId;
|
|
54
|
+
const promotionActor = captureStructuredMemoryAuthority(promotionAuthority, {
|
|
55
|
+
tenantId,
|
|
56
|
+
role: "promotion-controller",
|
|
57
|
+
actorType: "service",
|
|
58
|
+
});
|
|
59
|
+
if (
|
|
60
|
+
promotion.descriptor.tenantId !== tenantId ||
|
|
61
|
+
policy.descriptor.tenantId !== tenantId
|
|
62
|
+
) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
"memory receipt writers must share the control-plane tenant",
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// createMemory() performs the authoritative event/snapshot replay and rejects
|
|
69
|
+
// invalid lineage before any producer can receive the resulting capability.
|
|
70
|
+
const memory = memoryAdapter.createMemory();
|
|
71
|
+
const semantic = createStructuredMemorySemanticReviewPipeline({
|
|
72
|
+
tenantId,
|
|
73
|
+
memory,
|
|
74
|
+
authorityStore: authorityAdapter,
|
|
75
|
+
critic,
|
|
76
|
+
evaluator,
|
|
77
|
+
proposerAuthority,
|
|
78
|
+
governorAuthority,
|
|
79
|
+
});
|
|
80
|
+
const appendPromotionMemory = async (authorityReceipt) => {
|
|
81
|
+
if (
|
|
82
|
+
authorityReceipt?.kind !== "promotion" ||
|
|
83
|
+
authorityReceipt.tenantId !== tenantId ||
|
|
84
|
+
authorityReceipt.layer !== "procedural" ||
|
|
85
|
+
authorityReceipt.action !== "accept" ||
|
|
86
|
+
authorityReceipt.decision !== "accepted"
|
|
87
|
+
) {
|
|
88
|
+
throw new Error("invalid durable Memory promotion authority receipt");
|
|
89
|
+
}
|
|
90
|
+
const existing = memory.projection().memories[authorityReceipt.memoryId];
|
|
91
|
+
if (existing) {
|
|
92
|
+
if (
|
|
93
|
+
existing.layer !== "procedural" ||
|
|
94
|
+
existing.status !== "active" ||
|
|
95
|
+
existing.contentDigest !== authorityReceipt.contentDigest ||
|
|
96
|
+
existing.artifactRef !== authorityReceipt.artifactRef ||
|
|
97
|
+
existing.receipts?.promotion !== authorityReceipt.receiptDigest
|
|
98
|
+
) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
"persisted procedural memory conflicts with the promotion receipt",
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return Object.freeze({
|
|
104
|
+
status: "recovered",
|
|
105
|
+
memory: existing,
|
|
106
|
+
projection: memory.projection(),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return memory.append({
|
|
110
|
+
eventId: `promotion-${authorityReceipt.receiptDigest.slice("sha256:".length)}`,
|
|
111
|
+
memoryId: authorityReceipt.memoryId,
|
|
112
|
+
layer: "procedural",
|
|
113
|
+
action: "accept",
|
|
114
|
+
authority: promotionActor,
|
|
115
|
+
automatic: true,
|
|
116
|
+
contentDigest: authorityReceipt.contentDigest,
|
|
117
|
+
artifactRef: authorityReceipt.artifactRef,
|
|
118
|
+
evidenceRefs: authorityReceipt.evidenceRefs,
|
|
119
|
+
supersedes: [],
|
|
120
|
+
receiptRefs: { promotion: authorityReceipt.receiptDigest },
|
|
121
|
+
timestamp: authorityReceipt.issuedAt,
|
|
122
|
+
metadata: {
|
|
123
|
+
promotionAuthorityReceiptDigest: authorityReceipt.receiptDigest,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const reconcilePromotionMemories = async () => {
|
|
128
|
+
const receipts = await authorityAdapter.listReceipts("promotion");
|
|
129
|
+
const reconciled = [];
|
|
130
|
+
for (const receipt of receipts) {
|
|
131
|
+
const transition = await appendPromotionMemory(receipt);
|
|
132
|
+
reconciled.push(
|
|
133
|
+
Object.freeze({
|
|
134
|
+
receiptDigest: receipt.receiptDigest,
|
|
135
|
+
status: transition.status ?? "persisted",
|
|
136
|
+
}),
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
return Object.freeze({
|
|
140
|
+
status: "converged",
|
|
141
|
+
receiptCount: receipts.length,
|
|
142
|
+
reconciled: Object.freeze(reconciled),
|
|
143
|
+
projection: memory.projection(),
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
const controlPlane = Object.freeze({
|
|
147
|
+
schema: STRUCTURED_MEMORY_AGENT_CONTROL_PLANE_SCHEMA,
|
|
148
|
+
tenantId,
|
|
149
|
+
streamId: memoryAdapter.descriptor.streamId,
|
|
150
|
+
memory,
|
|
151
|
+
semantic,
|
|
152
|
+
promotionReceiptWriter: promotion,
|
|
153
|
+
policyReceiptWriter: policy,
|
|
154
|
+
reconcilePromotionMemories: Object.freeze(reconcilePromotionMemories),
|
|
155
|
+
createEvaluatedPromotionControlPlane(options = {}) {
|
|
156
|
+
if (
|
|
157
|
+
!options ||
|
|
158
|
+
typeof options !== "object" ||
|
|
159
|
+
Array.isArray(options) ||
|
|
160
|
+
Object.hasOwn(options, "memoryPromotionReceiptWriter")
|
|
161
|
+
) {
|
|
162
|
+
throw new TypeError(
|
|
163
|
+
"evaluated promotion options cannot override the Agent memory writer",
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
const evaluated = createSkillEvaluatedPromotionControlPlane({
|
|
167
|
+
...options,
|
|
168
|
+
memoryPromotionReceiptWriter: promotion,
|
|
169
|
+
});
|
|
170
|
+
const recordPromotionMemory = async (result) => {
|
|
171
|
+
const authorityReceipt = result?.memoryAuthorityReceipt;
|
|
172
|
+
const release = result?.release;
|
|
173
|
+
if (
|
|
174
|
+
!authorityReceipt ||
|
|
175
|
+
authorityReceipt.contentDigest !== release?.contentDigest ||
|
|
176
|
+
authorityReceipt.artifactRef !== release?.releaseDigest
|
|
177
|
+
) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
"evaluated promotion result lacks its durable Memory authority receipt",
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
return appendPromotionMemory(authorityReceipt);
|
|
183
|
+
};
|
|
184
|
+
return Object.freeze({
|
|
185
|
+
...evaluated,
|
|
186
|
+
promoteEvaluated: Object.freeze(async (input) => {
|
|
187
|
+
const result = await evaluated.promoteEvaluated(input);
|
|
188
|
+
try {
|
|
189
|
+
const memoryTransition = await recordPromotionMemory(result);
|
|
190
|
+
return Object.freeze({ ...result, memoryTransition });
|
|
191
|
+
} catch (cause) {
|
|
192
|
+
const error = new Error(
|
|
193
|
+
"release committed but procedural Memory persistence is pending",
|
|
194
|
+
{ cause },
|
|
195
|
+
);
|
|
196
|
+
error.code = "CC_PROMOTION_MEMORY_COMMIT_PENDING";
|
|
197
|
+
error.commitState = "release-committed-memory-pending";
|
|
198
|
+
error.promotionResult = result;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}),
|
|
202
|
+
recordPromotionMemory: Object.freeze(recordPromotionMemory),
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
recovery: Object.freeze({
|
|
206
|
+
sequence: memory.projection().sequence,
|
|
207
|
+
projectionDigest: memory.projection().projectionDigest,
|
|
208
|
+
snapshotDigest: memory.snapshot()?.snapshotDigest ?? null,
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
CONTROL_PLANES.add(controlPlane);
|
|
212
|
+
return controlPlane;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export function captureStructuredMemoryAgentControlPlane(value) {
|
|
216
|
+
if (!CONTROL_PLANES.has(value)) {
|
|
217
|
+
throw new TypeError(
|
|
218
|
+
"a branded structured memory Agent control plane is required",
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
return value;
|
|
222
|
+
}
|