botmux 3.16.1 → 3.17.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 (595) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +84 -1
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +202 -19
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/backend/sandbox.d.ts +8 -0
  7. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  8. package/dist/adapters/backend/sandbox.js +15 -0
  9. package/dist/adapters/backend/sandbox.js.map +1 -1
  10. package/dist/adapters/backend/tmux-backend.d.ts +61 -7
  11. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-backend.js +80 -9
  13. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  14. package/dist/adapters/backend/tmux-pipe-backend.d.ts +62 -4
  15. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  16. package/dist/adapters/backend/tmux-pipe-backend.js +240 -27
  17. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  18. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  19. package/dist/adapters/cli/claude-code.js +4 -2
  20. package/dist/adapters/cli/claude-code.js.map +1 -1
  21. package/dist/adapters/cli/coco.d.ts.map +1 -1
  22. package/dist/adapters/cli/coco.js +27 -0
  23. package/dist/adapters/cli/coco.js.map +1 -1
  24. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  25. package/dist/adapters/cli/codex-app.js +28 -0
  26. package/dist/adapters/cli/codex-app.js.map +1 -1
  27. package/dist/adapters/cli/codex.d.ts.map +1 -1
  28. package/dist/adapters/cli/codex.js +51 -23
  29. package/dist/adapters/cli/codex.js.map +1 -1
  30. package/dist/adapters/cli/dsh-tui.d.ts +24 -0
  31. package/dist/adapters/cli/dsh-tui.d.ts.map +1 -0
  32. package/dist/adapters/cli/dsh-tui.js +99 -0
  33. package/dist/adapters/cli/dsh-tui.js.map +1 -0
  34. package/dist/adapters/cli/dsh.d.ts.map +1 -1
  35. package/dist/adapters/cli/dsh.js +15 -9
  36. package/dist/adapters/cli/dsh.js.map +1 -1
  37. package/dist/adapters/cli/fs-policy.d.ts +98 -1
  38. package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
  39. package/dist/adapters/cli/fs-policy.js +182 -7
  40. package/dist/adapters/cli/fs-policy.js.map +1 -1
  41. package/dist/adapters/cli/grok.js +16 -18
  42. package/dist/adapters/cli/grok.js.map +1 -1
  43. package/dist/adapters/cli/model-catalog-json.d.ts +17 -0
  44. package/dist/adapters/cli/model-catalog-json.d.ts.map +1 -0
  45. package/dist/adapters/cli/model-catalog-json.js +43 -0
  46. package/dist/adapters/cli/model-catalog-json.js.map +1 -0
  47. package/dist/adapters/cli/oh-my-pi.d.ts +2 -0
  48. package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
  49. package/dist/adapters/cli/oh-my-pi.js +45 -13
  50. package/dist/adapters/cli/oh-my-pi.js.map +1 -1
  51. package/dist/adapters/cli/opencode.js +1 -1
  52. package/dist/adapters/cli/opencode.js.map +1 -1
  53. package/dist/adapters/cli/registry.d.ts +2 -1
  54. package/dist/adapters/cli/registry.d.ts.map +1 -1
  55. package/dist/adapters/cli/registry.js +6 -1
  56. package/dist/adapters/cli/registry.js.map +1 -1
  57. package/dist/adapters/cli/relay.d.ts.map +1 -1
  58. package/dist/adapters/cli/relay.js +7 -0
  59. package/dist/adapters/cli/relay.js.map +1 -1
  60. package/dist/adapters/cli/seed.d.ts.map +1 -1
  61. package/dist/adapters/cli/seed.js +6 -0
  62. package/dist/adapters/cli/seed.js.map +1 -1
  63. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  64. package/dist/adapters/cli/shared-hints.js +20 -14
  65. package/dist/adapters/cli/shared-hints.js.map +1 -1
  66. package/dist/adapters/cli/traex.d.ts +4 -0
  67. package/dist/adapters/cli/traex.d.ts.map +1 -1
  68. package/dist/adapters/cli/traex.js +153 -0
  69. package/dist/adapters/cli/traex.js.map +1 -1
  70. package/dist/adapters/cli/types.d.ts +42 -1
  71. package/dist/adapters/cli/types.d.ts.map +1 -1
  72. package/dist/autostart.d.ts +6 -0
  73. package/dist/autostart.d.ts.map +1 -1
  74. package/dist/autostart.js +21 -1
  75. package/dist/autostart.js.map +1 -1
  76. package/dist/bot-registry.d.ts +27 -0
  77. package/dist/bot-registry.d.ts.map +1 -1
  78. package/dist/bot-registry.js +62 -2
  79. package/dist/bot-registry.js.map +1 -1
  80. package/dist/cli/vc-agent.d.ts.map +1 -1
  81. package/dist/cli/vc-agent.js +21 -3
  82. package/dist/cli/vc-agent.js.map +1 -1
  83. package/dist/cli.d.ts.map +1 -1
  84. package/dist/cli.js +92 -1
  85. package/dist/cli.js.map +1 -1
  86. package/dist/codex-app-runner.js +28 -0
  87. package/dist/codex-app-runner.js.map +1 -1
  88. package/dist/core/bot-steer-directive.d.ts +25 -0
  89. package/dist/core/bot-steer-directive.d.ts.map +1 -0
  90. package/dist/core/bot-steer-directive.js +47 -0
  91. package/dist/core/bot-steer-directive.js.map +1 -0
  92. package/dist/core/command-handler.d.ts.map +1 -1
  93. package/dist/core/command-handler.js +102 -18
  94. package/dist/core/command-handler.js.map +1 -1
  95. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  96. package/dist/core/dashboard-ipc-server.js +53 -13
  97. package/dist/core/dashboard-ipc-server.js.map +1 -1
  98. package/dist/core/dashboard-rows.d.ts +3 -0
  99. package/dist/core/dashboard-rows.d.ts.map +1 -1
  100. package/dist/core/dashboard-rows.js +26 -5
  101. package/dist/core/dashboard-rows.js.map +1 -1
  102. package/dist/core/dispatch.d.ts.map +1 -1
  103. package/dist/core/dispatch.js +5 -4
  104. package/dist/core/dispatch.js.map +1 -1
  105. package/dist/core/existing-app-server.d.ts +22 -0
  106. package/dist/core/existing-app-server.d.ts.map +1 -0
  107. package/dist/core/existing-app-server.js +85 -0
  108. package/dist/core/existing-app-server.js.map +1 -0
  109. package/dist/core/native-topic-id.d.ts +9 -0
  110. package/dist/core/native-topic-id.d.ts.map +1 -0
  111. package/dist/core/native-topic-id.js +14 -0
  112. package/dist/core/native-topic-id.js.map +1 -0
  113. package/dist/core/per-bot-env.d.ts.map +1 -1
  114. package/dist/core/per-bot-env.js +10 -0
  115. package/dist/core/per-bot-env.js.map +1 -1
  116. package/dist/core/session-activity.d.ts +11 -0
  117. package/dist/core/session-activity.d.ts.map +1 -1
  118. package/dist/core/session-activity.js +23 -0
  119. package/dist/core/session-activity.js.map +1 -1
  120. package/dist/core/session-group-birth.d.ts.map +1 -1
  121. package/dist/core/session-group-birth.js +23 -8
  122. package/dist/core/session-group-birth.js.map +1 -1
  123. package/dist/core/session-manager.d.ts +1 -4
  124. package/dist/core/session-manager.d.ts.map +1 -1
  125. package/dist/core/session-manager.js +16 -20
  126. package/dist/core/session-manager.js.map +1 -1
  127. package/dist/core/shared-adopt.d.ts +20 -0
  128. package/dist/core/shared-adopt.d.ts.map +1 -0
  129. package/dist/core/shared-adopt.js +26 -0
  130. package/dist/core/shared-adopt.js.map +1 -0
  131. package/dist/core/skills/customize-command.d.ts +7 -0
  132. package/dist/core/skills/customize-command.d.ts.map +1 -0
  133. package/dist/core/skills/customize-command.js +303 -0
  134. package/dist/core/skills/customize-command.js.map +1 -0
  135. package/dist/core/terminal-write-auth.d.ts +15 -0
  136. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  137. package/dist/core/terminal-write-auth.js +15 -0
  138. package/dist/core/terminal-write-auth.js.map +1 -1
  139. package/dist/core/terminal-write-frame.d.ts +30 -0
  140. package/dist/core/terminal-write-frame.d.ts.map +1 -0
  141. package/dist/core/terminal-write-frame.js +44 -0
  142. package/dist/core/terminal-write-frame.js.map +1 -0
  143. package/dist/core/types.d.ts +14 -4
  144. package/dist/core/types.d.ts.map +1 -1
  145. package/dist/core/types.js +6 -8
  146. package/dist/core/types.js.map +1 -1
  147. package/dist/core/worker-pool.d.ts +21 -4
  148. package/dist/core/worker-pool.d.ts.map +1 -1
  149. package/dist/core/worker-pool.js +415 -100
  150. package/dist/core/worker-pool.js.map +1 -1
  151. package/dist/core/worker-startup-retry.d.ts +52 -0
  152. package/dist/core/worker-startup-retry.d.ts.map +1 -0
  153. package/dist/core/worker-startup-retry.js +68 -0
  154. package/dist/core/worker-startup-retry.js.map +1 -0
  155. package/dist/daemon.d.ts +9 -8
  156. package/dist/daemon.d.ts.map +1 -1
  157. package/dist/daemon.js +467 -171
  158. package/dist/daemon.js.map +1 -1
  159. package/dist/dashboard/autostart-api.d.ts +26 -0
  160. package/dist/dashboard/autostart-api.d.ts.map +1 -0
  161. package/dist/dashboard/autostart-api.js +88 -0
  162. package/dist/dashboard/autostart-api.js.map +1 -0
  163. package/dist/dashboard/bot-payload.d.ts +5 -0
  164. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  165. package/dist/dashboard/bot-payload.js +2 -0
  166. package/dist/dashboard/bot-payload.js.map +1 -1
  167. package/dist/dashboard/control-csrf.d.ts +29 -1
  168. package/dist/dashboard/control-csrf.d.ts.map +1 -1
  169. package/dist/dashboard/control-csrf.js +45 -11
  170. package/dist/dashboard/control-csrf.js.map +1 -1
  171. package/dist/dashboard/customization-api.d.ts +23 -0
  172. package/dist/dashboard/customization-api.d.ts.map +1 -0
  173. package/dist/dashboard/customization-api.js +198 -0
  174. package/dist/dashboard/customization-api.js.map +1 -0
  175. package/dist/dashboard/debug-terminal.d.ts +13 -1
  176. package/dist/dashboard/debug-terminal.d.ts.map +1 -1
  177. package/dist/dashboard/debug-terminal.js +18 -4
  178. package/dist/dashboard/debug-terminal.js.map +1 -1
  179. package/dist/dashboard/settings-write-applier.d.ts +0 -23
  180. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  181. package/dist/dashboard/settings-write-applier.js +7 -28
  182. package/dist/dashboard/settings-write-applier.js.map +1 -1
  183. package/dist/dashboard/terminal-control-route.d.ts +32 -0
  184. package/dist/dashboard/terminal-control-route.d.ts.map +1 -0
  185. package/dist/dashboard/terminal-control-route.js +70 -0
  186. package/dist/dashboard/terminal-control-route.js.map +1 -0
  187. package/dist/dashboard/terminal-control.d.ts +64 -13
  188. package/dist/dashboard/terminal-control.d.ts.map +1 -1
  189. package/dist/dashboard/terminal-control.js +77 -14
  190. package/dist/dashboard/terminal-control.js.map +1 -1
  191. package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -1
  192. package/dist/dashboard/terminal-front-proxy.js +22 -8
  193. package/dist/dashboard/terminal-front-proxy.js.map +1 -1
  194. package/dist/dashboard/vc-consumer-profiles-api.d.ts +69 -18
  195. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
  196. package/dist/dashboard/vc-consumer-profiles-api.js +149 -29
  197. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
  198. package/dist/dashboard/web/agent-workbench-api.d.ts +34 -2
  199. package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -1
  200. package/dist/dashboard/web/agent-workbench-api.js +39 -4
  201. package/dist/dashboard/web/agent-workbench-api.js.map +1 -1
  202. package/dist/dashboard/web/agent-workbench-appearance.d.ts +6 -3
  203. package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -1
  204. package/dist/dashboard/web/agent-workbench-appearance.js +7 -4
  205. package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -1
  206. package/dist/dashboard/web/agent-workbench-model.d.ts +2 -0
  207. package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -1
  208. package/dist/dashboard/web/agent-workbench-model.js.map +1 -1
  209. package/dist/dashboard/web/agent-workbench-page.js +2 -2
  210. package/dist/dashboard/web/agent-workbench-page.js.map +1 -1
  211. package/dist/dashboard/web/agent-workbench-panes.d.ts +59 -4
  212. package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -1
  213. package/dist/dashboard/web/agent-workbench-panes.js +493 -85
  214. package/dist/dashboard/web/agent-workbench-panes.js.map +1 -1
  215. package/dist/dashboard/web/agent-workbench-session-list.d.ts +11 -7
  216. package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -1
  217. package/dist/dashboard/web/agent-workbench-session-list.js +24 -31
  218. package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -1
  219. package/dist/dashboard/web/agent-workbench-terminal-control.d.ts +198 -0
  220. package/dist/dashboard/web/agent-workbench-terminal-control.d.ts.map +1 -0
  221. package/dist/dashboard/web/agent-workbench-terminal-control.js +292 -0
  222. package/dist/dashboard/web/agent-workbench-terminal-control.js.map +1 -0
  223. package/dist/dashboard/web/agent-workbench-view.d.ts +3 -2
  224. package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -1
  225. package/dist/dashboard/web/agent-workbench-view.js +69 -50
  226. package/dist/dashboard/web/agent-workbench-view.js.map +1 -1
  227. package/dist/dashboard/web/app.d.ts.map +1 -1
  228. package/dist/dashboard/web/app.js +58 -7
  229. package/dist/dashboard/web/app.js.map +1 -1
  230. package/dist/dashboard/web/bot-defaults-page.d.ts +24 -0
  231. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  232. package/dist/dashboard/web/bot-defaults-page.js +191 -16
  233. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  234. package/dist/dashboard/web/bot-defaults.d.ts +17 -0
  235. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  236. package/dist/dashboard/web/bot-defaults.js +51 -2
  237. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  238. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  239. package/dist/dashboard/web/bot-onboarding.js +32 -8
  240. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  241. package/dist/dashboard/web/confirm-modal.d.ts +35 -0
  242. package/dist/dashboard/web/confirm-modal.d.ts.map +1 -0
  243. package/dist/dashboard/web/confirm-modal.js +111 -0
  244. package/dist/dashboard/web/confirm-modal.js.map +1 -0
  245. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  246. package/dist/dashboard/web/connectors-page.js +2 -1
  247. package/dist/dashboard/web/connectors-page.js.map +1 -1
  248. package/dist/dashboard/web/customization-page.d.ts +3 -0
  249. package/dist/dashboard/web/customization-page.d.ts.map +1 -0
  250. package/dist/dashboard/web/customization-page.js +315 -0
  251. package/dist/dashboard/web/customization-page.js.map +1 -0
  252. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  253. package/dist/dashboard/web/dashboard-routes.js +1 -0
  254. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  255. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  256. package/dist/dashboard/web/groups-page.js +11 -9
  257. package/dist/dashboard/web/groups-page.js.map +1 -1
  258. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  259. package/dist/dashboard/web/i18n.js +226 -42
  260. package/dist/dashboard/web/i18n.js.map +1 -1
  261. package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
  262. package/dist/dashboard/web/monitor-room.js +3 -2
  263. package/dist/dashboard/web/monitor-room.js.map +1 -1
  264. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  265. package/dist/dashboard/web/overview-page.js +98 -63
  266. package/dist/dashboard/web/overview-page.js.map +1 -1
  267. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  268. package/dist/dashboard/web/roles-page.js +4 -3
  269. package/dist/dashboard/web/roles-page.js.map +1 -1
  270. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  271. package/dist/dashboard/web/schedules-page.js +165 -18
  272. package/dist/dashboard/web/schedules-page.js.map +1 -1
  273. package/dist/dashboard/web/sessions-kanban.d.ts +2 -0
  274. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
  275. package/dist/dashboard/web/sessions-kanban.js +142 -24
  276. package/dist/dashboard/web/sessions-kanban.js.map +1 -1
  277. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  278. package/dist/dashboard/web/sessions-page.js +177 -94
  279. package/dist/dashboard/web/sessions-page.js.map +1 -1
  280. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  281. package/dist/dashboard/web/sessions.js +5 -4
  282. package/dist/dashboard/web/sessions.js.map +1 -1
  283. package/dist/dashboard/web/settings-page.d.ts +0 -8
  284. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  285. package/dist/dashboard/web/settings-page.js +185 -65
  286. package/dist/dashboard/web/settings-page.js.map +1 -1
  287. package/dist/dashboard/web/skills/skill-library-tab.d.ts +2 -0
  288. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -1
  289. package/dist/dashboard/web/skills/skill-library-tab.js +15 -1
  290. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -1
  291. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  292. package/dist/dashboard/web/skills-page.js +5 -4
  293. package/dist/dashboard/web/skills-page.js.map +1 -1
  294. package/dist/dashboard/web/store.d.ts +5 -0
  295. package/dist/dashboard/web/store.d.ts.map +1 -1
  296. package/dist/dashboard/web/store.js +4 -0
  297. package/dist/dashboard/web/store.js.map +1 -1
  298. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
  299. package/dist/dashboard/web/team-federation-page.js +3 -2
  300. package/dist/dashboard/web/team-federation-page.js.map +1 -1
  301. package/dist/dashboard/web/toast.d.ts +15 -0
  302. package/dist/dashboard/web/toast.d.ts.map +1 -0
  303. package/dist/dashboard/web/toast.js +70 -0
  304. package/dist/dashboard/web/toast.js.map +1 -0
  305. package/dist/dashboard/web/v3-components.d.ts.map +1 -1
  306. package/dist/dashboard/web/v3-components.js +2 -1
  307. package/dist/dashboard/web/v3-components.js.map +1 -1
  308. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +10 -12
  309. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
  310. package/dist/dashboard/web/vc-consumer-profiles-section.js +219 -200
  311. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
  312. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
  313. package/dist/dashboard/web/whiteboards-page.js +2 -1
  314. package/dist/dashboard/web/whiteboards-page.js.map +1 -1
  315. package/dist/dashboard-web/app.js +1 -1
  316. package/dist/dashboard-web/chunks/agent-workbench-dock-page-LZSUOCEQ.js +1 -0
  317. package/dist/dashboard-web/chunks/agent-workbench-page-YONDRJU7.js +1 -0
  318. package/dist/dashboard-web/chunks/bot-defaults-page-X7LV6373.js +1 -0
  319. package/dist/dashboard-web/chunks/chunk-2PVRDXEL.js +1 -0
  320. package/dist/dashboard-web/chunks/chunk-53JUKBU2.js +10 -0
  321. package/dist/dashboard-web/chunks/{chunk-5CJMHTT4.js → chunk-5QX4OYOR.js} +1 -1
  322. package/dist/dashboard-web/chunks/{chunk-NACP7BMR.js → chunk-5VRVJFQR.js} +1 -1
  323. package/dist/dashboard-web/chunks/{chunk-FDZ7WOBW.js → chunk-6ROOZWYV.js} +1 -1
  324. package/dist/dashboard-web/chunks/{chunk-F6KNPF4R.js → chunk-CK22743G.js} +15 -19
  325. package/dist/dashboard-web/chunks/chunk-CVNIMUPY.js +25 -0
  326. package/dist/dashboard-web/chunks/chunk-GJC2TMWS.js +2 -0
  327. package/dist/dashboard-web/chunks/chunk-OT6L6G7R.js +1 -0
  328. package/dist/dashboard-web/chunks/chunk-QITAMHW6.js +1 -0
  329. package/dist/dashboard-web/chunks/chunk-RHVFZC5Z.js +1 -0
  330. package/dist/dashboard-web/chunks/chunk-SOBMN2VY.js +1 -0
  331. package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
  332. package/dist/dashboard-web/chunks/chunk-XVIXNQGC.js +44 -0
  333. package/dist/dashboard-web/chunks/chunk-YUJF34ME.js +1 -0
  334. package/dist/dashboard-web/chunks/connectors-page-LB2HEJ7F.js +1 -0
  335. package/dist/dashboard-web/chunks/customization-page-4GXBYLG6.js +105 -0
  336. package/dist/dashboard-web/chunks/feedback-page-IZQ7VLDG.js +1 -0
  337. package/dist/dashboard-web/chunks/groups-page-4WCP5OEV.js +8 -0
  338. package/dist/dashboard-web/chunks/{insights-page-HJFDYR5N.js → insights-page-TXQHIPQL.js} +1 -1
  339. package/dist/dashboard-web/chunks/{monitor-room-V7PCP47V.js → monitor-room-VBRVWXCM.js} +8 -8
  340. package/dist/dashboard-web/chunks/monitoring-page-QDDZWERE.js +2 -0
  341. package/dist/dashboard-web/chunks/office-page-PENFNYPG.js +1 -0
  342. package/dist/dashboard-web/chunks/overview-page-BZQDP6MP.js +1 -0
  343. package/dist/dashboard-web/chunks/plugin-page-JX4GSWZS.js +1 -0
  344. package/dist/dashboard-web/chunks/roles-page-VPNINZNK.js +1 -0
  345. package/dist/dashboard-web/chunks/schedules-page-BITO6HEA.js +1 -0
  346. package/dist/dashboard-web/chunks/sessions-page-ZKCOVTD2.js +8 -0
  347. package/dist/dashboard-web/chunks/settings-page-UT6JDTS6.js +2 -0
  348. package/dist/dashboard-web/chunks/skills-page-GULXVAJY.js +4 -0
  349. package/dist/dashboard-web/chunks/team-federation-page-CUUJWGEG.js +1 -0
  350. package/dist/dashboard-web/chunks/v3-page-5WVJ5AUR.js +94 -0
  351. package/dist/dashboard-web/chunks/whiteboards-page-FZ2CME4H.js +1 -0
  352. package/dist/dashboard-web/design-tokens.css +236 -0
  353. package/dist/dashboard-web/index.html +1 -0
  354. package/dist/dashboard-web/style.css +1930 -114
  355. package/dist/dashboard.js +360 -279
  356. package/dist/dashboard.js.map +1 -1
  357. package/dist/desktop/renderer/app.js +6 -0
  358. package/dist/desktop/renderer/app.js.map +1 -1
  359. package/dist/dsh-runner.js +139 -17
  360. package/dist/dsh-runner.js.map +1 -1
  361. package/dist/global-config.d.ts +33 -2
  362. package/dist/global-config.d.ts.map +1 -1
  363. package/dist/global-config.js +62 -0
  364. package/dist/global-config.js.map +1 -1
  365. package/dist/i18n/en.d.ts.map +1 -1
  366. package/dist/i18n/en.js +12 -4
  367. package/dist/i18n/en.js.map +1 -1
  368. package/dist/i18n/index.d.ts +27 -3
  369. package/dist/i18n/index.d.ts.map +1 -1
  370. package/dist/i18n/index.js +33 -4
  371. package/dist/i18n/index.js.map +1 -1
  372. package/dist/i18n/zh.d.ts.map +1 -1
  373. package/dist/i18n/zh.js +12 -4
  374. package/dist/i18n/zh.js.map +1 -1
  375. package/dist/im/lark/card-builder.d.ts +2 -0
  376. package/dist/im/lark/card-builder.d.ts.map +1 -1
  377. package/dist/im/lark/card-builder.js +7 -4
  378. package/dist/im/lark/card-builder.js.map +1 -1
  379. package/dist/im/lark/card-handler.d.ts.map +1 -1
  380. package/dist/im/lark/card-handler.js +70 -16
  381. package/dist/im/lark/card-handler.js.map +1 -1
  382. package/dist/im/lark/event-dispatcher.d.ts +38 -3
  383. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  384. package/dist/im/lark/event-dispatcher.js +163 -13
  385. package/dist/im/lark/event-dispatcher.js.map +1 -1
  386. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
  387. package/dist/im/lark/v3-blocked-card-handler.js +2 -1
  388. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
  389. package/dist/im/lark/v3-blocked-card.d.ts +1 -1
  390. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
  391. package/dist/im/lark/v3-blocked-card.js +14 -0
  392. package/dist/im/lark/v3-blocked-card.js.map +1 -1
  393. package/dist/index-core-only.js +2 -0
  394. package/dist/index-core-only.js.map +1 -1
  395. package/dist/index-daemon.js +3 -0
  396. package/dist/index-daemon.js.map +1 -1
  397. package/dist/platform/binding.d.ts +11 -1
  398. package/dist/platform/binding.d.ts.map +1 -1
  399. package/dist/platform/binding.js +3 -28
  400. package/dist/platform/binding.js.map +1 -1
  401. package/dist/services/codex-app-runner-protocol.d.ts +5 -0
  402. package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
  403. package/dist/services/codex-app-runner-protocol.js +5 -0
  404. package/dist/services/codex-app-runner-protocol.js.map +1 -1
  405. package/dist/services/customization-store.d.ts +93 -0
  406. package/dist/services/customization-store.d.ts.map +1 -0
  407. package/dist/services/customization-store.js +542 -0
  408. package/dist/services/customization-store.js.map +1 -0
  409. package/dist/services/file-bridge-path.d.ts.map +1 -1
  410. package/dist/services/file-bridge-path.js +3 -0
  411. package/dist/services/file-bridge-path.js.map +1 -1
  412. package/dist/services/grok-transcript.d.ts.map +1 -1
  413. package/dist/services/grok-transcript.js +44 -9
  414. package/dist/services/grok-transcript.js.map +1 -1
  415. package/dist/services/local-cli-opener.d.ts.map +1 -1
  416. package/dist/services/local-cli-opener.js +12 -3
  417. package/dist/services/local-cli-opener.js.map +1 -1
  418. package/dist/services/model-catalog.d.ts +54 -0
  419. package/dist/services/model-catalog.d.ts.map +1 -0
  420. package/dist/services/model-catalog.js +147 -0
  421. package/dist/services/model-catalog.js.map +1 -0
  422. package/dist/services/omp-transcript.d.ts +27 -0
  423. package/dist/services/omp-transcript.d.ts.map +1 -0
  424. package/dist/services/omp-transcript.js +214 -0
  425. package/dist/services/omp-transcript.js.map +1 -0
  426. package/dist/services/platform-team-store.d.ts +16 -8
  427. package/dist/services/platform-team-store.d.ts.map +1 -1
  428. package/dist/services/platform-team-store.js +17 -10
  429. package/dist/services/platform-team-store.js.map +1 -1
  430. package/dist/services/project-scanner.d.ts.map +1 -1
  431. package/dist/services/project-scanner.js +13 -8
  432. package/dist/services/project-scanner.js.map +1 -1
  433. package/dist/services/resumable-session-discovery.d.ts.map +1 -1
  434. package/dist/services/resumable-session-discovery.js +117 -35
  435. package/dist/services/resumable-session-discovery.js.map +1 -1
  436. package/dist/services/structured-bridge-clis.d.ts +5 -3
  437. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  438. package/dist/services/structured-bridge-clis.js +5 -1
  439. package/dist/services/structured-bridge-clis.js.map +1 -1
  440. package/dist/services/vc-meeting-action-gate.d.ts.map +1 -1
  441. package/dist/services/vc-meeting-action-gate.js +15 -4
  442. package/dist/services/vc-meeting-action-gate.js.map +1 -1
  443. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +46 -66
  444. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
  445. package/dist/services/vc-meeting-consumer-profile-bootstrap.js +33 -292
  446. package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
  447. package/dist/services/vc-meeting-consumer-profile-templates.js +3 -3
  448. package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -1
  449. package/dist/services/vc-meeting-delivery-store.d.ts +18 -0
  450. package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
  451. package/dist/services/vc-meeting-delivery-store.js +55 -0
  452. package/dist/services/vc-meeting-delivery-store.js.map +1 -1
  453. package/dist/services/vc-meeting-send-policy.d.ts +21 -1
  454. package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
  455. package/dist/services/vc-meeting-send-policy.js +30 -2
  456. package/dist/services/vc-meeting-send-policy.js.map +1 -1
  457. package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts +78 -0
  458. package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts.map +1 -0
  459. package/dist/services/vc-meeting-shared-consumer-catalog-store.js +227 -0
  460. package/dist/services/vc-meeting-shared-consumer-catalog-store.js.map +1 -0
  461. package/dist/services/vc-meeting-shared-consumer-catalog.d.ts +53 -0
  462. package/dist/services/vc-meeting-shared-consumer-catalog.d.ts.map +1 -0
  463. package/dist/services/vc-meeting-shared-consumer-catalog.js +161 -0
  464. package/dist/services/vc-meeting-shared-consumer-catalog.js.map +1 -0
  465. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  466. package/dist/setup/bot-config-editor.js +1 -0
  467. package/dist/setup/bot-config-editor.js.map +1 -1
  468. package/dist/setup/open-platform-automation.d.ts +20 -0
  469. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  470. package/dist/setup/open-platform-automation.js +27 -0
  471. package/dist/setup/open-platform-automation.js.map +1 -1
  472. package/dist/skills/customization-bundle.d.ts +83 -0
  473. package/dist/skills/customization-bundle.d.ts.map +1 -0
  474. package/dist/skills/customization-bundle.js +214 -0
  475. package/dist/skills/customization-bundle.js.map +1 -0
  476. package/dist/skills/definitions.d.ts.map +1 -1
  477. package/dist/skills/definitions.js +10 -3
  478. package/dist/skills/definitions.js.map +1 -1
  479. package/dist/skills/effective-builtins.d.ts +38 -0
  480. package/dist/skills/effective-builtins.d.ts.map +1 -0
  481. package/dist/skills/effective-builtins.js +96 -0
  482. package/dist/skills/effective-builtins.js.map +1 -0
  483. package/dist/skills/injection-mode.d.ts +4 -1
  484. package/dist/skills/injection-mode.d.ts.map +1 -1
  485. package/dist/skills/injection-mode.js +11 -3
  486. package/dist/skills/injection-mode.js.map +1 -1
  487. package/dist/skills/installer.d.ts.map +1 -1
  488. package/dist/skills/installer.js +24 -1
  489. package/dist/skills/installer.js.map +1 -1
  490. package/dist/skills/prompt-fragments.d.ts +58 -0
  491. package/dist/skills/prompt-fragments.d.ts.map +1 -0
  492. package/dist/skills/prompt-fragments.js +88 -0
  493. package/dist/skills/prompt-fragments.js.map +1 -0
  494. package/dist/types.d.ts +51 -0
  495. package/dist/types.d.ts.map +1 -1
  496. package/dist/utils/cli-usage-limit.d.ts +50 -0
  497. package/dist/utils/cli-usage-limit.d.ts.map +1 -1
  498. package/dist/utils/cli-usage-limit.js +43 -0
  499. package/dist/utils/cli-usage-limit.js.map +1 -1
  500. package/dist/utils/idle-detector.d.ts +12 -0
  501. package/dist/utils/idle-detector.d.ts.map +1 -1
  502. package/dist/utils/idle-detector.js +88 -2
  503. package/dist/utils/idle-detector.js.map +1 -1
  504. package/dist/utils/stuck-detector.d.ts +5 -0
  505. package/dist/utils/stuck-detector.d.ts.map +1 -1
  506. package/dist/utils/stuck-detector.js +41 -0
  507. package/dist/utils/stuck-detector.js.map +1 -1
  508. package/dist/utils/usage-limit-tracker.d.ts +46 -0
  509. package/dist/utils/usage-limit-tracker.d.ts.map +1 -0
  510. package/dist/utils/usage-limit-tracker.js +91 -0
  511. package/dist/utils/usage-limit-tracker.js.map +1 -0
  512. package/dist/utils/user-token.js +1 -1
  513. package/dist/utils/user-token.js.map +1 -1
  514. package/dist/worker.js +542 -106
  515. package/dist/worker.js.map +1 -1
  516. package/dist/workflows/definition.d.ts +14 -14
  517. package/dist/workflows/events/payloads.d.ts +12 -12
  518. package/dist/workflows/events/schema.d.ts +164 -164
  519. package/dist/workflows/migration/v2-to-v3.js +1 -1
  520. package/dist/workflows/migration/v2-to-v3.js.map +1 -1
  521. package/dist/workflows/v3/architect.d.ts.map +1 -1
  522. package/dist/workflows/v3/architect.js +11 -5
  523. package/dist/workflows/v3/architect.js.map +1 -1
  524. package/dist/workflows/v3/artifact-contract-declarations.d.ts +22 -0
  525. package/dist/workflows/v3/artifact-contract-declarations.d.ts.map +1 -0
  526. package/dist/workflows/v3/artifact-contract-declarations.js +95 -0
  527. package/dist/workflows/v3/artifact-contract-declarations.js.map +1 -0
  528. package/dist/workflows/v3/contract.d.ts +1 -0
  529. package/dist/workflows/v3/contract.d.ts.map +1 -1
  530. package/dist/workflows/v3/contract.js.map +1 -1
  531. package/dist/workflows/v3/daemon-run.d.ts +2 -2
  532. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  533. package/dist/workflows/v3/daemon-run.js +4 -0
  534. package/dist/workflows/v3/daemon-run.js.map +1 -1
  535. package/dist/workflows/v3/dag.d.ts +7 -0
  536. package/dist/workflows/v3/dag.d.ts.map +1 -1
  537. package/dist/workflows/v3/dag.js +69 -8
  538. package/dist/workflows/v3/dag.js.map +1 -1
  539. package/dist/workflows/v3/ephemeral-pool.js +1 -1
  540. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  541. package/dist/workflows/v3/event-contract.d.ts +3 -1
  542. package/dist/workflows/v3/event-contract.d.ts.map +1 -1
  543. package/dist/workflows/v3/host.d.ts.map +1 -1
  544. package/dist/workflows/v3/host.js +5 -1
  545. package/dist/workflows/v3/host.js.map +1 -1
  546. package/dist/workflows/v3/journal.d.ts +1 -1
  547. package/dist/workflows/v3/journal.d.ts.map +1 -1
  548. package/dist/workflows/v3/journal.js.map +1 -1
  549. package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
  550. package/dist/workflows/v3/library-materialize.js +9 -1
  551. package/dist/workflows/v3/library-materialize.js.map +1 -1
  552. package/dist/workflows/v3/library-schema.d.ts +3 -1
  553. package/dist/workflows/v3/library-schema.d.ts.map +1 -1
  554. package/dist/workflows/v3/library-schema.js +20 -4
  555. package/dist/workflows/v3/library-schema.js.map +1 -1
  556. package/dist/workflows/v3/library-store.d.ts.map +1 -1
  557. package/dist/workflows/v3/library-store.js +15 -3
  558. package/dist/workflows/v3/library-store.js.map +1 -1
  559. package/dist/workflows/v3/run-envelope.d.ts +16 -16
  560. package/dist/workflows/v3/shared-node-runtime.d.ts +2 -1
  561. package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -1
  562. package/dist/workflows/v3/shared-node-runtime.js +48 -7
  563. package/dist/workflows/v3/shared-node-runtime.js.map +1 -1
  564. package/package.json +2 -1
  565. package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +0 -1
  566. package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +0 -1
  567. package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +0 -10
  568. package/dist/dashboard-web/chunks/chunk-22WIADUT.js +0 -2
  569. package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +0 -1
  570. package/dist/dashboard-web/chunks/chunk-2W6SCN3M.js +0 -1
  571. package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +0 -1
  572. package/dist/dashboard-web/chunks/chunk-5THX4DI2.js +0 -66
  573. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
  574. package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +0 -1
  575. package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +0 -1
  576. package/dist/dashboard-web/chunks/chunk-SYC6D5XU.js +0 -1
  577. package/dist/dashboard-web/chunks/connectors-page-VOISXXII.js +0 -1
  578. package/dist/dashboard-web/chunks/feedback-page-RN6HRZMS.js +0 -1
  579. package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +0 -8
  580. package/dist/dashboard-web/chunks/monitoring-page-NKEKVQAP.js +0 -2
  581. package/dist/dashboard-web/chunks/office-page-GVJF73XW.js +0 -1
  582. package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +0 -1
  583. package/dist/dashboard-web/chunks/plugin-page-J3OF5IY4.js +0 -1
  584. package/dist/dashboard-web/chunks/roles-page-WQIRSOLZ.js +0 -1
  585. package/dist/dashboard-web/chunks/schedules-page-J2DEY2X6.js +0 -1
  586. package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +0 -8
  587. package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +0 -2
  588. package/dist/dashboard-web/chunks/skills-page-HGIFR3IU.js +0 -4
  589. package/dist/dashboard-web/chunks/team-federation-page-MR5ZPL4B.js +0 -1
  590. package/dist/dashboard-web/chunks/v3-page-GBR5JWPE.js +0 -94
  591. package/dist/dashboard-web/chunks/whiteboards-page-QAZM4BN3.js +0 -1
  592. package/dist/services/vc-meeting-consumer-profile-store.d.ts +0 -39
  593. package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +0 -1
  594. package/dist/services/vc-meeting-consumer-profile-store.js +0 -191
  595. package/dist/services/vc-meeting-consumer-profile-store.js.map +0 -1
