botmux 2.111.0 → 2.111.1-canary.0

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 (985) hide show
  1. package/README.en.md +16 -6
  2. package/README.md +16 -6
  3. package/dist/adapters/adopt-route.d.ts.map +1 -1
  4. package/dist/adapters/adopt-route.js +2 -1
  5. package/dist/adapters/adopt-route.js.map +1 -1
  6. package/dist/adapters/backend/sandbox.d.ts +40 -0
  7. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  8. package/dist/adapters/backend/sandbox.js +151 -8
  9. package/dist/adapters/backend/sandbox.js.map +1 -1
  10. package/dist/adapters/backend/tmux-backend.d.ts +1 -0
  11. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-backend.js +1 -0
  13. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  14. package/dist/adapters/cli/claude-code.d.ts +2 -0
  15. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  16. package/dist/adapters/cli/claude-code.js +6 -0
  17. package/dist/adapters/cli/claude-code.js.map +1 -1
  18. package/dist/adapters/cli/codex-app-turn.d.ts +16 -0
  19. package/dist/adapters/cli/codex-app-turn.d.ts.map +1 -1
  20. package/dist/adapters/cli/codex-app-turn.js +26 -0
  21. package/dist/adapters/cli/codex-app-turn.js.map +1 -1
  22. package/dist/adapters/cli/codex.d.ts.map +1 -1
  23. package/dist/adapters/cli/codex.js +1 -0
  24. package/dist/adapters/cli/codex.js.map +1 -1
  25. package/dist/adapters/cli/grok.d.ts +8 -6
  26. package/dist/adapters/cli/grok.d.ts.map +1 -1
  27. package/dist/adapters/cli/grok.js +14 -6
  28. package/dist/adapters/cli/grok.js.map +1 -1
  29. package/dist/adapters/cli/hermes.d.ts.map +1 -1
  30. package/dist/adapters/cli/hermes.js +8 -4
  31. package/dist/adapters/cli/hermes.js.map +1 -1
  32. package/dist/adapters/cli/read-isolation.d.ts +40 -14
  33. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  34. package/dist/adapters/cli/read-isolation.js +116 -19
  35. package/dist/adapters/cli/read-isolation.js.map +1 -1
  36. package/dist/adapters/cli/runner-control-channel.d.ts +32 -0
  37. package/dist/adapters/cli/runner-control-channel.d.ts.map +1 -0
  38. package/dist/adapters/cli/runner-control-channel.js +104 -0
  39. package/dist/adapters/cli/runner-control-channel.js.map +1 -0
  40. package/dist/adapters/cli/shared-hints.d.ts +1 -1
  41. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  42. package/dist/adapters/cli/shared-hints.js +9 -0
  43. package/dist/adapters/cli/shared-hints.js.map +1 -1
  44. package/dist/adapters/cli/traex.d.ts.map +1 -1
  45. package/dist/adapters/cli/traex.js +100 -64
  46. package/dist/adapters/cli/traex.js.map +1 -1
  47. package/dist/adapters/cli/types.d.ts +8 -0
  48. package/dist/adapters/cli/types.d.ts.map +1 -1
  49. package/dist/bot-registry.d.ts +25 -27
  50. package/dist/bot-registry.d.ts.map +1 -1
  51. package/dist/bot-registry.js +328 -8
  52. package/dist/bot-registry.js.map +1 -1
  53. package/dist/cli/saved-workflow.d.ts +25 -0
  54. package/dist/cli/saved-workflow.d.ts.map +1 -0
  55. package/dist/cli/saved-workflow.js +338 -0
  56. package/dist/cli/saved-workflow.js.map +1 -0
  57. package/dist/cli/send-dispatch.d.ts +18 -3
  58. package/dist/cli/send-dispatch.d.ts.map +1 -1
  59. package/dist/cli/send-dispatch.js +22 -3
  60. package/dist/cli/send-dispatch.js.map +1 -1
  61. package/dist/cli/v3-run-cancel.d.ts +47 -0
  62. package/dist/cli/v3-run-cancel.d.ts.map +1 -0
  63. package/dist/cli/v3-run-cancel.js +96 -0
  64. package/dist/cli/v3-run-cancel.js.map +1 -0
  65. package/dist/cli/vc-agent.d.ts.map +1 -1
  66. package/dist/cli/vc-agent.js +54 -1
  67. package/dist/cli/vc-agent.js.map +1 -1
  68. package/dist/cli/workflow-migration.d.ts +39 -0
  69. package/dist/cli/workflow-migration.d.ts.map +1 -0
  70. package/dist/cli/workflow-migration.js +302 -0
  71. package/dist/cli/workflow-migration.js.map +1 -0
  72. package/dist/cli/workflow-run-archive.d.ts +29 -0
  73. package/dist/cli/workflow-run-archive.d.ts.map +1 -0
  74. package/dist/cli/workflow-run-archive.js +183 -0
  75. package/dist/cli/workflow-run-archive.js.map +1 -0
  76. package/dist/cli/workflow.d.ts +5 -10
  77. package/dist/cli/workflow.d.ts.map +1 -1
  78. package/dist/cli/workflow.js +85 -764
  79. package/dist/cli/workflow.js.map +1 -1
  80. package/dist/cli.d.ts.map +1 -1
  81. package/dist/cli.js +790 -175
  82. package/dist/cli.js.map +1 -1
  83. package/dist/codex-app-runner.js +30 -21
  84. package/dist/codex-app-runner.js.map +1 -1
  85. package/dist/core/command-handler.d.ts.map +1 -1
  86. package/dist/core/command-handler.js +19 -3
  87. package/dist/core/command-handler.js.map +1 -1
  88. package/dist/core/current-turn-provenance.d.ts +39 -0
  89. package/dist/core/current-turn-provenance.d.ts.map +1 -0
  90. package/dist/core/current-turn-provenance.js +122 -0
  91. package/dist/core/current-turn-provenance.js.map +1 -0
  92. package/dist/core/daemon-ipc-auth.d.ts +20 -0
  93. package/dist/core/daemon-ipc-auth.d.ts.map +1 -0
  94. package/dist/core/daemon-ipc-auth.js +44 -0
  95. package/dist/core/daemon-ipc-auth.js.map +1 -0
  96. package/dist/core/daemon-ipc-session-auth.d.ts +37 -0
  97. package/dist/core/daemon-ipc-session-auth.d.ts.map +1 -0
  98. package/dist/core/daemon-ipc-session-auth.js +35 -0
  99. package/dist/core/daemon-ipc-session-auth.js.map +1 -0
  100. package/dist/core/dashboard-command/index.d.ts +0 -2
  101. package/dist/core/dashboard-command/index.d.ts.map +1 -1
  102. package/dist/core/dashboard-command/index.js +2 -2
  103. package/dist/core/dashboard-command/index.js.map +1 -1
  104. package/dist/core/dashboard-command/stub.d.ts +1 -1
  105. package/dist/core/dashboard-command/stub.d.ts.map +1 -1
  106. package/dist/core/dashboard-command/stub.js +0 -1
  107. package/dist/core/dashboard-command/stub.js.map +1 -1
  108. package/dist/core/dashboard-ipc-server.d.ts +11 -2
  109. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  110. package/dist/core/dashboard-ipc-server.js +131 -38
  111. package/dist/core/dashboard-ipc-server.js.map +1 -1
  112. package/dist/core/dashboard-secret.d.ts +3 -0
  113. package/dist/core/dashboard-secret.d.ts.map +1 -0
  114. package/dist/core/dashboard-secret.js +7 -0
  115. package/dist/core/dashboard-secret.js.map +1 -0
  116. package/dist/core/data-dir.d.ts +24 -0
  117. package/dist/core/data-dir.d.ts.map +1 -0
  118. package/dist/core/data-dir.js +48 -0
  119. package/dist/core/data-dir.js.map +1 -0
  120. package/dist/core/inflight-input-tracker.d.ts +4 -2
  121. package/dist/core/inflight-input-tracker.d.ts.map +1 -1
  122. package/dist/core/inflight-input-tracker.js +6 -5
  123. package/dist/core/inflight-input-tracker.js.map +1 -1
  124. package/dist/core/maintenance.d.ts +1 -1
  125. package/dist/core/maintenance.d.ts.map +1 -1
  126. package/dist/core/maintenance.js +3 -2
  127. package/dist/core/maintenance.js.map +1 -1
  128. package/dist/core/managed-origin-capability.d.ts +30 -0
  129. package/dist/core/managed-origin-capability.d.ts.map +1 -0
  130. package/dist/core/managed-origin-capability.js +88 -0
  131. package/dist/core/managed-origin-capability.js.map +1 -0
  132. package/dist/core/session-manager.d.ts +4 -1
  133. package/dist/core/session-manager.d.ts.map +1 -1
  134. package/dist/core/session-manager.js +27 -8
  135. package/dist/core/session-manager.js.map +1 -1
  136. package/dist/core/session-marker.d.ts +22 -0
  137. package/dist/core/session-marker.d.ts.map +1 -1
  138. package/dist/core/session-marker.js +185 -20
  139. package/dist/core/session-marker.js.map +1 -1
  140. package/dist/core/terminal-url.d.ts +1 -0
  141. package/dist/core/terminal-url.d.ts.map +1 -1
  142. package/dist/core/terminal-url.js +14 -8
  143. package/dist/core/terminal-url.js.map +1 -1
  144. package/dist/core/terminal-write-auth.d.ts +26 -0
  145. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  146. package/dist/core/terminal-write-auth.js +48 -3
  147. package/dist/core/terminal-write-auth.js.map +1 -1
  148. package/dist/core/trigger-session.d.ts +24 -1
  149. package/dist/core/trigger-session.d.ts.map +1 -1
  150. package/dist/core/trigger-session.js +106 -15
  151. package/dist/core/trigger-session.js.map +1 -1
  152. package/dist/core/types.d.ts +26 -1
  153. package/dist/core/types.d.ts.map +1 -1
  154. package/dist/core/types.js +10 -0
  155. package/dist/core/types.js.map +1 -1
  156. package/dist/core/worker-pool.d.ts +65 -2
  157. package/dist/core/worker-pool.d.ts.map +1 -1
  158. package/dist/core/worker-pool.js +456 -37
  159. package/dist/core/worker-pool.js.map +1 -1
  160. package/dist/daemon.d.ts +249 -8
  161. package/dist/daemon.d.ts.map +1 -1
  162. package/dist/daemon.js +7383 -1195
  163. package/dist/daemon.js.map +1 -1
  164. package/dist/dashboard/aggregator.d.ts +1 -1
  165. package/dist/dashboard/aggregator.d.ts.map +1 -1
  166. package/dist/dashboard/aggregator.js +2 -2
  167. package/dist/dashboard/aggregator.js.map +1 -1
  168. package/dist/dashboard/auth.d.ts +3 -8
  169. package/dist/dashboard/auth.d.ts.map +1 -1
  170. package/dist/dashboard/auth.js +63 -22
  171. package/dist/dashboard/auth.js.map +1 -1
  172. package/dist/dashboard/connector-api.d.ts.map +1 -1
  173. package/dist/dashboard/connector-api.js +42 -2
  174. package/dist/dashboard/connector-api.js.map +1 -1
  175. package/dist/dashboard/daemon-internal-api.d.ts +0 -2
  176. package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
  177. package/dist/dashboard/daemon-internal-api.js +26 -93
  178. package/dist/dashboard/daemon-internal-api.js.map +1 -1
  179. package/dist/dashboard/daemon-internal-client.d.ts.map +1 -1
  180. package/dist/dashboard/daemon-internal-client.js +2 -3
  181. package/dist/dashboard/daemon-internal-client.js.map +1 -1
  182. package/dist/dashboard/federation-api.js +1 -1
  183. package/dist/dashboard/federation-api.js.map +1 -1
  184. package/dist/dashboard/federation-spoke-api.js +1 -1
  185. package/dist/dashboard/federation-spoke-api.js.map +1 -1
  186. package/dist/dashboard/history-senders.d.ts +3 -0
  187. package/dist/dashboard/history-senders.d.ts.map +1 -1
  188. package/dist/dashboard/history-senders.js.map +1 -1
  189. package/dist/dashboard/http.d.ts +4 -0
  190. package/dist/dashboard/http.d.ts.map +1 -0
  191. package/dist/dashboard/http.js +6 -0
  192. package/dist/dashboard/http.js.map +1 -0
  193. package/dist/dashboard/registry.d.ts +4 -0
  194. package/dist/dashboard/registry.d.ts.map +1 -1
  195. package/dist/dashboard/registry.js.map +1 -1
  196. package/dist/dashboard/trigger-api.js +1 -1
  197. package/dist/dashboard/trigger-api.js.map +1 -1
  198. package/dist/dashboard/v3-runs-api.d.ts +13 -10
  199. package/dist/dashboard/v3-runs-api.d.ts.map +1 -1
  200. package/dist/dashboard/v3-runs-api.js +121 -4
  201. package/dist/dashboard/v3-runs-api.js.map +1 -1
  202. package/dist/dashboard/vc-consumer-profiles-api.d.ts +105 -0
  203. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -0
  204. package/dist/dashboard/vc-consumer-profiles-api.js +312 -0
  205. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -0
  206. package/dist/dashboard/web/app.d.ts.map +1 -1
  207. package/dist/dashboard/web/app.js +7 -6
  208. package/dist/dashboard/web/app.js.map +1 -1
  209. package/dist/dashboard/web/connectors-page.d.ts +5 -0
  210. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  211. package/dist/dashboard/web/connectors-page.js +16 -12
  212. package/dist/dashboard/web/connectors-page.js.map +1 -1
  213. package/dist/dashboard/web/create-session-entry.d.ts +4 -0
  214. package/dist/dashboard/web/create-session-entry.d.ts.map +1 -0
  215. package/dist/dashboard/web/create-session-entry.js +17 -0
  216. package/dist/dashboard/web/create-session-entry.js.map +1 -0
  217. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  218. package/dist/dashboard/web/dashboard-routes.js +0 -1
  219. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  220. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  221. package/dist/dashboard/web/i18n.js +182 -368
  222. package/dist/dashboard/web/i18n.js.map +1 -1
  223. package/dist/dashboard/web/preferences.d.ts +3 -0
  224. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  225. package/dist/dashboard/web/preferences.js +18 -0
  226. package/dist/dashboard/web/preferences.js.map +1 -1
  227. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  228. package/dist/dashboard/web/schedules-page.js +4 -1
  229. package/dist/dashboard/web/schedules-page.js.map +1 -1
  230. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  231. package/dist/dashboard/web/sessions-page.js +64 -18
  232. package/dist/dashboard/web/sessions-page.js.map +1 -1
  233. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  234. package/dist/dashboard/web/settings-page.js +2 -1
  235. package/dist/dashboard/web/settings-page.js.map +1 -1
  236. package/dist/dashboard/web/v3-api.d.ts +12 -2
  237. package/dist/dashboard/web/v3-api.d.ts.map +1 -1
  238. package/dist/dashboard/web/v3-api.js +34 -6
  239. package/dist/dashboard/web/v3-api.js.map +1 -1
  240. package/dist/dashboard/web/v3-components.d.ts +6 -0
  241. package/dist/dashboard/web/v3-components.d.ts.map +1 -1
  242. package/dist/dashboard/web/v3-components.js +66 -23
  243. package/dist/dashboard/web/v3-components.js.map +1 -1
  244. package/dist/dashboard/web/v3-model.js +1 -1
  245. package/dist/dashboard/web/v3-model.js.map +1 -1
  246. package/dist/dashboard/web/v3-terminal.js +2 -2
  247. package/dist/dashboard/web/v3-terminal.js.map +1 -1
  248. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +19 -0
  249. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -0
  250. package/dist/dashboard/web/vc-consumer-profiles-section.js +382 -0
  251. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -0
  252. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  253. package/dist/dashboard/webhook-routes.js +29 -6
  254. package/dist/dashboard/webhook-routes.js.map +1 -1
  255. package/dist/dashboard-web/app.js +1 -1
  256. package/dist/dashboard-web/chunks/{bot-defaults-page-7T7DPOV6.js → bot-defaults-page-QCBQJCSJ.js} +1 -1
  257. package/dist/dashboard-web/chunks/{chunk-OEJIT66L.js → chunk-4OKZP6JN.js} +1 -1
  258. package/dist/dashboard-web/chunks/{chunk-IGXYYRYJ.js → chunk-5WGHTZWO.js} +1 -1
  259. package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
  260. package/dist/dashboard-web/chunks/chunk-UGUSOJJ7.js +47 -0
  261. package/dist/dashboard-web/chunks/{chunk-YQFXGRSD.js → chunk-XDPNVF4W.js} +1 -1
  262. package/dist/dashboard-web/chunks/connectors-page-FZLCKL2H.js +1 -0
  263. package/dist/dashboard-web/chunks/{groups-page-5AJPPJH2.js → groups-page-WN42HVBM.js} +1 -1
  264. package/dist/dashboard-web/chunks/{insights-page-R3DFECX4.js → insights-page-YGX2IVIV.js} +1 -1
  265. package/dist/dashboard-web/chunks/{monitor-room-NLMKJLDY.js → monitor-room-K4SE6VHO.js} +1 -1
  266. package/dist/dashboard-web/chunks/{monitoring-page-EHSOX4GV.js → monitoring-page-6U3G7DOR.js} +1 -1
  267. package/dist/dashboard-web/chunks/{office-page-OXJKFJ4R.js → office-page-4XMF2RIH.js} +1 -1
  268. package/dist/dashboard-web/chunks/{overview-page-GJHIVXJF.js → overview-page-TSGJSM72.js} +1 -1
  269. package/dist/dashboard-web/chunks/{roles-page-6ZODQISW.js → roles-page-BNJDNYAK.js} +1 -1
  270. package/dist/dashboard-web/chunks/{schedules-page-DAGMHVCH.js → schedules-page-Z7LTT7AE.js} +1 -1
  271. package/dist/dashboard-web/chunks/sessions-page-ZVGIKGNS.js +3 -0
  272. package/dist/dashboard-web/chunks/settings-page-X7IOQZGR.js +2 -0
  273. package/dist/dashboard-web/chunks/{skills-page-J7EVUHXP.js → skills-page-P2IIDMX2.js} +1 -1
  274. package/dist/dashboard-web/chunks/{team-federation-page-YM5JBIII.js → team-federation-page-YAWRF34G.js} +1 -1
  275. package/dist/dashboard-web/chunks/v3-page-72UNO3TQ.js +94 -0
  276. package/dist/dashboard-web/chunks/{whiteboards-page-75N2U6W4.js → whiteboards-page-XV24XQ5P.js} +1 -1
  277. package/dist/dashboard-web/style.css +340 -274
  278. package/dist/dashboard.js +194 -78
  279. package/dist/dashboard.js.map +1 -1
  280. package/dist/global-config.d.ts +1 -1
  281. package/dist/i18n/en.d.ts.map +1 -1
  282. package/dist/i18n/en.js +12 -87
  283. package/dist/i18n/en.js.map +1 -1
  284. package/dist/i18n/zh.d.ts.map +1 -1
  285. package/dist/i18n/zh.js +12 -87
  286. package/dist/i18n/zh.js.map +1 -1
  287. package/dist/im/lark/card-handler.d.ts +6 -3
  288. package/dist/im/lark/card-handler.d.ts.map +1 -1
  289. package/dist/im/lark/card-handler.js +23 -39
  290. package/dist/im/lark/card-handler.js.map +1 -1
  291. package/dist/im/lark/client.d.ts +8 -2
  292. package/dist/im/lark/client.d.ts.map +1 -1
  293. package/dist/im/lark/client.js +33 -31
  294. package/dist/im/lark/client.js.map +1 -1
  295. package/dist/im/lark/doc-comment.d.ts +18 -0
  296. package/dist/im/lark/doc-comment.d.ts.map +1 -1
  297. package/dist/im/lark/doc-comment.js +119 -5
  298. package/dist/im/lark/doc-comment.js.map +1 -1
  299. package/dist/im/lark/event-dispatcher.d.ts +18 -2
  300. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  301. package/dist/im/lark/event-dispatcher.js +41 -19
  302. package/dist/im/lark/event-dispatcher.js.map +1 -1
  303. package/dist/im/lark/merge-forward.d.ts.map +1 -1
  304. package/dist/im/lark/merge-forward.js +7 -2
  305. package/dist/im/lark/merge-forward.js.map +1 -1
  306. package/dist/im/lark/message-parser.d.ts.map +1 -1
  307. package/dist/im/lark/message-parser.js +7 -0
  308. package/dist/im/lark/message-parser.js.map +1 -1
  309. package/dist/im/lark/overview-card.d.ts +1 -2
  310. package/dist/im/lark/overview-card.d.ts.map +1 -1
  311. package/dist/im/lark/overview-card.js +1 -48
  312. package/dist/im/lark/overview-card.js.map +1 -1
  313. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
  314. package/dist/im/lark/v3-blocked-card-handler.js +5 -5
  315. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
  316. package/dist/im/lark/v3-blocked-card.d.ts +1 -0
  317. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
  318. package/dist/im/lark/v3-blocked-card.js +19 -2
  319. package/dist/im/lark/v3-blocked-card.js.map +1 -1
  320. package/dist/im/lark/v3-distillation-card-handler.d.ts +12 -0
  321. package/dist/im/lark/v3-distillation-card-handler.d.ts.map +1 -0
  322. package/dist/im/lark/v3-distillation-card-handler.js +107 -0
  323. package/dist/im/lark/v3-distillation-card-handler.js.map +1 -0
  324. package/dist/im/lark/v3-distillation-card.d.ts +42 -0
  325. package/dist/im/lark/v3-distillation-card.d.ts.map +1 -0
  326. package/dist/im/lark/v3-distillation-card.js +206 -0
  327. package/dist/im/lark/v3-distillation-card.js.map +1 -0
  328. package/dist/im/lark/v3-gate-card-handler.d.ts +1 -1
  329. package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -1
  330. package/dist/im/lark/v3-gate-card-handler.js +6 -5
  331. package/dist/im/lark/v3-gate-card-handler.js.map +1 -1
  332. package/dist/im/lark/v3-gate-card.d.ts +8 -1
  333. package/dist/im/lark/v3-gate-card.d.ts.map +1 -1
  334. package/dist/im/lark/v3-gate-card.js +38 -7
  335. package/dist/im/lark/v3-gate-card.js.map +1 -1
  336. package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -1
  337. package/dist/im/lark/v3-loop-grant-card-handler.js +3 -4
  338. package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -1
  339. package/dist/im/lark/v3-loop-grant-card.js +1 -1
  340. package/dist/im/lark/v3-loop-grant-card.js.map +1 -1
  341. package/dist/im/lark/v3-progress-card-manager.d.ts +79 -0
  342. package/dist/im/lark/v3-progress-card-manager.d.ts.map +1 -0
  343. package/dist/im/lark/v3-progress-card-manager.js +444 -0
  344. package/dist/im/lark/v3-progress-card-manager.js.map +1 -0
  345. package/dist/im/lark/v3-progress-card.d.ts +26 -0
  346. package/dist/im/lark/v3-progress-card.d.ts.map +1 -0
  347. package/dist/im/lark/v3-progress-card.js +211 -0
  348. package/dist/im/lark/v3-progress-card.js.map +1 -0
  349. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -1
  350. package/dist/im/lark/v3-revisit-grant-card-handler.js +3 -4
  351. package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -1
  352. package/dist/im/lark/v3-revisit-grant-card.js +1 -1
  353. package/dist/im/lark/v3-revisit-grant-card.js.map +1 -1
  354. package/dist/im/lark/v3-run-save-card-handler.d.ts +12 -0
  355. package/dist/im/lark/v3-run-save-card-handler.d.ts.map +1 -0
  356. package/dist/im/lark/v3-run-save-card-handler.js +160 -0
  357. package/dist/im/lark/v3-run-save-card-handler.js.map +1 -0
  358. package/dist/im/lark/v3-run-save-card.d.ts +38 -0
  359. package/dist/im/lark/v3-run-save-card.d.ts.map +1 -0
  360. package/dist/im/lark/v3-run-save-card.js +125 -0
  361. package/dist/im/lark/v3-run-save-card.js.map +1 -0
  362. package/dist/im/lark/v3-saved-workflow-command.d.ts +36 -0
  363. package/dist/im/lark/v3-saved-workflow-command.d.ts.map +1 -0
  364. package/dist/im/lark/v3-saved-workflow-command.js +186 -0
  365. package/dist/im/lark/v3-saved-workflow-command.js.map +1 -0
  366. package/dist/im/lark/v3-saved-workflow-handler.d.ts +89 -0
  367. package/dist/im/lark/v3-saved-workflow-handler.d.ts.map +1 -0
  368. package/dist/im/lark/v3-saved-workflow-handler.js +212 -0
  369. package/dist/im/lark/v3-saved-workflow-handler.js.map +1 -0
  370. package/dist/im/lark/workflow-slash-command.d.ts +7 -110
  371. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  372. package/dist/im/lark/workflow-slash-command.js +16 -230
  373. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  374. package/dist/index-daemon.js +1 -1
  375. package/dist/index-daemon.js.map +1 -1
  376. package/dist/mir-runner.js +11 -15
  377. package/dist/mir-runner.js.map +1 -1
  378. package/dist/mira-runner.js +8 -12
  379. package/dist/mira-runner.js.map +1 -1
  380. package/dist/services/bridge-turn-queue.d.ts +29 -12
  381. package/dist/services/bridge-turn-queue.d.ts.map +1 -1
  382. package/dist/services/bridge-turn-queue.js +59 -23
  383. package/dist/services/bridge-turn-queue.js.map +1 -1
  384. package/dist/services/claude-transcript.d.ts +15 -0
  385. package/dist/services/claude-transcript.d.ts.map +1 -1
  386. package/dist/services/claude-transcript.js +24 -0
  387. package/dist/services/claude-transcript.js.map +1 -1
  388. package/dist/services/codex-bridge-queue.d.ts +13 -2
  389. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  390. package/dist/services/codex-bridge-queue.js +20 -3
  391. package/dist/services/codex-bridge-queue.js.map +1 -1
  392. package/dist/services/codex-transcript.d.ts +6 -0
  393. package/dist/services/codex-transcript.d.ts.map +1 -1
  394. package/dist/services/codex-transcript.js.map +1 -1
  395. package/dist/services/grok-transcript.d.ts +3 -2
  396. package/dist/services/grok-transcript.d.ts.map +1 -1
  397. package/dist/services/grok-transcript.js +73 -22
  398. package/dist/services/grok-transcript.js.map +1 -1
  399. package/dist/services/hermes-transcript.d.ts +1 -0
  400. package/dist/services/hermes-transcript.d.ts.map +1 -1
  401. package/dist/services/hermes-transcript.js +36 -0
  402. package/dist/services/hermes-transcript.js.map +1 -1
  403. package/dist/services/hook-runner.d.ts.map +1 -1
  404. package/dist/services/hook-runner.js +26 -3
  405. package/dist/services/hook-runner.js.map +1 -1
  406. package/dist/services/schedule-store.d.ts +37 -0
  407. package/dist/services/schedule-store.d.ts.map +1 -1
  408. package/dist/services/schedule-store.js +259 -141
  409. package/dist/services/schedule-store.js.map +1 -1
  410. package/dist/services/send-policy.d.ts +50 -0
  411. package/dist/services/send-policy.d.ts.map +1 -1
  412. package/dist/services/send-policy.js +65 -0
  413. package/dist/services/send-policy.js.map +1 -1
  414. package/dist/services/session-lifecycle-hooks.d.ts.map +1 -1
  415. package/dist/services/session-lifecycle-hooks.js +12 -0
  416. package/dist/services/session-lifecycle-hooks.js.map +1 -1
  417. package/dist/services/traex-transcript.d.ts +11 -2
  418. package/dist/services/traex-transcript.d.ts.map +1 -1
  419. package/dist/services/traex-transcript.js +142 -8
  420. package/dist/services/traex-transcript.js.map +1 -1
  421. package/dist/services/trigger-types.d.ts +6 -1
  422. package/dist/services/trigger-types.d.ts.map +1 -1
  423. package/dist/services/trigger-types.js.map +1 -1
  424. package/dist/services/turn-terminal-deduper.d.ts +14 -0
  425. package/dist/services/turn-terminal-deduper.d.ts.map +1 -0
  426. package/dist/services/turn-terminal-deduper.js +34 -0
  427. package/dist/services/turn-terminal-deduper.js.map +1 -0
  428. package/dist/services/vc-meeting-action-gate.d.ts +246 -0
  429. package/dist/services/vc-meeting-action-gate.d.ts.map +1 -0
  430. package/dist/services/vc-meeting-action-gate.js +756 -0
  431. package/dist/services/vc-meeting-action-gate.js.map +1 -0
  432. package/dist/services/vc-meeting-action-store.d.ts +222 -0
  433. package/dist/services/vc-meeting-action-store.d.ts.map +1 -0
  434. package/dist/services/vc-meeting-action-store.js +806 -0
  435. package/dist/services/vc-meeting-action-store.js.map +1 -0
  436. package/dist/services/vc-meeting-consumer-isolation.d.ts +27 -0
  437. package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -0
  438. package/dist/services/vc-meeting-consumer-isolation.js +37 -0
  439. package/dist/services/vc-meeting-consumer-isolation.js.map +1 -0
  440. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +72 -0
  441. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -0
  442. package/dist/services/vc-meeting-consumer-profile-bootstrap.js +343 -0
  443. package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -0
  444. package/dist/services/vc-meeting-consumer-profile-store.d.ts +39 -0
  445. package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +1 -0
  446. package/dist/services/vc-meeting-consumer-profile-store.js +190 -0
  447. package/dist/services/vc-meeting-consumer-profile-store.js.map +1 -0
  448. package/dist/services/vc-meeting-daemon-auth.d.ts +29 -0
  449. package/dist/services/vc-meeting-daemon-auth.d.ts.map +1 -0
  450. package/dist/services/vc-meeting-daemon-auth.js +117 -0
  451. package/dist/services/vc-meeting-daemon-auth.js.map +1 -0
  452. package/dist/services/vc-meeting-delivery-feed.d.ts +52 -0
  453. package/dist/services/vc-meeting-delivery-feed.d.ts.map +1 -0
  454. package/dist/services/vc-meeting-delivery-feed.js +231 -0
  455. package/dist/services/vc-meeting-delivery-feed.js.map +1 -0
  456. package/dist/services/vc-meeting-delivery-hub-store.d.ts +213 -0
  457. package/dist/services/vc-meeting-delivery-hub-store.d.ts.map +1 -0
  458. package/dist/services/vc-meeting-delivery-hub-store.js +1230 -0
  459. package/dist/services/vc-meeting-delivery-hub-store.js.map +1 -0
  460. package/dist/services/vc-meeting-delivery-protocol.d.ts +159 -0
  461. package/dist/services/vc-meeting-delivery-protocol.d.ts.map +1 -0
  462. package/dist/services/vc-meeting-delivery-protocol.js +443 -0
  463. package/dist/services/vc-meeting-delivery-protocol.js.map +1 -0
  464. package/dist/services/vc-meeting-delivery-receiver.d.ts +80 -0
  465. package/dist/services/vc-meeting-delivery-receiver.d.ts.map +1 -0
  466. package/dist/services/vc-meeting-delivery-receiver.js +543 -0
  467. package/dist/services/vc-meeting-delivery-receiver.js.map +1 -0
  468. package/dist/services/vc-meeting-delivery-store.d.ts +339 -0
  469. package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -0
  470. package/dist/services/vc-meeting-delivery-store.js +1024 -0
  471. package/dist/services/vc-meeting-delivery-store.js.map +1 -0
  472. package/dist/services/vc-meeting-feed-metadata-store.d.ts +58 -0
  473. package/dist/services/vc-meeting-feed-metadata-store.d.ts.map +1 -0
  474. package/dist/services/vc-meeting-feed-metadata-store.js +356 -0
  475. package/dist/services/vc-meeting-feed-metadata-store.js.map +1 -0
  476. package/dist/services/vc-meeting-im-reply.d.ts +55 -0
  477. package/dist/services/vc-meeting-im-reply.d.ts.map +1 -0
  478. package/dist/services/vc-meeting-im-reply.js +279 -0
  479. package/dist/services/vc-meeting-im-reply.js.map +1 -0
  480. package/dist/services/vc-meeting-im-routing.d.ts +131 -0
  481. package/dist/services/vc-meeting-im-routing.d.ts.map +1 -0
  482. package/dist/services/vc-meeting-im-routing.js +449 -0
  483. package/dist/services/vc-meeting-im-routing.js.map +1 -0
  484. package/dist/services/vc-meeting-listener-message-store.d.ts +23 -0
  485. package/dist/services/vc-meeting-listener-message-store.d.ts.map +1 -0
  486. package/dist/services/vc-meeting-listener-message-store.js +142 -0
  487. package/dist/services/vc-meeting-listener-message-store.js.map +1 -0
  488. package/dist/services/vc-meeting-member-policy.d.ts +37 -0
  489. package/dist/services/vc-meeting-member-policy.d.ts.map +1 -0
  490. package/dist/services/vc-meeting-member-policy.js +102 -0
  491. package/dist/services/vc-meeting-member-policy.js.map +1 -0
  492. package/dist/services/vc-meeting-profile-instructions.d.ts +22 -0
  493. package/dist/services/vc-meeting-profile-instructions.d.ts.map +1 -0
  494. package/dist/services/vc-meeting-profile-instructions.js +64 -0
  495. package/dist/services/vc-meeting-profile-instructions.js.map +1 -0
  496. package/dist/services/vc-meeting-runtime-store.d.ts +63 -0
  497. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
  498. package/dist/services/vc-meeting-runtime-store.js +605 -116
  499. package/dist/services/vc-meeting-runtime-store.js.map +1 -1
  500. package/dist/services/vc-meeting-send-policy.d.ts +89 -0
  501. package/dist/services/vc-meeting-send-policy.d.ts.map +1 -0
  502. package/dist/services/vc-meeting-send-policy.js +150 -0
  503. package/dist/services/vc-meeting-send-policy.js.map +1 -0
  504. package/dist/services/vc-meeting-terminal-reconciler.d.ts +93 -0
  505. package/dist/services/vc-meeting-terminal-reconciler.d.ts.map +1 -0
  506. package/dist/services/vc-meeting-terminal-reconciler.js +198 -0
  507. package/dist/services/vc-meeting-terminal-reconciler.js.map +1 -0
  508. package/dist/skills/definitions.d.ts.map +1 -1
  509. package/dist/skills/definitions.js +66 -54
  510. package/dist/skills/definitions.js.map +1 -1
  511. package/dist/skills/injection-mode.d.ts +5 -4
  512. package/dist/skills/injection-mode.d.ts.map +1 -1
  513. package/dist/skills/injection-mode.js +19 -10
  514. package/dist/skills/injection-mode.js.map +1 -1
  515. package/dist/types.d.ts +183 -0
  516. package/dist/types.d.ts.map +1 -1
  517. package/dist/utils/canonical-input-hash.d.ts +5 -0
  518. package/dist/utils/canonical-input-hash.d.ts.map +1 -0
  519. package/dist/utils/canonical-input-hash.js +43 -0
  520. package/dist/utils/canonical-input-hash.js.map +1 -0
  521. package/dist/utils/canonical-json.d.ts +10 -0
  522. package/dist/utils/canonical-json.d.ts.map +1 -0
  523. package/dist/utils/canonical-json.js +23 -0
  524. package/dist/utils/canonical-json.js.map +1 -0
  525. package/dist/utils/child-env.d.ts +1 -1
  526. package/dist/utils/child-env.d.ts.map +1 -1
  527. package/dist/utils/child-env.js +8 -0
  528. package/dist/utils/child-env.js.map +1 -1
  529. package/dist/utils/daemon-discovery.d.ts +4 -0
  530. package/dist/utils/daemon-discovery.d.ts.map +1 -1
  531. package/dist/utils/daemon-discovery.js +12 -6
  532. package/dist/utils/daemon-discovery.js.map +1 -1
  533. package/dist/utils/file-lock.d.ts.map +1 -1
  534. package/dist/utils/file-lock.js +696 -102
  535. package/dist/utils/file-lock.js.map +1 -1
  536. package/dist/utils/fs-durability.d.ts +20 -0
  537. package/dist/utils/fs-durability.d.ts.map +1 -0
  538. package/dist/utils/fs-durability.js +84 -0
  539. package/dist/utils/fs-durability.js.map +1 -0
  540. package/dist/utils/global-install.d.ts +5 -2
  541. package/dist/utils/global-install.d.ts.map +1 -1
  542. package/dist/utils/global-install.js +22 -4
  543. package/dist/utils/global-install.js.map +1 -1
  544. package/dist/utils/pending-input-queue.d.ts +30 -1
  545. package/dist/utils/pending-input-queue.d.ts.map +1 -1
  546. package/dist/utils/pending-input-queue.js +45 -5
  547. package/dist/utils/pending-input-queue.js.map +1 -1
  548. package/dist/vc-agent/cards.d.ts +49 -4
  549. package/dist/vc-agent/cards.d.ts.map +1 -1
  550. package/dist/vc-agent/cards.js +460 -70
  551. package/dist/vc-agent/cards.js.map +1 -1
  552. package/dist/vc-agent/polling-source.d.ts +6 -1
  553. package/dist/vc-agent/polling-source.d.ts.map +1 -1
  554. package/dist/vc-agent/polling-source.js +17 -4
  555. package/dist/vc-agent/polling-source.js.map +1 -1
  556. package/dist/worker.js +999 -244
  557. package/dist/worker.js.map +1 -1
  558. package/dist/workflows/definition.d.ts +28 -35
  559. package/dist/workflows/definition.d.ts.map +1 -1
  560. package/dist/workflows/definition.js +7 -24
  561. package/dist/workflows/definition.js.map +1 -1
  562. package/dist/workflows/events/payloads.d.ts +28 -28
  563. package/dist/workflows/events/replay.d.ts +5 -0
  564. package/dist/workflows/events/replay.d.ts.map +1 -1
  565. package/dist/workflows/events/replay.js +6 -1
  566. package/dist/workflows/events/replay.js.map +1 -1
  567. package/dist/workflows/events/schema.d.ts +663 -663
  568. package/dist/workflows/events/schema.d.ts.map +1 -1
  569. package/dist/workflows/events/schema.js +1 -4
  570. package/dist/workflows/events/schema.js.map +1 -1
  571. package/dist/workflows/hostExecutors/botmux-schedule.d.ts +5 -4
  572. package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
  573. package/dist/workflows/hostExecutors/botmux-schedule.js +80 -35
  574. package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
  575. package/dist/workflows/hostExecutors/feishu-im.d.ts +3 -3
  576. package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -1
  577. package/dist/workflows/hostExecutors/feishu-im.js +3 -3
  578. package/dist/workflows/hostExecutors/feishu-im.js.map +1 -1
  579. package/dist/workflows/hostExecutors/feishu-reply.d.ts +1 -1
  580. package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -1
  581. package/dist/workflows/hostExecutors/feishu-reply.js +1 -1
  582. package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -1
  583. package/dist/workflows/hostExecutors/feishu-send.d.ts +1 -1
  584. package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -1
  585. package/dist/workflows/hostExecutors/feishu-send.js +1 -1
  586. package/dist/workflows/hostExecutors/feishu-send.js.map +1 -1
  587. package/dist/workflows/hostExecutors/index.d.ts +0 -1
  588. package/dist/workflows/hostExecutors/index.d.ts.map +1 -1
  589. package/dist/workflows/hostExecutors/index.js +0 -1
  590. package/dist/workflows/hostExecutors/index.js.map +1 -1
  591. package/dist/workflows/hostExecutors/registry.d.ts +1 -1
  592. package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
  593. package/dist/workflows/hostExecutors/types.d.ts +21 -29
  594. package/dist/workflows/hostExecutors/types.d.ts.map +1 -1
  595. package/dist/workflows/migration/v2-definition-paths.d.ts +3 -0
  596. package/dist/workflows/migration/v2-definition-paths.d.ts.map +1 -0
  597. package/dist/workflows/migration/v2-definition-paths.js +10 -0
  598. package/dist/workflows/migration/v2-definition-paths.js.map +1 -0
  599. package/dist/workflows/migration/v2-ledger.d.ts +138 -0
  600. package/dist/workflows/migration/v2-ledger.d.ts.map +1 -0
  601. package/dist/workflows/migration/v2-ledger.js +599 -0
  602. package/dist/workflows/migration/v2-ledger.js.map +1 -0
  603. package/dist/workflows/migration/v2-migration-service.d.ts +40 -0
  604. package/dist/workflows/migration/v2-migration-service.d.ts.map +1 -0
  605. package/dist/workflows/migration/v2-migration-service.js +454 -0
  606. package/dist/workflows/migration/v2-migration-service.js.map +1 -0
  607. package/dist/workflows/migration/v2-read-only-ids.d.ts +7 -0
  608. package/dist/workflows/migration/v2-read-only-ids.d.ts.map +1 -0
  609. package/dist/workflows/migration/v2-read-only-ids.js +9 -0
  610. package/dist/workflows/migration/v2-read-only-ids.js.map +1 -0
  611. package/dist/workflows/migration/v2-run-archive-schema.d.ts +976 -0
  612. package/dist/workflows/migration/v2-run-archive-schema.d.ts.map +1 -0
  613. package/dist/workflows/migration/v2-run-archive-schema.js +113 -0
  614. package/dist/workflows/migration/v2-run-archive-schema.js.map +1 -0
  615. package/dist/workflows/migration/v2-run-archive.d.ts +92 -0
  616. package/dist/workflows/migration/v2-run-archive.d.ts.map +1 -0
  617. package/dist/workflows/migration/v2-run-archive.js +1220 -0
  618. package/dist/workflows/migration/v2-run-archive.js.map +1 -0
  619. package/dist/workflows/migration/v2-scanner.d.ts +22 -0
  620. package/dist/workflows/migration/v2-scanner.d.ts.map +1 -0
  621. package/dist/workflows/migration/v2-scanner.js +114 -0
  622. package/dist/workflows/migration/v2-scanner.js.map +1 -0
  623. package/dist/workflows/migration/v2-to-v3.d.ts +32 -0
  624. package/dist/workflows/migration/v2-to-v3.d.ts.map +1 -0
  625. package/dist/workflows/migration/v2-to-v3.js +494 -0
  626. package/dist/workflows/migration/v2-to-v3.js.map +1 -0
  627. package/dist/workflows/ops-projection.d.ts.map +1 -1
  628. package/dist/workflows/ops-projection.js +4 -3
  629. package/dist/workflows/ops-projection.js.map +1 -1
  630. package/dist/workflows/shared/idempotency-key.d.ts +19 -0
  631. package/dist/workflows/shared/idempotency-key.d.ts.map +1 -0
  632. package/dist/workflows/shared/idempotency-key.js +23 -0
  633. package/dist/workflows/shared/idempotency-key.js.map +1 -0
  634. package/dist/workflows/{params.d.ts → shared/params.d.ts} +42 -6
  635. package/dist/workflows/shared/params.d.ts.map +1 -0
  636. package/dist/workflows/{params.js → shared/params.js} +91 -4
  637. package/dist/workflows/shared/params.js.map +1 -0
  638. package/dist/workflows/shared/provider-reconciler.d.ts +47 -0
  639. package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -0
  640. package/dist/workflows/shared/provider-reconciler.js +17 -0
  641. package/dist/workflows/shared/provider-reconciler.js.map +1 -0
  642. package/dist/workflows/{spawn-policy.d.ts → shared/sandbox-policy.d.ts} +2 -2
  643. package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -0
  644. package/dist/workflows/{spawn-policy.js → shared/sandbox-policy.js} +1 -1
  645. package/dist/workflows/shared/sandbox-policy.js.map +1 -0
  646. package/dist/workflows/shared/worker-process.d.ts +29 -0
  647. package/dist/workflows/shared/worker-process.d.ts.map +1 -0
  648. package/dist/workflows/shared/worker-process.js +56 -0
  649. package/dist/workflows/shared/worker-process.js.map +1 -0
  650. package/dist/workflows/v3/architect.d.ts.map +1 -1
  651. package/dist/workflows/v3/architect.js +16 -4
  652. package/dist/workflows/v3/architect.js.map +1 -1
  653. package/dist/workflows/v3/attempt-ledger.d.ts +23 -0
  654. package/dist/workflows/v3/attempt-ledger.d.ts.map +1 -0
  655. package/dist/workflows/v3/attempt-ledger.js +74 -0
  656. package/dist/workflows/v3/attempt-ledger.js.map +1 -0
  657. package/dist/workflows/v3/bot-resolve.d.ts +19 -1
  658. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
  659. package/dist/workflows/v3/bot-resolve.js +129 -3
  660. package/dist/workflows/v3/bot-resolve.js.map +1 -1
  661. package/dist/workflows/v3/cli-daemon-command-authority.d.ts +59 -0
  662. package/dist/workflows/v3/cli-daemon-command-authority.d.ts.map +1 -0
  663. package/dist/workflows/v3/cli-daemon-command-authority.js +175 -0
  664. package/dist/workflows/v3/cli-daemon-command-authority.js.map +1 -0
  665. package/dist/workflows/v3/cli-run.d.ts +27 -0
  666. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  667. package/dist/workflows/v3/cli-run.js +113 -29
  668. package/dist/workflows/v3/cli-run.js.map +1 -1
  669. package/dist/workflows/v3/contract.d.ts +16 -16
  670. package/dist/workflows/v3/contract.d.ts.map +1 -1
  671. package/dist/workflows/v3/contract.js +15 -11
  672. package/dist/workflows/v3/contract.js.map +1 -1
  673. package/dist/workflows/v3/daemon-ipc-auth.d.ts +113 -0
  674. package/dist/workflows/v3/daemon-ipc-auth.d.ts.map +1 -0
  675. package/dist/workflows/v3/daemon-ipc-auth.js +294 -0
  676. package/dist/workflows/v3/daemon-ipc-auth.js.map +1 -0
  677. package/dist/workflows/v3/daemon-ipc-body.d.ts +30 -0
  678. package/dist/workflows/v3/daemon-ipc-body.d.ts.map +1 -0
  679. package/dist/workflows/v3/daemon-ipc-body.js +65 -0
  680. package/dist/workflows/v3/daemon-ipc-body.js.map +1 -0
  681. package/dist/workflows/v3/daemon-ipc-client.d.ts +32 -0
  682. package/dist/workflows/v3/daemon-ipc-client.d.ts.map +1 -0
  683. package/dist/workflows/v3/daemon-ipc-client.js +74 -0
  684. package/dist/workflows/v3/daemon-ipc-client.js.map +1 -0
  685. package/dist/workflows/v3/daemon-run.d.ts +87 -2
  686. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  687. package/dist/workflows/v3/daemon-run.js +863 -68
  688. package/dist/workflows/v3/daemon-run.js.map +1 -1
  689. package/dist/workflows/v3/dag.d.ts +22 -8
  690. package/dist/workflows/v3/dag.d.ts.map +1 -1
  691. package/dist/workflows/v3/dag.js +214 -22
  692. package/dist/workflows/v3/dag.js.map +1 -1
  693. package/dist/workflows/v3/distillation-compiler.d.ts +36 -0
  694. package/dist/workflows/v3/distillation-compiler.d.ts.map +1 -0
  695. package/dist/workflows/v3/distillation-compiler.js +704 -0
  696. package/dist/workflows/v3/distillation-compiler.js.map +1 -0
  697. package/dist/workflows/v3/distillation-private-root.d.ts +10 -0
  698. package/dist/workflows/v3/distillation-private-root.d.ts.map +1 -0
  699. package/dist/workflows/v3/distillation-private-root.js +34 -0
  700. package/dist/workflows/v3/distillation-private-root.js.map +1 -0
  701. package/dist/workflows/v3/distillation-runner.d.ts +64 -0
  702. package/dist/workflows/v3/distillation-runner.d.ts.map +1 -0
  703. package/dist/workflows/v3/distillation-runner.js +1028 -0
  704. package/dist/workflows/v3/distillation-runner.js.map +1 -0
  705. package/dist/workflows/v3/distillation-schema.d.ts +63 -0
  706. package/dist/workflows/v3/distillation-schema.d.ts.map +1 -0
  707. package/dist/workflows/v3/distillation-schema.js +184 -0
  708. package/dist/workflows/v3/distillation-schema.js.map +1 -0
  709. package/dist/workflows/v3/distillation-service.d.ts +78 -0
  710. package/dist/workflows/v3/distillation-service.d.ts.map +1 -0
  711. package/dist/workflows/v3/distillation-service.js +416 -0
  712. package/dist/workflows/v3/distillation-service.js.map +1 -0
  713. package/dist/workflows/v3/distillation-source.d.ts +35 -0
  714. package/dist/workflows/v3/distillation-source.d.ts.map +1 -0
  715. package/dist/workflows/v3/distillation-source.js +118 -0
  716. package/dist/workflows/v3/distillation-source.js.map +1 -0
  717. package/dist/workflows/v3/distillation-store.d.ts +185 -0
  718. package/dist/workflows/v3/distillation-store.d.ts.map +1 -0
  719. package/dist/workflows/v3/distillation-store.js +1127 -0
  720. package/dist/workflows/v3/distillation-store.js.map +1 -0
  721. package/dist/workflows/v3/drive-lease.d.ts +7 -0
  722. package/dist/workflows/v3/drive-lease.d.ts.map +1 -0
  723. package/dist/workflows/v3/drive-lease.js +10 -0
  724. package/dist/workflows/v3/drive-lease.js.map +1 -0
  725. package/dist/workflows/v3/ephemeral-pool.d.ts +1 -1
  726. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  727. package/dist/workflows/v3/ephemeral-pool.js +222 -37
  728. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  729. package/dist/workflows/v3/grill-state.d.ts +18 -3
  730. package/dist/workflows/v3/grill-state.d.ts.map +1 -1
  731. package/dist/workflows/v3/grill-state.js +22 -5
  732. package/dist/workflows/v3/grill-state.js.map +1 -1
  733. package/dist/workflows/v3/host-bindings.d.ts +40 -0
  734. package/dist/workflows/v3/host-bindings.d.ts.map +1 -0
  735. package/dist/workflows/v3/host-bindings.js +272 -0
  736. package/dist/workflows/v3/host-bindings.js.map +1 -0
  737. package/dist/workflows/v3/host-effect-ledger.d.ts +22 -0
  738. package/dist/workflows/v3/host-effect-ledger.d.ts.map +1 -0
  739. package/dist/workflows/v3/host-effect-ledger.js +110 -0
  740. package/dist/workflows/v3/host-effect-ledger.js.map +1 -0
  741. package/dist/workflows/v3/host-execution.d.ts +142 -0
  742. package/dist/workflows/v3/host-execution.d.ts.map +1 -0
  743. package/dist/workflows/v3/host-execution.js +424 -0
  744. package/dist/workflows/v3/host-execution.js.map +1 -0
  745. package/dist/workflows/v3/host.d.ts +46 -10
  746. package/dist/workflows/v3/host.d.ts.map +1 -1
  747. package/dist/workflows/v3/host.js +419 -140
  748. package/dist/workflows/v3/host.js.map +1 -1
  749. package/dist/workflows/v3/human-gate.d.ts +19 -1
  750. package/dist/workflows/v3/human-gate.d.ts.map +1 -1
  751. package/dist/workflows/v3/human-gate.js +145 -19
  752. package/dist/workflows/v3/human-gate.js.map +1 -1
  753. package/dist/workflows/v3/journal.d.ts +125 -7
  754. package/dist/workflows/v3/journal.d.ts.map +1 -1
  755. package/dist/workflows/v3/journal.js +154 -38
  756. package/dist/workflows/v3/journal.js.map +1 -1
  757. package/dist/workflows/v3/library-materialize.d.ts +88 -0
  758. package/dist/workflows/v3/library-materialize.d.ts.map +1 -0
  759. package/dist/workflows/v3/library-materialize.js +294 -0
  760. package/dist/workflows/v3/library-materialize.js.map +1 -0
  761. package/dist/workflows/v3/library-schema.d.ts +138 -0
  762. package/dist/workflows/v3/library-schema.d.ts.map +1 -0
  763. package/dist/workflows/v3/library-schema.js +573 -0
  764. package/dist/workflows/v3/library-schema.js.map +1 -0
  765. package/dist/workflows/v3/library-service.d.ts +126 -0
  766. package/dist/workflows/v3/library-service.d.ts.map +1 -0
  767. package/dist/workflows/v3/library-service.js +542 -0
  768. package/dist/workflows/v3/library-service.js.map +1 -0
  769. package/dist/workflows/v3/library-store.d.ts +124 -0
  770. package/dist/workflows/v3/library-store.d.ts.map +1 -0
  771. package/dist/workflows/v3/library-store.js +665 -0
  772. package/dist/workflows/v3/library-store.js.map +1 -0
  773. package/dist/workflows/v3/orchestrator.d.ts +9 -1
  774. package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
  775. package/dist/workflows/v3/orchestrator.js +2 -1
  776. package/dist/workflows/v3/orchestrator.js.map +1 -1
  777. package/dist/workflows/v3/progress-projection.d.ts +99 -0
  778. package/dist/workflows/v3/progress-projection.d.ts.map +1 -0
  779. package/dist/workflows/v3/progress-projection.js +197 -0
  780. package/dist/workflows/v3/progress-projection.js.map +1 -0
  781. package/dist/workflows/v3/run-envelope.d.ts +1279 -0
  782. package/dist/workflows/v3/run-envelope.d.ts.map +1 -0
  783. package/dist/workflows/v3/run-envelope.js +681 -0
  784. package/dist/workflows/v3/run-envelope.js.map +1 -0
  785. package/dist/workflows/v3/runtime.d.ts +39 -7
  786. package/dist/workflows/v3/runtime.d.ts.map +1 -1
  787. package/dist/workflows/v3/runtime.js +1992 -100
  788. package/dist/workflows/v3/runtime.js.map +1 -1
  789. package/dist/workflows/v3/session-relay-client.d.ts +61 -0
  790. package/dist/workflows/v3/session-relay-client.d.ts.map +1 -0
  791. package/dist/workflows/v3/session-relay-client.js +92 -0
  792. package/dist/workflows/v3/session-relay-client.js.map +1 -0
  793. package/dist/workflows/v3/session-relay.d.ts +66 -0
  794. package/dist/workflows/v3/session-relay.d.ts.map +1 -0
  795. package/dist/workflows/v3/session-relay.js +157 -0
  796. package/dist/workflows/v3/session-relay.js.map +1 -0
  797. package/dist/workflows/v3/start-intent.d.ts +8 -0
  798. package/dist/workflows/v3/start-intent.d.ts.map +1 -0
  799. package/dist/workflows/v3/start-intent.js +34 -0
  800. package/dist/workflows/v3/start-intent.js.map +1 -0
  801. package/dist/workflows/v3/state.d.ts +11 -2
  802. package/dist/workflows/v3/state.d.ts.map +1 -1
  803. package/dist/workflows/v3/state.js +182 -10
  804. package/dist/workflows/v3/state.js.map +1 -1
  805. package/dist/workflows/v3/template-bindings.d.ts +22 -0
  806. package/dist/workflows/v3/template-bindings.d.ts.map +1 -0
  807. package/dist/workflows/v3/template-bindings.js +204 -0
  808. package/dist/workflows/v3/template-bindings.js.map +1 -0
  809. package/dist/workflows/v3/worker-fence.d.ts +158 -0
  810. package/dist/workflows/v3/worker-fence.d.ts.map +1 -0
  811. package/dist/workflows/v3/worker-fence.js +685 -0
  812. package/dist/workflows/v3/worker-fence.js.map +1 -0
  813. package/package.json +3 -2
  814. package/dist/core/dashboard-command/workflows.d.ts +0 -20
  815. package/dist/core/dashboard-command/workflows.d.ts.map +0 -1
  816. package/dist/core/dashboard-command/workflows.js +0 -45
  817. package/dist/core/dashboard-command/workflows.js.map +0 -1
  818. package/dist/dashboard/web/legacy-workflow-link.d.ts +0 -2
  819. package/dist/dashboard/web/legacy-workflow-link.d.ts.map +0 -1
  820. package/dist/dashboard/web/legacy-workflow-link.js +0 -12
  821. package/dist/dashboard/web/legacy-workflow-link.js.map +0 -1
  822. package/dist/dashboard/web/legacy-workflow-page.d.ts +0 -3
  823. package/dist/dashboard/web/legacy-workflow-page.d.ts.map +0 -1
  824. package/dist/dashboard/web/legacy-workflow-page.js +0 -717
  825. package/dist/dashboard/web/legacy-workflow-page.js.map +0 -1
  826. package/dist/dashboard/web/workflow-version-switch.d.ts +0 -8
  827. package/dist/dashboard/web/workflow-version-switch.d.ts.map +0 -1
  828. package/dist/dashboard/web/workflow-version-switch.js +0 -9
  829. package/dist/dashboard/web/workflow-version-switch.js.map +0 -1
  830. package/dist/dashboard/web/workflows.d.ts +0 -273
  831. package/dist/dashboard/web/workflows.d.ts.map +0 -1
  832. package/dist/dashboard/web/workflows.js +0 -436
  833. package/dist/dashboard/web/workflows.js.map +0 -1
  834. package/dist/dashboard/workflow-api.d.ts +0 -30
  835. package/dist/dashboard/workflow-api.d.ts.map +0 -1
  836. package/dist/dashboard/workflow-api.js +0 -397
  837. package/dist/dashboard/workflow-api.js.map +0 -1
  838. package/dist/dashboard/workflow-card-model.d.ts +0 -127
  839. package/dist/dashboard/workflow-card-model.d.ts.map +0 -1
  840. package/dist/dashboard/workflow-card-model.js +0 -186
  841. package/dist/dashboard/workflow-card-model.js.map +0 -1
  842. package/dist/dashboard/workflows-action-helpers.d.ts +0 -105
  843. package/dist/dashboard/workflows-action-helpers.d.ts.map +0 -1
  844. package/dist/dashboard/workflows-action-helpers.js +0 -196
  845. package/dist/dashboard/workflows-action-helpers.js.map +0 -1
  846. package/dist/dashboard-web/chunks/chunk-ISOD7VDX.js +0 -1
  847. package/dist/dashboard-web/chunks/chunk-PNK3HQBI.js +0 -37
  848. package/dist/dashboard-web/chunks/connectors-page-UQ4QBE45.js +0 -1
  849. package/dist/dashboard-web/chunks/legacy-workflow-page-QMC7OZXH.js +0 -2
  850. package/dist/dashboard-web/chunks/sessions-page-NNZIDHZM.js +0 -3
  851. package/dist/dashboard-web/chunks/settings-page-LJIXX5LQ.js +0 -2
  852. package/dist/dashboard-web/chunks/v3-page-YLYVHGKD.js +0 -94
  853. package/dist/dashboard-web/terminal-replay.html +0 -227
  854. package/dist/im/lark/workflow-card-handler.d.ts +0 -51
  855. package/dist/im/lark/workflow-card-handler.d.ts.map +0 -1
  856. package/dist/im/lark/workflow-card-handler.js +0 -163
  857. package/dist/im/lark/workflow-card-handler.js.map +0 -1
  858. package/dist/im/lark/workflow-cards.d.ts +0 -47
  859. package/dist/im/lark/workflow-cards.d.ts.map +0 -1
  860. package/dist/im/lark/workflow-cards.js +0 -231
  861. package/dist/im/lark/workflow-cards.js.map +0 -1
  862. package/dist/im/lark/workflow-progress-card.d.ts +0 -81
  863. package/dist/im/lark/workflow-progress-card.d.ts.map +0 -1
  864. package/dist/im/lark/workflow-progress-card.js +0 -336
  865. package/dist/im/lark/workflow-progress-card.js.map +0 -1
  866. package/dist/im/lark/workflows-card.d.ts +0 -102
  867. package/dist/im/lark/workflows-card.d.ts.map +0 -1
  868. package/dist/im/lark/workflows-card.js +0 -737
  869. package/dist/im/lark/workflows-card.js.map +0 -1
  870. package/dist/workflows/attempt-resume.d.ts +0 -119
  871. package/dist/workflows/attempt-resume.d.ts.map +0 -1
  872. package/dist/workflows/attempt-resume.js +0 -392
  873. package/dist/workflows/attempt-resume.js.map +0 -1
  874. package/dist/workflows/blob.d.ts +0 -27
  875. package/dist/workflows/blob.d.ts.map +0 -1
  876. package/dist/workflows/blob.js +0 -40
  877. package/dist/workflows/blob.js.map +0 -1
  878. package/dist/workflows/cancel-run.d.ts +0 -45
  879. package/dist/workflows/cancel-run.d.ts.map +0 -1
  880. package/dist/workflows/cancel-run.js +0 -99
  881. package/dist/workflows/cancel-run.js.map +0 -1
  882. package/dist/workflows/cancel.d.ts +0 -111
  883. package/dist/workflows/cancel.d.ts.map +0 -1
  884. package/dist/workflows/cancel.js +0 -120
  885. package/dist/workflows/cancel.js.map +0 -1
  886. package/dist/workflows/catalog.d.ts +0 -60
  887. package/dist/workflows/catalog.d.ts.map +0 -1
  888. package/dist/workflows/catalog.js +0 -119
  889. package/dist/workflows/catalog.js.map +0 -1
  890. package/dist/workflows/cold-attach.d.ts +0 -30
  891. package/dist/workflows/cold-attach.d.ts.map +0 -1
  892. package/dist/workflows/cold-attach.js +0 -40
  893. package/dist/workflows/cold-attach.js.map +0 -1
  894. package/dist/workflows/cold-scan.d.ts +0 -21
  895. package/dist/workflows/cold-scan.d.ts.map +0 -1
  896. package/dist/workflows/cold-scan.js +0 -70
  897. package/dist/workflows/cold-scan.js.map +0 -1
  898. package/dist/workflows/daemon-spawn.d.ts +0 -119
  899. package/dist/workflows/daemon-spawn.d.ts.map +0 -1
  900. package/dist/workflows/daemon-spawn.js +0 -564
  901. package/dist/workflows/daemon-spawn.js.map +0 -1
  902. package/dist/workflows/effect-input.d.ts +0 -4
  903. package/dist/workflows/effect-input.d.ts.map +0 -1
  904. package/dist/workflows/effect-input.js +0 -19
  905. package/dist/workflows/effect-input.js.map +0 -1
  906. package/dist/workflows/events/append.d.ts +0 -77
  907. package/dist/workflows/events/append.d.ts.map +0 -1
  908. package/dist/workflows/events/append.js +0 -214
  909. package/dist/workflows/events/append.js.map +0 -1
  910. package/dist/workflows/events/idempotency.d.ts +0 -77
  911. package/dist/workflows/events/idempotency.d.ts.map +0 -1
  912. package/dist/workflows/events/idempotency.js +0 -116
  913. package/dist/workflows/events/idempotency.js.map +0 -1
  914. package/dist/workflows/events/index.d.ts +0 -7
  915. package/dist/workflows/events/index.d.ts.map +0 -1
  916. package/dist/workflows/events/index.js +0 -7
  917. package/dist/workflows/events/index.js.map +0 -1
  918. package/dist/workflows/fanout.d.ts +0 -36
  919. package/dist/workflows/fanout.d.ts.map +0 -1
  920. package/dist/workflows/fanout.js +0 -115
  921. package/dist/workflows/fanout.js.map +0 -1
  922. package/dist/workflows/hostExecutors/protocol.d.ts +0 -42
  923. package/dist/workflows/hostExecutors/protocol.d.ts.map +0 -1
  924. package/dist/workflows/hostExecutors/protocol.js +0 -181
  925. package/dist/workflows/hostExecutors/protocol.js.map +0 -1
  926. package/dist/workflows/loader.d.ts +0 -30
  927. package/dist/workflows/loader.d.ts.map +0 -1
  928. package/dist/workflows/loader.js +0 -84
  929. package/dist/workflows/loader.js.map +0 -1
  930. package/dist/workflows/loop.d.ts +0 -50
  931. package/dist/workflows/loop.d.ts.map +0 -1
  932. package/dist/workflows/loop.js +0 -408
  933. package/dist/workflows/loop.js.map +0 -1
  934. package/dist/workflows/orchestrator.d.ts +0 -171
  935. package/dist/workflows/orchestrator.d.ts.map +0 -1
  936. package/dist/workflows/orchestrator.js +0 -609
  937. package/dist/workflows/orchestrator.js.map +0 -1
  938. package/dist/workflows/output-binding.d.ts +0 -77
  939. package/dist/workflows/output-binding.d.ts.map +0 -1
  940. package/dist/workflows/output-binding.js +0 -329
  941. package/dist/workflows/output-binding.js.map +0 -1
  942. package/dist/workflows/params.d.ts.map +0 -1
  943. package/dist/workflows/params.js.map +0 -1
  944. package/dist/workflows/resume.d.ts +0 -263
  945. package/dist/workflows/resume.d.ts.map +0 -1
  946. package/dist/workflows/resume.js +0 -808
  947. package/dist/workflows/resume.js.map +0 -1
  948. package/dist/workflows/run-id.d.ts +0 -2
  949. package/dist/workflows/run-id.d.ts.map +0 -1
  950. package/dist/workflows/run-id.js +0 -7
  951. package/dist/workflows/run-id.js.map +0 -1
  952. package/dist/workflows/run-init.d.ts +0 -48
  953. package/dist/workflows/run-init.d.ts.map +0 -1
  954. package/dist/workflows/run-init.js +0 -100
  955. package/dist/workflows/run-init.js.map +0 -1
  956. package/dist/workflows/runs-dir.d.ts +0 -4
  957. package/dist/workflows/runs-dir.d.ts.map +0 -1
  958. package/dist/workflows/runs-dir.js +0 -15
  959. package/dist/workflows/runs-dir.js.map +0 -1
  960. package/dist/workflows/runtime.d.ts +0 -215
  961. package/dist/workflows/runtime.d.ts.map +0 -1
  962. package/dist/workflows/runtime.js +0 -630
  963. package/dist/workflows/runtime.js.map +0 -1
  964. package/dist/workflows/spawn-bot.d.ts +0 -165
  965. package/dist/workflows/spawn-bot.d.ts.map +0 -1
  966. package/dist/workflows/spawn-bot.js +0 -215
  967. package/dist/workflows/spawn-bot.js.map +0 -1
  968. package/dist/workflows/spawn-policy.d.ts.map +0 -1
  969. package/dist/workflows/spawn-policy.js.map +0 -1
  970. package/dist/workflows/system.d.ts +0 -49
  971. package/dist/workflows/system.d.ts.map +0 -1
  972. package/dist/workflows/system.js +0 -48
  973. package/dist/workflows/system.js.map +0 -1
  974. package/dist/workflows/trigger-from-envelope.d.ts +0 -13
  975. package/dist/workflows/trigger-from-envelope.d.ts.map +0 -1
  976. package/dist/workflows/trigger-from-envelope.js +0 -68
  977. package/dist/workflows/trigger-from-envelope.js.map +0 -1
  978. package/dist/workflows/trigger-run.d.ts +0 -70
  979. package/dist/workflows/trigger-run.d.ts.map +0 -1
  980. package/dist/workflows/trigger-run.js +0 -88
  981. package/dist/workflows/trigger-run.js.map +0 -1
  982. package/dist/workflows/wait.d.ts +0 -141
  983. package/dist/workflows/wait.d.ts.map +0 -1
  984. package/dist/workflows/wait.js +0 -203
  985. package/dist/workflows/wait.js.map +0 -1
