chainlesschain 0.165.5 → 0.165.8

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 (256) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/assets/{AIOps-CEeYTeDB.js → AIOps-B3gWmXjo.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BeRUQ3V2.js → ActionButton-G9pdT-0e.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DrV718XF.js → Analytics-Ca30J7m2.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-Cd2Frt7Q.js → AppLayout-BtVTm8PU.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-CUJMlORU.js → Artifacts-BhViNa6u.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CXJcfT6p.js → Audit-DhKq-FnY.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DOv6Z7H9.js → BackgroundAgents-BL0SVbnE.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-BwdDyBI0.js → Backup-BWkblnFi.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-BmLn4kYH.js → BaseInput-ClaRNrF8.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-COg8pAW2.js → Chat-sZE2Z77o.js} +4 -4
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-BAfKOnRe.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-BCP4uoU8.js → Checkbox-Cvhay5WM.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-pRt6Y9JI.js → Codegen-BpejL-4N.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DLaprKhS.js → Col-g2Ki6g_1.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DyATsz5f.js → Community-D2xKbNo9.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-BXAaupZK.js → Compact-DbL1Pds3.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-DpcJBELr.js → Compliance-DGtZCV4c.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-DG4EFWyd.js → Cowork-4kQpoNsI.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-F6Oy5n2P.js → Cron-BxTYXXAN.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BOdgtalX.js → Crosschain-k0J0LT2N.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-DT1dSkjH.js → DID-BaqhoPgN.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-NBUIqWzC.js → Dashboard-T4RVPIM1.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-CSpHeMYB.js → Dropdown-DszOToWq.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-CEG0xISr.js → EmailListRenderer-C9KJU7HF.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BTZ0BZna.js → FamilyGuardDashboard-Cmr0JnsA.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-BuuCTn2V.js → Federation-BI-_2xZX.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-KAVceevk.js → FormItemContext-DsnDEPsl.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-DnHpcQvW.js → GenericCardRenderer-BLncAKKK.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-C_B_0HwB.js → Git-BPQhGXDn.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-DPSZuzuu.js → Governance-CyElbUQW.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-BV-06V7q.js → Inference-CcSntBQD.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-wpDuupn6.js → KnowledgeGraph-p6e7HZ2r.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-Bseca1_I.js → Logs-CNEtr-wz.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-Bj9xI0YH.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-d3kM4DDL.js → Marketplace-Dd2notAJ.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-DQ_xZ23i.js → McpTools-BBsN2CSW.js} +4 -4
  38. package/src/assets/web-panel/assets/{Memory-CRIeYO4L.js → Memory-Dg2uTvwx.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-BsllIa9l.js → MobileBridge-r1YMRiJV.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-BUuQy30X.js → MobileProjects-C-89kSm4.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-BOFDIzrC.js → Mtc-CrPZcVgf.js} +5 -5
  42. package/src/assets/web-panel/assets/{MtcAudit-BQg-vyvG.js → MtcAudit-sxi7hqJb.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-Bo1jrPdN.js → Multisig-CAgOMfF1.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-Bmod8alw.js → NLProgramming-DafaPts3.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-CGGFL8w-.js → Notes-CJM-xUW_.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-BsZvCJxC.js → NotificationSettings-L0ZjfAh_.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-C1-Quo_h.js → OrderTableRenderer-BB1CvCK0.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-BjOeDYOi.js → Organization-DeLtgAD8.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-DwVV3l5A.js → Overflow-CKC2b10z.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-Cu3DQT9W.js → P2P-eyf2rzY1.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-Cg0gR7dH.js → PdhVaultBrowser-5upNIOW8.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-CsAXxRN5.js → Permissions-B8p3W6JK.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-C-nNmnYp.js → PersonalDataHub-BnRMxTq3.js} +5 -5
  54. package/src/assets/web-panel/assets/{Pipeline-BOnW7nNc.js → Pipeline-DjCNI1li.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-ClLSyGKt.js → Privacy-u6gXLbWT.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-DuLvjjq7.js → ProjectInit-BZAw4tkM.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-DQYYbDD9.js → ProjectSettings-B1Tr72q7.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-Drw8MBGK.js → Projects-DO7HFuBQ.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-ckqHQe6K.js → Providers-BjCztyhj.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-DW5BXk-G.js → QrScannerModal-ZWyCUbR1.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-DDLnhNTp.js → QuickAsk-DhDjeW4G.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-PJQ2C91U.js → Recommend-R_CN2MuU.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-s6wmda34.js → RemoteSession-uxFcujeu.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-DC2sb-I3.js → Reputation-DX8D7rks.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-hPGk1eGj.js → Row-BYahQILD.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-RIvfZql0.js → RssFeed-CUSQ2tm-.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-DFg1G1eR.js → Search-CnN_S8Cs.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-D6H5p8Dp.js → Security-DcZlh-O4.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-nxYiFV_w.js → Services-ZhBOjzIX.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-BmgFNAdB.js → Skeleton-D5Qnq_lI.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CsaaD2av.js → Skills-BC9cZ3Be.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-yM5y9yvK.js → Sla-DauJ3E8_.js} +1 -1
  73. package/src/assets/web-panel/assets/SpeechSettings-DbNeZ_fh.js +1 -0
  74. package/src/assets/web-panel/assets/{SyncSettings-CFVhEyyr.js → SyncSettings-DUvJbSct.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-DdO02Inn.js → Tasks-BXa-5noQ.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-Eo2d8Llu.js → Templates-JxaiUt_3.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-ChESOXgy.js → Tenant-BW4ERQN8.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-BJ7oDxTI.js → Terminal-DltUbdtv.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-hWX0fUvz.js → TimelineRenderer-CMoZz0Tc.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-DVBZQnd-.js → Tokens-D_VEV60K.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-D89cQfVq.js → Trigger-CCXTCs0R.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-BIVSb4-V.js → Trust-lkGRIPcG.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-B58gWopl.js → UkeySign-BfGeQ9HX.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-DhHI7bmG.js → VideoEditing-BEC7pYvc.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-C4FheWS_.js → Wallet-BZdG24o0.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-DnPRq-Bx.js → WebAuthn-yoEddedp.js} +3 -3
  87. package/src/assets/web-panel/assets/{WorkflowEditor-BerRPjpJ.js → WorkflowEditor-BXZEprOW.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-BzZ52iKr.js → chat-gg0bzZal.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-BI_E4BAn.js → colors-DjRVRuin.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-d50mr3yk.js → compact-item-su-dieAc.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-C6FsQ1IH.js → createContext-Ci3S8oKF.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-CxbFX9uH.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-DLZEMgLP.js → hasIn-D8F10heH.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-D-aBumtY.js → index-11wtYQiF.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CjuKZBqJ.js → index-1IgxgALJ.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-9H_M2jju.js → index-1agckWSq.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DE0V6cp-.js → index-5JqhujnR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Y2-q7QLm.js → index-6Tniqk1s.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DoFtCVZ7.js → index-8Z-8BIlN.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-KNGgO4Wm.js → index-BCI5v0yB.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DY4j5zkF.js → index-BDJntYmJ.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BZjjdQ62.js → index-BGzixOGZ.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BTpIOTfR.js → index-BMMOVoLD.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BB9SqVSt.js → index-BTFpdBtt.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-AHr7ryWf.js → index-Ba_HyPnE.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Pvf30m8Q.js → index-BbF1IHof.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CRN5TRTQ.js → index-BgT9su_e.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CUaEHfQ0.js → index-BzPB6kGZ.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CdKt9fOd.js → index-C6ygzplr.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Dec0Kf_Z.js → index-CC3ZDjzY.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-IPkwSAW_.js → index-CEmXRhAE.js} +1 -1
  112. package/src/assets/web-panel/assets/index-CJGOlduY.js +1 -0
  113. package/src/assets/web-panel/assets/{index-C3k8kevG.js → index-CMPqd5Cv.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-A5CDWP7y.js → index-COWd8uGx.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CO8DAF7U.js → index-CPIYSp4H.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CVzuawCX.js → index-CR0h6seT.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Co7s9LsB.js → index-CUmDhC4j.js} +1 -1
  118. package/src/assets/web-panel/assets/index-CkBCN5yH.js +1 -0
  119. package/src/assets/web-panel/assets/{index-CLoTQr0W.js → index-CusgZPtc.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-B81mo1Et.js → index-DBAETXft.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BcSUl9fA.js → index-DIJ2qFOC.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Q5Tn735s.js → index-Dbq4NMET.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-GXE0D8Nx.js → index-DkMEF5VT.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-TWG-_D1M.js → index-DkfQR3hM.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BAE3hwev.js → index-DnLucOn9.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CgkoH3_g.js → index-DugB_aKa.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BRGx3w6T.js → index-DyLUarhZ.js} +3 -3
  128. package/src/assets/web-panel/assets/{index-BeM4hfht.js → index-T6_6ygJZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DsscwxPE.js → index-Tu8eWqh-.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Bmr_vxXD.js → index-W7XUgdVL.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BoNZlzhQ.js → index-dHZinfko.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DqkbHHg8.js → index-jyNgp5FI.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-D-4Hzgej.js → initDefaultProps-Cv4p8e4w.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-D4Wl4xU7.js → motion-B8EwmMOw.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-Cd5eQvL0.js → move-B8R9F8TK.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-B4ilslCW.js → mtc-parser-DoFYz5Bp.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-Ckarx-tf.js → omit-CHWYLBjI.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-QJ0bpCmc.js → pickAttrs-CXuPDO77.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-CKHm-tq8.js → placementArrow-BaAtUUon.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-CV6a_w_Y.js → responsiveObserve-DCc4zcDD.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-mHpeQFgk.js → slide-B_lx89oZ.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-DIaQNQWA.js → statusUtils-DE8DPmR0.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-PJpzavV8.js → styleChecker-1ktXOsL_.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-BH7zTw8S.js → useFlexGapSupport-xH89-wjh.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-BDNG3JDd.js → useFs-DscvfW5p.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-CY2VWdUg.js → usePersonalDataHub-RdMKQta7.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-D0kw9jhz.js → vnode-Z3wTni2T.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-B5g7TN7r.js → zoom-B0iChCsm.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +3 -3
  151. package/src/commands/agent.js +105 -62
  152. package/src/commands/background-session.js +100 -10
  153. package/src/commands/git.js +39 -0
  154. package/src/commands/mcp.js +5 -0
  155. package/src/commands/plugin.js +160 -29
  156. package/src/commands/remote-control.js +295 -110
  157. package/src/commands/session-group.js +131 -0
  158. package/src/commands/session-location.js +48 -0
  159. package/src/commands/session-message.js +171 -0
  160. package/src/commands/session.js +22 -0
  161. package/src/commands/sync-providers.js +4 -1
  162. package/src/commands/update.js +1 -0
  163. package/src/data/changelog.json +41 -2
  164. package/src/gateways/ws/ws-agent-handler.js +20 -12
  165. package/src/harness/jsonl-session-store.js +279 -37
  166. package/src/harness/mcp-client.js +832 -91
  167. package/src/harness/session-index.js +15 -4
  168. package/src/lib/agent-worktree.js +8 -1
  169. package/src/lib/auto-mode-safety-classifier.js +3 -17
  170. package/src/lib/background-agent-keeper-protocol.js +26 -6
  171. package/src/lib/background-agent-supervisor.js +17 -1
  172. package/src/lib/background-session-transport.js +153 -27
  173. package/src/lib/browser-evidence.js +1405 -0
  174. package/src/lib/chrome-connector.js +465 -79
  175. package/src/lib/claude-project-auto-memory.js +481 -0
  176. package/src/lib/claude-project-storage-layout.js +104 -0
  177. package/src/lib/cloud/cloud-client.js +40 -0
  178. package/src/lib/execution-location-local-supervisor.mjs +226 -0
  179. package/src/lib/execution-location-runner-lifecycle.js +991 -0
  180. package/src/lib/execution-location-target-preflight.js +333 -0
  181. package/src/lib/execution-location-target.js +783 -13
  182. package/src/lib/file-lines.js +6 -1
  183. package/src/lib/gateway-client-resilience.js +571 -0
  184. package/src/lib/gitlab-mr-worktree.js +176 -0
  185. package/src/lib/hooks-v2-producers.js +119 -15
  186. package/src/lib/hooks-v2-workspace-context.js +44 -1
  187. package/src/lib/host-resource-budget.js +295 -0
  188. package/src/lib/ide-context.js +15 -2
  189. package/src/lib/llm-config-defaults.js +43 -0
  190. package/src/lib/mcp-client.js +2 -0
  191. package/src/lib/mcp-headers-helper.js +47 -5
  192. package/src/lib/mcp-lifecycle-authority.js +887 -0
  193. package/src/lib/mcp-oauth.js +156 -26
  194. package/src/lib/mcp-tls.js +330 -0
  195. package/src/lib/output-styles.js +12 -0
  196. package/src/lib/paths.js +260 -32
  197. package/src/lib/permission-request.js +48 -0
  198. package/src/lib/plugin-runtime/bin.js +3 -1
  199. package/src/lib/plugin-runtime/hooks.js +3 -1
  200. package/src/lib/plugin-runtime/install.js +730 -71
  201. package/src/lib/plugin-runtime/lsp.js +4 -4
  202. package/src/lib/plugin-runtime/marketplace-archive-source.js +366 -0
  203. package/src/lib/plugin-runtime/marketplace-catalog.js +63 -6
  204. package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
  205. package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
  206. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1 -0
  207. package/src/lib/plugin-runtime/marketplace-source-adapter.js +188 -0
  208. package/src/lib/plugin-runtime/marketplace-source-cache.js +11 -1
  209. package/src/lib/plugin-runtime/mcp.js +3 -1
  210. package/src/lib/plugin-runtime/monitors.js +3 -1
  211. package/src/lib/plugin-runtime/remote-source.js +583 -58
  212. package/src/lib/plugin-runtime/settings.js +3 -1
  213. package/src/lib/plugin-runtime/trust.js +274 -13
  214. package/src/lib/plugin-security.js +393 -41
  215. package/src/lib/plugin-source-identity.js +850 -0
  216. package/src/lib/process-execution-broker/credential-agent.js +210 -41
  217. package/src/lib/process-execution-broker/index.js +15 -1
  218. package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
  219. package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
  220. package/src/lib/project-mcp-trust.js +165 -10
  221. package/src/lib/remote-approval-bridge.js +136 -46
  222. package/src/lib/remote-control.js +217 -31
  223. package/src/lib/resume-session.js +9 -6
  224. package/src/lib/session-core-singletons.js +26 -11
  225. package/src/lib/session-host-lease.js +52 -16
  226. package/src/lib/session-lifecycle-scope.js +153 -0
  227. package/src/lib/session-message-fabric.js +1252 -0
  228. package/src/lib/session-projection.js +286 -3
  229. package/src/lib/session-runtime-retention.js +155 -0
  230. package/src/lib/session-store-guard.js +3 -1
  231. package/src/lib/session-workbench-store.js +466 -0
  232. package/src/lib/settings-loader.cjs +29 -0
  233. package/src/lib/spellcheck.js +211 -0
  234. package/src/lib/sub-agent-context.js +9 -9
  235. package/src/lib/sync-cli-db.js +485 -129
  236. package/src/lib/sync-credentials.js +31 -20
  237. package/src/lib/web-fetch.js +112 -40
  238. package/src/lib/web-search.js +127 -61
  239. package/src/lib/workspace-trust.js +793 -0
  240. package/src/repl/agent-repl.js +175 -19
  241. package/src/repl/permission-prompt.js +29 -8
  242. package/src/repl/repl-keybindings.js +55 -0
  243. package/src/runtime/agent-core.js +362 -20
  244. package/src/runtime/bootstrap.js +37 -13
  245. package/src/runtime/coding-agent-contract-shared.cjs +11 -4
  246. package/src/runtime/headless-runner.js +281 -102
  247. package/src/runtime/headless-stream.js +199 -30
  248. package/src/runtime/mcp-config.js +298 -6
  249. package/src/runtime/policies/agent-policy.js +10 -0
  250. package/src/runtime/status-diagnostics-lite.js +9 -1
  251. package/src/assets/web-panel/assets/ChatBubbleRenderer-4gGkdGgA.js +0 -1
  252. package/src/assets/web-panel/assets/MarkdownRenderer-B4RLp2zs.js +0 -1
  253. package/src/assets/web-panel/assets/SpeechSettings-DPy1XMYh.js +0 -1
  254. package/src/assets/web-panel/assets/devWarning-CagEcIex.js +0 -1
  255. package/src/assets/web-panel/assets/index-pzT9PpOU.js +0 -1
  256. package/src/assets/web-panel/assets/index-z1kFadaX.js +0 -1
@@ -27,6 +27,7 @@ import {
27
27
  sameInteractionBinding,
28
28
  } from "../lib/interaction-binding.js";
29
29
  import {
30
+ addHooksV2EventObserver,
30
31
  emitHooksV2Event,
31
32
  executeHooksV2Event,
32
33
  resolvePromptExpansion,
@@ -42,6 +43,7 @@ import { composeSystemPrompt } from "./system-prompt.js";
42
43
  import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
43
44
  import { sanitizeToolPairs } from "../harness/prompt-compressor.js";
44
45
  import { compactConversationWithProvider } from "../harness/provider-backed-compaction.js";
46
+ import { HostResourceBudget } from "../lib/host-resource-budget.js";
45
47
  import { projectCanonicalResumeMessages } from "../lib/session-message-provenance.js";
46
48
  import { isAbortError } from "../lib/abort-utils.js";
47
49
  import { expandFileRefsAsync } from "./file-ref-expander.js";
@@ -65,6 +67,7 @@ import {
65
67
  resolveAgentMcp,
66
68
  resolvePermissionPromptTool,
67
69
  makePermissionPromptConfirmer,
70
+ readHeadlessMcpConfigErrors,
68
71
  } from "./mcp-config.js";
69
72
  import { maybeApplyToolSearch } from "./mcp-tool-search.js";
70
73
  import {
@@ -398,6 +401,9 @@ export function planSnapshot(pm) {
398
401
  const MAX_PLAN_REVIEW_SNAPSHOT_CHARS = 24000;
399
402
  const MAX_PLAN_REVIEW_COMMENTS = 64;
400
403
  const MAX_PLAN_REVIEW_COMMENT_CHARS = 2000;
404
+ const HOST_EVENT_BACKLOG_CODE = "CC_HOST_EVENT_BACKLOG_EXHAUSTED";
405
+ const HOST_EVENT_BACKLOG_ERROR =
406
+ "CC_HOST_EVENT_BACKLOG_EXHAUSTED: event backlog limit reached";
401
407
 
402
408
  function boundedReviewString(value, limit) {
403
409
  return String(value == null ? "" : value).slice(0, limit);
@@ -1463,6 +1469,11 @@ async function runAgentHeadlessStreamInWorkspace(
1463
1469
  deps[STREAM_SESSION_ID] ||
1464
1470
  options.sessionId ||
1465
1471
  `headless-stream-${Date.now()}-${process.pid}`;
1472
+ // The input stream may drive many turns. Allocate once at the stream-run
1473
+ // boundary so every turn (and its nested agents) shares cache/backlog limits.
1474
+ // SessionResourceBudget remains separately leased by executeTool.
1475
+ const hostResourceBudget =
1476
+ options.hostResourceBudget || new HostResourceBudget();
1466
1477
  const persist =
1467
1478
  (Boolean(options.sessionId) || options.observabilityScope != null) &&
1468
1479
  options.ephemeral !== true;
@@ -1483,6 +1494,10 @@ async function runAgentHeadlessStreamInWorkspace(
1483
1494
  fieldGate,
1484
1495
  });
1485
1496
  const emit = streamCoalescer.emit;
1497
+ const removeHookObserver =
1498
+ options.includeHookEvents === true
1499
+ ? addHooksV2EventObserver(sessionId, (event) => emit(event))
1500
+ : null;
1486
1501
  streamCleanup.setOutputCleanup(() => streamCoalescer.flush?.());
1487
1502
 
1488
1503
  const hasInjectedSessionStore =
@@ -1694,9 +1709,8 @@ async function runAgentHeadlessStreamInWorkspace(
1694
1709
  const { loadHooks, projectHookTrustNotice, attachAuthorityErrors } =
1695
1710
  await import("../lib/settings-hooks.cjs");
1696
1711
  const loaded = loadHooks({ cwd, settingsFile: options.settingsFile });
1697
- const { mergePluginHooks } = await import(
1698
- "../lib/plugin-runtime/hooks.js"
1699
- );
1712
+ const { mergePluginHooks } =
1713
+ await import("../lib/plugin-runtime/hooks.js");
1700
1714
  const effectiveHooks = mergePluginHooks(
1701
1715
  attachAuthorityErrors(loaded.hooks, loaded.authorityErrors),
1702
1716
  { cwd },
@@ -1777,9 +1791,8 @@ async function runAgentHeadlessStreamInWorkspace(
1777
1791
  });
1778
1792
 
1779
1793
  if (managedSettings) {
1780
- const { assertManagedPermissionMode } = await import(
1781
- "../lib/settings-loader.cjs"
1782
- );
1794
+ const { assertManagedPermissionMode } =
1795
+ await import("../lib/settings-loader.cjs");
1783
1796
  assertManagedPermissionMode(options.permissionMode, managedSettings);
1784
1797
  }
1785
1798
  const perm = resolvePermissionMode(options.permissionMode);
@@ -2267,9 +2280,8 @@ async function runAgentHeadlessStreamInWorkspace(
2267
2280
  : null;
2268
2281
  if (!instructionExcludes) {
2269
2282
  try {
2270
- const { readStringArraySetting } = await import(
2271
- "../lib/settings-loader.cjs"
2272
- );
2283
+ const { readStringArraySetting } =
2284
+ await import("../lib/settings-loader.cjs");
2273
2285
  const fromSettings = readStringArraySetting("instructionExcludes", {
2274
2286
  cwd,
2275
2287
  settingsFile: options.settingsFile,
@@ -2334,9 +2346,8 @@ async function runAgentHeadlessStreamInWorkspace(
2334
2346
  // Best-effort; no-op when project memory is off or no hook is registered.
2335
2347
  if (settingsHooks && _loadedInstructions) {
2336
2348
  try {
2337
- const { runInstructionsLoadedHooks } = await import(
2338
- "../lib/settings-hook-events.js"
2339
- );
2349
+ const { runInstructionsLoadedHooks } =
2350
+ await import("../lib/settings-hook-events.js");
2340
2351
  const ctx = runInstructionsLoadedHooks(settingsHooks, {
2341
2352
  files: _loadedInstructions.files,
2342
2353
  cwd,
@@ -2376,9 +2387,8 @@ async function runAgentHeadlessStreamInWorkspace(
2376
2387
  // settings.json SessionStart hooks → inject session context once (observe-only).
2377
2388
  if (settingsHooks) {
2378
2389
  try {
2379
- const { runSessionStartHooks } = await import(
2380
- "../lib/settings-hook-events.js"
2381
- );
2390
+ const { runSessionStartHooks } =
2391
+ await import("../lib/settings-hook-events.js");
2382
2392
  const ctx = runSessionStartHooks(settingsHooks, {
2383
2393
  source: "startup",
2384
2394
  cwd,
@@ -2489,6 +2499,20 @@ async function runAgentHeadlessStreamInWorkspace(
2489
2499
  let sanitizeRolesNextTurn =
2490
2500
  resumedMessages > 0 && messages[messages.length - 1]?.role === "user";
2491
2501
 
2502
+ // `system:init` intentionally precedes MCP connection so stream consumers
2503
+ // receive their manifest promptly. Validation itself is local and side-effect
2504
+ // free, so preflight just its bounded, redacted projection here; the normal
2505
+ // resolver below remains authoritative for parsing and connection.
2506
+ let initialMcpServerErrors = [];
2507
+ if (options.mcpConfig) {
2508
+ try {
2509
+ initialMcpServerErrors = readHeadlessMcpConfigErrors(options.mcpConfig);
2510
+ } catch {
2511
+ // The normal resolver reports unreadable/malformed files as its existing
2512
+ // config error result. Never place filesystem/parser details in init.
2513
+ }
2514
+ }
2515
+
2492
2516
  emit({
2493
2517
  type: "system",
2494
2518
  subtype: "init",
@@ -2517,6 +2541,9 @@ async function runAgentHeadlessStreamInWorkspace(
2517
2541
  mcp: Boolean(options.mcpConfig) || options.useRegisteredMcp !== false,
2518
2542
  enabledToolNames,
2519
2543
  }),
2544
+ ...(initialMcpServerErrors.length > 0
2545
+ ? { mcp_server_errors: initialMcpServerErrors }
2546
+ : {}),
2520
2547
  slash_commands: [...SESSION_SLASH_COMMANDS],
2521
2548
  input_format: "stream-json",
2522
2549
  additional_directories: additionalDirectories,
@@ -2596,6 +2623,7 @@ async function runAgentHeadlessStreamInWorkspace(
2596
2623
  },
2597
2624
  {
2598
2625
  writeErr,
2626
+ mcpConfigWarnings: false,
2599
2627
  loadMcpConfig: deps.loadMcpConfig,
2600
2628
  loadRegisteredMcp: deps.loadRegisteredMcp,
2601
2629
  loadIdeMcp: deps.loadIdeMcp,
@@ -2749,9 +2777,8 @@ async function runAgentHeadlessStreamInWorkspace(
2749
2777
  // the single-prompt runner + the REPL /add-dir path. Best-effort.
2750
2778
  if (hostMcp?.mcpClient && additionalDirectories.length > 0) {
2751
2779
  try {
2752
- const { notifyMcpRootsChanged, workspaceRootDirs } = await import(
2753
- "../repl/add-dir.js"
2754
- );
2780
+ const { notifyMcpRootsChanged, workspaceRootDirs } =
2781
+ await import("../repl/add-dir.js");
2755
2782
  notifyMcpRootsChanged(
2756
2783
  [hostMcp.mcpClient],
2757
2784
  workspaceRootDirs(options.cwd || process.cwd(), additionalDirectories),
@@ -2817,6 +2844,8 @@ async function runAgentHeadlessStreamInWorkspace(
2817
2844
  .startHeadlessRemoteApproval;
2818
2845
  _remoteApproval = await startRemoteApproval({
2819
2846
  agentSessionId: sessionId,
2847
+ allowLan: options.remoteControlAllowLan === true,
2848
+ env: process.env,
2820
2849
  });
2821
2850
  streamCleanup.setRemoteApproval(_remoteApproval);
2822
2851
  emit({
@@ -2840,6 +2869,78 @@ async function runAgentHeadlessStreamInWorkspace(
2840
2869
  }
2841
2870
  }
2842
2871
 
2872
+ const streamInteraction = {};
2873
+ if (interactiveQuestions) streamInteraction.askUser = interactionAskUser;
2874
+ if (options.includeHookEvents === true) {
2875
+ streamInteraction.emit = (kind, payload = {}) => {
2876
+ const subAgentId =
2877
+ typeof payload.subAgentId === "string" && payload.subAgentId.trim()
2878
+ ? payload.subAgentId.slice(0, 160)
2879
+ : null;
2880
+ if (!subAgentId) return;
2881
+ const base = {
2882
+ schema_version: 1,
2883
+ subagent_id: subAgentId,
2884
+ parent_id:
2885
+ typeof payload.parentSessionId === "string" &&
2886
+ payload.parentSessionId.trim()
2887
+ ? payload.parentSessionId.slice(0, 160)
2888
+ : sessionId,
2889
+ ...(typeof payload.role === "string" && payload.role.trim()
2890
+ ? { role: payload.role.trim().slice(0, 96) }
2891
+ : {}),
2892
+ };
2893
+ if (kind === "sub-agent.started") {
2894
+ emit({
2895
+ type: "subagent_started",
2896
+ ...base,
2897
+ background: payload.background === true,
2898
+ });
2899
+ } else if (
2900
+ kind === "sub-agent.completed" ||
2901
+ kind === "sub-agent.failed"
2902
+ ) {
2903
+ emit({
2904
+ type: "subagent_completed",
2905
+ ...base,
2906
+ status: kind === "sub-agent.failed" ? "failed" : "completed",
2907
+ background: payload.background === true,
2908
+ ...(Number.isFinite(payload.iterationCount)
2909
+ ? {
2910
+ iteration_count: Math.max(
2911
+ 0,
2912
+ Math.floor(payload.iterationCount),
2913
+ ),
2914
+ }
2915
+ : {}),
2916
+ });
2917
+ } else if (kind === "sub-agent.progress") {
2918
+ emit({
2919
+ type: "subagent_progress",
2920
+ ...base,
2921
+ event_type:
2922
+ typeof payload.event_type === "string"
2923
+ ? payload.event_type.slice(0, 96)
2924
+ : "unknown",
2925
+ ...(typeof payload.tool === "string" && payload.tool
2926
+ ? { tool: payload.tool.slice(0, 128) }
2927
+ : {}),
2928
+ ...(Number.isFinite(payload.iteration_count)
2929
+ ? {
2930
+ iteration_count: Math.max(
2931
+ 0,
2932
+ Math.floor(payload.iteration_count),
2933
+ ),
2934
+ }
2935
+ : {}),
2936
+ ...(Number.isFinite(payload.token_count)
2937
+ ? { token_count: Math.max(0, Math.floor(payload.token_count)) }
2938
+ : {}),
2939
+ });
2940
+ }
2941
+ };
2942
+ }
2943
+
2843
2944
  const loopOptionsBase = {
2844
2945
  model,
2845
2946
  provider,
@@ -2853,6 +2954,7 @@ async function runAgentHeadlessStreamInWorkspace(
2853
2954
  additionalDirectories,
2854
2955
  sessionId,
2855
2956
  sessionBudget: options.sessionBudget || null,
2957
+ hostResourceBudget,
2856
2958
  sessionHostSnapshot: canonicalResume?.snapshot || null,
2857
2959
  // Auto-checkpoint (Claude-Code parity): snapshot the work tree before each
2858
2960
  // mutating tool so a stream consumer (e.g. the IDE chat panel) can rewind.
@@ -2881,9 +2983,8 @@ async function runAgentHeadlessStreamInWorkspace(
2881
2983
  // ask_user_question round-trip (opt-in via CC_INTERACTIVE_QUESTIONS): give
2882
2984
  // the tool handler an askUser that emits question_request + blocks on stdin.
2883
2985
  // Absent → agent-core returns user_not_reachable (graceful proceed).
2884
- interaction: interactiveQuestions
2885
- ? { askUser: interactionAskUser }
2886
- : undefined,
2986
+ interaction:
2987
+ Object.keys(streamInteraction).length > 0 ? streamInteraction : undefined,
2887
2988
  prepareCall: goalPrepareCallFn,
2888
2989
  // --mcp-config wiring (tool defs + dispatch map + live client).
2889
2990
  mcpClient: mcp?.mcpClient || null,
@@ -3085,13 +3186,43 @@ async function runAgentHeadlessStreamInWorkspace(
3085
3186
  // Stop / Claude-Code Esc parity) instead of waiting in line behind it.
3086
3187
  // Normal events queue for the serial turn loop below; interrupts act on the
3087
3188
  // live per-turn AbortController and are never queued.
3189
+ // A normal input can contain arbitrary user data, so retain it only while it
3190
+ // is waiting for the serial turn loop. Interrupts/approvals/answers remain
3191
+ // out-of-band controls and never consume a queue slot.
3088
3192
  const queue = [];
3089
3193
  let wakeQueue = null;
3090
3194
  let inputDone = false;
3091
3195
  let currentAbort = null;
3196
+ let inputBacklogFailure = false;
3092
3197
  let slashRequestSeq = 0;
3093
3198
  const inputLines = readJsonLines(input);
3094
- streamCleanup.setInputCancel(() => inputLines.return?.());
3199
+ const releaseQueuedInputEvents = () => {
3200
+ while (queue.length > 0) {
3201
+ const queued = queue.shift();
3202
+ try {
3203
+ queued?.lease?.release?.();
3204
+ } catch {
3205
+ // Drain every opaque slot even when an injected test authority has a
3206
+ // faulty disposer. Its payload is deliberately never inspected here.
3207
+ }
3208
+ }
3209
+ };
3210
+ const failInputEventBacklog = () => {
3211
+ if (inputBacklogFailure) return;
3212
+ inputBacklogFailure = true;
3213
+ releaseQueuedInputEvents();
3214
+ // A flood can happen while a model turn is running. Abort that turn before
3215
+ // surfacing the stable host diagnostic; otherwise it could continue to do
3216
+ // paid/tool work after the host has refused its input backlog.
3217
+ currentAbort?.abort();
3218
+ streamCleanup.setReason("host_event_backlog_exhausted");
3219
+ streamCleanup.requestStop();
3220
+ wakeQueue?.();
3221
+ };
3222
+ streamCleanup.setInputCancel(() => {
3223
+ releaseQueuedInputEvents();
3224
+ return inputLines.return?.();
3225
+ });
3095
3226
  (async () => {
3096
3227
  try {
3097
3228
  for await (const line of inputLines) {
@@ -3161,7 +3292,26 @@ async function runAgentHeadlessStreamInWorkspace(
3161
3292
  );
3162
3293
  continue;
3163
3294
  }
3164
- queue.push(parsed);
3295
+ try {
3296
+ if (typeof hostResourceBudget?.admitEvent !== "function") {
3297
+ throw new TypeError(
3298
+ "host resource budget does not provide admitEvent()",
3299
+ );
3300
+ }
3301
+ const lease = hostResourceBudget.admitEvent();
3302
+ if (!lease || typeof lease.release !== "function") {
3303
+ throw new TypeError(
3304
+ "host resource budget event admission is invalid",
3305
+ );
3306
+ }
3307
+ queue.push({ parsed, lease });
3308
+ } catch {
3309
+ // Refuse the whole input stream rather than dropping one unbounded
3310
+ // event and then accepting more. The externally-visible error below
3311
+ // is fixed and contains none of the rejected line's content.
3312
+ failInputEventBacklog();
3313
+ break;
3314
+ }
3165
3315
  if (wakeQueue) wakeQueue();
3166
3316
  }
3167
3317
  } catch {
@@ -3181,7 +3331,15 @@ async function runAgentHeadlessStreamInWorkspace(
3181
3331
  })();
3182
3332
  const nextEvent = async () => {
3183
3333
  for (;;) {
3184
- if (queue.length > 0) return queue.shift();
3334
+ if (queue.length > 0) {
3335
+ const queued = queue.shift();
3336
+ try {
3337
+ return queued.parsed;
3338
+ } finally {
3339
+ // The serial loop now owns the event; it is no longer backlog.
3340
+ queued.lease.release();
3341
+ }
3342
+ }
3185
3343
  if (inputDone || options.signal?.aborted) return null;
3186
3344
  await new Promise((r) => {
3187
3345
  let settled = false;
@@ -3202,6 +3360,18 @@ async function runAgentHeadlessStreamInWorkspace(
3202
3360
  for (;;) {
3203
3361
  await deps.outputFlow?.wait?.();
3204
3362
  const parsed = await nextEvent();
3363
+ if (inputBacklogFailure) {
3364
+ emit({
3365
+ type: "result",
3366
+ subtype: "error_host_resource_budget",
3367
+ is_error: true,
3368
+ code: HOST_EVENT_BACKLOG_CODE,
3369
+ error: HOST_EVENT_BACKLOG_ERROR,
3370
+ session_id: sessionId,
3371
+ });
3372
+ sawError = true;
3373
+ break;
3374
+ }
3205
3375
  if (parsed == null) break; // stdin closed
3206
3376
  sessionHostLease?.assert?.();
3207
3377
  if (turnBindingPersistenceError) {
@@ -3690,9 +3860,8 @@ async function runAgentHeadlessStreamInWorkspace(
3690
3860
  // session can honour the user's standing preferences ("越用越聪明"
3691
3861
  // flywheel). Best-effort — a learning ledger must never break the chat.
3692
3862
  try {
3693
- const { appendFeedback } = await import(
3694
- "../lib/pdh-feedback-ledger.js"
3695
- );
3863
+ const { appendFeedback } =
3864
+ await import("../lib/pdh-feedback-ledger.js");
3696
3865
  appendFeedback({ sessionId, turnId, kind, comment });
3697
3866
  } catch {
3698
3867
  /* persistence is best-effort */
@@ -3823,9 +3992,8 @@ async function runAgentHeadlessStreamInWorkspace(
3823
3992
  // settings.json UserPromptSubmit hooks. block → skip this turn; context → inject.
3824
3993
  if (settingsHooks) {
3825
3994
  try {
3826
- const { runUserPromptSubmitHooks } = await import(
3827
- "../lib/settings-hook-events.js"
3828
- );
3995
+ const { runUserPromptSubmitHooks } =
3996
+ await import("../lib/settings-hook-events.js");
3829
3997
  const ups = runUserPromptSubmitHooks(settingsHooks, {
3830
3998
  prompt: userContent,
3831
3999
  cwd,
@@ -4315,6 +4483,7 @@ async function runAgentHeadlessStreamInWorkspace(
4315
4483
  : "completed",
4316
4484
  );
4317
4485
  await streamCleanup.cleanup();
4486
+ removeHookObserver?.();
4318
4487
 
4319
4488
  if (!pipeState.closed) {
4320
4489
  emit({ type: "system", subtype: "end", session_id: sessionId, turns });