@@ -1 +1 @@
1
- d4b7507a1749c82ef2b8bab3ad68ba68d3f2c9b27e5a07cd5ae98479feaaf683
1
+ 14c156c655efc61ed07f4a086355ded6d7394ff614c0288ec130fecb1fd25290
@@ -25,6 +25,28 @@ export interface RiffBackendConfig {
25
25
  jwt?: string;
26
26
  /** Name of env var containing the JWT token (default: RIFF_JWT). */
27
27
  jwtEnv?: string;
28
+ /**
29
+ * Command to refresh the ByteCloud JWT when the keychain holds no live token.
30
+ * When neither `config.jwt` nor the env token is set and `readBytecloudKeychainJwt`
31
+ * returns null (every candidate expired / within the safety window / absent),
32
+ * riff task creation would fail with a 401 that aborts the whole turn. Before
33
+ * giving up, we run this command ONCE (debounced) to let the owning CLI
34
+ * (bytedcli / kaboo-cli) refresh credentials and rewrite the keychain, then
35
+ * re-read. bytedcli is the ByteCloud JWT owner: `bytedcli auth
36
+ * get-bytecloud-jwt-token --force-refresh` refreshes via its Auth SDK and
37
+ * writes the token to `~/.local/share/bytedcli/data/bytecloud-auth/…`, which is
38
+ * already a `bytecloudKeychainCandidates` path.
39
+ *
40
+ * Shape: [binary, ...args]. When unset, resolves in order:
41
+ * 1. env `BOTMUX_RIFF_JWT_REFRESH_CMD` (space-split, e.g. `bytedcli auth get-bytecloud-jwt-token --force-refresh`)
42
+ * 2. a `bytedcli` binary found on PATH → `bytedcli auth get-bytecloud-jwt-token --force-refresh`
43
+ * 3. otherwise no auto-refresh (fail-closed to the old behaviour — a 401).
44
+ * We intentionally do NOT default to `npx @bytedance-dev/bytedcli@latest`: an
45
+ * uncached/`@latest` npx resolve can block ~30s per call, far too slow for a
46
+ * synchronous pre-request refresh. Deployments wanting npx must set the env
47
+ * explicitly (and ideally pin the version).
48
+ */
49
+ jwtRefreshCmd?: string[];
28
50
  /** Sandbox resource pool selected for newly-created tasks. Riff defaults to
29
51
  * BOE when omitted; follow-ups inherit the parent task's sandbox. */
30
52
  sandboxCluster?: RiffSandboxCluster;
@@ -183,6 +205,62 @@ export declare function decodeJwtExp(jwt: string): number | null;
183
205
  */
184
206
  export declare const JWT_EXPIRY_SAFETY_WINDOW_SEC = 30;
185
207
  export declare function readBytecloudKeychainJwt(home?: string, env?: NodeJS.ProcessEnv, nowMs?: number, platform?: NodeJS.Platform): string | null;
208
+ /**
209
+ * Locate a `bytedcli` binary on PATH (used to build the default JWT-refresh
210
+ * command). Returns the bare name `bytedcli` when found so execFileSync resolves
211
+ * it via PATH, or null when absent. Injectable env/platform for testing.
212
+ *
213
+ * We look for a real installed binary rather than defaulting to
214
+ * `npx @bytedance-dev/bytedcli@latest`: an uncached / `@latest` npx resolve can
215
+ * block ~30s, which is unacceptable on the synchronous pre-request path. If
216
+ * bytedcli is not installed we simply do not auto-refresh (fail-closed to the
217
+ * prior behaviour — the request may 401, exactly as before this change).
218
+ */
219
+ export declare function findBytedcliBinary(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string | null;
220
+ /**
221
+ * Resolve the JWT-refresh command: explicit config → env
222
+ * `BOTMUX_RIFF_JWT_REFRESH_CMD` (space-split) → a PATH-resident bytedcli →
223
+ * null (no auto-refresh). See RiffBackendConfig.jwtRefreshCmd for the rationale.
224
+ */
225
+ export declare function resolveJwtRefreshCmd(configured: string[] | undefined, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string[] | null;
226
+ /** Minimum gap between speculative JWT refresh attempts. When the keychain
227
+ * holds no live token, a reconnect/follow-up loop would otherwise trigger a
228
+ * refresh on EVERY getJwt() call; we cap proactive refreshes at one per window
229
+ * and let the shared keychain re-read serve the rest. Also caps the cost of a
230
+ * refresh command that keeps failing (e.g. bytedcli not logged in). A refresh
231
+ * driven by an actual server 401 bypasses this window (see `force`). */
232
+ export declare const JWT_REFRESH_DEBOUNCE_MS = 60000;
233
+ /** How long a single refresh command may run before we give up. Once the
234
+ * refresh is asynchronous (below) this no longer blocks the event loop — it
235
+ * only bounds one awaited child process — so we keep it generous: a cold
236
+ * bytedcli token fetch can take a few seconds, and a session that cannot get a
237
+ * JWT has nothing useful to do anyway. */
238
+ export declare const JWT_REFRESH_TIMEOUT_MS = 30000;
239
+ export declare function __resetJwtRefreshDebounceForTest(): void;
240
+ export interface RefreshBytecloudJwtOpts {
241
+ /** Injectable async runner (defaults to a real execFile). */
242
+ runner?: (bin: string, args: string[]) => Promise<void>;
243
+ /** Injectable clock for the debounce window (defaults to Date.now()). */
244
+ nowMs?: number;
245
+ /** Bypass the debounce window. Set only when an actual server 401/403 proved
246
+ * the current token is bad — a rejection is authoritative evidence worth one
247
+ * more attempt even inside the window. Never set for speculative refreshes. */
248
+ force?: boolean;
249
+ }
250
+ /**
251
+ * Run the JWT-refresh command once, ASYNCHRONOUSLY. Never throws: a missing
252
+ * command, a non-zero exit, or a timeout all resolve to `false` (the caller then
253
+ * falls back to whatever the keychain holds — i.e. the pre-change behaviour).
254
+ * Resolves true only when a command actually ran to completion.
255
+ *
256
+ * Async + injectable (runner / now / force) so it never blocks the event loop
257
+ * (critical on the daemon-side orphan-cancel path) and the debounce / coalesce /
258
+ * fail-closed paths are unit-testable without spawning a real process.
259
+ *
260
+ * COALESCE: if a refresh is already in flight, ride it instead of spawning a
261
+ * second bytedcli — concurrent getJwt() callers share one refresh.
262
+ */
263
+ export declare function refreshBytecloudJwt(cmd: string[] | null, opts?: RefreshBytecloudJwtOpts): Promise<boolean>;
186
264
  /**
187
265
  * RiffBackend — bridges botmux's SessionBackend interface to riff's HTTP API.
188
266
  *
@@ -287,7 +365,12 @@ export declare class RiffBackend implements SessionBackend {
287
365
  * worker forwards it to the daemon so the follow-up lineage survives a
288
366
  * daemon restart (currentTaskId otherwise lives only in this process). */
289
367
  onTaskId(cb: (taskId: string | null) => void): void;
290
- /** Resolve JWT dynamically — re-reads env/keychain each call so auto-refresh works. */
368
+ /** Resolve JWT dynamically — re-reads env/keychain each call so auto-refresh
369
+ * works. Async because a keychain miss may trigger a (non-blocking) CLI
370
+ * refresh. `opts.allowRefresh=false` skips the refresh entirely (daemon-side
371
+ * orphan-cancel: a best-effort teardown must never freeze the daemon on a
372
+ * host-identity refresh). `opts.forceRefresh=true` bypasses the debounce
373
+ * window (an actual server 401 proved the token bad). */
291
374
  private getJwt;
292
375
  private resolveJwt;
293
376
  private readJwtFromBytecloudKeychain;
@@ -1 +1 @@
1
- {"version":3,"file":"riff-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/riff-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"riff-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/riff-backend.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { readFileSync } from 'node:fs';
1
+ import { readFileSync, existsSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { execFileSync } from 'node:child_process';
3
+ import { join, delimiter } from 'node:path';
4
+ import { execFileSync, execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
5
6
  import { createHash } from 'node:crypto';
6
7
  import { logger } from '../../utils/logger.js';
7
8
  import { escapeXmlTagLikeTokens } from '../../utils/xml.js';
@@ -166,7 +167,7 @@ export function deriveRiffReposFromDirs(dirs, deriveOne = deriveRiffRepoFromWork
166
167
  export async function cancelRiffTaskById(cfg, taskId) {
167
168
  const attempt = async () => {
168
169
  const headers = { 'Content-Type': 'application/json' };
169
- const jwt = new RiffBackend(cfg, 'orphan-cancel')['resolveJwt']();
170
+ const jwt = await new RiffBackend(cfg, 'orphan-cancel')['resolveJwt']({ allowRefresh: false });
170
171
  if (jwt)
171
172
  headers['x-jwt-token'] = jwt;
172
173
  const resp = await fetch(`${cfg.baseUrl}/api/task-cancel`, {
@@ -229,6 +230,12 @@ function aimeDataHome(env) {
229
230
  return null;
230
231
  return join(workspace, sanitizeAimeUser(user), '.local', 'share');
231
232
  }
233
+ /** True when BOTH AIME vars are set (trimmed non-empty), i.e. bytedcli swaps its
234
+ * storage root to the AIME workspace. In that runtime we must not trigger a
235
+ * host-identity JWT refresh — see resolveJwt's fail-closed skip. */
236
+ function isFullAimeRuntime(env) {
237
+ return aimeDataHome(env) !== null;
238
+ }
232
239
  /**
233
240
  * The keychain candidates for a ByteCloud tool's `bytecloud-auth/` store, across
234
241
  * the CLIs botmux users log into (kaboo-cli / aiden-cli / cjadk / bytedcli).
@@ -426,6 +433,129 @@ export function readBytecloudKeychainJwt(home = homedir(), env = process.env, no
426
433
  }
427
434
  return bestLive?.jwt ?? opaqueFallback;
428
435
  }
436
+ /**
437
+ * Locate a `bytedcli` binary on PATH (used to build the default JWT-refresh
438
+ * command). Returns the bare name `bytedcli` when found so execFileSync resolves
439
+ * it via PATH, or null when absent. Injectable env/platform for testing.
440
+ *
441
+ * We look for a real installed binary rather than defaulting to
442
+ * `npx @bytedance-dev/bytedcli@latest`: an uncached / `@latest` npx resolve can
443
+ * block ~30s, which is unacceptable on the synchronous pre-request path. If
444
+ * bytedcli is not installed we simply do not auto-refresh (fail-closed to the
445
+ * prior behaviour — the request may 401, exactly as before this change).
446
+ */
447
+ export function findBytedcliBinary(env = process.env, platform = process.platform) {
448
+ const pathVar = env.PATH ?? env.Path ?? '';
449
+ if (!pathVar)
450
+ return null;
451
+ const names = platform === 'win32' ? ['bytedcli.cmd', 'bytedcli.exe', 'bytedcli'] : ['bytedcli'];
452
+ for (const dir of pathVar.split(delimiter)) {
453
+ if (!dir)
454
+ continue;
455
+ for (const name of names) {
456
+ try {
457
+ if (existsSync(join(dir, name)))
458
+ return 'bytedcli';
459
+ }
460
+ catch { /* ignore unreadable PATH entry */ }
461
+ }
462
+ }
463
+ return null;
464
+ }
465
+ /**
466
+ * Resolve the JWT-refresh command: explicit config → env
467
+ * `BOTMUX_RIFF_JWT_REFRESH_CMD` (space-split) → a PATH-resident bytedcli →
468
+ * null (no auto-refresh). See RiffBackendConfig.jwtRefreshCmd for the rationale.
469
+ */
470
+ export function resolveJwtRefreshCmd(configured, env = process.env, platform = process.platform) {
471
+ if (configured && configured.length > 0)
472
+ return configured;
473
+ const fromEnv = env.BOTMUX_RIFF_JWT_REFRESH_CMD?.trim();
474
+ if (fromEnv) {
475
+ const parts = fromEnv.split(/\s+/).filter(Boolean);
476
+ if (parts.length > 0)
477
+ return parts;
478
+ }
479
+ const bin = findBytedcliBinary(env, platform);
480
+ if (bin)
481
+ return [bin, 'auth', 'get-bytecloud-jwt-token', '--force-refresh'];
482
+ return null;
483
+ }
484
+ /** Minimum gap between speculative JWT refresh attempts. When the keychain
485
+ * holds no live token, a reconnect/follow-up loop would otherwise trigger a
486
+ * refresh on EVERY getJwt() call; we cap proactive refreshes at one per window
487
+ * and let the shared keychain re-read serve the rest. Also caps the cost of a
488
+ * refresh command that keeps failing (e.g. bytedcli not logged in). A refresh
489
+ * driven by an actual server 401 bypasses this window (see `force`). */
490
+ export const JWT_REFRESH_DEBOUNCE_MS = 60_000;
491
+ /** How long a single refresh command may run before we give up. Once the
492
+ * refresh is asynchronous (below) this no longer blocks the event loop — it
493
+ * only bounds one awaited child process — so we keep it generous: a cold
494
+ * bytedcli token fetch can take a few seconds, and a session that cannot get a
495
+ * JWT has nothing useful to do anyway. */
496
+ export const JWT_REFRESH_TIMEOUT_MS = 30_000;
497
+ /** Process-wide last-attempt timestamp (ms). Shared across RiffBackend instances
498
+ * because the orphan-cancel path builds a throwaway instance per call — a
499
+ * per-instance clock there would never debounce. `-Infinity` means "never
500
+ * attempted", so the first call always runs regardless of the clock's
501
+ * magnitude. Reset helper for tests. */
502
+ let lastJwtRefreshAtMs = Number.NEGATIVE_INFINITY;
503
+ /** In-flight refresh, shared process-wide so concurrent callers COALESCE onto a
504
+ * single child process instead of each spawning their own bytedcli. `null`
505
+ * between attempts. */
506
+ let inFlightJwtRefresh = null;
507
+ export function __resetJwtRefreshDebounceForTest() {
508
+ lastJwtRefreshAtMs = Number.NEGATIVE_INFINITY;
509
+ inFlightJwtRefresh = null;
510
+ }
511
+ /**
512
+ * Run the JWT-refresh command once, ASYNCHRONOUSLY. Never throws: a missing
513
+ * command, a non-zero exit, or a timeout all resolve to `false` (the caller then
514
+ * falls back to whatever the keychain holds — i.e. the pre-change behaviour).
515
+ * Resolves true only when a command actually ran to completion.
516
+ *
517
+ * Async + injectable (runner / now / force) so it never blocks the event loop
518
+ * (critical on the daemon-side orphan-cancel path) and the debounce / coalesce /
519
+ * fail-closed paths are unit-testable without spawning a real process.
520
+ *
521
+ * COALESCE: if a refresh is already in flight, ride it instead of spawning a
522
+ * second bytedcli — concurrent getJwt() callers share one refresh.
523
+ */
524
+ export function refreshBytecloudJwt(cmd, opts = {}) {
525
+ const { runner = defaultJwtRefreshRunner, nowMs = Date.now(), force = false } = opts;
526
+ if (!cmd || cmd.length === 0)
527
+ return Promise.resolve(false);
528
+ // Coalesce first: a forced caller still rides an in-flight refresh rather than
529
+ // racing a second child — the running one will rewrite the keychain either way.
530
+ if (inFlightJwtRefresh)
531
+ return inFlightJwtRefresh;
532
+ // Debounce: cap the cost of a refresh that keeps failing. A forced (401-driven)
533
+ // refresh bypasses the window — the token was provably rejected.
534
+ if (!force && nowMs - lastJwtRefreshAtMs < JWT_REFRESH_DEBOUNCE_MS)
535
+ return Promise.resolve(false);
536
+ lastJwtRefreshAtMs = nowMs;
537
+ const [bin, ...args] = cmd;
538
+ const run = (async () => {
539
+ try {
540
+ await runner(bin, args);
541
+ return true;
542
+ }
543
+ catch (err) {
544
+ logger.warn(`[riff] JWT refresh command failed: ${err instanceof Error ? err.message : String(err)}`);
545
+ return false;
546
+ }
547
+ })();
548
+ inFlightJwtRefresh = run;
549
+ return run.finally(() => { if (inFlightJwtRefresh === run)
550
+ inFlightJwtRefresh = null; });
551
+ }
552
+ const execFileAsync = promisify(execFile);
553
+ /** Default refresh runner: async execFile with a bounded timeout. stdout/stderr
554
+ * are discarded — the command's SIDE EFFECT (rewriting the keychain) is what
555
+ * matters; we re-read the keychain afterwards rather than parse its output. */
556
+ async function defaultJwtRefreshRunner(bin, args) {
557
+ await execFileAsync(bin, args, { timeout: JWT_REFRESH_TIMEOUT_MS });
558
+ }
429
559
  function defaultRunGit(cwd) {
430
560
  return (args) => {
431
561
  try {
@@ -596,11 +726,17 @@ export class RiffBackend {
596
726
  if (this.currentTaskId)
597
727
  cb(this.currentTaskId);
598
728
  }
599
- /** Resolve JWT dynamically — re-reads env/keychain each call so auto-refresh works. */
600
- getJwt() {
601
- return this.resolveJwt();
602
- }
603
- resolveJwt() {
729
+ /** Resolve JWT dynamically — re-reads env/keychain each call so auto-refresh
730
+ * works. Async because a keychain miss may trigger a (non-blocking) CLI
731
+ * refresh. `opts.allowRefresh=false` skips the refresh entirely (daemon-side
732
+ * orphan-cancel: a best-effort teardown must never freeze the daemon on a
733
+ * host-identity refresh). `opts.forceRefresh=true` bypasses the debounce
734
+ * window (an actual server 401 proved the token bad). */
735
+ getJwt(opts = {}) {
736
+ return this.resolveJwt(opts);
737
+ }
738
+ async resolveJwt(opts = {}) {
739
+ const { allowRefresh = true, forceRefresh = false } = opts;
604
740
  if (this.config.jwt)
605
741
  return this.config.jwt;
606
742
  const envKey = this.config.jwtEnv ?? 'RIFF_JWT';
@@ -609,10 +745,37 @@ export class RiffBackend {
609
745
  return fromEnv;
610
746
  // Fallback: try ByteCloud Auth SDK keychain (kaboo-cli / aiden-cli / cjadk / bytedcli)
611
747
  const fromKeychain = this.readJwtFromBytecloudKeychain();
612
- if (fromKeychain) {
748
+ // A forced refresh (post-401) intentionally ignores an existing keychain
749
+ // token: the server just rejected whatever we had, so re-reading the same
750
+ // store without refreshing first would hand back the same bad token.
751
+ if (fromKeychain && !forceRefresh) {
613
752
  logger.info(`[riff] JWT loaded from ByteCloud keychain`);
614
753
  return fromKeychain;
615
754
  }
755
+ // No live keychain token (or a forced post-401 refresh) — every candidate is
756
+ // expired, within the safety window, or absent. This is exactly the "token
757
+ // expired mid-task" / "expired at startup" case (the JWT is re-read per
758
+ // request). Before giving up to a 401 that would abort the turn, ask the
759
+ // owning CLI to refresh (non-blocking async, coalesced, non-fatal), then
760
+ // re-read once. Skipped when allowRefresh=false (daemon-side orphan-cancel)
761
+ // and inside a full AIME runtime (fail-closed identity boundary — we never
762
+ // trigger a host-identity refresh there; the AIME store is refreshed inside
763
+ // AIME).
764
+ if (allowRefresh && !isFullAimeRuntime(process.env)) {
765
+ const cmd = resolveJwtRefreshCmd(this.config.jwtRefreshCmd);
766
+ if (await refreshBytecloudJwt(cmd, { force: forceRefresh })) {
767
+ const refreshed = this.readJwtFromBytecloudKeychain();
768
+ if (refreshed) {
769
+ logger.info(`[riff] JWT refreshed via ByteCloud CLI and reloaded from keychain`);
770
+ return refreshed;
771
+ }
772
+ }
773
+ }
774
+ // Forced refresh found nothing new — fall back to the (rejected) keychain
775
+ // token rather than null: a stale token is no worse than no token, and the
776
+ // caller already knows it 401'd.
777
+ if (fromKeychain)
778
+ return fromKeychain;
616
779
  logger.warn(`[riff] JWT not found in config, env ${envKey}, or ByteCloud keychain; API calls will fail`);
617
780
  return null;
618
781
  }
@@ -1249,11 +1412,31 @@ export class RiffBackend {
1249
1412
  body = JSON.stringify(payload);
1250
1413
  }
1251
1414
  // Resolve JWT last — right before the request — so the safety-window
1252
- // freshness check reflects the token that actually goes on the wire.
1253
- const jwt = this.getJwt();
1254
- if (jwt)
1255
- headers['x-jwt-token'] = jwt;
1256
- const resp = await fetch(url, { method: 'POST', headers, body, signal: AbortSignal.timeout(this.createTimeoutMs) });
1415
+ // freshness check reflects the token that actually goes on the wire. `body`
1416
+ // (string or FormData) is re-extractable per fetch, so the retry below can
1417
+ // reuse it.
1418
+ const post = (jwt) => {
1419
+ const h = { ...headers };
1420
+ if (jwt)
1421
+ h['x-jwt-token'] = jwt;
1422
+ return fetch(url, { method: 'POST', headers: h, body, signal: AbortSignal.timeout(this.createTimeoutMs) });
1423
+ };
1424
+ const firstJwt = await this.getJwt();
1425
+ let resp = await post(firstJwt);
1426
+ // One retry on an auth rejection. A 401/403 is authoritative proof the token
1427
+ // was bad (expired mid-flight / stale at startup), so it justifies forcing a
1428
+ // JWT refresh that bypasses the debounce window. We retry ONLY when the
1429
+ // refresh produced a genuinely different token — otherwise the second POST
1430
+ // would just replay the same rejected credential (this also naturally
1431
+ // no-ops inside a full AIME runtime, where the host refresh is skipped).
1432
+ // Other statuses (400/5xx) are not auth problems and are not retried.
1433
+ if (resp.status === 401 || resp.status === 403) {
1434
+ const freshJwt = await this.getJwt({ forceRefresh: true });
1435
+ if (freshJwt && freshJwt !== firstJwt) {
1436
+ logger.warn(`[riff] task create/follow-up got HTTP ${resp.status}; retrying once with a refreshed JWT`);
1437
+ resp = await post(freshJwt);
1438
+ }
1439
+ }
1257
1440
  if (!resp.ok)
1258
1441
  throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);
1259
1442
  const result = (await resp.json());
@@ -1316,7 +1499,7 @@ export class RiffBackend {
1316
1499
  async cancelTask(taskId) {
1317
1500
  const url = `${this.config.baseUrl}/api/task-cancel`;
1318
1501
  const headers = { 'Content-Type': 'application/json' };
1319
- const jwt = this.getJwt();
1502
+ const jwt = await this.getJwt();
1320
1503
  if (jwt)
1321
1504
  headers['x-jwt-token'] = jwt;
1322
1505
  const resp = await fetch(url, {
@@ -1361,7 +1544,7 @@ export class RiffBackend {
1361
1544
  async streamTask(taskId) {
1362
1545
  const url = `${this.config.baseUrl}/api2/task-stream?id=${encodeURIComponent(taskId)}`;
1363
1546
  const headers = {};
1364
- const jwt = this.getJwt();
1547
+ const jwt = await this.getJwt();
1365
1548
  if (jwt)
1366
1549
  headers['x-jwt-token'] = jwt;
1367
1550
  this.abortController = new AbortController();
@@ -1680,7 +1863,7 @@ export class RiffBackend {
1680
1863
  try {
1681
1864
  const url = `${this.config.baseUrl}/api/task-detail?id=${encodeURIComponent(taskId)}`;
1682
1865
  const headers = {};
1683
- const jwt = this.getJwt();
1866
+ const jwt = await this.getJwt();
1684
1867
  if (jwt)
1685
1868
  headers['x-jwt-token'] = jwt;
1686
1869
  const resp = await fetch(url, { headers, signal: AbortSignal.timeout(8000) });
@@ -1712,7 +1895,7 @@ export class RiffBackend {
1712
1895
  try {
1713
1896
  const url = `${this.config.baseUrl}/api/task-detail?id=${encodeURIComponent(taskId)}`;
1714
1897
  const headers = {};
1715
- const jwt = this.getJwt();
1898
+ const jwt = await this.getJwt();
1716
1899
  if (jwt)
1717
1900
  headers['x-jwt-token'] = jwt;
1718
1901
  const resp = await fetch(url, { headers, signal: AbortSignal.timeout(8000) });