chainlesschain 0.162.176 → 0.162.178

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 (260) hide show
  1. package/README.md +10 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BDLu5Elz.js → AIOps-DRftcSue.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-DH5us-CK.js → ActionButton-BFvUaMKR.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-BZ0u8IFG.js → Analytics-C0-Rru4P.js} +3 -3
  7. package/src/assets/web-panel/assets/AppLayout-bx-BCljj.js +9 -0
  8. package/src/assets/web-panel/assets/{Artifacts-Br2YBbh_.js → Artifacts-DAJ8B3Un.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-C3C6a482.js → Audit-hOk4L1lr.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-CzHvebcj.js → BackgroundAgents-3pbDpM9z.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-DZNHYDFd.js → Backup-BtziGDn9.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-VRiC4fIx.js → BaseInput-kmshphJ3.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-Cm08WWAD.js → Chat-d7tGSosA.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CGHYrugQ.js → ChatBubbleRenderer-p-_PBpX_.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-DtByk7d7.js → Checkbox-C4Eh4Tz5.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-CphXXOfD.js → Codegen-r7gmhZyA.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-Hz86TnLR.js → Col-U7mDaGlL.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-HP03ltpD.js → Community-Bpu8aH1T.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-B_N1mqQz.js → Compact-CHb2XBJe.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-CVztRpi8.js → Compliance-Cn_r4dey.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-wUVOyZih.js → Cowork-CdMWfDcz.js} +4 -4
  22. package/src/assets/web-panel/assets/{Cron-DW5TLJKw.js → Cron-BtnREHWy.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-CrAFGhWH.js → Crosschain-BKI9TSzr.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-pA-oD8ke.js → DID-pkNubzzJ.js} +2 -2
  25. package/src/assets/web-panel/assets/Dashboard-1rrz1snN.js +3 -0
  26. package/src/assets/web-panel/assets/{Dropdown-EweJcsek.js → Dropdown-DLyFVxDc.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-C9xVLPG4.js → EmailListRenderer-CtUWfYVq.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CDcEEqlu.js → FamilyGuardDashboard-B8eX2Qe4.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-DtZda9A_.js → Federation-D8lsDGus.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-CiYdcVz3.js → FormItemContext-CRYt_aIw.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DA13uwA0.js → GenericCardRenderer-ClKzY8_N.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DzRhZD1O.js → Git-BXj5Dney.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-D5RMgOSb.js → Governance-Cm-I8RMz.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BgrPfSNk.js → Inference-CPvbhvgt.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DzjnD571.js → KnowledgeGraph-sYNDZaoi.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BhWzVDtN.js → Logs-BZY_3CRZ.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-BDape9cx.js → MarkdownRenderer-up0BW6pv.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-DJtL5GV7.js → Marketplace-C5MEJ2Qe.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-CZcQygI7.js → McpTools-ihdrn43I.js} +5 -5
  40. package/src/assets/web-panel/assets/{Memory-DUWSDUUu.js → Memory-Br8bPMlh.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BTwq2WKY.js → MobileBridge-BNntgrYW.js} +1 -1
  42. package/src/assets/web-panel/assets/MobileProjects-BdV915mw.js +1 -0
  43. package/src/assets/web-panel/assets/{Mtc-BiGugEQm.js → Mtc-A3wDmlqL.js} +5 -5
  44. package/src/assets/web-panel/assets/{MtcAudit-DY7a6gUe.js → MtcAudit-CF-mBLWM.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-BQbDu_w7.js → Multisig-Iy2k_MSo.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CM2wXTLv.js → NLProgramming-kk0W7HUb.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-DI6gGs1v.js → Notes-B5u5t_4S.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-BsZOLWAB.js → NotificationSettings-BN0POf6_.js} +1 -1
  49. package/src/assets/web-panel/assets/OrderTableRenderer-CHkSUrXB.js +1 -0
  50. package/src/assets/web-panel/assets/{Organization-Cds0_tXr.js → Organization-DwWQESuN.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-WunYMD87.js → Overflow-DG6klrcC.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-Bo6j4DDv.js → P2P-BwJcKkgZ.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-Bh2XPD5f.js → PdhVaultBrowser-BwOHG0in.js} +5 -5
  54. package/src/assets/web-panel/assets/{Permissions-EMvMMC8N.js → Permissions-CGMXe4TX.js} +4 -4
  55. package/src/assets/web-panel/assets/PersonalDataHub-ziYqg7-A.js +8 -0
  56. package/src/assets/web-panel/assets/{Pipeline-BOx8HOgL.js → Pipeline-BzJfeoGt.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-tBeTVQVM.js → Privacy-DLh3Bblx.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CVYg1W4M.js → ProjectInit-USVWW36c.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-Dvt5I7y1.js → ProjectSettings-CiiOn62h.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-6V-PNmcA.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-Ct8xqY-E.js → Providers-CBPWWzpu.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-Cni8Ooja.js → QrScannerModal-QVwoRUq3.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-BJVLKdxr.js → QuickAsk-CXnR-2Vn.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-DPG8Rbbm.js → Recommend-ClaNzjmF.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-DsdR7dCt.js → RemoteSession-C3rGw8vJ.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-Csg1YM-b.js → Reputation-Ci-OWAoP.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-D9DoFoEf.js → Row-DRhAwXOS.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BsvKrXMS.js → RssFeed-BQLJQ2_y.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-DFUStfgQ.js → Search-QQUpkfFd.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-ILg1zxdK.js → Security-DdXKzuKT.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-Dd41PCaY.js → Services-x2Zh62Qd.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-Bzo1cN80.js → Skeleton-GdY4KwRz.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-BDHh17P0.js → Skills-Bv4tY1Fd.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-jl7UTiRY.js → Sla-C3QnM-11.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-BePa-RF6.js → SpeechSettings-Bl3ytvmI.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-DiqqDKGZ.js → SyncSettings-Wp9IwTsP.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-DYQ_6lxj.js → Tasks-CF3rIrDe.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-JiDeI06L.js → Templates-CGfvVVM9.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-hhgI6zwS.js → Tenant-CVXmwQ3U.js} +1 -1
  80. package/src/assets/web-panel/assets/Terminal-bvwrt03E.js +3 -0
  81. package/src/assets/web-panel/assets/{TimelineRenderer-B8uB5Llk.js → TimelineRenderer-D0g74KhH.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-C3b_6r2z.js → Tokens-BH4IwzlT.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-tIP7HKVe.js → Trigger-DJOpM533.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-vjoc11vJ.js → Trust-B43EPRLr.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DUPBnGuH.js → UkeySign-BmBFG-em.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CBvhUY5T.js → VideoEditing-n9oJwB8k.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-DUaQ0uA5.js → Wallet-D5QeivHp.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DllSivjE.js → WebAuthn-DcNy7igO.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-xc8D3uO6.js → WorkflowEditor-BVjc7-5-.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-BVicU7oA.js → chat-Dy5Tfj3m.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-DJzLmhLm.js → colors-C4c2CNZU.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-BvYRfThE.js → compact-item-DPa3O5vN.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DGXxCBKR.js → createContext-TLcfNA6_.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BAwdDA_5.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-SBDJB1y4.js → hasIn-D41LVFkp.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-D7HimK0M.js → index-0oevYjfT.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DCdRAgjy.js → index-388pLGJ1.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BO1itZaY.js → index-B8nLBZbv.js} +3 -3
  99. package/src/assets/web-panel/assets/{index-DvUTDYXX.js → index-BPTGAjee.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-hxTODbM1.js → index-BPtrOBmW.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-wcCL-miV.js → index-BQiIxHBy.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CKyEivf8.js → index-BSM1cHVK.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BJZf9DhV.js → index-BYPr9fkz.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DHVLJ8q0.js → index-BsQ7Ev6i.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cs2rmLFt.js → index-Btk9qLL2.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-z1ZylsLq.js → index-BvmziZSG.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Cf-O_g_8.js → index-BvopLC_T.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DMarmfrv.js → index-C7xhTVyP.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CoJAO1Lm.js → index-CNk_ZooP.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-9gdI7uUW.js → index-CQrEHoOG.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Bf-ctERC.js → index-CSxex23J.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-MjC4G09d.js → index-CVjgm992.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-e4fXH_WO.js → index-CWK4zOPe.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-xfluRkCT.js → index-CX0VsoP4.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DRfiXB_p.js → index-CXl0YPNG.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-d5BVd-cL.js → index-Cip7LWml.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dm_77jgR.js → index-Cq_hlWNt.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-YJkzy8ZF.js → index-CzZ49YZL.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CtwqO5qo.js → index-D2Nkivlm.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BYqz4Wrr.js → index-DBUgRs4D.js} +1 -1
  121. package/src/assets/web-panel/assets/index-DEjVkdzq.js +1 -0
  122. package/src/assets/web-panel/assets/{index-CdGY9P8a.js → index-DNsBj2Ob.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DonCnfMr.js → index-Di4X8cfI.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-1SdDS6lR.js → index-DljFsVGI.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DnjPdvR6.js → index-Korc3QIe.js} +1 -1
  126. package/src/assets/web-panel/assets/index-LMOc5xrS.js +1 -0
  127. package/src/assets/web-panel/assets/{index-VMfwIH5G.js → index-MKZDje0H.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DKrvvWm4.js → index-OHAfRu_3.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-FxZzRyE1.js → index-WEJr8PL5.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Crk5NTb0.js → index-WinCp6du.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DCqRS6da.js → index-Yjr6cqSK.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BTrBGBJs.js → index-iQ6gtFih.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-lpaGoTH3.js → index-pt3s7yvV.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CloCgBUR.js → index-tQ3igERQ.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-C1zO1KnY.js → initDefaultProps-BFZu87WZ.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-CWLtEGmC.js → motion-DJIo7qvt.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-DzD_C3Vm.js → move-Cfr5qknL.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-D880PYJl.js → mtc-parser-Bgc-OadH.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-CFR_z2ov.js → omit-X3WI-TNp.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-srIhgrSC.js → pickAttrs-pJhU9IxK.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-C1rXpibP.js → placementArrow-BNg_Vj3T.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-C30gRcSS.js → responsiveObserve-TeSEGQ5-.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CvtKiMfV.js → slide-D_t_P0bv.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DNHO7ITG.js → statusUtils-DrrIMwAT.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-Dt_Sl-g4.js → styleChecker-BjZCuFRm.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-Cjev42Gh.js → useFlexGapSupport-rTFdlqdQ.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-Baxglj2V.js → useFs-BidCpfLX.js} +1 -1
  148. package/src/assets/web-panel/assets/usePersonalDataHub-C5mHttA9.js +1 -0
  149. package/src/assets/web-panel/assets/{vnode-mIRkdT7o.js → vnode-BrbcRiHZ.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-HzI5DlH_.js → zoom-PISX7AkR.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/commands/__tests__/hub-wechat.test.js +45 -0
  153. package/src/commands/agenda.js +22 -6
  154. package/src/commands/agent.js +3 -3
  155. package/src/commands/background-session.js +16 -6
  156. package/src/commands/batch.js +79 -27
  157. package/src/commands/changelog.js +15 -4
  158. package/src/commands/context.js +33 -1
  159. package/src/commands/eval.js +21 -6
  160. package/src/commands/hook.js +2 -2
  161. package/src/commands/hub.js +473 -39
  162. package/src/commands/init.js +212 -110
  163. package/src/commands/llm.js +22 -6
  164. package/src/commands/loop.js +9 -2
  165. package/src/commands/skill.js +13 -1
  166. package/src/commands/statusline.js +3 -3
  167. package/src/data/changelog.json +53 -5
  168. package/src/gateways/ws/personal-data-hub-protocol.js +22 -2
  169. package/src/harness/background-task-manager.js +18 -6
  170. package/src/harness/background-task-worker.js +11 -18
  171. package/src/harness/golden-transcript.js +3 -0
  172. package/src/harness/mcp-client.js +9 -15
  173. package/src/harness/worktree-isolator.js +18 -21
  174. package/src/index.js +18 -7
  175. package/src/lib/agent-core.js +5 -0
  176. package/src/lib/agent-ipc-bus.js +12 -3
  177. package/src/lib/agent-team/team-worktree.js +28 -6
  178. package/src/lib/agent-worktree.js +20 -19
  179. package/src/lib/approval-authority-store.js +891 -0
  180. package/src/lib/async-hook-supervisor.cjs +134 -24
  181. package/src/lib/async-hook-supervisor.js +47 -0
  182. package/src/lib/background-agent-supervisor.js +35 -12
  183. package/src/lib/background-interaction-resolver.js +399 -54
  184. package/src/lib/background-session-transport.js +3 -1
  185. package/src/lib/background-task-manager.js +5 -1
  186. package/src/lib/changelog.js +57 -0
  187. package/src/lib/chrome-connector.js +6 -2
  188. package/src/lib/claude-code-bridge.js +24 -8
  189. package/src/lib/cli-anything-bridge.js +82 -25
  190. package/src/lib/context-breakdown.js +82 -3
  191. package/src/lib/doctor-checkup.js +18 -6
  192. package/src/lib/eval/tasks.js +25 -31
  193. package/src/lib/event-runtime-host.js +225 -0
  194. package/src/lib/event-runtime-store.js +102 -21
  195. package/src/lib/event-runtime-worker.js +70 -2
  196. package/src/lib/hook-runner.cjs +71 -36
  197. package/src/lib/hook-runner.js +55 -0
  198. package/src/lib/hooks-v2-producers.js +33 -8
  199. package/src/lib/hooks-v2-runtime.js +360 -40
  200. package/src/lib/host-adb-bridge.js +18 -3
  201. package/src/lib/interaction-adapter.js +66 -0
  202. package/src/lib/lsp/__tests__/benchmark.test.js +61 -0
  203. package/src/lib/lsp/__tests__/lsp-client.test.js +6 -1
  204. package/src/lib/lsp/benchmark.js +20 -4
  205. package/src/lib/lsp/lsp-client.js +6 -4
  206. package/src/lib/lsp/lsp-server-registry.js +0 -2
  207. package/src/lib/operation-fingerprint.js +107 -2
  208. package/src/lib/orchestrator.js +8 -2
  209. package/src/lib/packer/pack-update-applier.js +14 -2
  210. package/src/lib/packer/smoke-runner.js +18 -5
  211. package/src/lib/paths.js +1 -1
  212. package/src/lib/pdh-dedicated-batch-collectors.js +124 -0
  213. package/src/lib/personal-data-hub-wiring.js +327 -52
  214. package/src/lib/plugin-monitor-supervisor.js +20 -13
  215. package/src/lib/plugin-runtime/install.js +10 -3
  216. package/src/lib/process-execution-broker/credential-agent.js +954 -111
  217. package/src/lib/process-execution-broker/index.js +369 -85
  218. package/src/lib/process-execution-broker/platform-sandbox.js +320 -140
  219. package/src/lib/provider-http-error.js +94 -0
  220. package/src/lib/remote-approval-bridge.js +222 -26
  221. package/src/lib/repl-bang-memorize.js +10 -2
  222. package/src/lib/repl-goal.js +19 -2
  223. package/src/lib/settings-hook-events.cjs +13 -8
  224. package/src/lib/settings-hook-events.js +20 -0
  225. package/src/lib/side-effect-ledger-store.js +65 -14
  226. package/src/lib/skill-loader.js +215 -12
  227. package/src/lib/skill-packs/generator.js +18 -9
  228. package/src/lib/skill-process-broker.js +85 -0
  229. package/src/lib/slash-commands.js +10 -2
  230. package/src/lib/status-line.cjs +28 -7
  231. package/src/lib/status-line.js +33 -0
  232. package/src/lib/sub-agent-context.js +42 -0
  233. package/src/lib/turn-binding-store.js +64 -15
  234. package/src/lib/turn-binding.js +85 -16
  235. package/src/repl/agent-repl.js +88 -49
  236. package/src/repl/remote-approval.js +13 -13
  237. package/src/repl/repl-turn-binding.js +46 -16
  238. package/src/runtime/agent-core.js +419 -84
  239. package/src/runtime/coding-agent-contract-shared.cjs +16 -0
  240. package/src/runtime/headless-runner.js +172 -44
  241. package/src/runtime/headless-stream.js +221 -11
  242. package/src/runtime/session-slash-commands.js +506 -0
  243. package/src/skills/video-editing/extractors/audio-extractor.js +13 -5
  244. package/src/skills/video-editing/extractors/video-extractor.js +13 -3
  245. package/src/skills/video-editing/media-process.js +20 -0
  246. package/src/skills/video-editing/render/audio-mix.js +13 -3
  247. package/src/skills/video-editing/render/ffmpeg-concat.js +7 -2
  248. package/src/skills/video-editing/render/ffmpeg-extract.js +7 -2
  249. package/src/workers/background-agent-worker.js +76 -40
  250. package/src/assets/web-panel/assets/AppLayout-Duu8xR14.js +0 -9
  251. package/src/assets/web-panel/assets/Dashboard-CXrd5gAw.js +0 -3
  252. package/src/assets/web-panel/assets/MobileProjects-NZvvfDME.js +0 -1
  253. package/src/assets/web-panel/assets/OrderTableRenderer-C48mu09U.js +0 -1
  254. package/src/assets/web-panel/assets/PersonalDataHub-AX3ypUDV.js +0 -9
  255. package/src/assets/web-panel/assets/Projects-Cc7FC9-e.js +0 -1
  256. package/src/assets/web-panel/assets/Terminal-CjTZPa37.js +0 -3
  257. package/src/assets/web-panel/assets/devWarning-BT46Y_QI.js +0 -1
  258. package/src/assets/web-panel/assets/index-B7nuIywP.js +0 -1
  259. package/src/assets/web-panel/assets/index-ycwAfC-i.js +0 -1
  260. package/src/assets/web-panel/assets/usePersonalDataHub-B4NkcLaP.js +0 -1
@@ -19,8 +19,6 @@
19
19
  import fs from "fs";
20
20
  import path from "path";
21
21
  import { fileURLToPath } from "url";
22
- import { spawn } from "child_process";
23
- import { execFileSync } from "child_process";
24
22
  import chalk from "chalk";
25
23
  import { logger } from "../lib/logger.js";
26
24
  import { runBatch } from "../lib/agent-batch.js";
@@ -31,6 +29,12 @@ import {
31
29
  mergeWorktree,
32
30
  } from "../harness/worktree-isolator.js";
33
31
  import { findProjectRoot } from "../lib/project-detector.js";
32
+ import executionBroker from "../lib/process-execution-broker/index.js";
33
+
34
+ export const _processDeps = {
35
+ spawn: executionBroker.spawn.bind(executionBroker),
36
+ execFileSync: executionBroker.execFileSync.bind(executionBroker),
37
+ };
34
38
 
35
39
  const BIN = path.resolve(
36
40
  path.dirname(fileURLToPath(import.meta.url)),
@@ -183,6 +187,26 @@ function sanitize(key) {
183
187
  return String(key).replace(/[^a-zA-Z0-9._-]/g, "-");
184
188
  }
185
189
 
190
+ function spawnBatchProcess(command, args, options, origin) {
191
+ return _processDeps.spawn(command, args, {
192
+ ...options,
193
+ origin,
194
+ policy: "allow",
195
+ scope: "batch",
196
+ });
197
+ }
198
+
199
+ function runBatchGit(args, cwd, options, origin) {
200
+ return _processDeps.execFileSync("git", args, {
201
+ ...options,
202
+ cwd,
203
+ origin,
204
+ policy: "allow",
205
+ scope: "batch",
206
+ shell: false,
207
+ });
208
+ }
209
+
186
210
  function spawnAgent(prompt, cwd, opts = {}) {
187
211
  return new Promise((resolve, reject) => {
188
212
  const args = [
@@ -196,11 +220,17 @@ function spawnAgent(prompt, cwd, opts = {}) {
196
220
  "text",
197
221
  ];
198
222
  if (opts.model) args.push("--model", opts.model);
199
- const child = spawn(process.execPath, args, {
200
- cwd,
201
- env: { ...process.env, CLAUDECODE: "1" },
202
- windowsHide: true,
203
- });
223
+ const child = spawnBatchProcess(
224
+ process.execPath,
225
+ args,
226
+ {
227
+ cwd,
228
+ env: { ...process.env, CLAUDECODE: "1" },
229
+ windowsHide: true,
230
+ shell: false,
231
+ },
232
+ "batch:agent-run",
233
+ );
204
234
  let err = "";
205
235
  child.stderr?.on("data", (d) => (err += d.toString("utf8")));
206
236
  child.on("error", (e) => reject(new Error(e.message)));
@@ -214,12 +244,17 @@ function spawnAgent(prompt, cwd, opts = {}) {
214
244
 
215
245
  function runTestCommand(command, cwd) {
216
246
  return new Promise((resolve, reject) => {
217
- const child = spawn(command, {
218
- cwd,
219
- shell: true,
220
- env: process.env,
221
- windowsHide: true,
222
- });
247
+ const child = spawnBatchProcess(
248
+ command,
249
+ [],
250
+ {
251
+ cwd,
252
+ shell: true,
253
+ env: process.env,
254
+ windowsHide: true,
255
+ },
256
+ "batch:test-command",
257
+ );
223
258
  let err = "";
224
259
  child.stderr?.on("data", (d) => (err += d.toString("utf8")));
225
260
  child.on("error", (e) => reject(new Error(e.message)));
@@ -234,11 +269,13 @@ function runTestCommand(command, cwd) {
234
269
  /** `git add -A` staged numstat totals for a worktree. */
235
270
  function gitDiffStat(cwd) {
236
271
  try {
237
- execFileSync("git", ["add", "-A"], { cwd, stdio: "ignore" });
238
- const out = execFileSync("git", ["diff", "--cached", "--numstat"], {
272
+ runBatchGit(["add", "-A"], cwd, { stdio: "ignore" }, "batch:git-diff");
273
+ const out = runBatchGit(
274
+ ["diff", "--cached", "--numstat"],
239
275
  cwd,
240
- encoding: "utf8",
241
- });
276
+ { encoding: "utf8" },
277
+ "batch:git-diff",
278
+ );
242
279
  let insertions = 0;
243
280
  let deletions = 0;
244
281
  let filesChanged = 0;
@@ -258,11 +295,13 @@ function gitDiffStat(cwd) {
258
295
 
259
296
  function gitCommitAll(cwd, message) {
260
297
  try {
261
- execFileSync("git", ["add", "-A"], { cwd, stdio: "ignore" });
262
- execFileSync("git", ["commit", "-m", message, "--no-verify"], {
298
+ runBatchGit(["add", "-A"], cwd, { stdio: "ignore" }, "batch:git-commit");
299
+ runBatchGit(
300
+ ["commit", "-m", message, "--no-verify"],
263
301
  cwd,
264
- stdio: "ignore",
265
- });
302
+ { stdio: "ignore" },
303
+ "batch:git-commit",
304
+ );
266
305
  return true;
267
306
  } catch {
268
307
  return false; // nothing to commit / commit failed
@@ -289,11 +328,17 @@ async function decomposeGoal(goal, parts, opts = {}) {
289
328
  "plan",
290
329
  ];
291
330
  if (opts.model) args.push("--model", opts.model);
292
- const child = spawn(process.execPath, args, {
293
- cwd: opts.repoDir || process.cwd(),
294
- env: { ...process.env, CLAUDECODE: "1" },
295
- windowsHide: true,
296
- });
331
+ const child = spawnBatchProcess(
332
+ process.execPath,
333
+ args,
334
+ {
335
+ cwd: opts.repoDir || process.cwd(),
336
+ env: { ...process.env, CLAUDECODE: "1" },
337
+ windowsHide: true,
338
+ shell: false,
339
+ },
340
+ "batch:decompose",
341
+ );
297
342
  let out = "";
298
343
  let err = "";
299
344
  child.stdout?.on("data", (d) => (out += d.toString("utf8")));
@@ -342,4 +387,11 @@ function formatEvent(ev) {
342
387
  }
343
388
  }
344
389
 
345
- export const _internal = { decomposeGoal, gitDiffStat, DECOMPOSE_SCHEMA };
390
+ export const _internal = {
391
+ decomposeGoal,
392
+ gitDiffStat,
393
+ gitCommitAll,
394
+ runTestCommand,
395
+ spawnAgent,
396
+ DECOMPOSE_SCHEMA,
397
+ };
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { VERSION } from "../constants.js";
3
- import { loadChangelog } from "../lib/changelog.js";
3
+ import { latestCliVersion, loadChangelog } from "../lib/changelog.js";
4
4
  import logger from "../lib/logger.js";
5
5
 
6
6
  /**
@@ -82,10 +82,21 @@ export function registerChangelogCommand(program) {
82
82
  .action((version, options) => {
83
83
  const data = loadChangelog();
84
84
  const releases = data.releases || [];
85
+ const jsonPayload = (selected) =>
86
+ JSON.stringify(
87
+ {
88
+ ...data,
89
+ installedVersion: VERSION,
90
+ latestDocumentedVersion: latestCliVersion(releases),
91
+ releases: selected,
92
+ },
93
+ null,
94
+ 2,
95
+ );
85
96
 
86
97
  if (releases.length === 0) {
87
98
  if (options.json) {
88
- logger.log(JSON.stringify({ releases: [] }, null, 2));
99
+ logger.log(jsonPayload([]));
89
100
  } else {
90
101
  logger.warn("No changelog data is bundled with this build.");
91
102
  }
@@ -97,7 +108,7 @@ export function registerChangelogCommand(program) {
97
108
  selected = matchVersion(releases, version);
98
109
  if (selected.length === 0) {
99
110
  if (options.json) {
100
- logger.log(JSON.stringify({ releases: [] }, null, 2));
111
+ logger.log(jsonPayload([]));
101
112
  } else {
102
113
  logger.warn(`No CLI release notes found for "${version}".`);
103
114
  logger.info(
@@ -114,7 +125,7 @@ export function registerChangelogCommand(program) {
114
125
  }
115
126
 
116
127
  if (options.json) {
117
- logger.log(JSON.stringify({ ...data, releases: selected }, null, 2));
128
+ logger.log(jsonPayload(selected));
118
129
  return;
119
130
  }
120
131
 
@@ -138,6 +138,8 @@ export function registerContextCommand(program) {
138
138
  breakdownInstructionSources,
139
139
  breakdownMcpSchemas,
140
140
  breakdownSkillSources,
141
+ breakdownSkillCache,
142
+ buildContextOptimizations,
141
143
  rankContextSources,
142
144
  } =
143
145
  await import("../lib/context-breakdown.js");
@@ -169,6 +171,9 @@ export function registerContextCommand(program) {
169
171
  recordedContextSources?.skills || [],
170
172
  estimateTokens,
171
173
  );
174
+ const skillCache = breakdownSkillCache(
175
+ recordedContextSources?.skillCache,
176
+ );
172
177
  const ranked = rankContextSources({
173
178
  instructionTotal: instr.total,
174
179
  buckets,
@@ -192,6 +197,12 @@ export function registerContextCommand(program) {
192
197
  mcpSchemaTokens: mcp.total,
193
198
  skills: skills.sources,
194
199
  skillTokens: skills.total,
200
+ skillCache,
201
+ optimizations: buildContextOptimizations({
202
+ instructions: instr.sources,
203
+ mcpSchemas: mcp.sources,
204
+ skillCache,
205
+ }),
195
206
  ranked: ranked.sources,
196
207
  combinedTotal: ranked.total,
197
208
  };
@@ -223,6 +234,10 @@ export function registerContextCommand(program) {
223
234
  instructionTokens: sourceReport.instructionTokens,
224
235
  mcpSchemas: sourceReport.mcpSchemas,
225
236
  mcpSchemaTokens: sourceReport.mcpSchemaTokens,
237
+ skills: sourceReport.skills,
238
+ skillTokens: sourceReport.skillTokens,
239
+ skillCache: sourceReport.skillCache,
240
+ optimizations: sourceReport.optimizations,
226
241
  combinedTotal: sourceReport.combinedTotal,
227
242
  cwd: sourceReport.cwd,
228
243
  }
@@ -314,6 +329,23 @@ export function registerContextCommand(program) {
314
329
  `${chalk.cyan(bar(s.share))} ${String(Math.round(s.share * 100)).padStart(3)}%`,
315
330
  );
316
331
  }
332
+ if (sourceReport.skillCache.descriptors.resident > 0) {
333
+ logger.log("");
334
+ logger.log(
335
+ chalk.gray(
336
+ ` Skill cache: ${sourceReport.skillCache.descriptors.resident} descriptors, ` +
337
+ `${sourceReport.skillCache.bodies.resident} bodies resident, ` +
338
+ `${sourceReport.skillCache.savings.estimatedTokensAvoided} estimated tokens kept lazy`,
339
+ ),
340
+ );
341
+ }
342
+ if (sourceReport.optimizations.length > 0) {
343
+ logger.log("");
344
+ logger.log(chalk.bold("Optimization hints"));
345
+ for (const hint of sourceReport.optimizations) {
346
+ logger.log(chalk.gray(" 路 ") + hint.message);
347
+ }
348
+ }
317
349
  logger.log(
318
350
  chalk.gray(
319
351
  " note: instructions reflect the current cwd (what a new run here",
@@ -326,7 +358,7 @@ export function registerContextCommand(program) {
326
358
  );
327
359
  logger.log(
328
360
  chalk.gray(
329
- " tool schemas load at runtime and are not counted here.",
361
+ " costs come from the newest persisted runtime source snapshot.",
330
362
  ),
331
363
  );
332
364
  }
@@ -11,15 +11,22 @@
11
11
  import fs from "fs";
12
12
  import path from "path";
13
13
  import { fileURLToPath } from "url";
14
- import { spawn, spawnSync } from "child_process";
15
14
  import { runEvalSuite } from "../lib/eval/runner.js";
16
15
  import { getSuite } from "../lib/eval/tasks.js";
16
+ import executionBroker from "../lib/process-execution-broker/index.js";
17
17
  import {
18
18
  TelemetryRecorder,
19
19
  formatTelemetry,
20
20
  } from "../lib/telemetry/span-recorder.js";
21
21
  import { computeTrend, formatTrend } from "../lib/eval/trend.js";
22
22
 
23
+ export const _deps = {
24
+ platform: process.platform,
25
+ kill: process.kill.bind(process),
26
+ spawn: executionBroker.spawn.bind(executionBroker),
27
+ spawnSync: executionBroker.spawnSync.bind(executionBroker),
28
+ };
29
+
23
30
  /** Append a run summary as one JSONL line to the history file. */
24
31
  function appendHistory(file, record) {
25
32
  fs.appendFileSync(file, JSON.stringify(record) + "\n", "utf8");
@@ -55,18 +62,22 @@ const BIN = path.resolve(__dirname, "..", "..", "bin", "chainlesschain.js");
55
62
  */
56
63
  function killAgentTree(child) {
57
64
  if (!child || !child.pid) return;
58
- if (process.platform === "win32") {
65
+ if (_deps.platform === "win32") {
59
66
  try {
60
- spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], {
67
+ _deps.spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], {
61
68
  windowsHide: true,
62
69
  timeout: 10000,
70
+ origin: "eval:agent-tree-kill",
71
+ policy: "allow",
72
+ scope: "eval",
73
+ shell: false,
63
74
  });
64
75
  } catch {
65
76
  /* fall through to the direct kill below */
66
77
  }
67
78
  } else {
68
79
  try {
69
- process.kill(-child.pid, "SIGKILL"); // negative pid = process group
80
+ _deps.kill(-child.pid, "SIGKILL"); // negative pid = process group
70
81
  return;
71
82
  } catch {
72
83
  /* not a group leader / already gone — fall through */
@@ -105,12 +116,16 @@ function makeHeadlessRunAgent(opts = {}) {
105
116
  if (opts.model) args.push("--model", opts.model);
106
117
  if (opts.provider) args.push("--provider", opts.provider);
107
118
  }
108
- const child = spawn(process.execPath, args, {
119
+ const child = _deps.spawn(process.execPath, args, {
109
120
  cwd,
110
121
  env: { ...process.env, CLAUDECODE: "1" },
111
122
  windowsHide: true,
112
123
  // Own process group on POSIX so a timeout can reap the whole tree.
113
- detached: process.platform !== "win32",
124
+ detached: _deps.platform !== "win32",
125
+ origin: "eval:agent-run",
126
+ policy: "allow",
127
+ scope: "eval",
128
+ shell: false,
114
129
  });
115
130
  let out = "";
116
131
  let err = "";
@@ -173,7 +173,7 @@ export function registerHookCommand(program) {
173
173
  return;
174
174
  }
175
175
 
176
- const { runHooks } = await import("../lib/hook-runner.cjs");
176
+ const { runHooks } = await import("../lib/hook-runner.js");
177
177
  const outcome = runHooks(matched, payload, {
178
178
  cwd: process.cwd(),
179
179
  event,
@@ -283,7 +283,7 @@ export function registerHookCommand(program) {
283
283
  // observe-only + --run: re-collect and execute the matching hooks.
284
284
  const { loadHooks, collectHooks } =
285
285
  await import("../lib/settings-hooks.cjs");
286
- const { runHooks } = await import("../lib/hook-runner.cjs");
286
+ const { runHooks } = await import("../lib/hook-runner.js");
287
287
  const { hooks } = loadHooks({ cwd: process.cwd() });
288
288
  const matched = collectHooks(
289
289
  hooks,