chainlesschain 0.166.46 → 0.166.47
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 +6 -4
- package/package.json +3 -1
- package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-CDpT0WXV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-BNfUljWx.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C9323DEx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-CRrjb2db.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-Db-DGqJS.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-CJdHRJ0W.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-_RSCnTYs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-8GFQi-dM.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-C87NtgUZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-DcTMWS8G.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-5ZDPTW_H.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DM9EmYee.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-M2YqDRNN.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-oB1LLxyf.js} +1 -1
- package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-TcVZK5tF.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-XKmq-3K_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-C6CBiDRy.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-Dz9CGqXH.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-CxJDgDVL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-DMP0JsaQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-I5IQeogb.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-BfLW2MXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BK8EjAlh.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-C3iqSv5I.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-CozrbPMy.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-k1dCLNNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-CQHRyEIt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BMJYZgMy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-B7mpNU7V.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-HIdk0S6M.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-HxeocBHy.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Bkfq69UP.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-dtmx0bHO.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-CrRlOuEf.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-D4ZIZiAH.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-C90Rw7GE.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-CC6k_uh4.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-T_CUIYUy.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-N_e0RRWk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-Iq3VzEv0.js} +1 -1
- package/src/assets/web-panel/assets/Notes-B5sKJUJt.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-K8UVp8qQ.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BWNyM-6m.js +1 -0
- package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-DMO1NJxI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BBY6b31Z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-DmsL0y0v.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-fYmQzmTA.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CWcpRtWa.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub--ZNDIdsn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DCdj5NGb.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-BRKu7Q3E.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-BJ7ozIAb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-B2cVLiXW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-Ce9r_W-p.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-BDespvGZ.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-BUNO4fDU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-D2TUqeBV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-BNNQPHBH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-D2t1V_Cm.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-DVK5hEqI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-BB9RTwmE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-DmEO7liZ.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-UwEYjnDB.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DebqSsMp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CuuPts3C.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-DbWpmbgf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-BaK7SxzT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-BFHv51Jb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-B9b1R6uK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-BnO0CN02.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-Dy01Vq49.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-BCy2AMHc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant-4Tx9y_Y1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-CPOoUH8J.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-C85GlJzu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-_xneFBGF.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-BizG4rTr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-Dh8EIn3n.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-C5NWoHWQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-0YfrySL6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-BZVH8Ags.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-kNofa6vm.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-BNO34_j0.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-ifQ2FlwD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-1TL8H6EH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-DBfRjs_T.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Bs6V4iBf.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-Bz6LMY_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index--WvT2Il3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-84mi5rsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-B5SJCUZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-B6RClMZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BB1Af7Fv.js} +1 -1
- package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-BQL_tldd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-BXJXMaZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-BhPDhmvN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BiZ7Nz5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-BoCTDcn6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-BxqC3LiO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-C6c0j-Ki.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-C7d6QlfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-C9QYxq61.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPYshcic.js → index-CBh48_Mh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-CNKHoXWI.js} +1 -1
- package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-CXVBQ82k.js} +3 -3
- package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CXtiLagi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-Cn7EIWmI.js} +1 -1
- package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
- package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-CtB45Hok.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-Cu_V6ZJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-Cykt9BbN.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-DDhy4eCS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-DEPPzM8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-BD0w-888.js → index-DMVktlxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-DOww5Qny.js} +1 -1
- package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-DWPp-d07.js} +1 -1
- package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
- package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-DvM2xBUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-EK3XtMxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-XJIV7HEw.js} +1 -1
- package/src/assets/web-panel/assets/{index-0200QxC4.js → index-cNwsev6n.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-f_7L9GvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-lUL3bD2z.js} +1 -1
- package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-pOUFfRdN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-rGhS02f8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-vHtnQsnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-vb1XIxEB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-DpRIjwTt.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-CG4_9o-Z.js} +1 -1
- package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-Dku1fXtf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-BvAVeX-3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-DFu0x78D.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-CmI-FNcK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-CGERYewB.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D7G8bF5J.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-B2sXwWXy.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-DI5yh0n3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-deGJ5dp_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-Dqgx0Qv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-Be-lveh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-CFxB876W.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BFOYrl4e.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +8 -0
- package/src/commands/background-session.js +31 -3
- package/src/commands/chat.js +5 -1
- package/src/commands/eval.js +86 -28
- package/src/commands/llm.js +104 -1
- package/src/commands/plugin.js +130 -1
- package/src/commands/sandbox.js +121 -2
- package/src/commands/serve.js +11 -2
- package/src/commands/skill.js +29 -0
- package/src/data/changelog.json +13 -0
- package/src/gateways/ws/session-protocol.js +13 -0
- package/src/gateways/ws/ws-agent-handler.js +17 -0
- package/src/gateways/ws/ws-server.js +3 -0
- package/src/gateways/ws/ws-session-state.js +131 -0
- package/src/generated/cc-agent-protocol.schema.json +4 -0
- package/src/lazy-dispatch.js +8 -1
- package/src/lib/agent-sandbox.js +337 -53
- package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
- package/src/lib/app-server/server.js +93 -0
- package/src/lib/background-agent-keeper-client.js +2 -0
- package/src/lib/background-agent-keeper-protocol.js +7 -0
- package/src/lib/background-agent-supervisor.js +194 -47
- package/src/lib/codex-app-server-adapter.js +81 -27
- package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
- package/src/lib/context-memory-kernel/provider-context.js +53 -19
- package/src/lib/deferred-question-context.js +122 -0
- package/src/lib/eval/evidence.js +202 -64
- package/src/lib/eval/plugin-suite.js +917 -0
- package/src/lib/eval/runner.js +10 -3
- package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
- package/src/lib/evolution/agent-model-projection.js +97 -1
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
- package/src/lib/evolution/evolution-artifact-ports.js +6 -0
- package/src/lib/evolution/evolution-deployment-loader.js +87 -3
- package/src/lib/evolution/evolution-eval-gate.js +8 -0
- package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
- package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
- package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
- package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
- package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
- package/src/lib/evolution/evolution-ledger.js +57 -1
- package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
- package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
- package/src/lib/evolution/governed-hub-llm.js +238 -5
- package/src/lib/evolution/governed-hub-resolver.js +82 -4
- package/src/lib/evolution/governed-hub-skill.js +11 -5
- package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
- package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
- package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
- package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
- package/src/lib/goal-context.js +14 -5
- package/src/lib/interaction-adapter.js +166 -1
- package/src/lib/model-capabilities.js +271 -0
- package/src/lib/model-context-catalog.js +105 -0
- package/src/lib/model-context-window.js +4 -49
- package/src/lib/openai-responses.js +428 -0
- package/src/lib/plugin-runtime/scopes.js +7 -1
- package/src/lib/remote-read-loop-guard.js +2 -2
- package/src/lib/runtime-usage-ledger.js +16 -0
- package/src/lib/skill-loader.js +12 -0
- package/src/lib/with-file-lock.js +3 -1
- package/src/repl/agent-repl.js +5 -1
- package/src/runtime/agent-core.js +348 -23
- package/src/runtime/agent-runtime.js +7 -0
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/headless-runner.js +4 -1
- package/src/runtime/headless-stream.js +133 -44
- package/src/runtime/runtime-factory.js +26 -2
- package/src/workers/background-agent-keeper.js +23 -13
- package/src/workers/background-agent-worker.js +27 -13
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BqpG3XHV.js +0 -1
- package/src/assets/web-panel/assets/Notes-6F8EarNN.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-gVgXQWdc.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
- package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
- package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
|
@@ -78,6 +78,8 @@ export const EVOLUTION_ARTIFACT_LEDGER_RETENTION_TYPES = Object.freeze([
|
|
|
78
78
|
"skill-registry-transition-request",
|
|
79
79
|
"skill-registry-transition-settlement",
|
|
80
80
|
"skill-retrieval-revocation-state",
|
|
81
|
+
"skill-runtime-revalidation-state",
|
|
82
|
+
"evolution-ledger-v2-journal",
|
|
81
83
|
"evolution-run-event",
|
|
82
84
|
"evolution-eval-child-evidence",
|
|
83
85
|
"evolution-raw-deletion-receipt",
|
|
@@ -177,6 +179,8 @@ export const EVOLUTION_ARTIFACT_TYPES = Object.freeze([
|
|
|
177
179
|
"skill-registry-transition-request",
|
|
178
180
|
"skill-registry-transition-settlement",
|
|
179
181
|
"skill-retrieval-revocation-state",
|
|
182
|
+
"skill-runtime-revalidation-state",
|
|
183
|
+
"evolution-ledger-v2-journal",
|
|
180
184
|
"skill-release-finalization",
|
|
181
185
|
"skill-release-state-migration",
|
|
182
186
|
"structured-memory-authority-receipt",
|
|
@@ -381,6 +385,8 @@ const LEDGER_RETENTION_PURPOSES_BY_TYPE = new Map([
|
|
|
381
385
|
["skill-registry-transition-request", new Set(["evolution-ledger"])],
|
|
382
386
|
["skill-registry-transition-settlement", new Set(["evolution-ledger"])],
|
|
383
387
|
["skill-retrieval-revocation-state", new Set(["evolution-ledger"])],
|
|
388
|
+
["skill-runtime-revalidation-state", new Set(["evolution-ledger"])],
|
|
389
|
+
["evolution-ledger-v2-journal", new Set(["evolution-ledger"])],
|
|
384
390
|
["wiki-pruning-journal", new Set(["evolution-ledger"])],
|
|
385
391
|
["wiki-pruning-retrieval-projection", new Set(["evolution-ledger"])],
|
|
386
392
|
["evolution-run-event", new Set(["evolution-ledger"])],
|
|
@@ -27,6 +27,7 @@ const SUPPORTED_COMMANDS = new Set([
|
|
|
27
27
|
"marketplace",
|
|
28
28
|
"orchestrate",
|
|
29
29
|
"serve",
|
|
30
|
+
"skill",
|
|
30
31
|
"stream",
|
|
31
32
|
"ui",
|
|
32
33
|
]);
|
|
@@ -128,7 +129,12 @@ function dependencies(value, commandName) {
|
|
|
128
129
|
throw new TypeError(
|
|
129
130
|
`evolution deployment returned invalid dependencies for ${commandName}`,
|
|
130
131
|
);
|
|
131
|
-
return Object.freeze({
|
|
132
|
+
return Object.freeze({
|
|
133
|
+
...value,
|
|
134
|
+
...(["agent", "skill", "chat", "serve"].includes(commandName)
|
|
135
|
+
? { skillRuntimeAdmissionRequired: true }
|
|
136
|
+
: {}),
|
|
137
|
+
});
|
|
132
138
|
}
|
|
133
139
|
|
|
134
140
|
function deniedAgentDependencies(commandName, code, message, source = null) {
|
|
@@ -204,6 +210,48 @@ function authenticatedDependencies(value, commandName) {
|
|
|
204
210
|
|
|
205
211
|
async function loadBuiltInFactories(commandName) {
|
|
206
212
|
const factories = {};
|
|
213
|
+
if (
|
|
214
|
+
["agent", "skill", "chat", "serve", "evolution", "learning"].includes(
|
|
215
|
+
commandName,
|
|
216
|
+
)
|
|
217
|
+
) {
|
|
218
|
+
const [
|
|
219
|
+
runtime,
|
|
220
|
+
adapter,
|
|
221
|
+
registry,
|
|
222
|
+
ledgerPorts,
|
|
223
|
+
artifactPorts,
|
|
224
|
+
ledgerBackend,
|
|
225
|
+
artifactStore,
|
|
226
|
+
manifest,
|
|
227
|
+
] = await Promise.all([
|
|
228
|
+
import("./skill-runtime-revalidation.js"),
|
|
229
|
+
import("./skill-runtime-revalidation-ledger-adapter.js"),
|
|
230
|
+
import("./skill-release-registry.js"),
|
|
231
|
+
import("./evolution-ledger-ports.js"),
|
|
232
|
+
import("./evolution-artifact-ports.js"),
|
|
233
|
+
import("./evolution-ledger-file-backend.js"),
|
|
234
|
+
import("../artifact-store.js"),
|
|
235
|
+
import("./skill-execution-manifest.js"),
|
|
236
|
+
]);
|
|
237
|
+
Object.assign(factories, {
|
|
238
|
+
createSkillRuntimeRevalidationAuthority:
|
|
239
|
+
runtime.createSkillRuntimeRevalidationAuthority,
|
|
240
|
+
createSkillRuntimeRevalidationLedgerAdapter: (options) =>
|
|
241
|
+
new adapter.SkillRuntimeRevalidationLedgerAdapter(options),
|
|
242
|
+
createSkillReleaseRegistry: (options) =>
|
|
243
|
+
new registry.SkillReleaseRegistry(options),
|
|
244
|
+
createEvolutionLedgerPorts: ledgerPorts.createEvolutionLedgerPorts,
|
|
245
|
+
createEvolutionArtifactPorts: (options) =>
|
|
246
|
+
new artifactPorts.EvolutionArtifactPorts(options),
|
|
247
|
+
createEvolutionLedgerFileBackend:
|
|
248
|
+
ledgerBackend.createEvolutionLedgerFileBackend,
|
|
249
|
+
createArtifactStore: (options) =>
|
|
250
|
+
new artifactStore.ArtifactStore(options),
|
|
251
|
+
buildSkillRuntimeManifest: manifest.buildSkillRuntimeManifest,
|
|
252
|
+
buildSkillDependencyLock: manifest.buildSkillDependencyLock,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
207
255
|
if (commandName === "learning") {
|
|
208
256
|
const [
|
|
209
257
|
{ createGovernedSkillSynthesisCliHost },
|
|
@@ -415,6 +463,7 @@ async function loadBuiltInFactories(commandName) {
|
|
|
415
463
|
}
|
|
416
464
|
if (
|
|
417
465
|
commandName === "agent" ||
|
|
466
|
+
commandName === "learning" ||
|
|
418
467
|
commandName === "ask" ||
|
|
419
468
|
commandName === "chat" ||
|
|
420
469
|
commandName === "compact" ||
|
|
@@ -424,13 +473,47 @@ async function loadBuiltInFactories(commandName) {
|
|
|
424
473
|
commandName === "cowork" ||
|
|
425
474
|
commandName === "orchestrate" ||
|
|
426
475
|
commandName === "serve" ||
|
|
476
|
+
commandName === "skill" ||
|
|
427
477
|
commandName === "stream" ||
|
|
428
478
|
commandName === "ui"
|
|
429
479
|
) {
|
|
430
|
-
const {
|
|
431
|
-
|
|
480
|
+
const {
|
|
481
|
+
assembleAgentSkillOutcomeIndexFromCatalog,
|
|
482
|
+
createAgentEvolutionRuntimeComposition,
|
|
483
|
+
} = await import("./agent-evolution-runtime-composition.js");
|
|
432
484
|
factories.createAgentEvolutionRuntimeComposition =
|
|
433
485
|
createAgentEvolutionRuntimeComposition;
|
|
486
|
+
const [
|
|
487
|
+
{ createEvolutionEvalRuntimeComposition },
|
|
488
|
+
{ EvolutionEvalGate, EvolutionEvalReceiptVerifier },
|
|
489
|
+
{ createEvolutionEvalProcessSupervisor },
|
|
490
|
+
] = await Promise.all([
|
|
491
|
+
import("./evolution-eval-runtime-composition.js"),
|
|
492
|
+
import("./evolution-eval-gate.js"),
|
|
493
|
+
import("./evolution-eval-process-supervisor.js"),
|
|
494
|
+
]);
|
|
495
|
+
Object.assign(factories, {
|
|
496
|
+
createEvolutionEvalRuntimeComposition,
|
|
497
|
+
createEvolutionEvalGate: (options) => new EvolutionEvalGate(options),
|
|
498
|
+
createEvolutionEvalReceiptVerifier: (options) =>
|
|
499
|
+
new EvolutionEvalReceiptVerifier(options),
|
|
500
|
+
createEvolutionEvalProcessSupervisor,
|
|
501
|
+
});
|
|
502
|
+
if (commandName === "skill") {
|
|
503
|
+
const [
|
|
504
|
+
{ createSkillOutcomeSourceCatalogAuthority },
|
|
505
|
+
{ createSkillVectorProcessAuthority },
|
|
506
|
+
] = await Promise.all([
|
|
507
|
+
import("./skill-outcome-source-catalog-authority.js"),
|
|
508
|
+
import("../skill-vector-process-authority.js"),
|
|
509
|
+
]);
|
|
510
|
+
factories.assembleAgentSkillOutcomeIndexFromCatalog =
|
|
511
|
+
assembleAgentSkillOutcomeIndexFromCatalog;
|
|
512
|
+
factories.createSkillOutcomeSourceCatalogAuthority =
|
|
513
|
+
createSkillOutcomeSourceCatalogAuthority;
|
|
514
|
+
factories.createSkillVectorProcessAuthority =
|
|
515
|
+
createSkillVectorProcessAuthority;
|
|
516
|
+
}
|
|
434
517
|
}
|
|
435
518
|
return Object.freeze(factories);
|
|
436
519
|
}
|
|
@@ -450,6 +533,7 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
450
533
|
"createWikiSkillBenchmarkGrader",
|
|
451
534
|
"createWikiSkillBenchmarkReportAttestor",
|
|
452
535
|
"createWikiSkillBenchmarkRunner",
|
|
536
|
+
"createEvolutionEvalRuntimeComposition",
|
|
453
537
|
];
|
|
454
538
|
for (const name of providerFactories) {
|
|
455
539
|
if (typeof factories[name] !== "function") continue;
|
|
@@ -6437,6 +6437,14 @@ export class EvolutionEvalReceiptVerifier {
|
|
|
6437
6437
|
Object.freeze(EvolutionEvalGate.prototype);
|
|
6438
6438
|
Object.freeze(EvolutionEvalReceiptVerifier.prototype);
|
|
6439
6439
|
|
|
6440
|
+
export function isEvolutionEvalGate(value) {
|
|
6441
|
+
return GATE_INSTANCES.has(value);
|
|
6442
|
+
}
|
|
6443
|
+
|
|
6444
|
+
export function isEvolutionEvalReceiptVerifier(value) {
|
|
6445
|
+
return RECEIPT_VERIFIER_INSTANCES.has(value);
|
|
6446
|
+
}
|
|
6447
|
+
|
|
6440
6448
|
export async function runEvolutionEvalGate(gate, request) {
|
|
6441
6449
|
if (!GATE_INSTANCES.has(gate)) {
|
|
6442
6450
|
throw evalError(
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { types as utilTypes } from "node:util";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
EvolutionEvalChildEvidenceLedgerAdapter,
|
|
5
|
+
createEvolutionEvalChildEvidenceStorePort,
|
|
6
|
+
} from "./evolution-eval-child-evidence-ledger-adapter.js";
|
|
7
|
+
import {
|
|
8
|
+
SkillTargetMatrixEvalAggregator,
|
|
9
|
+
SkillTargetMatrixEvalReceiptVerifier,
|
|
10
|
+
} from "./skill-target-matrix-eval.js";
|
|
11
|
+
import { createSkillEvaluatedPromotionDurabilityAdapter } from "./skill-evaluated-promotion-durability.js";
|
|
12
|
+
|
|
13
|
+
export const EVOLUTION_EVAL_RUNTIME_COMPOSITION_SCHEMA =
|
|
14
|
+
"chainlesschain.evolution-eval-runtime-composition/v1";
|
|
15
|
+
export const EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE =
|
|
16
|
+
"CC_EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE";
|
|
17
|
+
|
|
18
|
+
const COMPOSITIONS = new WeakMap();
|
|
19
|
+
const DESCRIPTOR_KEYS = [
|
|
20
|
+
"tenantId",
|
|
21
|
+
"runId",
|
|
22
|
+
"authorityId",
|
|
23
|
+
"revision",
|
|
24
|
+
"handlerArtifactDigest",
|
|
25
|
+
];
|
|
26
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u;
|
|
27
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
28
|
+
|
|
29
|
+
function unavailable(message, cause) {
|
|
30
|
+
const error = new Error(message, cause ? { cause } : undefined);
|
|
31
|
+
error.code = EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE;
|
|
32
|
+
return error;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function record(value, keys, label) {
|
|
36
|
+
if (
|
|
37
|
+
!value ||
|
|
38
|
+
typeof value !== "object" ||
|
|
39
|
+
utilTypes.isProxy(value) ||
|
|
40
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value))
|
|
41
|
+
)
|
|
42
|
+
throw unavailable(`${label} must be a plain data record`);
|
|
43
|
+
const ownKeys = Reflect.ownKeys(value);
|
|
44
|
+
if (
|
|
45
|
+
keys &&
|
|
46
|
+
(ownKeys.length !== keys.length ||
|
|
47
|
+
ownKeys.some((key) => !keys.includes(key)))
|
|
48
|
+
)
|
|
49
|
+
throw unavailable(`${label} must contain exactly the required ports`);
|
|
50
|
+
for (const key of ownKeys) {
|
|
51
|
+
const property = Object.getOwnPropertyDescriptor(value, key);
|
|
52
|
+
if (
|
|
53
|
+
typeof key !== "string" ||
|
|
54
|
+
!property ||
|
|
55
|
+
!("value" in property) ||
|
|
56
|
+
!property.enumerable
|
|
57
|
+
)
|
|
58
|
+
throw unavailable(`${label}.${String(key)} must be an own data property`);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function descriptor(input) {
|
|
64
|
+
record(input, DESCRIPTOR_KEYS, "Eval composition descriptor");
|
|
65
|
+
for (const key of ["tenantId", "runId", "authorityId"])
|
|
66
|
+
if (typeof input[key] !== "string" || !ID.test(input[key]))
|
|
67
|
+
throw unavailable(`Eval composition ${key} is invalid`);
|
|
68
|
+
if (
|
|
69
|
+
!Number.isSafeInteger(input.revision) ||
|
|
70
|
+
input.revision < 1 ||
|
|
71
|
+
typeof input.handlerArtifactDigest !== "string" ||
|
|
72
|
+
!DIGEST.test(input.handlerArtifactDigest)
|
|
73
|
+
)
|
|
74
|
+
throw unavailable("Eval composition authority revision/digest is invalid");
|
|
75
|
+
return Object.freeze({ ...input });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Host-authorized construction only: supplies no signing keys, policy defaults,
|
|
80
|
+
* grader, corpus, reservation service, supervisor, or durability authority.
|
|
81
|
+
* Receipt verification uses the exact authority pair captured by the aggregator.
|
|
82
|
+
*/
|
|
83
|
+
export function createEvolutionEvalRuntimeComposition(options) {
|
|
84
|
+
try {
|
|
85
|
+
record(
|
|
86
|
+
options,
|
|
87
|
+
[
|
|
88
|
+
"descriptor",
|
|
89
|
+
"aggregatorOptions",
|
|
90
|
+
"verificationLimits",
|
|
91
|
+
"durabilityOptions",
|
|
92
|
+
],
|
|
93
|
+
"Eval composition options",
|
|
94
|
+
);
|
|
95
|
+
const binding = descriptor(options.descriptor);
|
|
96
|
+
const matrix = {
|
|
97
|
+
...record(options.aggregatorOptions, null, "Eval aggregator options"),
|
|
98
|
+
};
|
|
99
|
+
const limits = record(
|
|
100
|
+
options.verificationLimits,
|
|
101
|
+
["maximumReceiptTtlMs", "maximumVerificationMs"],
|
|
102
|
+
"Eval verification limits",
|
|
103
|
+
);
|
|
104
|
+
if (matrix.tenantId !== binding.tenantId)
|
|
105
|
+
throw unavailable("Eval aggregator belongs to another tenant");
|
|
106
|
+
const aggregator = new SkillTargetMatrixEvalAggregator(matrix);
|
|
107
|
+
const receiptVerifier = new SkillTargetMatrixEvalReceiptVerifier({
|
|
108
|
+
matrixReceiptVerifier: matrix.matrixReceiptVerifier,
|
|
109
|
+
matrixReceiptSignerDescriptor:
|
|
110
|
+
matrix.matrixReceiptSigner.authorityDescriptor,
|
|
111
|
+
matrixReceiptTrust: matrix.matrixReceiptTrust,
|
|
112
|
+
matrixSupervisor: matrix.matrixSupervisor,
|
|
113
|
+
supervisorPolicy: matrix.supervisorPolicy,
|
|
114
|
+
clock: matrix.clock,
|
|
115
|
+
clockPolicy: matrix.clockPolicy,
|
|
116
|
+
...limits,
|
|
117
|
+
});
|
|
118
|
+
const durability = createSkillEvaluatedPromotionDurabilityAdapter(
|
|
119
|
+
options.durabilityOptions,
|
|
120
|
+
);
|
|
121
|
+
const composition = Object.freeze({
|
|
122
|
+
schema: EVOLUTION_EVAL_RUNTIME_COMPOSITION_SCHEMA,
|
|
123
|
+
descriptor: binding,
|
|
124
|
+
// Downstream promotion can reuse the same read-only receipt authorities.
|
|
125
|
+
receiptVerifier,
|
|
126
|
+
receiptResolver: durability.resolver,
|
|
127
|
+
});
|
|
128
|
+
COMPOSITIONS.set(
|
|
129
|
+
composition,
|
|
130
|
+
Object.freeze({
|
|
131
|
+
aggregator,
|
|
132
|
+
receiptVerifier,
|
|
133
|
+
durability,
|
|
134
|
+
childReceiptStore: matrix.childReceiptStore,
|
|
135
|
+
}),
|
|
136
|
+
);
|
|
137
|
+
return composition;
|
|
138
|
+
} catch (cause) {
|
|
139
|
+
if (cause?.code === EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE)
|
|
140
|
+
throw cause;
|
|
141
|
+
throw unavailable("Eval production authority construction failed", cause);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export function captureEvolutionEvalRuntimeComposition(value, expected) {
|
|
146
|
+
const ports = COMPOSITIONS.get(value);
|
|
147
|
+
if (!ports)
|
|
148
|
+
throw unavailable("a branded Eval runtime composition is required");
|
|
149
|
+
if (expected) {
|
|
150
|
+
for (const key of DESCRIPTOR_KEYS)
|
|
151
|
+
if (value.descriptor[key] !== expected.descriptor[key])
|
|
152
|
+
throw unavailable(`Eval composition differs from runtime ${key}`);
|
|
153
|
+
if (ports.childReceiptStore !== expected.childReceiptStore)
|
|
154
|
+
throw unavailable(
|
|
155
|
+
"Eval composition must use the runtime child evidence store",
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
return ports;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Root-owned authenticated storage; the host receives no ledger write port. */
|
|
162
|
+
export function createEvolutionEvalRuntimeChildEvidenceStore({
|
|
163
|
+
descriptor: input,
|
|
164
|
+
artifactPorts,
|
|
165
|
+
ledger,
|
|
166
|
+
ledgerArtifactResolver,
|
|
167
|
+
audience,
|
|
168
|
+
now,
|
|
169
|
+
}) {
|
|
170
|
+
const binding = descriptor(input);
|
|
171
|
+
const storeDescriptor = Object.freeze({
|
|
172
|
+
tenantId: binding.tenantId,
|
|
173
|
+
streamId: binding.runId,
|
|
174
|
+
authorityId: binding.authorityId,
|
|
175
|
+
revision: binding.revision,
|
|
176
|
+
handlerArtifactDigest: binding.handlerArtifactDigest,
|
|
177
|
+
});
|
|
178
|
+
const adapter = new EvolutionEvalChildEvidenceLedgerAdapter({
|
|
179
|
+
descriptor: {
|
|
180
|
+
...storeDescriptor,
|
|
181
|
+
artifactTenantId: binding.tenantId,
|
|
182
|
+
audience,
|
|
183
|
+
purpose: "evolution-ledger",
|
|
184
|
+
},
|
|
185
|
+
artifactPorts,
|
|
186
|
+
ledger,
|
|
187
|
+
ledgerArtifactResolver,
|
|
188
|
+
now,
|
|
189
|
+
});
|
|
190
|
+
return createEvolutionEvalChildEvidenceStorePort({
|
|
191
|
+
descriptor: storeDescriptor,
|
|
192
|
+
retain: adapter.retain.bind(adapter),
|
|
193
|
+
resolve: adapter.resolve.bind(adapter),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Called only by the Agent root after constructing its authenticated backend. */
|
|
198
|
+
export function createEvolutionEvalRuntimeStageConfiguration({
|
|
199
|
+
configuration,
|
|
200
|
+
tenantId,
|
|
201
|
+
runId,
|
|
202
|
+
...storage
|
|
203
|
+
}) {
|
|
204
|
+
try {
|
|
205
|
+
record(
|
|
206
|
+
configuration,
|
|
207
|
+
[
|
|
208
|
+
"descriptor",
|
|
209
|
+
"createComposition",
|
|
210
|
+
"planRef",
|
|
211
|
+
"expectedReceipt",
|
|
212
|
+
"usage",
|
|
213
|
+
],
|
|
214
|
+
"releaseTrain.domain.eval",
|
|
215
|
+
);
|
|
216
|
+
record(
|
|
217
|
+
configuration.descriptor,
|
|
218
|
+
["authorityId", "revision", "handlerArtifactDigest"],
|
|
219
|
+
"releaseTrain.domain.eval.descriptor",
|
|
220
|
+
);
|
|
221
|
+
const binding = descriptor({
|
|
222
|
+
...configuration.descriptor,
|
|
223
|
+
tenantId,
|
|
224
|
+
runId,
|
|
225
|
+
});
|
|
226
|
+
const factory = configuration.createComposition;
|
|
227
|
+
if (
|
|
228
|
+
typeof factory !== "function" ||
|
|
229
|
+
utilTypes.isProxy(factory) ||
|
|
230
|
+
utilTypes.isAsyncFunction(factory) ||
|
|
231
|
+
utilTypes.isGeneratorFunction(factory)
|
|
232
|
+
)
|
|
233
|
+
throw unavailable("Eval createComposition must be a synchronous factory");
|
|
234
|
+
const childReceiptStore = createEvolutionEvalRuntimeChildEvidenceStore({
|
|
235
|
+
descriptor: binding,
|
|
236
|
+
...storage,
|
|
237
|
+
});
|
|
238
|
+
const context = Object.freeze({ descriptor: binding, childReceiptStore });
|
|
239
|
+
const composition = Reflect.apply(factory, undefined, [context]);
|
|
240
|
+
const { aggregator, receiptVerifier, durability } =
|
|
241
|
+
captureEvolutionEvalRuntimeComposition(composition, context);
|
|
242
|
+
return Object.freeze({
|
|
243
|
+
aggregator,
|
|
244
|
+
receiptVerifier,
|
|
245
|
+
durability,
|
|
246
|
+
planRef: configuration.planRef,
|
|
247
|
+
expectedReceipt: configuration.expectedReceipt,
|
|
248
|
+
usage: configuration.usage,
|
|
249
|
+
});
|
|
250
|
+
} catch (cause) {
|
|
251
|
+
if (cause?.code === EVOLUTION_EVAL_COMPOSITION_UNAVAILABLE_CODE)
|
|
252
|
+
throw cause;
|
|
253
|
+
throw unavailable("Eval production composition is unavailable", cause);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -12,9 +12,11 @@ import { types as utilTypes } from "node:util";
|
|
|
12
12
|
import { ArtifactStore } from "../artifact-store.js";
|
|
13
13
|
import {
|
|
14
14
|
EvolutionArtifactPorts,
|
|
15
|
+
EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA,
|
|
15
16
|
EVOLUTION_ARTIFACT_DEFAULT_TTL_MS,
|
|
16
17
|
EVOLUTION_ARTIFACT_MAX_TTL_MS,
|
|
17
18
|
} from "./evolution-artifact-ports.js";
|
|
19
|
+
import { EVOLUTION_ARTIFACT_REF_SCHEMA } from "./evolution-ledger.js";
|
|
18
20
|
import {
|
|
19
21
|
EVOLUTION_RAW_STORAGE_RECEIPT_SCHEMA,
|
|
20
22
|
EvolutionEvidenceBundleVerifier,
|
|
@@ -340,6 +342,7 @@ export class EvolutionEvidenceArtifactAdapter {
|
|
|
340
342
|
#projectAgentModel;
|
|
341
343
|
#verify;
|
|
342
344
|
#ports;
|
|
345
|
+
#resolveManifestRef;
|
|
343
346
|
|
|
344
347
|
constructor({
|
|
345
348
|
tenantId,
|
|
@@ -384,6 +387,10 @@ export class EvolutionEvidenceArtifactAdapter {
|
|
|
384
387
|
);
|
|
385
388
|
this.#verify = captureMethod(bundleVerifier, "verify", "bundleVerifier");
|
|
386
389
|
this.#ports = artifactPorts;
|
|
390
|
+
this.#resolveManifestRef =
|
|
391
|
+
artifactPorts.createEvolutionLedgerArtifactResolver({
|
|
392
|
+
purpose: this.#purpose,
|
|
393
|
+
});
|
|
387
394
|
Object.freeze(this);
|
|
388
395
|
}
|
|
389
396
|
|
|
@@ -468,11 +475,60 @@ export class EvolutionEvidenceArtifactAdapter {
|
|
|
468
475
|
purpose: this.#purpose,
|
|
469
476
|
tenantId: this.#tenantId,
|
|
470
477
|
});
|
|
471
|
-
|
|
478
|
+
return this.#resolveManifest(manifestResolved.value, result.evidenceId);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Authenticate retained bytes at a Run's manifest locator. This is NOT Run
|
|
483
|
+
* membership or caller read authorization: the Wiki resolver obtains the
|
|
484
|
+
* event from its captured Run capability and separately calls readTrusted.
|
|
485
|
+
*/
|
|
486
|
+
async resolveRunEvidence({ event, ledgerId, epoch } = {}) {
|
|
487
|
+
if (
|
|
488
|
+
event?.type !== "raw-event-referenced" ||
|
|
489
|
+
event.tenantId !== this.#tenantId ||
|
|
490
|
+
event.data?.derivationManifestDigest !== event.payloadDigest
|
|
491
|
+
) {
|
|
492
|
+
throw new TypeError("Run evidence manifest binding is invalid");
|
|
493
|
+
}
|
|
494
|
+
const evidenceId = normalizeId(event.subjectId, "Run evidenceId");
|
|
495
|
+
const resolved = this.#resolveManifestRef({
|
|
496
|
+
tenantId: this.#tenantId,
|
|
497
|
+
ledgerId,
|
|
498
|
+
epoch,
|
|
499
|
+
ref: {
|
|
500
|
+
schema: EVOLUTION_ARTIFACT_REF_SCHEMA,
|
|
501
|
+
ref: event.artifactRef,
|
|
502
|
+
digest: event.payloadDigest,
|
|
503
|
+
},
|
|
504
|
+
});
|
|
505
|
+
if (
|
|
506
|
+
resolved.authenticated !== true ||
|
|
507
|
+
resolved.found !== true ||
|
|
508
|
+
resolved.digest !== event.payloadDigest ||
|
|
509
|
+
resolved.ref !== event.artifactRef ||
|
|
510
|
+
!Buffer.isBuffer(resolved.bytes)
|
|
511
|
+
) {
|
|
512
|
+
throw new Error("Run evidence manifest resolution is unbound");
|
|
513
|
+
}
|
|
514
|
+
const record = JSON.parse(resolved.bytes.toString("utf8"));
|
|
515
|
+
if (
|
|
516
|
+
record.schema !== EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA ||
|
|
517
|
+
record.tenantId !== this.#tenantId ||
|
|
518
|
+
record.audience !== this.#audience ||
|
|
519
|
+
record.purpose !== this.#purpose ||
|
|
520
|
+
record.type !== "evidence"
|
|
521
|
+
) {
|
|
522
|
+
throw new Error("Run evidence manifest record is unbound");
|
|
523
|
+
}
|
|
524
|
+
return this.#resolveManifest(record.value, evidenceId);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
async #resolveManifest(manifest, evidenceId) {
|
|
472
528
|
if (
|
|
473
529
|
manifest.schema !== EVOLUTION_EVIDENCE_DERIVATION_MANIFEST_SCHEMA ||
|
|
474
530
|
manifest.tenantId !== this.#tenantId ||
|
|
475
|
-
manifest.evidenceId !==
|
|
531
|
+
manifest.evidenceId !== evidenceId
|
|
476
532
|
) {
|
|
477
533
|
throw new Error("evidence derivation manifest is invalid");
|
|
478
534
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { createEvolutionFileWitness } from "./evolution-file-witness.js";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
EvolutionLedger,
|
|
6
|
+
captureEvolutionLedgerMigrationSource,
|
|
7
|
+
} from "./evolution-ledger.js";
|
|
8
|
+
import { createEvolutionLedgerV2JournalFromFactory } from "./evolution-ledger-v2-journal.js";
|
|
5
9
|
|
|
6
10
|
export const EVOLUTION_LEDGER_FILE_BACKEND_SCHEMA =
|
|
7
11
|
"chainlesschain.evolution-ledger-file-backend/v1";
|
|
@@ -110,6 +114,7 @@ export function createEvolutionLedgerFileBackend({
|
|
|
110
114
|
crashHook = null,
|
|
111
115
|
witnessMaximumBytes,
|
|
112
116
|
witnessMaximumHistoryBytes,
|
|
117
|
+
manifestV2 = null,
|
|
113
118
|
} = {}) {
|
|
114
119
|
if (typeof artifactResolver !== "function") {
|
|
115
120
|
throw new TypeError("artifactResolver port is required");
|
|
@@ -151,7 +156,7 @@ export function createEvolutionLedgerFileBackend({
|
|
|
151
156
|
: { maximumHistoryBytes: witnessMaximumHistoryBytes }),
|
|
152
157
|
};
|
|
153
158
|
const witness = createEvolutionFileWitness(witnessOptions);
|
|
154
|
-
const
|
|
159
|
+
const sourceLedger = new EvolutionLedger({
|
|
155
160
|
rootDir: paths.eventRoot,
|
|
156
161
|
authorityRootDir: paths.authorityRoot,
|
|
157
162
|
secure,
|
|
@@ -170,6 +175,22 @@ export function createEvolutionLedgerFileBackend({
|
|
|
170
175
|
...(lockTimeoutMs === undefined ? {} : { lockTimeoutMs }),
|
|
171
176
|
crashHook,
|
|
172
177
|
});
|
|
178
|
+
if (
|
|
179
|
+
manifestV2 === null &&
|
|
180
|
+
captureEvolutionLedgerMigrationSource(sourceLedger).requiresV2()
|
|
181
|
+
) {
|
|
182
|
+
throw Object.assign(
|
|
183
|
+
new Error("migrated ledger requires its authenticated v2 composition"),
|
|
184
|
+
{ code: "CC_EVOLUTION_LEDGER_V2_REQUIRED" },
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
const ledger =
|
|
188
|
+
manifestV2 === null
|
|
189
|
+
? sourceLedger
|
|
190
|
+
: createEvolutionLedgerV2JournalFromFactory(sourceLedger, manifestV2, {
|
|
191
|
+
...(lock === undefined ? {} : { lock }),
|
|
192
|
+
...(lockTimeoutMs === undefined ? {} : { lockTimeoutMs }),
|
|
193
|
+
});
|
|
173
194
|
const backend = Object.freeze({
|
|
174
195
|
schema: EVOLUTION_LEDGER_FILE_BACKEND_SCHEMA,
|
|
175
196
|
descriptor: Object.freeze({
|