chainlesschain 0.166.130 → 0.166.131
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 +20 -4
- package/package.json +2 -2
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-CHItp4vg.js +1 -0
- package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
- package/src/assets/web-panel/assets/{ActionButton-Dzv1ReHF.js → ActionButton-nhMNWW_d.js} +1 -1
- package/src/assets/web-panel/assets/Analytics-DRc81BBI.js +3 -0
- package/src/assets/web-panel/assets/Analytics-Dr-1kvaM.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-BTBIIl1e.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-CVt7HMkp.js +3 -0
- package/src/assets/web-panel/assets/Artifacts-BuJgG5jf.js +1 -0
- package/src/assets/web-panel/assets/Artifacts-Dohtjyfl.css +1 -0
- package/src/assets/web-panel/assets/Audit-DDnViLtj.css +1 -0
- package/src/assets/web-panel/assets/Audit-msNg0aH-.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-BpcV8yWC.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-CH3Uc9sF.css +1 -0
- package/src/assets/web-panel/assets/Backup-CYh10zO3.css +1 -0
- package/src/assets/web-panel/assets/Backup-P53DADwG.js +1 -0
- package/src/assets/web-panel/assets/BaseInput-DFxT2yWN.js +1 -0
- package/src/assets/web-panel/assets/Chat-B5JvvQJb.css +1 -0
- package/src/assets/web-panel/assets/Chat-BXoHisHW.js +7 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +1 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DMGtSdDx.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-B5uzaLLP.js → Checkbox-B4g_ckJq.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
- package/src/assets/web-panel/assets/Codegen-C6SSSOfp.js +1 -0
- package/src/assets/web-panel/assets/{Col-D3I2kUGu.js → Col-IO1NEUYL.js} +1 -1
- package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
- package/src/assets/web-panel/assets/Community-CdEBl93F.js +1 -0
- package/src/assets/web-panel/assets/{Compact-5GigOmb8.js → Compact-DYs0a9k7.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-BPnk7948.js +1 -0
- package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
- package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
- package/src/assets/web-panel/assets/Cowork-VLOTGbza.js +6 -0
- package/src/assets/web-panel/assets/Cron-_9GgQLJo.js +2 -0
- package/src/assets/web-panel/assets/Crosschain-B21yn0qy.js +1 -0
- package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
- package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
- package/src/assets/web-panel/assets/DID-mBeDgRZ7.js +2 -0
- package/src/assets/web-panel/assets/Dashboard-BckYYzhP.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
- package/src/assets/web-panel/assets/Dropdown-DEedqFiE.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CMs0k9TB.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-B00Qd0fN.js +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-BnQ91YHJ.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-DxMTAMa8.js +1 -0
- package/src/assets/web-panel/assets/Federation-B-UZw0LO.js +1 -0
- package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
- package/src/assets/web-panel/assets/FormItemContext-CkafazEw.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DEUG25ZJ.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +1 -0
- package/src/assets/web-panel/assets/Git-D7dr9oz9.js +2 -0
- package/src/assets/web-panel/assets/{Git-BdHhxBWR.css → Git-DPuaGtg7.css} +1 -1
- package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
- package/src/assets/web-panel/assets/Governance-DKlUJ1wg.js +1 -0
- package/src/assets/web-panel/assets/Inference-BJKqplap.js +1 -0
- package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-B78fB-bz.js +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
- package/src/assets/web-panel/assets/Logs-DJGcHYH_.js +2 -0
- package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-BAxj61I3.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-DkcG_MxW.js +1 -0
- package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
- package/src/assets/web-panel/assets/Marketplace-ucTbwByD.js +1 -0
- package/src/assets/web-panel/assets/McpTools-Cu1xZYYk.js +2 -0
- package/src/assets/web-panel/assets/McpTools-DSGHWYS_.css +1 -0
- package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
- package/src/assets/web-panel/assets/Memory-DCGpXmi-.js +2 -0
- package/src/assets/web-panel/assets/MobileBridge-BQ-Uwwg7.css +1 -0
- package/src/assets/web-panel/assets/MobileBridge-BnKr0aAS.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-C5UvYJTP.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
- package/src/assets/web-panel/assets/Mtc-D1UUl4WH.js +6 -0
- package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-D3aa8XP4.js +19 -0
- package/src/assets/web-panel/assets/Multisig-DiXdfJjO.js +7 -0
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-DbWABgSE.js +1 -0
- package/src/assets/web-panel/assets/Notes-BP1DPl-R.js +7 -0
- package/src/assets/web-panel/assets/Notes-COE2q2gD.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-xaB6ONe7.js +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-D1uNcz3b.js +1 -0
- package/src/assets/web-panel/assets/Organization-BM3Lh8Q8.css +1 -0
- package/src/assets/web-panel/assets/Organization-DMLDGaf1.js +4 -0
- package/src/assets/web-panel/assets/{Overflow-ky9UfGv4.js → Overflow-DH4QPEoI.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-C0w0P4A3.js → OverrideContext-DLR1AtLy.js} +1 -1
- package/src/assets/web-panel/assets/P2P-Bl4OS10o.js +2 -0
- package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-D9XSE2YI.js +7 -0
- package/src/assets/web-panel/assets/Permissions-CUaPlr6d.js +4 -0
- package/src/assets/web-panel/assets/Permissions-Diejgkbs.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Ba92dZk-.js +3 -0
- package/src/assets/web-panel/assets/PersonalDataHub-C_xhspRy.css +1 -0
- package/src/assets/web-panel/assets/Pipeline-Bh2okm-8.js +1 -0
- package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
- package/src/assets/web-panel/assets/Privacy-Bmq3p4gC.js +1 -0
- package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
- package/src/assets/web-panel/assets/ProjectInit-BPu2fdKR.js +2 -0
- package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
- package/src/assets/web-panel/assets/ProjectSettings-D6ABLpmt.js +2 -0
- package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
- package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
- package/src/assets/web-panel/assets/Projects-qWHEve0z.js +1 -0
- package/src/assets/web-panel/assets/Providers-CpAXh_6c.css +1 -0
- package/src/assets/web-panel/assets/Providers-D9DI-2hc.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-er_HkLCI.js → QrScannerModal-CxifoeD5.js} +1 -1
- package/src/assets/web-panel/assets/QrScannerModal-DFrn7rxS.css +1 -0
- package/src/assets/web-panel/assets/QuickAsk-DC1BvwR7.js +1 -0
- package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
- package/src/assets/web-panel/assets/Recommend-CKqbMB5o.js +1 -0
- package/src/assets/web-panel/assets/RemoteSession-BGGzPdS5.js +5 -0
- package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
- package/src/assets/web-panel/assets/Reputation-DH90O9-5.js +1 -0
- package/src/assets/web-panel/assets/Row-h7ovueJc.js +1 -0
- package/src/assets/web-panel/assets/RssFeed-Cze7YLaG.css +1 -0
- package/src/assets/web-panel/assets/RssFeed-DaHxXTZg.js +3 -0
- package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
- package/src/assets/web-panel/assets/Search-Bn6Nqpn4.js +1 -0
- package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
- package/src/assets/web-panel/assets/Security-ClbBmPJi.js +4 -0
- package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
- package/src/assets/web-panel/assets/Services-ChHLQwRn.js +2 -0
- package/src/assets/web-panel/assets/{Skeleton-CrFs6rUL.js → Skeleton-DfN6BFzt.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
- package/src/assets/web-panel/assets/Skills-C926wDev.js +1 -0
- package/src/assets/web-panel/assets/Sla-DJzi1l1M.js +1 -0
- package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-_GSyVjm_.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-B67xnERe.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BaYZadcG.js +1 -0
- package/src/assets/web-panel/assets/Templates-BsMmCdZI.css +1 -0
- package/src/assets/web-panel/assets/Templates-Bu8kN1Xt.js +1 -0
- package/src/assets/web-panel/assets/Tenant-BM9qufw1.js +1 -0
- package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
- package/src/assets/web-panel/assets/Terminal-MEdd5DjB.js +3 -0
- package/src/assets/web-panel/assets/Terminal-qPp9MaPu.css +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-C27kL2oU.js +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +1 -0
- package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
- package/src/assets/web-panel/assets/Tokens-Cvjd98VC.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-CXrW4Nry.js → Trigger-CLym84HI.js} +1 -1
- package/src/assets/web-panel/assets/Trust-Bv2JTaNN.js +1 -0
- package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
- package/src/assets/web-panel/assets/UkeySign-CSCkNbtm.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-BFDXB4xh.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
- package/src/assets/web-panel/assets/Wallet-CMEFrG_b.js +4 -0
- package/src/assets/web-panel/assets/Wallet-Dw8uV4Ug.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-DKx6xPPl.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-x4eO_Q4y.js +5 -0
- package/src/assets/web-panel/assets/WorkflowEditor-ClWEPgV1.js +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
- package/src/assets/web-panel/assets/{_getTag-DnrRH4E6.js → _getTag-BVc6NQ_K.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BpJsXlTK.js → chat-BdYOI4gM.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-CqM1QOwM.js → collapseMotion-B4IZiILV.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CUNg0-fh.js → colors-DcTBrGvS.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C3tFHnhu.js → compact-item-Dn2ktVuj.js} +1 -1
- package/src/assets/web-panel/assets/createContext-XTreuyqp.js +1 -0
- package/src/assets/web-panel/assets/{debounce-CFGTTtN3.js → debounce-D9xTw4Sx.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
- package/src/assets/web-panel/assets/echarts-CDp6K7pj.js +19 -0
- package/src/assets/web-panel/assets/{hasIn-CU6RIciB.js → hasIn-CFRNsYQd.js} +1 -1
- package/src/assets/web-panel/assets/{icons-DG5UD-6K.js → icons-DlxlFL4g.js} +4 -4
- package/src/assets/web-panel/assets/index-3RqDry-K.js +71 -0
- package/src/assets/web-panel/assets/{index-BPWJw4Ji.js → index-8METW_Wr.js} +1 -1
- package/src/assets/web-panel/assets/index-BBd64wj8.js +31 -0
- package/src/assets/web-panel/assets/index-BEyVNbNE.js +3 -0
- package/src/assets/web-panel/assets/index-BMLpP8QQ.js +1 -0
- package/src/assets/web-panel/assets/{index-BzhobTgZ.js → index-BSqydcDa.js} +1 -1
- package/src/assets/web-panel/assets/index-BV6LojRv.js +21 -0
- package/src/assets/web-panel/assets/index-BbMWvjLZ.js +1 -0
- package/src/assets/web-panel/assets/{index-KgR1f2Gq.js → index-Brc0BF-k.js} +2 -2
- package/src/assets/web-panel/assets/{index-D4njcYFw.js → index-CG9YLDmI.js} +1 -1
- package/src/assets/web-panel/assets/{index-6EwPIfXu.js → index-CNHWMMDX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEIoRm_c.js → index-COuEJdmr.js} +3 -3
- package/src/assets/web-panel/assets/{index-BG4zuFf0.js → index-CRW3AWdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOlAutGy.js → index-CUT4h5JB.js} +2 -2
- package/src/assets/web-panel/assets/index-CXMa7Z-S.js +1 -0
- package/src/assets/web-panel/assets/index-CbaPXyNc.js +19 -0
- package/src/assets/web-panel/assets/{index-Cq93VfoF.css → index-CfX1DEtk.css} +1 -1
- package/src/assets/web-panel/assets/{index-X6e0cGRU.js → index-CjHA_Q7s.js} +1 -1
- package/src/assets/web-panel/assets/index-CsnYp4qF.js +1 -0
- package/src/assets/web-panel/assets/index-D45vulkq.js +12 -0
- package/src/assets/web-panel/assets/index-D9kPBEqD.js +55 -0
- package/src/assets/web-panel/assets/index-DDTSgpXz.js +1 -0
- package/src/assets/web-panel/assets/index-DFl_a0n5.js +1 -0
- package/src/assets/web-panel/assets/index-DNdiAymC.js +1 -0
- package/src/assets/web-panel/assets/{index-BJjEAoDb.js → index-DQEu7uW0.js} +1 -1
- package/src/assets/web-panel/assets/index-DW9XncMy.js +21 -0
- package/src/assets/web-panel/assets/index-Daa1yCt_.js +1 -0
- package/src/assets/web-panel/assets/index-DdVpoNEQ.js +12 -0
- package/src/assets/web-panel/assets/index-Dhi4Oybt.js +1 -0
- package/src/assets/web-panel/assets/index-DoVoNjtJ.js +1 -0
- package/src/assets/web-panel/assets/{index-111hR8WZ.js → index-Vo7A4aiN.js} +4 -4
- package/src/assets/web-panel/assets/{index-lo9rgpyj.js → index-XdlYkgCa.js} +1 -1
- package/src/assets/web-panel/assets/{index-1L0tt7G2.js → index-ir2ZwWz5.js} +2 -2
- package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
- package/src/assets/web-panel/assets/{index-CyyhilXV.js → index-lnTt0Jps.js} +2 -2
- package/src/assets/web-panel/assets/{index-CLQjdKmE.js → index-ma-rJkfE.js} +1 -1
- package/src/assets/web-panel/assets/index-oE4jTpHK.js +13 -0
- package/src/assets/web-panel/assets/{index-K2Uqqkr1.js → index-r5sNECM5.js} +1 -1
- package/src/assets/web-panel/assets/index-uT4fRDzU.js +1 -0
- package/src/assets/web-panel/assets/index-xlS8pDS2.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-FI8D7E2x.js → initDefaultProps-mdL0oeZa.js} +1 -1
- package/src/assets/web-panel/assets/{isPlainObject-BWRMT62c.js → isPlainObject-_gz-soRW.js} +1 -1
- package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
- package/src/assets/web-panel/assets/motion-ZgVCKcEX.js +11 -0
- package/src/assets/web-panel/assets/{move-Vl1vUReW.js → move-A_28O5T2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-6Cu2aFME.js → mtc-parser-0zlMjabo.js} +1 -1
- package/src/assets/web-panel/assets/{omit-VRKL8iSO.js → omit-DF7mU3yG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZfWsOe0.js → pickAttrs-Cmt8liJP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-qmcOUc4W.js → placementArrow-DaMDC57b.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BLB6SsSw.js → responsiveObserve-CHw_f2d3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-41jdYeSH.js → slide-DJS9fFQq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Yn8OQ5ey.js → statusUtils-Bk3XdZwh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-4CEwz9Zd.js → styleChecker-DMybAFsA.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
- package/src/assets/web-panel/assets/{useFs-Bugo8HuF.js → useFs-KPklVptS.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-DXbJa_zE.js → useMergedState-d-EXs3xd.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B-q2ElB0.js → usePersonalDataHub-C7FrKDhD.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-BrCfMLMc.js → useRefs-DHeCQehi.js} +1 -1
- package/src/assets/web-panel/assets/{useState-CnxtbLoC.js → useState-Dlgl7fUg.js} +1 -1
- package/src/assets/web-panel/assets/vendor-BXcBOG8b.js +1 -0
- package/src/assets/web-panel/assets/vnode-DB3JBusp.js +1 -0
- package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
- package/src/assets/web-panel/assets/{zoom-DM1y_KKP.js → zoom-C8rAdf81.js} +1 -1
- package/src/assets/web-panel/index.html +4 -4
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +1 -1
- package/src/commands/governed-skill-marketplace.js +24 -10
- package/src/commands/llm.js +4 -3
- package/src/data/changelog.json +14 -1
- package/src/harness/worktree-isolator.js +4 -1
- package/src/lib/compaction-host-provenance.js +24 -0
- package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
- package/src/lib/context-memory-kernel/live-compaction.js +12 -3
- package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
- package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
- package/src/lib/context-memory-kernel/memory-service.js +30 -16
- package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
- package/src/lib/context-memory-kernel/provider-context.js +55 -24
- package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
- package/src/lib/cost-budget.js +2 -0
- package/src/lib/ephemeral-worktree-scope.js +24 -0
- package/src/lib/evolution/evolution-deployment-loader.js +6 -4
- package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
- package/src/lib/evolution/governed-skill-marketplace.js +47 -24
- package/src/lib/goal-condition-engine.js +20 -3
- package/src/lib/goal-verification-command.js +221 -0
- package/src/lib/goal-verification-plan.js +372 -0
- package/src/lib/llm-connection-probe.js +12 -5
- package/src/lib/llm-onboarding-catalog.json +1 -1
- package/src/lib/llm-pricing.js +34 -8
- package/src/lib/mcp-tool-catalog-authority.js +244 -0
- package/src/lib/model-capabilities.js +6 -0
- package/src/lib/model-catalog-review.js +3 -0
- package/src/lib/model-context-catalog.js +44 -2
- package/src/lib/openai-responses.js +35 -6
- package/src/lib/sub-agent-context.js +12 -4
- package/src/lib/subagent-inheritance.js +162 -2
- package/src/lib/usage-pricing-context.js +34 -17
- package/src/repl/agent-repl.js +34 -2
- package/src/runtime/agent-core.js +199 -9
- package/src/runtime/compaction-host-context.js +72 -0
- package/src/runtime/headless-runner.js +133 -37
- package/src/runtime/headless-stream.js +38 -21
- package/src/runtime/mcp-agent-catalog.js +257 -0
- package/src/runtime/mcp-config.js +18 -69
- package/src/runtime/mcp-tool-search.js +16 -1
- package/src/runtime/system-prompt.js +9 -0
- package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
- package/src/assets/web-panel/assets/AIOps-o-rFKEYL.js +0 -1
- package/src/assets/web-panel/assets/Analytics-Bt7H_jrh.js +0 -3
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-CgynsRFP.js +0 -9
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +0 -1
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
- package/src/assets/web-panel/assets/Audit-DBXn-AZ6.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents--dxPftKa.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
- package/src/assets/web-panel/assets/Backup-D9Zf_2tH.js +0 -1
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-DDTOjovq.js +0 -1
- package/src/assets/web-panel/assets/Chat-2ETqdBLn.js +0 -8
- package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
- package/src/assets/web-panel/assets/Codegen-4ieEEIwt.js +0 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
- package/src/assets/web-panel/assets/Community-DeYxFMJb.js +0 -1
- package/src/assets/web-panel/assets/Compliance-DLVjbVUh.js +0 -1
- package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
- package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
- package/src/assets/web-panel/assets/Cowork-DfUKa0T5.js +0 -6
- package/src/assets/web-panel/assets/Cron-_RpktpO5.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-7x6xdbwH.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
- package/src/assets/web-panel/assets/DID-ccVhToC1.js +0 -2
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-DhygcaoK.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-DFplwXK7.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-Bm01soCN.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-ChQXDBA3.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
- package/src/assets/web-panel/assets/Federation-C0yomE-M.js +0 -1
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
- package/src/assets/web-panel/assets/FormItemContext-DtT3ZEZK.js +0 -2
- package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
- package/src/assets/web-panel/assets/Git-CCY42R8S.js +0 -2
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
- package/src/assets/web-panel/assets/Governance-N66Bwvqg.js +0 -1
- package/src/assets/web-panel/assets/Inference-BkbPuR_2.js +0 -1
- package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-B3PibXdA.js +0 -1
- package/src/assets/web-panel/assets/Logs-CUtNB_N6.js +0 -2
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-D-V4dOe3.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-DLNJb6Nr.js +0 -1
- package/src/assets/web-panel/assets/McpTools-2zGjJb5K.js +0 -4
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
- package/src/assets/web-panel/assets/Memory-9rNZ1EvR.js +0 -2
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
- package/src/assets/web-panel/assets/MobileBridge-Cw7sAAgn.js +0 -1
- package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-8XACrqqy.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
- package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
- package/src/assets/web-panel/assets/Mtc-mg02JNy-.js +0 -6
- package/src/assets/web-panel/assets/MtcAudit-B1Vkhj2l.js +0 -19
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
- package/src/assets/web-panel/assets/Multisig-BQEeA7GG.js +0 -13
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
- package/src/assets/web-panel/assets/NLProgramming-BIbkjZV3.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
- package/src/assets/web-panel/assets/Notes-DIwhkZNY.js +0 -7
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-Cj9175ce.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-IfNpXT2R.js +0 -1
- package/src/assets/web-panel/assets/Organization-DPFp6G9o.js +0 -4
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
- package/src/assets/web-panel/assets/P2P-tXck8GLq.js +0 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DSvpQl9k.js +0 -7
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
- package/src/assets/web-panel/assets/Permissions-CKPkdLj-.js +0 -4
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-DnqXc12l.js +0 -9
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-BKjFU_kd.js +0 -1
- package/src/assets/web-panel/assets/Privacy-ChC-J5Tn.js +0 -1
- package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-ByFZG9sY.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-Bbv1Kiw-.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
- package/src/assets/web-panel/assets/Projects-QYyGW31-.js +0 -1
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
- package/src/assets/web-panel/assets/Providers-CJLnWw0r.js +0 -1
- package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-DoXU0np9.js +0 -1
- package/src/assets/web-panel/assets/Recommend-DCo_vuaf.js +0 -1
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
- package/src/assets/web-panel/assets/RemoteSession-CLuL925Z.js +0 -5
- package/src/assets/web-panel/assets/Reputation-CNNCA_-M.js +0 -1
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
- package/src/assets/web-panel/assets/Row-Vu4j631i.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-C18B4xiy.js +0 -3
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
- package/src/assets/web-panel/assets/Search-DxiqccE2.js +0 -1
- package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
- package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
- package/src/assets/web-panel/assets/Security-Droe_hHI.js +0 -4
- package/src/assets/web-panel/assets/Services-CwmmyXzq.js +0 -2
- package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
- package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
- package/src/assets/web-panel/assets/Skills-Dp-d2miK.js +0 -1
- package/src/assets/web-panel/assets/Sla-2DFXVbK4.js +0 -1
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-Cdd9lCoy.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-CxQhcYSk.js +0 -2
- package/src/assets/web-panel/assets/Tasks-BHWVRfXx.js +0 -1
- package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
- package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
- package/src/assets/web-panel/assets/Templates-DNFk3a5_.js +0 -1
- package/src/assets/web-panel/assets/Tenant-B6X6dPo8.js +0 -1
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
- package/src/assets/web-panel/assets/Terminal-BuUNoLGM.js +0 -3
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CA_u4Blu.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
- package/src/assets/web-panel/assets/Trust-DHcLpNy3.js +0 -1
- package/src/assets/web-panel/assets/UkeySign-B_fni4C2.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-g9nf2EhS.js +0 -1
- package/src/assets/web-panel/assets/Wallet-C8pOjIve.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-BaKNjxZt.js +0 -5
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-CX030Wb1.js +0 -1
- package/src/assets/web-panel/assets/createContext-B8rTvO61.js +0 -1
- package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +0 -1
- package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
- package/src/assets/web-panel/assets/index--6BUI55w.js +0 -1
- package/src/assets/web-panel/assets/index-5Q1bepcM.js +0 -1
- package/src/assets/web-panel/assets/index-B10Ia2KL.js +0 -21
- package/src/assets/web-panel/assets/index-B1SLBLli.js +0 -3
- package/src/assets/web-panel/assets/index-B8_VQAav.js +0 -1
- package/src/assets/web-panel/assets/index-BMuPJra-.js +0 -1
- package/src/assets/web-panel/assets/index-BOCjph-k.js +0 -12
- package/src/assets/web-panel/assets/index-BpBaOWmV.js +0 -1
- package/src/assets/web-panel/assets/index-CDlHvQtw.js +0 -1
- package/src/assets/web-panel/assets/index-CPF7Vqri.js +0 -55
- package/src/assets/web-panel/assets/index-CPmgKQcl.js +0 -1
- package/src/assets/web-panel/assets/index-CcpMHPWd.js +0 -21
- package/src/assets/web-panel/assets/index-Cyksnofp.js +0 -1
- package/src/assets/web-panel/assets/index-Dc9pcin6.js +0 -1
- package/src/assets/web-panel/assets/index-DfAC55QA.js +0 -19
- package/src/assets/web-panel/assets/index-DgNCfwvg.js +0 -1
- package/src/assets/web-panel/assets/index-DvfhIBNZ.js +0 -1
- package/src/assets/web-panel/assets/index-Hbzd9WeI.js +0 -1
- package/src/assets/web-panel/assets/index-IiS7WoUl.js +0 -13
- package/src/assets/web-panel/assets/index-Xa6TlaD7.js +0 -31
- package/src/assets/web-panel/assets/index-YczWc2_0.js +0 -12
- package/src/assets/web-panel/assets/index-h_ANnbR8.js +0 -3
- package/src/assets/web-panel/assets/index-k7QsBwyo.js +0 -75
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
- package/src/assets/web-panel/assets/motion-B1hpJYSD.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-BClv53kR.js +0 -1
- package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
- package/src/assets/web-panel/assets/vnode-ejVeFJ0x.js +0 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
// Only host-owned publications can enlarge a live catalog. A plain object or a
|
|
4
|
+
// mutated startup array is not a catalog authority.
|
|
5
|
+
const authorities = new WeakMap();
|
|
6
|
+
const publishers = new WeakMap();
|
|
7
|
+
|
|
8
|
+
function freezeMetadata(value, seen = new WeakSet()) {
|
|
9
|
+
if (!value || typeof value !== "object" || seen.has(value)) return value;
|
|
10
|
+
seen.add(value);
|
|
11
|
+
for (const child of Object.values(value)) freezeMetadata(child, seen);
|
|
12
|
+
return Object.freeze(value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function captureMcpToolCatalog(authority) {
|
|
16
|
+
if (authority == null) return null;
|
|
17
|
+
if (!authorities.has(authority)) {
|
|
18
|
+
const error = new TypeError("MCP tool catalog authority is invalid");
|
|
19
|
+
error.code = "CC_MCP_TOOL_CATALOG_AUTHORITY_INVALID";
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
return authority;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function readMcpToolCatalog(authority) {
|
|
26
|
+
return authorities.get(captureMcpToolCatalog(authority))?.read() || null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function installAuthority(read, extendSelection = false, selectionBase = null) {
|
|
30
|
+
const authority = Object.freeze({});
|
|
31
|
+
authorities.set(authority, {
|
|
32
|
+
read,
|
|
33
|
+
extendSelection,
|
|
34
|
+
selectionBase: Array.isArray(selectionBase)
|
|
35
|
+
? Object.freeze([...selectionBase])
|
|
36
|
+
: null,
|
|
37
|
+
});
|
|
38
|
+
return authority;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Publish a completed, admitted host inventory; never expose a partial batch. */
|
|
42
|
+
export function publishMcpToolCatalog(mcp, { create = false } = {}) {
|
|
43
|
+
let publisher = publishers.get(mcp);
|
|
44
|
+
if (!publisher && !create) return null;
|
|
45
|
+
if (!publisher) {
|
|
46
|
+
publisher = { snapshot: null, records: new Map(), revision: 0 };
|
|
47
|
+
publisher.authority = installAuthority(() => {
|
|
48
|
+
publisher.refresh?.();
|
|
49
|
+
return publisher.snapshot;
|
|
50
|
+
});
|
|
51
|
+
publishers.set(mcp, publisher);
|
|
52
|
+
Object.defineProperty(mcp, "mcpToolCatalog", {
|
|
53
|
+
value: publisher.authority,
|
|
54
|
+
enumerable: true,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const records = new Map();
|
|
58
|
+
const identities = new Map();
|
|
59
|
+
for (const definition of mcp.extraToolDefinitions || []) {
|
|
60
|
+
const name = definition?.function?.name;
|
|
61
|
+
const executor = mcp.externalToolExecutors?.[name];
|
|
62
|
+
if (!name || !executor) continue;
|
|
63
|
+
const full =
|
|
64
|
+
executor.registry?.deferred?.get(name)?.definition || definition;
|
|
65
|
+
freezeMetadata(full);
|
|
66
|
+
freezeMetadata(definition);
|
|
67
|
+
freezeMetadata(mcp.externalToolDescriptors?.[name]);
|
|
68
|
+
for (const key of [
|
|
69
|
+
"kind",
|
|
70
|
+
"serverName",
|
|
71
|
+
"toolName",
|
|
72
|
+
"op",
|
|
73
|
+
"toolResultConfig",
|
|
74
|
+
]) {
|
|
75
|
+
if (!Object.hasOwn(executor, key)) continue;
|
|
76
|
+
Object.defineProperty(executor, key, {
|
|
77
|
+
value: freezeMetadata(executor[key]),
|
|
78
|
+
enumerable: true,
|
|
79
|
+
writable: false,
|
|
80
|
+
configurable: false,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const fingerprint = createHash("sha256")
|
|
84
|
+
.update(
|
|
85
|
+
JSON.stringify({
|
|
86
|
+
definition: full,
|
|
87
|
+
descriptor: mcp.externalToolDescriptors?.[name] || null,
|
|
88
|
+
route: {
|
|
89
|
+
kind: executor.kind,
|
|
90
|
+
serverName: executor.serverName,
|
|
91
|
+
toolName: executor.toolName,
|
|
92
|
+
op: executor.op,
|
|
93
|
+
inheritable: executor.inheritable,
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
)
|
|
97
|
+
.digest("hex");
|
|
98
|
+
const previous = publisher.records.get(name);
|
|
99
|
+
const identity =
|
|
100
|
+
previous?.executor === executor && previous.fingerprint === fingerprint
|
|
101
|
+
? previous.identity
|
|
102
|
+
: Object.freeze({});
|
|
103
|
+
records.set(name, { executor, fingerprint, identity });
|
|
104
|
+
identities.set(name, identity);
|
|
105
|
+
}
|
|
106
|
+
publisher.records = records;
|
|
107
|
+
publisher.snapshot = Object.freeze({
|
|
108
|
+
revision: ++publisher.revision,
|
|
109
|
+
extraToolDefinitions: Object.freeze([...(mcp.extraToolDefinitions || [])]),
|
|
110
|
+
externalToolDescriptors: Object.freeze({ ...mcp.externalToolDescriptors }),
|
|
111
|
+
externalToolExecutors: Object.freeze({ ...mcp.externalToolExecutors }),
|
|
112
|
+
mcpClient: mcp.mcpClient || null,
|
|
113
|
+
identities,
|
|
114
|
+
});
|
|
115
|
+
return publisher.authority;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function setMcpToolCatalogRefresh(mcp, refresh) {
|
|
119
|
+
if (!publishers.has(mcp)) publishMcpToolCatalog(mcp, { create: true });
|
|
120
|
+
publishers.get(mcp).refresh = refresh;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** A derived authority can only remove names from its parent. */
|
|
124
|
+
export function projectMcpToolCatalog(
|
|
125
|
+
authority,
|
|
126
|
+
project,
|
|
127
|
+
{ extendSelection = false, selectionBase = null } = {},
|
|
128
|
+
) {
|
|
129
|
+
captureMcpToolCatalog(authority);
|
|
130
|
+
let previousSource;
|
|
131
|
+
let previousResult;
|
|
132
|
+
return installAuthority(
|
|
133
|
+
() => {
|
|
134
|
+
const source = readMcpToolCatalog(authority);
|
|
135
|
+
if (source === previousSource) return previousResult;
|
|
136
|
+
const result = project(source, previousResult);
|
|
137
|
+
const permitted = new Set(
|
|
138
|
+
source.extraToolDefinitions.map((def) => def.function.name),
|
|
139
|
+
);
|
|
140
|
+
const definitions = (result?.extraToolDefinitions || []).filter((def) =>
|
|
141
|
+
permitted.has(def?.function?.name),
|
|
142
|
+
);
|
|
143
|
+
const names = new Set(definitions.map((def) => def.function.name));
|
|
144
|
+
const subset = (values) =>
|
|
145
|
+
Object.fromEntries(
|
|
146
|
+
Object.entries(values || {}).filter(([name]) => names.has(name)),
|
|
147
|
+
);
|
|
148
|
+
previousSource = source;
|
|
149
|
+
previousResult = Object.freeze({
|
|
150
|
+
...result,
|
|
151
|
+
revision: source.revision,
|
|
152
|
+
extraToolDefinitions: Object.freeze(definitions),
|
|
153
|
+
externalToolDescriptors: Object.freeze(
|
|
154
|
+
subset(result?.externalToolDescriptors),
|
|
155
|
+
),
|
|
156
|
+
externalToolExecutors: Object.freeze(
|
|
157
|
+
subset(result?.externalToolExecutors),
|
|
158
|
+
),
|
|
159
|
+
mcpClient: source.mcpClient,
|
|
160
|
+
identities: new Map(
|
|
161
|
+
[...source.identities].filter(([name]) => names.has(name)),
|
|
162
|
+
),
|
|
163
|
+
});
|
|
164
|
+
return previousResult;
|
|
165
|
+
},
|
|
166
|
+
extendSelection,
|
|
167
|
+
selectionBase,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function restrictMcpToolCatalog(snapshot, names) {
|
|
172
|
+
const allowed = new Set(names);
|
|
173
|
+
return {
|
|
174
|
+
...snapshot,
|
|
175
|
+
extraToolDefinitions: snapshot.extraToolDefinitions.filter((def) =>
|
|
176
|
+
allowed.has(def.function.name),
|
|
177
|
+
),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function assertMcpCatalogBinding(binding, name) {
|
|
182
|
+
if (!binding) return;
|
|
183
|
+
const current = readMcpToolCatalog(binding.authority);
|
|
184
|
+
const identity = binding.snapshot.identities.get(name);
|
|
185
|
+
if (!identity || current.identities.get(name) !== identity) {
|
|
186
|
+
const error = new Error(
|
|
187
|
+
`MCP tool catalog changed before dispatch of ${name}; request its current schema again`,
|
|
188
|
+
);
|
|
189
|
+
error.code = "CC_MCP_TOOL_CATALOG_STALE";
|
|
190
|
+
error.dispatched = false;
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Replace catalog-owned fields while retaining unrelated host tools. */
|
|
196
|
+
export function mergeMcpToolCatalog(options, snapshot, authority) {
|
|
197
|
+
const selection = authorities.get(captureMcpToolCatalog(authority));
|
|
198
|
+
const mayExtendSelection =
|
|
199
|
+
selection.extendSelection === true &&
|
|
200
|
+
Array.isArray(selection.selectionBase) &&
|
|
201
|
+
Array.isArray(options.enabledToolNames) &&
|
|
202
|
+
options.enabledToolNames.length === selection.selectionBase.length &&
|
|
203
|
+
options.enabledToolNames.every((name) =>
|
|
204
|
+
selection.selectionBase.includes(name),
|
|
205
|
+
);
|
|
206
|
+
const owned = (name) =>
|
|
207
|
+
name === "tool_search" ||
|
|
208
|
+
name?.startsWith("mcp__") ||
|
|
209
|
+
["mcp", "mcp-resource", "tool-search"].includes(
|
|
210
|
+
options.externalToolExecutors?.[name]?.kind,
|
|
211
|
+
);
|
|
212
|
+
const other = (map) =>
|
|
213
|
+
Object.fromEntries(
|
|
214
|
+
Object.entries(map || {}).filter(([name]) => !owned(name)),
|
|
215
|
+
);
|
|
216
|
+
return {
|
|
217
|
+
...options,
|
|
218
|
+
extraToolDefinitions: [
|
|
219
|
+
...(options.extraToolDefinitions || []).filter(
|
|
220
|
+
(def) => !owned(def?.function?.name),
|
|
221
|
+
),
|
|
222
|
+
...snapshot.extraToolDefinitions,
|
|
223
|
+
],
|
|
224
|
+
externalToolDescriptors: {
|
|
225
|
+
...other(options.externalToolDescriptors),
|
|
226
|
+
...snapshot.externalToolDescriptors,
|
|
227
|
+
},
|
|
228
|
+
externalToolExecutors: {
|
|
229
|
+
...other(options.externalToolExecutors),
|
|
230
|
+
...snapshot.externalToolExecutors,
|
|
231
|
+
},
|
|
232
|
+
...(mayExtendSelection
|
|
233
|
+
? {
|
|
234
|
+
enabledToolNames: [
|
|
235
|
+
...new Set([
|
|
236
|
+
...options.enabledToolNames,
|
|
237
|
+
...snapshot.extraToolDefinitions.map((def) => def.function.name),
|
|
238
|
+
]),
|
|
239
|
+
],
|
|
240
|
+
}
|
|
241
|
+
: {}),
|
|
242
|
+
mcpClient: snapshot.mcpClient,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
@@ -277,6 +277,9 @@ export function resolveModelCapabilityProfile({
|
|
|
277
277
|
runtimeVerified: false,
|
|
278
278
|
...output,
|
|
279
279
|
advertisedMaxOutputTokens: documented?.advertisedMaxOutputTokens ?? null,
|
|
280
|
+
...(documented?.advertisedMaxInputTokens != null
|
|
281
|
+
? { advertisedMaxInputTokens: documented.advertisedMaxInputTokens }
|
|
282
|
+
: {}),
|
|
280
283
|
...(documented?.adaptiveThinkingDefault
|
|
281
284
|
? {
|
|
282
285
|
adaptiveThinkingDefault: true,
|
|
@@ -286,6 +289,9 @@ export function resolveModelCapabilityProfile({
|
|
|
286
289
|
...(documented?.reasoningEfforts
|
|
287
290
|
? { reasoningEfforts: [...documented.reasoningEfforts] }
|
|
288
291
|
: {}),
|
|
292
|
+
...(documented?.defaultReasoningEffort
|
|
293
|
+
? { defaultReasoningEffort: documented.defaultReasoningEffort }
|
|
294
|
+
: {}),
|
|
289
295
|
sources: documented ? [...documented.sources] : [],
|
|
290
296
|
limitations,
|
|
291
297
|
};
|
|
@@ -65,7 +65,9 @@ export function reviewModelCatalog(review, snapshots = {}) {
|
|
|
65
65
|
"runtimeProtocol",
|
|
66
66
|
"contextWindowTokens",
|
|
67
67
|
"advertisedMaxOutputTokens",
|
|
68
|
+
"advertisedMaxInputTokens",
|
|
68
69
|
"reviewedAt",
|
|
70
|
+
"defaultReasoningEffort",
|
|
69
71
|
]) {
|
|
70
72
|
if (
|
|
71
73
|
Object.hasOwn(expected, field) &&
|
|
@@ -110,6 +112,7 @@ export function reviewModelCatalog(review, snapshots = {}) {
|
|
|
110
112
|
"cacheReadMultiplier",
|
|
111
113
|
"cacheWriteMultiplier",
|
|
112
114
|
"cacheWrite1hMultiplier",
|
|
115
|
+
"cacheWrite12hMultiplier",
|
|
113
116
|
"longContext",
|
|
114
117
|
"serviceMultipliers",
|
|
115
118
|
]) {
|
|
@@ -45,7 +45,7 @@ export const CONTEXT_WINDOWS = Object.freeze({
|
|
|
45
45
|
}),
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
export const MODEL_CAPABILITY_CATALOG_VERSION = "2026-10-
|
|
48
|
+
export const MODEL_CAPABILITY_CATALOG_VERSION = "2026-10-29";
|
|
49
49
|
|
|
50
50
|
// Explicit ownership prevents a model name served by an unrelated provider
|
|
51
51
|
// from silently inheriting another provider's catalog window.
|
|
@@ -82,9 +82,50 @@ export const LEGACY_MODEL_PROVIDERS = Object.freeze({
|
|
|
82
82
|
"doubao-seed-2-1-pro-260628": "volcengine",
|
|
83
83
|
});
|
|
84
84
|
|
|
85
|
-
// Official pages reviewed on
|
|
85
|
+
// Official pages reviewed on each entry's review date. These describe the
|
|
86
86
|
// named models, not endpoint access, account entitlement, or a live CLI run.
|
|
87
87
|
export const DOCUMENTED_OPENAI_MODELS = Object.freeze({
|
|
88
|
+
"gpt-6.1-terra": Object.freeze({
|
|
89
|
+
reviewedAt: "2026-10-29",
|
|
90
|
+
serviceTiers: Object.freeze([
|
|
91
|
+
"standard",
|
|
92
|
+
"default",
|
|
93
|
+
"auto",
|
|
94
|
+
"fast",
|
|
95
|
+
"priority",
|
|
96
|
+
"flex",
|
|
97
|
+
]),
|
|
98
|
+
serviceMultipliers: Object.freeze({
|
|
99
|
+
standard: 1,
|
|
100
|
+
default: 1,
|
|
101
|
+
auto: 1,
|
|
102
|
+
batch: 0.5,
|
|
103
|
+
flex: 0.5,
|
|
104
|
+
fast: 2,
|
|
105
|
+
priority: 2,
|
|
106
|
+
}),
|
|
107
|
+
contextWindowTokens: 1050000,
|
|
108
|
+
advertisedMaxInputTokens: 922000,
|
|
109
|
+
advertisedMaxOutputTokens: 128000,
|
|
110
|
+
requiresResponsesForTools: true,
|
|
111
|
+
reasoningEfforts: Object.freeze([
|
|
112
|
+
"none",
|
|
113
|
+
"low",
|
|
114
|
+
"medium",
|
|
115
|
+
"high",
|
|
116
|
+
"xhigh",
|
|
117
|
+
"max",
|
|
118
|
+
]),
|
|
119
|
+
defaultReasoningEffort: "medium",
|
|
120
|
+
pricing: Object.freeze({ in: 1, out: 5 }),
|
|
121
|
+
cacheReadMultiplier: 0.05,
|
|
122
|
+
sources: Object.freeze([
|
|
123
|
+
"https://developers.openai.com/api/docs/models/gpt-6.1-terra",
|
|
124
|
+
"https://developers.openai.com/api/docs/guides/latest-model",
|
|
125
|
+
"https://developers.openai.com/api/docs/pricing",
|
|
126
|
+
"https://developers.openai.com/api/docs/guides/prompt-caching",
|
|
127
|
+
]),
|
|
128
|
+
}),
|
|
88
129
|
"gpt-6.1-sol": Object.freeze({
|
|
89
130
|
reviewedAt: "2026-10-15",
|
|
90
131
|
serviceTiers: Object.freeze([
|
|
@@ -235,6 +276,7 @@ export const DOCUMENTED_ANTHROPIC_MODELS = Object.freeze({
|
|
|
235
276
|
export const GPT6_PRICING_TERMS = Object.freeze({
|
|
236
277
|
cacheReadMultiplier: 0.1,
|
|
237
278
|
cacheWriteMultiplier: 1.25,
|
|
279
|
+
cacheWrite12hMultiplier: 2.5,
|
|
238
280
|
longContext: Object.freeze({
|
|
239
281
|
threshold: 272000,
|
|
240
282
|
inputMultiplier: 2,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveModelServiceTier } from "./model-capabilities.js";
|
|
2
|
+
import { projectEnvelopePricingContext } from "./usage-pricing-context.js";
|
|
2
3
|
|
|
3
4
|
const RESPONSES_FAILURE_CODE = "CC_OPENAI_RESPONSES_FAILED";
|
|
4
5
|
const MAX_REASONING_ITEMS = 16;
|
|
@@ -212,7 +213,13 @@ export function createOpenAIResponsesReasoning(
|
|
|
212
213
|
modelProfile = null,
|
|
213
214
|
) {
|
|
214
215
|
const want = options.thinking;
|
|
215
|
-
|
|
216
|
+
const disabled = want === false || want === "off" || want === "none";
|
|
217
|
+
if (disabled) {
|
|
218
|
+
return modelProfile?.reasoningEfforts?.includes("none")
|
|
219
|
+
? { effort: "none" }
|
|
220
|
+
: null;
|
|
221
|
+
}
|
|
222
|
+
if (!want && options.thinkingEffort == null) return null;
|
|
216
223
|
const requested =
|
|
217
224
|
typeof options.thinkingEffort === "string"
|
|
218
225
|
? options.thinkingEffort.toLowerCase()
|
|
@@ -233,7 +240,7 @@ export function createOpenAIResponsesReasoning(
|
|
|
233
240
|
`Unsupported reasoning effort for ${modelProfile.model}; allowed: ${modelProfile.reasoningEfforts.join(", ")}`,
|
|
234
241
|
);
|
|
235
242
|
}
|
|
236
|
-
return { effort, summary: "auto" };
|
|
243
|
+
return effort === "none" ? { effort } : { effort, summary: "auto" };
|
|
237
244
|
}
|
|
238
245
|
|
|
239
246
|
export function normalizeOpenAIResponsesUsage(usage) {
|
|
@@ -244,6 +251,8 @@ export function normalizeOpenAIResponsesUsage(usage) {
|
|
|
244
251
|
const details = usage.input_tokens_details;
|
|
245
252
|
const outputDetails = usage.output_tokens_details;
|
|
246
253
|
let cached = 0;
|
|
254
|
+
let written = 0;
|
|
255
|
+
let cacheWriteContext = {};
|
|
247
256
|
let reasoning = null;
|
|
248
257
|
if (details != null) {
|
|
249
258
|
if (typeof details !== "object" || Array.isArray(details)) return null;
|
|
@@ -251,6 +260,24 @@ export function normalizeOpenAIResponsesUsage(usage) {
|
|
|
251
260
|
cached = nonNegativeInteger(details.cached_tokens);
|
|
252
261
|
if (cached === null || cached > input) return null;
|
|
253
262
|
}
|
|
263
|
+
if (Object.hasOwn(details, "cache_write_tokens")) {
|
|
264
|
+
written = nonNegativeInteger(details.cache_write_tokens);
|
|
265
|
+
if (written === null || written > input - cached) return null;
|
|
266
|
+
}
|
|
267
|
+
if (written > 0 || Object.hasOwn(details, "cache_write_tokens_details")) {
|
|
268
|
+
const split = details.cache_write_tokens_details;
|
|
269
|
+
const thirty = nonNegativeInteger(split?.ttl_30m_tokens);
|
|
270
|
+
const twelve = nonNegativeInteger(split?.ttl_12h_tokens);
|
|
271
|
+
cacheWriteContext =
|
|
272
|
+
split &&
|
|
273
|
+
!Array.isArray(split) &&
|
|
274
|
+
thirty !== null &&
|
|
275
|
+
twelve !== null &&
|
|
276
|
+
Object.hasOwn(details, "cache_write_tokens") &&
|
|
277
|
+
thirty + twelve === written
|
|
278
|
+
? { cacheCreation30mTokens: thirty, cacheCreation12hTokens: twelve }
|
|
279
|
+
: { cacheCreationInvalid: true };
|
|
280
|
+
}
|
|
254
281
|
}
|
|
255
282
|
if (outputDetails != null) {
|
|
256
283
|
if (typeof outputDetails !== "object" || Array.isArray(outputDetails)) {
|
|
@@ -265,9 +292,13 @@ export function normalizeOpenAIResponsesUsage(usage) {
|
|
|
265
292
|
}
|
|
266
293
|
}
|
|
267
294
|
return {
|
|
268
|
-
input_tokens: input - cached,
|
|
295
|
+
input_tokens: input - cached - written,
|
|
269
296
|
output_tokens: output,
|
|
270
297
|
cache_read_input_tokens: cached,
|
|
298
|
+
...(Object.hasOwn(details || {}, "cache_write_tokens") ||
|
|
299
|
+
Object.keys(cacheWriteContext).length
|
|
300
|
+
? { cache_creation_input_tokens: written, ...cacheWriteContext }
|
|
301
|
+
: {}),
|
|
271
302
|
...(reasoning !== null ? { reasoning_tokens: reasoning } : {}),
|
|
272
303
|
};
|
|
273
304
|
}
|
|
@@ -350,9 +381,7 @@ export function normalizeOpenAIResponsesResponse(data) {
|
|
|
350
381
|
if (usage)
|
|
351
382
|
result.usage = {
|
|
352
383
|
...usage,
|
|
353
|
-
...(
|
|
354
|
-
? { service_tier: data.service_tier }
|
|
355
|
-
: {}),
|
|
384
|
+
...projectEnvelopePricingContext(usage, data),
|
|
356
385
|
};
|
|
357
386
|
return result;
|
|
358
387
|
}
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
resolveAgentToolSelection,
|
|
15
15
|
} from "./agent-execution-policy.js";
|
|
16
16
|
import { CLIContextEngineering } from "./cli-context-engineering.js";
|
|
17
|
+
import { markCompactionHostBase } from "./compaction-host-provenance.js";
|
|
17
18
|
import {
|
|
18
19
|
agentLoop,
|
|
19
20
|
buildSystemPrompt,
|
|
@@ -23,6 +24,7 @@ import { feature } from "./feature-flags.js";
|
|
|
23
24
|
import { isEvolutionIngressFailure } from "./model-failure-policy.js";
|
|
24
25
|
import { isFormalBudgetError } from "./formal-budget-errors.js";
|
|
25
26
|
import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
|
|
27
|
+
import { captureMcpToolCatalog } from "./mcp-tool-catalog-authority.js";
|
|
26
28
|
import {
|
|
27
29
|
createWorktree,
|
|
28
30
|
removeWorktree,
|
|
@@ -359,6 +361,7 @@ export class SubAgentContext {
|
|
|
359
361
|
? options.externalToolExecutors
|
|
360
362
|
: {};
|
|
361
363
|
this._mcpClient = options.mcpClient || null;
|
|
364
|
+
this._mcpToolCatalog = captureMcpToolCatalog(options.mcpToolCatalog);
|
|
362
365
|
this._mcpHostClient = options.mcpHostClient || this._mcpClient;
|
|
363
366
|
this._mcpCallLedger = options.mcpCallLedger || null;
|
|
364
367
|
this._mcpConflictScheduler = options.mcpConflictScheduler || null;
|
|
@@ -404,10 +407,12 @@ export class SubAgentContext {
|
|
|
404
407
|
? `\n\n## Parent Context\n${this.inheritedContext}`
|
|
405
408
|
: "";
|
|
406
409
|
|
|
407
|
-
this.messages.push(
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
410
|
+
this.messages.push(
|
|
411
|
+
markCompactionHostBase({
|
|
412
|
+
role: "system",
|
|
413
|
+
content: basePrompt + profilePrompt + rolePrompt + contextSection,
|
|
414
|
+
}),
|
|
415
|
+
);
|
|
411
416
|
}
|
|
412
417
|
|
|
413
418
|
/**
|
|
@@ -881,6 +886,9 @@ export class SubAgentContext {
|
|
|
881
886
|
if (this._mcpClient) {
|
|
882
887
|
options.mcpClient = this._mcpClient;
|
|
883
888
|
}
|
|
889
|
+
if (this._mcpToolCatalog) {
|
|
890
|
+
options.mcpToolCatalog = this._mcpToolCatalog;
|
|
891
|
+
}
|
|
884
892
|
if (this._mcpHostClient) {
|
|
885
893
|
options.mcpHostClient = this._mcpHostClient;
|
|
886
894
|
}
|
|
@@ -17,6 +17,61 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @module subagent-inheritance
|
|
19
19
|
*/
|
|
20
|
+
import {
|
|
21
|
+
projectMcpToolCatalog,
|
|
22
|
+
restrictMcpToolCatalog,
|
|
23
|
+
} from "./mcp-tool-catalog-authority.js";
|
|
24
|
+
|
|
25
|
+
/** Keep a child's directory live without broadening its captured contract. */
|
|
26
|
+
export function createInheritedMcpToolCatalog(
|
|
27
|
+
parent,
|
|
28
|
+
allow,
|
|
29
|
+
requestedTools,
|
|
30
|
+
effectiveTools,
|
|
31
|
+
) {
|
|
32
|
+
const servers = Array.isArray(allow) ? Object.freeze([...allow]) : null;
|
|
33
|
+
const names = Array.isArray(requestedTools)
|
|
34
|
+
? Object.freeze([...requestedTools])
|
|
35
|
+
: null;
|
|
36
|
+
const staticParentNames =
|
|
37
|
+
parent.mcpCatalogBinding?.authority !== parent.mcpToolCatalog &&
|
|
38
|
+
Array.isArray(parent.effectiveAllowedToolNames)
|
|
39
|
+
? Object.freeze([...parent.effectiveAllowedToolNames])
|
|
40
|
+
: null;
|
|
41
|
+
return projectMcpToolCatalog(
|
|
42
|
+
parent.mcpToolCatalog,
|
|
43
|
+
(snapshot, previous) => {
|
|
44
|
+
let inherited = filterInheritedMcp(snapshot, servers) || {
|
|
45
|
+
extraToolDefinitions: [],
|
|
46
|
+
externalToolDescriptors: {},
|
|
47
|
+
externalToolExecutors: {},
|
|
48
|
+
};
|
|
49
|
+
if (names) inherited = restrictMcpToolCatalog(inherited, names);
|
|
50
|
+
if (staticParentNames)
|
|
51
|
+
inherited = restrictMcpToolCatalog(inherited, staticParentNames);
|
|
52
|
+
if (previous) {
|
|
53
|
+
const registries = new Set(
|
|
54
|
+
Object.values(inherited.externalToolExecutors)
|
|
55
|
+
.map((executor) => executor.registry)
|
|
56
|
+
.filter(Boolean),
|
|
57
|
+
);
|
|
58
|
+
for (const registry of registries) registry.loaded.clear();
|
|
59
|
+
for (const [name, executor] of Object.entries(
|
|
60
|
+
inherited.externalToolExecutors,
|
|
61
|
+
)) {
|
|
62
|
+
if (
|
|
63
|
+
executor.registry &&
|
|
64
|
+
previous.identities.get(name) === snapshot.identities.get(name) &&
|
|
65
|
+
previous.externalToolExecutors[name]?.registry?.loaded.has(name)
|
|
66
|
+
)
|
|
67
|
+
executor.registry.loaded.add(name);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return inherited;
|
|
71
|
+
},
|
|
72
|
+
{ extendSelection: names === null, selectionBase: effectiveTools },
|
|
73
|
+
);
|
|
74
|
+
}
|
|
20
75
|
|
|
21
76
|
/** Extract the server segment from an `mcp__<server>__<tool>` wire name. */
|
|
22
77
|
export function mcpServerOf(name) {
|
|
@@ -27,6 +82,102 @@ export function mcpServerOf(name) {
|
|
|
27
82
|
return idx === -1 ? rest || null : rest.slice(0, idx) || null;
|
|
28
83
|
}
|
|
29
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Discovery state belongs to one loop. Keep the inherited snapshot bounded to
|
|
87
|
+
* its tools, while observing revocation of the source entries. Sharing the
|
|
88
|
+
* parent's registry would expose excluded schemas and let one child's search
|
|
89
|
+
* change the provider projection of its parent and siblings.
|
|
90
|
+
*/
|
|
91
|
+
function forkDiscoveryRegistries(parent, definitions, descriptors, executors) {
|
|
92
|
+
const registries = new Map();
|
|
93
|
+
const definitionsByName = new Map(
|
|
94
|
+
definitions.map((definition) => [definition?.function?.name, definition]),
|
|
95
|
+
);
|
|
96
|
+
for (const [name, sourceExecutor] of Object.entries(executors)) {
|
|
97
|
+
const source = sourceExecutor?.registry;
|
|
98
|
+
if (sourceExecutor?.deferred !== true || !(source?.deferred instanceof Map))
|
|
99
|
+
continue;
|
|
100
|
+
let registry = registries.get(source);
|
|
101
|
+
if (!registry) {
|
|
102
|
+
registry = {
|
|
103
|
+
catalogMode: source.catalogMode,
|
|
104
|
+
maxResults: source.maxResults,
|
|
105
|
+
compactSearchDefinition: source.compactSearchDefinition
|
|
106
|
+
? structuredClone(source.compactSearchDefinition)
|
|
107
|
+
: undefined,
|
|
108
|
+
deferred: new Map(),
|
|
109
|
+
loaded: new Set(),
|
|
110
|
+
instructionsByServer: Object.create(null),
|
|
111
|
+
};
|
|
112
|
+
registries.set(source, registry);
|
|
113
|
+
}
|
|
114
|
+
const executor = { ...sourceExecutor, registry };
|
|
115
|
+
executors[name] = executor;
|
|
116
|
+
const entry = source.deferred.get(name);
|
|
117
|
+
// A missing/mismatched entry remains unavailable through the ordinary
|
|
118
|
+
// deferred-call gate; never reconstruct a schema from a stale stub.
|
|
119
|
+
if (
|
|
120
|
+
!entry ||
|
|
121
|
+
!definitionsByName.has(name) ||
|
|
122
|
+
entry.executor !== sourceExecutor ||
|
|
123
|
+
entry.serverName !== sourceExecutor.serverName ||
|
|
124
|
+
entry.toolName !== sourceExecutor.toolName
|
|
125
|
+
)
|
|
126
|
+
continue;
|
|
127
|
+
const sourceDescriptor = parent.externalToolDescriptors?.[name];
|
|
128
|
+
const inherited = {
|
|
129
|
+
definition: structuredClone(entry.definition),
|
|
130
|
+
stub: structuredClone(entry.stub),
|
|
131
|
+
executor,
|
|
132
|
+
serverName: entry.serverName,
|
|
133
|
+
toolName: entry.toolName,
|
|
134
|
+
get stale() {
|
|
135
|
+
return (
|
|
136
|
+
entry.stale === true ||
|
|
137
|
+
source.deferred.get(name) !== entry ||
|
|
138
|
+
parent.externalToolExecutors?.[name] !== sourceExecutor ||
|
|
139
|
+
parent.externalToolDescriptors?.[name] !== sourceDescriptor ||
|
|
140
|
+
sourceExecutor.inheritable === false ||
|
|
141
|
+
sourceDescriptor?.inheritable === false
|
|
142
|
+
);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
registry.deferred.set(name, inherited);
|
|
146
|
+
if (source.loaded?.has(name) && !inherited.stale) registry.loaded.add(name);
|
|
147
|
+
if (definitionsByName.get(name) === entry.stub)
|
|
148
|
+
definitionsByName.set(name, inherited.stub);
|
|
149
|
+
if (Object.hasOwn(source.instructionsByServer || {}, entry.serverName)) {
|
|
150
|
+
registry.instructionsByServer[entry.serverName] =
|
|
151
|
+
source.instructionsByServer[entry.serverName];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const searchName = "tool_search";
|
|
156
|
+
const search = parent?.externalToolExecutors?.[searchName];
|
|
157
|
+
const searchDescriptor = parent?.externalToolDescriptors?.[searchName];
|
|
158
|
+
const searchDefinition = Array.isArray(parent?.extraToolDefinitions)
|
|
159
|
+
? parent.extraToolDefinitions.find(
|
|
160
|
+
(definition) => definition?.function?.name === searchName,
|
|
161
|
+
)
|
|
162
|
+
: null;
|
|
163
|
+
const registry = registries.get(search?.registry);
|
|
164
|
+
// Search is a directory helper, not a server capability of its own. Restore
|
|
165
|
+
// it only for an inherited deferred directory and only if the parent grants
|
|
166
|
+
// inheritance of the helper itself. Execution still checks the tool ceiling.
|
|
167
|
+
if (
|
|
168
|
+
search?.kind === "tool-search" &&
|
|
169
|
+
search.inheritable !== false &&
|
|
170
|
+
searchDescriptor?.inheritable !== false &&
|
|
171
|
+
searchDefinition &&
|
|
172
|
+
registry?.deferred.size > 0
|
|
173
|
+
) {
|
|
174
|
+
definitionsByName.set(searchName, structuredClone(searchDefinition));
|
|
175
|
+
executors[searchName] = { ...search, registry };
|
|
176
|
+
if (searchDescriptor) descriptors[searchName] = { ...searchDescriptor };
|
|
177
|
+
}
|
|
178
|
+
return [...definitionsByName.values()];
|
|
179
|
+
}
|
|
180
|
+
|
|
30
181
|
/**
|
|
31
182
|
* Filter the parent's MCP plumbing to the servers the child may use.
|
|
32
183
|
*
|
|
@@ -57,21 +208,30 @@ export function filterInheritedMcp(parent, allow) {
|
|
|
57
208
|
const inheritable = (name) =>
|
|
58
209
|
descs[name]?.inheritable !== false && execs[name]?.inheritable !== false;
|
|
59
210
|
|
|
60
|
-
|
|
211
|
+
let outDefs = defs.filter((d) => {
|
|
61
212
|
const name = d?.function?.name;
|
|
62
|
-
return
|
|
213
|
+
return (
|
|
214
|
+
name &&
|
|
215
|
+
name !== "tool_search" &&
|
|
216
|
+
inheritable(name) &&
|
|
217
|
+
serverAllowed(mcpServerOf(name))
|
|
218
|
+
);
|
|
63
219
|
});
|
|
64
220
|
const outDescs = {};
|
|
65
221
|
for (const [name, desc] of Object.entries(descs)) {
|
|
222
|
+
if (name === "tool_search") continue;
|
|
66
223
|
const server = desc?.serverName || mcpServerOf(name);
|
|
67
224
|
if (inheritable(name) && serverAllowed(server)) outDescs[name] = desc;
|
|
68
225
|
}
|
|
69
226
|
const outExecs = {};
|
|
70
227
|
for (const [name, exec] of Object.entries(execs)) {
|
|
228
|
+
if (name === "tool_search") continue;
|
|
71
229
|
const server = exec?.serverName || mcpServerOf(name);
|
|
72
230
|
if (inheritable(name) && serverAllowed(server)) outExecs[name] = exec;
|
|
73
231
|
}
|
|
74
232
|
|
|
233
|
+
outDefs = forkDiscoveryRegistries(parent, outDefs, outDescs, outExecs);
|
|
234
|
+
|
|
75
235
|
if (
|
|
76
236
|
outDefs.length === 0 &&
|
|
77
237
|
Object.keys(outDescs).length === 0 &&
|