package/README.en.md CHANGED
@@ -81,9 +81,10 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
81
81
  ```bash
82
82
  npm install -g botmux
83
83
  # or: pnpm add -g botmux
84
+ # or: bun add -g botmux
84
85
  ```
85
86
 
86
- Manual and scheduled updates keep using the npm or pnpm global location that owns the running botmux install. Unknown install layouts are never silently updated with npm.
87
+ Manual and scheduled updates keep using the npm, pnpm, or Bun global location that owns the running botmux install. Unknown install layouts are never silently updated with npm.
87
88
 
88
89
  > Requires **Node.js ≥ 22**, with at least one AI coding CLI installed and authenticated (`claude` / `codex` / `cursor-agent` / `gemini` / `opencode` / `coco` / `agy` / `kimi` / `grok` / `kiro-cli` on your PATH). Installing **tmux** too is recommended (enables session persistence automatically).
89
90
 
@@ -232,7 +233,7 @@ On mobile/tablet, a floating shortcut toolbar provides Esc, Ctrl+C, Tab, arrow k
232
233
 
233
234
  ### Multi-Bot Collaboration
234
235
 
235
- Run multiple Lark bots on a single machine, each mapped to a different CLI. In the same group chat, messages are routed via @mention — each bot gets its own isolated CLI process. With a single bot in the group, it responds automatically without @. In a regular (non-topic) group, `@<bot1> @<bot2> /t xxx` spawns one independent thread per mentioned bot anchored at the same message. Send `@<bot1> @<bot2> /introduce` once so they register each other's open_id; afterwards each bot can explicitly @-mention the others from within its own session (commands: [📖 Docs · Slash Commands](https://deepcoldy.github.io/botmux/en/slash-commands)).
236
+ Run multiple Lark bots on a single machine, each mapped to a different CLI. In the same group chat, messages are routed via @mention — each bot gets its own isolated CLI process. In a 1:1 group (you + one bot) it responds automatically without @; multi-person groups require @ by default (the per-bot "Group @ policy" can relax this inside owned topics or group-wide). In a regular (non-topic) group, `@<bot1> @<bot2> /t xxx` spawns one independent thread per mentioned bot anchored at the same message. Send `@<bot1> @<bot2> /introduce` once so they register each other's open_id; afterwards each bot can explicitly @-mention the others from within its own session (commands: [📖 Docs · Slash Commands](https://deepcoldy.github.io/botmux/en/slash-commands)).
236
237
 
