chainlesschain 0.166.45 → 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-CrMhYNeH.js → AIOps-CDpT0WXV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DLY5blZ3.js → ActionButton-BNfUljWx.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C0NhKQB0.js → Analytics-C9323DEx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DLyepgMq.js → AppLayout-CRrjb2db.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Depk01Sa.js → Artifacts-Db-DGqJS.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-jKe6NQ3J.js → Audit-CJdHRJ0W.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CG4GKT9s.js → BackgroundAgents-_RSCnTYs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DYWCkzwM.js → Backup-8GFQi-dM.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xm5vodmJ.js → BaseInput-C87NtgUZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B20_PNd3.js → Chat-DcTMWS8G.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D4d-eh0F.js → ChatBubbleRenderer-5ZDPTW_H.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CfgwkV_r.js → Checkbox-DM9EmYee.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DbnoWI44.js → Codegen-M2YqDRNN.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CfzzhgGw.js → Col-oB1LLxyf.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BU7mGM8p.js → Community-TcVZK5tF.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DpYim0an.js → Compact-XKmq-3K_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BNJcO6ra.js → Compliance-C6CBiDRy.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CecZ-pWj.js → Cowork-Dz9CGqXH.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-BG_C1fe3.js → Cron-CxJDgDVL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BAeILQLL.js → Crosschain-DMP0JsaQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CYqOEkXi.js → DID-I5IQeogb.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BYU8wmL1.js → Dashboard-BfLW2MXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DYlJeTTa.js → Dropdown-BK8EjAlh.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C0M6py3K.js → EmailListRenderer-C3iqSv5I.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Du90iDch.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DkFp_hzB.js → Federation-CozrbPMy.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BGgtGTfG.js → FormItemContext-k1dCLNNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BIDsSCei.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
- package/src/assets/web-panel/assets/{Git--d3Te93J.js → Git-CQHRyEIt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CZwD0vmO.js → Governance-BMJYZgMy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DiDcSFEW.js → Inference-B7mpNU7V.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bi0hSfzg.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C8NHSc0K.js → Logs-HIdk0S6M.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DfDuADqF.js → MarkdownRenderer-HxeocBHy.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-D6kD0bNf.js → Marketplace-Bkfq69UP.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-mTSamCr5.js → McpTools-dtmx0bHO.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-YQBXfLjU.js → Memory-CrRlOuEf.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D2awuupp.js → MobileBridge-D4ZIZiAH.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bl7lZc_-.js → MobileProjects-C90Rw7GE.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CBqjLK2Q.js → Mtc-CC6k_uh4.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-C4poRInZ.js → MtcAudit-T_CUIYUy.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C_J0zXYZ.js → Multisig-N_e0RRWk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Ci43sWOU.js → NLProgramming-Iq3VzEv0.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DN7A-GFZ.js → Notes-B5sKJUJt.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-D5jNm71V.js → NotificationSettings-K8UVp8qQ.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C9UsPOG8.js → OrderTableRenderer-BWNyM-6m.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BapYMJrP.js → Organization-DMO1NJxI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BwxwjhFw.js → Overflow-BBY6b31Z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-TObXXOu3.js → P2P-DmsL0y0v.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-UwJvMbFO.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Damnxv-O.js → Permissions-CWcpRtWa.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-d_7jlBb-.js → PersonalDataHub--ZNDIdsn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DA87VjLw.js → Pipeline-DCdj5NGb.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzO_UvWn.js → Privacy-BRKu7Q3E.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CwqECDhs.js → ProjectInit-BJ7ozIAb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CT5YdIl6.js → ProjectSettings-B2cVLiXW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-D3KdZPCv.js → Projects-Ce9r_W-p.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BjBIS8kk.js → Providers-BDespvGZ.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-mMFqiKkI.js → QrScannerModal-BUNO4fDU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BwGi9ZU1.js → QuickAsk-D2TUqeBV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BY65SR5s.js → Recommend-BNNQPHBH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BGsVH_XU.js → RemoteSession-D2t1V_Cm.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DpPbxSgI.js → Reputation-DVK5hEqI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B5YBYoVz.js → Row-BB9RTwmE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DvM5jaoh.js → RssFeed-DmEO7liZ.js} +2 -2
- package/src/assets/web-panel/assets/{Search-6RX39EPO.js → Search-UwEYjnDB.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Beal-7cM.js → Security-DebqSsMp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D6rjVLe-.js → Services-CuuPts3C.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Dur7R7vz.js → Skeleton-DbWpmbgf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-D1QkGwMk.js → Skills-BaK7SxzT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-3ObrX8Es.js → Sla-BFHv51Jb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DG_KAiH1.js → SpeechSettings-B9b1R6uK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BaHq0SJ2.js → SyncSettings-BnO0CN02.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BDpAkBAB.js → Tasks-Dy01Vq49.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-tYdoRd-c.js → Templates-BCy2AMHc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-yGS5zIQ1.js → Tenant-4Tx9y_Y1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B3QbmVFa.js → Terminal-CPOoUH8J.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B_7Pr5dS.js → TimelineRenderer-C85GlJzu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DPvpDa53.js → Tokens-_xneFBGF.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DcSAD0GZ.js → Trigger-BizG4rTr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BBzEq-uy.js → Trust-Dh8EIn3n.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Dssav7-5.js → UkeySign-C5NWoHWQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CPOZf4yi.js → VideoEditing-0YfrySL6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BzBVRXEq.js → Wallet-BZVH8Ags.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DdSGaCCh.js → WebAuthn-kNofa6vm.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CKjBFoSs.js → WorkflowEditor-BNO34_j0.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B9aMGLg0.js → chat-ifQ2FlwD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-GFCMctSV.js → colors-1TL8H6EH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BqSDFAYJ.js → compact-item-DBfRjs_T.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BwUm3Ffp.js → createContext-Bs6V4iBf.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DN1kMJOT.js → hasIn-Bz6LMY_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4dI_csl.js → index--WvT2Il3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7Yu5wwV.js → index-84mi5rsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAK28GY8.js → index-B5SJCUZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmEHzOsw.js → index-B6RClMZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-By9GbJhu.js → index-BB1Af7Fv.js} +1 -1
- package/src/assets/web-panel/assets/{index-7W1e9Vi4.js → index-BQL_tldd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDL2MwxN.js → index-BXJXMaZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEMl-Qte.js → index-BhPDhmvN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCnbC2z7.js → index-BiZ7Nz5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cwih67e8.js → index-BoCTDcn6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DI90Wo_P.js → index-BxqC3LiO.js} +1 -1
- package/src/assets/web-panel/assets/{index-THsr_UUJ.js → index-C6c0j-Ki.js} +1 -1
- package/src/assets/web-panel/assets/{index-PKwZkQDC.js → index-C7d6QlfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-rCTtYCGu.js → index-C9QYxq61.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci0zIpSX.js → index-CBh48_Mh.js} +1 -1
- package/src/assets/web-panel/assets/{index-tMF_deZb.js → index-CNKHoXWI.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9Pe-EyB.js → index-CXVBQ82k.js} +3 -3
- package/src/assets/web-panel/assets/{index-B4MfxM5W.js → index-CXtiLagi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaFr7XB1.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-D8jcp9Rj.js → index-CtB45Hok.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cli0VREv.js → index-Cu_V6ZJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO-IKERp.js → index-Cykt9BbN.js} +1 -1
- package/src/assets/web-panel/assets/{index-y7cfh9rP.js → index-DDhy4eCS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CH2wK5dx.js → index-DEPPzM8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeycSy7n.js → index-DMVktlxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwssFWI1.js → index-DOww5Qny.js} +1 -1
- package/src/assets/web-panel/assets/{index-PJt1Zrx2.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-BPGlcDvs.js → index-DvM2xBUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BL_0ndQc.js → index-EK3XtMxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnJt9DaX.js → index-XJIV7HEw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpiR6uzH.js → index-cNwsev6n.js} +1 -1
- package/src/assets/web-panel/assets/{index-bwb4cg_D.js → index-f_7L9GvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbDhKroq.js → index-lUL3bD2z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvvJWwT8.js → index-pOUFfRdN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBMW8bQO.js → index-rGhS02f8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRikhGgx.js → index-vHtnQsnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHUxz4dy.js → index-vb1XIxEB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-B6e5CZ5p.js → initDefaultProps-DpRIjwTt.js} +1 -1
- package/src/assets/web-panel/assets/{motion-riMM1KfJ.js → motion-CG4_9o-Z.js} +1 -1
- package/src/assets/web-panel/assets/{move-C1NSDMjc.js → move-Dku1fXtf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bibuny9B.js → mtc-parser-BvAVeX-3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Cmf6FoRn.js → omit-DFu0x78D.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BSsYBUCY.js → pickAttrs-CmI-FNcK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-gSB7-GAS.js → placementArrow-CGERYewB.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-qaqttvKa.js → responsiveObserve-D7G8bF5J.js} +1 -1
- package/src/assets/web-panel/assets/{slide-RX2gxl3k.js → slide-B2sXwWXy.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DEJmkhqw.js → statusUtils-DI5yh0n3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CIWmJ78O.js → styleChecker-deGJ5dp_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-D-UPSQBE.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-9QFtqADc.js → useFs-Dqgx0Qv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DM6kyift.js → usePersonalDataHub-Be-lveh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-C-q6FNSJ.js → vnode-CFxB876W.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D4WJY2m8.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 +11 -7
- 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 +26 -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-ingress.js +60 -8
- 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 +188 -10
- 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 +6 -2
- package/src/runtime/agent-core.js +357 -44
- 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/EvolutionSettings-_QnjPFZJ.js +0 -1
- package/src/assets/web-panel/assets/devWarning-LxtRBsCm.js +0 -1
- package/src/assets/web-panel/assets/index-36hxBH-o.js +0 -1
- package/src/assets/web-panel/assets/index-C0b78zWZ.js +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { assertEvolutionContentContainsNoKnownSecrets } from "./evolution-evidence-projector.js";
|
|
2
3
|
|
|
3
4
|
export const WIKI_STATE_SCHEMA = "chainlesschain.evolution-wiki-state/v1";
|
|
4
5
|
export const WIKI_EVIDENCE_SCHEMA = "chainlesschain.evolution-wiki-evidence/v1";
|
|
@@ -126,6 +127,105 @@ function assertMetadataOnly(value, path = "data") {
|
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
129
|
|
|
130
|
+
function assertWikiPlaintextSafe(value) {
|
|
131
|
+
const isDecisionDigestRef = (candidate) =>
|
|
132
|
+
typeof candidate === "string" &&
|
|
133
|
+
candidate.startsWith("decision:") &&
|
|
134
|
+
DIGEST.test(candidate.slice("decision:".length));
|
|
135
|
+
const isBoundMaintenanceRequestMapKey = (path, key, child) =>
|
|
136
|
+
path.length === 1 &&
|
|
137
|
+
path[0] === "maintenanceRequests" &&
|
|
138
|
+
MAINTENANCE_REQUEST_ID.test(key) &&
|
|
139
|
+
child &&
|
|
140
|
+
typeof child === "object" &&
|
|
141
|
+
!Array.isArray(child) &&
|
|
142
|
+
DIGEST.test(child.requestDigest ?? "") &&
|
|
143
|
+
key === `wiki-maintenance:${child.requestDigest.slice("sha256:".length)}`;
|
|
144
|
+
const isBoundProposalDecisionEvidence = (path, key, child) =>
|
|
145
|
+
path.length === 1 &&
|
|
146
|
+
path[0] === "evidence" &&
|
|
147
|
+
isDecisionDigestRef(key) &&
|
|
148
|
+
child &&
|
|
149
|
+
typeof child === "object" &&
|
|
150
|
+
!Array.isArray(child) &&
|
|
151
|
+
child.kind === "proposal-decision" &&
|
|
152
|
+
child.ref === key;
|
|
153
|
+
const isProposalDecisionEvidenceRecord = (path, item) =>
|
|
154
|
+
path.length === 2 &&
|
|
155
|
+
path[0] === "evidence" &&
|
|
156
|
+
isDecisionDigestRef(path[1]) &&
|
|
157
|
+
item?.kind === "proposal-decision" &&
|
|
158
|
+
item.ref === path[1];
|
|
159
|
+
const isBoundProposalDecisionArtifactRef = (path, item, key, child) =>
|
|
160
|
+
key === "artifactRef" &&
|
|
161
|
+
isProposalDecisionEvidenceRecord(path, item) &&
|
|
162
|
+
DIGEST.test(item.data?.releaseDigest ?? "") &&
|
|
163
|
+
child ===
|
|
164
|
+
`artifact://${item.tenantId}/trusted/${item.data.releaseDigest.slice("sha256:".length)}`;
|
|
165
|
+
const isBoundProposalDecisionReceiptRef = (path, item, key, child) =>
|
|
166
|
+
path.length === 4 &&
|
|
167
|
+
path[0] === "skillImpact" &&
|
|
168
|
+
path[2] === "decisions" &&
|
|
169
|
+
path[3] === "[]" &&
|
|
170
|
+
key === "receiptRef" &&
|
|
171
|
+
DIGEST.test(item.candidateId ?? "") &&
|
|
172
|
+
child === `decision:${item.candidateId}`;
|
|
173
|
+
const isProposalImpactCandidateSubject = (path, item, key, child) =>
|
|
174
|
+
path.length === 2 &&
|
|
175
|
+
path[0] === "evolutionLog" &&
|
|
176
|
+
path[1] === "[]" &&
|
|
177
|
+
key === "subjectId" &&
|
|
178
|
+
item.type === "proposal-impact-recorded" &&
|
|
179
|
+
DIGEST.test(child ?? "");
|
|
180
|
+
const isBoundProtocolValue = (path, item, key, child) =>
|
|
181
|
+
(key.endsWith("Digest") && DIGEST.test(child ?? "")) ||
|
|
182
|
+
(key === "candidateId" && DIGEST.test(child ?? "")) ||
|
|
183
|
+
isProposalImpactCandidateSubject(path, item, key, child) ||
|
|
184
|
+
isBoundProposalDecisionReceiptRef(path, item, key, child) ||
|
|
185
|
+
isBoundProposalDecisionArtifactRef(path, item, key, child) ||
|
|
186
|
+
(isProposalDecisionEvidenceRecord(path, item) &&
|
|
187
|
+
key === "ref" &&
|
|
188
|
+
child === path[1]) ||
|
|
189
|
+
(key === "revisionId" && REVISION_ID.test(child ?? "")) ||
|
|
190
|
+
(key === "requestId" && MAINTENANCE_REQUEST_ID.test(child ?? ""));
|
|
191
|
+
const inspect = (item, path = []) => {
|
|
192
|
+
if (typeof item === "string") {
|
|
193
|
+
assertEvolutionContentContainsNoKnownSecrets(item);
|
|
194
|
+
} else if (Array.isArray(item)) {
|
|
195
|
+
item.forEach((child) => inspect(child, [...path, "[]"]));
|
|
196
|
+
} else if (item && typeof item === "object") {
|
|
197
|
+
for (const [key, child] of Object.entries(item)) {
|
|
198
|
+
// Maintenance requests are stored under their validated, digest-bound
|
|
199
|
+
// request ID. The map key is opaque protocol metadata, not model text;
|
|
200
|
+
// inspecting random hash bytes as prose can falsely match PII patterns.
|
|
201
|
+
// Restrict the exemption to the state map and inspect its complete
|
|
202
|
+
// record so an untrusted lookalike key cannot bypass this boundary.
|
|
203
|
+
if (
|
|
204
|
+
!isBoundMaintenanceRequestMapKey(path, key, child) &&
|
|
205
|
+
!isBoundProposalDecisionEvidence(path, key, child)
|
|
206
|
+
)
|
|
207
|
+
assertEvolutionContentContainsNoKnownSecrets(key);
|
|
208
|
+
// Protocol metadata can carry random hash bytes that accidentally match
|
|
209
|
+
// a PII detector. Every exemption is bound to its state path, schema and
|
|
210
|
+
// sibling fields; prose and lookalikes still go through the detector.
|
|
211
|
+
if (isBoundProtocolValue(path, item, key, child)) continue;
|
|
212
|
+
if (["string", "number"].includes(typeof child))
|
|
213
|
+
assertEvolutionContentContainsNoKnownSecrets(`${key}=${child}`);
|
|
214
|
+
inspect(child, [...path, key]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
try {
|
|
219
|
+
inspect(value);
|
|
220
|
+
} catch (cause) {
|
|
221
|
+
const error = new Error("Wiki revision contains secret or PII plaintext", {
|
|
222
|
+
cause,
|
|
223
|
+
});
|
|
224
|
+
error.code = "WIKI_MAINTAINER_SECRET_LEAK";
|
|
225
|
+
throw error;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
129
229
|
export function createEmptyWikiState(tenantId) {
|
|
130
230
|
return freeze({
|
|
131
231
|
schema: WIKI_STATE_SCHEMA,
|
|
@@ -301,6 +401,36 @@ function evidenceUsable(item, effectiveAt) {
|
|
|
301
401
|
);
|
|
302
402
|
}
|
|
303
403
|
|
|
404
|
+
// Corroboration needs distinct content AND distinct trust domains. Counting
|
|
405
|
+
// either set alone lets the same observation be repeated under new identities.
|
|
406
|
+
// A bounded bipartite matching also handles policies requiring >2 sources,
|
|
407
|
+
// where min(unique contents, unique domains) can still overcount independence.
|
|
408
|
+
function independentSourceCount(evidence) {
|
|
409
|
+
const domains = new Map();
|
|
410
|
+
for (const item of evidence) {
|
|
411
|
+
if (!domains.has(item.trustDomain))
|
|
412
|
+
domains.set(item.trustDomain, new Set());
|
|
413
|
+
domains.get(item.trustDomain).add(item.sourceDigest);
|
|
414
|
+
}
|
|
415
|
+
const matchedSources = new Map();
|
|
416
|
+
const match = (domain, visited) => {
|
|
417
|
+
for (const source of domains.get(domain)) {
|
|
418
|
+
if (visited.has(source)) continue;
|
|
419
|
+
visited.add(source);
|
|
420
|
+
if (
|
|
421
|
+
!matchedSources.has(source) ||
|
|
422
|
+
match(matchedSources.get(source), visited)
|
|
423
|
+
) {
|
|
424
|
+
matchedSources.set(source, domain);
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return false;
|
|
429
|
+
};
|
|
430
|
+
for (const domain of domains.keys()) match(domain, new Set());
|
|
431
|
+
return matchedSources.size;
|
|
432
|
+
}
|
|
433
|
+
|
|
304
434
|
function rebuildDerivedState(state, effectiveAt, descriptor) {
|
|
305
435
|
const dependents = {};
|
|
306
436
|
for (const pattern of Object.values(state.patterns)) {
|
|
@@ -352,7 +482,10 @@ function rebuildDerivedState(state, effectiveAt, descriptor) {
|
|
|
352
482
|
pattern.status = WIKI_PATTERN_STATUS.STALE;
|
|
353
483
|
} else if (negative.length > 0 || pattern.contradicts.length > 0)
|
|
354
484
|
pattern.status = WIKI_PATTERN_STATUS.CONTRADICTED;
|
|
355
|
-
else if (
|
|
485
|
+
else if (
|
|
486
|
+
hasGrader ||
|
|
487
|
+
independentSourceCount(positive) >= descriptor.minCorroboratingSources
|
|
488
|
+
)
|
|
356
489
|
pattern.status = WIKI_PATTERN_STATUS.CORROBORATED;
|
|
357
490
|
else pattern.status = WIKI_PATTERN_STATUS.HYPOTHESIS;
|
|
358
491
|
pattern.trustDomains = domains;
|
|
@@ -735,6 +868,10 @@ export class EvidenceBackedWikiMaintainer {
|
|
|
735
868
|
revisionId: state.revisionId,
|
|
736
869
|
};
|
|
737
870
|
}
|
|
871
|
+
// Trusted inputs do not make a model's derived output safe to persist.
|
|
872
|
+
// Inspect the complete outgoing state, including reasons, index and log,
|
|
873
|
+
// before publishing any revision artifact. Share the Raw/Skill policy.
|
|
874
|
+
assertWikiPlaintextSafe(state);
|
|
738
875
|
const stateDigest = hash(state);
|
|
739
876
|
const revision = freeze({
|
|
740
877
|
...revisionPayload,
|
|
@@ -742,6 +879,22 @@ export class EvidenceBackedWikiMaintainer {
|
|
|
742
879
|
stateDigest,
|
|
743
880
|
state: freeze(clone(state)),
|
|
744
881
|
});
|
|
882
|
+
// Derivation may await a model or another worker. Re-resolve through the
|
|
883
|
+
// trusted evidence boundary immediately before writing: prior read success
|
|
884
|
+
// is not permission to publish after revocation, deletion, or expiry. A
|
|
885
|
+
// changed but valid envelope requires fresh derivation, never a silent swap.
|
|
886
|
+
for (const ref of refs) {
|
|
887
|
+
const current = verifyEvidence(
|
|
888
|
+
await this._ports.resolveEvidence(ref),
|
|
889
|
+
this.descriptor.tenantId,
|
|
890
|
+
ref,
|
|
891
|
+
);
|
|
892
|
+
if (current.envelopeDigest !== evidenceByRef.get(ref).envelopeDigest) {
|
|
893
|
+
const error = new Error("Wiki evidence changed during derivation");
|
|
894
|
+
error.code = "WIKI_MAINTAINER_EVIDENCE_CHANGED";
|
|
895
|
+
throw error;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
745
898
|
const committed = await this._ports.commitRevision(
|
|
746
899
|
freeze({ expectedStateDigest: priorStateDigest, revision }),
|
|
747
900
|
);
|
|
@@ -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,11 +129,129 @@ 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
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function deniedAgentDependencies(commandName, code, message, source = null) {
|
|
141
|
+
if (commandName !== "agent") return null;
|
|
142
|
+
const evolutionCompositionFactory = Object.freeze(async () => {
|
|
143
|
+
const error = new Error(message);
|
|
144
|
+
error.code = code;
|
|
145
|
+
throw error;
|
|
146
|
+
});
|
|
147
|
+
if (
|
|
148
|
+
source === null ||
|
|
149
|
+
typeof source !== "object" ||
|
|
150
|
+
Array.isArray(source) ||
|
|
151
|
+
utilTypes.isProxy(source)
|
|
152
|
+
) {
|
|
153
|
+
return Object.freeze({ evolutionCompositionFactory });
|
|
154
|
+
}
|
|
155
|
+
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
156
|
+
const result = {};
|
|
157
|
+
for (const [name, descriptor] of Object.entries(descriptors)) {
|
|
158
|
+
if (name === "evolutionCompositionFactory" || !("value" in descriptor)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
Object.defineProperty(result, name, {
|
|
162
|
+
value: descriptor.value,
|
|
163
|
+
enumerable: descriptor.enumerable,
|
|
164
|
+
configurable: false,
|
|
165
|
+
writable: false,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
Object.defineProperty(result, "evolutionCompositionFactory", {
|
|
169
|
+
value: evolutionCompositionFactory,
|
|
170
|
+
enumerable: true,
|
|
171
|
+
configurable: false,
|
|
172
|
+
writable: false,
|
|
173
|
+
});
|
|
174
|
+
return Object.freeze(result);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function authenticatedDependencies(value, commandName) {
|
|
178
|
+
if (commandName !== "agent") return dependencies(value, commandName);
|
|
179
|
+
if (
|
|
180
|
+
value === null ||
|
|
181
|
+
typeof value !== "object" ||
|
|
182
|
+
Array.isArray(value) ||
|
|
183
|
+
utilTypes.isProxy(value)
|
|
184
|
+
) {
|
|
185
|
+
return deniedAgentDependencies(
|
|
186
|
+
commandName,
|
|
187
|
+
"EVOLUTION_DEPLOYMENT_INVALID_DEPENDENCIES",
|
|
188
|
+
"Authenticated agent deployment returned invalid dependencies",
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
192
|
+
value,
|
|
193
|
+
"evolutionCompositionFactory",
|
|
194
|
+
);
|
|
195
|
+
if (
|
|
196
|
+
!descriptor ||
|
|
197
|
+
!("value" in descriptor) ||
|
|
198
|
+
typeof descriptor.value !== "function" ||
|
|
199
|
+
descriptor.enumerable !== true
|
|
200
|
+
) {
|
|
201
|
+
return deniedAgentDependencies(
|
|
202
|
+
commandName,
|
|
203
|
+
"EVOLUTION_DEPLOYMENT_INVALID_DEPENDENCIES",
|
|
204
|
+
"Authenticated agent deployment did not provide an evolution composition factory",
|
|
205
|
+
value,
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
return dependencies(value, commandName);
|
|
132
209
|
}
|
|
133
210
|
|
|
134
211
|
async function loadBuiltInFactories(commandName) {
|
|
135
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
|
+
}
|
|
136
255
|
if (commandName === "learning") {
|
|
137
256
|
const [
|
|
138
257
|
{ createGovernedSkillSynthesisCliHost },
|
|
@@ -229,9 +348,7 @@ async function loadBuiltInFactories(commandName) {
|
|
|
229
348
|
import("./evolution-eval-process-supervisor.js"),
|
|
230
349
|
import("./governed-skill-synthesis-attestor-trust-approval-client.js"),
|
|
231
350
|
import("./governed-skill-synthesis-attestor-trust-operations-client.js"),
|
|
232
|
-
import(
|
|
233
|
-
"./governed-skill-synthesis-attestor-trust-operations-cli-host.js"
|
|
234
|
-
),
|
|
351
|
+
import("./governed-skill-synthesis-attestor-trust-operations-cli-host.js"),
|
|
235
352
|
]);
|
|
236
353
|
factories.createEvolutionWorkbenchCliHost = createEvolutionWorkbenchCliHost;
|
|
237
354
|
factories.createEvolutionWorkbenchReviewRuntime =
|
|
@@ -346,6 +463,7 @@ async function loadBuiltInFactories(commandName) {
|
|
|
346
463
|
}
|
|
347
464
|
if (
|
|
348
465
|
commandName === "agent" ||
|
|
466
|
+
commandName === "learning" ||
|
|
349
467
|
commandName === "ask" ||
|
|
350
468
|
commandName === "chat" ||
|
|
351
469
|
commandName === "compact" ||
|
|
@@ -355,14 +473,47 @@ async function loadBuiltInFactories(commandName) {
|
|
|
355
473
|
commandName === "cowork" ||
|
|
356
474
|
commandName === "orchestrate" ||
|
|
357
475
|
commandName === "serve" ||
|
|
476
|
+
commandName === "skill" ||
|
|
358
477
|
commandName === "stream" ||
|
|
359
478
|
commandName === "ui"
|
|
360
479
|
) {
|
|
361
|
-
const {
|
|
362
|
-
|
|
363
|
-
|
|
480
|
+
const {
|
|
481
|
+
assembleAgentSkillOutcomeIndexFromCatalog,
|
|
482
|
+
createAgentEvolutionRuntimeComposition,
|
|
483
|
+
} = await import("./agent-evolution-runtime-composition.js");
|
|
364
484
|
factories.createAgentEvolutionRuntimeComposition =
|
|
365
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
|
+
}
|
|
366
517
|
}
|
|
367
518
|
return Object.freeze(factories);
|
|
368
519
|
}
|
|
@@ -382,6 +533,7 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
382
533
|
"createWikiSkillBenchmarkGrader",
|
|
383
534
|
"createWikiSkillBenchmarkReportAttestor",
|
|
384
535
|
"createWikiSkillBenchmarkRunner",
|
|
536
|
+
"createEvolutionEvalRuntimeComposition",
|
|
385
537
|
];
|
|
386
538
|
for (const name of providerFactories) {
|
|
387
539
|
if (typeof factories[name] !== "function") continue;
|
|
@@ -494,6 +646,20 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
494
646
|
let saved = null;
|
|
495
647
|
if (!descriptorPath && !trustRootPath) {
|
|
496
648
|
saved = await readEvolutionDeploymentProfile({ env });
|
|
649
|
+
if (saved.error) {
|
|
650
|
+
return deniedAgentDependencies(
|
|
651
|
+
commandName,
|
|
652
|
+
"EVOLUTION_DEPLOYMENT_PROFILE_INVALID",
|
|
653
|
+
"Saved evolution deployment profile is invalid",
|
|
654
|
+
);
|
|
655
|
+
}
|
|
656
|
+
if (saved.profile && !saved.profile.enabled) {
|
|
657
|
+
return deniedAgentDependencies(
|
|
658
|
+
commandName,
|
|
659
|
+
"EVOLUTION_DEPLOYMENT_DISABLED",
|
|
660
|
+
"Saved evolution deployment profile is disabled",
|
|
661
|
+
);
|
|
662
|
+
}
|
|
497
663
|
if (!saved.error && saved.profile?.enabled) {
|
|
498
664
|
descriptorPath = saved.profile.descriptorPath;
|
|
499
665
|
trustRootPath = saved.profile.trustRootPath;
|
|
@@ -531,11 +697,23 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
531
697
|
// governed capabilities fail-closed while allowing `deployment status`,
|
|
532
698
|
// `configure`, and `disable` to start so the operator can recover. Explicit
|
|
533
699
|
// environment overrides remain strict and surface the error immediately.
|
|
534
|
-
if (fromSavedProfile)
|
|
700
|
+
if (fromSavedProfile) {
|
|
701
|
+
return deniedAgentDependencies(
|
|
702
|
+
commandName,
|
|
703
|
+
error?.code || "EVOLUTION_DEPLOYMENT_NOT_VERIFIED",
|
|
704
|
+
`Saved evolution deployment could not be verified: ${error?.message || String(error)}`,
|
|
705
|
+
);
|
|
706
|
+
}
|
|
535
707
|
throw error;
|
|
536
708
|
}
|
|
537
709
|
const { descriptor, moduleBytes } = verified;
|
|
538
|
-
if (!descriptor.commands.includes(commandName))
|
|
710
|
+
if (!descriptor.commands.includes(commandName)) {
|
|
711
|
+
return deniedAgentDependencies(
|
|
712
|
+
commandName,
|
|
713
|
+
"EVOLUTION_DEPLOYMENT_COMMAND_NOT_ALLOWED",
|
|
714
|
+
`Signed evolution deployment does not admit command: ${commandName}`,
|
|
715
|
+
);
|
|
716
|
+
}
|
|
539
717
|
// Import the exact bytes that were authenticated. Importing modulePath here
|
|
540
718
|
// would reopen a pathname-replacement window between hashing and execution.
|
|
541
719
|
// Deployment entrypoints are therefore single-file ESM bundles; any external
|
|
@@ -578,7 +756,7 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
578
756
|
"additional evolution deployment factories are invalid",
|
|
579
757
|
);
|
|
580
758
|
}
|
|
581
|
-
return
|
|
759
|
+
return authenticatedDependencies(
|
|
582
760
|
await loaded.createChainlessChainCommandDependencies(
|
|
583
761
|
Object.freeze({
|
|
584
762
|
commandName,
|
|
@@ -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(
|