botmux 2.65.0 → 2.66.0-canary.1

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 (342) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/adapters/backend/sandbox.d.ts +119 -0
  4. package/dist/adapters/backend/sandbox.d.ts.map +1 -0
  5. package/dist/adapters/backend/sandbox.js +591 -0
  6. package/dist/adapters/backend/sandbox.js.map +1 -0
  7. package/dist/adapters/backend/types.d.ts +8 -0
  8. package/dist/adapters/backend/types.d.ts.map +1 -1
  9. package/dist/adapters/backend/types.js.map +1 -1
  10. package/dist/adapters/backend/zellij-observe-backend.d.ts +5 -0
  11. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/zellij-observe-backend.js +7 -0
  13. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
  14. package/dist/adapters/cli/aiden.d.ts.map +1 -1
  15. package/dist/adapters/cli/aiden.js +1 -3
  16. package/dist/adapters/cli/aiden.js.map +1 -1
  17. package/dist/adapters/cli/antigravity.d.ts.map +1 -1
  18. package/dist/adapters/cli/antigravity.js +2 -4
  19. package/dist/adapters/cli/antigravity.js.map +1 -1
  20. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  21. package/dist/adapters/cli/claude-code.js +12 -6
  22. package/dist/adapters/cli/claude-code.js.map +1 -1
  23. package/dist/adapters/cli/coco.d.ts.map +1 -1
  24. package/dist/adapters/cli/coco.js +4 -4
  25. package/dist/adapters/cli/coco.js.map +1 -1
  26. package/dist/adapters/cli/codex.d.ts.map +1 -1
  27. package/dist/adapters/cli/codex.js +2 -4
  28. package/dist/adapters/cli/codex.js.map +1 -1
  29. package/dist/adapters/cli/copilot.d.ts.map +1 -1
  30. package/dist/adapters/cli/copilot.js +1 -3
  31. package/dist/adapters/cli/copilot.js.map +1 -1
  32. package/dist/adapters/cli/cursor.d.ts.map +1 -1
  33. package/dist/adapters/cli/cursor.js +1 -3
  34. package/dist/adapters/cli/cursor.js.map +1 -1
  35. package/dist/adapters/cli/gemini.d.ts.map +1 -1
  36. package/dist/adapters/cli/gemini.js +1 -3
  37. package/dist/adapters/cli/gemini.js.map +1 -1
  38. package/dist/adapters/cli/hermes.d.ts.map +1 -1
  39. package/dist/adapters/cli/hermes.js +1 -3
  40. package/dist/adapters/cli/hermes.js.map +1 -1
  41. package/dist/adapters/cli/mtr.d.ts.map +1 -1
  42. package/dist/adapters/cli/mtr.js +1 -3
  43. package/dist/adapters/cli/mtr.js.map +1 -1
  44. package/dist/adapters/cli/oh-my-pi.d.ts +5 -0
  45. package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -0
  46. package/dist/adapters/cli/oh-my-pi.js +55 -0
  47. package/dist/adapters/cli/oh-my-pi.js.map +1 -0
  48. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  49. package/dist/adapters/cli/opencode.js +1 -3
  50. package/dist/adapters/cli/opencode.js.map +1 -1
  51. package/dist/adapters/cli/pi.d.ts.map +1 -1
  52. package/dist/adapters/cli/pi.js +1 -3
  53. package/dist/adapters/cli/pi.js.map +1 -1
  54. package/dist/adapters/cli/registry.d.ts +2 -1
  55. package/dist/adapters/cli/registry.d.ts.map +1 -1
  56. package/dist/adapters/cli/registry.js +3 -1
  57. package/dist/adapters/cli/registry.js.map +1 -1
  58. package/dist/adapters/cli/traex.d.ts.map +1 -1
  59. package/dist/adapters/cli/traex.js +1 -3
  60. package/dist/adapters/cli/traex.js.map +1 -1
  61. package/dist/adapters/cli/types.d.ts +1 -1
  62. package/dist/adapters/cli/types.d.ts.map +1 -1
  63. package/dist/bot-registry.d.ts +9 -1
  64. package/dist/bot-registry.d.ts.map +1 -1
  65. package/dist/bot-registry.js +1 -0
  66. package/dist/bot-registry.js.map +1 -1
  67. package/dist/cli/send-dispatch.d.ts +22 -0
  68. package/dist/cli/send-dispatch.d.ts.map +1 -1
  69. package/dist/cli/send-dispatch.js +40 -0
  70. package/dist/cli/send-dispatch.js.map +1 -1
  71. package/dist/cli/workflow.d.ts.map +1 -1
  72. package/dist/cli/workflow.js +11 -4
  73. package/dist/cli/workflow.js.map +1 -1
  74. package/dist/cli.d.ts.map +1 -1
  75. package/dist/cli.js +311 -15
  76. package/dist/cli.js.map +1 -1
  77. package/dist/config.d.ts +1 -0
  78. package/dist/config.d.ts.map +1 -1
  79. package/dist/config.js +8 -0
  80. package/dist/config.js.map +1 -1
  81. package/dist/core/command-discovery.d.ts +9 -0
  82. package/dist/core/command-discovery.d.ts.map +1 -1
  83. package/dist/core/command-discovery.js +74 -14
  84. package/dist/core/command-discovery.js.map +1 -1
  85. package/dist/core/command-handler.d.ts.map +1 -1
  86. package/dist/core/command-handler.js +86 -57
  87. package/dist/core/command-handler.js.map +1 -1
  88. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  89. package/dist/core/dashboard-ipc-server.js +56 -2
  90. package/dist/core/dashboard-ipc-server.js.map +1 -1
  91. package/dist/core/dashboard-rows.d.ts +14 -2
  92. package/dist/core/dashboard-rows.d.ts.map +1 -1
  93. package/dist/core/dashboard-rows.js +5 -2
  94. package/dist/core/dashboard-rows.js.map +1 -1
  95. package/dist/core/session-activity.d.ts +1 -0
  96. package/dist/core/session-activity.d.ts.map +1 -1
  97. package/dist/core/session-activity.js +12 -0
  98. package/dist/core/session-activity.js.map +1 -1
  99. package/dist/core/session-discovery.d.ts.map +1 -1
  100. package/dist/core/session-discovery.js +1 -0
  101. package/dist/core/session-discovery.js.map +1 -1
  102. package/dist/core/terminal-url.d.ts +16 -0
  103. package/dist/core/terminal-url.d.ts.map +1 -1
  104. package/dist/core/terminal-url.js +19 -1
  105. package/dist/core/terminal-url.js.map +1 -1
  106. package/dist/core/types.d.ts +13 -0
  107. package/dist/core/types.d.ts.map +1 -1
  108. package/dist/core/types.js.map +1 -1
  109. package/dist/core/worker-pool.d.ts +17 -7
  110. package/dist/core/worker-pool.d.ts.map +1 -1
  111. package/dist/core/worker-pool.js +46 -22
  112. package/dist/core/worker-pool.js.map +1 -1
  113. package/dist/daemon.d.ts.map +1 -1
  114. package/dist/daemon.js +337 -13
  115. package/dist/daemon.js.map +1 -1
  116. package/dist/dashboard/auth.d.ts.map +1 -1
  117. package/dist/dashboard/auth.js +7 -1
  118. package/dist/dashboard/auth.js.map +1 -1
  119. package/dist/dashboard/v3-runs-api.d.ts +26 -0
  120. package/dist/dashboard/v3-runs-api.d.ts.map +1 -0
  121. package/dist/dashboard/v3-runs-api.js +67 -0
  122. package/dist/dashboard/v3-runs-api.js.map +1 -0
  123. package/dist/dashboard/web/app.d.ts.map +1 -1
  124. package/dist/dashboard/web/app.js +7 -4
  125. package/dist/dashboard/web/app.js.map +1 -1
  126. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  127. package/dist/dashboard/web/bot-defaults.js +65 -0
  128. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  129. package/dist/dashboard/web/connectors.js +66 -66
  130. package/dist/dashboard/web/connectors.js.map +1 -1
  131. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  132. package/dist/dashboard/web/i18n.js +386 -2
  133. package/dist/dashboard/web/i18n.js.map +1 -1
  134. package/dist/dashboard/web/overview.d.ts.map +1 -1
  135. package/dist/dashboard/web/overview.js +4 -4
  136. package/dist/dashboard/web/overview.js.map +1 -1
  137. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  138. package/dist/dashboard/web/sessions.js +72 -9
  139. package/dist/dashboard/web/sessions.js.map +1 -1
  140. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  141. package/dist/dashboard/web/team-federation.js +131 -130
  142. package/dist/dashboard/web/team-federation.js.map +1 -1
  143. package/dist/dashboard/web/ui.d.ts +1 -0
  144. package/dist/dashboard/web/ui.d.ts.map +1 -1
  145. package/dist/dashboard/web/ui.js +11 -0
  146. package/dist/dashboard/web/ui.js.map +1 -1
  147. package/dist/dashboard/web/v3-terminal.d.ts +11 -0
  148. package/dist/dashboard/web/v3-terminal.d.ts.map +1 -0
  149. package/dist/dashboard/web/v3-terminal.js +143 -0
  150. package/dist/dashboard/web/v3-terminal.js.map +1 -0
  151. package/dist/dashboard/web/v3.d.ts +2 -0
  152. package/dist/dashboard/web/v3.d.ts.map +1 -0
  153. package/dist/dashboard/web/v3.js +538 -0
  154. package/dist/dashboard/web/v3.js.map +1 -0
  155. package/dist/dashboard-web/app.js +820 -618
  156. package/dist/dashboard-web/index.html +2 -1
  157. package/dist/dashboard-web/style.css +230 -3
  158. package/dist/dashboard.js +47 -0
  159. package/dist/dashboard.js.map +1 -1
  160. package/dist/i18n/en.d.ts.map +1 -1
  161. package/dist/i18n/en.js +22 -5
  162. package/dist/i18n/en.js.map +1 -1
  163. package/dist/i18n/zh.d.ts.map +1 -1
  164. package/dist/i18n/zh.js +22 -5
  165. package/dist/i18n/zh.js.map +1 -1
  166. package/dist/im/lark/card-builder.d.ts +19 -2
  167. package/dist/im/lark/card-builder.d.ts.map +1 -1
  168. package/dist/im/lark/card-builder.js +50 -8
  169. package/dist/im/lark/card-builder.js.map +1 -1
  170. package/dist/im/lark/card-handler.d.ts +12 -0
  171. package/dist/im/lark/card-handler.d.ts.map +1 -1
  172. package/dist/im/lark/card-handler.js +88 -14
  173. package/dist/im/lark/card-handler.js.map +1 -1
  174. package/dist/im/lark/client.d.ts.map +1 -1
  175. package/dist/im/lark/client.js +5 -2
  176. package/dist/im/lark/client.js.map +1 -1
  177. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  178. package/dist/im/lark/event-dispatcher.js +35 -1
  179. package/dist/im/lark/event-dispatcher.js.map +1 -1
  180. package/dist/im/lark/grant-pending.d.ts +1 -0
  181. package/dist/im/lark/grant-pending.d.ts.map +1 -1
  182. package/dist/im/lark/grant-pending.js +36 -4
  183. package/dist/im/lark/grant-pending.js.map +1 -1
  184. package/dist/im/lark/relay-target-routing.d.ts +18 -0
  185. package/dist/im/lark/relay-target-routing.d.ts.map +1 -0
  186. package/dist/im/lark/relay-target-routing.js +44 -0
  187. package/dist/im/lark/relay-target-routing.js.map +1 -0
  188. package/dist/im/lark/v3-blocked-card-handler.d.ts +28 -0
  189. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -0
  190. package/dist/im/lark/v3-blocked-card-handler.js +130 -0
  191. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -0
  192. package/dist/im/lark/v3-blocked-card.d.ts +75 -0
  193. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -0
  194. package/dist/im/lark/v3-blocked-card.js +206 -0
  195. package/dist/im/lark/v3-blocked-card.js.map +1 -0
  196. package/dist/im/lark/v3-gate-card-handler.d.ts +31 -0
  197. package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -0
  198. package/dist/im/lark/v3-gate-card-handler.js +97 -0
  199. package/dist/im/lark/v3-gate-card-handler.js.map +1 -0
  200. package/dist/im/lark/v3-gate-card.d.ts +47 -0
  201. package/dist/im/lark/v3-gate-card.d.ts.map +1 -0
  202. package/dist/im/lark/v3-gate-card.js +119 -0
  203. package/dist/im/lark/v3-gate-card.js.map +1 -0
  204. package/dist/im/lark/v3-loop-grant-card-handler.d.ts +28 -0
  205. package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -0
  206. package/dist/im/lark/v3-loop-grant-card-handler.js +90 -0
  207. package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -0
  208. package/dist/im/lark/v3-loop-grant-card.d.ts +46 -0
  209. package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -0
  210. package/dist/im/lark/v3-loop-grant-card.js +119 -0
  211. package/dist/im/lark/v3-loop-grant-card.js.map +1 -0
  212. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts +29 -0
  213. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -0
  214. package/dist/im/lark/v3-revisit-grant-card-handler.js +88 -0
  215. package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -0
  216. package/dist/im/lark/v3-revisit-grant-card.d.ts +52 -0
  217. package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -0
  218. package/dist/im/lark/v3-revisit-grant-card.js +123 -0
  219. package/dist/im/lark/v3-revisit-grant-card.js.map +1 -0
  220. package/dist/im/lark/workflow-progress-card.d.ts +1 -1
  221. package/dist/im/lark/workflow-progress-card.js +1 -1
  222. package/dist/im/lark/workflow-slash-command.d.ts +28 -0
  223. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  224. package/dist/im/lark/workflow-slash-command.js +68 -12
  225. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  226. package/dist/services/relay-picker.d.ts +6 -1
  227. package/dist/services/relay-picker.d.ts.map +1 -1
  228. package/dist/services/relay-picker.js +8 -2
  229. package/dist/services/relay-picker.js.map +1 -1
  230. package/dist/services/sandbox-land.d.ts +20 -0
  231. package/dist/services/sandbox-land.d.ts.map +1 -0
  232. package/dist/services/sandbox-land.js +78 -0
  233. package/dist/services/sandbox-land.js.map +1 -0
  234. package/dist/services/sandbox-store.d.ts +10 -0
  235. package/dist/services/sandbox-store.d.ts.map +1 -0
  236. package/dist/services/sandbox-store.js +40 -0
  237. package/dist/services/sandbox-store.js.map +1 -0
  238. package/dist/services/send-policy.d.ts +39 -0
  239. package/dist/services/send-policy.d.ts.map +1 -1
  240. package/dist/services/send-policy.js +43 -0
  241. package/dist/services/send-policy.js.map +1 -1
  242. package/dist/services/session-store.d.ts.map +1 -1
  243. package/dist/services/session-store.js +16 -6
  244. package/dist/services/session-store.js.map +1 -1
  245. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  246. package/dist/setup/bot-config-editor.js +3 -1
  247. package/dist/setup/bot-config-editor.js.map +1 -1
  248. package/dist/skills/definitions.d.ts.map +1 -1
  249. package/dist/skills/definitions.js +230 -5
  250. package/dist/skills/definitions.js.map +1 -1
  251. package/dist/types.d.ts +1 -0
  252. package/dist/types.d.ts.map +1 -1
  253. package/dist/utils/bounded-map.d.ts +15 -0
  254. package/dist/utils/bounded-map.d.ts.map +1 -0
  255. package/dist/utils/bounded-map.js +29 -0
  256. package/dist/utils/bounded-map.js.map +1 -0
  257. package/dist/utils/file-lock.d.ts +7 -1
  258. package/dist/utils/file-lock.d.ts.map +1 -1
  259. package/dist/utils/file-lock.js +5 -3
  260. package/dist/utils/file-lock.js.map +1 -1
  261. package/dist/utils/timing.d.ts +30 -0
  262. package/dist/utils/timing.d.ts.map +1 -0
  263. package/dist/utils/timing.js +41 -0
  264. package/dist/utils/timing.js.map +1 -0
  265. package/dist/utils/transient-snapshot.d.ts +24 -0
  266. package/dist/utils/transient-snapshot.d.ts.map +1 -1
  267. package/dist/utils/transient-snapshot.js +26 -0
  268. package/dist/utils/transient-snapshot.js.map +1 -1
  269. package/dist/worker.js +117 -30
  270. package/dist/worker.js.map +1 -1
  271. package/dist/workflows/definition.d.ts +96 -96
  272. package/dist/workflows/events/payloads.d.ts +6 -6
  273. package/dist/workflows/events/schema.d.ts +24 -24
  274. package/dist/workflows/v3/architect.d.ts +37 -0
  275. package/dist/workflows/v3/architect.d.ts.map +1 -0
  276. package/dist/workflows/v3/architect.js +220 -0
  277. package/dist/workflows/v3/architect.js.map +1 -0
  278. package/dist/workflows/v3/bot-resolve.d.ts +21 -0
  279. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -0
  280. package/dist/workflows/v3/bot-resolve.js +47 -0
  281. package/dist/workflows/v3/bot-resolve.js.map +1 -0
  282. package/dist/workflows/v3/cli-run.d.ts +24 -0
  283. package/dist/workflows/v3/cli-run.d.ts.map +1 -0
  284. package/dist/workflows/v3/cli-run.js +265 -0
  285. package/dist/workflows/v3/cli-run.js.map +1 -0
  286. package/dist/workflows/v3/contract.d.ts +302 -0
  287. package/dist/workflows/v3/contract.d.ts.map +1 -0
  288. package/dist/workflows/v3/contract.js +91 -0
  289. package/dist/workflows/v3/contract.js.map +1 -0
  290. package/dist/workflows/v3/daemon-run.d.ts +311 -0
  291. package/dist/workflows/v3/daemon-run.d.ts.map +1 -0
  292. package/dist/workflows/v3/daemon-run.js +755 -0
  293. package/dist/workflows/v3/daemon-run.js.map +1 -0
  294. package/dist/workflows/v3/dag.d.ts +332 -0
  295. package/dist/workflows/v3/dag.d.ts.map +1 -0
  296. package/dist/workflows/v3/dag.js +1040 -0
  297. package/dist/workflows/v3/dag.js.map +1 -0
  298. package/dist/workflows/v3/ephemeral-pool.d.ts +29 -0
  299. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -0
  300. package/dist/workflows/v3/ephemeral-pool.js +331 -0
  301. package/dist/workflows/v3/ephemeral-pool.js.map +1 -0
  302. package/dist/workflows/v3/grill-state.d.ts +92 -0
  303. package/dist/workflows/v3/grill-state.d.ts.map +1 -0
  304. package/dist/workflows/v3/grill-state.js +151 -0
  305. package/dist/workflows/v3/grill-state.js.map +1 -0
  306. package/dist/workflows/v3/host.d.ts +88 -0
  307. package/dist/workflows/v3/host.d.ts.map +1 -0
  308. package/dist/workflows/v3/host.js +352 -0
  309. package/dist/workflows/v3/host.js.map +1 -0
  310. package/dist/workflows/v3/human-gate.d.ts +85 -0
  311. package/dist/workflows/v3/human-gate.d.ts.map +1 -0
  312. package/dist/workflows/v3/human-gate.js +153 -0
  313. package/dist/workflows/v3/human-gate.js.map +1 -0
  314. package/dist/workflows/v3/journal.d.ts +205 -0
  315. package/dist/workflows/v3/journal.d.ts.map +1 -0
  316. package/dist/workflows/v3/journal.js +64 -0
  317. package/dist/workflows/v3/journal.js.map +1 -0
  318. package/dist/workflows/v3/manifest.d.ts +17 -0
  319. package/dist/workflows/v3/manifest.d.ts.map +1 -0
  320. package/dist/workflows/v3/manifest.js +266 -0
  321. package/dist/workflows/v3/manifest.js.map +1 -0
  322. package/dist/workflows/v3/ops-projection.d.ts +109 -0
  323. package/dist/workflows/v3/ops-projection.d.ts.map +1 -0
  324. package/dist/workflows/v3/ops-projection.js +0 -0
  325. package/dist/workflows/v3/ops-projection.js.map +1 -0
  326. package/dist/workflows/v3/orchestrator.d.ts +168 -0
  327. package/dist/workflows/v3/orchestrator.d.ts.map +1 -0
  328. package/dist/workflows/v3/orchestrator.js +417 -0
  329. package/dist/workflows/v3/orchestrator.js.map +1 -0
  330. package/dist/workflows/v3/runtime.d.ts +193 -0
  331. package/dist/workflows/v3/runtime.d.ts.map +1 -0
  332. package/dist/workflows/v3/runtime.js +1266 -0
  333. package/dist/workflows/v3/runtime.js.map +1 -0
  334. package/dist/workflows/v3/spec.d.ts +32 -0
  335. package/dist/workflows/v3/spec.d.ts.map +1 -0
  336. package/dist/workflows/v3/spec.js +173 -0
  337. package/dist/workflows/v3/spec.js.map +1 -0
  338. package/dist/workflows/v3/state.d.ts +74 -0
  339. package/dist/workflows/v3/state.d.ts.map +1 -0
  340. package/dist/workflows/v3/state.js +353 -0
  341. package/dist/workflows/v3/state.js.map +1 -0
  342. package/package.json +11 -5
