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
@@ -0,0 +1,71 @@
1
+ import executionBroker from "./process-execution-broker/index.js";
2
+
3
+ const defaultRunSync = executionBroker.spawnSync.bind(executionBroker);
4
+ const defaultRunFileSync = executionBroker.execFileSync.bind(executionBroker);
5
+
6
+ function skillIdentity(skill = {}) {
7
+ const identity = String(
8
+ skill.id || skill.name || skill.skillName || "unknown",
9
+ )
10
+ .trim()
11
+ .replace(/[^a-zA-Z0-9._:-]+/g, "-")
12
+ .slice(0, 96);
13
+ return identity || "unknown";
14
+ }
15
+
16
+ function declaresShellExecution(skill = {}) {
17
+ return (
18
+ Array.isArray(skill.capabilities) &&
19
+ skill.capabilities.some(
20
+ (capability) => String(capability).toLowerCase() === "shell-exec",
21
+ )
22
+ );
23
+ }
24
+
25
+ /**
26
+ * Create the narrow process facade exposed to a skill handler.
27
+ *
28
+ * The host, not the handler, owns provenance and permission metadata. Generated
29
+ * handlers can choose argv and ordinary process options, but cannot relabel the
30
+ * execution or bypass the Broker boundary.
31
+ */
32
+ export function createSkillProcessBroker(
33
+ skill,
34
+ { runSync = defaultRunSync, runFileSync = defaultRunFileSync } = {},
35
+ ) {
36
+ if (!declaresShellExecution(skill)) return null;
37
+
38
+ const identity = skillIdentity(skill);
39
+ const metadata = Object.freeze({
40
+ origin: `skill:${identity}`,
41
+ policy: "allow",
42
+ scope: "skill",
43
+ pluginId: skill?.pluginId || skill?.plugin?.id || null,
44
+ pluginVersion: skill?.pluginVersion || skill?.plugin?.version || null,
45
+ pluginSource: skill?.pluginSource || skill?.plugin?.source || null,
46
+ });
47
+
48
+ return Object.freeze({
49
+ runSync(file, args = [], options = {}) {
50
+ return runSync(file, args, {
51
+ ...options,
52
+ ...metadata,
53
+ });
54
+ },
55
+
56
+ runFileSync(file, args = [], options = {}) {
57
+ return runFileSync(file, args, {
58
+ ...options,
59
+ ...metadata,
60
+ shell: false,
61
+ });
62
+ },
63
+ });
64
+ }
65
+
66
+ export const _skillProcessDefaults = {
67
+ runSync: defaultRunSync,
68
+ runFileSync: defaultRunFileSync,
69
+ };
70
+
71
+ export { declaresShellExecution as skillDeclaresShellExecution };
@@ -21,11 +21,15 @@
21
21
  import fsDefault from "node:fs";
22
22
  import pathDefault from "node:path";
23
23
  import { homedir } from "node:os";
24
- import { execSync as execSyncDefault } from "node:child_process";
25
24
  import { expandFileRefs } from "../runtime/file-ref-expander.js";
26
25
  import { projectRootBase } from "./project-root.cjs";
26
+ import executionBroker from "./process-execution-broker/index.js";
27
27
 
28
- const _deps = { fs: fsDefault, path: pathDefault, execSync: execSyncDefault };
28
+ const _deps = {
29
+ fs: fsDefault,
30
+ path: pathDefault,
31
+ execSync: (...args) => executionBroker.execSync(...args),
32
+ };
29
33
 
30
34
  /**
31
35
  * Split `--- ... ---` frontmatter from the body and camelCase the keys (so
@@ -191,6 +195,10 @@ function runBangs(text, { cwd, execSync }) {
191
195
  encoding: "utf-8",
192
196
  timeout: BANG_TIMEOUT_MS,
193
197
  stdio: ["ignore", "pipe", "pipe"],
198
+ origin: "slash-command:bang",
199
+ policy: "allow",
200
+ scope: "slash-command",
201
+ shell: true,
194
202
  });
195
203
  return String(out).trim();
196
204
  } catch (err) {
@@ -13,15 +13,14 @@
13
13
  *
14
14
  * Best-effort throughout: a missing config, a broken command, or a timeout just
15
15
  * yields no status line — it never blocks or breaks the REPL. `_deps` injection
16
- * (spawnSync / settings reader) for tests.
16
+ * (process runner / settings reader) for tests.
17
17
  */
