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
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.131",
7
+ "cliVersions": ["0.166.131"],
8
+ "date": "2026-10-29",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.131: memory consistency and temporary worktree ownership (candidate, 2026-10-29)",
13
+ "body": "- Bind Memory recall to the same monotonic revision before and after query/ranking, and interrupt asynchronous semantic candidate waits on Stop. Late results cannot resume a cancelled request.\n- Verify all disk query bundle frames and file identities with exact BigInt metadata; narrowly bridge affected Windows libuv path-device projections through independently opened parent/volume handles. Preserve replacement, link, corruption and cleanup refusals.\n- Refresh project rules and Memory around canonical compaction; validate real killed-writer recovery and independent mutation/readback without duplicating compaction events. Incomplete semantic usage intents require reconciliation. Full IDE recovery, semantic quality and latency SLO remain separate acceptance work.\n- Preserve privately identified host system rules across unsaved canonical compaction, including headless, stream, hermetic and sub-agent hosts; copied messages cannot acquire host identity, and retained context still counts against the input budget.\n- Restrict temporary worktree callbacks from launching unowned background shell/subagents, persistent schedules or isolated skill children; retain awaited foreground execution and ordinary persistent-host background behavior. Arbitrary daemon containment is not claimed.\n- Include independent verify: Goal checks, live MCP catalog inheritance/cancellation, skill download cancellation and Terra capability/cache-billing changes accumulated on main. These are unreleased until the new exact-source gates and publication complete.\n- Require context-memory-kernel 0.1.11 publication and public verification before CLI 0.166.131, then pair IDE candidates 0.37.169 / 0.4.186 after the CLI is verified. Use OIDC only; never reuse the occupied .130 tag. Accepted deliveries remain 34/45; NOT_PAID_READY / NOT_ADMITTED / HOLD and the unresolved original dispatch remain."
14
+ }
15
+ ]
16
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.166.130",
@@ -10,7 +23,7 @@
10
23
  "sections": [
11
24
  {
12
25
  "heading": "Fixed - cc CLI 0.166.130: Goal budget and workspace evidence (candidate, 2026-10-29)",
13
- "body": "- Share model Goal review with the author run iteration/cost budgets, cancellation and output limits; retain known usage and stop on unknown usage or transport failure.\n- Bind Goal tool and artifact evidence to current workspace bytes and identities before and after review. External changes invalidate earlier successful observations; bounded reads fail closed when coverage is incomplete.\n- Refresh the reviewed security-map producer digest after adding Goal checkpoint evidence assertions. Preserve every mapped test, original threshold and required operating system.\n- Retain public child package pins and pair with VS Code 0.37.168 / JetBrains 0.4.185. Release requires exact-source CLI CI and Strict Sandbox, OIDC publication and public artifact verification. Cumulative accepted deliverables remain 34/45, with 11 unfinished; NOT_PAID_READY / NOT_ADMITTED / HOLD remain."
26
+ "body": "- Share model Goal review with the author run iteration/cost budgets, cancellation and output limits; retain known usage and stop on unknown usage or transport failure.\n- Bind Goal tool and artifact evidence to current workspace bytes and identities before and after review. External changes invalidate earlier successful observations; bounded reads fail closed when coverage is incomplete.\n- Refresh the reviewed security-map producer digest after adding Goal checkpoint evidence assertions. Preserve every mapped test, original threshold and required operating system.\n- Include the subsequent independent Goal acceptance, Memory cancellation/cache and Terra profile/cache-billing work now on main; validate their final combined source before release.\n- Pair with VS Code 0.37.168 / JetBrains 0.4.185. Before CLI publication, align changed child-package versions and verify their upstream releases. Release requires exact-source CLI CI and Strict Sandbox, OIDC publication and public artifact verification. Cumulative accepted deliverables remain 34/45, with 11 unfinished; NOT_PAID_READY / NOT_ADMITTED / HOLD remain."
14
27
  }
15
28
  ]
16
29
  },
@@ -28,6 +28,7 @@ import {
28
28
  assertSafeGitPath,
29
29
  } from "../lib/git-integration.js";
30
30
  import { evaluateWorktreeCleanup } from "../lib/worktree-cleanup-safety.js";
