chainlesschain 0.162.175 → 0.162.177

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 (311) hide show
  1. package/package.json +10 -10
  2. package/src/assets/web-panel/assets/{AIOps-DherW0Rh.js → AIOps-DT-VPWuN.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-CDGfqt2Y.js → ActionButton-DyOreOVN.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-BYhkzdgD.js → Analytics-DslNsKux.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-cEKk1cpb.js → AppLayout-BNJJAYME.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-_aXR3WWc.js → Artifacts-DoaAtEcY.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CYAf-gY7.js → Audit-DPG3WdJ9.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-D4Q20phR.js → BackgroundAgents-C_JO6R5G.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-Cq0Tyk58.js → Backup-Cv3BooyX.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-CPj_CdAv.js → BaseInput-D2uQXWu-.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-BQ-Qq0es.js → Chat-B4Vczyf3.js} +4 -4
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-DE6reP99.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-rke6l3yg.js → Checkbox-qTgk4VeP.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-DiacrIPq.js → Codegen-DlLWcIzj.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-Cx3BY-Up.js → Col-DNO73qp7.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DfmWiQy8.js → Community-vRDNpc4j.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-DdQnpxy5.js → Compact-CEWtIXni.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-lzliOH_r.js → Compliance-KgYC9Fxi.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-CYx4Un5k.js → Cowork-zj5wvkpT.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-BGDcPFlo.js → Cron-BLDoCozU.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-0_X5g2ri.js → Crosschain-BYnff4VY.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-C0PEf3Eu.js → DID-C75VFsVm.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-DULQjQ58.js → Dashboard-C4Gutni2.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-DGRHRbW6.js → Dropdown-B5dbO4Kx.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-ChX8XPwB.js → EmailListRenderer-BDipZtHJ.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Dyq6IBNu.js → FamilyGuardDashboard-DmIzt8jj.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-DH1NfAL2.js → Federation-D9QOS-uW.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-BN1I_uNi.js → FormItemContext-B47HRwAm.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-Dq_2UYpe.js → GenericCardRenderer-3R4mXmgV.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-BAy1yvI2.js → Git-DrNXZf1C.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-Db6Q2iSy.js → Governance-BGd7JR98.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-0ub6yHcr.js → Inference-D-2he1ed.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DtLetM36.js → KnowledgeGraph-C0sHIbK5.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-Bcoy7CUd.js → Logs-DiBQO-jL.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-BfEMFAXf.js → MarkdownRenderer-DL_5eV2D.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-tt2rzwRR.js → Marketplace-VR59OdrC.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-BhOgX-MU.js → McpTools-DrPzwSd3.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-BJUxeWBL.js → Memory-CBgKALwQ.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-BwUY2G9w.js → MobileBridge-pQ9Tn-Mn.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-BLRfHhqi.js → MobileProjects-mASB6jyj.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-B2WMboOm.js → Mtc-DTMgE7HC.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-8pNEXO63.js → MtcAudit-CwTnCtiL.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-C1wm5a_1.js → Multisig-ngm6WU8f.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-C1QpKF7g.js → NLProgramming-4YO4Qww9.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-CiQUcxFu.js → Notes-DP1k45mF.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-BblDPJ_x.js → NotificationSettings-r2H8yPKb.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-DRjYcPtb.js → OrderTableRenderer-CoM_Zw0J.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-Dp3VKB0X.js → Organization-DrO7jRWS.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-Czx161m9.js → Overflow-Cnwu4i4t.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-ClFi6wOs.js → P2P-zi-cDwA_.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-CRweW0lz.js → PdhVaultBrowser-DBEryDv7.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-BzcRoqTn.js → Permissions-lqXK2C3x.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-ChGTpNMd.js → PersonalDataHub-b63T3HJM.js} +2 -2
  54. package/src/assets/web-panel/assets/{Pipeline-BMOOpKWA.js → Pipeline-Kep5KAGW.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-D0AZHObH.js → Privacy-CHdvOAh1.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-yYFlZ6Ja.js → ProjectInit-BhKfdwe9.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-DJNVuMQs.js → ProjectSettings-Yavk9K8A.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-Br0rBWH1.js → Projects-CN8E_5Mq.js} +1 -1
  59. package/src/assets/web-panel/assets/Providers-Bfym6SQn.js +1 -0
  60. package/src/assets/web-panel/assets/{QrScannerModal-81NZOitV.js → QrScannerModal-CLSQcrlR.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-Dic2lCbJ.js → QuickAsk-VPa2WKQN.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-Dh9iwViE.js → Recommend-CGXR8jVU.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-Bq9VYEFy.js → RemoteSession-C_20YfMB.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-CxFZ-NbJ.js → Reputation-awZh68UV.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-BVSLcaX2.js → Row-Ctb4oiYN.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-BbC-5DOH.js → RssFeed-D3sdjvUV.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-BfjZ1GCr.js → Search-C-zfA4kT.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-CVjhOV5r.js → Security-D9XlmHA3.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-D45u-Aqe.js → Services-C3UKnr41.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-WkGoK4he.js → Skeleton-BQxagZfF.js} +1 -1
  71. package/src/assets/web-panel/assets/Skills-q6eb6KPZ.js +1 -0
  72. package/src/assets/web-panel/assets/{Sla-Bf4QTF3E.js → Sla-DveENvek.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-DVpZdbMN.js → SpeechSettings-BFjXLNgF.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-DEEojoMS.js → SyncSettings-BpHgbaP9.js} +2 -2
  75. package/src/assets/web-panel/assets/Tasks-DvepRb8-.js +1 -0
  76. package/src/assets/web-panel/assets/{Templates-Bzl-9wY5.js → Templates-DEiaoyve.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-0khxUOB8.js → Tenant-ITg774nY.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-DWGYhAYU.js → Terminal-D3ZBcvnb.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-B0Y4LONc.js → TimelineRenderer-BsLU6JjU.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-DEE07SFh.js → Tokens-Cb5Pquc9.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-BM7xvA5z.js → Trigger-Dwfy-m9N.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-Dv3ijvvZ.js → Trust-CnlSRGG0.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-B1-enmMt.js → UkeySign-Y4TlvKVo.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-DYiIPByd.js → VideoEditing-BpKLtTTO.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-D-y374BQ.js → Wallet-LLBzIq8x.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-HBDjcUhi.js → WebAuthn-BeSRiusP.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-sKn4qTID.js → WorkflowEditor-BK_l1tXO.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-TVYhaBXj.js → chat-DYd-X7Wg.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DMADxY9v.js → colors-C9uip71j.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-OftcHpO_.js → compact-item-JBrfjUP6.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-DW1zVUSN.js → createContext-D03fbuiq.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-B8LQ8leS.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-CaUathNp.js → hasIn-DLQOR6l-.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Cmdv6Dev.js → index-5YN7F5bO.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-iDmgT2Dg.js → index-6GuLRpBQ.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-77kgkUgY.js → index-B0X76LjX.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CM8W07sc.js → index-B46YcgsV.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-C9JoaYSs.js → index-BNCdRmWf.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CpDtN0dl.js → index-BYv-LWdy.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CZXYI5LU.js → index-Ba-Ps_AJ.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DWVZ3T0t.js → index-BcBZwlnG.js} +1 -1
  102. package/src/assets/web-panel/assets/{index--5UvwqH_.js → index-BdH9l8wl.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BBNg08cD.js → index-BfOs_bmg.js} +3 -3
  104. package/src/assets/web-panel/assets/index-Bh8BPtqR.js +1 -0
  105. package/src/assets/web-panel/assets/{index-s-EnkUCn.js → index-BnQgRjsm.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Lr0MO-GU.js → index-BpYKLrUT.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B-19mFhn.js → index-BuNFCZCx.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CeCIYYG7.js → index-ByHO3SqZ.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-hXq7QRA_.js → index-C2zmOsyD.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-8YelceUU.js → index-CChQBM1d.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-B52Ztt8Q.js → index-CChaISMb.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DKjqFpYa.js → index-CILVyK3b.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DAfT3EMd.js → index-CL0ixCxk.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-sm1sGIxW.js → index-CS63r8h3.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DHi634g9.js → index-CVZWiUE_.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BEzLLVYd.js → index-Ce0Bf1YF.js} +1 -1
  117. package/src/assets/web-panel/assets/index-CeVrHLzZ.js +1 -0
  118. package/src/assets/web-panel/assets/{index-pSVCBsG4.js → index-Ck17i0OD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-GUKz4Pv9.js → index-Cpn19c9k.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CKNdnJRo.js → index-CqWk1FLG.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Bg-7FpaL.js → index-CwoDpKzW.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DYwwUKDg.js → index-D-1SqEpQ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DZdT8nio.js → index-D4UY5Z60.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BvRw4Fna.js → index-D8KvuDz0.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-kdMl_0zL.js → index-DNMAAUVk.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CK-p7Hji.js → index-DYLZY4uh.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DXcqvWBp.js → index-DaokIHt3.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BFVbDpqg.js → index-Q7mmL6w4.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BJ1PjRY3.js → index-SO6lgMg0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BSp1Ofvx.js → index-iahNhZwm.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BupSWDcl.js → index-l08afIbV.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D63QVAiJ.js → index-rIxxfdTN.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-DdcKTlQR.js → initDefaultProps-CG9z1c6w.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-CL-hTBQj.js → motion-B1Ky7Zff.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-qYSAkxNG.js → move-DME8X2P1.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-ZwRSZtRP.js → mtc-parser-cuJYSWB7.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-Bld-8ftI.js → omit-UI_EE0uZ.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-DGHs-a9Z.js → pickAttrs-BIoE_Z_V.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-DRQPMyI5.js → placementArrow-B48-9HKN.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-C5MJG_Yo.js → responsiveObserve-D7x_GDgD.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-VZ-fpZCD.js → slide-DjzC5_7m.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-9ocfCyHk.js → statusUtils-C6BIymhh.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-B6QAwAN5.js → styleChecker-B4dGrdD9.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-Bq1twor3.js → useFlexGapSupport-Bken4aNE.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-DKZq96tz.js → useFs-BMlqECqv.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-D0RmRVXf.js → usePersonalDataHub-DLdrfmMa.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-D6kEj_tt.js → vnode-CKJQmxa0.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-2yfasoQf.js → zoom-CaZunuau.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/auth/npm-auth.js +30 -5
  151. package/src/commands/agenda.js +83 -5
  152. package/src/commands/agent.js +42 -4
  153. package/src/commands/background-session.js +11 -4
  154. package/src/commands/batch.js +79 -27
  155. package/src/commands/changelog.js +15 -4
  156. package/src/commands/config.js +70 -5
  157. package/src/commands/context.js +36 -2
  158. package/src/commands/eval.js +21 -6
  159. package/src/commands/hook.js +2 -2
  160. package/src/commands/hub.js +19 -1
  161. package/src/commands/loop.js +9 -2
  162. package/src/commands/memory.js +21 -6
  163. package/src/commands/permissions.js +57 -1
  164. package/src/commands/plugin.js +2 -0
  165. package/src/commands/review.js +23 -11
  166. package/src/commands/routine.js +31 -8
  167. package/src/commands/session.js +11 -3
  168. package/src/commands/skill.js +2 -0
  169. package/src/commands/statusline.js +3 -3
  170. package/src/commands/team.js +20 -7
  171. package/src/commands/update.js +65 -10
  172. package/src/data/changelog.json +293 -51
  173. package/src/gateways/terminal/PtyManager.js +8 -1
  174. package/src/gateways/ws/message-dispatcher.js +3 -0
  175. package/src/gateways/ws/session-protocol.js +26 -0
  176. package/src/gateways/ws/ws-agent-handler.js +107 -69
  177. package/src/gateways/ws/ws-server.js +74 -2
  178. package/src/harness/background-task-manager.js +18 -6
  179. package/src/harness/background-task-worker.js +11 -18
  180. package/src/harness/jsonl-session-store.js +13 -6
  181. package/src/harness/mcp-client.js +195 -2
  182. package/src/harness/worktree-isolator.js +18 -21
  183. package/src/lib/__tests__/personal-data-hub-aichat-wizard.test.js +15 -0
  184. package/src/lib/agent-coordinator.js +4 -0
  185. package/src/lib/agent-core.js +5 -0
  186. package/src/lib/agent-ipc-bus.js +44 -5
  187. package/src/lib/agent-sandbox.js +16 -2
  188. package/src/lib/agent-schedule-store.js +55 -0
  189. package/src/lib/agent-team/team-worktree.js +28 -6
  190. package/src/lib/agent-tool-admission.js +104 -0
  191. package/src/lib/agent-worktree.js +20 -19
  192. package/src/lib/api-key-helper.js +10 -2
  193. package/src/lib/async-hook-supervisor.cjs +135 -15
  194. package/src/lib/async-hook-supervisor.js +47 -0
  195. package/src/lib/background-agent-supervisor.js +35 -12
  196. package/src/lib/background-task-manager.js +5 -1
  197. package/src/lib/changelog.js +76 -11
  198. package/src/lib/channels/channel-manager.js +6 -0
  199. package/src/lib/channels/telegram-channel.js +11 -1
  200. package/src/lib/channels/webhook-channel.js +15 -3
  201. package/src/lib/checkpoint-store.js +10 -2
  202. package/src/lib/chrome-connector.js +6 -2
  203. package/src/lib/claude-code-bridge.js +24 -8
  204. package/src/lib/cli-anything-bridge.js +82 -25
  205. package/src/lib/cloud/bundle.js +12 -2
  206. package/src/lib/code-review.js +32 -8
  207. package/src/lib/computer-use/control-backend.js +18 -3
  208. package/src/lib/context-breakdown.js +46 -0
  209. package/src/lib/context-source-ledger.js +43 -0
  210. package/src/lib/diff-review-follow-up.js +154 -0
  211. package/src/lib/doctor-checkup.js +18 -6
  212. package/src/lib/downloader.js +17 -3
  213. package/src/lib/ensure-utf8.js +11 -3
  214. package/src/lib/eval/tasks.js +25 -31
  215. package/src/lib/event-runtime-producer.js +58 -0
  216. package/src/lib/event-runtime-store.js +354 -0
  217. package/src/lib/event-runtime-worker.js +109 -0
  218. package/src/lib/execution-backend.js +72 -21
  219. package/src/lib/git-integration.js +19 -4
  220. package/src/lib/hook-manager.js +6 -15
  221. package/src/lib/hook-runner.cjs +88 -8
  222. package/src/lib/hook-runner.js +55 -0
  223. package/src/lib/hooks-v2-producers.js +15 -0
  224. package/src/lib/hooks-v2-runtime.js +70 -21
  225. package/src/lib/host-adb-bridge.js +129 -24
  226. package/src/lib/ide-context.js +128 -1
  227. package/src/lib/interaction-adapter.js +39 -0
  228. package/src/lib/json-schema-validate.js +190 -36
  229. package/src/lib/lan-pairing-preflight.js +13 -2
  230. package/src/lib/lsp/__tests__/benchmark.test.js +61 -0
  231. package/src/lib/lsp/__tests__/lsp-client.test.js +6 -1
  232. package/src/lib/lsp/__tests__/lsp-server-registry.test.js +18 -0
  233. package/src/lib/lsp/benchmark.js +20 -4
  234. package/src/lib/lsp/lsp-client.js +22 -3
  235. package/src/lib/lsp/lsp-manager.js +4 -0
  236. package/src/lib/lsp/lsp-server-registry.js +11 -2
  237. package/src/lib/mcp-oauth.js +8 -2
  238. package/src/lib/npm-invocation.js +29 -0
  239. package/src/lib/orchestrator.js +8 -2
  240. package/src/lib/packer/pack-update-applier.js +14 -2
  241. package/src/lib/packer/pkg-runner.js +13 -2
  242. package/src/lib/packer/precheck.js +33 -16
  243. package/src/lib/packer/smoke-runner.js +18 -5
  244. package/src/lib/packer/web-panel-builder.js +16 -2
  245. package/src/lib/paths.js +1 -1
  246. package/src/lib/permission-rules.cjs +5 -1
  247. package/src/lib/personal-data-hub-aichat-wizard.js +22 -6
  248. package/src/lib/personal-data-hub-wiring.js +27 -3
  249. package/src/lib/plan-mode.js +204 -11
  250. package/src/lib/plugin-monitor-supervisor.js +48 -6
  251. package/src/lib/plugin-runtime/bin.js +45 -0
  252. package/src/lib/plugin-runtime/hooks.js +14 -1
  253. package/src/lib/plugin-runtime/install.js +11 -3
  254. package/src/lib/plugin-runtime/lsp.js +3 -0
  255. package/src/lib/plugin-runtime/mcp.js +8 -1
  256. package/src/lib/plugin-runtime/monitors.js +4 -0
  257. package/src/lib/plugin-runtime/plugin-options.js +74 -7
  258. package/src/lib/plugin-runtime/signature.js +45 -0
  259. package/src/lib/pr-create.js +21 -8
  260. package/src/lib/pr-link-ledger.js +15 -3
  261. package/src/lib/process-execution-broker/credential-agent.js +23 -3
  262. package/src/lib/process-execution-broker/index.js +315 -38
  263. package/src/lib/process-execution-broker/patch-child-process.js +2 -3
  264. package/src/lib/process-manager.js +18 -3
  265. package/src/lib/publish-workspace.js +14 -6
  266. package/src/lib/repl-bang-memorize.js +10 -2
  267. package/src/lib/repl-goal.js +19 -2
  268. package/src/lib/secret-store.js +159 -0
  269. package/src/lib/service-manager.js +64 -29
  270. package/src/lib/settings-hook-events.cjs +74 -9
  271. package/src/lib/settings-hook-events.js +20 -0
  272. package/src/lib/settings-hooks.cjs +4 -0
  273. package/src/lib/side-effect-ledger.js +22 -0
  274. package/src/lib/skill-packs/generator.js +18 -9
  275. package/src/lib/skill-process-broker.js +71 -0
  276. package/src/lib/slash-commands.js +10 -2
  277. package/src/lib/status-line.cjs +28 -7
  278. package/src/lib/status-line.js +33 -0
  279. package/src/lib/sub-agent-context.js +5 -0
  280. package/src/lib/sub-agent-profiles.js +4 -0
  281. package/src/lib/turn-context.js +14 -8
  282. package/src/lib/unattended-action-policy.js +83 -0
  283. package/src/lib/update-notice.js +6 -2
  284. package/src/lib/with-file-lock.js +7 -0
  285. package/src/lib/ws-server.js +1 -0
  286. package/src/repl/agent-repl.js +60 -23
  287. package/src/repl/clipboard-copy.js +8 -2
  288. package/src/repl/pr-comments.js +30 -7
  289. package/src/runtime/agent-core.js +554 -118
  290. package/src/runtime/agent-runtime.js +1 -0
  291. package/src/runtime/coding-agent-contract-shared.cjs +52 -0
  292. package/src/runtime/coding-agent-policy.cjs +20 -0
  293. package/src/runtime/diagnostics.js +73 -8
  294. package/src/runtime/headless-runner.js +88 -10
  295. package/src/runtime/headless-stream.js +343 -21
  296. package/src/runtime/mcp-config.js +16 -1
  297. package/src/runtime/session-slash-commands.js +506 -0
  298. package/src/skills/video-editing/extractors/audio-extractor.js +13 -5
  299. package/src/skills/video-editing/extractors/video-extractor.js +13 -3
  300. package/src/skills/video-editing/media-process.js +20 -0
  301. package/src/skills/video-editing/render/audio-mix.js +13 -3
  302. package/src/skills/video-editing/render/ffmpeg-concat.js +7 -2
  303. package/src/skills/video-editing/render/ffmpeg-extract.js +7 -2
  304. package/src/workers/background-agent-worker.js +6 -2
  305. package/src/assets/web-panel/assets/ChatBubbleRenderer-Ci97vNTs.js +0 -1
  306. package/src/assets/web-panel/assets/Providers-zZRhNtSu.js +0 -1
  307. package/src/assets/web-panel/assets/Skills-D_jvQZcj.js +0 -1
  308. package/src/assets/web-panel/assets/Tasks-DFwxpLIk.js +0 -1
  309. package/src/assets/web-panel/assets/devWarning-CLOk6rdE.js +0 -1
  310. package/src/assets/web-panel/assets/index-CSgUfMTM.js +0 -1
  311. package/src/assets/web-panel/assets/index-DliSZvAP.js +0 -1
@@ -318,6 +318,7 @@ export class AgentRuntime {
318
318
  maxConnections,
319
319
  timeout,
320
320
  sessionManager,
321
+ projectRoot: project,
321
322
  remoteSessionRelayUrl,
322
323
  remoteSessionPeerId,
323
324
  envelopeBus,
@@ -90,6 +90,58 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
90
90
  tags: ["tool:write_file", "contract:coding-agent", "tier:mvp"],
91
91
  },
92
92
  },
