chainlesschain 0.166.129 → 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 +24 -2
- 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-_zlP_Z6z.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-nMgYkH8H.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-i0owJaGP.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-DDXrvvm-.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-CaRUAOY_.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-fFkycCT4.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-ASRgSh_Y.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-DgGU_D0o.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-C_kELmV6.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-DE-ZxAv_.js → colors-DcTBrGvS.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BowulLDi.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-Be7mK-iw.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-nLHTuHoT.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-DMKo49Um.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-DjC2TJeH.js → index-Brc0BF-k.js} +2 -2
- package/src/assets/web-panel/assets/{index-3Ql7xQLn.js → index-CG9YLDmI.js} +1 -1
- package/src/assets/web-panel/assets/{index-lN916819.js → index-CNHWMMDX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLCzaLH4.js → index-COuEJdmr.js} +3 -3
- package/src/assets/web-panel/assets/{index-BdzVLz-c.js → index-CRW3AWdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-_cYsz4df.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-OH54KMLN.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-DEDVYN7D.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-Ao-LXr-d.js → index-Vo7A4aiN.js} +4 -4
- package/src/assets/web-panel/assets/{index-LVrxqU88.js → index-XdlYkgCa.js} +1 -1
- package/src/assets/web-panel/assets/{index-4KkYmFy5.js → index-ir2ZwWz5.js} +2 -2
- package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
- package/src/assets/web-panel/assets/{index-Cvy4vdVW.js → index-lnTt0Jps.js} +2 -2
- package/src/assets/web-panel/assets/{index-D3lOYd9_.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-CXvy8HrM.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-BNhziAal.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-rFx211Cl.js → move-A_28O5T2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CEP1wN3R.js → mtc-parser-0zlMjabo.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DacHd_Zm.js → omit-DF7mU3yG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Dqp58Ep2.js → pickAttrs-Cmt8liJP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Cv6Rm0pV.js → placementArrow-DaMDC57b.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-rNE0p9ZW.js → responsiveObserve-CHw_f2d3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C97JxD4S.js → slide-DJS9fFQq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cxk1gV9M.js → statusUtils-Bk3XdZwh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CbtKKsPo.js → styleChecker-DMybAFsA.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
- package/src/assets/web-panel/assets/{useFs-6c7qrpE_.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-OjxtBGe7.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-Cc1qKiSZ.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/constants.js +1 -1
- package/src/data/changelog.json +27 -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-assess.js +4 -1
- package/src/lib/goal-check-evidence.js +77 -9
- package/src/lib/goal-condition-engine.js +20 -3
- package/src/lib/goal-model-call.js +107 -0
- package/src/lib/goal-verification-command.js +221 -0
- package/src/lib/goal-verification-plan.js +372 -0
- package/src/lib/goal-workspace-evidence.js +299 -0
- package/src/lib/llm-connection-probe.js +12 -5
- package/src/lib/llm-onboarding-catalog.json +2 -2
- package/src/lib/llm-pricing.js +34 -8
- package/src/lib/llm-providers.js +1 -0
- 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/task-model-selector.js +1 -1
- package/src/lib/usage-pricing-context.js +34 -17
- package/src/repl/agent-repl.js +34 -2
- package/src/runtime/agent-core.js +226 -10
- package/src/runtime/compaction-host-context.js +72 -0
- package/src/runtime/headless-runner.js +331 -141
- 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-CjPaaF2r.js +0 -1
- package/src/assets/web-panel/assets/Analytics-C7X31L8l.js +0 -3
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-BmYa34Se.js +0 -9
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-B_YKNjlp.js +0 -1
- package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
- package/src/assets/web-panel/assets/Audit-5JsI67XQ.js +0 -1
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-BL3QbzvS.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
- package/src/assets/web-panel/assets/Backup-BRmg-gTa.js +0 -1
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-DNE7mT3K.js +0 -1
- package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
- package/src/assets/web-panel/assets/Chat-OYwAopdM.js +0 -8
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Dtxw3Wgt.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
- package/src/assets/web-panel/assets/Codegen-B9G2ngLI.js +0 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
- package/src/assets/web-panel/assets/Community-B3Ta0mI_.js +0 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
- package/src/assets/web-panel/assets/Compliance-Bn4Uq6U1.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-CO5NKD6r.js +0 -6
- package/src/assets/web-panel/assets/Cron-ByjNese0.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-BN1FUYyi.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
- package/src/assets/web-panel/assets/DID-CUFX5RL3.js +0 -2
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-D_2FDPBP.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-lGOMtIzb.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DA3Qf1S2.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-DLcnicCr.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-BPOSaIN1.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
- package/src/assets/web-panel/assets/Federation-DzJUCQq8.js +0 -1
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
- package/src/assets/web-panel/assets/FormItemContext-DVx1XNKx.js +0 -2
- package/src/assets/web-panel/assets/GenericCardRenderer-BkqzO_lh.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
- package/src/assets/web-panel/assets/Git-Dr_rdT_j.js +0 -2
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
- package/src/assets/web-panel/assets/Governance-DyVkZddw.js +0 -1
- package/src/assets/web-panel/assets/Inference-IN2YDd4v.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-Ceiy4n6N.js +0 -1
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
- package/src/assets/web-panel/assets/Logs-d7pIEAX2.js +0 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DmSl0MNI.js +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-uVE7U14g.js +0 -1
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
- package/src/assets/web-panel/assets/McpTools-DUfBM--y.js +0 -4
- package/src/assets/web-panel/assets/Memory-6gkcR02J.js +0 -2
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
- package/src/assets/web-panel/assets/MobileBridge-Cl6ys2O9.js +0 -1
- package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-5P8jN4gf.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-DtiT1Kol.js +0 -6
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
- package/src/assets/web-panel/assets/MtcAudit-DZz8iiTE.js +0 -19
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
- package/src/assets/web-panel/assets/Multisig-DFH3-fBJ.js +0 -13
- package/src/assets/web-panel/assets/NLProgramming-BYNuDOt-.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
- package/src/assets/web-panel/assets/Notes-BCY4jgYy.js +0 -7
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-Bk2ltghU.js +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-OdeXEGAn.js +0 -1
- package/src/assets/web-panel/assets/Organization-CY4_mSiV.js +0 -4
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
- package/src/assets/web-panel/assets/P2P-Bd96rBWQ.js +0 -2
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-JjnExxan.js +0 -7
- package/src/assets/web-panel/assets/Permissions-CW1PUJB0.js +0 -4
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-BNn9alTk.js +0 -9
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-01_PBiUu.js +0 -1
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
- package/src/assets/web-panel/assets/Privacy-BP4DlVGb.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-CAMnQj4n.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
- package/src/assets/web-panel/assets/ProjectSettings-DKxV5On_.js +0 -2
- package/src/assets/web-panel/assets/Projects-B_4kRnM8.js +0 -1
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
- package/src/assets/web-panel/assets/Providers-DeqqZyUv.js +0 -1
- package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-Ln6qQidy.js +0 -1
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
- package/src/assets/web-panel/assets/Recommend-DeENA-y0.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-CRxSYxo4.js +0 -5
- package/src/assets/web-panel/assets/Reputation-B2kU2F0l.js +0 -1
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
- package/src/assets/web-panel/assets/Row-lV_nLlFq.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
- package/src/assets/web-panel/assets/RssFeed-Df21mCdF.js +0 -3
- package/src/assets/web-panel/assets/Search-8_Dz4qU9.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-Cl5-PEcp.js +0 -4
- package/src/assets/web-panel/assets/Services-C5qgCqA7.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-DWx01ZJ7.js +0 -1
- package/src/assets/web-panel/assets/Sla-I2gbgtW8.js +0 -1
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BqTikzfe.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-D3zCpBFV.js +0 -2
- package/src/assets/web-panel/assets/Tasks-DjMWII45.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-Cq7qDnHX.js +0 -1
- package/src/assets/web-panel/assets/Tenant-DEasKDpQ.js +0 -1
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
- package/src/assets/web-panel/assets/Terminal-J6fLkTzi.js +0 -3
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-CNvWrWN-.js +0 -1
- package/src/assets/web-panel/assets/Tokens-BSgHJCKH.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
- package/src/assets/web-panel/assets/Trust-BANlv-uB.js +0 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
- package/src/assets/web-panel/assets/UkeySign-qh8GPRsU.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-DBiGTB4H.js +0 -1
- package/src/assets/web-panel/assets/Wallet-DMUFR7cL.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-DP9nQQzW.js +0 -5
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-DT_6jDkL.js +0 -1
- package/src/assets/web-panel/assets/createContext-DCh8oMBQ.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BVvJAp91.js +0 -1
- package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
- package/src/assets/web-panel/assets/index-6OluUVJJ.js +0 -55
- package/src/assets/web-panel/assets/index-B-3EDOlf.js +0 -1
- package/src/assets/web-panel/assets/index-B7IhCfsh.js +0 -1
- package/src/assets/web-panel/assets/index-BDIIR8g6.js +0 -1
- package/src/assets/web-panel/assets/index-BMrbe_Ey.js +0 -1
- package/src/assets/web-panel/assets/index-BlzMqaWB.js +0 -1
- package/src/assets/web-panel/assets/index-BwY31W-u.js +0 -12
- package/src/assets/web-panel/assets/index-C2pCquZC.js +0 -1
- package/src/assets/web-panel/assets/index-CKmC6ugN.js +0 -1
- package/src/assets/web-panel/assets/index-CL2hAUWh.js +0 -1
- package/src/assets/web-panel/assets/index-CUXfwAhF.js +0 -3
- package/src/assets/web-panel/assets/index-C_VnSUjh.js +0 -3
- package/src/assets/web-panel/assets/index-CecGCLWI.js +0 -31
- package/src/assets/web-panel/assets/index-Ck6MYKVN.js +0 -21
- package/src/assets/web-panel/assets/index-CwJfLNqv.js +0 -1
- package/src/assets/web-panel/assets/index-DMDaGPxG.js +0 -19
- package/src/assets/web-panel/assets/index-DN1AT3FH.js +0 -1
- package/src/assets/web-panel/assets/index-DOebEvgn.js +0 -1
- package/src/assets/web-panel/assets/index-DPX3N4T8.js +0 -13
- package/src/assets/web-panel/assets/index-DSRKtgJg.js +0 -1
- package/src/assets/web-panel/assets/index-DSqZBvQM.js +0 -12
- package/src/assets/web-panel/assets/index-DbrQO1p9.js +0 -21
- package/src/assets/web-panel/assets/index-Qx8cTReg.js +0 -75
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
- package/src/assets/web-panel/assets/motion-fUkbJz38.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-CQATs2JQ.js +0 -1
- package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
- package/src/assets/web-panel/assets/vnode-CSlXfUSh.js +0 -1
|
@@ -50,6 +50,25 @@ export function projectCacheCreationUsage(usage = {}) {
|
|
|
50
50
|
const hasFlat =
|
|
51
51
|
Object.hasOwn(usage, "cacheCreation5mTokens") ||
|
|
52
52
|
Object.hasOwn(usage, "cacheCreation1hTokens");
|
|
53
|
+
const hasOpenAI =
|
|
54
|
+
Object.hasOwn(usage, "cacheCreation30mTokens") ||
|
|
55
|
+
Object.hasOwn(usage, "cacheCreation12hTokens");
|
|
56
|
+
if (hasOpenAI) {
|
|
57
|
+
const thirty = usage.cacheCreation30mTokens;
|
|
58
|
+
const twelve = usage.cacheCreation12hTokens;
|
|
59
|
+
const total =
|
|
60
|
+
usage.cache_creation_input_tokens ?? usage.cacheCreationTokens;
|
|
61
|
+
if (
|
|
62
|
+
hasFlat ||
|
|
63
|
+
Object.hasOwn(usage, "cache_creation") ||
|
|
64
|
+
![thirty, twelve, total].every(
|
|
65
|
+
(n) => Number.isSafeInteger(n) && n >= 0,
|
|
66
|
+
) ||
|
|
67
|
+
thirty + twelve !== total
|
|
68
|
+
)
|
|
69
|
+
return { cacheCreationInvalid: true };
|
|
70
|
+
return { cacheCreation30mTokens: thirty, cacheCreation12hTokens: twelve };
|
|
71
|
+
}
|
|
53
72
|
if (!Object.hasOwn(usage, "cache_creation") && !hasFlat) return {};
|
|
54
73
|
if (
|
|
55
74
|
Object.hasOwn(usage, "cache_creation") &&
|
|
@@ -150,9 +169,17 @@ export function mergeUsagePricingBucket(entry, usage) {
|
|
|
150
169
|
const cache = projectCacheCreationUsage(usage);
|
|
151
170
|
const cacheEvidence = cache.cacheCreationInvalid
|
|
152
171
|
? "invalid"
|
|
153
|
-
: cache.
|
|
154
|
-
? "split"
|
|
155
|
-
:
|
|
172
|
+
: cache.cacheCreation30mTokens != null
|
|
173
|
+
? "openai-split"
|
|
174
|
+
: cache.cacheCreation5mTokens != null
|
|
175
|
+
? "split"
|
|
176
|
+
: "missing";
|
|
177
|
+
const cacheFields =
|
|
178
|
+
cacheEvidence === "openai-split"
|
|
179
|
+
? ["cacheCreation30mTokens", "cacheCreation12hTokens"]
|
|
180
|
+
: cacheEvidence === "split"
|
|
181
|
+
? ["cacheCreation5mTokens", "cacheCreation1hTokens"]
|
|
182
|
+
: [];
|
|
156
183
|
const serviceTier = metadata.service_tier || "standard";
|
|
157
184
|
const regionalProcessing = metadata.regional_processing === true;
|
|
158
185
|
entry.pricingBuckets ||= [];
|
|
@@ -176,17 +203,9 @@ export function mergeUsagePricingBucket(entry, usage) {
|
|
|
176
203
|
regionalProcessing,
|
|
177
204
|
requestInputTokens: promptTokens,
|
|
178
205
|
...(pricingContextInvalid ? { pricingContextInvalid: true } : {}),
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
...(cacheEvidence === "split"
|
|
183
|
-
? { cacheCreation5mTokens: 0, cacheCreation1hTokens: 0 }
|
|
184
|
-
: {}),
|
|
185
|
-
...(cacheEvidence === "invalid"
|
|
186
|
-
? { cacheCreationInvalid: true }
|
|
187
|
-
: {}),
|
|
188
|
-
}
|
|
189
|
-
: {}),
|
|
206
|
+
cacheEvidence,
|
|
207
|
+
...Object.fromEntries(cacheFields.map((key) => [key, 0])),
|
|
208
|
+
...(cacheEvidence === "invalid" ? { cacheCreationInvalid: true } : {}),
|
|
190
209
|
};
|
|
191
210
|
entry.pricingBuckets.push(bucket);
|
|
192
211
|
}
|
|
@@ -197,9 +216,7 @@ export function mergeUsagePricingBucket(entry, usage) {
|
|
|
197
216
|
"cacheCreationTokens",
|
|
198
217
|
"totalTokens",
|
|
199
218
|
"calls",
|
|
200
|
-
...
|
|
201
|
-
? ["cacheCreation5mTokens", "cacheCreation1hTokens"]
|
|
202
|
-
: []),
|
|
219
|
+
...cacheFields,
|
|
203
220
|
]) {
|
|
204
221
|
const value = cache[key] ?? usage[key] ?? (key === "calls" ? 1 : 0);
|
|
205
222
|
if (
|
package/src/repl/agent-repl.js
CHANGED
|
@@ -167,7 +167,14 @@ import {
|
|
|
167
167
|
import { formatBackgroundTasks } from "./tasks-status.js";
|
|
168
168
|
import { expandFileRefsAsync } from "../runtime/file-ref-expander.js";
|
|
169
169
|
import { prepareVisionTurn, resolveVisionLlm } from "../lib/image-input.js";
|
|
170
|
-
import {
|
|
170
|
+
import {
|
|
171
|
+
composeSystemPrompt,
|
|
172
|
+
hostProjectMemoryMode,
|
|
173
|
+
} from "../runtime/system-prompt.js";
|
|
174
|
+
import {
|
|
175
|
+
createCompactionHostContextRefresher,
|
|
176
|
+
refreshCompactionHostContext,
|
|
177
|
+
} from "../runtime/compaction-host-context.js";
|
|
171
178
|
import { installPipeSafety } from "../runtime/pipe-safety.js";
|
|
172
179
|
import { installOutputBackpressure } from "../runtime/output-backpressure.js";
|
|
173
180
|
import {
|
|
@@ -4212,7 +4219,10 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4212
4219
|
{
|
|
4213
4220
|
systemPrompt: options.systemPrompt,
|
|
4214
4221
|
appendSystemPrompt: options.appendSystemPrompt,
|
|
4215
|
-
|
|
4222
|
+
cwd: process.cwd(),
|
|
4223
|
+
projectMemory: _leanNoProjectMemory
|
|
4224
|
+
? false
|
|
4225
|
+
: hostProjectMemoryMode(options.projectMemory),
|
|
4216
4226
|
onInstructionsLoaded: (loaded) => {
|
|
4217
4227
|
_loadedReplInstructions = loaded;
|
|
4218
4228
|
},
|
|
@@ -4870,6 +4880,18 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4870
4880
|
// any canonical/legacy replay is appended. Later live switches refresh only
|
|
4871
4881
|
// entry 0 from the active base prompt; they never re-scan old session systems.
|
|
4872
4882
|
_registerHostSystemMessages();
|
|
4883
|
+
const _projectContextRefresher = createCompactionHostContextRefresher({
|
|
4884
|
+
messages,
|
|
4885
|
+
render: () => {
|
|
4886
|
+
_replBaseSystem = _buildReplBaseSystem();
|
|
4887
|
+
return _activeOutputStyle?.body
|
|
4888
|
+
? `${_replBaseSystem}\n\n${_activeOutputStyle.body}`
|
|
4889
|
+
: _replBaseSystem;
|
|
4890
|
+
},
|
|
4891
|
+
onUpdated: () => _refreshHostSystemMessages(),
|
|
4892
|
+
});
|
|
4893
|
+
const _refreshProjectContext = () =>
|
|
4894
|
+
refreshCompactionHostContext(_projectContextRefresher, messages);
|
|
4873
4895
|
|
|
4874
4896
|
let _startupResumeCommitted = false;
|
|
4875
4897
|
// Load resumed session messages
|
|
@@ -7448,6 +7470,13 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
7448
7470
|
return;
|
|
7449
7471
|
}
|
|
7450
7472
|
|
|
7473
|
+
try {
|
|
7474
|
+
_refreshProjectContext();
|
|
7475
|
+
} catch (error) {
|
|
7476
|
+
logger.error(error.message);
|
|
7477
|
+
prompt();
|
|
7478
|
+
return;
|
|
7479
|
+
}
|
|
7451
7480
|
const expectedMessages = [...messages];
|
|
7452
7481
|
if (_compressor && messages.length > 3) {
|
|
7453
7482
|
let result;
|
|
@@ -9817,6 +9846,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
9817
9846
|
}
|
|
9818
9847
|
const activeMcpRuntime = _activateMcpHostRuntime();
|
|
9819
9848
|
const activeRawMcpClient = activeMcpRuntime.rawClient || undefined;
|
|
9849
|
+
_refreshProjectContext();
|
|
9820
9850
|
const {
|
|
9821
9851
|
content: response,
|
|
9822
9852
|
usageEvents,
|
|
@@ -9939,6 +9969,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
9939
9969
|
mcpClient: activeRawMcpClient,
|
|
9940
9970
|
mcpHostClient: activeMcpRuntime.runtime.client,
|
|
9941
9971
|
extraToolDefinitions: _adhocMcp?.extraToolDefinitions,
|
|
9972
|
+
mcpToolCatalog: _adhocMcp?.mcpToolCatalog || null,
|
|
9942
9973
|
externalToolExecutors: _adhocMcp?.externalToolExecutors,
|
|
9943
9974
|
externalToolDescriptors: _adhocMcp?.externalToolDescriptors,
|
|
9944
9975
|
// The recovery controller is required even when this legacy/ephemeral
|
|
@@ -10174,6 +10205,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
10174
10205
|
_compressor.shouldAutoCompact(messages)
|
|
10175
10206
|
) {
|
|
10176
10207
|
try {
|
|
10208
|
+
_refreshProjectContext();
|
|
10177
10209
|
const expectedMessages = [...messages];
|
|
10178
10210
|
const {
|
|
10179
10211
|
messages: compacted,
|
|
@@ -216,6 +216,19 @@ import {
|
|
|
216
216
|
buildToolAttribution,
|
|
217
217
|
} from "../lib/agent-tool-admission.js";
|
|
218
218
|
import { captureAgentExecutionPolicy } from "../lib/agent-execution-policy.js";
|
|
219
|
+
import { ephemeralWorktreeConsumerRefusal } from "../lib/ephemeral-worktree-scope.js";
|
|
220
|
+
import {
|
|
221
|
+
COMPACTION_CONTEXT_REFRESH_ERROR,
|
|
222
|
+
refreshCompactionHostContext,
|
|
223
|
+
} from "./compaction-host-context.js";
|
|
224
|
+
import {
|
|
225
|
+
assertMcpCatalogBinding,
|
|
226
|
+
captureMcpToolCatalog,
|
|
227
|
+
mergeMcpToolCatalog,
|
|
228
|
+
projectMcpToolCatalog,
|
|
229
|
+
readMcpToolCatalog,
|
|
230
|
+
restrictMcpToolCatalog,
|
|
231
|
+
} from "../lib/mcp-tool-catalog-authority.js";
|
|
219
232
|
import {
|
|
220
233
|
evaluateUnattendedToolAction,
|
|
221
234
|
evaluateUnattendedGitAction,
|
|
@@ -4040,6 +4053,8 @@ export async function executeTool(name, args, context = {}) {
|
|
|
4040
4053
|
externalToolDescriptors: context.externalToolDescriptors || null,
|
|
4041
4054
|
externalToolExecutors: context.externalToolExecutors || null,
|
|
4042
4055
|
mcpClient: context.mcpClient || null,
|
|
4056
|
+
mcpToolCatalog: context.mcpToolCatalog || null,
|
|
4057
|
+
mcpCatalogBinding: context.mcpCatalogBinding || null,
|
|
4043
4058
|
mcpHostClient: context.mcpHostClient || context.mcpClient || null,
|
|
4044
4059
|
mcpCallLedger: context.mcpCallLedger || null,
|
|
4045
4060
|
mcpConflictScheduler: context.mcpConflictScheduler || null,
|
|
@@ -5656,6 +5671,8 @@ async function executeToolInner(
|
|
|
5656
5671
|
externalToolExecutors,
|
|
5657
5672
|
extraToolDefinitions = null,
|
|
5658
5673
|
mcpClient,
|
|
5674
|
+
mcpToolCatalog = null,
|
|
5675
|
+
mcpCatalogBinding = null,
|
|
5659
5676
|
mcpHostClient = mcpClient,
|
|
5660
5677
|
mcpCallLedger = null,
|
|
5661
5678
|
mcpConflictScheduler = null,
|
|
@@ -6221,6 +6238,10 @@ async function executeToolInner(
|
|
|
6221
6238
|
// Bound the declared run_shell data once. Approval and dispatch never
|
|
6222
6239
|
// observe later mutation of the caller-owned tool arguments.
|
|
6223
6240
|
args = Object.isFrozen(args) ? args : snapshotShellExecutionArgs(args);
|
|
6241
|
+
if (args.run_in_background === true) {
|
|
6242
|
+
const refusal = ephemeralWorktreeConsumerRefusal("Background shell");
|
|
6243
|
+
if (refusal) return attachDescriptor(refusal);
|
|
6244
|
+
}
|
|
6224
6245
|
if (unattendedActionPolicy?.unattended === true) {
|
|
6225
6246
|
const unattendedVerdict = evaluateUnattendedShellAction(args.command, {
|
|
6226
6247
|
...unattendedActionPolicy,
|
|
@@ -7888,6 +7909,8 @@ async function executeToolInner(
|
|
|
7888
7909
|
// filtered by the resolved contract's mcpServers allow-list.
|
|
7889
7910
|
mcpClient,
|
|
7890
7911
|
mcpHostClient,
|
|
7912
|
+
mcpToolCatalog,
|
|
7913
|
+
mcpCatalogBinding,
|
|
7891
7914
|
mcpCallLedger,
|
|
7892
7915
|
mcpConflictScheduler,
|
|
7893
7916
|
mcpDispatchAdmission,
|
|
@@ -8243,6 +8266,14 @@ async function executeToolInner(
|
|
|
8243
8266
|
}
|
|
8244
8267
|
|
|
8245
8268
|
case "schedule": {
|
|
8269
|
+
if (
|
|
8270
|
+
["wakeup", "cron", "monitor"].includes(
|
|
8271
|
+
String(args.action || "").toLowerCase(),
|
|
8272
|
+
)
|
|
8273
|
+
) {
|
|
8274
|
+
const refusal = ephemeralWorktreeConsumerRefusal("Deferred schedule");
|
|
8275
|
+
if (refusal) return attachDescriptor(refusal);
|
|
8276
|
+
}
|
|
8246
8277
|
try {
|
|
8247
8278
|
const { AgentScheduleStore } = await import(
|
|
8248
8279
|
"../lib/agent-schedule-store.js"
|
|
@@ -8992,6 +9023,16 @@ async function executeToolInner(
|
|
|
8992
9023
|
});
|
|
8993
9024
|
}
|
|
8994
9025
|
|
|
9026
|
+
if (match.isolation === true) {
|
|
9027
|
+
const refusal = ephemeralWorktreeConsumerRefusal(
|
|
9028
|
+
"Isolated skill child",
|
|
9029
|
+
);
|
|
9030
|
+
if (refusal) {
|
|
9031
|
+
skillExecutionLease?.release?.();
|
|
9032
|
+
return attachDescriptor(refusal);
|
|
9033
|
+
}
|
|
9034
|
+
}
|
|
9035
|
+
|
|
8995
9036
|
const selectedSkillDigest =
|
|
8996
9037
|
match.executionIdentity?.contentDigest ||
|
|
8997
9038
|
`sha256:${createHash("sha256").update(admittedSkillBody).digest("hex")}`;
|
|
@@ -9676,6 +9717,11 @@ async function executeToolInner(
|
|
|
9676
9717
|
// MCP tool schemas from the registry attached at setup time. Read-only,
|
|
9677
9718
|
// local — same risk class as list_skills, so no approval gate.
|
|
9678
9719
|
if (localToolExecutor?.kind === "tool-search") {
|
|
9720
|
+
try {
|
|
9721
|
+
assertMcpCatalogBinding(mcpCatalogBinding, name);
|
|
9722
|
+
} catch (error) {
|
|
9723
|
+
return attachDescriptor({ error: error.message, code: error.code });
|
|
9724
|
+
}
|
|
9679
9725
|
return attachDescriptor(
|
|
9680
9726
|
executeToolSearch(localToolExecutor.registry, args || {}, {
|
|
9681
9727
|
allowedToolNames: effectiveAllowedToolNames,
|
|
@@ -9722,6 +9768,11 @@ async function executeToolInner(
|
|
|
9722
9768
|
}
|
|
9723
9769
|
|
|
9724
9770
|
if (localToolExecutor?.kind === "mcp") {
|
|
9771
|
+
try {
|
|
9772
|
+
assertMcpCatalogBinding(mcpCatalogBinding, name);
|
|
9773
|
+
} catch (error) {
|
|
9774
|
+
return attachDescriptor({ error: error.message, code: error.code });
|
|
9775
|
+
}
|
|
9725
9776
|
if (!mcpClient || typeof mcpClient.callTool !== "function") {
|
|
9726
9777
|
return attachDescriptor({
|
|
9727
9778
|
error: `MCP client is unavailable for tool: ${name}`,
|
|
@@ -9757,6 +9808,18 @@ async function executeToolInner(
|
|
|
9757
9808
|
}
|
|
9758
9809
|
|
|
9759
9810
|
const schedulerScopes = mcpLedgerScopes(mcpWireInput);
|
|
9811
|
+
const catalogDispatchAdmission = mcpCatalogBinding
|
|
9812
|
+
? (metadata, dispatch) => {
|
|
9813
|
+
assertMcpCatalogBinding(mcpCatalogBinding, name);
|
|
9814
|
+
const admittedDispatch = () => {
|
|
9815
|
+
assertMcpCatalogBinding(mcpCatalogBinding, name);
|
|
9816
|
+
return dispatch();
|
|
9817
|
+
};
|
|
9818
|
+
return mcpDispatchAdmission
|
|
9819
|
+
? mcpDispatchAdmission(metadata, admittedDispatch)
|
|
9820
|
+
: admittedDispatch();
|
|
9821
|
+
}
|
|
9822
|
+
: mcpDispatchAdmission;
|
|
9760
9823
|
const ledgerEffectContract = mcpLedgerEffectContract(
|
|
9761
9824
|
localToolDescriptor,
|
|
9762
9825
|
hostToolPolicy,
|
|
@@ -9869,16 +9932,17 @@ async function executeToolInner(
|
|
|
9869
9932
|
|
|
9870
9933
|
let pendingResult;
|
|
9871
9934
|
try {
|
|
9935
|
+
assertMcpCatalogBinding(mcpCatalogBinding, name);
|
|
9872
9936
|
const callArguments = [
|
|
9873
9937
|
localToolExecutor.serverName,
|
|
9874
9938
|
localToolExecutor.toolName,
|
|
9875
9939
|
mcpWireInput,
|
|
9876
9940
|
];
|
|
9877
|
-
if (signal ||
|
|
9941
|
+
if (signal || catalogDispatchAdmission || workflowEffectId) {
|
|
9878
9942
|
callArguments.push({
|
|
9879
9943
|
...(signal ? { signal } : {}),
|
|
9880
|
-
...(
|
|
9881
|
-
? { dispatchAdmission:
|
|
9944
|
+
...(catalogDispatchAdmission
|
|
9945
|
+
? { dispatchAdmission: catalogDispatchAdmission }
|
|
9882
9946
|
: {}),
|
|
9883
9947
|
...(workflowEffectId
|
|
9884
9948
|
? {
|
|
@@ -11164,6 +11228,13 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11164
11228
|
};
|
|
11165
11229
|
}
|
|
11166
11230
|
|
|
11231
|
+
const wantsBackground =
|
|
11232
|
+
args.background === true || effectiveContract?.background === true;
|
|
11233
|
+
if (wantsBackground) {
|
|
11234
|
+
const refusal = ephemeralWorktreeConsumerRefusal("Background sub-agent");
|
|
11235
|
+
if (refusal) return refusal;
|
|
11236
|
+
}
|
|
11237
|
+
|
|
11167
11238
|
// Filter the parent loop's live MCP plumbing + settings hooks down to what the
|
|
11168
11239
|
// child may inherit. Default `[]` → null → the spawn passes nothing, so a plain
|
|
11169
11240
|
// sub-agent is byte-identical to before.
|
|
@@ -11262,6 +11333,9 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11262
11333
|
|
|
11263
11334
|
// A child can never regain a tool omitted from the parent's effective schema.
|
|
11264
11335
|
// `[]` remains deny-all all the way into the child's execution-time fence.
|
|
11336
|
+
let requestedMcpTools = Array.isArray(allowedTools)
|
|
11337
|
+
? Object.freeze([...allowedTools])
|
|
11338
|
+
: null;
|
|
11265
11339
|
if (Array.isArray(ctx.effectiveAllowedToolNames)) {
|
|
11266
11340
|
const parentCeiling = new Set(ctx.effectiveAllowedToolNames);
|
|
11267
11341
|
const requested = Array.isArray(allowedTools)
|
|
@@ -11302,6 +11376,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11302
11376
|
const perm = resolvePermissionMode(effectiveContract.permissionMode);
|
|
11303
11377
|
if (perm.readOnly) {
|
|
11304
11378
|
allowedTools = resolveEnabledTools({ allowedTools, readOnly: true });
|
|
11379
|
+
requestedMcpTools = allowedTools;
|
|
11305
11380
|
}
|
|
11306
11381
|
// autopilot ⟺ bypassPermissions — the only mode whose headless confirmer
|
|
11307
11382
|
// ALLOWS. Threading a deny confirmer would needlessly disable the child's
|
|
@@ -11326,6 +11401,29 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11326
11401
|
}
|
|
11327
11402
|
}
|
|
11328
11403
|
|
|
11404
|
+
let childMcpCatalog = null;
|
|
11405
|
+
if (
|
|
11406
|
+
ctx.mcpToolCatalog &&
|
|
11407
|
+
!(Array.isArray(mcpAllow) && mcpAllow.length === 0)
|
|
11408
|
+
) {
|
|
11409
|
+
try {
|
|
11410
|
+
const { createInheritedMcpToolCatalog } = await import(
|
|
11411
|
+
"../lib/subagent-inheritance.js"
|
|
11412
|
+
);
|
|
11413
|
+
childMcpCatalog = createInheritedMcpToolCatalog(
|
|
11414
|
+
ctx,
|
|
11415
|
+
mcpAllow,
|
|
11416
|
+
requestedMcpTools,
|
|
11417
|
+
allowedTools,
|
|
11418
|
+
);
|
|
11419
|
+
inheritedMcp = readMcpToolCatalog(childMcpCatalog);
|
|
11420
|
+
} catch (error) {
|
|
11421
|
+
return {
|
|
11422
|
+
error: `spawn_sub_agent: live MCP inheritance failed closed (${error.message}).`,
|
|
11423
|
+
};
|
|
11424
|
+
}
|
|
11425
|
+
}
|
|
11426
|
+
|
|
11329
11427
|
// Build a structured parent handoff if the caller did not provide explicit
|
|
11330
11428
|
// An explicit `contextMode: fresh` contract suppresses this inheritance (the
|
|
11331
11429
|
// child starts clean); `fork` / unset keep deterministic auto-inheritance.
|
|
@@ -11589,6 +11687,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11589
11687
|
const subCtx = SubAgentContext.create({
|
|
11590
11688
|
role,
|
|
11591
11689
|
task,
|
|
11690
|
+
signal: ctx.signal || null,
|
|
11592
11691
|
parentId: parentSessionId,
|
|
11593
11692
|
// Hook-envelope tracing: the child loop stamps its own runId as trace_id
|
|
11594
11693
|
// and THIS run's id as parent_id on every settings-hook payload it fires.
|
|
@@ -11659,6 +11758,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11659
11758
|
...(inheritedMcp
|
|
11660
11759
|
? {
|
|
11661
11760
|
extraToolDefinitions: inheritedMcp.extraToolDefinitions,
|
|
11761
|
+
mcpToolCatalog: childMcpCatalog,
|
|
11662
11762
|
externalToolDescriptors: inheritedMcp.externalToolDescriptors,
|
|
11663
11763
|
externalToolExecutors: inheritedMcp.externalToolExecutors,
|
|
11664
11764
|
mcpClient: inheritedMcp.mcpClient,
|
|
@@ -11788,8 +11888,6 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
11788
11888
|
// detached without the caller passing it. `effectiveContract.background`
|
|
11789
11889
|
// already folds in `args.background`; the explicit OR keeps the path
|
|
11790
11890
|
// byte-identical if contract resolution was skipped (effectiveContract null).
|
|
11791
|
-
const wantsBackground =
|
|
11792
|
-
args.background === true || effectiveContract?.background === true;
|
|
11793
11891
|
if (wantsBackground && ctx.backgroundSubAgents instanceof Map) {
|
|
11794
11892
|
// Cancel with the parent: forward the loop's abort signal so killing the
|
|
11795
11893
|
// run doesn't orphan a detached child mid-LLM-call.
|
|
@@ -13581,6 +13679,31 @@ const _CHECKPOINT_READ_ONLY = new Set([
|
|
|
13581
13679
|
"search_sessions",
|
|
13582
13680
|
]);
|
|
13583
13681
|
|
|
13682
|
+
function isCheckpointReadOnly(toolContext, toolName, toolArgs) {
|
|
13683
|
+
if (_CHECKPOINT_READ_ONLY.has(toolName)) return true;
|
|
13684
|
+
if (
|
|
13685
|
+
toolName !== "git" ||
|
|
13686
|
+
toolContext.externalToolExecutors?.git ||
|
|
13687
|
+
!isReadOnlyGitCommand(toolArgs?.command)
|
|
13688
|
+
)
|
|
13689
|
+
return false;
|
|
13690
|
+
const command = normalizeGitCommand(toolArgs.command);
|
|
13691
|
+
if (gitToolInputError(command)) return false;
|
|
13692
|
+
// Read commands can explicitly write output or invoke external drivers.
|
|
13693
|
+
// Keep their recovery snapshot, including abbreviated long options.
|
|
13694
|
+
const args = tokenizeShellWords(command).slice(1);
|
|
13695
|
+
const separator = args.indexOf("--");
|
|
13696
|
+
return !(separator < 0 ? args : args.slice(0, separator)).some((arg) => {
|
|
13697
|
+
const option = arg.split("=", 1)[0];
|
|
13698
|
+
return (
|
|
13699
|
+
option.startsWith("--") &&
|
|
13700
|
+
["--output", "--ext-diff", "--textconv"].some((flag) =>
|
|
13701
|
+
flag.startsWith(option),
|
|
13702
|
+
)
|
|
13703
|
+
);
|
|
13704
|
+
});
|
|
13705
|
+
}
|
|
13706
|
+
|
|
13584
13707
|
// Rolling cap on auto-checkpoints per agent session — the engine prunes the
|
|
13585
13708
|
// oldest beyond this so a long run can't accumulate unbounded refs.
|
|
13586
13709
|
const MAX_AUTO_CHECKPOINTS_PER_SESSION = 100;
|
|
@@ -13603,7 +13726,7 @@ function _loadCheckpointStore() {
|
|
|
13603
13726
|
*/
|
|
13604
13727
|
async function _autoCheckpointBeforeTool(toolContext, toolName, toolArgs) {
|
|
13605
13728
|
if (!toolContext?.autoCheckpoint) return null;
|
|
13606
|
-
if (
|
|
13729
|
+
if (isCheckpointReadOnly(toolContext, toolName, toolArgs)) return null;
|
|
13607
13730
|
const cwd = toolContext.cwd || process.cwd();
|
|
13608
13731
|
try {
|
|
13609
13732
|
const store = await _loadCheckpointStore();
|
|
@@ -14690,6 +14813,20 @@ export async function* agentLoop(messages, options) {
|
|
|
14690
14813
|
...options,
|
|
14691
14814
|
...executionPolicy,
|
|
14692
14815
|
};
|
|
14816
|
+
if (options.mcpToolCatalog != null) {
|
|
14817
|
+
captureMcpToolCatalog(options.mcpToolCatalog);
|
|
14818
|
+
// Host publication is the only live extension path. Do not let unrelated
|
|
14819
|
+
// caller-owned startup arrays acquire new authority during a refresh.
|
|
14820
|
+
options.extraToolDefinitions = Object.freeze([
|
|
14821
|
+
...(options.extraToolDefinitions || []),
|
|
14822
|
+
]);
|
|
14823
|
+
options.externalToolDescriptors = Object.freeze({
|
|
14824
|
+
...options.externalToolDescriptors,
|
|
14825
|
+
});
|
|
14826
|
+
options.externalToolExecutors = Object.freeze({
|
|
14827
|
+
...options.externalToolExecutors,
|
|
14828
|
+
});
|
|
14829
|
+
}
|
|
14693
14830
|
const configuredChatFn = options.chatFn;
|
|
14694
14831
|
const evolutionIngress =
|
|
14695
14832
|
options.evolutionIngress == null
|
|
@@ -14832,19 +14969,36 @@ export async function* agentLoop(messages, options) {
|
|
|
14832
14969
|
);
|
|
14833
14970
|
}
|
|
14834
14971
|
|
|
14835
|
-
const
|
|
14972
|
+
const mcpToolCatalog = hermeticExecution
|
|
14973
|
+
? null
|
|
14974
|
+
: captureMcpToolCatalog(options.mcpToolCatalog);
|
|
14975
|
+
const loopMcpCatalog = mcpToolCatalog
|
|
14976
|
+
? projectMcpToolCatalog(mcpToolCatalog, (snapshot) =>
|
|
14977
|
+
restrictMcpToolCatalog(
|
|
14978
|
+
snapshot,
|
|
14979
|
+
getEffectiveToolDefinitions(
|
|
14980
|
+
mergeMcpToolCatalog(options, snapshot, mcpToolCatalog),
|
|
14981
|
+
).map((tool) => tool.function.name),
|
|
14982
|
+
),
|
|
14983
|
+
)
|
|
14984
|
+
: null;
|
|
14985
|
+
let currentMcpSnapshot = readMcpToolCatalog(loopMcpCatalog);
|
|
14986
|
+
let effectiveToolOptions = hermeticExecution
|
|
14836
14987
|
? {
|
|
14837
14988
|
...options,
|
|
14838
14989
|
hostManagedToolPolicy: null,
|
|
14839
14990
|
hostManagedToolPolicyAuthority: null,
|
|
14840
14991
|
extraToolDefinitions: [],
|
|
14841
14992
|
}
|
|
14842
|
-
:
|
|
14843
|
-
|
|
14993
|
+
: currentMcpSnapshot
|
|
14994
|
+
? mergeMcpToolCatalog(options, currentMcpSnapshot, mcpToolCatalog)
|
|
14995
|
+
: options;
|
|
14996
|
+
let effectiveAllowedToolNames = Object.freeze(
|
|
14844
14997
|
getEffectiveToolDefinitions(effectiveToolOptions).map(
|
|
14845
14998
|
(tool) => tool.function.name,
|
|
14846
14999
|
),
|
|
14847
15000
|
);
|
|
15001
|
+
const startupToolNames = new Set(effectiveAllowedToolNames);
|
|
14848
15002
|
if (
|
|
14849
15003
|
fileMutationScope &&
|
|
14850
15004
|
effectiveAllowedToolNames.some(
|
|
@@ -14926,6 +15080,10 @@ export async function* agentLoop(messages, options) {
|
|
|
14926
15080
|
? null
|
|
14927
15081
|
: options.extraToolDefinitions || null,
|
|
14928
15082
|
mcpClient: hermeticExecution ? null : options.mcpClient || null,
|
|
15083
|
+
mcpToolCatalog: loopMcpCatalog,
|
|
15084
|
+
mcpCatalogBinding: loopMcpCatalog
|
|
15085
|
+
? { authority: loopMcpCatalog, snapshot: currentMcpSnapshot }
|
|
15086
|
+
: null,
|
|
14929
15087
|
mcpHostClient: hermeticExecution
|
|
14930
15088
|
? null
|
|
14931
15089
|
: options.mcpHostClient || options.mcpClient || null,
|
|
@@ -15242,6 +15400,39 @@ export async function* agentLoop(messages, options) {
|
|
|
15242
15400
|
let lastTaskProgressIntervention = null;
|
|
15243
15401
|
|
|
15244
15402
|
while (budget.hasRemaining()) {
|
|
15403
|
+
if (loopMcpCatalog) {
|
|
15404
|
+
currentMcpSnapshot = readMcpToolCatalog(loopMcpCatalog);
|
|
15405
|
+
effectiveToolOptions = mergeMcpToolCatalog(
|
|
15406
|
+
options,
|
|
15407
|
+
currentMcpSnapshot,
|
|
15408
|
+
mcpToolCatalog,
|
|
15409
|
+
);
|
|
15410
|
+
effectiveAllowedToolNames = Object.freeze(
|
|
15411
|
+
getEffectiveToolDefinitions(effectiveToolOptions)
|
|
15412
|
+
.map((tool) => tool.function.name)
|
|
15413
|
+
.filter(
|
|
15414
|
+
(name) =>
|
|
15415
|
+
startupToolNames.has(name) ||
|
|
15416
|
+
currentMcpSnapshot.identities.has(name),
|
|
15417
|
+
),
|
|
15418
|
+
);
|
|
15419
|
+
effectiveToolOptions = {
|
|
15420
|
+
...effectiveToolOptions,
|
|
15421
|
+
enabledToolNames: effectiveAllowedToolNames,
|
|
15422
|
+
exactToolNames: true,
|
|
15423
|
+
};
|
|
15424
|
+
Object.assign(toolContext, {
|
|
15425
|
+
extraToolDefinitions: effectiveToolOptions.extraToolDefinitions,
|
|
15426
|
+
externalToolDescriptors: effectiveToolOptions.externalToolDescriptors,
|
|
15427
|
+
externalToolExecutors: effectiveToolOptions.externalToolExecutors,
|
|
15428
|
+
mcpClient: effectiveToolOptions.mcpClient,
|
|
15429
|
+
effectiveAllowedToolNames,
|
|
15430
|
+
mcpCatalogBinding: {
|
|
15431
|
+
authority: loopMcpCatalog,
|
|
15432
|
+
snapshot: currentMcpSnapshot,
|
|
15433
|
+
},
|
|
15434
|
+
});
|
|
15435
|
+
}
|
|
15245
15436
|
// Yield only between complete tool batches. Keep all completed tool results
|
|
15246
15437
|
// and settle child usage before the host accepts queued user steering.
|
|
15247
15438
|
if (options.shouldYieldToUser?.() === true) {
|
|
@@ -15408,6 +15599,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15408
15599
|
// its full tool_call→tool_result cycle before we loop, so `messages` has no
|
|
15409
15600
|
// dangling call; `preserveToolPairs` then guarantees compaction never
|
|
15410
15601
|
// orphans a tool result. Best-effort — a failure never aborts the run.
|
|
15602
|
+
let compactionHostContextRefreshed = false;
|
|
15411
15603
|
if (
|
|
15412
15604
|
!independentReviewContext?.active &&
|
|
15413
15605
|
options.autoCompact !== false &&
|
|
@@ -15428,7 +15620,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15428
15620
|
// micro-compact may change the working input, but the durable CAS must
|
|
15429
15621
|
// still compare against the transcript state that existed before any
|
|
15430
15622
|
// in-memory compaction happened.
|
|
15431
|
-
|
|
15623
|
+
let authorityExpectedMessages = [...messages];
|
|
15432
15624
|
let workingMessages = messages;
|
|
15433
15625
|
let microStats = null;
|
|
15434
15626
|
// Cheap surgical pre-pass (Claude-Code microcompact parity): build a
|
|
@@ -15491,6 +15683,22 @@ export async function* agentLoop(messages, options) {
|
|
|
15491
15683
|
reason: preCompactReason,
|
|
15492
15684
|
};
|
|
15493
15685
|
}
|
|
15686
|
+
if (!hermeticExecution && options.refreshCompactionContext != null) {
|
|
15687
|
+
// Hooks may update project files. Preserve the original transcript
|
|
15688
|
+
// comparison before replacing only the host-owned live system base.
|
|
15689
|
+
if (!_sameMessageSnapshot(messages, authorityExpectedMessages)) {
|
|
15690
|
+
throw _compactionSettlementError(
|
|
15691
|
+
COMPACTION_CONTEXT_REFRESH_ERROR,
|
|
15692
|
+
"Session messages changed before project context refresh",
|
|
15693
|
+
);
|
|
15694
|
+
}
|
|
15695
|
+
workingMessages = refreshCompactionHostContext(
|
|
15696
|
+
options.refreshCompactionContext,
|
|
15697
|
+
workingMessages,
|
|
15698
|
+
);
|
|
15699
|
+
authorityExpectedMessages = [...messages];
|
|
15700
|
+
compactionHostContextRefreshed = true;
|
|
15701
|
+
}
|
|
15494
15702
|
// Auto-pin (OPT-IN): when enabled, the original task (first user turn)
|
|
15495
15703
|
// is pinned so compaction can't drop it. Off by default → no predicate
|
|
15496
15704
|
// is passed and compaction is byte-identical to before.
|
|
@@ -15790,6 +15998,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15790
15998
|
}
|
|
15791
15999
|
}
|
|
15792
16000
|
} catch (_e) {
|
|
16001
|
+
if (_e?.code === COMPACTION_CONTEXT_REFRESH_ERROR) throw _e;
|
|
15793
16002
|
if (isAbortError(_e) || signal?.aborted) throw _e;
|
|
15794
16003
|
if (isFormalBudgetError(_e)) throw _e;
|
|
15795
16004
|
if (_e?.runtimeLedgerPersistence === true) throw _e;
|
|
@@ -15923,6 +16132,12 @@ export async function* agentLoop(messages, options) {
|
|
|
15923
16132
|
}
|
|
15924
16133
|
}
|
|
15925
16134
|
|
|
16135
|
+
if (compactionHostContextRefreshed) {
|
|
16136
|
+
// A source file can change while the summary provider is running, or
|
|
16137
|
+
// while a failed summary is falling back to the original transcript.
|
|
16138
|
+
refreshCompactionHostContext(options.refreshCompactionContext, messages);
|
|
16139
|
+
}
|
|
16140
|
+
|
|
15926
16141
|
// Deliver background sub-agent results that settled since the last turn:
|
|
15927
16142
|
// inject them as user-role context so THIS LLM call sees them. (There is
|
|
15928
16143
|
// no open tool_call to attach a late result to — the spawn call already
|
|
@@ -17279,6 +17494,7 @@ export async function* agentLoop(messages, options) {
|
|
|
17279
17494
|
try {
|
|
17280
17495
|
managedCheckpointHandle = beginManagedToolCheckpoint({
|
|
17281
17496
|
enabled: toolContext.managedCheckpoint === true,
|
|
17497
|
+
readOnly: isCheckpointReadOnly(toolContext, toolName, toolArgs),
|
|
17282
17498
|
broker,
|
|
17283
17499
|
workspaceRoot: toolContext.cwd || process.cwd(),
|
|
17284
17500
|
stateDir: toolContext.managedCheckpointStateDir || undefined,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { getDurableSystemMessageProvenance } from "../lib/session-message-provenance.js";
|
|
2
|
+
import { markCompactionHostBase } from "../lib/compaction-host-provenance.js";
|
|
3
|
+
|
|
4
|
+
export const COMPACTION_CONTEXT_REFRESH_ERROR =
|
|
5
|
+
"CC_COMPACTION_CONTEXT_REFRESH_FAILED";
|
|
6
|
+
|
|
7
|
+
/** Refresh only the base system message owned by this live host. */
|
|
8
|
+
export function createCompactionHostContextRefresher({
|
|
9
|
+
messages,
|
|
10
|
+
render,
|
|
11
|
+
onUpdated,
|
|
12
|
+
}) {
|
|
13
|
+
return (candidate = messages) => {
|
|
14
|
+
const current = messages[0];
|
|
15
|
+
if (
|
|
16
|
+
!current ||
|
|
17
|
+
current.role !== "system" ||
|
|
18
|
+
getDurableSystemMessageProvenance(current)
|
|
19
|
+
)
|
|
20
|
+
throw new Error("Live host base context is unavailable");
|
|
21
|
+
if (!Array.isArray(candidate) || !candidate.includes(current))
|
|
22
|
+
throw new Error(
|
|
23
|
+
"Compaction candidate does not contain the live host base context",
|
|
24
|
+
);
|
|
25
|
+
const content = render();
|
|
26
|
+
if (content && typeof content.then === "function") {
|
|
27
|
+
Promise.resolve(content).catch(() => {});
|
|
28
|
+
throw new TypeError("Host context rendering must be synchronous");
|
|
29
|
+
}
|
|
30
|
+
if (typeof content !== "string" || !content.trim())
|
|
31
|
+
throw new TypeError(
|
|
32
|
+
"Host context rendering must return a non-empty string",
|
|
33
|
+
);
|
|
34
|
+
if (messages[0] !== current)
|
|
35
|
+
throw new Error("Host base context changed during rendering");
|
|
36
|
+
if (content === current.content) {
|
|
37
|
+
markCompactionHostBase(current);
|
|
38
|
+
return candidate;
|
|
39
|
+
}
|
|
40
|
+
const replacement = markCompactionHostBase({ ...current, content });
|
|
41
|
+
const projected = candidate.map((message) =>
|
|
42
|
+
message === current ? replacement : message,
|
|
43
|
+
);
|
|
44
|
+
messages[0] = replacement;
|
|
45
|
+
onUpdated?.(replacement);
|
|
46
|
+
return candidate === messages ? messages : projected;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A failed refresh must not fall through to a model with obsolete rules. */
|
|
51
|
+
export function refreshCompactionHostContext(refresh, messages) {
|
|
52
|
+
if (refresh == null) return messages;
|
|
53
|
+
try {
|
|
54
|
+
if (typeof refresh !== "function")
|
|
55
|
+
throw new TypeError("Invalid host context refresher");
|
|
56
|
+
const result = refresh(messages);
|
|
57
|
+
if (result && typeof result.then === "function") {
|
|
58
|
+
Promise.resolve(result).catch(() => {});
|
|
59
|
+
throw new TypeError("Host context refresh must be synchronous");
|
|
60
|
+
}
|
|
61
|
+
if (!Array.isArray(result))
|
|
62
|
+
throw new TypeError("Host context refresh must return messages");
|
|
63
|
+
return result;
|
|
64
|
+
} catch (cause) {
|
|
65
|
+
const error = new Error(
|
|
66
|
+
"Current project context could not be refreshed before continuing",
|
|
67
|
+
{ cause },
|
|
68
|
+
);
|
|
69
|
+
error.code = COMPACTION_CONTEXT_REFRESH_ERROR;
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|