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
@@ -183,12 +183,12 @@ function persistRecentDenial(record, options = {}) {
183
183
  * user's attention (e.g. waiting on a permission/risk confirmation). A hook can
184
184
  * ring a bell / send a desktop notification. Best-effort, never blocks.
185
185
  */
186
- async function _fireNotification(message, type = "info") {
186
+ async function _fireNotification(message, type = "info", session = null) {
187
187
  // Fire settings.json observe hooks first (best-effort)
188
188
  if (_settingsHooks) {
189
189
  try {
190
190
  const { runObserveHooks } =
191
- await import("../lib/settings-hook-events.cjs");
191
+ await import("../lib/settings-hook-events.js");
192
192
  runObserveHooks(
193
193
  _settingsHooks,
194
194
  "Notification",
@@ -196,7 +196,7 @@ async function _fireNotification(message, type = "info") {
196
196
  message,
197
197
  type,
198
198
  cwd: process.cwd(),
199
- session_id: _session?.sessionId || null,
199
+ session_id: session?.sessionId || null,
200
200
  },
201
201
  { cwd: process.cwd() },
202
202
  );
@@ -205,10 +205,10 @@ async function _fireNotification(message, type = "info") {
205
205
  }
206
206
  }
207
207
  // Fire database-registered Notification hooks (interceptable/suppressible)
208
- if (_session) {
208
+ if (session) {
209
209
  try {
210
210
  const result = await fireNotification(_hookDb, message, {
211
- session: _session,
211
+ session,
212
212
  type,
213
213
  });
214
214
  if (result?.directive?.suppress) {
@@ -750,6 +750,8 @@ export async function startAgentRepl(options = {}) {
750
750
  }
751
751
  await _fireNotification(
752
752
  `Permission needed: ${riskLevel || "medium"}-risk ${tool || "run_shell"}${args?.command ? " — " + args.command : ""}`,
753
+ "info",
754
+ _sessionHandle,
753
755
  );
754
756
  const local = askGateApprovalLocally({ tool, args, riskLevel });
755
757
  if (!_remoteApproval?.bridge) return local.promise;
@@ -840,6 +842,8 @@ export async function startAgentRepl(options = {}) {
840
842
  }
841
843
  await _fireNotification(
842
844
  `Permission needed: ${tool}${rule ? " (" + rule + ")" : ""}`,
845
+ "info",
846
+ _sessionHandle,
843
847
  );
844
848
  const local = askPermissionLocally({ tool, args, rule, reason });
845
849
  if (!_remoteApproval?.bridge) return local.promise;
@@ -1142,7 +1146,7 @@ export async function startAgentRepl(options = {}) {
1142
1146
  if (_settingsHooks && _loadedReplInstructions) {
1143
1147
  try {
1144
1148
  const { runInstructionsLoadedHooks } =
1145
- await import("../lib/settings-hook-events.cjs");
1149
+ await import("../lib/settings-hook-events.js");
1146
1150
  const ctx = runInstructionsLoadedHooks(_settingsHooks, {
1147
1151
  files: _loadedReplInstructions.files,
1148
1152
  cwd: process.cwd(),
@@ -1158,7 +1162,7 @@ export async function startAgentRepl(options = {}) {
1158
1162
  if (_settingsHooks) {
1159
1163
  try {
1160
1164
  const { runSessionStartHooks } =
1161
- await import("../lib/settings-hook-events.cjs");
1165
+ await import("../lib/settings-hook-events.js");
1162
1166
  const ctx = runSessionStartHooks(_settingsHooks, {
1163
1167
  source: "startup",
1164
1168
  cwd: process.cwd(),
@@ -1466,7 +1470,7 @@ export async function startAgentRepl(options = {}) {
1466
1470
  if (_settingsHooks && messages.some((m) => m.role !== "system")) {
1467
1471
  try {
1468
1472
  const { runObserveHooks } =
1469
- await import("../lib/settings-hook-events.cjs");
1473
+ await import("../lib/settings-hook-events.js");
1470
1474
  runObserveHooks(
1471
1475
  _settingsHooks,
1472
1476
  "SessionResume",
@@ -1762,6 +1766,41 @@ export async function startAgentRepl(options = {}) {
1762
1766
  // "close" cleanup instead of a bare exit.
1763
1767
  _replRl = rl;
1764
1768
 
1769
+ // MCP elicitation in the interactive REPL uses the same readline surface as
1770
+ // approvals, while MCPClient retains the protocol-level response shape.
1771
+ const mcpElicitationClients = [_adhocMcp?.mcpClient, _bundleMcpClient].filter(
1772
+ (client) => client?.setElicitationHandler,
1773
+ );
1774
+ for (const client of mcpElicitationClients) {
1775
+ client.setElicitationHandler(
1776
+ (request) =>
1777
+ new Promise((resolve) => {
1778
+ const label =
1779
+ request.message || "MCP server requests additional input";
1780
+ rl.question(
1781
+ chalk.yellow(`\n MCP [${request.server}] ${label}\n > `),
1782
+ (answer) => {
1783
+ const trimmed = String(answer || "").trim();
1784
+ if (!trimmed) {
1785
+ resolve({ action: "cancel" });
1786
+ } else {
1787
+ let content = { value: trimmed };
1788
+ try {
1789
+ const parsed = JSON.parse(trimmed);
1790
+ if (parsed && typeof parsed === "object") content = parsed;
1791
+ } catch {
1792
+ // Plain text remains a valid single-field elicitation answer.
1793
+ }
1794
+ resolve({ action: "accept", content });
1795
+ }
1796
+ rl.prompt();
1797
+ },
1798
+ );
1799
+ }),
1800
+ { timeoutMs: options.mcpElicitationTimeoutMs },
1801
+ );
1802
+ }
1803
+
1765
1804
  // Inbound channels (--channels, gap-2026-07-11 P0#5): external events enter
1766
1805
  // this session as user turns. rl.emit("line") reuses the REPL's own input
1767
1806
  // path, so an event landing mid-turn queues behind it (pending-lines), and
@@ -1864,7 +1903,7 @@ export async function startAgentRepl(options = {}) {
1864
1903
  // turn — the session stays open, the current work is suspended. The
1865
1904
  // keypress handler can't await, so fire observe-only fire-and-forget.
1866
1905
  if (_settingsHooks) {
1867
- import("../lib/settings-hook-events.cjs")
1906
+ import("../lib/settings-hook-events.js")
1868
1907
  .then(({ runObserveHooks }) =>
1869
1908
  runObserveHooks(
1870
1909
  _settingsHooks,
@@ -2026,7 +2065,7 @@ export async function startAgentRepl(options = {}) {
2026
2065
  const _costStore = newCostStore(); // running token spend for `/cost`
2027
2066
  let _renderStatus = null;
2028
2067
  try {
2029
- const slm = await import("../lib/status-line.cjs");
2068
+ const slm = await import("../lib/status-line.js");
2030
2069
  const _sl = slm.default || slm;
2031
2070
  const _slCfg = _sl.loadStatusLineConfig({ cwd: process.cwd() });
2032
2071
  _customStatus = !!_slCfg;
@@ -3121,12 +3160,12 @@ export async function startAgentRepl(options = {}) {
3121
3160
  if (_settingsHooks && oldCwd !== newCwd) {
3122
3161
  try {
3123
3162
  const { runCwdChangedHooks, dispatchAsyncHooks } =
3124
- await import("../lib/settings-hook-events.cjs");
3163
+ await import("../lib/settings-hook-events.js");
3125
3164
  const payload = { oldCwd, newCwd, sessionId };
3126
3165
  runCwdChangedHooks(_settingsHooks, payload);
3127
3166
  if (!_asyncHookSupervisor) {
3128
3167
  const { AsyncHookSupervisor } =
3129
- await import("../lib/async-hook-supervisor.cjs");
3168
+ await import("../lib/async-hook-supervisor.js");
3130
3169
  _asyncHookSupervisor = new AsyncHookSupervisor({
3131
3170
  persistStats: true,
3132
3171
  });
@@ -3707,7 +3746,7 @@ export async function startAgentRepl(options = {}) {
3707
3746
  if (_settingsHooks) {
3708
3747
  try {
3709
3748
  const { runObserveHooks, dispatchAsyncHooks } =
3710
- await import("../lib/settings-hook-events.cjs");
3749
+ await import("../lib/settings-hook-events.js");
3711
3750
  const payload = {
3712
3751
  session_id: sessionId || null,
3713
3752
  source: "reload-plugins",
@@ -3715,7 +3754,7 @@ export async function startAgentRepl(options = {}) {
3715
3754
  runObserveHooks(_settingsHooks, "ConfigChange", payload, { cwd });
3716
3755
  if (!_asyncHookSupervisor) {
3717
3756
  const { AsyncHookSupervisor } =
3718
- await import("../lib/async-hook-supervisor.cjs");
3757
+ await import("../lib/async-hook-supervisor.js");
3719
3758
  _asyncHookSupervisor = new AsyncHookSupervisor({
3720
3759
  persistStats: true,
3721
3760
  });
@@ -5067,7 +5106,7 @@ export async function startAgentRepl(options = {}) {
5067
5106
  if (_settingsHooks) {
5068
5107
  try {
5069
5108
  const { runUserPromptSubmitHooks } =
5070
- await import("../lib/settings-hook-events.cjs");
5109
+ await import("../lib/settings-hook-events.js");
5071
5110
  const ups = runUserPromptSubmitHooks(_settingsHooks, {
5072
5111
  prompt: userContent,
5073
5112
  cwd: process.cwd(),
@@ -5090,10 +5129,10 @@ export async function startAgentRepl(options = {}) {
5090
5129
  // turn without blocking it; its result/rewake surfaces on a later turn
5091
5130
  // via the async-hook drain below. Lazily create the supervisor.
5092
5131
  const { dispatchAsyncHooks } =
5093
- await import("../lib/settings-hook-events.cjs");
5132
+ await import("../lib/settings-hook-events.js");
5094
5133
  if (!_asyncHookSupervisor) {
5095
5134
  const { AsyncHookSupervisor } =
5096
- await import("../lib/async-hook-supervisor.cjs");
5135
+ await import("../lib/async-hook-supervisor.js");
5097
5136
  _asyncHookSupervisor = new AsyncHookSupervisor({
5098
5137
  persistStats: true,
5099
5138
  });
@@ -5401,7 +5440,7 @@ export async function startAgentRepl(options = {}) {
5401
5440
  // fire-and-forget; their results/rewakes drain into the next turn above.
5402
5441
  if (_settingsHooks && !_asyncHookSupervisor) {
5403
5442
  const { AsyncHookSupervisor } =
5404
- await import("../lib/async-hook-supervisor.cjs");
5443
+ await import("../lib/async-hook-supervisor.js");
5405
5444
  _asyncHookSupervisor = new AsyncHookSupervisor({ persistStats: true });
5406
5445
  }
5407
5446
  const {
@@ -5547,7 +5586,6 @@ export async function startAgentRepl(options = {}) {
5547
5586
  try {
5548
5587
  const rg = await import("../lib/repl-goal.js");
5549
5588
  const fsMod = await import("node:fs");
5550
- const cpMod = await import("node:child_process");
5551
5589
  const judge = async (cond, { finalText }) => {
5552
5590
  const { chatWithTools } = await import("../runtime/agent-core.js");
5553
5591
  const { firstBalancedJson } =
@@ -5589,7 +5627,6 @@ export async function startAgentRepl(options = {}) {
5589
5627
  response || "",
5590
5628
  {
5591
5629
  cwd: process.cwd(),
5592
- spawnSync: cpMod.spawnSync,
5593
5630
  existsSync: fsMod.existsSync,
5594
5631
  judge,
5595
5632
  },
@@ -5740,7 +5777,7 @@ export async function startAgentRepl(options = {}) {
5740
5777
  if (_settingsHooks) {
5741
5778
  try {
5742
5779
  const { runObserveHooks, dispatchAsyncHooks } =
5743
- await import("../lib/settings-hook-events.cjs");
5780
+ await import("../lib/settings-hook-events.js");
5744
5781
  runObserveHooks(
5745
5782
  _settingsHooks,
5746
5783
  "Stop",
@@ -5749,7 +5786,7 @@ export async function startAgentRepl(options = {}) {
5749
5786
  );
5750
5787
  if (!_asyncHookSupervisor) {
5751
5788
  const { AsyncHookSupervisor } =
5752
- await import("../lib/async-hook-supervisor.cjs");
5789
+ await import("../lib/async-hook-supervisor.js");
5753
5790
  _asyncHookSupervisor = new AsyncHookSupervisor({
5754
5791
  persistStats: true,
5755
5792
  });
@@ -5847,7 +5884,7 @@ export async function startAgentRepl(options = {}) {
5847
5884
  if (_settingsHooks) {
5848
5885
  try {
5849
5886
  const { runObserveHooks } =
5850
- await import("../lib/settings-hook-events.cjs");
5887
+ await import("../lib/settings-hook-events.js");
5851
5888
  runObserveHooks(
5852
5889
  _settingsHooks,
5853
5890
  "SessionEnd",
@@ -4,7 +4,7 @@
4
4
  * spawn wrapper. The pure parts are unit-tested; real clipboard I/O is
5
5
  * environment-dependent and exercised through an injected spawnSync.
6
6
  */
7
- import { spawnSync as _spawnSync } from "node:child_process";
7
+ import { executionBroker } from "../lib/process-execution-broker/index.js";
8
8
 
9
9
  /** Flatten a message's content (string | content-parts[]) to plain text. Pure. */
10
10
  export function messageText(content) {
@@ -78,7 +78,9 @@ export function clipboardCommands(platform = process.platform) {
78
78
  ];
79
79
  }
80
80
 
81
- const _deps = { spawnSync: _spawnSync };
81
+ const _deps = {
82
+ spawnSync: (...args) => executionBroker.spawnSync(...args),
83
+ };
82
84
 
83
85
  /**
84
86
  * Write text to the system clipboard, trying each platform candidate in order
@@ -96,6 +98,10 @@ export function copyToClipboard(text, { platform, spawnSync } = {}) {
96
98
  input: text,
97
99
  encoding: "utf-8",
98
100
  windowsHide: true,
101
+ origin: "repl:clipboard-copy",
102
+ policy: "allow",
103
+ scope: "clipboard",
104
+ shell: false,
99
105
  });
100
106
  } catch (e) {
101
107
  lastErr = e.message;
@@ -9,15 +9,26 @@
9
9
  * or a real repo. The REPL (agent-repl.js) wires expandPrComments into the
10
10
  * same promptText seam that `/mcp__server__prompt` uses.
11
11
  */
12
- import { execFile } from "child_process";
12
+ import { executionBroker } from "../lib/process-execution-broker/index.js";
13
+
14
+ export const _deps = {
15
+ execFile: (...args) => executionBroker.execFile(...args),
16
+ };
13
17
 
14
18
  /** Default `gh` runner — resolves stdout, rejects with a friendly message. */
15
- function defaultRunGh(args) {
19
+ function defaultRunGh(args, deps = _deps) {
16
20
  return new Promise((resolve, reject) => {
17
- execFile(
21
+ deps.execFile(
18
22
  "gh",
19
23
  args,
20
- { encoding: "utf-8", maxBuffer: 16 * 1024 * 1024 },
24
+ {
25
+ encoding: "utf-8",
26
+ maxBuffer: 16 * 1024 * 1024,
27
+ origin: "repl:pr-comments",
28
+ policy: "allow",
29
+ scope: "pr",
30
+ shell: false,
31
+ },
21
32
  (err, stdout, stderr) => {
22
33
  if (err) {
23
34
  if (err.code === "ENOENT") {
@@ -125,7 +136,9 @@ export function formatPrComments(data) {
125
136
  * @param {object} opts { pr?: number, repo?: string, deps?: { runGh } }
126
137
  */
127
138
  export async function fetchPrComments({ pr = null, repo = null, deps } = {}) {
128
- const runGh = deps?.runGh || defaultRunGh;
139
+ const runtimeDeps = { ..._deps, ...(deps || {}) };
140
+ const runGh =
141
+ runtimeDeps.runGh || ((args) => defaultRunGh(args, runtimeDeps));
129
142
  const viewArgs = ["pr", "view"];
130
143
  if (pr) viewArgs.push(String(pr));
131
144
  if (repo) viewArgs.push("--repo", repo);
@@ -175,7 +188,12 @@ const PR_INSTRUCTION =
175
188
  * Throws on fetch failure (the REPL surfaces it and skips the turn).
176
189
  */
177
190
  export async function expandPrComments(line, { deps } = {}) {
178
- if (!String(line || "").trim().startsWith("/pr-comments")) return null;
191
+ if (
192
+ !String(line || "")
193
+ .trim()
194
+ .startsWith("/pr-comments")
195
+ )
196
+ return null;
179
197
  const { pr, repo } = parsePrCommentsArg(line);
180
198
  const data = await fetchPrComments({ pr, repo, deps });
181
199
  const block = formatPrComments(data);
@@ -183,5 +201,10 @@ export async function expandPrComments(line, { deps } = {}) {
183
201
  (data.reviews?.length || 0) +
184
202
  (data.conversation?.length || 0) +
185
203
  (data.inline?.length || 0);
186
- return { number: data.number, count, block, text: `${PR_INSTRUCTION}\n\n${block}` };
204
+ return {
205
+ number: data.number,
206
+ count,
207
+ block,
208
+ text: `${PR_INSTRUCTION}\n\n${block}`,
209
+ };
187
210
  }