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.
Files changed (466) hide show
  1. package/README.md +20 -4
  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-Dzv1ReHF.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-B5uzaLLP.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-D3I2kUGu.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-5GigOmb8.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-ky9UfGv4.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-er_HkLCI.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-CrFs6rUL.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-CXrW4Nry.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-BpJsXlTK.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-CUNg0-fh.js → colors-DcTBrGvS.js} +1 -1
  170. package/src/assets/web-panel/assets/{compact-item-C3tFHnhu.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-CU6RIciB.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-BPWJw4Ji.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-BzhobTgZ.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-KgR1f2Gq.js → index-Brc0BF-k.js} +2 -2
  186. package/src/assets/web-panel/assets/{index-D4njcYFw.js → index-CG9YLDmI.js} +1 -1
  187. package/src/assets/web-panel/assets/{index-6EwPIfXu.js → index-CNHWMMDX.js} +1 -1
  188. package/src/assets/web-panel/assets/{index-CEIoRm_c.js → index-COuEJdmr.js} +3 -3
  189. package/src/assets/web-panel/assets/{index-BG4zuFf0.js → index-CRW3AWdS.js} +1 -1
  190. package/src/assets/web-panel/assets/{index-BOlAutGy.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-X6e0cGRU.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-BJjEAoDb.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-111hR8WZ.js → index-Vo7A4aiN.js} +4 -4
  208. package/src/assets/web-panel/assets/{index-lo9rgpyj.js → index-XdlYkgCa.js} +1 -1
  209. package/src/assets/web-panel/assets/{index-1L0tt7G2.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-CyyhilXV.js → index-lnTt0Jps.js} +2 -2
  212. package/src/assets/web-panel/assets/{index-CLQjdKmE.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-K2Uqqkr1.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-FI8D7E2x.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-Vl1vUReW.js → move-A_28O5T2.js} +1 -1
  222. package/src/assets/web-panel/assets/{mtc-parser-6Cu2aFME.js → mtc-parser-0zlMjabo.js} +1 -1
  223. package/src/assets/web-panel/assets/{omit-VRKL8iSO.js → omit-DF7mU3yG.js} +1 -1
  224. package/src/assets/web-panel/assets/{pickAttrs-DZfWsOe0.js → pickAttrs-Cmt8liJP.js} +1 -1
  225. package/src/assets/web-panel/assets/{placementArrow-qmcOUc4W.js → placementArrow-DaMDC57b.js} +1 -1
  226. package/src/assets/web-panel/assets/{responsiveObserve-BLB6SsSw.js → responsiveObserve-CHw_f2d3.js} +1 -1
  227. package/src/assets/web-panel/assets/{slide-41jdYeSH.js → slide-DJS9fFQq.js} +1 -1
  228. package/src/assets/web-panel/assets/{statusUtils-Yn8OQ5ey.js → statusUtils-Bk3XdZwh.js} +1 -1
  229. package/src/assets/web-panel/assets/{styleChecker-4CEwz9Zd.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-Bugo8HuF.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-B-q2ElB0.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-DM1y_KKP.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/data/changelog.json +14 -1
  246. package/src/harness/worktree-isolator.js +4 -1
  247. package/src/lib/compaction-host-provenance.js +24 -0
  248. package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
  249. package/src/lib/context-memory-kernel/live-compaction.js +12 -3
  250. package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
  251. package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
  252. package/src/lib/context-memory-kernel/memory-service.js +30 -16
  253. package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
  254. package/src/lib/context-memory-kernel/provider-context.js +55 -24
  255. package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
  256. package/src/lib/cost-budget.js +2 -0
  257. package/src/lib/ephemeral-worktree-scope.js +24 -0
  258. package/src/lib/evolution/evolution-deployment-loader.js +6 -4
  259. package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
  260. package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
  261. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
  262. package/src/lib/evolution/governed-skill-marketplace.js +47 -24
  263. package/src/lib/goal-condition-engine.js +20 -3
  264. package/src/lib/goal-verification-command.js +221 -0
  265. package/src/lib/goal-verification-plan.js +372 -0
  266. package/src/lib/llm-connection-probe.js +12 -5
  267. package/src/lib/llm-onboarding-catalog.json +1 -1
  268. package/src/lib/llm-pricing.js +34 -8
  269. package/src/lib/mcp-tool-catalog-authority.js +244 -0
  270. package/src/lib/model-capabilities.js +6 -0
  271. package/src/lib/model-catalog-review.js +3 -0
  272. package/src/lib/model-context-catalog.js +44 -2
  273. package/src/lib/openai-responses.js +35 -6
  274. package/src/lib/sub-agent-context.js +12 -4
  275. package/src/lib/subagent-inheritance.js +162 -2
  276. package/src/lib/usage-pricing-context.js +34 -17
  277. package/src/repl/agent-repl.js +34 -2
  278. package/src/runtime/agent-core.js +199 -9
  279. package/src/runtime/compaction-host-context.js +72 -0
  280. package/src/runtime/headless-runner.js +133 -37
  281. package/src/runtime/headless-stream.js +38 -21
  282. package/src/runtime/mcp-agent-catalog.js +257 -0
  283. package/src/runtime/mcp-config.js +18 -69
  284. package/src/runtime/mcp-tool-search.js +16 -1
  285. package/src/runtime/system-prompt.js +9 -0
  286. package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
  287. package/src/assets/web-panel/assets/AIOps-o-rFKEYL.js +0 -1
  288. package/src/assets/web-panel/assets/Analytics-Bt7H_jrh.js +0 -3
  289. package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
  290. package/src/assets/web-panel/assets/AppLayout-CgynsRFP.js +0 -9
  291. package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
  292. package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
  293. package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +0 -1
  294. package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
  295. package/src/assets/web-panel/assets/Audit-DBXn-AZ6.js +0 -1
  296. package/src/assets/web-panel/assets/BackgroundAgents--dxPftKa.js +0 -1
  297. package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
  298. package/src/assets/web-panel/assets/Backup-D9Zf_2tH.js +0 -1
  299. package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
  300. package/src/assets/web-panel/assets/BaseInput-DDTOjovq.js +0 -1
  301. package/src/assets/web-panel/assets/Chat-2ETqdBLn.js +0 -8
  302. package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
  303. package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +0 -1
  304. package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
  305. package/src/assets/web-panel/assets/Codegen-4ieEEIwt.js +0 -1
  306. package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
  307. package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
  308. package/src/assets/web-panel/assets/Community-DeYxFMJb.js +0 -1
  309. package/src/assets/web-panel/assets/Compliance-DLVjbVUh.js +0 -1
  310. package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
  311. package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
  312. package/src/assets/web-panel/assets/Cowork-DfUKa0T5.js +0 -6
  313. package/src/assets/web-panel/assets/Cron-_RpktpO5.js +0 -2
  314. package/src/assets/web-panel/assets/Crosschain-7x6xdbwH.js +0 -1
  315. package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
  316. package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
  317. package/src/assets/web-panel/assets/DID-ccVhToC1.js +0 -2
  318. package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
  319. package/src/assets/web-panel/assets/Dashboard-DhygcaoK.js +0 -3
  320. package/src/assets/web-panel/assets/Dropdown-DFplwXK7.js +0 -1
  321. package/src/assets/web-panel/assets/EmailListRenderer-Bm01soCN.js +0 -1
  322. package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
  323. package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
  324. package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +0 -1
  325. package/src/assets/web-panel/assets/FamilyGuardDashboard-ChQXDBA3.js +0 -1
  326. package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
  327. package/src/assets/web-panel/assets/Federation-C0yomE-M.js +0 -1
  328. package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
  329. package/src/assets/web-panel/assets/FormItemContext-DtT3ZEZK.js +0 -2
  330. package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +0 -1
  331. package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
  332. package/src/assets/web-panel/assets/Git-CCY42R8S.js +0 -2
  333. package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
  334. package/src/assets/web-panel/assets/Governance-N66Bwvqg.js +0 -1
  335. package/src/assets/web-panel/assets/Inference-BkbPuR_2.js +0 -1
  336. package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
  337. package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
  338. package/src/assets/web-panel/assets/KnowledgeGraph-B3PibXdA.js +0 -1
  339. package/src/assets/web-panel/assets/Logs-CUtNB_N6.js +0 -2
  340. package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
  341. package/src/assets/web-panel/assets/MarkdownRenderer-D-V4dOe3.js +0 -1
  342. package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
  343. package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
  344. package/src/assets/web-panel/assets/Marketplace-DLNJb6Nr.js +0 -1
  345. package/src/assets/web-panel/assets/McpTools-2zGjJb5K.js +0 -4
  346. package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
  347. package/src/assets/web-panel/assets/Memory-9rNZ1EvR.js +0 -2
  348. package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
  349. package/src/assets/web-panel/assets/MobileBridge-Cw7sAAgn.js +0 -1
  350. package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
  351. package/src/assets/web-panel/assets/MobileProjects-8XACrqqy.js +0 -1
  352. package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
  353. package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
  354. package/src/assets/web-panel/assets/Mtc-mg02JNy-.js +0 -6
  355. package/src/assets/web-panel/assets/MtcAudit-B1Vkhj2l.js +0 -19
  356. package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
  357. package/src/assets/web-panel/assets/Multisig-BQEeA7GG.js +0 -13
  358. package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
  359. package/src/assets/web-panel/assets/NLProgramming-BIbkjZV3.js +0 -1
  360. package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
  361. package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
  362. package/src/assets/web-panel/assets/Notes-DIwhkZNY.js +0 -7
  363. package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
  364. package/src/assets/web-panel/assets/NotificationSettings-Cj9175ce.js +0 -1
  365. package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
  366. package/src/assets/web-panel/assets/OrderTableRenderer-IfNpXT2R.js +0 -1
  367. package/src/assets/web-panel/assets/Organization-DPFp6G9o.js +0 -4
  368. package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
  369. package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
  370. package/src/assets/web-panel/assets/P2P-tXck8GLq.js +0 -2
  371. package/src/assets/web-panel/assets/PdhVaultBrowser-DSvpQl9k.js +0 -7
  372. package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
  373. package/src/assets/web-panel/assets/Permissions-CKPkdLj-.js +0 -4
  374. package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
  375. package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
  376. package/src/assets/web-panel/assets/PersonalDataHub-DnqXc12l.js +0 -9
  377. package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
  378. package/src/assets/web-panel/assets/Pipeline-BKjFU_kd.js +0 -1
  379. package/src/assets/web-panel/assets/Privacy-ChC-J5Tn.js +0 -1
  380. package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
  381. package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
  382. package/src/assets/web-panel/assets/ProjectInit-ByFZG9sY.js +0 -2
  383. package/src/assets/web-panel/assets/ProjectSettings-Bbv1Kiw-.js +0 -2
  384. package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
  385. package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
  386. package/src/assets/web-panel/assets/Projects-QYyGW31-.js +0 -1
  387. package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
  388. package/src/assets/web-panel/assets/Providers-CJLnWw0r.js +0 -1
  389. package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
  390. package/src/assets/web-panel/assets/QuickAsk-DoXU0np9.js +0 -1
  391. package/src/assets/web-panel/assets/Recommend-DCo_vuaf.js +0 -1
  392. package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
  393. package/src/assets/web-panel/assets/RemoteSession-CLuL925Z.js +0 -5
  394. package/src/assets/web-panel/assets/Reputation-CNNCA_-M.js +0 -1
  395. package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
  396. package/src/assets/web-panel/assets/Row-Vu4j631i.js +0 -1
  397. package/src/assets/web-panel/assets/RssFeed-C18B4xiy.js +0 -3
  398. package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
  399. package/src/assets/web-panel/assets/Search-DxiqccE2.js +0 -1
  400. package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
  401. package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
  402. package/src/assets/web-panel/assets/Security-Droe_hHI.js +0 -4
  403. package/src/assets/web-panel/assets/Services-CwmmyXzq.js +0 -2
  404. package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
  405. package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
  406. package/src/assets/web-panel/assets/Skills-Dp-d2miK.js +0 -1
  407. package/src/assets/web-panel/assets/Sla-2DFXVbK4.js +0 -1
  408. package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
  409. package/src/assets/web-panel/assets/SpeechSettings-Cdd9lCoy.js +0 -1
  410. package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
  411. package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
  412. package/src/assets/web-panel/assets/SyncSettings-CxQhcYSk.js +0 -2
  413. package/src/assets/web-panel/assets/Tasks-BHWVRfXx.js +0 -1
  414. package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
  415. package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
  416. package/src/assets/web-panel/assets/Templates-DNFk3a5_.js +0 -1
  417. package/src/assets/web-panel/assets/Tenant-B6X6dPo8.js +0 -1
  418. package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
  419. package/src/assets/web-panel/assets/Terminal-BuUNoLGM.js +0 -3
  420. package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
  421. package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
  422. package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +0 -1
  423. package/src/assets/web-panel/assets/Tokens-CA_u4Blu.js +0 -1
  424. package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
  425. package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
  426. package/src/assets/web-panel/assets/Trust-DHcLpNy3.js +0 -1
  427. package/src/assets/web-panel/assets/UkeySign-B_fni4C2.js +0 -1
  428. package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
  429. package/src/assets/web-panel/assets/VideoEditing-g9nf2EhS.js +0 -1
  430. package/src/assets/web-panel/assets/Wallet-C8pOjIve.js +0 -4
  431. package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
  432. package/src/assets/web-panel/assets/WebAuthn-BaKNjxZt.js +0 -5
  433. package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
  434. package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
  435. package/src/assets/web-panel/assets/WorkflowEditor-CX030Wb1.js +0 -1
  436. package/src/assets/web-panel/assets/createContext-B8rTvO61.js +0 -1
  437. package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +0 -1
  438. package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
  439. package/src/assets/web-panel/assets/index--6BUI55w.js +0 -1
  440. package/src/assets/web-panel/assets/index-5Q1bepcM.js +0 -1
  441. package/src/assets/web-panel/assets/index-B10Ia2KL.js +0 -21
  442. package/src/assets/web-panel/assets/index-B1SLBLli.js +0 -3
  443. package/src/assets/web-panel/assets/index-B8_VQAav.js +0 -1
  444. package/src/assets/web-panel/assets/index-BMuPJra-.js +0 -1
  445. package/src/assets/web-panel/assets/index-BOCjph-k.js +0 -12
  446. package/src/assets/web-panel/assets/index-BpBaOWmV.js +0 -1
  447. package/src/assets/web-panel/assets/index-CDlHvQtw.js +0 -1
  448. package/src/assets/web-panel/assets/index-CPF7Vqri.js +0 -55
  449. package/src/assets/web-panel/assets/index-CPmgKQcl.js +0 -1
  450. package/src/assets/web-panel/assets/index-CcpMHPWd.js +0 -21
  451. package/src/assets/web-panel/assets/index-Cyksnofp.js +0 -1
  452. package/src/assets/web-panel/assets/index-Dc9pcin6.js +0 -1
  453. package/src/assets/web-panel/assets/index-DfAC55QA.js +0 -19
  454. package/src/assets/web-panel/assets/index-DgNCfwvg.js +0 -1
  455. package/src/assets/web-panel/assets/index-DvfhIBNZ.js +0 -1
  456. package/src/assets/web-panel/assets/index-Hbzd9WeI.js +0 -1
  457. package/src/assets/web-panel/assets/index-IiS7WoUl.js +0 -13
  458. package/src/assets/web-panel/assets/index-Xa6TlaD7.js +0 -31
  459. package/src/assets/web-panel/assets/index-YczWc2_0.js +0 -12
  460. package/src/assets/web-panel/assets/index-h_ANnbR8.js +0 -3
  461. package/src/assets/web-panel/assets/index-k7QsBwyo.js +0 -75
  462. package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
  463. package/src/assets/web-panel/assets/motion-B1hpJYSD.js +0 -11
  464. package/src/assets/web-panel/assets/useFlexGapSupport-BClv53kR.js +0 -1
  465. package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
  466. 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.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.
@@ -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 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
14861
14987
  ? {
14862
14988
  ...options,
14863
14989
  hostManagedToolPolicy: null,
14864
14990
  hostManagedToolPolicyAuthority: null,
14865
14991
  extraToolDefinitions: [],
14866
14992
  }
14867
- : options;
14868
- const effectiveAllowedToolNames = Object.freeze(
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
- const authorityExpectedMessages = [...messages];
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
+ }