237
238
  ### Multi-Topic Collaboration
238
239
 
@@ -325,6 +326,7 @@ When a CLI spawns inside a botmux session it automatically gets
325
326
  - `botmux quoted <message_id>` — when the user @ed the bot via Lark's quote-reply UI, fetch the quoted message on demand
326
327
  - `botmux bots list` — discover bots + their `open_id`s
327
328
  - `botmux schedule` — manage scheduled tasks
329
+ - `botmux-workflow` — orchestrate bounded multi-step work with natural language or `/workflow`, then save successful runs for reuse
328
330
 
329
331
  These capabilities are wired via `--append-system-prompt` and Skill
330
332
  descriptions, so the agent picks them up automatically. Compared to
@@ -344,10 +346,9 @@ Gemini / OpenCode / Antigravity / GitHub Copilot), with no MCP protocol support
344
346
  - Disband or leave a chat (associated sessions auto-closed)
345
347
  - **Session Insights** (owner-only, read-only): parse each session's transcript to view action spans / work timeline / context curve / failure aggregates + diagnostic suggestions; send `/insight` in chat for the current session's summary card
346
348
  - **Workflows console**:
347
- - Run List (5 s poll) + Run Detail with summary, dangling-work red panel, node/activity table, event timeline, and a **parallel-execution timeline** (attempt-level), auto-stopping polling once the run reaches a terminal state
348
- - **Cancel a run directly from the dashboard**; approve / reject `humanGate` with reviewer comments
349
- - **Workflow Catalog**: lists every workflow under `~/.botmux/workflows/`, drills into schema / dependency graph, and triggers a new run from the UI (with params input)
350
- - IM approval / cancel cards remain available; `botmux workflow` CLI subcommands also keep working
349
+ - v3 Run List and Run Detail show the DAG, node states, decisions, and attempt terminal logs, and stop polling at terminal state
350
+ - **Cancel v3 runs directly from the dashboard**; trusted Lark cards in the bound topic handle `humanGate`, retry, and grant decisions
351
+ - Create, run, save, and reuse workflows in Lark with natural language or `/workflow`; the v2 Dashboard/Catalog has been retired
351
352
 