package/README.en.md CHANGED
@@ -64,7 +64,7 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
64
64
  ## Prerequisites
65
65
 
66
66
  - **Node.js** >= 20
67
- - **AI coding CLI / local agent app** installed and authenticated (`claude`, `codex`, `coco`, `cursor-agent`, `gemini`, `opencode`, `hermes`, `seed` (Seed CLI, a Claude Code fork), `pi`, `copilot` (GitHub Copilot CLI), `traex` (TRAE CLI), or `agy` (Antigravity) in PATH)
67
+ - **AI coding CLI / local agent app** installed and authenticated (`claude`, `codex`, `coco`, `cursor-agent`, `gemini`, `opencode`, `hermes`, `seed` (Seed CLI, a Claude Code fork), `pi`, `omp` (oh-my-pi, a Pi fork), `copilot` (GitHub Copilot CLI), `traex` (TRAE CLI), or `agy` (Antigravity) in PATH)
68
68
  - **CoCo requires `0.120.32+`**: type-ahead (sending a new message while a turn is still running, parked in CoCo's own message queue) relies on 0.120.32+ behavior; earlier versions may drop or serialize input while busy — upgrade before use
69
69
  - **tmux** >= 3.x (optional — auto-enabled when installed for persistent CLI sessions)
70
70
  - **CJK fonts** (only needed for screenshot rendering of Chinese text / emoji):
package/README.md CHANGED
@@ -199,7 +199,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
199
199
  ## 前置要求
200
200
 
201
201
  - **Node.js** >= 20
202
- - **AI 编程 CLI / 本地 Agent 应用** 已安装并完成认证(`claude`、`codex`、`coco`、`cursor-agent`、`gemini`、`opencode`、`hermes`、`seed`(Seed CLI,Claude Code 衍生)、`pi`、`copilot`(GitHub Copilot CLI)、`traex`(TRAE CLI)或 `agy`(Antigravity)在 PATH 中)
202
+ - **AI 编程 CLI / 本地 Agent 应用** 已安装并完成认证(`claude`、`codex`、`coco`、`cursor-agent`、`gemini`、`opencode`、`hermes`、`seed`(Seed CLI,Claude Code 衍生)、`pi`、`omp`(oh-my-pi,Pi 衍生)、`copilot`(GitHub Copilot CLI)、`traex`(TRAE CLI)或 `agy`(Antigravity)在 PATH 中)
203
203
  - **CoCo 最低版本 `0.120.32`**:type-ahead(会话忙时即可发新消息,由 CoCo 自己的消息队列接住)依赖 0.120.32+ 的行为;更早版本忙时输入可能丢失或串行,请升级后再用
204
204
  - **tmux** >= 3.x(可选,安装后自动启用会话常驻)
205
205
  - **CJK 字体**(用于截图渲染中文/emoji):
@@ -0,0 +1,119 @@
1
+ export interface SandboxPlan {
2
+ /** Host path of the per-session writable project copy (a `git clone` of the
3
+ * source). Mounted INSIDE the sandbox at `projectMount`, not at this path. */
4
+ workDir: string;
5
+ /** In-sandbox path the clone is mounted at — MUST equal the original
6
+ * workingDir the CLI was given (e.g. codex `-C <dir>`), so the CLI's existing
7
+ * args resolve to the clone. Also the child's chdir. */
8
+ projectMount: string;
9
+ /** Per-session scoped HOME — bound over the real home path so every CLI's
10
+ * hardcoded `~/.<cli>` resolves into this de-identified area. */
11
+ scopedHome: string;
12
+ /** Daemon-mediated `botmux send` outbox — the ONLY IPC surface bound in, so
13
+ * bots.json / Lark creds never enter the sandbox. */
14
+ outbox: string;
15
+ /** Extra read-only paths the toolchain lives under (node/CLI binaries via
16
+ * fnm, the botmux dist) — re-exposed AFTER the scoped-home mask because on
17
+ * this host they sit under $HOME (e.g. ~/.local/share/fnm, ~/iserver/botmux). */
18
+ toolchainRo: string[];
19
+ /** Keep network egress. File-only scope ⇒ default true (npm/pip/git work). */
20
+ net?: boolean;
21
+ }
22
+ /**
23
+ * Build the bwrap argv prefix. Final spawn becomes:
24
+ * bwrap <these args> -- <cliBin> <cliArgs...>
25
+ *
26
+ * Mount order matters: the scoped HOME is bound over the real home FIRST, then
27
+ * toolchain/work/outbox paths (some under home) are re-bound on top — bwrap
28
+ * applies binds in order, so the later, more specific mounts win.
29
+ */
30
+ export declare function buildSandboxArgs(plan: SandboxPlan): string[];
31
+ /**
32
+ * Materialise a de-identified config dir inside `scopedHome`: copy ONLY the
33
+ * auth/config files from the host's real config, never history/sessions.
34
+ * `dereference` resolves symlinks (codex's config.toml → config.toml.old) into
35
+ * real files, since the symlink target won't exist inside the masked home.
36
+ *
37
+ * Returns false if this CLI has no persistent config to scope (hermes/aiden/…).
38
+ */
39
+ export declare function seedScopedConfig(cliId: string, scopedHome: string, projectMount?: string): boolean;
40
+ /** Is file-sandbox enabled for this session? Spike gate = env; the real
41
+ * per-bot BotConfig.sandbox flag is a follow-up. */
42
+ export declare function sandboxEnabled(): boolean;
43
+ export interface SandboxSpawn {
44
+ /** Replace the CLI binary with this (always 'bwrap'). */
45
+ bin: string;
46
+ /** bwrap args + '--' + original (bin, ...args). */
47
+ args: string[];
48
+ /** Env overrides to merge into childEnv (HOME, PATH, BOTMUX_SEND_RELAY). */
49
+ env: Record<string, string>;
50
+ /** Outbox dir the daemon watcher must service. */
51
+ outbox: string;
52
+ /** Per-session project copy (for logging / landing). */
53
+ workDir: string;
54
+ /** Remove the per-session sandbox tree. */
55
+ cleanup: () => void;
56
+ }
57
+ /**
58
+ * Build the sandboxed spawn for a CLI session, or return null when sandboxing
59
+ * is off / unsupported. Creates per-session dirs under
60
+ * <dataDir>/sandboxes/<sessionId>/, clones the source project, seeds a
61
+ * de-identified config dir, and installs a `botmux` shim on PATH.
62
+ */
63
+ export declare function prepareSandbox(opts: {
64
+ /** Whether the sandbox is on for THIS session (per-bot BotConfig.sandbox OR
65
+ * the BOTMUX_SANDBOX env force). Decided by the caller — prepareSandbox does
66
+ * NOT re-read the env, so the dashboard per-bot toggle actually takes effect. */
67
+ enabled: boolean;
68
+ cliId: string;
69
+ sessionId: string;
70
+ sourceWorkingDir: string;
71
+ dataDir: string;
72
+ cliBin: string;
73
+ cliArgs: string[];
74
+ }): SandboxSpawn | null;
75
+ export interface RelayRequest {
76
+ contentFile?: unknown;
77
+ attachments?: unknown;
78
+ flags?: unknown;
79
+ }
80
+ export interface ValidatedRelay {
81
+ contentName: string;
82
+ attachmentNames: string[];
83
+ flags: string[];
84
+ }
85
+ /**
86
+ * PURE validation of an outbox relay request (schema + flag allowlist only — no
87
+ * filesystem access, so it's deterministically testable):
88
+ * - contentFile/attachments must be plain basenames (no `/`, `\`, `..`).
89
+ * - only allowlisted presentation flags pass; any other flag → reject (this
90
+ * rejects raw `--content-file`/`--session-id`/path flags etc.).
91
+ * The TOCTOU-safe filesystem read is handled separately by materializeOutboxFile,
92
+ * NOT here — this function deliberately resolves no paths.
93
+ */
94
+ export declare function validateRelayRequest(req: RelayRequest): {
95
+ ok: true;
96
+ value: ValidatedRelay;
97
+ } | {
98
+ ok: false;
99
+ error: string;
100
+ };
101
+ /**
102
+ * TOCTOU-safe copy of an outbox file (`outbox/<name>`, name already validated as
103
+ * a plain basename) into a host-private `dest`. Opens with O_NOFOLLOW so a
104
+ * symlink swapped in by the sandbox AFTER validation is rejected at open time;
105
+ * reads from the fd (not the path), so the inode can't be swapped under us.
106
+ * Returns false (reject) on symlink / non-regular / any error.
107
+ */
108
+ export declare function materializeOutboxFile(outbox: string, name: string, dest: string): boolean;
109
+ /**
110
+ * Daemon/worker-side outbox watcher. The sandboxed `botmux send` (relay mode)
111
+ * drops `<id>.req.json`; we validate (validateRelayRequest) and then MATERIALIZE
112
+ * the content/attachments into a host-private staging dir that is NOT bound into
113
+ * the sandbox — closing the TOCTOU window where the sandbox could swap an outbox
114
+ * file for a symlink between check and the host-side read. We then re-exec THIS
115
+ * build's `send` OUTSIDE the sandbox (full creds) against the private copies,
116
+ * with the session-id FORCED. This keeps every Lark credential out of the sandbox.
117
+ */
118
+ export declare function startOutboxWatcher(outbox: string, baseEnv: NodeJS.ProcessEnv, sessionId: string): () => void;
119
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/sandbox.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B;mFAC+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB;;6DAEyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB;sEACkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB;0DACsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf;;sFAEkF;IAClF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAMD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAmB5D;AA2CD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CA0BlG;AA4ED;qDACqD;AACrD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAoDD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC;;sFAEkF;IAClF,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,YAAY,GAAG,IAAI,CA2FtB;AAOD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD,MAAM,WAAW,cAAc;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;CAAE;AAEpG;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAwB1H;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAkE5G"}