chainlesschain 0.166.18 → 0.166.21
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/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-CQSBl3hY.js → AIOps-BjMnsUci.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-IQt-vRLt.js → ActionButton-DdYFP03A.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DkHC8O7k.js → Analytics-Bb8TuuK_.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CSti2P2T.js → AppLayout-Kn3TIOtk.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-C57hxn3v.js → Artifacts-4IxpqI_b.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DByLntcf.js → Audit-BOV2caqU.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D1Bd2EOa.js → BackgroundAgents-B86k-ay4.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-VstHzHng.js → Backup-C5_ie1e3.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CLhdexIf.js → BaseInput-xpwg6QCW.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BefC_JZS.js → Chat-CVZOcZau.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DbXMvgmn.js → ChatBubbleRenderer-D8fPYhUu.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CEY982vx.js → Checkbox-MKTq3zdP.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Dcm_DTvJ.js → Codegen-JUk3wzep.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C8SSu4KA.js → Col-JPvTA0kC.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BVV9vwRR.js → Community-Tqgl87NQ.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B7c5Vo18.js → Compact-BuAFYBmN.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Tq9jSZ5a.js → Compliance-CXS9WIPZ.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BJUjT09Q.js → Cowork-Ds2bFHrr.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CjV9PEaS.js → Cron-C_dV_OeW.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Dl7ReL8F.js → Crosschain-BsO6tIRo.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CG8PjWmM.js → DID-rNOFqBac.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CDBM6wmF.js → Dashboard-C2fcKKVY.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-8_55bXTD.js → Dropdown-Y7Ndr0X_.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-D3qOU1Cm.js → EmailListRenderer-DcP_uPmL.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bv5oWMZF.js → FamilyGuardDashboard-Cwn3gDzk.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-hpZ1xkKd.js → Federation-ClQuOsqb.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BN7GT191.js → FormItemContext-DfwtmlcK.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-PCRhfA7M.js → GenericCardRenderer-zNZhtbC5.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CIlP2vy7.js → Git-BZmdW-G5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-81lgm7YL.js → Governance-CqBk4lEn.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Cs24xMOV.js → Inference-Dbmt3ZXk.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CrJLVCZo.js → KnowledgeGraph-hMTH6qf3.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DLyO8RKT.js → Logs-CkiYgiW2.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DBOqijrP.js → MarkdownRenderer-BL1FElXg.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-Dz7AbQZc.js → Marketplace-CbB6wfin.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BM0aFiWv.js → McpTools-BSwiFtte.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-C9SJzENX.js → Memory-B03PeHrz.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BO2HnNRk.js → MobileBridge-CRGrnd-X.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CK_jMz0l.js → MobileProjects-CE_5v2kO.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CfhrJsdO.js → Mtc-Dp11QVx1.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BE2ELxgI.js → MtcAudit-CYu-3JBu.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CgR_E3Jd.js → Multisig-CGyJ0Xl3.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Cw9445_K.js → NLProgramming-CoWi_ov1.js} +1 -1
- package/src/assets/web-panel/assets/Notes-CgU9DDo9.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-DxHVh4uT.js → NotificationSettings-DX4I2b4W.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CwHc15Zs.js +1 -0
- package/src/assets/web-panel/assets/{Organization-pPXJtWo4.js → Organization-oopLO_tk.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-YamdTJwA.js → Overflow-BFVvjMyf.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BvqP53x7.js → P2P-CBy5t-Tk.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Blz1Xn2n.js → PdhVaultBrowser--YWJNsu6.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CgFRQqFJ.js → Permissions-C2dZ8scb.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CFeo3-6O.js → PersonalDataHub-Bs3l7Hlx.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BkaRojEK.js → Pipeline-DEBWbZuD.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BNZEx2Qp.js → Privacy-CjHBb6NU.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-HUBOgEEK.js → ProjectInit-D2WipUz5.js} +2 -2
- package/src/assets/web-panel/assets/ProjectSettings-B6WfnrGB.js +2 -0
- package/src/assets/web-panel/assets/{Projects-Dc517BXp.js → Projects-FF_thRi6.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DTLf8bgj.js → Providers-CCv5M_Dv.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BBNjPszk.js → QrScannerModal-CGthxU54.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DCsHvk3G.js → QuickAsk-CnPmXPFb.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Dpr5YSop.js → Recommend-Df_tGEa9.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DmKnvqGg.js → RemoteSession-Z58N0Loe.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CSRfuurX.js → Reputation-CZTBQ2Vt.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CDj3pQ_w.js → Row-CdK3YpCQ.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DI0a_kNq.js → RssFeed-CFMVT5sb.js} +3 -3
- package/src/assets/web-panel/assets/{Search-jAy7B2nU.js → Search-DrF8RIvD.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CkHTqYhc.js → Security-Ddk2f2DM.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CP-0Nzga.js → Services-CCuK-VOo.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BkF5-p3n.js → Skeleton-DxCpHzeM.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BDu-utDE.js → Skills-t2oTDgcv.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CQvq_2Qb.js → Sla-Df63M9_R.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-T7Ap512g.js → SpeechSettings-l7ox6KuX.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bt-PLvot.js → SyncSettings-COd_tgPp.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-yLEcCogg.js → Tasks-CzDCcrik.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-ByN3fmbr.js → Templates-D-vfxTGA.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DBI7hITH.js → Tenant-BlpT_Gxc.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B77_DlGX.js → Terminal-D5rq52Hg.js} +2 -2
- package/src/assets/web-panel/assets/TimelineRenderer-DdoMndkK.js +1 -0
- package/src/assets/web-panel/assets/{Tokens-BV2N6cR8.js → Tokens-BhgBsI6g.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CjXWGH3p.js → Trigger-DwwzoikZ.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-uqXIq3WC.js → Trust-HkTpzXFb.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D-6qu4vY.js → UkeySign-D9nk6Ehe.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CxGmx_2e.js → VideoEditing-BKk0rfoy.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DSq7WlAg.js → Wallet-IVWIU_Lq.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CDBiD57O.js → WebAuthn-CFTCpfsG.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Z8f63TSb.js → WorkflowEditor-Dnf4Obif.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B-UZFBjy.js → chat-D2snERdj.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CFk7K-7Q.js → colors-DKEjK1N1.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-X0IVMvgi.js → compact-item-BEDLwQdt.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DWg4j2n6.js → createContext-DA9iW1a0.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DyhgpXPf.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CkVCwNNF.js → hasIn-5l2xEcY9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BipwEbTA.js → index-5pW4t1iD.js} +1 -1
- package/src/assets/web-panel/assets/{index-5OcZHdzc.js → index-7P1b8HZo.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cvwu_rA_.js → index-B00GeekA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbIAWbma.js → index-B4QYBliR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNKFsBlz.js → index-B7_W_rYd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoskgPt9.js → index-BO9dQjpt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvOa-IFV.js → index-BZ5lY2zx.js} +1 -1
- package/src/assets/web-panel/assets/{index-_-9k3Tna.js → index-B_eCoZgW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbihMThv.js → index-BgfImyZI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLSBks8h.js → index-Bq5P3piS.js} +1 -1
- package/src/assets/web-panel/assets/{index-LU54bChK.js → index-Bqc8tdIF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Btqk6zWb.js → index-C7sKbM5s.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8uEL8Uw.js → index-CGlotREA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLlP1E4X.js → index-CRPrHE7h.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeWKPQGs.js → index-CX1x4AFn.js} +1 -1
- package/src/assets/web-panel/assets/{index-Db_5xhrU.js → index-CbTPvp2_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDfSD07S.js → index-CjWltbi_.js} +1 -1
- package/src/assets/web-panel/assets/index-Ck1jhFE0.js +1 -0
- package/src/assets/web-panel/assets/{index-BPBia4b-.js → index-CkMKuqUs.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1ZAOJRW.js → index-CmruhzFi.js} +1 -1
- package/src/assets/web-panel/assets/{index-P83LDnCz.js → index-Csfb-7hw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcDggpWR.js → index-CxEtQYdi.js} +1 -1
- package/src/assets/web-panel/assets/{index-OjnAwUJo.js → index-D7z4zB_a.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-EJNxgR.js → index-DLoalqRX.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3-B3FWD.js → index-DU2TXJu-.js} +1 -1
- package/src/assets/web-panel/assets/{index-D92g4l3n.js → index-DXet1xol.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ca0mij1n.js → index-Dbd7eEex.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCqpl_E_.js → index-Dbkghqn_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyWlOuak.js → index-Dg2a9owQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUBkvFPH.js → index-DpqtbXdE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhVHoqGL.js → index-DqwPFbOb.js} +3 -3
- package/src/assets/web-panel/assets/{index-BG-GaZri.js → index-DvV03Ayk.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMCEXBRh.js → index-NJieh3T1.js} +1 -1
- package/src/assets/web-panel/assets/{index-B273IY-E.js → index-Td8ZwyoC.js} +1 -1
- package/src/assets/web-panel/assets/index-c8jJEHVs.js +1 -0
- package/src/assets/web-panel/assets/{index-BzXjYUmd.js → index-e-e40id6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCLwoATF.js → index-fccZmC_h.js} +1 -1
- package/src/assets/web-panel/assets/{index-CN8HZlLH.js → index-fgYk0QXO.js} +1 -1
- package/src/assets/web-panel/assets/{index-BB4KHHcv.js → index-yYEQXYaU.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CFNgY8lJ.js → initDefaultProps-CPrcB1TC.js} +1 -1
- package/src/assets/web-panel/assets/{motion-D-5RrDzn.js → motion-BQ7mWRh_.js} +1 -1
- package/src/assets/web-panel/assets/{move-DN-L0Bd-.js → move-CzOEq99p.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-6mgLSeCK.js → mtc-parser-BlQI5jrw.js} +1 -1
- package/src/assets/web-panel/assets/{omit-ClWW8eTP.js → omit-DlW4gxmv.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Vystq3R8.js → pickAttrs-BBYms5nP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-D0H9hK4W.js → placementArrow-az2MPJ_7.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B3iNRU-a.js → responsiveObserve-D1-ibEol.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CiMXe6am.js → slide-DHGqa4GA.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CGDZJ1uT.js → statusUtils-CYGDo6lD.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-D2zA6NkY.js → styleChecker-Cl2EM9K6.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C1sYU6QE.js → useFlexGapSupport-DdYhzuv1.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BzUHSjg2.js → useFs-DWumPuBW.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CxB5yZCq.js → usePersonalDataHub-DxAO-Aqi.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BfUfMwtc.js → vnode-CplsQf_N.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CFYmj1TO.js → zoom-Cw5HXNSG.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +2 -2
- package/src/commands/agent.js +19 -1
- package/src/commands/evolution-knowledge.js +54 -0
- package/src/commands/evolution-workbench.js +83 -0
- package/src/commands/evolution.js +6 -1
- package/src/commands/serve.js +16 -0
- package/src/commands/skill.js +158 -16
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/session-protocol.js +2 -0
- package/src/gateways/ws/ws-agent-handler.js +124 -69
- package/src/gateways/ws/ws-server.js +19 -0
- package/src/generated/cc-agent-protocol.schema.json +7 -1
- package/src/harness/jsonl-session-store.js +25 -1
- package/src/index.js +1 -1
- package/src/lib/app-server/cli-agent-kernel-adapter.js +8 -0
- package/src/lib/app-server/graph-runtime.js +40 -1
- package/src/lib/app-server/server.js +181 -3
- package/src/lib/app-server/websocket-transport.js +2 -0
- package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +17 -0
- package/src/lib/evolution/agent-evolution-runtime-composition.js +165 -1
- package/src/lib/evolution/controlled-skill-production-pilot.js +912 -0
- package/src/lib/evolution/evolution-artifact-ports.js +21 -0
- package/src/lib/evolution/evolution-raw-crypto-shred.js +185 -0
- package/src/lib/evolution/evolution-workbench-batch-executor.js +195 -0
- package/src/lib/evolution/evolution-workbench-cli-host.js +169 -0
- package/src/lib/evolution/evolution-workbench-metrics-ledger-adapter.js +648 -0
- package/src/lib/evolution/evolution-workbench-metrics.js +943 -0
- package/src/lib/evolution/evolution-workbench-projection.js +734 -0
- package/src/lib/evolution/evolution-workbench-version-control.js +272 -0
- package/src/lib/evolution/governed-knowledge-conflict-merge.js +352 -0
- package/src/lib/evolution/governed-knowledge-dependency-authority.js +273 -0
- package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +646 -0
- package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +644 -0
- package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +282 -0
- package/src/lib/evolution/governed-knowledge-node-crypto-authority.js +348 -0
- package/src/lib/evolution/governed-knowledge-rbac-approval-authority.js +621 -0
- package/src/lib/evolution/governed-knowledge-review-host.js +249 -0
- package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +643 -0
- package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +259 -0
- package/src/lib/evolution/governed-knowledge-sync.js +485 -0
- package/src/lib/evolution/governed-knowledge-trust-ledger.js +707 -0
- package/src/lib/evolution/governed-skill-marketplace.js +430 -0
- package/src/lib/evolution/governed-wiki-pruning.js +435 -0
- package/src/lib/evolution/skill-outcome-index-authority.js +268 -0
- package/src/lib/evolution/skill-outcome-source-catalog-authority.js +237 -0
- package/src/lib/public-ide-capability-manifest.js +4 -0
- package/src/lib/skill-outcome-authority.js +43 -0
- package/src/lib/skill-outcome-transcript-authority.js +252 -0
- package/src/lib/skill-retrieval-router-benchmark.js +135 -0
- package/src/lib/skill-retrieval-router.js +235 -0
- package/src/lib/skill-vector-authority.js +325 -0
- package/src/lib/skill-vector-process-authority.js +386 -0
- package/src/repl/agent-repl.js +7 -1
- package/src/runtime/agent-core.js +72 -6
- package/src/runtime/agent-runtime.js +42 -0
- package/src/runtime/headless-runner.js +32 -0
- package/src/runtime/headless-stream.js +36 -1
- package/src/runtime/runtime-factory.js +62 -4
- package/src/assets/web-panel/assets/Notes-DZimkTrb.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-Iy-pnX56.js +0 -1
- package/src/assets/web-panel/assets/ProjectSettings-CFMmhROS.js +0 -2
- package/src/assets/web-panel/assets/TimelineRenderer-CsLTB_QO.js +0 -1
- package/src/assets/web-panel/assets/devWarning-B2IW1J_J.js +0 -1
- package/src/assets/web-panel/assets/index-BCp2ir-1.js +0 -1
- package/src/assets/web-panel/assets/index-Bw4iuzRD.js +0 -1
|
@@ -7,8 +7,12 @@ import {
|
|
|
7
7
|
createRolloutStore,
|
|
8
8
|
} from "./rollout-store-factory.js";
|
|
9
9
|
import { AppServerGraphRuntime } from "./graph-runtime.js";
|
|
10
|
+
import { captureAgentSkillOutcomeIndex } from "../evolution/agent-evolution-runtime-composition-brand.js";
|
|
11
|
+
import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
|
|
10
12
|
import { compileGraphDefinition } from "../graph-kernel/compiler.js";
|
|
11
13
|
import { createCliContextMemoryRuntime } from "../context-memory-kernel/runtime.js";
|
|
14
|
+
import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
|
|
15
|
+
import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
|
|
12
16
|
import {
|
|
13
17
|
contextPlanCreatedNotification,
|
|
14
18
|
memoryDeletionNotification,
|
|
@@ -145,6 +149,10 @@ export class CcAppServer {
|
|
|
145
149
|
transport = "stdio",
|
|
146
150
|
graphRuntime = null,
|
|
147
151
|
evolutionCompositionFactory = null,
|
|
152
|
+
skillOutcomeIndex = null,
|
|
153
|
+
skillVectorAuthority = null,
|
|
154
|
+
evolutionWorkbenchHost = null,
|
|
155
|
+
governedKnowledgeReviewHost = null,
|
|
148
156
|
contextMemoryRuntimeFactory = createCliContextMemoryRuntime,
|
|
149
157
|
} = {}) {
|
|
150
158
|
if (typeof send !== "function") {
|
|
@@ -166,9 +174,47 @@ export class CcAppServer {
|
|
|
166
174
|
throw new TypeError("contextMemoryRuntimeFactory must be a function");
|
|
167
175
|
}
|
|
168
176
|
this.contextMemoryRuntimeFactory = contextMemoryRuntimeFactory;
|
|
169
|
-
if (
|
|
177
|
+
if (
|
|
178
|
+
evolutionWorkbenchHost !== null &&
|
|
179
|
+
!isEvolutionWorkbenchCliHost(evolutionWorkbenchHost)
|
|
180
|
+
) {
|
|
181
|
+
throw new TypeError(
|
|
182
|
+
"CcAppServer evolutionWorkbenchHost must be a branded Workbench host",
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
this.evolutionWorkbenchHost = evolutionWorkbenchHost;
|
|
186
|
+
if (
|
|
187
|
+
governedKnowledgeReviewHost !== null &&
|
|
188
|
+
!isGovernedKnowledgeReviewHost(governedKnowledgeReviewHost)
|
|
189
|
+
) {
|
|
190
|
+
throw new TypeError(
|
|
191
|
+
"CcAppServer governedKnowledgeReviewHost must be a branded review host",
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
this.governedKnowledgeReviewHost = governedKnowledgeReviewHost;
|
|
195
|
+
this.skillOutcomeIndex =
|
|
196
|
+
skillOutcomeIndex === null
|
|
197
|
+
? null
|
|
198
|
+
: captureAgentSkillOutcomeIndex(skillOutcomeIndex);
|
|
199
|
+
this.skillVectorAuthority =
|
|
200
|
+
skillVectorAuthority === null
|
|
201
|
+
? null
|
|
202
|
+
: captureSkillVectorAuthority(skillVectorAuthority);
|
|
203
|
+
if (
|
|
204
|
+
this.skillOutcomeIndex !== null &&
|
|
205
|
+
this.skillVectorAuthority !== null &&
|
|
206
|
+
this.skillOutcomeIndex.tenantId !== this.skillVectorAuthority.tenantId
|
|
207
|
+
) {
|
|
208
|
+
throw new TypeError(
|
|
209
|
+
"App Server retrieval authorities must share one tenant",
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
if (
|
|
213
|
+
graphRuntime &&
|
|
214
|
+
(evolutionCompositionFactory || skillOutcomeIndex || skillVectorAuthority)
|
|
215
|
+
) {
|
|
170
216
|
throw new TypeError(
|
|
171
|
-
"graphRuntime and
|
|
217
|
+
"graphRuntime and host-owned Graph authorities cannot both be provided",
|
|
172
218
|
);
|
|
173
219
|
}
|
|
174
220
|
this.graphRuntime =
|
|
@@ -178,6 +224,8 @@ export class CcAppServer {
|
|
|
178
224
|
now,
|
|
179
225
|
createId,
|
|
180
226
|
evolutionCompositionFactory,
|
|
227
|
+
skillOutcomeIndex: this.skillOutcomeIndex,
|
|
228
|
+
skillVectorAuthority: this.skillVectorAuthority,
|
|
181
229
|
executeNode: (context) => this._executeGraphNode(context),
|
|
182
230
|
requestHumanTask: (context) => this._requestHumanTask(context),
|
|
183
231
|
onEvent: (event) => {
|
|
@@ -353,6 +401,18 @@ export class CcAppServer {
|
|
|
353
401
|
"memory/decide": () => this._memoryDecide(message.params),
|
|
354
402
|
"memory/delete": () => this._memoryDelete(message.params),
|
|
355
403
|
"memory/reconcile": () => this._memoryReconcile(message.params),
|
|
404
|
+
"evolution/workbench/list": () =>
|
|
405
|
+
this._evolutionWorkbenchList(message.params),
|
|
406
|
+
"evolution/workbench/compare": () =>
|
|
407
|
+
this._evolutionWorkbenchCompare(message.params),
|
|
408
|
+
"evolution/workbench/review": () =>
|
|
409
|
+
this._evolutionWorkbenchReview(message.params),
|
|
410
|
+
"evolution/workbench/rollback": () =>
|
|
411
|
+
this._evolutionWorkbenchRollback(message.params),
|
|
412
|
+
"evolution/knowledge/conflicts": () =>
|
|
413
|
+
this._governedKnowledgeConflicts(message.params),
|
|
414
|
+
"evolution/knowledge/merge": () =>
|
|
415
|
+
this._governedKnowledgeMerge(message.params),
|
|
356
416
|
};
|
|
357
417
|
const handler = handlers[method];
|
|
358
418
|
if (!handler) {
|
|
@@ -400,6 +460,20 @@ export class CcAppServer {
|
|
|
400
460
|
websocket: { stability: "experimental" },
|
|
401
461
|
limits: this.requestQueue.snapshot(),
|
|
402
462
|
graphRuntime: this.graphRuntime.runtimeClaims(),
|
|
463
|
+
evolutionWorkbench: {
|
|
464
|
+
available: this.evolutionWorkbenchHost !== null,
|
|
465
|
+
methods:
|
|
466
|
+
this.evolutionWorkbenchHost === null
|
|
467
|
+
? []
|
|
468
|
+
: ["list", "compare", "review", "rollback"],
|
|
469
|
+
},
|
|
470
|
+
governedKnowledgeReview: {
|
|
471
|
+
available: this.governedKnowledgeReviewHost !== null,
|
|
472
|
+
methods:
|
|
473
|
+
this.governedKnowledgeReviewHost === null
|
|
474
|
+
? []
|
|
475
|
+
: ["conflicts", "merge"],
|
|
476
|
+
},
|
|
403
477
|
schema: {
|
|
404
478
|
id: APP_SERVER_SCHEMA.$id,
|
|
405
479
|
version: APP_SERVER_PROTOCOL_VERSION,
|
|
@@ -415,6 +489,91 @@ export class CcAppServer {
|
|
|
415
489
|
return runtime;
|
|
416
490
|
}
|
|
417
491
|
|
|
492
|
+
_requireEvolutionWorkbenchHost() {
|
|
493
|
+
if (this.evolutionWorkbenchHost === null) {
|
|
494
|
+
throw new JsonRpcError(
|
|
495
|
+
JSON_RPC_ERROR.NOT_FOUND,
|
|
496
|
+
"Evolution Workbench is not configured for this App Server",
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
return this.evolutionWorkbenchHost;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
_evolutionWorkbenchList(rawParams = {}) {
|
|
503
|
+
const params = requireObject(rawParams);
|
|
504
|
+
return this._requireEvolutionWorkbenchHost().list({
|
|
505
|
+
query: typeof params.query === "string" ? params.query : "",
|
|
506
|
+
status: params.status ?? null,
|
|
507
|
+
offset: params.offset ?? 0,
|
|
508
|
+
limit: params.limit ?? 100,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
_evolutionWorkbenchCompare(rawParams) {
|
|
513
|
+
const params = requireObject(rawParams);
|
|
514
|
+
return this._requireEvolutionWorkbenchHost().compare(
|
|
515
|
+
requiredString(params.leftPacketDigest, "leftPacketDigest"),
|
|
516
|
+
requiredString(params.rightPacketDigest, "rightPacketDigest"),
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
_evolutionWorkbenchReview(rawParams) {
|
|
521
|
+
const params = requireObject(rawParams);
|
|
522
|
+
if (!Array.isArray(params.packetDigests)) {
|
|
523
|
+
throw new JsonRpcError(
|
|
524
|
+
JSON_RPC_ERROR.INVALID_PARAMS,
|
|
525
|
+
"packetDigests must be an array",
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
return this._requireEvolutionWorkbenchHost().review({
|
|
529
|
+
packetDigests: params.packetDigests,
|
|
530
|
+
decision: requiredString(params.decision, "decision"),
|
|
531
|
+
reason: requiredString(params.reason, "reason"),
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
_evolutionWorkbenchRollback(rawParams) {
|
|
536
|
+
const params = requireObject(rawParams);
|
|
537
|
+
return this._requireEvolutionWorkbenchHost().rollback({
|
|
538
|
+
fromPacketDigest: requiredString(
|
|
539
|
+
params.fromPacketDigest,
|
|
540
|
+
"fromPacketDigest",
|
|
541
|
+
),
|
|
542
|
+
toPacketDigest: requiredString(params.toPacketDigest, "toPacketDigest"),
|
|
543
|
+
reason: requiredString(params.reason, "reason"),
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
_requireGovernedKnowledgeReviewHost() {
|
|
548
|
+
if (this.governedKnowledgeReviewHost === null) {
|
|
549
|
+
throw new JsonRpcError(
|
|
550
|
+
JSON_RPC_ERROR.NOT_FOUND,
|
|
551
|
+
"Governed knowledge review is not configured for this App Server",
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
return this.governedKnowledgeReviewHost;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
_governedKnowledgeConflicts(rawParams = {}) {
|
|
558
|
+
const params = requireObject(rawParams);
|
|
559
|
+
return this._requireGovernedKnowledgeReviewHost().list({
|
|
560
|
+
cursor: params.cursor ?? 0,
|
|
561
|
+
limit: params.limit ?? 50,
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
_governedKnowledgeMerge(rawParams) {
|
|
566
|
+
const params = requireObject(rawParams);
|
|
567
|
+
return this._requireGovernedKnowledgeReviewHost().merge({
|
|
568
|
+
conflictEnvelopeDigest: requiredString(
|
|
569
|
+
params.conflictEnvelopeDigest,
|
|
570
|
+
"conflictEnvelopeDigest",
|
|
571
|
+
),
|
|
572
|
+
mergedRecord: requireObject(params.mergedRecord, "mergedRecord"),
|
|
573
|
+
reason: requiredString(params.reason, "reason"),
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
|
|
418
577
|
async _contextPlan(rawParams) {
|
|
419
578
|
const params = requireObject(rawParams);
|
|
420
579
|
const runtime = this._contextMemoryRuntime({
|
|
@@ -612,6 +771,8 @@ export class CcAppServer {
|
|
|
612
771
|
input,
|
|
613
772
|
signal,
|
|
614
773
|
evolutionIngress,
|
|
774
|
+
skillOutcomeIndex,
|
|
775
|
+
skillVectorAuthority,
|
|
615
776
|
}) {
|
|
616
777
|
const threadId = `graph-agent:${runId}:${nodeId}`;
|
|
617
778
|
const turn = { id: attempt.id, threadId };
|
|
@@ -622,9 +783,17 @@ export class CcAppServer {
|
|
|
622
783
|
try {
|
|
623
784
|
const turnOptions = { ...(input?.options || {}) };
|
|
624
785
|
delete turnOptions.evolutionIngress;
|
|
786
|
+
delete turnOptions.skillOutcomeIndex;
|
|
787
|
+
delete turnOptions.skillVectorAuthority;
|
|
625
788
|
if (evolutionIngress !== null && evolutionIngress !== undefined) {
|
|
626
789
|
turnOptions.evolutionIngress = evolutionIngress;
|
|
627
790
|
}
|
|
791
|
+
if (skillOutcomeIndex !== null && skillOutcomeIndex !== undefined) {
|
|
792
|
+
turnOptions.skillOutcomeIndex = skillOutcomeIndex;
|
|
793
|
+
}
|
|
794
|
+
if (skillVectorAuthority !== null && skillVectorAuthority !== undefined) {
|
|
795
|
+
turnOptions.skillVectorAuthority = skillVectorAuthority;
|
|
796
|
+
}
|
|
628
797
|
const result = await this.kernel.startTurn({
|
|
629
798
|
threadId,
|
|
630
799
|
turnId: attempt.id,
|
|
@@ -866,11 +1035,20 @@ export class CcAppServer {
|
|
|
866
1035
|
async _runTurn(active, input, options) {
|
|
867
1036
|
const { turn } = active;
|
|
868
1037
|
try {
|
|
1038
|
+
const turnOptions = { ...options };
|
|
1039
|
+
delete turnOptions.skillOutcomeIndex;
|
|
1040
|
+
delete turnOptions.skillVectorAuthority;
|
|
1041
|
+
if (this.skillOutcomeIndex !== null) {
|
|
1042
|
+
turnOptions.skillOutcomeIndex = this.skillOutcomeIndex;
|
|
1043
|
+
}
|
|
1044
|
+
if (this.skillVectorAuthority !== null) {
|
|
1045
|
+
turnOptions.skillVectorAuthority = this.skillVectorAuthority;
|
|
1046
|
+
}
|
|
869
1047
|
const result = await this.kernel.startTurn({
|
|
870
1048
|
threadId: turn.threadId,
|
|
871
1049
|
turnId: turn.id,
|
|
872
1050
|
input,
|
|
873
|
-
options,
|
|
1051
|
+
options: turnOptions,
|
|
874
1052
|
emit: (event) => this._emitKernelEvent(turn, event),
|
|
875
1053
|
requestApproval: (event) => this._requestApproval(turn, event),
|
|
876
1054
|
});
|
|
@@ -398,6 +398,8 @@ export class WebSocketAppServerHost extends EventEmitter {
|
|
|
398
398
|
kernel: this.kernelFactory?.(),
|
|
399
399
|
evolutionCompositionFactory:
|
|
400
400
|
this.options.evolutionCompositionFactory ?? null,
|
|
401
|
+
skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
|
|
402
|
+
skillVectorAuthority: this.options.skillVectorAuthority ?? null,
|
|
401
403
|
transport: "websocket",
|
|
402
404
|
maxQueuedRequests: this.options.maxQueuedRequests,
|
|
403
405
|
maxQueuedRequestBytes: this.options.maxQueuedRequestBytes,
|
|
@@ -2,6 +2,7 @@ export const AGENT_EVOLUTION_RUNTIME_COMPOSITION_SCHEMA =
|
|
|
2
2
|
"chainlesschain.agent-evolution-runtime-composition/v1";
|
|
3
3
|
|
|
4
4
|
const COMPOSITIONS = new WeakSet();
|
|
5
|
+
const SKILL_OUTCOME_INDEXES = new WeakSet();
|
|
5
6
|
|
|
6
7
|
export function sealAgentEvolutionRuntimeComposition(fields) {
|
|
7
8
|
const composition = Object.freeze({
|
|
@@ -20,3 +21,19 @@ export function captureAgentEvolutionRuntimeComposition(value) {
|
|
|
20
21
|
}
|
|
21
22
|
return value;
|
|
22
23
|
}
|
|
24
|
+
|
|
25
|
+
export function sealAgentSkillOutcomeIndex(fields) {
|
|
26
|
+
const index = Object.freeze({
|
|
27
|
+
schema: "chainlesschain.agent-skill-outcome-index/v1",
|
|
28
|
+
...fields,
|
|
29
|
+
});
|
|
30
|
+
SKILL_OUTCOME_INDEXES.add(index);
|
|
31
|
+
return index;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function captureAgentSkillOutcomeIndex(value) {
|
|
35
|
+
if (!SKILL_OUTCOME_INDEXES.has(value)) {
|
|
36
|
+
throw new TypeError("a branded Agent Skill outcome index is required");
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
@@ -18,11 +18,17 @@ import {
|
|
|
18
18
|
createEvolutionLedgerFileBackend,
|
|
19
19
|
} from "./evolution-ledger-file-backend.js";
|
|
20
20
|
import { EvolutionRunLedgerAdapter } from "./evolution-run-ledger-adapter.js";
|
|
21
|
+
import { EvolutionWorkbenchMetricsLedgerAdapter } from "./evolution-workbench-metrics-ledger-adapter.js";
|
|
22
|
+
import { captureSkillOutcomeSourceCatalogAuthority } from "./skill-outcome-source-catalog-authority.js";
|
|
21
23
|
import {
|
|
22
24
|
captureAgentEvolutionIngress,
|
|
23
25
|
createAgentEvolutionIngress,
|
|
24
26
|
} from "./agent-evolution-ingress.js";
|
|
25
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
captureAgentEvolutionRuntimeComposition,
|
|
29
|
+
sealAgentSkillOutcomeIndex,
|
|
30
|
+
sealAgentEvolutionRuntimeComposition,
|
|
31
|
+
} from "./agent-evolution-runtime-composition-brand.js";
|
|
26
32
|
|
|
27
33
|
export {
|
|
28
34
|
AGENT_EVOLUTION_RUNTIME_COMPOSITION_SCHEMA,
|
|
@@ -46,6 +52,9 @@ const ARTIFACT_AUTHORITY_KEYS = new Set([
|
|
|
46
52
|
"envelopeSigner",
|
|
47
53
|
"envelopeVerifier",
|
|
48
54
|
]);
|
|
55
|
+
const SKILL_OUTCOME_SOURCE_KEYS = new Set(["composition", "skillName"]);
|
|
56
|
+
const SKILL_OUTCOME_CATALOG_ENTRY_KEYS = new Set(["runId", "skillNames"]);
|
|
57
|
+
const MAX_SKILL_OUTCOME_SOURCES = 128;
|
|
49
58
|
|
|
50
59
|
function exactRecord(value, keys, label) {
|
|
51
60
|
if (
|
|
@@ -346,6 +355,27 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
346
355
|
ledgerArtifactResolver,
|
|
347
356
|
now: clock,
|
|
348
357
|
});
|
|
358
|
+
const skillOutcomeReaders = new Map();
|
|
359
|
+
const createSkillOutcomeReader = Object.freeze((skillNameInput) => {
|
|
360
|
+
const skillName = identifier(skillNameInput, "skillName");
|
|
361
|
+
const cached = skillOutcomeReaders.get(skillName);
|
|
362
|
+
if (cached) return cached;
|
|
363
|
+
const reader = new EvolutionWorkbenchMetricsLedgerAdapter({
|
|
364
|
+
descriptor: {
|
|
365
|
+
tenantId,
|
|
366
|
+
artifactTenantId: tenantId,
|
|
367
|
+
evolutionRunId: runId,
|
|
368
|
+
skillName,
|
|
369
|
+
audience,
|
|
370
|
+
purpose: "evolution-ledger",
|
|
371
|
+
},
|
|
372
|
+
artifactPorts,
|
|
373
|
+
ledger: backend.ledger,
|
|
374
|
+
ledgerArtifactResolver,
|
|
375
|
+
}).createOutcomeReader();
|
|
376
|
+
skillOutcomeReaders.set(skillName, reader);
|
|
377
|
+
return reader;
|
|
378
|
+
});
|
|
349
379
|
const evolutionIngress = createAgentEvolutionIngress({
|
|
350
380
|
evidenceAdapter,
|
|
351
381
|
runAdapter,
|
|
@@ -361,9 +391,143 @@ export function createAgentEvolutionRuntimeComposition({
|
|
|
361
391
|
tenantId,
|
|
362
392
|
runId,
|
|
363
393
|
evolutionIngress,
|
|
394
|
+
createSkillOutcomeReader,
|
|
364
395
|
loadRun: Object.freeze(() => runAdapter.load()),
|
|
365
396
|
ledgerDescriptor: backend.descriptor,
|
|
366
397
|
storage,
|
|
367
398
|
});
|
|
368
399
|
return composition;
|
|
369
400
|
}
|
|
401
|
+
|
|
402
|
+
export function assembleAgentSkillOutcomeIndex({ sources } = {}) {
|
|
403
|
+
if (
|
|
404
|
+
!Array.isArray(sources) ||
|
|
405
|
+
utilTypes.isProxy(sources) ||
|
|
406
|
+
sources.length < 1 ||
|
|
407
|
+
sources.length > MAX_SKILL_OUTCOME_SOURCES
|
|
408
|
+
) {
|
|
409
|
+
throw new TypeError("Skill outcome index sources are invalid or unbounded");
|
|
410
|
+
}
|
|
411
|
+
let tenantId = null;
|
|
412
|
+
const sourceIds = new Set();
|
|
413
|
+
const readers = sources.map((input, index) => {
|
|
414
|
+
const source = exactRecord(
|
|
415
|
+
input,
|
|
416
|
+
SKILL_OUTCOME_SOURCE_KEYS,
|
|
417
|
+
`sources[${index}]`,
|
|
418
|
+
);
|
|
419
|
+
const composition = captureAgentEvolutionRuntimeComposition(
|
|
420
|
+
source.composition,
|
|
421
|
+
);
|
|
422
|
+
const skillName = identifier(
|
|
423
|
+
source.skillName,
|
|
424
|
+
`sources[${index}].skillName`,
|
|
425
|
+
);
|
|
426
|
+
if (tenantId === null) tenantId = composition.tenantId;
|
|
427
|
+
if (composition.tenantId !== tenantId) {
|
|
428
|
+
throw new Error("Skill outcome index sources crossed a tenant boundary");
|
|
429
|
+
}
|
|
430
|
+
const sourceId = `${composition.runId}\0${skillName}`;
|
|
431
|
+
if (sourceIds.has(sourceId)) {
|
|
432
|
+
throw new Error("Skill outcome index sources contain a duplicate");
|
|
433
|
+
}
|
|
434
|
+
sourceIds.add(sourceId);
|
|
435
|
+
if (typeof composition.createSkillOutcomeReader !== "function") {
|
|
436
|
+
throw new TypeError(
|
|
437
|
+
"Agent evolution composition lacks an outcome reader",
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
return composition.createSkillOutcomeReader(skillName);
|
|
441
|
+
});
|
|
442
|
+
return sealAgentSkillOutcomeIndex({
|
|
443
|
+
tenantId,
|
|
444
|
+
readers: Object.freeze(readers),
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
export async function assembleAgentSkillOutcomeIndexFromCatalog({
|
|
449
|
+
tenantId: tenantIdInput,
|
|
450
|
+
catalogAuthority: catalogAuthorityInput,
|
|
451
|
+
openComposition,
|
|
452
|
+
} = {}) {
|
|
453
|
+
const tenantId = identifier(tenantIdInput, "tenantId");
|
|
454
|
+
const catalogAuthority = captureSkillOutcomeSourceCatalogAuthority(
|
|
455
|
+
catalogAuthorityInput,
|
|
456
|
+
);
|
|
457
|
+
if (
|
|
458
|
+
typeof openComposition !== "function" ||
|
|
459
|
+
utilTypes.isProxy(openComposition)
|
|
460
|
+
) {
|
|
461
|
+
throw new TypeError("Skill outcome composition opener is invalid");
|
|
462
|
+
}
|
|
463
|
+
const loaded = await catalogAuthority.loadCatalog();
|
|
464
|
+
if (
|
|
465
|
+
loaded?.authenticated !== true ||
|
|
466
|
+
loaded.durable !== true ||
|
|
467
|
+
loaded.tenantId !== tenantId ||
|
|
468
|
+
!Array.isArray(loaded.entries)
|
|
469
|
+
) {
|
|
470
|
+
throw new Error("Skill outcome source catalog authority is invalid");
|
|
471
|
+
}
|
|
472
|
+
const catalog = loaded.entries;
|
|
473
|
+
const runIds = new Set();
|
|
474
|
+
let sourceCount = 0;
|
|
475
|
+
const normalizedCatalog = catalog.map((input, index) => {
|
|
476
|
+
const entry = exactRecord(
|
|
477
|
+
input,
|
|
478
|
+
SKILL_OUTCOME_CATALOG_ENTRY_KEYS,
|
|
479
|
+
`catalog[${index}]`,
|
|
480
|
+
);
|
|
481
|
+
const runId = identifier(entry.runId, `catalog[${index}].runId`);
|
|
482
|
+
if (runIds.has(runId)) {
|
|
483
|
+
throw new TypeError(
|
|
484
|
+
"Skill outcome source catalog contains a duplicate run",
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
runIds.add(runId);
|
|
488
|
+
if (
|
|
489
|
+
!Array.isArray(entry.skillNames) ||
|
|
490
|
+
utilTypes.isProxy(entry.skillNames) ||
|
|
491
|
+
entry.skillNames.length < 1 ||
|
|
492
|
+
entry.skillNames.length > MAX_SKILL_OUTCOME_SOURCES
|
|
493
|
+
) {
|
|
494
|
+
throw new TypeError(
|
|
495
|
+
`catalog[${index}].skillNames is invalid or unbounded`,
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
const skillNames = entry.skillNames.map((skillName, skillIndex) =>
|
|
499
|
+
identifier(skillName, `catalog[${index}].skillNames[${skillIndex}]`),
|
|
500
|
+
);
|
|
501
|
+
if (new Set(skillNames).size !== skillNames.length) {
|
|
502
|
+
throw new TypeError(
|
|
503
|
+
"Skill outcome source catalog contains a duplicate Skill",
|
|
504
|
+
);
|
|
505
|
+
}
|
|
506
|
+
sourceCount += skillNames.length;
|
|
507
|
+
if (sourceCount > MAX_SKILL_OUTCOME_SOURCES) {
|
|
508
|
+
throw new TypeError(
|
|
509
|
+
"Skill outcome source catalog is invalid or unbounded",
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
return Object.freeze({ runId, skillNames: Object.freeze(skillNames) });
|
|
513
|
+
});
|
|
514
|
+
const sources = [];
|
|
515
|
+
for (const entry of normalizedCatalog) {
|
|
516
|
+
const context = Object.freeze({ tenantId, runId: entry.runId });
|
|
517
|
+
const composition = captureAgentEvolutionRuntimeComposition(
|
|
518
|
+
await openComposition(context),
|
|
519
|
+
);
|
|
520
|
+
if (
|
|
521
|
+
composition.tenantId !== tenantId ||
|
|
522
|
+
composition.runId !== entry.runId
|
|
523
|
+
) {
|
|
524
|
+
throw new TypeError(
|
|
525
|
+
"Skill outcome catalog opener returned an unbound composition",
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
for (const skillName of entry.skillNames) {
|
|
529
|
+
sources.push(Object.freeze({ composition, skillName }));
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
return assembleAgentSkillOutcomeIndex({ sources });
|
|
533
|
+
}
|