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.
Files changed (473) hide show
  1. package/README.md +24 -2
  2. package/package.json +2 -2
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/AIOps-CHItp4vg.js +1 -0
  7. package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
  8. package/src/assets/web-panel/assets/{ActionButton-_zlP_Z6z.js → ActionButton-nhMNWW_d.js} +1 -1
  9. package/src/assets/web-panel/assets/Analytics-DRc81BBI.js +3 -0
  10. package/src/assets/web-panel/assets/Analytics-Dr-1kvaM.css +1 -0
  11. package/src/assets/web-panel/assets/AppLayout-BTBIIl1e.css +1 -0
  12. package/src/assets/web-panel/assets/AppLayout-CVt7HMkp.js +3 -0
  13. package/src/assets/web-panel/assets/Artifacts-BuJgG5jf.js +1 -0
  14. package/src/assets/web-panel/assets/Artifacts-Dohtjyfl.css +1 -0
  15. package/src/assets/web-panel/assets/Audit-DDnViLtj.css +1 -0
  16. package/src/assets/web-panel/assets/Audit-msNg0aH-.js +1 -0
  17. package/src/assets/web-panel/assets/BackgroundAgents-BpcV8yWC.js +1 -0
  18. package/src/assets/web-panel/assets/BackgroundAgents-CH3Uc9sF.css +1 -0
  19. package/src/assets/web-panel/assets/Backup-CYh10zO3.css +1 -0
  20. package/src/assets/web-panel/assets/Backup-P53DADwG.js +1 -0
  21. package/src/assets/web-panel/assets/BaseInput-DFxT2yWN.js +1 -0
  22. package/src/assets/web-panel/assets/Chat-B5JvvQJb.css +1 -0
  23. package/src/assets/web-panel/assets/Chat-BXoHisHW.js +7 -0
  24. package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +1 -0
  25. package/src/assets/web-panel/assets/ChatBubbleRenderer-DMGtSdDx.js +1 -0
  26. package/src/assets/web-panel/assets/{Checkbox-nMgYkH8H.js → Checkbox-B4g_ckJq.js} +1 -1
  27. package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
  28. package/src/assets/web-panel/assets/Codegen-C6SSSOfp.js +1 -0
  29. package/src/assets/web-panel/assets/{Col-i0owJaGP.js → Col-IO1NEUYL.js} +1 -1
  30. package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
  31. package/src/assets/web-panel/assets/Community-CdEBl93F.js +1 -0
  32. package/src/assets/web-panel/assets/{Compact-DDXrvvm-.js → Compact-DYs0a9k7.js} +1 -1
  33. package/src/assets/web-panel/assets/Compliance-BPnk7948.js +1 -0
  34. package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
  35. package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
  36. package/src/assets/web-panel/assets/Cowork-VLOTGbza.js +6 -0
  37. package/src/assets/web-panel/assets/Cron-_9GgQLJo.js +2 -0
  38. package/src/assets/web-panel/assets/Crosschain-B21yn0qy.js +1 -0
  39. package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
  40. package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
  41. package/src/assets/web-panel/assets/DID-mBeDgRZ7.js +2 -0
  42. package/src/assets/web-panel/assets/Dashboard-BckYYzhP.js +3 -0
  43. package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
  44. package/src/assets/web-panel/assets/Dropdown-DEedqFiE.js +1 -0
  45. package/src/assets/web-panel/assets/EmailListRenderer-CMs0k9TB.js +1 -0
  46. package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +1 -0
  47. package/src/assets/web-panel/assets/EvolutionSettings-B00Qd0fN.js +1 -0
  48. package/src/assets/web-panel/assets/EvolutionSettings-BnQ91YHJ.css +1 -0
  49. package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +1 -0
  50. package/src/assets/web-panel/assets/FamilyGuardDashboard-DxMTAMa8.js +1 -0
  51. package/src/assets/web-panel/assets/Federation-B-UZw0LO.js +1 -0
  52. package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
  53. package/src/assets/web-panel/assets/FormItemContext-CkafazEw.js +1 -0
  54. package/src/assets/web-panel/assets/GenericCardRenderer-DEUG25ZJ.js +1 -0
  55. package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +1 -0
  56. package/src/assets/web-panel/assets/Git-D7dr9oz9.js +2 -0
  57. package/src/assets/web-panel/assets/{Git-BdHhxBWR.css → Git-DPuaGtg7.css} +1 -1
  58. package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
  59. package/src/assets/web-panel/assets/Governance-DKlUJ1wg.js +1 -0
  60. package/src/assets/web-panel/assets/Inference-BJKqplap.js +1 -0
  61. package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
  62. package/src/assets/web-panel/assets/KnowledgeGraph-B78fB-bz.js +1 -0
  63. package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
  64. package/src/assets/web-panel/assets/Logs-DJGcHYH_.js +2 -0
  65. package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
  66. package/src/assets/web-panel/assets/MarkdownRenderer-BAxj61I3.css +1 -0
  67. package/src/assets/web-panel/assets/MarkdownRenderer-DkcG_MxW.js +1 -0
  68. package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
  69. package/src/assets/web-panel/assets/Marketplace-ucTbwByD.js +1 -0
  70. package/src/assets/web-panel/assets/McpTools-Cu1xZYYk.js +2 -0
  71. package/src/assets/web-panel/assets/McpTools-DSGHWYS_.css +1 -0
  72. package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
  73. package/src/assets/web-panel/assets/Memory-DCGpXmi-.js +2 -0
  74. package/src/assets/web-panel/assets/MobileBridge-BQ-Uwwg7.css +1 -0
  75. package/src/assets/web-panel/assets/MobileBridge-BnKr0aAS.js +1 -0
  76. package/src/assets/web-panel/assets/MobileProjects-C5UvYJTP.js +1 -0
  77. package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
  78. package/src/assets/web-panel/assets/Mtc-D1UUl4WH.js +6 -0
  79. package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
  80. package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
  81. package/src/assets/web-panel/assets/MtcAudit-D3aa8XP4.js +19 -0
  82. package/src/assets/web-panel/assets/Multisig-DiXdfJjO.js +7 -0
  83. package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
  84. package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
  85. package/src/assets/web-panel/assets/NLProgramming-DbWABgSE.js +1 -0
  86. package/src/assets/web-panel/assets/Notes-BP1DPl-R.js +7 -0
  87. package/src/assets/web-panel/assets/Notes-COE2q2gD.css +1 -0
  88. package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
  89. package/src/assets/web-panel/assets/NotificationSettings-xaB6ONe7.js +1 -0
  90. package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +1 -0
  91. package/src/assets/web-panel/assets/OrderTableRenderer-D1uNcz3b.js +1 -0
  92. package/src/assets/web-panel/assets/Organization-BM3Lh8Q8.css +1 -0
  93. package/src/assets/web-panel/assets/Organization-DMLDGaf1.js +4 -0
  94. package/src/assets/web-panel/assets/{Overflow-CaRUAOY_.js → Overflow-DH4QPEoI.js} +1 -1
  95. package/src/assets/web-panel/assets/{OverrideContext-C0w0P4A3.js → OverrideContext-DLR1AtLy.js} +1 -1
  96. package/src/assets/web-panel/assets/P2P-Bl4OS10o.js +2 -0
  97. package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
  98. package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +1 -0
  99. package/src/assets/web-panel/assets/PdhVaultBrowser-D9XSE2YI.js +7 -0
  100. package/src/assets/web-panel/assets/Permissions-CUaPlr6d.js +4 -0
  101. package/src/assets/web-panel/assets/Permissions-Diejgkbs.css +1 -0
  102. package/src/assets/web-panel/assets/PersonalDataHub-Ba92dZk-.js +3 -0
  103. package/src/assets/web-panel/assets/PersonalDataHub-C_xhspRy.css +1 -0
  104. package/src/assets/web-panel/assets/Pipeline-Bh2okm-8.js +1 -0
  105. package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
  106. package/src/assets/web-panel/assets/Privacy-Bmq3p4gC.js +1 -0
  107. package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
  108. package/src/assets/web-panel/assets/ProjectInit-BPu2fdKR.js +2 -0
  109. package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
  110. package/src/assets/web-panel/assets/ProjectSettings-D6ABLpmt.js +2 -0
  111. package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
  112. package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
  113. package/src/assets/web-panel/assets/Projects-qWHEve0z.js +1 -0
  114. package/src/assets/web-panel/assets/Providers-CpAXh_6c.css +1 -0
  115. package/src/assets/web-panel/assets/Providers-D9DI-2hc.js +1 -0
  116. package/src/assets/web-panel/assets/{QrScannerModal-fFkycCT4.js → QrScannerModal-CxifoeD5.js} +1 -1
  117. package/src/assets/web-panel/assets/QrScannerModal-DFrn7rxS.css +1 -0
  118. package/src/assets/web-panel/assets/QuickAsk-DC1BvwR7.js +1 -0
  119. package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
  120. package/src/assets/web-panel/assets/Recommend-CKqbMB5o.js +1 -0
  121. package/src/assets/web-panel/assets/RemoteSession-BGGzPdS5.js +5 -0
  122. package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
  123. package/src/assets/web-panel/assets/Reputation-DH90O9-5.js +1 -0
  124. package/src/assets/web-panel/assets/Row-h7ovueJc.js +1 -0
  125. package/src/assets/web-panel/assets/RssFeed-Cze7YLaG.css +1 -0
  126. package/src/assets/web-panel/assets/RssFeed-DaHxXTZg.js +3 -0
  127. package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
  128. package/src/assets/web-panel/assets/Search-Bn6Nqpn4.js +1 -0
  129. package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
  130. package/src/assets/web-panel/assets/Security-ClbBmPJi.js +4 -0
  131. package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
  132. package/src/assets/web-panel/assets/Services-ChHLQwRn.js +2 -0
  133. package/src/assets/web-panel/assets/{Skeleton-ASRgSh_Y.js → Skeleton-DfN6BFzt.js} +1 -1
  134. package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
  135. package/src/assets/web-panel/assets/Skills-C926wDev.js +1 -0
  136. package/src/assets/web-panel/assets/Sla-DJzi1l1M.js +1 -0
  137. package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
  138. package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
  139. package/src/assets/web-panel/assets/SpeechSettings-_GSyVjm_.js +1 -0
  140. package/src/assets/web-panel/assets/SyncSettings-B67xnERe.js +1 -0
  141. package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +1 -0
  142. package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
  143. package/src/assets/web-panel/assets/Tasks-BaYZadcG.js +1 -0
  144. package/src/assets/web-panel/assets/Templates-BsMmCdZI.css +1 -0
  145. package/src/assets/web-panel/assets/Templates-Bu8kN1Xt.js +1 -0
  146. package/src/assets/web-panel/assets/Tenant-BM9qufw1.js +1 -0
  147. package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
  148. package/src/assets/web-panel/assets/Terminal-MEdd5DjB.js +3 -0
  149. package/src/assets/web-panel/assets/Terminal-qPp9MaPu.css +1 -0
  150. package/src/assets/web-panel/assets/TimelineRenderer-C27kL2oU.js +1 -0
  151. package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +1 -0
  152. package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
  153. package/src/assets/web-panel/assets/Tokens-Cvjd98VC.js +1 -0
  154. package/src/assets/web-panel/assets/{Trigger-DgGU_D0o.js → Trigger-CLym84HI.js} +1 -1
  155. package/src/assets/web-panel/assets/Trust-Bv2JTaNN.js +1 -0
  156. package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
  157. package/src/assets/web-panel/assets/UkeySign-CSCkNbtm.js +1 -0
  158. package/src/assets/web-panel/assets/VideoEditing-BFDXB4xh.js +1 -0
  159. package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
  160. package/src/assets/web-panel/assets/Wallet-CMEFrG_b.js +4 -0
  161. package/src/assets/web-panel/assets/Wallet-Dw8uV4Ug.css +1 -0
  162. package/src/assets/web-panel/assets/WebAuthn-DKx6xPPl.css +1 -0
  163. package/src/assets/web-panel/assets/WebAuthn-x4eO_Q4y.js +5 -0
  164. package/src/assets/web-panel/assets/WorkflowEditor-ClWEPgV1.js +1 -0
  165. package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
  166. package/src/assets/web-panel/assets/{_getTag-DnrRH4E6.js → _getTag-BVc6NQ_K.js} +1 -1
  167. package/src/assets/web-panel/assets/{chat-C_kELmV6.js → chat-BdYOI4gM.js} +1 -1
  168. package/src/assets/web-panel/assets/{collapseMotion-CqM1QOwM.js → collapseMotion-B4IZiILV.js} +1 -1
  169. package/src/assets/web-panel/assets/{colors-DE-ZxAv_.js → colors-DcTBrGvS.js} +1 -1
  170. package/src/assets/web-panel/assets/{compact-item-BowulLDi.js → compact-item-Dn2ktVuj.js} +1 -1
  171. package/src/assets/web-panel/assets/createContext-XTreuyqp.js +1 -0
  172. package/src/assets/web-panel/assets/{debounce-CFGTTtN3.js → debounce-D9xTw4Sx.js} +1 -1
  173. package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
  174. package/src/assets/web-panel/assets/echarts-CDp6K7pj.js +19 -0
  175. package/src/assets/web-panel/assets/{hasIn-Be7mK-iw.js → hasIn-CFRNsYQd.js} +1 -1
  176. package/src/assets/web-panel/assets/{icons-DG5UD-6K.js → icons-DlxlFL4g.js} +4 -4
  177. package/src/assets/web-panel/assets/index-3RqDry-K.js +71 -0
  178. package/src/assets/web-panel/assets/{index-nLHTuHoT.js → index-8METW_Wr.js} +1 -1
  179. package/src/assets/web-panel/assets/index-BBd64wj8.js +31 -0
  180. package/src/assets/web-panel/assets/index-BEyVNbNE.js +3 -0
  181. package/src/assets/web-panel/assets/index-BMLpP8QQ.js +1 -0
  182. package/src/assets/web-panel/assets/{index-DMKo49Um.js → index-BSqydcDa.js} +1 -1
  183. package/src/assets/web-panel/assets/index-BV6LojRv.js +21 -0
  184. package/src/assets/web-panel/assets/index-BbMWvjLZ.js +1 -0
  185. package/src/assets/web-panel/assets/{index-DjC2TJeH.js → index-Brc0BF-k.js} +2 -2
  186. package/src/assets/web-panel/assets/{index-3Ql7xQLn.js → index-CG9YLDmI.js} +1 -1
  187. package/src/assets/web-panel/assets/{index-lN916819.js → index-CNHWMMDX.js} +1 -1
  188. package/src/assets/web-panel/assets/{index-DLCzaLH4.js → index-COuEJdmr.js} +3 -3
  189. package/src/assets/web-panel/assets/{index-BdzVLz-c.js → index-CRW3AWdS.js} +1 -1
  190. package/src/assets/web-panel/assets/{index-_cYsz4df.js → index-CUT4h5JB.js} +2 -2
  191. package/src/assets/web-panel/assets/index-CXMa7Z-S.js +1 -0
  192. package/src/assets/web-panel/assets/index-CbaPXyNc.js +19 -0
  193. package/src/assets/web-panel/assets/{index-Cq93VfoF.css → index-CfX1DEtk.css} +1 -1
  194. package/src/assets/web-panel/assets/{index-OH54KMLN.js → index-CjHA_Q7s.js} +1 -1
  195. package/src/assets/web-panel/assets/index-CsnYp4qF.js +1 -0
  196. package/src/assets/web-panel/assets/index-D45vulkq.js +12 -0
  197. package/src/assets/web-panel/assets/index-D9kPBEqD.js +55 -0
  198. package/src/assets/web-panel/assets/index-DDTSgpXz.js +1 -0
  199. package/src/assets/web-panel/assets/index-DFl_a0n5.js +1 -0
  200. package/src/assets/web-panel/assets/index-DNdiAymC.js +1 -0
  201. package/src/assets/web-panel/assets/{index-DEDVYN7D.js → index-DQEu7uW0.js} +1 -1
  202. package/src/assets/web-panel/assets/index-DW9XncMy.js +21 -0
  203. package/src/assets/web-panel/assets/index-Daa1yCt_.js +1 -0
  204. package/src/assets/web-panel/assets/index-DdVpoNEQ.js +12 -0
  205. package/src/assets/web-panel/assets/index-Dhi4Oybt.js +1 -0
  206. package/src/assets/web-panel/assets/index-DoVoNjtJ.js +1 -0
  207. package/src/assets/web-panel/assets/{index-Ao-LXr-d.js → index-Vo7A4aiN.js} +4 -4
  208. package/src/assets/web-panel/assets/{index-LVrxqU88.js → index-XdlYkgCa.js} +1 -1
  209. package/src/assets/web-panel/assets/{index-4KkYmFy5.js → index-ir2ZwWz5.js} +2 -2
  210. package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
  211. package/src/assets/web-panel/assets/{index-Cvy4vdVW.js → index-lnTt0Jps.js} +2 -2
  212. package/src/assets/web-panel/assets/{index-D3lOYd9_.js → index-ma-rJkfE.js} +1 -1
  213. package/src/assets/web-panel/assets/index-oE4jTpHK.js +13 -0
  214. package/src/assets/web-panel/assets/{index-CXvy8HrM.js → index-r5sNECM5.js} +1 -1
  215. package/src/assets/web-panel/assets/index-uT4fRDzU.js +1 -0
  216. package/src/assets/web-panel/assets/index-xlS8pDS2.js +1 -0
  217. package/src/assets/web-panel/assets/{initDefaultProps-BNhziAal.js → initDefaultProps-mdL0oeZa.js} +1 -1
  218. package/src/assets/web-panel/assets/{isPlainObject-BWRMT62c.js → isPlainObject-_gz-soRW.js} +1 -1
  219. package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
  220. package/src/assets/web-panel/assets/motion-ZgVCKcEX.js +11 -0
  221. package/src/assets/web-panel/assets/{move-rFx211Cl.js → move-A_28O5T2.js} +1 -1
  222. package/src/assets/web-panel/assets/{mtc-parser-CEP1wN3R.js → mtc-parser-0zlMjabo.js} +1 -1
  223. package/src/assets/web-panel/assets/{omit-DacHd_Zm.js → omit-DF7mU3yG.js} +1 -1
  224. package/src/assets/web-panel/assets/{pickAttrs-Dqp58Ep2.js → pickAttrs-Cmt8liJP.js} +1 -1
  225. package/src/assets/web-panel/assets/{placementArrow-Cv6Rm0pV.js → placementArrow-DaMDC57b.js} +1 -1
  226. package/src/assets/web-panel/assets/{responsiveObserve-rNE0p9ZW.js → responsiveObserve-CHw_f2d3.js} +1 -1
  227. package/src/assets/web-panel/assets/{slide-C97JxD4S.js → slide-DJS9fFQq.js} +1 -1
  228. package/src/assets/web-panel/assets/{statusUtils-Cxk1gV9M.js → statusUtils-Bk3XdZwh.js} +1 -1
  229. package/src/assets/web-panel/assets/{styleChecker-CbtKKsPo.js → styleChecker-DMybAFsA.js} +1 -1
  230. package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
  231. package/src/assets/web-panel/assets/{useFs-6c7qrpE_.js → useFs-KPklVptS.js} +1 -1
  232. package/src/assets/web-panel/assets/{useMergedState-DXbJa_zE.js → useMergedState-d-EXs3xd.js} +1 -1
  233. package/src/assets/web-panel/assets/{usePersonalDataHub-OjxtBGe7.js → usePersonalDataHub-C7FrKDhD.js} +1 -1
  234. package/src/assets/web-panel/assets/{useRefs-BrCfMLMc.js → useRefs-DHeCQehi.js} +1 -1
  235. package/src/assets/web-panel/assets/{useState-CnxtbLoC.js → useState-Dlgl7fUg.js} +1 -1
  236. package/src/assets/web-panel/assets/vendor-BXcBOG8b.js +1 -0
  237. package/src/assets/web-panel/assets/vnode-DB3JBusp.js +1 -0
  238. package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
  239. package/src/assets/web-panel/assets/{zoom-Cc1qKiSZ.js → zoom-C8rAdf81.js} +1 -1
  240. package/src/assets/web-panel/index.html +4 -4
  241. package/src/command-help-index.json +1 -1
  242. package/src/commands/agent.js +1 -1
  243. package/src/commands/governed-skill-marketplace.js +24 -10
  244. package/src/commands/llm.js +4 -3
  245. package/src/constants.js +1 -1
  246. package/src/data/changelog.json +27 -1
  247. package/src/harness/worktree-isolator.js +4 -1
  248. package/src/lib/compaction-host-provenance.js +24 -0
  249. package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
  250. package/src/lib/context-memory-kernel/live-compaction.js +12 -3
  251. package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
  252. package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
  253. package/src/lib/context-memory-kernel/memory-service.js +30 -16
  254. package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
  255. package/src/lib/context-memory-kernel/provider-context.js +55 -24
  256. package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
  257. package/src/lib/cost-budget.js +2 -0
  258. package/src/lib/ephemeral-worktree-scope.js +24 -0
  259. package/src/lib/evolution/evolution-deployment-loader.js +6 -4
  260. package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
  261. package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
  262. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
  263. package/src/lib/evolution/governed-skill-marketplace.js +47 -24
  264. package/src/lib/goal-assess.js +4 -1
  265. package/src/lib/goal-check-evidence.js +77 -9
  266. package/src/lib/goal-condition-engine.js +20 -3
  267. package/src/lib/goal-model-call.js +107 -0
  268. package/src/lib/goal-verification-command.js +221 -0
  269. package/src/lib/goal-verification-plan.js +372 -0
  270. package/src/lib/goal-workspace-evidence.js +299 -0
  271. package/src/lib/llm-connection-probe.js +12 -5
  272. package/src/lib/llm-onboarding-catalog.json +2 -2
  273. package/src/lib/llm-pricing.js +34 -8
  274. package/src/lib/llm-providers.js +1 -0
  275. package/src/lib/mcp-tool-catalog-authority.js +244 -0
  276. package/src/lib/model-capabilities.js +6 -0
  277. package/src/lib/model-catalog-review.js +3 -0
  278. package/src/lib/model-context-catalog.js +44 -2
  279. package/src/lib/openai-responses.js +35 -6
  280. package/src/lib/sub-agent-context.js +12 -4
  281. package/src/lib/subagent-inheritance.js +162 -2
  282. package/src/lib/task-model-selector.js +1 -1
  283. package/src/lib/usage-pricing-context.js +34 -17
  284. package/src/repl/agent-repl.js +34 -2
  285. package/src/runtime/agent-core.js +226 -10
  286. package/src/runtime/compaction-host-context.js +72 -0
  287. package/src/runtime/headless-runner.js +331 -141
  288. package/src/runtime/headless-stream.js +38 -21
  289. package/src/runtime/mcp-agent-catalog.js +257 -0
  290. package/src/runtime/mcp-config.js +18 -69
  291. package/src/runtime/mcp-tool-search.js +16 -1
  292. package/src/runtime/system-prompt.js +9 -0
  293. package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
  294. package/src/assets/web-panel/assets/AIOps-CjPaaF2r.js +0 -1
  295. package/src/assets/web-panel/assets/Analytics-C7X31L8l.js +0 -3
  296. package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
  297. package/src/assets/web-panel/assets/AppLayout-BmYa34Se.js +0 -9
  298. package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
  299. package/src/assets/web-panel/assets/Artifacts-B_YKNjlp.js +0 -1
  300. package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
  301. package/src/assets/web-panel/assets/Audit-5JsI67XQ.js +0 -1
  302. package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
  303. package/src/assets/web-panel/assets/BackgroundAgents-BL3QbzvS.js +0 -1
  304. package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
  305. package/src/assets/web-panel/assets/Backup-BRmg-gTa.js +0 -1
  306. package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
  307. package/src/assets/web-panel/assets/BaseInput-DNE7mT3K.js +0 -1
  308. package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
  309. package/src/assets/web-panel/assets/Chat-OYwAopdM.js +0 -8
  310. package/src/assets/web-panel/assets/ChatBubbleRenderer-Dtxw3Wgt.js +0 -1
  311. package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
  312. package/src/assets/web-panel/assets/Codegen-B9G2ngLI.js +0 -1
  313. package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
  314. package/src/assets/web-panel/assets/Community-B3Ta0mI_.js +0 -1
  315. package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
  316. package/src/assets/web-panel/assets/Compliance-Bn4Uq6U1.js +0 -1
  317. package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
  318. package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
  319. package/src/assets/web-panel/assets/Cowork-CO5NKD6r.js +0 -6
  320. package/src/assets/web-panel/assets/Cron-ByjNese0.js +0 -2
  321. package/src/assets/web-panel/assets/Crosschain-BN1FUYyi.js +0 -1
  322. package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
  323. package/src/assets/web-panel/assets/DID-CUFX5RL3.js +0 -2
  324. package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
  325. package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
  326. package/src/assets/web-panel/assets/Dashboard-D_2FDPBP.js +0 -3
  327. package/src/assets/web-panel/assets/Dropdown-lGOMtIzb.js +0 -1
  328. package/src/assets/web-panel/assets/EmailListRenderer-DA3Qf1S2.js +0 -1
  329. package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
  330. package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
  331. package/src/assets/web-panel/assets/EvolutionSettings-DLcnicCr.js +0 -1
  332. package/src/assets/web-panel/assets/FamilyGuardDashboard-BPOSaIN1.js +0 -1
  333. package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
  334. package/src/assets/web-panel/assets/Federation-DzJUCQq8.js +0 -1
  335. package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
  336. package/src/assets/web-panel/assets/FormItemContext-DVx1XNKx.js +0 -2
  337. package/src/assets/web-panel/assets/GenericCardRenderer-BkqzO_lh.js +0 -1
  338. package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
  339. package/src/assets/web-panel/assets/Git-Dr_rdT_j.js +0 -2
  340. package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
  341. package/src/assets/web-panel/assets/Governance-DyVkZddw.js +0 -1
  342. package/src/assets/web-panel/assets/Inference-IN2YDd4v.js +0 -1
  343. package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
  344. package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
  345. package/src/assets/web-panel/assets/KnowledgeGraph-Ceiy4n6N.js +0 -1
  346. package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
  347. package/src/assets/web-panel/assets/Logs-d7pIEAX2.js +0 -2
  348. package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
  349. package/src/assets/web-panel/assets/MarkdownRenderer-DmSl0MNI.js +0 -1
  350. package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
  351. package/src/assets/web-panel/assets/Marketplace-uVE7U14g.js +0 -1
  352. package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
  353. package/src/assets/web-panel/assets/McpTools-DUfBM--y.js +0 -4
  354. package/src/assets/web-panel/assets/Memory-6gkcR02J.js +0 -2
  355. package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
  356. package/src/assets/web-panel/assets/MobileBridge-Cl6ys2O9.js +0 -1
  357. package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
  358. package/src/assets/web-panel/assets/MobileProjects-5P8jN4gf.js +0 -1
  359. package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
  360. package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
  361. package/src/assets/web-panel/assets/Mtc-DtiT1Kol.js +0 -6
  362. package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
  363. package/src/assets/web-panel/assets/MtcAudit-DZz8iiTE.js +0 -19
  364. package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
  365. package/src/assets/web-panel/assets/Multisig-DFH3-fBJ.js +0 -13
  366. package/src/assets/web-panel/assets/NLProgramming-BYNuDOt-.js +0 -1
  367. package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
  368. package/src/assets/web-panel/assets/Notes-BCY4jgYy.js +0 -7
  369. package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
  370. package/src/assets/web-panel/assets/NotificationSettings-Bk2ltghU.js +0 -1
  371. package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
  372. package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
  373. package/src/assets/web-panel/assets/OrderTableRenderer-OdeXEGAn.js +0 -1
  374. package/src/assets/web-panel/assets/Organization-CY4_mSiV.js +0 -4
  375. package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
  376. package/src/assets/web-panel/assets/P2P-Bd96rBWQ.js +0 -2
  377. package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
  378. package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
  379. package/src/assets/web-panel/assets/PdhVaultBrowser-JjnExxan.js +0 -7
  380. package/src/assets/web-panel/assets/Permissions-CW1PUJB0.js +0 -4
  381. package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
  382. package/src/assets/web-panel/assets/PersonalDataHub-BNn9alTk.js +0 -9
  383. package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
  384. package/src/assets/web-panel/assets/Pipeline-01_PBiUu.js +0 -1
  385. package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
  386. package/src/assets/web-panel/assets/Privacy-BP4DlVGb.js +0 -1
  387. package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
  388. package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
  389. package/src/assets/web-panel/assets/ProjectInit-CAMnQj4n.js +0 -2
  390. package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
  391. package/src/assets/web-panel/assets/ProjectSettings-DKxV5On_.js +0 -2
  392. package/src/assets/web-panel/assets/Projects-B_4kRnM8.js +0 -1
  393. package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
  394. package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
  395. package/src/assets/web-panel/assets/Providers-DeqqZyUv.js +0 -1
  396. package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
  397. package/src/assets/web-panel/assets/QuickAsk-Ln6qQidy.js +0 -1
  398. package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
  399. package/src/assets/web-panel/assets/Recommend-DeENA-y0.js +0 -1
  400. package/src/assets/web-panel/assets/RemoteSession-CRxSYxo4.js +0 -5
  401. package/src/assets/web-panel/assets/Reputation-B2kU2F0l.js +0 -1
  402. package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
  403. package/src/assets/web-panel/assets/Row-lV_nLlFq.js +0 -1
  404. package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
  405. package/src/assets/web-panel/assets/RssFeed-Df21mCdF.js +0 -3
  406. package/src/assets/web-panel/assets/Search-8_Dz4qU9.js +0 -1
  407. package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
  408. package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
  409. package/src/assets/web-panel/assets/Security-Cl5-PEcp.js +0 -4
  410. package/src/assets/web-panel/assets/Services-C5qgCqA7.js +0 -2
  411. package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
  412. package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
  413. package/src/assets/web-panel/assets/Skills-DWx01ZJ7.js +0 -1
  414. package/src/assets/web-panel/assets/Sla-I2gbgtW8.js +0 -1
  415. package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
  416. package/src/assets/web-panel/assets/SpeechSettings-BqTikzfe.js +0 -1
  417. package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
  418. package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
  419. package/src/assets/web-panel/assets/SyncSettings-D3zCpBFV.js +0 -2
  420. package/src/assets/web-panel/assets/Tasks-DjMWII45.js +0 -1
  421. package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
  422. package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
  423. package/src/assets/web-panel/assets/Templates-Cq7qDnHX.js +0 -1
  424. package/src/assets/web-panel/assets/Tenant-DEasKDpQ.js +0 -1
  425. package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
  426. package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
  427. package/src/assets/web-panel/assets/Terminal-J6fLkTzi.js +0 -3
  428. package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
  429. package/src/assets/web-panel/assets/TimelineRenderer-CNvWrWN-.js +0 -1
  430. package/src/assets/web-panel/assets/Tokens-BSgHJCKH.js +0 -1
  431. package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
  432. package/src/assets/web-panel/assets/Trust-BANlv-uB.js +0 -1
  433. package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
  434. package/src/assets/web-panel/assets/UkeySign-qh8GPRsU.js +0 -1
  435. package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
  436. package/src/assets/web-panel/assets/VideoEditing-DBiGTB4H.js +0 -1
  437. package/src/assets/web-panel/assets/Wallet-DMUFR7cL.js +0 -4
  438. package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
  439. package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
  440. package/src/assets/web-panel/assets/WebAuthn-DP9nQQzW.js +0 -5
  441. package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
  442. package/src/assets/web-panel/assets/WorkflowEditor-DT_6jDkL.js +0 -1
  443. package/src/assets/web-panel/assets/createContext-DCh8oMBQ.js +0 -1
  444. package/src/assets/web-panel/assets/devWarning-BVvJAp91.js +0 -1
  445. package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
  446. package/src/assets/web-panel/assets/index-6OluUVJJ.js +0 -55
  447. package/src/assets/web-panel/assets/index-B-3EDOlf.js +0 -1
  448. package/src/assets/web-panel/assets/index-B7IhCfsh.js +0 -1
  449. package/src/assets/web-panel/assets/index-BDIIR8g6.js +0 -1
  450. package/src/assets/web-panel/assets/index-BMrbe_Ey.js +0 -1
  451. package/src/assets/web-panel/assets/index-BlzMqaWB.js +0 -1
  452. package/src/assets/web-panel/assets/index-BwY31W-u.js +0 -12
  453. package/src/assets/web-panel/assets/index-C2pCquZC.js +0 -1
  454. package/src/assets/web-panel/assets/index-CKmC6ugN.js +0 -1
  455. package/src/assets/web-panel/assets/index-CL2hAUWh.js +0 -1
  456. package/src/assets/web-panel/assets/index-CUXfwAhF.js +0 -3
  457. package/src/assets/web-panel/assets/index-C_VnSUjh.js +0 -3
  458. package/src/assets/web-panel/assets/index-CecGCLWI.js +0 -31
  459. package/src/assets/web-panel/assets/index-Ck6MYKVN.js +0 -21
  460. package/src/assets/web-panel/assets/index-CwJfLNqv.js +0 -1
  461. package/src/assets/web-panel/assets/index-DMDaGPxG.js +0 -19
  462. package/src/assets/web-panel/assets/index-DN1AT3FH.js +0 -1
  463. package/src/assets/web-panel/assets/index-DOebEvgn.js +0 -1
  464. package/src/assets/web-panel/assets/index-DPX3N4T8.js +0 -13
  465. package/src/assets/web-panel/assets/index-DSRKtgJg.js +0 -1
  466. package/src/assets/web-panel/assets/index-DSqZBvQM.js +0 -12
  467. package/src/assets/web-panel/assets/index-DbrQO1p9.js +0 -21
  468. package/src/assets/web-panel/assets/index-Qx8cTReg.js +0 -75
  469. package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
  470. package/src/assets/web-panel/assets/motion-fUkbJz38.js +0 -11
  471. package/src/assets/web-panel/assets/useFlexGapSupport-CQATs2JQ.js +0 -1
  472. package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
  473. 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.cacheCreation5mTokens != null
154
- ? "split"
155
- : "missing";
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
- ...(provider === "anthropic"
180
- ? {
181
- cacheEvidence,
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
- ...(cacheEvidence === "split"
201
- ? ["cacheCreation5mTokens", "cacheCreation1hTokens"]
202
- : []),
219
+ ...cacheFields,
203
220
  ]) {
204
221
  const value = cache[key] ?? usage[key] ?? (key === "calls" ? 1 : 0);
205
222
  if (
@@ -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 { composeSystemPrompt } from "../runtime/system-prompt.js";
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
- projectMemory: _leanNoProjectMemory ? false : undefined,
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 || mcpDispatchAdmission || workflowEffectId) {
9941
+ if (signal || catalogDispatchAdmission || workflowEffectId) {
9878
9942
  callArguments.push({
9879
9943
  ...(signal ? { signal } : {}),
9880
- ...(mcpDispatchAdmission
9881
- ? { dispatchAdmission: mcpDispatchAdmission }
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 (_CHECKPOINT_READ_ONLY.has(toolName)) return null;
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 effectiveToolOptions = hermeticExecution
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
- : options;
14843
- const effectiveAllowedToolNames = Object.freeze(
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
- const authorityExpectedMessages = [...messages];
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
+ }