352
353
  <img src="docs/dashboard.png" alt="botmux dashboard" width="800" />
353
354
 
@@ -367,6 +368,15 @@ Gemini / OpenCode / Antigravity / GitHub Copilot), with no MCP protocol support
367
368
 
368
369
  ---
369
370
 
371
+ ### Multi-step Workflow (v3)
372
+
373
+ - Say “research three competitors and write a report” or “chain A/B/C and run it automatically.” The bot lightly confirms Workflow intent, clarifies the goal, builds a bounded DAG, and executes it.
374
+ - Use `/workflow <goal>` for an explicit start, and `/workflow list|show|cancel` to inspect or cancel runs.
375
+ - Save a successful run with `/workflow save last weekly-report`, then reuse it with `/workflow run weekly-report region=sg`; only missing required parameters are requested.
376
+ - The v2 runtime is retired. Legacy definitions and run history retain only offline `botmux template migrate-v3` / `archive-runs` migration and archive tooling.
377
+
378
+ ---
379
+
370
380
  ### Per-Bot Environment Variables (run a bot on GLM / a third-party provider)
371
381
 
372
382
  Each `bots.json` entry can define its own `env` object, injected into **that bot's CLI process**. Typical use: run one bot on a GLM Coding Plan / third-party Anthropic·OpenAI-compatible provider while another keeps using official Claude — just point the former at the provider's endpoint and key:
