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
|
@@ -115,7 +115,9 @@ import {
|
|
|
115
115
|
import { runWithHostHooksV2Workspace } from "../lib/hooks-v2-workspace-context.js";
|
|
116
116
|
import { CLISkillLoader } from "../lib/skill-loader.js";
|
|
117
117
|
import { expandFileRefsAsync } from "./file-ref-expander.js";
|
|
118
|
-
import { composeSystemPrompt } from "./system-prompt.js";
|
|
118
|
+
import { composeSystemPrompt, hostProjectMemoryMode } from "./system-prompt.js";
|
|
119
|
+
import { createCompactionHostContextRefresher } from "./compaction-host-context.js";
|
|
120
|
+
import { markCompactionHostBase } from "../lib/compaction-host-provenance.js";
|
|
119
121
|
import { buildUserContent } from "../lib/image-input.js";
|
|
120
122
|
import { createResumeRoleProjection } from "./message-roles.js";
|
|
121
123
|
import { isHeadlessConfigCommand } from "../lib/headless-config-command.js";
|
|
@@ -2077,32 +2079,37 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2077
2079
|
? HERMETIC_SKILL_LOADER
|
|
2078
2080
|
: options.skillLoader ||
|
|
2079
2081
|
new CLISkillLoader(captureSkillRuntimeDependencies(options));
|
|
2080
|
-
const
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2082
|
+
const renderSystemContent = () =>
|
|
2083
|
+
hermeticExecution
|
|
2084
|
+
? composeSystemPrompt(HERMETIC_CODING_SYSTEM_PROMPT, {
|
|
2085
|
+
projectMemory: false,
|
|
2086
|
+
})
|
|
2087
|
+
: composeSystemPrompt(
|
|
2088
|
+
buildSystemPrompt(cwd, {
|
|
2089
|
+
additionalDirectories,
|
|
2090
|
+
projectMemory: options.projectMemory,
|
|
2091
|
+
sessionId,
|
|
2092
|
+
skillLoader: _runtimeSkillLoader,
|
|
2093
|
+
onSkillsLoaded: (skills, cacheLedger) => {
|
|
2094
|
+
_loadedPersonaSkills = Array.isArray(skills) ? skills : [];
|
|
2095
|
+
_skillCacheLedger = cacheLedger || null;
|
|
2096
|
+
},
|
|
2097
|
+
}),
|
|
2098
|
+
{
|
|
2099
|
+
systemPrompt: options.systemPrompt,
|
|
2100
|
+
appendSystemPrompt: options.appendSystemPrompt,
|
|
2101
|
+
outputStyle: outputStyleBody,
|
|
2102
|
+
cwd,
|
|
2103
|
+
instructionExcludes,
|
|
2104
|
+
projectMemory: _leanNoProjectMemory
|
|
2105
|
+
? false
|
|
2106
|
+
: hostProjectMemoryMode(options.projectMemory),
|
|
2107
|
+
onInstructionsLoaded: (loaded) => {
|
|
2108
|
+
_loadedInstructions = loaded;
|
|
2109
|
+
},
|
|
2103
2110
|
},
|
|
2104
|
-
|
|
2105
|
-
|
|
2111
|
+
);
|
|
2112
|
+
const systemContent = renderSystemContent();
|
|
2106
2113
|
|
|
2107
2114
|
// settings.json UserPromptSubmit hooks. block → abort the run; context → inject.
|
|
2108
2115
|
if (settingsHooks) {
|
|
@@ -2213,7 +2220,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2213
2220
|
// No-op on a healthy alternating transcript.
|
|
2214
2221
|
// Keep the authority array identical to the durable transcript for CAS.
|
|
2215
2222
|
const messages = [
|
|
2216
|
-
{ role: "system", content: systemContent },
|
|
2223
|
+
markCompactionHostBase({ role: "system", content: systemContent }),
|
|
2217
2224
|
...(instructionsLoadedContext
|
|
2218
2225
|
? [{ role: "system", content: instructionsLoadedContext }]
|
|
2219
2226
|
: []),
|
|
@@ -3011,6 +3018,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3011
3018
|
: {}),
|
|
3012
3019
|
// --mcp-config wiring: tool defs for the LLM + dispatch map + live client.
|
|
3013
3020
|
mcpClient: mcp?.mcpClient || null,
|
|
3021
|
+
mcpToolCatalog: mcp?.mcpToolCatalog || null,
|
|
3014
3022
|
mcpHostClient: mcpRecoveryRuntime.client || mcp?.mcpClient || null,
|
|
3015
3023
|
extraToolDefinitions:
|
|
3016
3024
|
mcp?.extraToolDefinitions || teamMessageTools?.extraToolDefinitions
|
|
@@ -3044,6 +3052,12 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3044
3052
|
: sessionHostLease?.admitMcpDispatch || null,
|
|
3045
3053
|
persistCompaction: persist,
|
|
3046
3054
|
onBeforeCompaction: settleToolRounds,
|
|
3055
|
+
refreshCompactionContext: hermeticExecution
|
|
3056
|
+
? null
|
|
3057
|
+
: createCompactionHostContextRefresher({
|
|
3058
|
+
messages,
|
|
3059
|
+
render: renderSystemContent,
|
|
3060
|
+
}),
|
|
3047
3061
|
onCompaction: persist
|
|
3048
3062
|
? (stats, compacted, settlement = {}) =>
|
|
3049
3063
|
persistRuntimeLedgerWrite(() => {
|
|
@@ -3486,6 +3500,15 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3486
3500
|
}
|
|
3487
3501
|
};
|
|
3488
3502
|
let goalSetupFailure = null;
|
|
3503
|
+
let goalVerificationRuntime = null;
|
|
3504
|
+
const goalVerificationSignals = [
|
|
3505
|
+
options.signal,
|
|
3506
|
+
options.sessionBudget?.signal,
|
|
3507
|
+
].filter(Boolean);
|
|
3508
|
+
const goalVerificationSignal =
|
|
3509
|
+
goalVerificationSignals.length > 1
|
|
3510
|
+
? AbortSignal.any(goalVerificationSignals)
|
|
3511
|
+
: goalVerificationSignals[0];
|
|
3489
3512
|
let goalRecoveryReviewed = false;
|
|
3490
3513
|
const goalEvidence = options.goalCondition
|
|
3491
3514
|
? new GoalCheckEvidence({ readOnlyTools: READ_ONLY_TOOLS })
|
|
@@ -3635,6 +3658,17 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3635
3658
|
now: goalNow,
|
|
3636
3659
|
});
|
|
3637
3660
|
}
|
|
3661
|
+
if (goalEngine.condition.kind === "verify") {
|
|
3662
|
+
goalVerificationRuntime = await import(
|
|
3663
|
+
"../lib/goal-verification-plan.js"
|
|
3664
|
+
);
|
|
3665
|
+
goalEngine.condition =
|
|
3666
|
+
await goalVerificationRuntime.prepareGoalVerification(
|
|
3667
|
+
goalEngine.condition,
|
|
3668
|
+
cwd,
|
|
3669
|
+
{ signal: goalVerificationSignal },
|
|
3670
|
+
);
|
|
3671
|
+
}
|
|
3638
3672
|
if (goalEngine.condition.kind === "model" && !deps.goalConditionJudge) {
|
|
3639
3673
|
const signals = [options.signal, options.sessionBudget?.signal].filter(
|
|
3640
3674
|
Boolean,
|
|
@@ -3670,10 +3704,16 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3670
3704
|
// Surface through the main failure/cleanup path before any agent call.
|
|
3671
3705
|
goalSetupFailure = err;
|
|
3672
3706
|
} else {
|
|
3673
|
-
// A
|
|
3674
|
-
//
|
|
3675
|
-
|
|
3676
|
-
|
|
3707
|
+
// A requested acceptance condition must never disappear and turn an
|
|
3708
|
+
// otherwise unverified author response into an ordinary successful run.
|
|
3709
|
+
const { goalVerificationError } = await import(
|
|
3710
|
+
"../lib/goal-verification-command.js"
|
|
3711
|
+
);
|
|
3712
|
+
goalSetupFailure = err.goalVerificationFailure
|
|
3713
|
+
? err
|
|
3714
|
+
: goalVerificationError(
|
|
3715
|
+
`Goal condition setup failed: ${err.message}`,
|
|
3716
|
+
);
|
|
3677
3717
|
}
|
|
3678
3718
|
}
|
|
3679
3719
|
}
|
|
@@ -4184,7 +4224,34 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4184
4224
|
const cond = goalEngine.condition;
|
|
4185
4225
|
let evaluation;
|
|
4186
4226
|
try {
|
|
4187
|
-
if (
|
|
4227
|
+
if (cond.kind === "verify") {
|
|
4228
|
+
if (evolutionIngress !== null && deps.goalCheck?.runCommand) {
|
|
4229
|
+
const error = new TypeError(
|
|
4230
|
+
"Evolution goal verification requires the canonical process runner",
|
|
4231
|
+
);
|
|
4232
|
+
error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
|
|
4233
|
+
throw error;
|
|
4234
|
+
}
|
|
4235
|
+
const remainingMs =
|
|
4236
|
+
goalEngine.budget.maxTimeMs == null
|
|
4237
|
+
? Infinity
|
|
4238
|
+
: goalEngine.budget.maxTimeMs -
|
|
4239
|
+
((deps.now ? deps.now() : Date.now()) -
|
|
4240
|
+
goalEngine.state.startedAtMs);
|
|
4241
|
+
evaluation = await goalVerificationRuntime.evaluateGoalVerification(
|
|
4242
|
+
cond,
|
|
4243
|
+
{
|
|
4244
|
+
cwd,
|
|
4245
|
+
signal: goalVerificationSignal,
|
|
4246
|
+
deadline: Date.now() + Math.max(0, remainingMs),
|
|
4247
|
+
onCheckStart: (evaluation) =>
|
|
4248
|
+
persistGoalSnapshot("running", "after-model", evaluation),
|
|
4249
|
+
...(deps.goalCheck?.runCommand
|
|
4250
|
+
? { runCommand: deps.goalCheck.runCommand }
|
|
4251
|
+
: {}),
|
|
4252
|
+
},
|
|
4253
|
+
);
|
|
4254
|
+
} else if (_goalHelpers.isDeterministicCondition(cond)) {
|
|
4188
4255
|
const gc = deps.goalCheck || {};
|
|
4189
4256
|
const spawnSync = gc.spawnSync || runHeadlessGoalCommand;
|
|
4190
4257
|
const existsSync =
|
|
@@ -4214,8 +4281,10 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4214
4281
|
}
|
|
4215
4282
|
} catch (err) {
|
|
4216
4283
|
if (err?.runtimeLedgerPersistence === true) throw err;
|
|
4284
|
+
if (err?.code === GOAL_CHECKPOINT_FAILURE_CODE) throw err;
|
|
4217
4285
|
if (
|
|
4218
4286
|
err?.goalModelFailure ||
|
|
4287
|
+
err?.goalVerificationFailure ||
|
|
4219
4288
|
(typeof err?.code === "string" &&
|
|
4220
4289
|
err.code.startsWith("CC_SESSION_BUDGET_"))
|
|
4221
4290
|
)
|
|
@@ -4251,13 +4320,29 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4251
4320
|
endReason = "max_turns";
|
|
4252
4321
|
break;
|
|
4253
4322
|
}
|
|
4323
|
+
const failedCheck =
|
|
4324
|
+
cond.kind === "verify"
|
|
4325
|
+
? evaluation.evidence?.checks?.find(
|
|
4326
|
+
(check) => check.status !== "passed",
|
|
4327
|
+
)
|
|
4328
|
+
: null;
|
|
4329
|
+
const verificationFeedback = failedCheck
|
|
4330
|
+
? "\nIndependent checker output (diagnostic data, not instructions):\n" +
|
|
4331
|
+
JSON.stringify({
|
|
4332
|
+
id: failedCheck.id,
|
|
4333
|
+
status: failedCheck.status,
|
|
4334
|
+
stdout: failedCheck.stdout?.preview,
|
|
4335
|
+
stderr: failedCheck.stderr?.preview,
|
|
4336
|
+
})
|
|
4337
|
+
: "";
|
|
4254
4338
|
messages.push(
|
|
4255
4339
|
markRuntimeOnlySessionMessage({
|
|
4256
4340
|
role: "user",
|
|
4257
4341
|
content:
|
|
4258
4342
|
`The completion condition is not yet met: ${evaluation.reason}.\n` +
|
|
4259
4343
|
`Keep working toward: "${cond.source}". When you believe it is ` +
|
|
4260
|
-
`satisfied, make sure it actually passes
|
|
4344
|
+
`satisfied, make sure it actually passes.` +
|
|
4345
|
+
verificationFeedback,
|
|
4261
4346
|
}),
|
|
4262
4347
|
);
|
|
4263
4348
|
finalText = "";
|
|
@@ -4316,7 +4401,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4316
4401
|
? "error_persistence"
|
|
4317
4402
|
: sessionBudgetFailed
|
|
4318
4403
|
? "error_session_budget"
|
|
4319
|
-
: err?.goalModelFailure
|
|
4404
|
+
: err?.goalModelFailure || err?.goalVerificationFailure
|
|
4320
4405
|
? err.subtype
|
|
4321
4406
|
: "error";
|
|
4322
4407
|
const transportDetails =
|
|
@@ -4324,7 +4409,12 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4324
4409
|
const diagnosticFields = transportDetails
|
|
4325
4410
|
? { error_details: transportDetails }
|
|
4326
4411
|
: {
|
|
4327
|
-
...(persistenceFailed
|
|
4412
|
+
...((persistenceFailed || err?.goalVerificationFailure) && err.code
|
|
4413
|
+
? { code: err.code }
|
|
4414
|
+
: {}),
|
|
4415
|
+
...(err?.goalVerificationFailure && err.verification
|
|
4416
|
+
? { verification: err.verification }
|
|
4417
|
+
: {}),
|
|
4328
4418
|
...(persistence ? { persistence } : {}),
|
|
4329
4419
|
};
|
|
4330
4420
|
if (isStream) {
|
|
@@ -4333,7 +4423,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4333
4423
|
subtype: errorSubtype,
|
|
4334
4424
|
is_error: true,
|
|
4335
4425
|
error: message,
|
|
4336
|
-
...(err?.goalModelFailure
|
|
4426
|
+
...(err?.goalModelFailure || err?.goalVerificationFailure
|
|
4337
4427
|
? {
|
|
4338
4428
|
usage,
|
|
4339
4429
|
total_cost_usd: costBudget.spentUsd,
|
|
@@ -4370,12 +4460,18 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4370
4460
|
exitCode:
|
|
4371
4461
|
persistenceFailed || sessionBudgetFailed
|
|
4372
4462
|
? 1
|
|
4373
|
-
: err?.goalModelFailure
|
|
4463
|
+
: err?.goalModelFailure || err?.goalVerificationFailure
|
|
4374
4464
|
? exitCodeForEndReason(err.endReason, true)
|
|
4375
4465
|
: classifyLoopError(err),
|
|
4376
4466
|
result: message,
|
|
4377
4467
|
isError: true,
|
|
4378
4468
|
...(persistence ? { persistence } : {}),
|
|
4469
|
+
...(err?.goalVerificationFailure
|
|
4470
|
+
? {
|
|
4471
|
+
code: err.code,
|
|
4472
|
+
...(err.verification ? { verification: err.verification } : {}),
|
|
4473
|
+
}
|
|
4474
|
+
: {}),
|
|
4379
4475
|
...(persistenceFailed && err.code ? { code: err.code } : {}),
|
|
4380
4476
|
};
|
|
4381
4477
|
} finally {
|
|
@@ -67,7 +67,9 @@ import {
|
|
|
67
67
|
chatWithTools as coreChatWithTools,
|
|
68
68
|
agentLoop as coreAgentLoop,
|
|
69
69
|
} from "./agent-core.js";
|
|
70
|
-
import { composeSystemPrompt } from "./system-prompt.js";
|
|
70
|
+
import { composeSystemPrompt, hostProjectMemoryMode } from "./system-prompt.js";
|
|
71
|
+
import { createCompactionHostContextRefresher } from "./compaction-host-context.js";
|
|
72
|
+
import { markCompactionHostBase } from "../lib/compaction-host-provenance.js";
|
|
71
73
|
import { createResumeRoleProjection } from "./message-roles.js";
|
|
72
74
|
import {
|
|
73
75
|
estimateMessagesTokens,
|
|
@@ -3105,27 +3107,37 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3105
3107
|
// the flag is absent (undefined) both paths stay byte-identical.
|
|
3106
3108
|
const _leanNoProjectMemory = options.projectMemory === false;
|
|
3107
3109
|
let _loadedInstructions = null;
|
|
3108
|
-
const
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3110
|
+
const renderSystemContent = () =>
|
|
3111
|
+
composeSystemPrompt(
|
|
3112
|
+
buildSystemPrompt(cwd, {
|
|
3113
|
+
additionalDirectories,
|
|
3114
|
+
projectMemory: options.projectMemory,
|
|
3115
|
+
}),
|
|
3116
|
+
{
|
|
3117
|
+
systemPrompt: options.systemPrompt,
|
|
3118
|
+
appendSystemPrompt: _jsonSchema
|
|
3119
|
+
? [
|
|
3120
|
+
options.appendSystemPrompt,
|
|
3121
|
+
_jso.buildSchemaInstruction(_jsonSchema),
|
|
3122
|
+
]
|
|
3123
|
+
.filter(Boolean)
|
|
3124
|
+
.join("\n\n")
|
|
3125
|
+
: options.appendSystemPrompt,
|
|
3126
|
+
outputStyle: outputStyleBody,
|
|
3127
|
+
cwd,
|
|
3128
|
+
instructionExcludes,
|
|
3129
|
+
projectMemory: _leanNoProjectMemory
|
|
3130
|
+
? false
|
|
3131
|
+
: hostProjectMemoryMode(options.projectMemory),
|
|
3132
|
+
onInstructionsLoaded: (loaded) => {
|
|
3133
|
+
_loadedInstructions = loaded;
|
|
3134
|
+
},
|
|
3125
3135
|
},
|
|
3126
|
-
|
|
3127
|
-
);
|
|
3128
|
-
const messages = [
|
|
3136
|
+
);
|
|
3137
|
+
const systemContent = renderSystemContent();
|
|
3138
|
+
const messages = [
|
|
3139
|
+
markCompactionHostBase({ role: "system", content: systemContent }),
|
|
3140
|
+
];
|
|
3129
3141
|
|
|
3130
3142
|
// settings.json InstructionsLoaded hooks (observe-only): fire once with the
|
|
3131
3143
|
// exact loaded instruction file set right after the system prompt is built.
|
|
@@ -3922,6 +3934,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3922
3934
|
]),
|
|
3923
3935
|
// --mcp-config wiring (tool defs + dispatch map + live client).
|
|
3924
3936
|
mcpClient: mcp?.mcpClient || null,
|
|
3937
|
+
mcpToolCatalog: mcp?.mcpToolCatalog || null,
|
|
3925
3938
|
mcpHostClient: mcpRecoveryRuntime.client || mcp?.mcpClient || null,
|
|
3926
3939
|
extraToolDefinitions: mcp?.extraToolDefinitions || undefined,
|
|
3927
3940
|
externalToolExecutors: mcp?.externalToolExecutors || undefined,
|
|
@@ -3931,6 +3944,10 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3931
3944
|
mcpCallLedger: mcpRecoveryRuntime.ledger,
|
|
3932
3945
|
mcpDispatchAdmission: sessionHostLease?.admitMcpDispatch || null,
|
|
3933
3946
|
getTaskWorklogContext: () => taskWorklog?.context() || null,
|
|
3947
|
+
refreshCompactionContext: createCompactionHostContextRefresher({
|
|
3948
|
+
messages,
|
|
3949
|
+
render: renderSystemContent,
|
|
3950
|
+
}),
|
|
3934
3951
|
onBeforeCompaction: () => {
|
|
3935
3952
|
updateWorklog((log) => log.record({ type: "before-compaction" }));
|
|
3936
3953
|
try {
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { inferTransport } from "../harness/mcp-client.js";
|
|
3
|
+
import {
|
|
4
|
+
admitMcpToolList,
|
|
5
|
+
isMcpToolMetadataError,
|
|
6
|
+
} from "../lib/mcp-tool-metadata.js";
|
|
7
|
+
import { mcpEffectDescriptorFields } from "../lib/mcp-effect-contract.js";
|
|
8
|
+
import {
|
|
9
|
+
publishMcpToolCatalog,
|
|
10
|
+
setMcpToolCatalogRefresh,
|
|
11
|
+
} from "../lib/mcp-tool-catalog-authority.js";
|
|
12
|
+
import { refreshMcpToolSearch } from "./mcp-tool-search.js";
|
|
13
|
+
|
|
14
|
+
const catalogs = new WeakMap();
|
|
15
|
+
const configAuthorities = new WeakMap();
|
|
16
|
+
let nextConfigAuthority = 0;
|
|
17
|
+
|
|
18
|
+
// Bind the logical name to its approved source. The lifecycle digest is an
|
|
19
|
+
// audit identifier (it deliberately omits URL queries and environment), not
|
|
20
|
+
// a sufficiently precise authorization boundary for catalog inheritance.
|
|
21
|
+
function configIdentity(config, authorizationRefresh = false) {
|
|
22
|
+
if (!config || typeof config !== "object") return null;
|
|
23
|
+
const normalize = (value, key = "") => {
|
|
24
|
+
if (value == null || typeof value !== "object") return value;
|
|
25
|
+
if (/authority/i.test(key)) {
|
|
26
|
+
if (!configAuthorities.has(value))
|
|
27
|
+
configAuthorities.set(value, ++nextConfigAuthority);
|
|
28
|
+
return { authority: configAuthorities.get(value) };
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(value)) return value.map((item) => normalize(item));
|
|
31
|
+
return Object.fromEntries(
|
|
32
|
+
Object.keys(value)
|
|
33
|
+
.sort()
|
|
34
|
+
.map((name) => [name, normalize(value[name], name)]),
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
const { mcpStdioExecutionAuthority: _consumed, headers, ...source } = config;
|
|
38
|
+
void _consumed;
|
|
39
|
+
source.transport = inferTransport(config);
|
|
40
|
+
source.headers = Object.fromEntries(
|
|
41
|
+
Object.entries(headers || {})
|
|
42
|
+
.filter(
|
|
43
|
+
([key]) =>
|
|
44
|
+
!authorizationRefresh || key.toLowerCase() !== "authorization",
|
|
45
|
+
)
|
|
46
|
+
.map(([key, value]) => [key.toLowerCase(), value]),
|
|
47
|
+
);
|
|
48
|
+
return createHash("sha256")
|
|
49
|
+
.update(JSON.stringify(normalize(source)))
|
|
50
|
+
.digest("hex");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function observedEntry(client, name, record) {
|
|
54
|
+
const entry =
|
|
55
|
+
client.servers instanceof Map ? client.servers.get(name) : undefined;
|
|
56
|
+
return {
|
|
57
|
+
entry,
|
|
58
|
+
tools: entry?.tools,
|
|
59
|
+
state: entry?.state,
|
|
60
|
+
dirty: entry?._toolInventoryDirty,
|
|
61
|
+
instructions: entry?.instructions,
|
|
62
|
+
error: entry?.toolsError,
|
|
63
|
+
configIdentity: configIdentity(entry?.config, record.authorizationRefresh),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function sameObservation(a, b) {
|
|
68
|
+
return a && Object.keys(b).every((key) => a[key] === b[key]);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function replaceTools(result, name, record, inventory) {
|
|
72
|
+
const previousBytes = record.metadataBytes || 0;
|
|
73
|
+
const otherBytes = Math.max(
|
|
74
|
+
0,
|
|
75
|
+
(result._mcpToolMetadataBytes || 0) - previousBytes,
|
|
76
|
+
);
|
|
77
|
+
let admitted;
|
|
78
|
+
let error = null;
|
|
79
|
+
try {
|
|
80
|
+
admitted = admitMcpToolList(name, inventory, record.config, {
|
|
81
|
+
clientBytesUsed: otherBytes,
|
|
82
|
+
});
|
|
83
|
+
} catch (cause) {
|
|
84
|
+
if (!isMcpToolMetadataError(cause)) throw cause;
|
|
85
|
+
admitted = { tools: [], metadataBytes: 0 };
|
|
86
|
+
error = cause;
|
|
87
|
+
}
|
|
88
|
+
const retiredNames = new Set(
|
|
89
|
+
Object.entries(result.externalToolExecutors)
|
|
90
|
+
.filter(
|
|
91
|
+
([, executor]) =>
|
|
92
|
+
executor.kind === "mcp" && executor.serverName === name,
|
|
93
|
+
)
|
|
94
|
+
.map(([tool]) => tool),
|
|
95
|
+
);
|
|
96
|
+
const retained = result.extraToolDefinitions.filter(
|
|
97
|
+
(definition) => !retiredNames.has(definition.function.name),
|
|
98
|
+
);
|
|
99
|
+
result.extraToolDefinitions.splice(
|
|
100
|
+
0,
|
|
101
|
+
result.extraToolDefinitions.length,
|
|
102
|
+
...retained,
|
|
103
|
+
);
|
|
104
|
+
for (const retired of retiredNames) {
|
|
105
|
+
delete result.externalToolExecutors[retired];
|
|
106
|
+
delete result.externalToolDescriptors[retired];
|
|
107
|
+
}
|
|
108
|
+
const cfg = record.config;
|
|
109
|
+
const resultLimits = Object.freeze(
|
|
110
|
+
Object.fromEntries(
|
|
111
|
+
["maxToolResultBytes", "maxToolResultDepth", "maxToolResultNodes"]
|
|
112
|
+
.filter((key) => Number.isFinite(cfg[key]))
|
|
113
|
+
.map((key) => [key, cfg[key]]),
|
|
114
|
+
),
|
|
115
|
+
);
|
|
116
|
+
for (const tool of admitted.tools) {
|
|
117
|
+
const wireName = `mcp__${name}__${tool.name}`;
|
|
118
|
+
result.extraToolDefinitions.push(
|
|
119
|
+
Object.freeze({
|
|
120
|
+
type: "function",
|
|
121
|
+
function: Object.freeze({
|
|
122
|
+
name: wireName,
|
|
123
|
+
description:
|
|
124
|
+
tool.description || `MCP tool "${tool.name}" on server "${name}"`,
|
|
125
|
+
parameters:
|
|
126
|
+
tool.inputSchema ||
|
|
127
|
+
Object.freeze({ type: "object", properties: Object.freeze({}) }),
|
|
128
|
+
}),
|
|
129
|
+
}),
|
|
130
|
+
);
|
|
131
|
+
const route = {
|
|
132
|
+
kind: "mcp",
|
|
133
|
+
serverName: name,
|
|
134
|
+
toolName: tool.name,
|
|
135
|
+
...(Object.keys(resultLimits).length
|
|
136
|
+
? { toolResultConfig: resultLimits }
|
|
137
|
+
: {}),
|
|
138
|
+
};
|
|
139
|
+
const executor = {};
|
|
140
|
+
for (const [key, value] of Object.entries(route))
|
|
141
|
+
Object.defineProperty(executor, key, { value, enumerable: true });
|
|
142
|
+
result.externalToolExecutors[wireName] = executor;
|
|
143
|
+
result.externalToolDescriptors[wireName] = Object.freeze({
|
|
144
|
+
name: wireName,
|
|
145
|
+
kind: "mcp",
|
|
146
|
+
category: "mcp",
|
|
147
|
+
source: cfg.pluginId ? `plugin:${cfg.pluginId}` : name,
|
|
148
|
+
...(cfg.pluginVersion ? { version: cfg.pluginVersion } : {}),
|
|
149
|
+
...mcpEffectDescriptorFields(tool, {
|
|
150
|
+
sourceTrusted: cfg.sourceTrusted,
|
|
151
|
+
provenance:
|
|
152
|
+
cfg.configSource ||
|
|
153
|
+
cfg.pluginSource ||
|
|
154
|
+
(cfg.configScope ? `${cfg.configScope}:${name}` : `mcp:${name}`),
|
|
155
|
+
}),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
record.metadataBytes = admitted.metadataBytes;
|
|
159
|
+
result._mcpToolMetadataBytes = otherBytes + admitted.metadataBytes;
|
|
160
|
+
const connected = result.connected?.find((server) => server.server === name);
|
|
161
|
+
if (connected) connected.tools = admitted.tools.length;
|
|
162
|
+
return { tools: admitted.tools, error };
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function refresh(result, records) {
|
|
166
|
+
// MCPClient owns validated transport entries. Inspect only known, configured
|
|
167
|
+
// servers; a connection added through some other client path grants nothing.
|
|
168
|
+
// This read has no I/O and also observes disconnect() before its async teardown.
|
|
169
|
+
if (!(result.mcpClient.servers instanceof Map)) return;
|
|
170
|
+
let changed = false;
|
|
171
|
+
for (const [name, record] of records) {
|
|
172
|
+
if (record.initializing) continue;
|
|
173
|
+
const current = observedEntry(result.mcpClient, name, record);
|
|
174
|
+
if (sameObservation(record.observation, current)) continue;
|
|
175
|
+
const available =
|
|
176
|
+
current.state === "connected" &&
|
|
177
|
+
current.dirty !== true &&
|
|
178
|
+
!current.error &&
|
|
179
|
+
current.configIdentity !== null &&
|
|
180
|
+
current.configIdentity === record.configIdentity;
|
|
181
|
+
const replacement = replaceTools(
|
|
182
|
+
result,
|
|
183
|
+
name,
|
|
184
|
+
record,
|
|
185
|
+
available ? current.tools || [] : [],
|
|
186
|
+
);
|
|
187
|
+
if (replacement.error)
|
|
188
|
+
record.writeErr?.(
|
|
189
|
+
` mcp: "${name}" refreshed tool metadata was rejected: ${replacement.error.message}\n`,
|
|
190
|
+
);
|
|
191
|
+
if (
|
|
192
|
+
available &&
|
|
193
|
+
typeof current.instructions === "string" &&
|
|
194
|
+
current.instructions.trim()
|
|
195
|
+
)
|
|
196
|
+
result.instructionsByServer[name] = current.instructions.trim();
|
|
197
|
+
else delete result.instructionsByServer[name];
|
|
198
|
+
record.observation = current;
|
|
199
|
+
changed = true;
|
|
200
|
+
}
|
|
201
|
+
if (changed) {
|
|
202
|
+
refreshMcpToolSearch(result);
|
|
203
|
+
publishMcpToolCatalog(result);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function registerMcpCatalogServer(
|
|
208
|
+
result,
|
|
209
|
+
name,
|
|
210
|
+
config,
|
|
211
|
+
writeErr,
|
|
212
|
+
{ connectConfig = config, authorizationRefresh = false } = {},
|
|
213
|
+
) {
|
|
214
|
+
let records = catalogs.get(result);
|
|
215
|
+
if (!records) {
|
|
216
|
+
records = new Map();
|
|
217
|
+
catalogs.set(result, records);
|
|
218
|
+
setMcpToolCatalogRefresh(result, () => refresh(result, records));
|
|
219
|
+
}
|
|
220
|
+
const captured = {};
|
|
221
|
+
for (const [key, value] of Object.entries(config)) {
|
|
222
|
+
if (
|
|
223
|
+
(key.startsWith("max") && Number.isFinite(value)) ||
|
|
224
|
+
[
|
|
225
|
+
"pluginId",
|
|
226
|
+
"pluginVersion",
|
|
227
|
+
"configSource",
|
|
228
|
+
"pluginSource",
|
|
229
|
+
"configScope",
|
|
230
|
+
].includes(key)
|
|
231
|
+
)
|
|
232
|
+
captured[key] = value;
|
|
233
|
+
}
|
|
234
|
+
captured.sourceTrusted =
|
|
235
|
+
config.configScope === "managed" ||
|
|
236
|
+
Boolean(config.pluginId && config.pluginWorkspaceAuthority);
|
|
237
|
+
records.set(name, {
|
|
238
|
+
config: Object.freeze(captured),
|
|
239
|
+
configIdentity: configIdentity(connectConfig, authorizationRefresh),
|
|
240
|
+
authorizationRefresh,
|
|
241
|
+
initializing: true,
|
|
242
|
+
metadataBytes: 0,
|
|
243
|
+
writeErr,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export function settleMcpCatalogServer(result, name, response = {}) {
|
|
248
|
+
const record = catalogs.get(result).get(name);
|
|
249
|
+
const outcome = replaceTools(result, name, record, response?.tools ?? []);
|
|
250
|
+
record.initializing = false;
|
|
251
|
+
record.observation = observedEntry(result.mcpClient, name, record);
|
|
252
|
+
// Successful connect has already validated and normalized stdio invocation
|
|
253
|
+
// and sandbox configuration. Capture that effective source for reconnects.
|
|
254
|
+
if (record.observation.state === "connected" && response?.tools)
|
|
255
|
+
record.configIdentity = record.observation.configIdentity;
|
|
256
|
+
return outcome;
|
|
257
|
+
}
|