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
|
@@ -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.
|
|
@@ -14715,6 +14813,20 @@ export async function* agentLoop(messages, options) {
|
|
|
14715
14813
|
...options,
|
|
14716
14814
|
...executionPolicy,
|
|
14717
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
|
+
}
|
|
14718
14830
|
const configuredChatFn = options.chatFn;
|
|
14719
14831
|
const evolutionIngress =
|
|
14720
14832
|
options.evolutionIngress == null
|
|
@@ -14857,19 +14969,36 @@ export async function* agentLoop(messages, options) {
|
|
|
14857
14969
|
);
|
|
14858
14970
|
}
|
|
14859
14971
|
|
|
14860
|
-
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
|
|
14861
14987
|
? {
|
|
14862
14988
|
...options,
|
|
14863
14989
|
hostManagedToolPolicy: null,
|
|
14864
14990
|
hostManagedToolPolicyAuthority: null,
|
|
14865
14991
|
extraToolDefinitions: [],
|
|
14866
14992
|
}
|
|
14867
|
-
:
|
|
14868
|
-
|
|
14993
|
+
: currentMcpSnapshot
|
|
14994
|
+
? mergeMcpToolCatalog(options, currentMcpSnapshot, mcpToolCatalog)
|
|
14995
|
+
: options;
|
|
14996
|
+
let effectiveAllowedToolNames = Object.freeze(
|
|
14869
14997
|
getEffectiveToolDefinitions(effectiveToolOptions).map(
|
|
14870
14998
|
(tool) => tool.function.name,
|
|
14871
14999
|
),
|
|
14872
15000
|
);
|
|
15001
|
+
const startupToolNames = new Set(effectiveAllowedToolNames);
|
|
14873
15002
|
if (
|
|
14874
15003
|
fileMutationScope &&
|
|
14875
15004
|
effectiveAllowedToolNames.some(
|
|
@@ -14951,6 +15080,10 @@ export async function* agentLoop(messages, options) {
|
|
|
14951
15080
|
? null
|
|
14952
15081
|
: options.extraToolDefinitions || null,
|
|
14953
15082
|
mcpClient: hermeticExecution ? null : options.mcpClient || null,
|
|
15083
|
+
mcpToolCatalog: loopMcpCatalog,
|
|
15084
|
+
mcpCatalogBinding: loopMcpCatalog
|
|
15085
|
+
? { authority: loopMcpCatalog, snapshot: currentMcpSnapshot }
|
|
15086
|
+
: null,
|
|
14954
15087
|
mcpHostClient: hermeticExecution
|
|
14955
15088
|
? null
|
|
14956
15089
|
: options.mcpHostClient || options.mcpClient || null,
|
|
@@ -15267,6 +15400,39 @@ export async function* agentLoop(messages, options) {
|
|
|
15267
15400
|
let lastTaskProgressIntervention = null;
|
|
15268
15401
|
|
|
15269
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
|
+
}
|
|
15270
15436
|
// Yield only between complete tool batches. Keep all completed tool results
|
|
15271
15437
|
// and settle child usage before the host accepts queued user steering.
|
|
15272
15438
|
if (options.shouldYieldToUser?.() === true) {
|
|
@@ -15433,6 +15599,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15433
15599
|
// its full tool_call→tool_result cycle before we loop, so `messages` has no
|
|
15434
15600
|
// dangling call; `preserveToolPairs` then guarantees compaction never
|
|
15435
15601
|
// orphans a tool result. Best-effort — a failure never aborts the run.
|
|
15602
|
+
let compactionHostContextRefreshed = false;
|
|
15436
15603
|
if (
|
|
15437
15604
|
!independentReviewContext?.active &&
|
|
15438
15605
|
options.autoCompact !== false &&
|
|
@@ -15453,7 +15620,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15453
15620
|
// micro-compact may change the working input, but the durable CAS must
|
|
15454
15621
|
// still compare against the transcript state that existed before any
|
|
15455
15622
|
// in-memory compaction happened.
|
|
15456
|
-
|
|
15623
|
+
let authorityExpectedMessages = [...messages];
|
|
15457
15624
|
let workingMessages = messages;
|
|
15458
15625
|
let microStats = null;
|
|
15459
15626
|
// Cheap surgical pre-pass (Claude-Code microcompact parity): build a
|
|
@@ -15516,6 +15683,22 @@ export async function* agentLoop(messages, options) {
|
|
|
15516
15683
|
reason: preCompactReason,
|
|
15517
15684
|
};
|
|
15518
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
|
+
}
|
|
15519
15702
|
// Auto-pin (OPT-IN): when enabled, the original task (first user turn)
|
|
15520
15703
|
// is pinned so compaction can't drop it. Off by default → no predicate
|
|
15521
15704
|
// is passed and compaction is byte-identical to before.
|
|
@@ -15815,6 +15998,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15815
15998
|
}
|
|
15816
15999
|
}
|
|
15817
16000
|
} catch (_e) {
|
|
16001
|
+
if (_e?.code === COMPACTION_CONTEXT_REFRESH_ERROR) throw _e;
|
|
15818
16002
|
if (isAbortError(_e) || signal?.aborted) throw _e;
|
|
15819
16003
|
if (isFormalBudgetError(_e)) throw _e;
|
|
15820
16004
|
if (_e?.runtimeLedgerPersistence === true) throw _e;
|
|
@@ -15948,6 +16132,12 @@ export async function* agentLoop(messages, options) {
|
|
|
15948
16132
|
}
|
|
15949
16133
|
}
|
|
15950
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
|
+
|
|
15951
16141
|
// Deliver background sub-agent results that settled since the last turn:
|
|
15952
16142
|
// inject them as user-role context so THIS LLM call sees them. (There is
|
|
15953
16143
|
// no open tool_call to attach a late result to — the spawn call already
|
|
@@ -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
|
+
}
|