31
+ import { withEphemeralWorktreeScope } from "../lib/ephemeral-worktree-scope.js";
31
32
  import {
32
33
  normalizeSparsePaths,
33
34
  planSymlinkDirectories,
@@ -818,7 +819,9 @@ export async function isolateTask(repoDir, taskId, fn, options = {}) {
818
819
  const worktreePath = created.path;
819
820
 
820
821
  try {
821
- const result = await fn(worktreePath);
822
+ const result = await withEphemeralWorktreeScope(worktreePath, () =>
823
+ fn(worktreePath),
824
+ );
822
825
  const hasChanges = _hasUncommittedChanges(worktreePath);
823
826
 
824
827
  return {
@@ -0,0 +1,24 @@
1
+ import { getDurableSystemMessageProvenance } from "./session-message-provenance.js";
2
+
3
+ // A live host grants this capability only after validating and rendering its
4
+ // own base. Neither serialized fields nor a cloned message carry authority.
5
+ const LIVE_HOST_BASES = new WeakSet();
6
+
7
+ export function markCompactionHostBase(message) {
8
+ if (
9
+ !message ||
10
+ message.role !== "system" ||
11
+ getDurableSystemMessageProvenance(message)
12
+ )
13
+ throw new TypeError("Compaction host base must be a live system message");
14
+ LIVE_HOST_BASES.add(message);
15
+ return message;
16
+ }
17
+
18
+ export function isCompactionHostBase(message) {
19
+ return (
20
+ LIVE_HOST_BASES.has(message) &&
21
+ message.role === "system" &&
22
+ !getDurableSystemMessageProvenance(message)
23
+ );
24
+ }
@@ -19,7 +19,11 @@ import {
19
19
  cloneCanonical,
20
20
  normalizeMemoryRecord,
21
21
  } from "@chainlesschain/context-memory-kernel";
22
- import { withFileLock } from "../with-file-lock.js";
22
+ import { withFileLockAsync } from "../with-file-lock.js";
23
+ import {
24
+ checkMemoryQueryAborted,
25
+ memoryLockWait,
26
+ } from "./memory-query-control.js";
23
27
  import { getHomeDir } from "../paths.js";
24
28
  import { resolve } from "node:path";
25
29
  import {
@@ -261,11 +265,13 @@ export class DurableJsonMemoryPort {
261
265
  }
262
266
  }
263
267
 
264
- _locked(operation) {
268
+ _locked(operation, { signal } = {}) {
269
+ checkMemoryQueryAborted(signal);
265
270
  mkdirSync(dirname(this.filePath), { recursive: true, mode: 0o700 });
266
- return withFileLock(
271
+ return withFileLockAsync(
267
272
  this.filePath,
268
273
  (context) => {
274
+ checkMemoryQueryAborted(signal);
269
275
  if (this.lockObserver) {
270
276
  try {
271
277
  this.lockObserver({
@@ -285,6 +291,7 @@ export class DurableJsonMemoryPort {
285
291
  retryMs: 2,
286
292
  maxRetryMs: 32,
287
293
  retryJitterMs: 8,
294
+ _sleep: memoryLockWait(signal),
288
295
  },
289
296
  );
290
297
  }
@@ -296,15 +303,17 @@ export class DurableJsonMemoryPort {
296
303
  });
297
304
  }
298
305
 
299
- async query() {
300
- return this._locked(() =>
301
- Object.values(this._readUnlocked().records).map(cloneCanonical),
306
+ async query(_request, { signal } = {}) {
307
+ return this._locked(
308
+ () => Object.values(this._readUnlocked().records).map(cloneCanonical),
309
+ { signal },
302
310
  );
303
311
  }
304
312
 
305
313
  async listRecords(options = {}) {
306
314
  const query = normalizeListQuery(options);
307
- const records = await this.query();
315
+ const records = await this.query(undefined, { signal: options.signal });
316
+ checkMemoryQueryAborted(options.signal);
308
317
  return records
309
318
  .filter((record) => matchesListQuery(record, query))
310
319
  .sort(compareMemoryRows)
@@ -319,31 +328,34 @@ export class DurableJsonMemoryPort {
319
328
  async listPage(options = {}) {
320
329
  const query = normalizeListQuery(options);
321
330
  const count = pageLimit(options.limit);
322
- return this._locked(() => {
323
- const state = this._readUnlocked();
324
- const binding = listCursorBinding(
325
- resolve(this.filePath),
326
- state.digest,
327
- query,
328
- );
329
- const after = decodeListCursor(options.cursor, binding);
330
- const matches = Object.values(state.records)
331
- .filter(
332
- (record) =>
333
- matchesListQuery(record, query) &&
334
- (!after || compareMemoryRows(record, after) > 0),
335
- )
336
- .sort(compareMemoryRows);
337
- const records = matches.slice(0, count);
338
- return {
339
- records,
340
- storeRevision: state.storeRevision,
341
- nextCursor:
342
- matches.length > count
343
- ? encodeListCursor(binding, records.at(-1))
344
- : null,
345
- };
346
- });
331
+ return this._locked(
332
+ () => {
333
+ const state = this._readUnlocked();
334
+ const binding = listCursorBinding(
335
+ resolve(this.filePath),
336
+ state.digest,
337
+ query,
338
+ );
339
+ const after = decodeListCursor(options.cursor, binding);
340
+ const matches = Object.values(state.records)
341
+ .filter(
342
+ (record) =>
343
+ matchesListQuery(record, query) &&
344
+ (!after || compareMemoryRows(record, after) > 0),
345
+ )
346
+ .sort(compareMemoryRows);
347
+ const records = matches.slice(0, count);
348
+ return {
349
+ records,
350
+ storeRevision: state.storeRevision,
351
+ nextCursor:
352
+ matches.length > count
353
+ ? encodeListCursor(binding, records.at(-1))
354
+ : null,
355
+ };
356
+ },
357
+ { signal: options.signal },
358
+ );
347
359
  }
348
360
 
349
361
  async commit({ record, event, reconciliation }, expectedRevision = 0) {
@@ -381,8 +393,8 @@ export class DurableJsonMemoryPort {
381
393
  });
382
394
  }
383
395
 
384
- async getRevision() {
385
- return this._locked(() => this._readUnlocked().storeRevision);
396
+ async getRevision({ signal } = {}) {
397
+ return this._locked(() => this._readUnlocked().storeRevision, { signal });
386
398
  }
387
399
 
388
400
  async getReconciliation(requestId) {
@@ -14,6 +14,7 @@ import { JsonlSessionContextPort } from "./jsonl-session-context-port.js";
14
14
  import { createCliContextMemoryRuntime } from "./runtime.js";
15
15
  import { imageTransportEstimate } from "../image-token-estimate.js";
16
16
  import { projectRuntimeTokenUsage } from "../runtime-usage-ledger.js";
17
+ import { isCompactionHostBase } from "../compaction-host-provenance.js";
17
18
  import {
18
19
  projectCanonicalResumeMessages,
19
20
  getDurableSystemMessageProvenance,
@@ -252,16 +253,24 @@ export async function compactLiveMessagesCanonical(
252
253
  sessionExists(sessionId);
253
254
  // Host policy is live-only. Durable summary/lineage systems retain their
254
255
  // private provenance and remain part of the exact authority comparison.
256
+ // Unsaved sessions have no durable host projection: only privately admitted
257
+ // live bases/nudges may bypass the planner, never arbitrary system messages.
255
258
  const messages = persistentSession
256
259
  ? projectCanonicalResumeMessages(liveMessages, { strict: true })
257
- : liveMessages;
260
+ : liveMessages.filter(
261
+ (message) =>
262
+ !isCompactionHostBase(message) &&
263
+ !isRuntimeOnlySessionMessage(message),
264
+ );
258
265
  const ephemeralMessages = [];
259
- if (persistentSession) {
266
+ {
260
267
  let sequence = 0;
261
268
  for (const message of liveMessages) {
262
269
  if (
263
270
  isRuntimeOnlySessionMessage(message) ||
264
- (message.role === "system" &&
271
+ isCompactionHostBase(message) ||
272
+ (persistentSession &&
273
+ message.role === "system" &&
265
274
  !getDurableSystemMessageProvenance(message))
266
275
  )
267
276
  ephemeralMessages.push({ sequence, message });
@@ -0,0 +1,375 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import fs, {
3
+ closeSync,
4
+ constants,
5
+ fstatSync,
6
+ fsyncSync,
7
+ lstatSync,
8
+ openSync,
9
+ readSync,
10
+ renameSync,
11
+ unlinkSync,
12
+ writeSync,
13
+ } from "node:fs";
14
+ import { basename, dirname, join } from "node:path";
15
+ import { corruptStore, syncDirectory } from "./durable-memory-port.js";
16
+ import {
17
+ isAffectedWindowsZeroDeviceStatRuntime,
18
+ samePathHandleStableFileIdentity,
19
+ withTrustedFileParentSync,
20
+ } from "../secure-file-identity.js";
21
+
22
+ const CHUNK_BYTES = 64 * 1024;
23
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
24
+ const MAGIC = "chainlesschain.memory-query-bundle/v1\n";
25
+ const NAME_DOMAIN = "chainlesschain.memory-query-bundle/name/v1\0";
26
+ const noop = () => {};
27
+
28
+ function corruptBundle(file, reason) {
29
+ return Object.assign(
30
+ new Error(`Context/Memory query bundle is invalid: ${reason}`),
31
+ {
32
+ code: "CONTEXT_MEMORY_QUERY_BUNDLE_CORRUPT",
33
+ filePath: file,
34
+ },
35
+ );
36
+ }
37
+
38
+ function sameIdentity(left, right) {
39
+ return left.dev === right.dev && left.ino === right.ino;
40
+ }
41
+
42
+ function samePathHandle(file, pathStat, handleStat) {
43
+ if (
44
+ !isAffectedWindowsZeroDeviceStatRuntime() ||
45
+ (handleStat.dev !== 0n && sameIdentity(pathStat, handleStat))
46
+ )
47
+ return sameIdentity(pathStat, handleStat);
48
+ // libuv 1.49/1.50 can project a Windows path device differently from its
49
+ // handle. Bind the handle to a separately opened parent/volume device;
50
+ // never accept a zero device as a wildcard or relax the exact inode.
51
+ try {
52
+ return withTrustedFileParentSync(fs, file, ({ parentDevice }) =>
53
+ samePathHandleStableFileIdentity(pathStat, handleStat, parentDevice),
54
+ );
55
+ } catch (cause) {
56
+ throw corruptStore(
57
+ file,
58
+ "query bundle parent identity cannot be verified",
59
+ cause,
60
+ );
61
+ }
62
+ }
63
+
64
+ function regular(stat, file) {
65
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1n)
66
+ throw corruptStore(file, "query bundle must be an unlinked regular file");
67
+ return stat;
68
+ }
69
+
70
+ function targetStat(file) {
71
+ try {
72
+ return regular(lstatSync(file, { bigint: true }), file);
73
+ } catch (error) {
74
+ if (error.code === "ENOENT") return null;
75
+ throw error;
76
+ }
77
+ }
78
+
79
+ function sameFile(file, expected) {
80
+ const current = targetStat(file);
81
+ if (!current || !samePathHandle(file, current, expected))
82
+ throw corruptStore(file, "query bundle file identity changed");
83
+ return current;
84
+ }
85
+
86
+ function sameDirectory(directory, expected) {
87
+ const current = lstatSync(directory, { bigint: true });
88
+ if (
89
+ !current.isDirectory() ||
90
+ current.isSymbolicLink() ||
91
+ !sameIdentity(current, expected)
92
+ )
93
+ throw corruptStore(directory, "query bundle directory identity changed");
94
+ }
95
+
96
+ /** A derived representation; only the caller's verified manifest supplies lengths and hashes. */
97
+ export function createQueryBundlePlan(
98
+ manifest,
99
+ { maxFrameBytes = 64 * 1024 * 1024, maxBundleBytes = 0 } = {},
100
+ ) {
101
+ if (
102
+ !DIGEST.test(manifest?.digest) ||
103
+ !manifest.shards ||
104
+ !Number.isSafeInteger(maxFrameBytes) ||
105
+ maxFrameBytes < 1 ||
106
+ !Number.isSafeInteger(maxBundleBytes) ||
107
+ maxBundleBytes < 1
108
+ )
109
+ return null;
110
+ const buckets = Object.keys(manifest.shards).sort();
111
+ if (!buckets.length || buckets.length > 256) return null;
112
+ const key = createHash("sha256")
113
+ .update(NAME_DOMAIN)
114
+ .update(manifest.digest)
115
+ .digest("hex");
116
+ const name = `query-00-${key}.json`;
117
+ const frames = [];
118
+ let payloadBytes = 0;
119
+ for (const bucket of buckets) {
120
+ const entry = manifest.shards[bucket];
121
+ if (
122
+ !/^[a-f0-9]{2}$/u.test(bucket) ||
123
+ !DIGEST.test(entry?.queryDigest) ||
124
+ !Number.isSafeInteger(entry.queryBytes) ||
125
+ entry.queryBytes < 1 ||
126
+ entry.queryBytes > maxFrameBytes
127
+ )
128
+ return null;
129
+ if (`query-${bucket}-${entry.queryDigest.slice(7)}.json` === name)
130
+ return null;
131
+ payloadBytes += entry.queryBytes;
132
+ if (!Number.isSafeInteger(payloadBytes) || payloadBytes > maxBundleBytes)
133
+ return null;
134
+ frames.push(
135
+ Object.freeze({
136
+ bucket,
137
+ byteLength: entry.queryBytes,
138
+ digest: entry.queryDigest,
139
+ }),
140
+ );
141
+ }
142
+ const header = Buffer.from(
143
+ `${MAGIC}${JSON.stringify({ manifestDigest: manifest.digest, frames })}\n`,
144
+ );
145
+ const byteLength = header.length + payloadBytes;
146
+ if (!Number.isSafeInteger(byteLength) || byteLength > maxBundleBytes)
147
+ return null;
148
+ return Object.freeze({
149
+ name,
150
+ manifestDigest: manifest.digest,
151
+ frames: Object.freeze(frames),
152
+ header,
153
+ byteLength,
154
+ });
155
+ }
156
+
157
+ /**
158
+ * onFrame receives verified bytes; withhold results until the entire read succeeds.
159
+ * reuseFrameBuffer borrows storage only until onFrame settles. Opted-in callers
160
+ * must finish decoding before returning and must not retain the bytes or views.
161
+ * The default gives each callback its own independently retainable Buffer.
162
+ */
163
+ export async function readQueryBundle(
164
+ file,
165
+ plan,
166
+ { checkpoint = noop, onFrame = noop, reuseFrameBuffer = false } = {},
167
+ ) {
168
+ await checkpoint();
169
+ const before = regular(lstatSync(file, { bigint: true }), file);
170
+ let fd, opened;
171
+ try {
172
+ try {
173
+ fd = openSync(
174
+ file,
175
+ constants.O_RDONLY |
176
+ (constants.O_NOFOLLOW || 0) |
177
+ (constants.O_NONBLOCK || 0),
178
+ );
179
+ } catch (error) {
180
+ if (["ELOOP", "ENOENT", "ENOTDIR"].includes(error.code))
181
+ throw corruptStore(
182
+ file,
183
+ "query bundle path changed while opening",
184
+ error,
185
+ );
186
+ throw error;
187
+ }
188
+ opened = regular(fstatSync(fd, { bigint: true }), file);
189
+ if (!samePathHandle(file, before, opened))
190
+ throw corruptStore(file, "query bundle changed while opening");
191
+ if (opened.size !== BigInt(plan.byteLength))
192
+ throw corruptBundle(file, "byte length does not match manifest plan");
193
+ async function readBytes(bytes, hash) {
194
+ let offset = 0;
195
+ while (offset < bytes.length) {
196
+ const count = readSync(
197
+ fd,
198
+ bytes,
199
+ offset,
200
+ Math.min(CHUNK_BYTES, bytes.length - offset),
201
+ null,
202
+ );
203
+ if (!count) throw corruptBundle(file, "unexpected end of file");
204
+ hash?.update(bytes.subarray(offset, offset + count));
205
+ offset += count;
206
+ await checkpoint();
207
+ }
208
+ }
209
+ const header = Buffer.allocUnsafe(plan.header.length);
210
+ await readBytes(header);
211
+ if (!header.equals(plan.header))
212
+ throw corruptBundle(file, "header does not match current manifest");
213
+ const reusable = reuseFrameBuffer
214
+ ? Buffer.allocUnsafe(
215
+ Math.max(...plan.frames.map((frame) => frame.byteLength)),
216
+ )
217
+ : null;
218
+ for (const frame of plan.frames) {
219
+ const bytes = reusable
220
+ ? reusable.subarray(0, frame.byteLength)
221
+ : Buffer.allocUnsafe(frame.byteLength);
222
+ const hash = createHash("sha256");
223
+ await readBytes(bytes, hash);
224
+ if (`sha256:${hash.digest("hex")}` !== frame.digest)
225
+ throw corruptBundle(
226
+ file,
227
+ `frame digest does not match bucket ${frame.bucket}`,
228
+ );
229
+ await onFrame(frame.bucket, bytes);
230
+ }
231
+ if (readSync(fd, Buffer.allocUnsafe(1), 0, 1, null) !== 0)
232
+ throw corruptBundle(file, "trailing data");
233
+ await checkpoint();
234
+ const after = regular(fstatSync(fd, { bigint: true }), file);
235
+ if (!sameIdentity(opened, after))
236
+ throw corruptStore(file, "query bundle descriptor identity changed");
237
+ sameFile(file, opened);
238
+ if (
239
+ after.size !== opened.size ||
240
+ after.mtimeNs !== opened.mtimeNs ||
241
+ after.ctimeNs !== opened.ctimeNs
242
+ )
243
+ throw corruptBundle(file, "file changed while reading");
244
+ } catch (error) {
245
+ if (fd !== undefined) {
246
+ // Content errors are repairable only while the pathname still names the
247
+ // inode we opened. Otherwise a failed read could authorize replacing an
248
+ // unrelated file that appeared during a cooperative checkpoint.
249
+ const current = regular(fstatSync(fd, { bigint: true }), file);
250
+ if (opened && !sameIdentity(current, opened))
251
+ throw corruptStore(file, "query bundle descriptor identity changed");
252
+ sameFile(file, current);
253
+ }
254
+ throw error;
255
+ } finally {
256
+ if (fd !== undefined) closeSync(fd);
257
+ }
258
+ }
259
+
260
+ /** Caller holds the authority lock throughout construction, publication, and cleanup. */
261
+ export async function writeQueryBundle(
262
+ file,
263
+ plan,
264
+ { checkpoint = noop, getFrame, checkDirectories } = {},
265
+ ) {
266
+ if (typeof getFrame !== "function" || typeof checkDirectories !== "function")
267
+ throw new TypeError(
268
+ "query bundle write requires getFrame and checkDirectories",
269
+ );
270
+ if (basename(file) !== plan.name)
271
+ throw corruptStore(file, "query bundle target does not match its plan");
272
+ await checkpoint();
273
+ await checkDirectories();
274
+ const directory = dirname(file);
275
+ const parent = lstatSync(directory, { bigint: true });
276
+ sameDirectory(directory, parent);
277
+ const originalTarget = targetStat(file);
278
+ const temporary = join(directory, `query-rebuild-${randomUUID()}.tmp`);
279
+ let fd, created;
280
+ let published = false;
281
+ try {
282
+ fd = openSync(
283
+ temporary,
284
+ constants.O_WRONLY |
285
+ constants.O_CREAT |
286
+ constants.O_EXCL |
287
+ (constants.O_NOFOLLOW || 0),
288
+ 0o600,
289
+ );
290
+ created = regular(fstatSync(fd, { bigint: true }), temporary);
291
+ async function writeBytes(bytes, hash) {
292
+ let offset = 0;
293
+ while (offset < bytes.length) {
294
+ const count = writeSync(
295
+ fd,
296
+ bytes,
297
+ offset,
298
+ Math.min(CHUNK_BYTES, bytes.length - offset),
299
+ );
300
+ if (!count)
301
+ throw Object.assign(
302
+ new Error("query bundle write made no progress"),
303
+ { code: "EIO" },
304
+ );
305
+ hash?.update(bytes.subarray(offset, offset + count));
306
+ offset += count;
307
+ await checkpoint();
308
+ }
309
+ }
310
+ await writeBytes(plan.header);
311
+ for (const frame of plan.frames) {
312
+ const bytes = await getFrame(frame.bucket);
313
+ if (!Buffer.isBuffer(bytes) || bytes.length !== frame.byteLength)
314
+ throw corruptBundle(
315
+ file,
316
+ `source frame does not match bucket ${frame.bucket}`,
317
+ );
318
+ const sourceHash = createHash("sha256");
319
+ for (let offset = 0; offset < bytes.length; offset += CHUNK_BYTES) {
320
+ sourceHash.update(bytes.subarray(offset, offset + CHUNK_BYTES));
321
+ await checkpoint();
322
+ }
323
+ if (`sha256:${sourceHash.digest("hex")}` !== frame.digest)
324
+ throw corruptBundle(
325
+ file,
326
+ `source frame does not match bucket ${frame.bucket}`,
327
+ );
328
+ const writtenHash = createHash("sha256");
329
+ await writeBytes(bytes, writtenHash);
330
+ if (`sha256:${writtenHash.digest("hex")}` !== frame.digest)
331
+ throw corruptBundle(
332
+ file,
333
+ `source frame changed while writing bucket ${frame.bucket}`,
334
+ );
335
+ }
336
+ const written = regular(fstatSync(fd, { bigint: true }), temporary);
337
+ if (!sameIdentity(created, written))
338
+ throw corruptStore(temporary, "query bundle temporary identity changed");
339
+ if (written.size !== BigInt(plan.byteLength))
340
+ throw corruptBundle(file, "written byte length does not match plan");
341
+ fsyncSync(fd);
342
+ await checkpoint();
343
+ closeSync(fd);
344
+ fd = undefined;
345
+ await checkDirectories();
346
+ sameDirectory(directory, parent);
347
+ sameFile(temporary, created);
348
+ const currentTarget = targetStat(file);
349
+ if (
350
+ Boolean(originalTarget) !== Boolean(currentTarget) ||
351
+ (originalTarget && !sameIdentity(originalTarget, currentTarget))
352
+ )
353
+ throw corruptStore(
354
+ file,
355
+ "query bundle target identity changed before publication",
356
+ );
357
+ renameSync(temporary, file);
358
+ published = true;
359
+ syncDirectory(directory);
360
+ } finally {
361
+ if (fd !== undefined) closeSync(fd);
362
+ if (!published && created) {
363
+ // An unsafe directory or a replaced temp path is not ours to delete.
364
+ // Preserve the original failure rather than hiding it with cleanup errors.
365
+ try {
366
+ await checkDirectories();
367
+ sameDirectory(directory, parent);
368
+ sameFile(temporary, created);
369
+ unlinkSync(temporary);
370
+ } catch {
371
+ /* Leave an untrusted/redirected temporary path untouched. */
372
+ }
373
+ }
374
+ }
375
+ }
@@ -0,0 +1,28 @@
1
+ import { performance } from "node:perf_hooks";
2
+ import { setImmediate, setTimeout } from "node:timers/promises";
3
+
4
+ // These are host control signals, not serialized MemoryRecallRequest fields.
5
+ export function checkMemoryQueryAborted(signal) {
6
+ signal?.throwIfAborted();
7
+ }
8
+
9
+ export function memoryLockWait(signal) {
10
+ return async (milliseconds) => {
11
+ checkMemoryQueryAborted(signal);
12
+ await setTimeout(milliseconds, undefined, { signal });
13
+ checkMemoryQueryAborted(signal);
14
+ };
15
+ }
16
+
17
+ /** Yield between bounded shards while retaining the authority lock/snapshot. */
18
+ export function createMemoryQueryCheckpoint(signal) {
19
+ let yieldedAt = performance.now();
20
+ return async (force = false) => {
21
+ checkMemoryQueryAborted(signal);
22
+ if (force || performance.now() - yieldedAt >= 8) {
23
+ await setImmediate(undefined, { signal });
24
+ yieldedAt = performance.now();
25
+ }
26
+ checkMemoryQueryAborted(signal);
27
+ };
28
+ }