package/README.md CHANGED
@@ -94,7 +94,7 @@ botmux 可以管理 CLI 无关的自定义 Skill Registry,并按 bot 配置在
94
94
 
95
95
  ### 多机器人协作
96
96
 
97
- 同一台机器上可运行多个飞书机器人,每个机器人可对应不同的 CLI。同一群聊中通过 @mention 路由消息,仅有一个机器人时无需 @ 自动响应;多机器人时 `@<bot1> @<bot2> /t xxx` 可让每个被 @ 的机器人在同一条消息上各自独立开新话题。先发一次 `@<bot1> @<bot2> /introduce` 让它们互相登记 open_id,之后各 bot 就能在自己的会话里显式 @mention 对方协作(命令详见 [📖 文档 · 斜杠命令](https://deepcoldy.github.io/botmux/slash-commands))。
97
+ 同一台机器上可运行多个飞书机器人,每个机器人可对应不同的 CLI。同一群聊中通过 @mention 路由消息,仅「你 + 1 个机器人」的 1v1 群无需 @ 自动响应,多人群默认必须 @(可通过「群聊 @ 策略」配置话题内免 @ / 全群免 @);多机器人时 `@<bot1> @<bot2> /t xxx` 可让每个被 @ 的机器人在同一条消息上各自独立开新话题。先发一次 `@<bot1> @<bot2> /introduce` 让它们互相登记 open_id,之后各 bot 就能在自己的会话里显式 @mention 对方协作(命令详见 [📖 文档 · 斜杠命令](https://deepcoldy.github.io/botmux/slash-commands))。
98
98
 
99
99
  ### 多话题协作模式
100
100
 
@@ -183,6 +183,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
183
183
  - `botmux quoted <message_id>` — 用户用引用 UI @ 机器人时,按需读取被引用的那条消息
184
184
  - `botmux bots list` — 查询当前群聊的机器人及 open_id
185
185
  - `botmux schedule` — 增删改查定时任务
186
+ - `botmux-workflow` — 用自然语言或 `/workflow` 编排有界多步任务;成功 run 可保存为 Saved Workflow 并复用
186
187
 
187
188
  这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
188
189
 
@@ -196,10 +197,9 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
196
197
  - 解散群聊、bot 退群(关联会话自动清理)
197
198
  - **会话洞察**(owner-only,只读):解析各会话 transcript,看动作 span / 工作时序 / 上下文曲线 / 失败聚合 + 诊断建议;聊天里发 `/insight` 可取当前会话摘要卡
198
199
  - **Workflows 管控面**:
199
- - Run List 5s 轮询;Run Detail summary / dangling 红区 / node-activity 表 / event timeline / **并发执行 timeline**(attempt 级时序),到 terminal 自动停轮询
200
- - **Dashboard 内可直接 cancel run**、批准/拒绝 humanGate(approve/reject + 评论)
201
- - **Workflow Catalog**:列所有 `~/.botmux/workflows/` 下的 workflow,点进去看 schema / 依赖图,直接在 UI 触发 run(带 params 输入)
202
- - IM 卡片(cancel / approve / reject)仍可用;CLI 子命令也保留
200
+ - v3 Run List Run Detail 展示 DAG、节点状态、决策记录和 attempt 终端日志,到 terminal 自动停轮询
201
+ - **Dashboard 内可直接 cancel v3 run**;humanGate / retry / grant 继续通过绑定话题里的可信飞书卡片处理
202
+ - 新流程统一在飞书用自然语言或 `/workflow` 创建、运行、保存和复用;v2 Dashboard/Catalog 已下线
203
203
 
204
204
  <img src="docs/dashboard.png" alt="botmux dashboard" width="800" />
205
205
 
@@ -225,9 +225,10 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
225
225
  ```bash
226
226
  npm install -g botmux
227
227
  # 或:pnpm add -g botmux
228
+ # 或:bun add -g botmux
228
229
  ```
229
230
 
230
- botmux 的手动/定时更新会识别当前全局安装归属,并继续使用同一个 npm 或 pnpm 安装位置;无法安全识别的安装方式不会自动回退到 npm。
231
+ botmux 的手动/定时更新会识别当前全局安装归属,并继续使用同一个 npm、pnpmBun 安装位置;无法安全识别的安装方式不会自动回退到 npm。
231
232
 
232
233
  > 要求 **Node.js ≥ 22**,且本地已装好并登录至少一种 AI 编程 CLI(`claude` / `codex` / `cursor-agent` / `gemini` / `opencode` / `coco` / `agy` / `grok` / `kiro-cli` 等在 PATH 中)。推荐顺手装 **tmux**(装了自动启用会话常驻)。
233
234
 
@@ -366,6 +367,15 @@ botmux 会自动开启机器人能力、长连接事件模式并订阅基础事
366
367
 
367
368
  ---
368
369
 
370
+ ### 多步 Workflow(v3)
371
+
372
+ - 直接用自然语言说“调研三家竞品并出报告”“把 A/B/C 串起来自动做”,bot 会先轻确认是否切换到 Workflow,再澄清、编排并执行有界 DAG。
373
+ - 明确要编排时可发 `/workflow <目标>`;查看/取消 run 用 `/workflow list|show|cancel`。
374
+ - 成功 run 可用 `/workflow save last 周报` 固化;之后 `/workflow run 周报 region=sg` 复用,缺少的必填参数会单独补问。
375
+ - v2 runtime 已下线。旧定义与历史 run 只保留 `botmux template migrate-v3` / `archive-runs` 离线迁移归档入口。
376
+
377
+ ---
378
+
369
379
  ### Bot 级环境变量(接入 GLM / 第三方服务商)
370
380
 
371
381
  每个 `bots.json` 条目都可以配置独立的 `env` 对象,注入到**该 bot 的 CLI 进程**。典型用途:让某个 bot 跑 GLM Coding Plan / 第三方 Anthropic·OpenAI 兼容服务商,另一个 bot 仍跑官方 Claude——只需给前者填上服务商的端点和 key:
@@ -1 +1 @@
1
- {"version":3,"file":"adopt-route.d.ts","sourceRoot":"","sources":["../../src/adapters/adopt-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AA8CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EAC3C,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,EAAE,CAiBV;AAID;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgC5B;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1E,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA+C7B"}
1
+ {"version":3,"file":"adopt-route.d.ts","sourceRoot":"","sources":["../../src/adapters/adopt-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AA8CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EAC3C,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,EAAE,CAiBV;AAID;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAiC5B;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1E,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA+C7B"}
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { execFileSync } from 'node:child_process';
13
13
  import { readFileSync } from 'node:fs';
14
+ import { fetchDaemonIpc } from '../core/daemon-ipc-auth.js';
14
15
  // ── 祖先 PID 收集 ──────────────────────────────────────────────────────────────
15
16
  /**
16
17
  * 读取某进程的父 PID。
@@ -94,7 +95,7 @@ export async function queryAdoptSession(ipcPort, pid) {
94
95
  const controller = new AbortController();
95
96
  const timer = setTimeout(() => controller.abort(), 2000);
96
97
  try {
97
- const res = await fetch(`http://127.0.0.1:${ipcPort}/api/adopt-session/${pid}`, { signal: controller.signal });
98
+ const res = await fetchDaemonIpc(ipcPort, `/api/adopt-session/${pid}`, { signal: controller.signal });
98
99
  if (!res.ok)
99
100
  return null;
100
101
  const body = (await res.json());
@@ -1 +1 @@
1
- {"version":3,"file":"adopt-route.js","sourceRoot":"","sources":["../../src/adapters/adopt-route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adopt-route.js","sourceRoot":"","sources":["../../src/adapters/adopt-route.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,16 @@ export interface SandboxPlan {
42
42
  * (daemon-produced, e.g. skill plugin dirs) — bound AFTER the privacy masks so
43
43
  * a broad hideDir can't break skill delivery. */
44
44
  readonlyRoots?: string[];
45
+ /** Daemon-generated private roots re-bound writable AFTER credential masks.
46
+ * Used for the current bot's isolated CLI home only; never accepts user
47
+ * config. */
48
+ trustedWritableRoots?: string[];
49
+ /** Crown-jewel masks emitted after trusted writable carve-outs. */
50
+ finalHideDirs?: string[];
51
+ finalHideFiles?: {
52
+ path: string;
53
+ empty: string;
54
+ }[];
45
55
  /** User-configured read-only inputs (per-bot sandboxReadonlyPaths). Bound BEFORE
46
56
  * the privacy masks so hidePaths always win over them — an entry overlapping a
47
57
  * masked path must never re-expose the real content. */
@@ -144,6 +154,11 @@ export interface SandboxSpawn {
144
154
  * canonicalized dataDir under a symlink home would escape home-upper via `..` —
145
155
  * fall back to the canonical base so it can't. */
146
156
  export declare function sandboxedClaudeDataDir(sessionId: string, realDataDir: string): string;
157
+ /** Credential roots that must never be readable inside the file sandbox.
158
+ * Relay mode is the only credentialed send path; otherwise an agent could
159
+ * unset BOTMUX_SEND_RELAY and execute an absolute botmux binary against the
160
+ * real bots.json/send-cred files exposed by the HOME overlay lowerdir. */
161
+ export declare function sandboxCredentialHidePaths(home: string, botmuxHome?: string): string[];
147
162
  /**
148
163
  * Whether the LOCAL bwrap file sandbox applies to this spawn at all.
149
164
  * - macOS enforces `sandbox: true` via the Seatbelt write-sandbox instead.
@@ -187,6 +202,10 @@ export declare function prepareSandbox(opts: {
187
202
  /** Runtime-generated roots that should be visible read-only inside bwrap.
188
203
  * Trusted (daemon-produced) — bound after the privacy masks. */
189
204
  readonlyRoots?: readonly string[];
205
+ /** Daemon-derived private roots to re-open writable after mandatory masks. */
206
+ trustedWritablePaths?: readonly string[];
207
+ /** Credential paths to re-mask after trusted writable carve-outs. */
208
+ finalHidePaths?: readonly string[];
190
209
  /** User-configured extra read-only inputs (per-bot sandboxReadonlyPaths).
191
210
  * Bound before the privacy masks (masks win) and rejected when they would
192
211
  * shadow the home/project overlay roots. */
@@ -243,6 +262,9 @@ export interface RelayRequest {
243
262
  videos?: unknown;
244
263
  videoCovers?: unknown;
245
264
  flags?: unknown;
265
+ originTurnId?: unknown;
266
+ originDispatchAttempt?: unknown;
267
+ originCapability?: unknown;
246
268
  }
247
269
  export interface ValidatedRelay {
248
270
  contentName: string;
@@ -252,6 +274,9 @@ export interface ValidatedRelay {
252
274
  videoNames: string[];
253
275
  videoCoverNames: string[];
254
276
  flags: string[];
277
+ originTurnId?: string;
278
+ originDispatchAttempt?: number;
279
+ originCapability?: string;
255
280
  }
256
281
  /**
257
282
  * PURE validation of an outbox relay request (schema + flag allowlist only — no
@@ -294,6 +319,21 @@ export declare function materializeOutboxFile(outbox: string, name: string, dest
294
319
  */
295
320
  export declare function buildRelayHostEnv(baseEnv: NodeJS.ProcessEnv, preparedContentFile?: string): NodeJS.ProcessEnv;
296
321
  export declare function startOutboxWatcher(outbox: string, baseEnv: NodeJS.ProcessEnv, sessionId: string, opts?: {
322
+ /** Host-side authorization for a relay's claimed origin capability. When
323
+ * absent the relay still runs, but carries NO durable origin — a missing
324
+ * hook must never let the sandbox promote its own origin fields. */
325
+ authorize?: (claim: {
326
+ capability?: string;
327
+ }) => {
328
+ ok: true;
329
+ origin: {
330
+ turnId?: string;
331
+ dispatchAttempt?: number;
332
+ };
333
+ } | {
334
+ ok: false;
335
+ error: string;
336
+ };
297
337
  cliPath?: string;
298
338
  }): () => void;
299
339
  //# sourceMappingURL=sandbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"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"}
@@ -146,6 +146,16 @@ export function buildSandboxArgs(plan) {
146
146
  a.push('--tmpfs', dir);
147
147
  for (const f of plan.hideFiles)
148
148
  a.push('--ro-bind', f.empty, f.path);
149
+ // Re-open only daemon-derived private roots (for example this bot's own
150
+ // BOT_HOME) after their parent BOTMUX_HOME was blanked.
151
+ for (const root of plan.trustedWritableRoots ?? [])
152
+ a.push('--bind', root, root);
153
+ // A private root can itself contain a credential that the sandbox must not
154
+ // recover (notably send-cred.json). Re-deny those after the carve-out.
155
+ for (const dir of plan.finalHideDirs ?? [])
156
+ a.push('--tmpfs', dir);
157
+ for (const f of plan.finalHideFiles ?? [])
158
+ a.push('--ro-bind', f.empty, f.path);
149
159
  // Session-scoped TRUSTED runtime inputs, e.g. generated skill/plugin dirs —
150
160
  // after the masks so a broad hideDir can't blank skill delivery.
151
161
  for (const root of plan.readonlyRoots ?? [])
@@ -304,6 +314,22 @@ export function sandboxedClaudeDataDir(sessionId, realDataDir) {
304
314
  const rel = raw.startsWith('..') ? relative(resolveSandboxMountPath(homedir()), realDataDir) : raw;
305
315
  return join(VARTMP_ROOT, sessionId, 'home-upper', rel);
306
316
  }
317
+ /** Credential roots that must never be readable inside the file sandbox.
318
+ * Relay mode is the only credentialed send path; otherwise an agent could
319
+ * unset BOTMUX_SEND_RELAY and execute an absolute botmux binary against the
320
+ * real bots.json/send-cred files exposed by the HOME overlay lowerdir. */
321
+ export function sandboxCredentialHidePaths(home, botmuxHome = join(home, '.botmux')) {
322
+ // Mask the entire botmux state root. Exact-file masks are insufficient:
323
+ // setup/update creates timestamped bots.json backups, including ones created
324
+ // after a long-lived sandbox starts. Trusted skill roots and the per-session
325
+ // outbox are explicitly re-bound after privacy masks by buildSandboxArgs.
326
+ return [...new Set([
327
+ join(home, '.botmux'),
328
+ botmuxHome,
329
+ join(home, '.lark-cli'),
330
+ join(home, '.lark-cli-bots'),
331
+ ])].sort();
332
+ }
307
333
  /** Proxy env vars forwarded into the sandbox so the CLI reaches the API even on
308
334
  * the tmux backend (which otherwise only forwards a fixed whitelist). */
309
335
  const PROXY_ENV_KEYS = ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'no_proxy', 'NO_PROXY', 'all_proxy', 'ALL_PROXY'];
@@ -339,6 +365,7 @@ export function prepareSandbox(opts) {
339
365
  if (!ensureSandboxDeps(needFuse))
340
366
  return null;
341
367
  const dataDir = resolveSandboxMountPath(opts.dataDir);
368
+ const botmuxHome = dirname(dataDir);
342
369
  const sessionRoot = join(dataDir, 'sandboxes', opts.sessionId);
343
370
  const outbox = join(sessionRoot, 'outbox');
344
371
  const shimBin = join(sessionRoot, 'shimbin');
@@ -354,6 +381,14 @@ export function prepareSandbox(opts) {
354
381
  for (const d of [outbox, shimBin, empties])
355
382
  mkdirSync(d, { recursive: true });
356
383
  const home = resolveSandboxMountPath(homedir());
384
+ // Masking BOTMUX_HOME is mandatory for the credential boundary. A layout
385
+ // that makes it `/` or the whole user home cannot be masked without erasing
386
+ // the sandbox runtime itself, so refuse the spawn instead of silently
387
+ // exposing the custom session/config root.
388
+ if (botmuxHome === '/' || botmuxHome === home) {
389
+ console.error(`[sandbox] unsafe SESSION_DATA_DIR layout: BOTMUX_HOME resolves to ${botmuxHome}`);
390
+ return null;
391
+ }
357
392
  // BOTMUX_SANDBOX_SRC overrides the LOWER project source for spike testing only.
358
393
  const projectSource = resolveSandboxMountPath(process.env.BOTMUX_SANDBOX_SRC || opts.sourceWorkingDir);
359
394
  const projectMount = resolveSandboxMountPath(opts.sourceWorkingDir);
@@ -385,14 +420,25 @@ export function prepareSandbox(opts) {
385
420
  const shim = join(shimBin, 'botmux');
386
421
  writeFileSync(shim, `#!/bin/sh\nexec node ${JSON.stringify(distCliJs())} "$@"\n`);
387
422
  chmodSync(shim, 0o755);
388
- // Per-bot privacy masks: existing dirs tmpfs blank; everything else → empty
389
- // read-only placeholder file. No defaults (caller passes hidePaths explicitly).
423
+ // Credential masks are mandatory; per-bot privacy masks extend them.
424
+ // Existing dirs tmpfs blank; everything else empty read-only placeholder.
390
425
  // `~` resolves like the docs' examples (`~/.ssh`) — an unexpanded tilde would
391
426
  // fail existsSync and mask a literal `~/...` path, leaving the real one readable.
392
427
  const hideDirs = [];
393
428
  const hideFiles = [];
429
+ const finalHideDirs = [];
430
+ const finalHideFiles = [];
394
431
  let emptyIdx = 0;
395
- for (const raw of opts.hidePaths ?? []) {
432
+ const customBotsConfig = process.env.BOTS_CONFIG?.trim();
433
+ const credentialPaths = [
434
+ // SESSION_DATA_DIR may live outside ~/.botmux. Its parent is the
435
+ // authoritative BOTMUX_HOME everywhere else (send-cred, per-bot homes,
436
+ // sessions/receipts); mask that exact root so a custom location cannot be
437
+ // recovered through the sandbox's initial read-only bind of `/`.
438
+ ...sandboxCredentialHidePaths(home, botmuxHome),
439
+ ...(customBotsConfig ? [resolve(customBotsConfig)] : []),
440
+ ];
441
+ for (const raw of [...credentialPaths, ...(opts.hidePaths ?? [])]) {
396
442
  if (!raw || typeof raw !== 'string')
397
443
  continue;
398
444
  const p = expandTilde(raw, home);
@@ -413,11 +459,33 @@ export function prepareSandbox(opts) {
413
459
  hideFiles.push({ path: p, empty });
414
460
  }
415
461
  }
462
+ for (const raw of opts.finalHidePaths ?? []) {
463
+ if (!raw || typeof raw !== 'string')
464
+ continue;
465
+ const p = expandTilde(raw, home);
466
+ let isDir = false;
467
+ try {
468
+ isDir = existsSync(p) && statSync(p).isDirectory();
469
+ }
470
+ catch { /* */ }
471
+ if (isDir) {
472
+ finalHideDirs.push(p);
473
+ }
474
+ else {
475
+ const empty = join(empties, `mask-${emptyIdx++}`);
476
+ try {
477
+ writeFileSync(empty, '');
478
+ }
479
+ catch { /* */ }
480
+ finalHideFiles.push({ path: p, empty });
481
+ }
482
+ }
416
483
  // CLI auth/login paths kept real+writable (token refresh / login must persist,
417
484
  // unlike isolated project edits). Resolve `~` and bind only existing paths — a
418
485
  // missing auth file isn't a valid mountpoint (the CLI must be logged in on the
419
486
  // host; login-from-scratch inside the sandbox isn't supported).
420
487
  const authReal = resolveExistingPaths(opts.authPaths, home);
488
+ const trustedWritableRoots = resolveExistingPaths(opts.trustedWritablePaths, home);
421
489
  const readonlyRoots = resolveExistingPaths(opts.readonlyRoots, home);
422
490
  const userReadonlyRoots = resolveUserReadonlyRoots(opts.userReadonlyPaths, home, projectMount);
423
491
  const plan = {
@@ -429,6 +497,9 @@ export function prepareSandbox(opts) {
429
497
  hideDirs,
430
498
  hideFiles,
431
499
  authReal,
500
+ trustedWritableRoots,
501
+ finalHideDirs,
502
+ finalHideFiles,
432
503
  readonlyRoots,
433
504
  userReadonlyRoots,
434
505
  net: opts.net !== false,
@@ -459,6 +530,18 @@ export function prepareSandbox(opts) {
459
530
  BOTMUX_SEND_RELAY: outbox, // routes `botmux send` to the daemon outbox watcher
460
531
  PATH: `/run/sbxbin:${process.env.PATH ?? ''}`, // /run/sbxbin first so `botmux` = the relay shim
461
532
  };
533
+ // The daemon discovery dir lives under the masked BOTMUX_HOME, so the only
534
+ // way an in-sandbox CLI can dial the daemon's loopback IPC (session-scoped,
535
+ // capability-gated routes like the v3 workflow relay) is this port marker.
536
+ // Not a credential: every route it reaches authenticates independently.
537
+ if (process.env.BOTMUX_DAEMON_IPC_PORT) {
538
+ env.BOTMUX_DAEMON_IPC_PORT = process.env.BOTMUX_DAEMON_IPC_PORT;
539
+ }
540
+ // Never inherit a custom credential config path into the sandbox. Its host
541
+ // path is masked above as defense in depth, while unsetenv prevents an
542
+ // absolute botmux/lark client from being pointed at it explicitly.
543
+ args.push('--unsetenv', 'BOTS_CONFIG');
544
+ args.push('--unsetenv', 'BOTMUX_HOST_RELAY_AUTHORIZED');
462
545
  // Forward proxy vars so the CLI reaches the API on the tmux backend too.
463
546
  for (const k of PROXY_ENV_KEYS) {
464
547
  const v = process.env[k];
@@ -731,7 +814,36 @@ export function validateRelayRequest(req) {
731
814
  }
732
815
  return { ok: false, error: `flag not allowed: ${f}` };
733
816
  }
734
- return { ok: true, value: {
817
+ const originTurnId = req.originTurnId === undefined
818
+ ? undefined
819
+ : typeof req.originTurnId === 'string' && req.originTurnId.trim() && req.originTurnId.length <= 256
820
+ ? req.originTurnId
821
+ : null;
822
+ if (originTurnId === null)
823
+ return { ok: false, error: 'originTurnId must be a non-empty bounded string' };
824
+ const originDispatchAttempt = req.originDispatchAttempt === undefined
825
+ ? undefined
826
+ : typeof req.originDispatchAttempt === 'number'
827
+ && Number.isSafeInteger(req.originDispatchAttempt)
828
+ && req.originDispatchAttempt > 0
829
+ ? req.originDispatchAttempt
830
+ : null;
831
+ if (originDispatchAttempt === null)
832
+ return { ok: false, error: 'originDispatchAttempt must be a positive safe integer' };
833
+ if (originDispatchAttempt !== undefined && originTurnId === undefined) {
834
+ return { ok: false, error: 'originDispatchAttempt requires originTurnId' };
835
+ }
836
+ const originCapability = req.originCapability === undefined
837
+ ? undefined
838
+ : typeof req.originCapability === 'string'
839
+ && /^[a-f0-9]{32,128}$/i.test(req.originCapability)
840
+ ? req.originCapability
841
+ : null;
842
+ if (originCapability === null)
843
+ return { ok: false, error: 'originCapability must be a bounded hex token' };
844
+ return {
845
+ ok: true,
846
+ value: {
735
847
  contentName: req.contentFile,
736
848
  preparedContentName,
737
849
  cardName,
@@ -739,7 +851,11 @@ export function validateRelayRequest(req) {
739
851
  videoNames,
740
852
  videoCoverNames,
741
853
  flags,
742
- } };
854
+ ...(originTurnId !== undefined ? { originTurnId } : {}),
855
+ ...(originDispatchAttempt !== undefined ? { originDispatchAttempt } : {}),
856
+ ...(originCapability !== undefined ? { originCapability } : {}),
857
+ },
858
+ };
743
859
  }
744
860
  /**
745
861
  * TOCTOU-safe copy of an outbox file (`outbox/<name>`, name already validated as
@@ -811,6 +927,7 @@ export function buildRelayHostEnv(baseEnv, preparedContentFile) {
811
927
  }
812
928
  export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
813
929
  const cli = opts.cliPath ?? distCliJs();
930
+ const authorize = opts.authorize;
814
931
  const inFlight = new Set();
815
932
  // Host-private staging — a sibling of the outbox, NOT bound into the sandbox.
816
933
  const staging = join(dirname(outbox), 'relay-staging');
@@ -860,6 +977,11 @@ export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
860
977
  finish(id, reqPath, name, staged, 1, '', `relay rejected: ${v.error}`);
861
978
  continue;
862
979
  }
980
+ const authorization = authorize?.({ capability: v.value.originCapability });
981
+ if (authorization && !authorization.ok) {
982
+ finish(id, reqPath, name, staged, 2, '', `relay rejected: ${authorization.error}`);
983
+ continue;
984
+ }
863
985
  try {
864
986
  mkdirSync(staging, { recursive: true });
865
987
  }
@@ -948,9 +1070,30 @@ export function startOutboxWatcher(outbox, baseEnv, sessionId, opts = {}) {
948
1070
  ...videoCoverPaths.flatMap(a => ['--video-covers', a]),
949
1071
  '--session-id', sessionId, // forced — sandbox cannot target another session
950
1072
  ];
951
- const child = spawn(process.execPath, [cli, 'send', ...hostArgs], {
952
- env: buildRelayHostEnv(baseEnv, preparedContentPath),
953
- });
1073
+ // Fail closed: a durable origin (turnId/dispatchAttempt) may come ONLY
1074
+ // from a host-side authorize decision. The sandbox controls every byte of
1075
+ // the relay request, so its originTurnId/dispatchAttempt are never trusted
1076
+ // — without an authorize hook the relay runs with no durable origin.
1077
+ const trustedOrigin = authorization?.ok ? authorization.origin : undefined;
1078
+ // Master's relay host env (BOTMUX_SEND_RELAY stripped + prepared-content
1079
+ // local-link mode) is the base for the watcher-spawned host re-exec.
1080
+ const requestEnv = {
1081
+ ...buildRelayHostEnv(baseEnv, preparedContentPath),
1082
+ BOTMUX_SESSION_ID: sessionId,
1083
+ };
1084
+ // The host re-exec itself is trusted (the sandbox child has this marker
1085
+ // explicitly unset). Scrub any inherited durable-origin markers first,
1086
+ // then re-apply only what the host authorized; cmdSend still re-validates
1087
+ // the exact receipt/IM origin carried below.
1088
+ requestEnv.BOTMUX_HOST_RELAY_AUTHORIZED = '1';
1089
+ delete requestEnv.BOTMUX_TURN_ID;
1090
+ delete requestEnv.BOTMUX_DISPATCH_ATTEMPT;
1091
+ if (trustedOrigin?.turnId !== undefined)
1092
+ requestEnv.BOTMUX_TURN_ID = trustedOrigin.turnId;
1093
+ if (trustedOrigin?.dispatchAttempt !== undefined) {
1094
+ requestEnv.BOTMUX_DISPATCH_ATTEMPT = String(trustedOrigin.dispatchAttempt);
1095
+ }
1096
+ const child = spawn(process.execPath, [cli, 'send', ...hostArgs], { env: requestEnv });
954
1097
  let out = '', err = '';
955
1098
  child.stdout.on('data', d => { out += d; });
956
1099
  child.stderr.on('data', d => { err += d; });