93
+ {
94
+ name: "delete_file",
95
+ title: "Delete File",
96
+ kind: "filesystem",
97
+ tier: "mvp",
98
+ description:
99
+ "Delete one file. Directories are rejected. Read the file first; interactive IDE approval shows an explicit deletion diff before applying it.",
100
+ inputSchema: {
101
+ type: "object",
102
+ properties: {
103
+ path: { type: "string", description: "File path to delete" },
104
+ },
105
+ required: ["path"],
106
+ },
107
+ ...TOOL_POLICY_METADATA.delete_file,
108
+ permissions: {
109
+ level: "elevated",
110
+ scopes: ["filesystem:write"],
111
+ },
112
+ telemetry: {
113
+ category: "filesystem",
114
+ tags: ["tool:delete_file", "contract:coding-agent", "tier:mvp"],
115
+ },
116
+ },
117
+ {
118
+ name: "move_file",
119
+ title: "Move File",
120
+ kind: "filesystem",
121
+ tier: "mvp",
122
+ description:
123
+ "Rename or move one file without overwriting an existing destination. Directories are rejected. Interactive IDE approval shows the explicit source and destination.",
124
+ inputSchema: {
125
+ type: "object",
126
+ properties: {
127
+ path: { type: "string", description: "Existing source file path" },
128
+ target_path: {
129
+ type: "string",
130
+ description: "New destination file path",
131
+ },
132
+ },
133
+ required: ["path", "target_path"],
134
+ },
135
+ ...TOOL_POLICY_METADATA.move_file,
136
+ permissions: {
137
+ level: "elevated",
138
+ scopes: ["filesystem:write"],
139
+ },
140
+ telemetry: {
141
+ category: "filesystem",
142
+ tags: ["tool:move_file", "contract:coding-agent", "tier:mvp"],
143
+ },
144
+ },
93
145
  {
94
146
  name: "notebook_edit",
95
147
  title: "Edit Notebook",
@@ -112,6 +112,26 @@ const TOOL_POLICY_METADATA = Object.freeze({
112
112
  approvalFlow: "plan",
113
113
  isReadOnly: false,
114
114
  },
115
+ delete_file: {
116
+ riskLevel: RISK_LEVELS.MEDIUM,
117
+ category: TOOL_CATEGORIES.WRITE,
118
+ availableInPlanMode: false,
119
+ planModeBehavior: "blocked",
120
+ requiresPlanApproval: true,
121
+ requiresConfirmation: false,
122
+ approvalFlow: "plan",
123
+ isReadOnly: false,
124
+ },
125
+ move_file: {
126
+ riskLevel: RISK_LEVELS.MEDIUM,
127
+ category: TOOL_CATEGORIES.WRITE,
128
+ availableInPlanMode: false,
129
+ planModeBehavior: "blocked",
130
+ requiresPlanApproval: true,
131
+ requiresConfirmation: false,
132
+ approvalFlow: "plan",
133
+ isReadOnly: false,
134
+ },
115
135
  notebook_edit: {
116
136
  riskLevel: RISK_LEVELS.MEDIUM,
117
137
  category: TOOL_CATEGORIES.WRITE,
@@ -12,7 +12,6 @@
12
12
  * Refs: docs/implementation-plans/CLI_RUNTIME_CONVERGENCE_ADR.md
13
13
  */
14
14
 
15
- import { execSync } from "node:child_process";
16
15
  import { existsSync, readdirSync, readFileSync } from "node:fs";
17
16
  import { join as pathJoin } from "node:path";
18
17
  import { createRequire } from "node:module";
@@ -30,6 +29,9 @@ import {
30
29
  import { loadConfig } from "../lib/config-manager.js";
31
30
  import { isAppRunning, getAppPid } from "../lib/process-manager.js";
32
31
  import { readDiskVersion, versionDiagnosis } from "../lib/version-skew.js";
32
+ import { EventRuntimeStore } from "../lib/event-runtime-store.js";
33
+ import { executionBroker } from "../lib/process-execution-broker/index.js";
34
+ import { resolveNpmInvocation } from "../lib/npm-invocation.js";
33
35
 
34
36
  /** Best-effort read of the npm `latest` cached by the startup update notice. */
35
37
  function readCachedLatest() {
@@ -67,9 +69,31 @@ function readdirSafe(dir) {
67
69
  }
68
70
  }
69
71
 
70
- function safeExec(cmd) {
72
+ export function diagnosticProcessInvocations(
73
+ platform = process.platform,
74
+ execPath = process.execPath,
75
+ ) {
76
+ return {
77
+ npm: resolveNpmInvocation({ platform, execPath }),
78
+ git: { command: "git", prefixArgs: [] },
79
+ };
80
+ }
81
+
82
+ export const _diagnosticDeps = {
83
+ execFileSync: (...args) => executionBroker.execFileSync(...args),
84
+ };
85
+
86
+ export function runDiagnosticProbe(file, args = [], deps = _diagnosticDeps) {
71
87
  try {
72
- return execSync(cmd, { encoding: "utf-8" }).trim();
88
+ return String(
89
+ deps.execFileSync(file, args, {
90
+ encoding: "utf-8",
91
+ origin: "runtime:diagnostics",
92
+ policy: "allow",
93
+ scope: "diagnostics",
94
+ shell: false,
95
+ }),
96
+ ).trim();
73
97
  } catch {
74
98
  return null;
75
99
  }
@@ -126,6 +150,7 @@ export function checkPdhPackageIntegrity(deps = {}) {
126
150
  */
127
151
  export async function collectDoctorReport() {
128
152
  const checks = [];
153
+ const invocations = diagnosticProcessInvocations();
129
154
 
130
155
  // Node.js
131
156
  const nodeVersion = process.versions.node;
@@ -139,7 +164,10 @@ export async function collectDoctorReport() {
139
164
  });
140
165
 
141
166
  // npm
142
- const npmVersion = safeExec("npm --version");
167
+ const npmVersion = runDiagnosticProbe(invocations.npm.command, [
168
+ ...invocations.npm.prefixArgs,
169
+ "--version",
170
+ ]);
143
171
  checks.push({
144
172
  id: "npm",
145
173
  name: npmVersion ? `npm ${npmVersion}` : "npm",
@@ -168,7 +196,7 @@ export async function collectDoctorReport() {
168
196
  });
169
197
 
170
198
  // Git
171
- const gitVersion = safeExec("git --version");
199
+ const gitVersion = runDiagnosticProbe(invocations.git.command, ["--version"]);
172
200
  checks.push({
173
201
  id: "git",
174
202
  name: gitVersion || "Git",
@@ -316,7 +344,13 @@ export function parseGitWorktrees(porcelain) {
316
344
 
317
345
  /** Best-effort live git worktree list for the current repo. */
318
346
  export function collectWorktrees() {
319
- return parseGitWorktrees(safeExec("git worktree list --porcelain"));
347
+ return parseGitWorktrees(
348
+ runDiagnosticProbe(diagnosticProcessInvocations().git.command, [
349
+ "worktree",
350
+ "list",
351
+ "--porcelain",
352
+ ]),
353
+ );
320
354
  }
321
355
 
322
356
  /**
@@ -364,10 +398,37 @@ export function buildDoctorDiagnosticInput(report, signals = {}) {
364
398
  * services: Array<{ name, state }> | null,
365
399
  * note: string | null
366
400
  * },
367
- * ports: Array<{ name, port, open }>
401
+ * ports: Array<{ name, port, open }>,
402
+ * eventRuntime: { enabled, health, error }
368
403
  * }
369
404
  */
370
- export async function collectStatusReport() {
405
+ export function collectEventRuntimeStatus({
406
+ env = process.env,
407
+ store = null,
408
+ } = {}) {
409
+ const enabled = env?.CC_EVENT_RUNTIME_DURABLE === "1";
410
+ if (!enabled && !store) {
411
+ return { enabled: false, health: null, error: null };
412
+ }
413
+ try {
414
+ return {
415
+ enabled,
416
+ health: (store || new EventRuntimeStore()).getHealthSnapshot(),
417
+ error: null,
418
+ };
419
+ } catch (error) {
420
+ return {
421
+ enabled,
422
+ health: null,
423
+ error: {
424
+ code: error?.code || "CC_EVENT_RUNTIME_STATUS_FAILED",
425
+ message: String(error?.message || error),
426
+ },
427
+ };
428
+ }
429
+ }
430
+
431
+ export async function collectStatusReport(options = {}) {
371
432
  let config = {};
372
433
  try {
373
434
  config = loadConfig();
@@ -443,5 +504,9 @@ export async function collectStatusReport() {
443
504
  setup,
444
505
  docker,
445
506
  ports,
507
+ eventRuntime: collectEventRuntimeStatus({
508
+ env: options.eventRuntimeEnv || process.env,
509
+ store: options.eventRuntimeStore || null,
510
+ }),
446
511
  };
447
512
  }
@@ -56,6 +56,7 @@ import {
56
56
  reconcileSideEffects,
57
57
  classifyToolSideEffect,
58
58
  } from "../lib/side-effect-ledger.js";
59
+ import { DiffReviewFollowUpTracker } from "../lib/diff-review-follow-up.js";
59
60
  import { SIDE_EFFECT_LEDGER_EVENT } from "../lib/side-effect-ledger-store.js";
60
61
  import { TurnBindingLog, createTurnBindingFeed } from "../lib/turn-binding.js";
61
62
  import { TURN_BINDING_EVENT } from "../lib/turn-binding-store.js";
@@ -80,11 +81,29 @@ import { isolationLevel } from "../lib/agent-sandbox.js";
80
81
  import { createBackgroundPhaseReporter } from "../lib/background-phase-reporter.js";
81
82
  import { withQuietStdout } from "./quiet-stdout.js";
82
83
  import { CostBudget } from "../lib/cost-budget.js";
84
+ import { estimateTokens } from "../harness/prompt-compressor.js";
83
85
  import {
84
86
  classifyDenial,
85
87
  recordDenial,
86
88
  formatDenials,
87
89
  } from "../lib/repl-denials.js";
90
+ import executionBroker from "../lib/process-execution-broker/index.js";
91
+
92
+ const goalBrokerRunner = executionBroker.spawnSync.bind(executionBroker);
93
+
94
+ export const _goalProcessDeps = {
95
+ run: goalBrokerRunner,
96
+ };
97
+
98
+ function runHeadlessGoalCommand(command, options = {}) {
99
+ return _goalProcessDeps.run(command, [], {
100
+ ...options,
101
+ timeout: options.timeout ?? 30000,
102
+ origin: "headless-goal:exit-zero",
103
+ policy: "allow",
104
+ scope: "headless-goal",
105
+ });
106
+ }
88
107
 
89
108
  /** Tools that cannot mutate the filesystem or run commands. */
90
109
  export const READ_ONLY_TOOLS = Object.freeze([
@@ -859,6 +878,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
859
878
  }
860
879
  }
861
880
  }
881
+ const diffReviewFollowUps = new DiffReviewFollowUpTracker(sideEffectLedger);
862
882
 
863
883
  // ── Wire the persistent ApprovalGate with our non-interactive confirmer
864
884
  // and force the session-policy tier dictated by --permission-mode. ──────
@@ -947,6 +967,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
947
967
  // (undefined) leaves both paths byte-identical.
948
968
  const _leanNoProjectMemory = options.projectMemory === false;
949
969
  let _loadedInstructions = null;
970
+ let _loadedPersonaSkills = [];
950
971
  const systemContent = composeSystemPrompt(
951
972
  buildSystemPrompt(cwd, {
952
973
  additionalDirectories,
@@ -961,6 +982,9 @@ export async function runAgentHeadless(options = {}, deps = {}) {
961
982
  onInstructionsLoaded: (loaded) => {
962
983
  _loadedInstructions = loaded;
963
984
  },
985
+ onSkillsLoaded: (skills) => {
986
+ _loadedPersonaSkills = Array.isArray(skills) ? skills : [];
987
+ },
964
988
  },
965
989
  );
966
990
 
@@ -968,7 +992,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
968
992
  if (settingsHooks) {
969
993
  try {
970
994
  const { runUserPromptSubmitHooks } =
971
- await import("../lib/settings-hook-events.cjs");
995
+ await import("../lib/settings-hook-events.js");
972
996
  const ups = runUserPromptSubmitHooks(settingsHooks, {
973
997
  prompt: userContent,
974
998
  cwd,
@@ -999,7 +1023,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
999
1023
  if (settingsHooks && _loadedInstructions) {
1000
1024
  try {
1001
1025
  const { runInstructionsLoadedHooks } =
1002
- await import("../lib/settings-hook-events.cjs");
1026
+ await import("../lib/settings-hook-events.js");
1003
1027
  instructionsLoadedContext = runInstructionsLoadedHooks(settingsHooks, {
1004
1028
  files: _loadedInstructions.files,
1005
1029
  cwd,
@@ -1015,7 +1039,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1015
1039
  if (settingsHooks) {
1016
1040
  try {
1017
1041
  const { runSessionStartHooks } =
1018
- await import("../lib/settings-hook-events.cjs");
1042
+ await import("../lib/settings-hook-events.js");
1019
1043
  sessionStartContext = runSessionStartHooks(settingsHooks, {
1020
1044
  source: resumeId ? "resume" : "startup",
1021
1045
  cwd,
@@ -1034,7 +1058,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1034
1058
  if (settingsHooks && resumeId && history.length > 0) {
1035
1059
  try {
1036
1060
  const { runObserveHooks } =
1037
- await import("../lib/settings-hook-events.cjs");
1061
+ await import("../lib/settings-hook-events.js");
1038
1062
  runObserveHooks(
1039
1063
  settingsHooks,
1040
1064
  "SessionResume",
@@ -1306,7 +1330,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1306
1330
  if (settingsHooks) {
1307
1331
  try {
1308
1332
  const { AsyncHookSupervisor } =
1309
- await import("../lib/async-hook-supervisor.cjs");
1333
+ await import("../lib/async-hook-supervisor.js");
1310
1334
  _hookSupervisor = new AsyncHookSupervisor({
1311
1335
  persistStats: true,
1312
1336
  // Durably park failed-rewake signals keyed by session so a crash before
@@ -1340,6 +1364,34 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1340
1364
  });
1341
1365
  }
1342
1366
 
1367
+ // Persist the admitted runtime schema surface so `cc context --sources` can
1368
+ // attribute MCP cost to the actual server/tool definitions used by this run,
1369
+ // rather than guessing from the current environment on a later invocation.
1370
+ if (
1371
+ persist &&
1372
+ (mcp?.extraToolDefinitions?.length || _loadedPersonaSkills.length)
1373
+ ) {
1374
+ try {
1375
+ store.appendEvent(sessionId, "context_sources", {
1376
+ mcp: (mcp?.extraToolDefinitions || []).map((definition) => ({
1377
+ function: {
1378
+ name: definition?.function?.name || null,
1379
+ description: definition?.function?.description || "",
1380
+ parameters: definition?.function?.parameters || {},
1381
+ },
1382
+ })),
1383
+ skills: _loadedPersonaSkills.map((skill) => ({
1384
+ id: skill?.id || skill?.displayName || "skill",
1385
+ displayName: skill?.displayName || skill?.id || "skill",
1386
+ source: skill?.source || "skill",
1387
+ body: typeof skill?.body === "string" ? skill.body : "",
1388
+ })),
1389
+ });
1390
+ } catch {
1391
+ // Source attribution is observability-only; never fail the agent run.
1392
+ }
1393
+ }
1394
+
1343
1395
  const loopOptions = {
1344
1396
  model,
1345
1397
  provider,
@@ -1382,6 +1434,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1382
1434
  enabledToolNames,
1383
1435
  disabledTools,
1384
1436
  iterationBudget: budget,
1437
+ toolAdmission: options.toolAdmission || null,
1385
1438
  // `ask_user_question` in a BACKGROUND turn child (P0 state-machine
1386
1439
  // producer for `needs_input`): there is no live channel to a human
1387
1440
  // mid-turn, but the question IS the structured needs-input signal. Park
@@ -1567,7 +1620,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1567
1620
  const _settleAsyncStop = async () => {
1568
1621
  if (!settingsHooks || !_hookSupervisor) return { rewakes: [], results: [] };
1569
1622
  const { dispatchAsyncHooks } =
1570
- await import("../lib/settings-hook-events.cjs");
1623
+ await import("../lib/settings-hook-events.js");
1571
1624
  dispatchAsyncHooks(
1572
1625
  settingsHooks,
1573
1626
  "Stop",
@@ -1747,7 +1800,6 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1747
1800
  process.once("SIGTERM", _onHardSignal);
1748
1801
 
1749
1802
  try {
1750
- // eslint-disable-next-line no-constant-condition
1751
1803
  while (true) {
1752
1804
  // P1 turn→checkpoint binding: one drain of the loop = one turn. Anchor
1753
1805
  // the conversation offset before the model sees the new user turn. A
@@ -1811,6 +1863,13 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1811
1863
  // P0-2: settle the in-flight side-effect (commit on success, fail on
1812
1864
  // a clean error) and persist the updated ledger snapshot.
1813
1865
  if (persist && currentSideEffectOpId) {
1866
+ if (event.result?._diffReviewAudit) {
1867
+ diffReviewFollowUps.observe(
1868
+ sideEffectLedger,
1869
+ currentSideEffectOpId,
1870
+ event.result._diffReviewAudit,
1871
+ );
1872
+ }
1814
1873
  if (err)
1815
1874
  sideEffectLedger.fail(
1816
1875
  currentSideEffectOpId,
@@ -1917,10 +1976,30 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1917
1976
  }
1918
1977
  case "response-complete": {
1919
1978
  finalText = event.content || "";
1979
+ if (
1980
+ persist &&
1981
+ diffReviewFollowUps.complete(sideEffectLedger, {
1982
+ status: "completed-without-reproposal",
1983
+ }).length > 0
1984
+ ) {
1985
+ persistSideEffectLedger();
1986
+ }
1920
1987
  break;
1921
1988
  }
1922
1989
  case "run-ended": {
1923
1990
  if (event.reason) endReason = event.reason;
1991
+ if (
1992
+ persist &&
1993
+ diffReviewFollowUps.complete(sideEffectLedger, {
1994
+ status:
1995
+ event.reason === "complete"
1996
+ ? "completed-without-reproposal"
1997
+ : "interrupted",
1998
+ reason: event.reason || endReason,
1999
+ }).length > 0
2000
+ ) {
2001
+ persistSideEffectLedger();
2002
+ }
1924
2003
  break;
1925
2004
  }
1926
2005
  default:
@@ -2022,8 +2101,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
2022
2101
  try {
2023
2102
  if (_goalHelpers.isDeterministicCondition(cond)) {
2024
2103
  const gc = deps.goalCheck || {};
2025
- const spawnSync =
2026
- gc.spawnSync || (await import("node:child_process")).spawnSync;
2104
+ const spawnSync = gc.spawnSync || runHeadlessGoalCommand;
2027
2105
  const existsSync =
2028
2106
  gc.existsSync || (await import("node:fs")).existsSync;
2029
2107
  evaluation = _goalHelpers.runDeterministicCheck(cond, {
@@ -2158,7 +2236,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
2158
2236
  if (settingsHooks) {
2159
2237
  try {
2160
2238
  const { runObserveHooks, dispatchAsyncHooks } =
2161
- await import("../lib/settings-hook-events.cjs");
2239
+ await import("../lib/settings-hook-events.js");
2162
2240
  const stopPayload = { reason: endReason, cwd, session_id: sessionId };
2163
2241
  runObserveHooks(settingsHooks, "Stop", stopPayload, { cwd });
2164
2242
  // Skip the async Stop dispatch/settle here if the auto-rewake re-drive