18
18
 
19
- const cpDefault = require("node:child_process");
20
19
  const path = require("node:path");
21
20
  const { settingsPaths, readSettingsFile } = require("./settings-loader.cjs");
22
21
 
23
22
  const _deps = {
24
- spawnSync: cpDefault.spawnSync,
23
+ runProcess: null,
25
24
  // injectable so tests don't touch real settings files
26
25
  readSettings: (cwd, settingsFile) => {
27
26
  const out = [];
@@ -181,7 +180,7 @@ function isStatusLineDisabled({ cwd = process.cwd(), settingsFile } = {}) {
181
180
  function renderStatusLine(
182
181
  config,
183
182
  context = {},
184
- { cwd, timeout = 5000, columns, rows } = {},
183
+ { cwd, timeout = 5000, columns, rows, runProcess } = {},
185
184
  ) {
186
185
  if (!config || !config.command) return null;
187
186
  // Claude-Code parity (2.1.153): hand the command the terminal width/height so
@@ -194,7 +193,9 @@ function renderStatusLine(
194
193
  if (rws != null) env.LINES = String(rws);
195
194
  let res;
196
195
  try {
197
- res = _deps.spawnSync(config.command, {
196
+ const runner = runProcess || _deps.runProcess;
197
+ if (typeof runner !== "function") return null;
198
+ res = runner(config.command, [], {
198
199
  input: JSON.stringify(context),
199
200
  cwd: cwd || process.cwd(),
200
201
  env,
@@ -202,6 +203,9 @@ function renderStatusLine(
202
203
  timeout,
203
204
  shell: true,
204
205
  maxBuffer: 1024 * 1024,
206
+ origin: "status-line:command",
207
+ policy: "allow",
208
+ scope: "status-line",
205
209
  });
206
210
  } catch {
207
211
  return null; // spawn failure → no status line
@@ -216,11 +220,28 @@ function renderStatusLine(
216
220
  }
217
221
 
218
222
  /** Convenience: load + render in one call (used by the REPL each turn). */
219
- function getStatusLine({ cwd, settingsFile, sessionId, model, provider, projectDir, timeout, columns, rows } = {}) {
223
+ function getStatusLine({
224
+ cwd,
225
+ settingsFile,
226
+ sessionId,
227
+ model,
228
+ provider,
229
+ projectDir,
230
+ timeout,
231
+ columns,
232
+ rows,
233
+ runProcess,
234
+ } = {}) {
220
235
  const config = loadStatusLineConfig({ cwd, settingsFile });
221
236
  if (!config) return null;
222
237
  const context = buildContext({ sessionId, model, provider, cwd, projectDir });
223
- return renderStatusLine(config, context, { cwd, timeout, columns, rows });
238
+ return renderStatusLine(config, context, {
239
+ cwd,
240
+ timeout,
241
+ columns,
242
+ rows,
243
+ runProcess,
244
+ });
224
245
  }
225
246
 
226
247
  module.exports = {
@@ -0,0 +1,33 @@
1
+ import statusLine from "./status-line.cjs";
2
+ import executionBroker from "./process-execution-broker/index.js";
3
+
4
+ const brokerRunner = executionBroker.spawnSync.bind(executionBroker);
5
+
6
+ export function renderStatusLine(config, context, options = {}) {
7
+ return statusLine.renderStatusLine(config, context, {
8
+ ...options,
9
+ runProcess:
10
+ options.runProcess || statusLine._deps.runProcess || brokerRunner,
11
+ });
12
+ }
13
+
14
+ export function getStatusLine(options = {}) {
15
+ return statusLine.getStatusLine({
16
+ ...options,
17
+ runProcess:
18
+ options.runProcess || statusLine._deps.runProcess || brokerRunner,
19
+ });
20
+ }
21
+
22
+ export const {
23
+ loadStatusLineConfig,
24
+ buildContext,
25
+ formatTokens,
26
+ shortenPath,
27
+ renderDefaultStatusLine,
28
+ isStatusLineDisabled,
29
+ terminalSize,
30
+ _deps,
31
+ } = statusLine;
32
+
33
+ export default { ...statusLine, renderStatusLine, getStatusLine };
@@ -83,6 +83,10 @@ export class SubAgentContext {
83
83
  // nested spawns (threaded into the loop options so a nested spawn_sub_agent
84
84
  // reads it as ctx.subAgentContract).
85
85
  this.subAgentContract = options.subAgentContract || null;
86
+ // Optional session-level Extension Tier admission policy. Keep it as an
87
+ // explicit inherited capability so child loops cannot silently bypass the
88
+ // parent's admission decision.
89
+ this.toolAdmission = options.toolAdmission || null;
86
90
  // Skill capability INTERSECT: null = unrestricted; a list (possibly empty)
87
91
  // restricts run_skill/list_skills in this context's loop to those skills.
88
92
  this.skillAllowlist =
@@ -335,6 +339,7 @@ export class SubAgentContext {
335
339
  subAgentBudget: this.subAgentBudget,
336
340
  // This context's effective contract = the ceiling for its nested spawns.
337
341
  subAgentContract: this.subAgentContract,
342
+ toolAdmission: this.toolAdmission,
338
343
  // Skill allow-list restricting run_skill/list_skills in this loop.
339
344
  skillAllowlist: this.skillAllowlist,
340
345
  // Parent trace for hook envelopes (absent → key omitted, no parent_id).
@@ -30,6 +30,8 @@ const FULL_TOOLS = Object.freeze([
30
30
  "write_file",
31
31
  "edit_file",
32
32
  "edit_file_hashed",
33
+ "delete_file",
34
+ "move_file",
33
35
  "list_dir",
34
36
  "search_files",
35
37
  "search_sessions",
@@ -49,6 +51,8 @@ const DESIGN_TOOLS = Object.freeze([
49
51
  "write_file",
50
52
  "edit_file",
51
53
  "edit_file_hashed",
54
+ "delete_file",
55
+ "move_file",
52
56
  "list_dir",
53
57
  "search_files",
54
58
  "web_fetch",
@@ -11,21 +11,23 @@
11
11
  * @module turn-context
12
12
  */
13
13
 
14
- import { execSync } from "child_process";
15
14
  import path from "path";
15
+ import { executionBroker } from "./process-execution-broker/index.js";
16
16
 
17
- const _deps = { execSync };
17
+ const _deps = {
18
+ execFileSync: (...args) => executionBroker.execFileSync(...args),
19
+ };
18
20
 
19
21
  /**
20
22
  * Run a git command with stdio pipe and return stdout or null.
21
- * @param {string} cmd
23
+ * @param {string[]} args
22
24
  * @param {string} cwd
23
25
  * @returns {string|null}
24
26
  */
25
- function _git(cmd, cwd) {
27
+ function _git(args, cwd) {
26
28
  try {
27
29
  return _deps
28
- .execSync(`git ${cmd}`, {
30
+ .execFileSync("git", args, {
29
31
  cwd,
30
32
  encoding: "utf-8",
31
33
  stdio: ["ignore", "pipe", "ignore"],
@@ -33,6 +35,10 @@ function _git(cmd, cwd) {
33
35
  // `status --porcelain` on a dirty repo with many files can exceed the
34
36
  // 1 MB execSync default → ENOBUFS → null → "(clean)" misreport below.
35
37
  maxBuffer: 16 * 1024 * 1024,
38
+ origin: "context:git",
39
+ policy: "allow",
40
+ scope: "context",
41
+ shell: false,
36
42
  })
37
43
  .trim();
38
44
  } catch (_e) {
@@ -60,10 +66,10 @@ export function buildTurnContext({
60
66
  lines.push(`## Turn context (iteration ${iteration})`);
61
67
  lines.push(`- cwd: ${path.resolve(cwd)}`);
62
68
 
63
- const branch = _git("rev-parse --abbrev-ref HEAD", cwd);
69
+ const branch = _git(["rev-parse", "--abbrev-ref", "HEAD"], cwd);
64
70
  if (branch) {
65
- const head = _git("rev-parse --short HEAD", cwd);
66
- const status = _git("status --porcelain", cwd);
71
+ const head = _git(["rev-parse", "--short", "HEAD"], cwd);
72
+ const status = _git(["status", "--porcelain"], cwd);
67
73
  // Distinguish "command failed" (null — timeout / huge output) from "" (truly
68
74
  // clean): the old `status && …` reported a repo as "(clean)" whenever status
69
75
  // couldn't be determined, which is a wrong signal to the model.
@@ -121,6 +121,89 @@ export function classifyActionRisk(actionClass) {
121
121
  return "conditional"; // push — depends on branch protection
122
122
  }
123
123
 
124
+ /**
125
+ * Classify a shell command before it reaches the process broker. This is a
126
+ * deliberately conservative, token-free classifier: compound commands use
127
+ * the highest-risk segment and unknown commands remain unknown so an
128
+ * unattended caller can fail closed.
129
+ */
130
+ export function classifyShellAction(command) {
131
+ if (typeof command !== "string" || !command.trim()) return null;
132
+ const segments = command
133
+ .split(/&&|\|\||[;\n]|\|/)
134
+ .map((part) =>
135
+ part
136
+ .trim()
137
+ .replace(/^(?:env\s+)?(?:sudo\s+)?(?:command\s+)?/i, "")
138
+ .toLowerCase(),
139
+ )
140
+ .filter(Boolean);
141
+ const classifySegment = (segment) => {
142
+ if (/^git\s+push\b/.test(segment)) return ACTION_CLASS.PUSH;
143
+ if (/^git\s+(?:merge|rebase|cherry-pick)\b/.test(segment)) {
144
+ return ACTION_CLASS.MERGE;
145
+ }
146
+ if (/^(?:npm|pnpm|yarn|bun)\s+publish\b/.test(segment)) {
147
+ return ACTION_CLASS.PUBLISH;
148
+ }
149
+ if (
150
+ /^(?:terraform\s+(?:apply|destroy)|pulumi\s+up|kubectl\s+(?:apply|delete|rollout)|helm\s+(?:install|upgrade)|docker\s+push)\b/.test(
151
+ segment,
152
+ )
153
+ ) {
154
+ return segment.startsWith("docker push")
155
+ ? ACTION_CLASS.DEPLOY
156
+ : ACTION_CLASS.INFRA_MUTATION;
157
+ }
158
+ if (/\b(?:deploy|rollout)\b/.test(segment)) return ACTION_CLASS.DEPLOY;
159
+ if (/^(?:git\s+(?:status|diff|log|show|branch)|ls\b|dir\b|pwd\b|cat\b|type\b|rg\b|grep\b|find\b|where\b)/.test(segment)) {
160
+ return ACTION_CLASS.READ;
161
+ }
162
+ if (/^(?:npm|pnpm|yarn|bun)\s+(?:test|run\s+(?:test|lint|build)|install\b)/.test(segment) || /^(?:pytest|vitest|jest|cargo\s+test|go\s+test)\b/.test(segment)) {
163
+ return ACTION_CLASS.LOCAL_WRITE;
164
+ }
165
+ if (/^echo\b/.test(segment) && />/.test(segment)) {
166
+ return ACTION_CLASS.LOCAL_WRITE;
167
+ }
168
+ return null;
169
+ };
170
+ const rank = [
171
+ ACTION_CLASS.READ,
172
+ ACTION_CLASS.LOCAL_WRITE,
173
+ ACTION_CLASS.COMMIT,
174
+ ACTION_CLASS.PUSH,
175
+ ACTION_CLASS.PUBLISH,
176
+ ACTION_CLASS.MERGE,
177
+ ACTION_CLASS.DEPLOY,
178
+ ACTION_CLASS.INFRA_MUTATION,
179
+ ACTION_CLASS.EXTERNAL_MESSAGE,
180
+ ];
181
+ const classified = segments.map(classifySegment);
182
+ return classified.reduce((highest, current) => {
183
+ if (!current) return null;
184
+ if (!highest) return current;
185
+ return rank.indexOf(current) > rank.indexOf(highest) ? current : highest;
186
+ }, null);
187
+ }
188
+
189
+ /** Apply the unattended policy to a shell command, including protected push targets. */
190
+ export function evaluateUnattendedShellAction(command, params = {}) {
191
+ const actionClass = classifyShellAction(command);
192
+ const protectedBranch =
193
+ params.protectedBranch === true ||
194
+ /\bgit\s+push\b[^\n]*(?:^|\s)(?:main|master|develop|production)(?:\s|$)/i.test(
195
+ command || "",
196
+ );
197
+ return {
198
+ actionClass,
199
+ ...evaluateUnattendedAction({
200
+ ...params,
201
+ actionClass,
202
+ protectedBranch,
203
+ }),
204
+ };
205
+ }
206
+
124
207
  /**
125
208
  * Decide whether a fired task may perform one action. Fail-closed.
126
209
  *
@@ -5,12 +5,12 @@
5
5
  import fsDefault from "fs";
6
6
  import pathDefault from "path";
7
7
  import osDefault from "os";
8
- import { spawn as spawnDefault } from "child_process";
9
8
  import { fileURLToPath } from "url";
10
9
  import chalk from "chalk";
11
10
  import semver from "semver";
12
11
  import { VERSION } from "../constants.js";
13
12
  import { readDiskVersion } from "./version-skew.js";
13
+ import { executionBroker } from "./process-execution-broker/index.js";
14
14
 
15
15
  export const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
16
16
  export const NPM_LATEST_URL =
@@ -19,7 +19,7 @@ export const _deps = {
19
19
  fs: fsDefault,
20
20
  path: pathDefault,
21
21
  os: osDefault,
22
- spawn: spawnDefault,
22
+ spawn: (...args) => executionBroker.spawn(...args),
23
23
  };
24
24
 
25
25
  export function cachePath(deps = _deps) {
@@ -95,6 +95,10 @@ export function maybeNotifyUpdate(opts = {}) {
95
95
  detached: true,
96
96
  stdio: "ignore",
97
97
  windowsHide: true,
98
+ origin: "update:notice-refresh",
99
+ policy: "allow",
100
+ scope: "update",
101
+ shell: false,
98
102
  });
99
103
  if (child && typeof child.unref === "function") child.unref();
100
104
  out.spawned = true;
@@ -26,6 +26,7 @@ export function withFileLock(targetPath, fn, opts = {}) {
26
26
  _fs = defaultFs,
27
27
  _now = () => Date.now(),
28
28
  _sleep = sleepSync,
29
+ failIfUnavailable = false,
29
30
  } = opts;
30
31
 
31
32
  const lockDir = `${targetPath}.lock`;
@@ -54,6 +55,12 @@ export function withFileLock(targetPath, fn, opts = {}) {
54
55
  }
55
56
  }
56
57
 
58
+ if (!held && failIfUnavailable) {
59
+ const error = new Error(`Could not acquire state lock: ${targetPath}`);
60
+ error.code = "STATE_LOCK_UNAVAILABLE";
61
+ throw error;
62
+ }
63
+
57
64
  try {
58
65
  return fn({ locked: held });
59
66
  } finally {
@@ -14,4 +14,5 @@ export {
14
14
  ChainlessChainWSServer,
15
15
  tokenizeCommand,
16
16
  isCommandBlocked,
17
+ _deps,
17
18
  } from "../gateways/ws/ws-server.js";