botmux 3.15.0 → 3.16.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 (792) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/.runtime-build-id +1 -1
  4. package/dist/adapters/backend/destroy-result.d.ts +159 -0
  5. package/dist/adapters/backend/destroy-result.d.ts.map +1 -0
  6. package/dist/adapters/backend/destroy-result.js +223 -0
  7. package/dist/adapters/backend/destroy-result.js.map +1 -0
  8. package/dist/adapters/backend/herdr-backend.d.ts +4 -0
  9. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  10. package/dist/adapters/backend/herdr-backend.js +23 -1
  11. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  12. package/dist/adapters/backend/mojo-backend.d.ts +577 -0
  13. package/dist/adapters/backend/mojo-backend.d.ts.map +1 -0
  14. package/dist/adapters/backend/mojo-backend.js +2471 -0
  15. package/dist/adapters/backend/mojo-backend.js.map +1 -0
  16. package/dist/adapters/backend/mojo-budgets.d.ts +21 -0
  17. package/dist/adapters/backend/mojo-budgets.d.ts.map +1 -0
  18. package/dist/adapters/backend/mojo-budgets.js +22 -0
  19. package/dist/adapters/backend/mojo-budgets.js.map +1 -0
  20. package/dist/adapters/backend/mojo-isolated-workspace.d.ts +69 -0
  21. package/dist/adapters/backend/mojo-isolated-workspace.d.ts.map +1 -0
  22. package/dist/adapters/backend/mojo-isolated-workspace.js +213 -0
  23. package/dist/adapters/backend/mojo-isolated-workspace.js.map +1 -0
  24. package/dist/adapters/backend/mojo-process-tree.d.ts +292 -0
  25. package/dist/adapters/backend/mojo-process-tree.d.ts.map +1 -0
  26. package/dist/adapters/backend/mojo-process-tree.js +486 -0
  27. package/dist/adapters/backend/mojo-process-tree.js.map +1 -0
  28. package/dist/adapters/backend/mojo-types.d.ts +542 -0
  29. package/dist/adapters/backend/mojo-types.d.ts.map +1 -0
  30. package/dist/adapters/backend/mojo-types.js +682 -0
  31. package/dist/adapters/backend/mojo-types.js.map +1 -0
  32. package/dist/adapters/backend/reproduce-command.js +3 -3
  33. package/dist/adapters/backend/reproduce-command.js.map +1 -1
  34. package/dist/adapters/backend/riff-backend.js +1 -1
  35. package/dist/adapters/backend/riff-backend.js.map +1 -1
  36. package/dist/adapters/backend/sandbox.d.ts +44 -7
  37. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  38. package/dist/adapters/backend/sandbox.js +30 -7
  39. package/dist/adapters/backend/sandbox.js.map +1 -1
  40. package/dist/adapters/backend/session-backend-selector.d.ts +14 -1
  41. package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
  42. package/dist/adapters/backend/session-backend-selector.js +82 -10
  43. package/dist/adapters/backend/session-backend-selector.js.map +1 -1
  44. package/dist/adapters/backend/types.d.ts +101 -6
  45. package/dist/adapters/backend/types.d.ts.map +1 -1
  46. package/dist/adapters/backend/types.js.map +1 -1
  47. package/dist/adapters/backend/zmx-backend.d.ts +11 -0
  48. package/dist/adapters/backend/zmx-backend.d.ts.map +1 -1
  49. package/dist/adapters/backend/zmx-backend.js +16 -1
  50. package/dist/adapters/backend/zmx-backend.js.map +1 -1
  51. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  52. package/dist/adapters/cli/codex-app.js +2 -2
  53. package/dist/adapters/cli/codex-app.js.map +1 -1
  54. package/dist/adapters/cli/codex.d.ts.map +1 -1
  55. package/dist/adapters/cli/codex.js +7 -0
  56. package/dist/adapters/cli/codex.js.map +1 -1
  57. package/dist/adapters/cli/copilot.d.ts +3 -1
  58. package/dist/adapters/cli/copilot.d.ts.map +1 -1
  59. package/dist/adapters/cli/copilot.js +23 -5
  60. package/dist/adapters/cli/copilot.js.map +1 -1
  61. package/dist/adapters/cli/cursor.d.ts.map +1 -1
  62. package/dist/adapters/cli/cursor.js +13 -3
  63. package/dist/adapters/cli/cursor.js.map +1 -1
  64. package/dist/adapters/cli/grok.d.ts.map +1 -1
  65. package/dist/adapters/cli/grok.js +24 -5
  66. package/dist/adapters/cli/grok.js.map +1 -1
  67. package/dist/adapters/cli/kimi.d.ts.map +1 -1
  68. package/dist/adapters/cli/kimi.js +19 -1
  69. package/dist/adapters/cli/kimi.js.map +1 -1
  70. package/dist/adapters/cli/mojo.d.ts +28 -0
  71. package/dist/adapters/cli/mojo.d.ts.map +1 -0
  72. package/dist/adapters/cli/mojo.js +58 -0
  73. package/dist/adapters/cli/mojo.js.map +1 -0
  74. package/dist/adapters/cli/pi.d.ts +6 -4
  75. package/dist/adapters/cli/pi.d.ts.map +1 -1
  76. package/dist/adapters/cli/pi.js +6 -4
  77. package/dist/adapters/cli/pi.js.map +1 -1
  78. package/dist/adapters/cli/read-isolation.d.ts +251 -1
  79. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  80. package/dist/adapters/cli/read-isolation.js +254 -1
  81. package/dist/adapters/cli/read-isolation.js.map +1 -1
  82. package/dist/adapters/cli/registry.d.ts +13 -1
  83. package/dist/adapters/cli/registry.d.ts.map +1 -1
  84. package/dist/adapters/cli/registry.js +19 -1
  85. package/dist/adapters/cli/registry.js.map +1 -1
  86. package/dist/adapters/cli/runner-input.d.ts +3 -3
  87. package/dist/adapters/cli/runner-input.d.ts.map +1 -1
  88. package/dist/adapters/cli/runner-input.js +4 -3
  89. package/dist/adapters/cli/runner-input.js.map +1 -1
  90. package/dist/adapters/cli/shared-hints.d.ts +3 -1
  91. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  92. package/dist/adapters/cli/shared-hints.js +22 -6
  93. package/dist/adapters/cli/shared-hints.js.map +1 -1
  94. package/dist/adapters/cli/types.d.ts +29 -4
  95. package/dist/adapters/cli/types.d.ts.map +1 -1
  96. package/dist/bot-registry.d.ts +20 -0
  97. package/dist/bot-registry.d.ts.map +1 -1
  98. package/dist/bot-registry.js +30 -4
  99. package/dist/bot-registry.js.map +1 -1
  100. package/dist/cli/arg-utils.d.ts +5 -0
  101. package/dist/cli/arg-utils.d.ts.map +1 -1
  102. package/dist/cli/arg-utils.js +7 -0
  103. package/dist/cli/arg-utils.js.map +1 -1
  104. package/dist/cli/bots-list-output.d.ts +130 -2
  105. package/dist/cli/bots-list-output.d.ts.map +1 -1
  106. package/dist/cli/bots-list-output.js +173 -27
  107. package/dist/cli/bots-list-output.js.map +1 -1
  108. package/dist/cli/daemon-lifecycle-env.d.ts +10 -3
  109. package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
  110. package/dist/cli/daemon-lifecycle-env.js +38 -11
  111. package/dist/cli/daemon-lifecycle-env.js.map +1 -1
  112. package/dist/cli/dashboard-command.d.ts +15 -0
  113. package/dist/cli/dashboard-command.d.ts.map +1 -1
  114. package/dist/cli/dashboard-command.js +22 -0
  115. package/dist/cli/dashboard-command.js.map +1 -1
  116. package/dist/cli/log-tail.d.ts +54 -0
  117. package/dist/cli/log-tail.d.ts.map +1 -0
  118. package/dist/cli/log-tail.js +167 -0
  119. package/dist/cli/log-tail.js.map +1 -0
  120. package/dist/cli/pm2-env.d.ts +16 -0
  121. package/dist/cli/pm2-env.d.ts.map +1 -0
  122. package/dist/cli/pm2-env.js +63 -0
  123. package/dist/cli/pm2-env.js.map +1 -0
  124. package/dist/cli/pm2-fleet-lock.d.ts +26 -0
  125. package/dist/cli/pm2-fleet-lock.d.ts.map +1 -0
  126. package/dist/cli/pm2-fleet-lock.js +50 -0
  127. package/dist/cli/pm2-fleet-lock.js.map +1 -0
  128. package/dist/cli/pm2-god-retirement.d.ts +59 -0
  129. package/dist/cli/pm2-god-retirement.d.ts.map +1 -0
  130. package/dist/cli/pm2-god-retirement.js +95 -0
  131. package/dist/cli/pm2-god-retirement.js.map +1 -0
  132. package/dist/cli/session-list-wake.d.ts +41 -0
  133. package/dist/cli/session-list-wake.d.ts.map +1 -0
  134. package/dist/cli/session-list-wake.js +102 -0
  135. package/dist/cli/session-list-wake.js.map +1 -0
  136. package/dist/cli/workflow.d.ts.map +1 -1
  137. package/dist/cli/workflow.js +26 -0
  138. package/dist/cli/workflow.js.map +1 -1
  139. package/dist/cli.d.ts.map +1 -1
  140. package/dist/cli.js +933 -115
  141. package/dist/cli.js.map +1 -1
  142. package/dist/codex-app-runner.js +261 -49
  143. package/dist/codex-app-runner.js.map +1 -1
  144. package/dist/core/cli-runtime-update.d.ts +8 -0
  145. package/dist/core/cli-runtime-update.d.ts.map +1 -1
  146. package/dist/core/cli-runtime-update.js +127 -8
  147. package/dist/core/cli-runtime-update.js.map +1 -1
  148. package/dist/core/close-residual.d.ts +64 -0
  149. package/dist/core/close-residual.d.ts.map +1 -0
  150. package/dist/core/close-residual.js +93 -0
  151. package/dist/core/close-residual.js.map +1 -0
  152. package/dist/core/closed-session-card.d.ts.map +1 -1
  153. package/dist/core/closed-session-card.js +11 -3
  154. package/dist/core/closed-session-card.js.map +1 -1
  155. package/dist/core/command-handler.d.ts.map +1 -1
  156. package/dist/core/command-handler.js +129 -27
  157. package/dist/core/command-handler.js.map +1 -1
  158. package/dist/core/cost-calculator.d.ts +3 -1
  159. package/dist/core/cost-calculator.d.ts.map +1 -1
  160. package/dist/core/cost-calculator.js +230 -1
  161. package/dist/core/cost-calculator.js.map +1 -1
  162. package/dist/core/daemon-background-close.d.ts +19 -0
  163. package/dist/core/daemon-background-close.d.ts.map +1 -0
  164. package/dist/core/daemon-background-close.js +39 -0
  165. package/dist/core/daemon-background-close.js.map +1 -0
  166. package/dist/core/dashboard-command/overview.d.ts +4 -0
  167. package/dist/core/dashboard-command/overview.d.ts.map +1 -1
  168. package/dist/core/dashboard-command/overview.js +8 -1
  169. package/dist/core/dashboard-command/overview.js.map +1 -1
  170. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  171. package/dist/core/dashboard-ipc-server.js +373 -41
  172. package/dist/core/dashboard-ipc-server.js.map +1 -1
  173. package/dist/core/dashboard-rows.d.ts +4 -0
  174. package/dist/core/dashboard-rows.d.ts.map +1 -1
  175. package/dist/core/dashboard-rows.js +3 -0
  176. package/dist/core/dashboard-rows.js.map +1 -1
  177. package/dist/core/dashboard-url.d.ts +47 -1
  178. package/dist/core/dashboard-url.d.ts.map +1 -1
  179. package/dist/core/dashboard-url.js +83 -2
  180. package/dist/core/dashboard-url.js.map +1 -1
  181. package/dist/core/deferred-schedule-settlement.d.ts +15 -1
  182. package/dist/core/deferred-schedule-settlement.d.ts.map +1 -1
  183. package/dist/core/deferred-schedule-settlement.js +4 -1
  184. package/dist/core/deferred-schedule-settlement.js.map +1 -1
  185. package/dist/core/device-isolation-daemon.d.ts +91 -1
  186. package/dist/core/device-isolation-daemon.d.ts.map +1 -1
  187. package/dist/core/device-isolation-daemon.js +346 -2
  188. package/dist/core/device-isolation-daemon.js.map +1 -1
  189. package/dist/core/local-terminal-opener.d.ts.map +1 -1
  190. package/dist/core/local-terminal-opener.js +5 -1
  191. package/dist/core/local-terminal-opener.js.map +1 -1
  192. package/dist/core/loopback-target.d.ts +14 -0
  193. package/dist/core/loopback-target.d.ts.map +1 -0
  194. package/dist/core/loopback-target.js +20 -0
  195. package/dist/core/loopback-target.js.map +1 -0
  196. package/dist/core/maintenance.d.ts.map +1 -1
  197. package/dist/core/maintenance.js +16 -2
  198. package/dist/core/maintenance.js.map +1 -1
  199. package/dist/core/mojo-containment-command.d.ts +20 -0
  200. package/dist/core/mojo-containment-command.d.ts.map +1 -0
  201. package/dist/core/mojo-containment-command.js +266 -0
  202. package/dist/core/mojo-containment-command.js.map +1 -0
  203. package/dist/core/mojo-containment.d.ts +575 -0
  204. package/dist/core/mojo-containment.d.ts.map +1 -0
  205. package/dist/core/mojo-containment.js +1158 -0
  206. package/dist/core/mojo-containment.js.map +1 -0
  207. package/dist/core/mojo-launcher-env-quarantine.d.ts +30 -0
  208. package/dist/core/mojo-launcher-env-quarantine.d.ts.map +1 -0
  209. package/dist/core/mojo-launcher-env-quarantine.js +175 -0
  210. package/dist/core/mojo-launcher-env-quarantine.js.map +1 -0
  211. package/dist/core/mojo-session-identity.d.ts +3 -0
  212. package/dist/core/mojo-session-identity.d.ts.map +1 -0
  213. package/dist/core/mojo-session-identity.js +126 -0
  214. package/dist/core/mojo-session-identity.js.map +1 -0
  215. package/dist/core/persistent-backend.d.ts +32 -8
  216. package/dist/core/persistent-backend.d.ts.map +1 -1
  217. package/dist/core/persistent-backend.js +55 -17
  218. package/dist/core/persistent-backend.js.map +1 -1
  219. package/dist/core/plugins/mcp/gateway.d.ts +41 -4
  220. package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
  221. package/dist/core/plugins/mcp/gateway.js +342 -29
  222. package/dist/core/plugins/mcp/gateway.js.map +1 -1
  223. package/dist/core/plugins/mcp/host.d.ts +20 -0
  224. package/dist/core/plugins/mcp/host.d.ts.map +1 -1
  225. package/dist/core/plugins/mcp/host.js +82 -16
  226. package/dist/core/plugins/mcp/host.js.map +1 -1
  227. package/dist/core/plugins/mcp/launch-record.d.ts +14 -0
  228. package/dist/core/plugins/mcp/launch-record.d.ts.map +1 -0
  229. package/dist/core/plugins/mcp/launch-record.js +63 -0
  230. package/dist/core/plugins/mcp/launch-record.js.map +1 -0
  231. package/dist/core/plugins/pm2.d.ts.map +1 -1
  232. package/dist/core/plugins/pm2.js +16 -3
  233. package/dist/core/plugins/pm2.js.map +1 -1
  234. package/dist/core/plugins/service-manager.d.ts +9 -0
  235. package/dist/core/plugins/service-manager.d.ts.map +1 -1
  236. package/dist/core/plugins/service-manager.js +33 -16
  237. package/dist/core/plugins/service-manager.js.map +1 -1
  238. package/dist/core/preview-port-owner.d.ts +109 -0
  239. package/dist/core/preview-port-owner.d.ts.map +1 -0
  240. package/dist/core/preview-port-owner.js +320 -0
  241. package/dist/core/preview-port-owner.js.map +1 -0
  242. package/dist/core/remote-cli-ids.d.ts +5 -0
  243. package/dist/core/remote-cli-ids.d.ts.map +1 -0
  244. package/dist/core/remote-cli-ids.js +24 -0
  245. package/dist/core/remote-cli-ids.js.map +1 -0
  246. package/dist/core/{riff-shutdown-detach.d.ts → remote-shutdown-detach.d.ts} +40 -39
  247. package/dist/core/remote-shutdown-detach.d.ts.map +1 -0
  248. package/dist/core/{riff-shutdown-detach.js → remote-shutdown-detach.js} +85 -83
  249. package/dist/core/remote-shutdown-detach.js.map +1 -0
  250. package/dist/core/{riff-worker-shutdown-readiness.d.ts → remote-worker-shutdown-readiness.d.ts} +5 -4
  251. package/dist/core/remote-worker-shutdown-readiness.d.ts.map +1 -0
  252. package/dist/core/{riff-worker-shutdown-readiness.js → remote-worker-shutdown-readiness.js} +4 -3
  253. package/dist/core/remote-worker-shutdown-readiness.js.map +1 -0
  254. package/dist/core/reply-target.d.ts +16 -1
  255. package/dist/core/reply-target.d.ts.map +1 -1
  256. package/dist/core/reply-target.js +61 -0
  257. package/dist/core/reply-target.js.map +1 -1
  258. package/dist/core/session-group-birth.d.ts +26 -0
  259. package/dist/core/session-group-birth.d.ts.map +1 -1
  260. package/dist/core/session-group-birth.js +81 -4
  261. package/dist/core/session-group-birth.js.map +1 -1
  262. package/dist/core/session-manager.d.ts +15 -2
  263. package/dist/core/session-manager.d.ts.map +1 -1
  264. package/dist/core/session-manager.js +259 -5
  265. package/dist/core/session-manager.js.map +1 -1
  266. package/dist/core/session-model.d.ts +46 -0
  267. package/dist/core/session-model.d.ts.map +1 -0
  268. package/dist/core/session-model.js +42 -0
  269. package/dist/core/session-model.js.map +1 -0
  270. package/dist/core/session-owner-reminder.d.ts +63 -0
  271. package/dist/core/session-owner-reminder.d.ts.map +1 -0
  272. package/dist/core/session-owner-reminder.js +196 -0
  273. package/dist/core/session-owner-reminder.js.map +1 -0
  274. package/dist/core/session-preview-registry.d.ts +53 -0
  275. package/dist/core/session-preview-registry.d.ts.map +1 -0
  276. package/dist/core/session-preview-registry.js +82 -0
  277. package/dist/core/session-preview-registry.js.map +1 -0
  278. package/dist/core/session-preview.d.ts +114 -0
  279. package/dist/core/session-preview.d.ts.map +1 -0
  280. package/dist/core/session-preview.js +184 -0
  281. package/dist/core/session-preview.js.map +1 -0
  282. package/dist/core/session-rename.d.ts.map +1 -1
  283. package/dist/core/session-rename.js +5 -3
  284. package/dist/core/session-rename.js.map +1 -1
  285. package/dist/core/session-wake-deadline.d.ts +5 -0
  286. package/dist/core/session-wake-deadline.d.ts.map +1 -0
  287. package/dist/core/session-wake-deadline.js +13 -0
  288. package/dist/core/session-wake-deadline.js.map +1 -0
  289. package/dist/core/shutdown-budgets.d.ts +7 -6
  290. package/dist/core/shutdown-budgets.d.ts.map +1 -1
  291. package/dist/core/shutdown-budgets.js +11 -10
  292. package/dist/core/shutdown-budgets.js.map +1 -1
  293. package/dist/core/terminal-control-grant.d.ts +74 -0
  294. package/dist/core/terminal-control-grant.d.ts.map +1 -0
  295. package/dist/core/terminal-control-grant.js +183 -0
  296. package/dist/core/terminal-control-grant.js.map +1 -0
  297. package/dist/core/terminal-proxy.d.ts.map +1 -1
  298. package/dist/core/terminal-proxy.js +4 -5
  299. package/dist/core/terminal-proxy.js.map +1 -1
  300. package/dist/core/terminal-write-auth.d.ts +4 -11
  301. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  302. package/dist/core/terminal-write-auth.js +19 -16
  303. package/dist/core/terminal-write-auth.js.map +1 -1
  304. package/dist/core/trigger-session.d.ts.map +1 -1
  305. package/dist/core/trigger-session.js +36 -29
  306. package/dist/core/trigger-session.js.map +1 -1
  307. package/dist/core/types.d.ts +88 -10
  308. package/dist/core/types.d.ts.map +1 -1
  309. package/dist/core/types.js +9 -7
  310. package/dist/core/types.js.map +1 -1
  311. package/dist/core/workbench-link.d.ts +81 -0
  312. package/dist/core/workbench-link.d.ts.map +1 -0
  313. package/dist/core/workbench-link.js +109 -0
  314. package/dist/core/workbench-link.js.map +1 -0
  315. package/dist/core/worker-pool.d.ts +321 -12
  316. package/dist/core/worker-pool.d.ts.map +1 -1
  317. package/dist/core/worker-pool.js +2524 -212
  318. package/dist/core/worker-pool.js.map +1 -1
  319. package/dist/daemon.d.ts +6 -0
  320. package/dist/daemon.d.ts.map +1 -1
  321. package/dist/daemon.js +443 -106
  322. package/dist/daemon.js.map +1 -1
  323. package/dist/dashboard/aggregator.d.ts +33 -3
  324. package/dist/dashboard/aggregator.d.ts.map +1 -1
  325. package/dist/dashboard/aggregator.js +93 -17
  326. package/dist/dashboard/aggregator.js.map +1 -1
  327. package/dist/dashboard/auth-session-connections.d.ts +59 -0
  328. package/dist/dashboard/auth-session-connections.d.ts.map +1 -0
  329. package/dist/dashboard/auth-session-connections.js +109 -0
  330. package/dist/dashboard/auth-session-connections.js.map +1 -0
  331. package/dist/dashboard/auth.d.ts +99 -1
  332. package/dist/dashboard/auth.d.ts.map +1 -1
  333. package/dist/dashboard/auth.js +176 -64
  334. package/dist/dashboard/auth.js.map +1 -1
  335. package/dist/dashboard/bot-payload.d.ts +1 -0
  336. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  337. package/dist/dashboard/bot-payload.js +3 -0
  338. package/dist/dashboard/bot-payload.js.map +1 -1
  339. package/dist/dashboard/control-audit.d.ts +112 -0
  340. package/dist/dashboard/control-audit.d.ts.map +1 -0
  341. package/dist/dashboard/control-audit.js +195 -0
  342. package/dist/dashboard/control-audit.js.map +1 -0
  343. package/dist/dashboard/control-csrf.d.ts +123 -0
  344. package/dist/dashboard/control-csrf.d.ts.map +1 -0
  345. package/dist/dashboard/control-csrf.js +397 -0
  346. package/dist/dashboard/control-csrf.js.map +1 -0
  347. package/dist/dashboard/daemon-reconcile.d.ts +26 -0
  348. package/dist/dashboard/daemon-reconcile.d.ts.map +1 -0
  349. package/dist/dashboard/daemon-reconcile.js +46 -0
  350. package/dist/dashboard/daemon-reconcile.js.map +1 -0
  351. package/dist/dashboard/debug-terminal.d.ts.map +1 -1
  352. package/dist/dashboard/debug-terminal.js +18 -4
  353. package/dist/dashboard/debug-terminal.js.map +1 -1
  354. package/dist/dashboard/events-sse.d.ts +60 -0
  355. package/dist/dashboard/events-sse.d.ts.map +1 -0
  356. package/dist/dashboard/events-sse.js +63 -0
  357. package/dist/dashboard/events-sse.js.map +1 -0
  358. package/dist/dashboard/h5-auth.d.ts +256 -0
  359. package/dist/dashboard/h5-auth.d.ts.map +1 -0
  360. package/dist/dashboard/h5-auth.js +825 -0
  361. package/dist/dashboard/h5-auth.js.map +1 -0
  362. package/dist/dashboard/managed-spawn.d.ts +36 -0
  363. package/dist/dashboard/managed-spawn.d.ts.map +1 -0
  364. package/dist/dashboard/managed-spawn.js +169 -0
  365. package/dist/dashboard/managed-spawn.js.map +1 -0
  366. package/dist/dashboard/preview-content-capability.d.ts +41 -0
  367. package/dist/dashboard/preview-content-capability.d.ts.map +1 -0
  368. package/dist/dashboard/preview-content-capability.js +127 -0
  369. package/dist/dashboard/preview-content-capability.js.map +1 -0
  370. package/dist/dashboard/preview-contract.d.ts +85 -0
  371. package/dist/dashboard/preview-contract.d.ts.map +1 -0
  372. package/dist/dashboard/preview-contract.js +198 -0
  373. package/dist/dashboard/preview-contract.js.map +1 -0
  374. package/dist/dashboard/preview-guard-page.d.ts +52 -0
  375. package/dist/dashboard/preview-guard-page.d.ts.map +1 -0
  376. package/dist/dashboard/preview-guard-page.js +162 -0
  377. package/dist/dashboard/preview-guard-page.js.map +1 -0
  378. package/dist/dashboard/preview-interaction.d.ts +57 -0
  379. package/dist/dashboard/preview-interaction.d.ts.map +1 -0
  380. package/dist/dashboard/preview-interaction.js +198 -0
  381. package/dist/dashboard/preview-interaction.js.map +1 -0
  382. package/dist/dashboard/preview-proxy.d.ts +113 -0
  383. package/dist/dashboard/preview-proxy.d.ts.map +1 -0
  384. package/dist/dashboard/preview-proxy.js +543 -0
  385. package/dist/dashboard/preview-proxy.js.map +1 -0
  386. package/dist/dashboard/public-redact.d.ts +23 -0
  387. package/dist/dashboard/public-redact.d.ts.map +1 -1
  388. package/dist/dashboard/public-redact.js +90 -21
  389. package/dist/dashboard/public-redact.js.map +1 -1
  390. package/dist/dashboard/request-identity.d.ts +77 -0
  391. package/dist/dashboard/request-identity.d.ts.map +1 -0
  392. package/dist/dashboard/request-identity.js +72 -0
  393. package/dist/dashboard/request-identity.js.map +1 -0
  394. package/dist/dashboard/session-cleanup.d.ts +5 -0
  395. package/dist/dashboard/session-cleanup.d.ts.map +1 -1
  396. package/dist/dashboard/session-cleanup.js +4 -0
  397. package/dist/dashboard/session-cleanup.js.map +1 -1
  398. package/dist/dashboard/settings-write-applier.d.ts +5 -1
  399. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  400. package/dist/dashboard/settings-write-applier.js +14 -0
  401. package/dist/dashboard/settings-write-applier.js.map +1 -1
  402. package/dist/dashboard/standing-link.d.ts +76 -0
  403. package/dist/dashboard/standing-link.d.ts.map +1 -0
  404. package/dist/dashboard/standing-link.js +111 -0
  405. package/dist/dashboard/standing-link.js.map +1 -0
  406. package/dist/dashboard/terminal-control.d.ts +105 -0
  407. package/dist/dashboard/terminal-control.d.ts.map +1 -0
  408. package/dist/dashboard/terminal-control.js +296 -0
  409. package/dist/dashboard/terminal-control.js.map +1 -0
  410. package/dist/dashboard/terminal-front-proxy.d.ts +55 -0
  411. package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -0
  412. package/dist/dashboard/terminal-front-proxy.js +415 -0
  413. package/dist/dashboard/terminal-front-proxy.js.map +1 -0
  414. package/dist/dashboard/terminal-view-capability.d.ts +97 -0
  415. package/dist/dashboard/terminal-view-capability.d.ts.map +1 -0
  416. package/dist/dashboard/terminal-view-capability.js +145 -0
  417. package/dist/dashboard/terminal-view-capability.js.map +1 -0
  418. package/dist/dashboard/web/agent-workbench-api.d.ts +59 -0
  419. package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -0
  420. package/dist/dashboard/web/agent-workbench-api.js +227 -0
  421. package/dist/dashboard/web/agent-workbench-api.js.map +1 -0
  422. package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts +59 -0
  423. package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts.map +1 -0
  424. package/dist/dashboard/web/agent-workbench-appearance-menu.js +195 -0
  425. package/dist/dashboard/web/agent-workbench-appearance-menu.js.map +1 -0
  426. package/dist/dashboard/web/agent-workbench-appearance.d.ts +222 -0
  427. package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -0
  428. package/dist/dashboard/web/agent-workbench-appearance.js +499 -0
  429. package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -0
  430. package/dist/dashboard/web/agent-workbench-capabilities.d.ts +13 -0
  431. package/dist/dashboard/web/agent-workbench-capabilities.d.ts.map +1 -0
  432. package/dist/dashboard/web/agent-workbench-capabilities.js +24 -0
  433. package/dist/dashboard/web/agent-workbench-capabilities.js.map +1 -0
  434. package/dist/dashboard/web/agent-workbench-chat.d.ts +90 -0
  435. package/dist/dashboard/web/agent-workbench-chat.d.ts.map +1 -0
  436. package/dist/dashboard/web/agent-workbench-chat.js +168 -0
  437. package/dist/dashboard/web/agent-workbench-chat.js.map +1 -0
  438. package/dist/dashboard/web/agent-workbench-dock-page.d.ts +3 -0
  439. package/dist/dashboard/web/agent-workbench-dock-page.d.ts.map +1 -0
  440. package/dist/dashboard/web/agent-workbench-dock-page.js +23 -0
  441. package/dist/dashboard/web/agent-workbench-dock-page.js.map +1 -0
  442. package/dist/dashboard/web/agent-workbench-dock-view.d.ts +22 -0
  443. package/dist/dashboard/web/agent-workbench-dock-view.d.ts.map +1 -0
  444. package/dist/dashboard/web/agent-workbench-dock-view.js +76 -0
  445. package/dist/dashboard/web/agent-workbench-dock-view.js.map +1 -0
  446. package/dist/dashboard/web/agent-workbench-model.d.ts +196 -0
  447. package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -0
  448. package/dist/dashboard/web/agent-workbench-model.js +529 -0
  449. package/dist/dashboard/web/agent-workbench-model.js.map +1 -0
  450. package/dist/dashboard/web/agent-workbench-page.d.ts +3 -0
  451. package/dist/dashboard/web/agent-workbench-page.d.ts.map +1 -0
  452. package/dist/dashboard/web/agent-workbench-page.js +27 -0
  453. package/dist/dashboard/web/agent-workbench-page.js.map +1 -0
  454. package/dist/dashboard/web/agent-workbench-panes.d.ts +49 -0
  455. package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -0
  456. package/dist/dashboard/web/agent-workbench-panes.js +468 -0
  457. package/dist/dashboard/web/agent-workbench-panes.js.map +1 -0
  458. package/dist/dashboard/web/agent-workbench-session-list.d.ts +42 -0
  459. package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -0
  460. package/dist/dashboard/web/agent-workbench-session-list.js +353 -0
  461. package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -0
  462. package/dist/dashboard/web/agent-workbench-storage.d.ts +49 -0
  463. package/dist/dashboard/web/agent-workbench-storage.d.ts.map +1 -0
  464. package/dist/dashboard/web/agent-workbench-storage.js +197 -0
  465. package/dist/dashboard/web/agent-workbench-storage.js.map +1 -0
  466. package/dist/dashboard/web/agent-workbench-touch.d.ts +46 -0
  467. package/dist/dashboard/web/agent-workbench-touch.d.ts.map +1 -0
  468. package/dist/dashboard/web/agent-workbench-touch.js +96 -0
  469. package/dist/dashboard/web/agent-workbench-touch.js.map +1 -0
  470. package/dist/dashboard/web/agent-workbench-view.d.ts +34 -0
  471. package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -0
  472. package/dist/dashboard/web/agent-workbench-view.js +439 -0
  473. package/dist/dashboard/web/agent-workbench-view.js.map +1 -0
  474. package/dist/dashboard/web/app.d.ts.map +1 -1
  475. package/dist/dashboard/web/app.js +63 -2
  476. package/dist/dashboard/web/app.js.map +1 -1
  477. package/dist/dashboard/web/bot-defaults-page.d.ts +11 -0
  478. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  479. package/dist/dashboard/web/bot-defaults-page.js +267 -36
  480. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  481. package/dist/dashboard/web/bot-defaults.d.ts +6 -0
  482. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  483. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  484. package/dist/dashboard/web/control-csrf.d.ts +4 -0
  485. package/dist/dashboard/web/control-csrf.d.ts.map +1 -0
  486. package/dist/dashboard/web/control-csrf.js +26 -0
  487. package/dist/dashboard/web/control-csrf.js.map +1 -0
  488. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  489. package/dist/dashboard/web/dashboard-routes.js +2 -0
  490. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  491. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  492. package/dist/dashboard/web/groups-page.js +11 -2
  493. package/dist/dashboard/web/groups-page.js.map +1 -1
  494. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  495. package/dist/dashboard/web/i18n.js +132 -6
  496. package/dist/dashboard/web/i18n.js.map +1 -1
  497. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  498. package/dist/dashboard/web/overview-page.js +3 -2
  499. package/dist/dashboard/web/overview-page.js.map +1 -1
  500. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  501. package/dist/dashboard/web/sessions-page.js +41 -1
  502. package/dist/dashboard/web/sessions-page.js.map +1 -1
  503. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  504. package/dist/dashboard/web/sessions.js +5 -1
  505. package/dist/dashboard/web/sessions.js.map +1 -1
  506. package/dist/dashboard/web/settings-page.d.ts +3 -0
  507. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  508. package/dist/dashboard/web/settings-page.js +56 -10
  509. package/dist/dashboard/web/settings-page.js.map +1 -1
  510. package/dist/dashboard/web/store.d.ts +27 -2
  511. package/dist/dashboard/web/store.d.ts.map +1 -1
  512. package/dist/dashboard/web/store.js +43 -4
  513. package/dist/dashboard/web/store.js.map +1 -1
  514. package/dist/dashboard/web/ui.d.ts +3 -0
  515. package/dist/dashboard/web/ui.d.ts.map +1 -1
  516. package/dist/dashboard/web/ui.js +11 -0
  517. package/dist/dashboard/web/ui.js.map +1 -1
  518. package/dist/dashboard/web/update-action.d.ts +12 -0
  519. package/dist/dashboard/web/update-action.d.ts.map +1 -1
  520. package/dist/dashboard/web/update-action.js +11 -0
  521. package/dist/dashboard/web/update-action.js.map +1 -1
  522. package/dist/dashboard/workbench-doctor.d.ts +114 -0
  523. package/dist/dashboard/workbench-doctor.d.ts.map +1 -0
  524. package/dist/dashboard/workbench-doctor.js +620 -0
  525. package/dist/dashboard/workbench-doctor.js.map +1 -0
  526. package/dist/dashboard/workbench-ticket.d.ts +165 -0
  527. package/dist/dashboard/workbench-ticket.d.ts.map +1 -0
  528. package/dist/dashboard/workbench-ticket.js +495 -0
  529. package/dist/dashboard/workbench-ticket.js.map +1 -0
  530. package/dist/dashboard-web/app.js +1 -1
  531. package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +1 -0
  532. package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +1 -0
  533. package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +10 -0
  534. package/dist/dashboard-web/chunks/chunk-22WIADUT.js +2 -0
  535. package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +1 -0
  536. package/dist/dashboard-web/chunks/{chunk-Z7B3E3US.js → chunk-2W6SCN3M.js} +1 -1
  537. package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +1 -0
  538. package/dist/dashboard-web/chunks/{chunk-VMWNR3SV.js → chunk-F6KNPF4R.js} +11 -9
  539. package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +1 -0
  540. package/dist/dashboard-web/chunks/chunk-G5ZS2YUS.js +1 -0
  541. package/dist/dashboard-web/chunks/chunk-KTQ7B6ZR.js +1 -0
  542. package/dist/dashboard-web/chunks/{chunk-Z7DO42GJ.js → chunk-NACP7BMR.js} +1 -1
  543. package/dist/dashboard-web/chunks/{connectors-page-CPH6VVFY.js → connectors-page-VOISXXII.js} +1 -1
  544. package/dist/dashboard-web/chunks/{feedback-page-J2FKQ3LK.js → feedback-page-RN6HRZMS.js} +1 -1
  545. package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +8 -0
  546. package/dist/dashboard-web/chunks/{insights-page-A2LWTKJD.js → insights-page-HJFDYR5N.js} +3 -3
  547. package/dist/dashboard-web/chunks/{monitor-room-2YR752E3.js → monitor-room-V7PCP47V.js} +1 -1
  548. package/dist/dashboard-web/chunks/{monitoring-page-BGYSKZGM.js → monitoring-page-NKEKVQAP.js} +1 -1
  549. package/dist/dashboard-web/chunks/{office-page-ZZHTEAE4.js → office-page-GVJF73XW.js} +1 -1
  550. package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +1 -0
  551. package/dist/dashboard-web/chunks/{plugin-page-VEGTCEAS.js → plugin-page-J3OF5IY4.js} +1 -1
  552. package/dist/dashboard-web/chunks/{roles-page-YUC4YLJG.js → roles-page-WQIRSOLZ.js} +1 -1
  553. package/dist/dashboard-web/chunks/{schedules-page-2L2NKTDJ.js → schedules-page-J2DEY2X6.js} +1 -1
  554. package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +8 -0
  555. package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +2 -0
  556. package/dist/dashboard-web/chunks/{skills-page-DQPBBI3T.js → skills-page-HGIFR3IU.js} +1 -1
  557. package/dist/dashboard-web/chunks/{team-federation-page-LQKLDV4K.js → team-federation-page-MR5ZPL4B.js} +1 -1
  558. package/dist/dashboard-web/chunks/{v3-page-RVKQIMAP.js → v3-page-GBR5JWPE.js} +2 -2
  559. package/dist/dashboard-web/chunks/{whiteboards-page-S5K55HRZ.js → whiteboards-page-QAZM4BN3.js} +1 -1
  560. package/dist/dashboard-web/index.html +8 -1
  561. package/dist/dashboard-web/style.css +2006 -10
  562. package/dist/dashboard.js +1006 -263
  563. package/dist/dashboard.js.map +1 -1
  564. package/dist/global-config.d.ts +30 -0
  565. package/dist/global-config.d.ts.map +1 -1
  566. package/dist/global-config.js +33 -0
  567. package/dist/global-config.js.map +1 -1
  568. package/dist/i18n/en.d.ts.map +1 -1
  569. package/dist/i18n/en.js +32 -1
  570. package/dist/i18n/en.js.map +1 -1
  571. package/dist/i18n/zh.d.ts.map +1 -1
  572. package/dist/i18n/zh.js +29 -1
  573. package/dist/i18n/zh.js.map +1 -1
  574. package/dist/im/lark/card-builder.d.ts +1 -1
  575. package/dist/im/lark/card-builder.d.ts.map +1 -1
  576. package/dist/im/lark/card-builder.js +22 -6
  577. package/dist/im/lark/card-builder.js.map +1 -1
  578. package/dist/im/lark/card-handler.d.ts.map +1 -1
  579. package/dist/im/lark/card-handler.js +182 -27
  580. package/dist/im/lark/card-handler.js.map +1 -1
  581. package/dist/im/lark/client.d.ts +15 -0
  582. package/dist/im/lark/client.d.ts.map +1 -1
  583. package/dist/im/lark/client.js +30 -0
  584. package/dist/im/lark/client.js.map +1 -1
  585. package/dist/im/lark/event-dispatcher.d.ts +48 -0
  586. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  587. package/dist/im/lark/event-dispatcher.js +133 -22
  588. package/dist/im/lark/event-dispatcher.js.map +1 -1
  589. package/dist/im/lark/identity-cache.d.ts +14 -6
  590. package/dist/im/lark/identity-cache.d.ts.map +1 -1
  591. package/dist/im/lark/identity-cache.js +69 -26
  592. package/dist/im/lark/identity-cache.js.map +1 -1
  593. package/dist/im/lark/lark-hosts.d.ts +13 -0
  594. package/dist/im/lark/lark-hosts.d.ts.map +1 -1
  595. package/dist/im/lark/lark-hosts.js +16 -0
  596. package/dist/im/lark/lark-hosts.js.map +1 -1
  597. package/dist/im/lark/overview-card.d.ts +22 -0
  598. package/dist/im/lark/overview-card.d.ts.map +1 -1
  599. package/dist/im/lark/overview-card.js +53 -3
  600. package/dist/im/lark/overview-card.js.map +1 -1
  601. package/dist/im/lark/sessions-card.d.ts.map +1 -1
  602. package/dist/im/lark/sessions-card.js +26 -3
  603. package/dist/im/lark/sessions-card.js.map +1 -1
  604. package/dist/im/lark/workflow-slash-command.d.ts +6 -0
  605. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  606. package/dist/im/lark/workflow-slash-command.js +7 -0
  607. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  608. package/dist/index-daemon.js +27 -4
  609. package/dist/index-daemon.js.map +1 -1
  610. package/dist/index-dashboard.d.ts +3 -0
  611. package/dist/index-dashboard.d.ts.map +1 -0
  612. package/dist/index-dashboard.js +94 -0
  613. package/dist/index-dashboard.js.map +1 -0
  614. package/dist/platform/binding.d.ts +27 -0
  615. package/dist/platform/binding.d.ts.map +1 -1
  616. package/dist/platform/binding.js +40 -0
  617. package/dist/platform/binding.js.map +1 -1
  618. package/dist/platform/team-agents-client.d.ts +199 -0
  619. package/dist/platform/team-agents-client.d.ts.map +1 -0
  620. package/dist/platform/team-agents-client.js +263 -0
  621. package/dist/platform/team-agents-client.js.map +1 -0
  622. package/dist/platform/tunnel-client.d.ts +6 -0
  623. package/dist/platform/tunnel-client.d.ts.map +1 -1
  624. package/dist/platform/tunnel-client.js.map +1 -1
  625. package/dist/services/async-trigger-state.d.ts +7 -3
  626. package/dist/services/async-trigger-state.d.ts.map +1 -1
  627. package/dist/services/async-trigger-state.js +28 -0
  628. package/dist/services/async-trigger-state.js.map +1 -1
  629. package/dist/services/async-trigger-store.d.ts +13 -4
  630. package/dist/services/async-trigger-store.d.ts.map +1 -1
  631. package/dist/services/async-trigger-store.js +55 -8
  632. package/dist/services/async-trigger-store.js.map +1 -1
  633. package/dist/services/bot-config-store.d.ts +1 -11
  634. package/dist/services/bot-config-store.d.ts.map +1 -1
  635. package/dist/services/bot-config-store.js +27 -3
  636. package/dist/services/bot-config-store.js.map +1 -1
  637. package/dist/services/bot-profile-store.d.ts +17 -2
  638. package/dist/services/bot-profile-store.d.ts.map +1 -1
  639. package/dist/services/bot-profile-store.js +93 -12
  640. package/dist/services/bot-profile-store.js.map +1 -1
  641. package/dist/services/bridge-turn-journal.d.ts +63 -0
  642. package/dist/services/bridge-turn-journal.d.ts.map +1 -0
  643. package/dist/services/bridge-turn-journal.js +149 -0
  644. package/dist/services/bridge-turn-journal.js.map +1 -0
  645. package/dist/services/bridge-turn-queue.d.ts +18 -2
  646. package/dist/services/bridge-turn-queue.d.ts.map +1 -1
  647. package/dist/services/bridge-turn-queue.js +31 -10
  648. package/dist/services/bridge-turn-queue.js.map +1 -1
  649. package/dist/services/claude-transcript.d.ts +19 -0
  650. package/dist/services/claude-transcript.d.ts.map +1 -1
  651. package/dist/services/claude-transcript.js +57 -5
  652. package/dist/services/claude-transcript.js.map +1 -1
  653. package/dist/services/codex-app-threads.d.ts +2 -0
  654. package/dist/services/codex-app-threads.d.ts.map +1 -1
  655. package/dist/services/codex-app-threads.js +1 -1
  656. package/dist/services/codex-app-threads.js.map +1 -1
  657. package/dist/services/codex-reasoning-effort.d.ts +8 -0
  658. package/dist/services/codex-reasoning-effort.d.ts.map +1 -1
  659. package/dist/services/codex-reasoning-effort.js +24 -0
  660. package/dist/services/codex-reasoning-effort.js.map +1 -1
  661. package/dist/services/cursor-resume-policy.d.ts.map +1 -1
  662. package/dist/services/cursor-resume-policy.js +15 -3
  663. package/dist/services/cursor-resume-policy.js.map +1 -1
  664. package/dist/services/open-platform-rename.d.ts.map +1 -1
  665. package/dist/services/open-platform-rename.js +3 -2
  666. package/dist/services/open-platform-rename.js.map +1 -1
  667. package/dist/services/ordinary-turn-recovery.d.ts +76 -0
  668. package/dist/services/ordinary-turn-recovery.d.ts.map +1 -0
  669. package/dist/services/ordinary-turn-recovery.js +349 -0
  670. package/dist/services/ordinary-turn-recovery.js.map +1 -0
  671. package/dist/services/resume-fresh-policy.d.ts +17 -0
  672. package/dist/services/resume-fresh-policy.d.ts.map +1 -0
  673. package/dist/services/resume-fresh-policy.js +24 -0
  674. package/dist/services/resume-fresh-policy.js.map +1 -0
  675. package/dist/services/session-group-title.d.ts +1 -0
  676. package/dist/services/session-group-title.d.ts.map +1 -1
  677. package/dist/services/session-group-title.js +16 -1
  678. package/dist/services/session-group-title.js.map +1 -1
  679. package/dist/services/session-groups-store.d.ts +30 -0
  680. package/dist/services/session-groups-store.d.ts.map +1 -1
  681. package/dist/services/session-groups-store.js +26 -4
  682. package/dist/services/session-groups-store.js.map +1 -1
  683. package/dist/services/session-owner-notification.d.ts +9 -0
  684. package/dist/services/session-owner-notification.d.ts.map +1 -0
  685. package/dist/services/session-owner-notification.js +10 -0
  686. package/dist/services/session-owner-notification.js.map +1 -0
  687. package/dist/services/session-owner-reminder-config-store.d.ts +9 -0
  688. package/dist/services/session-owner-reminder-config-store.d.ts.map +1 -0
  689. package/dist/services/session-owner-reminder-config-store.js +24 -0
  690. package/dist/services/session-owner-reminder-config-store.js.map +1 -0
  691. package/dist/services/session-owner-reminder-store.d.ts +5 -0
  692. package/dist/services/session-owner-reminder-store.d.ts.map +1 -0
  693. package/dist/services/session-owner-reminder-store.js +54 -0
  694. package/dist/services/session-owner-reminder-store.js.map +1 -0
  695. package/dist/services/session-store.d.ts +98 -21
  696. package/dist/services/session-store.d.ts.map +1 -1
  697. package/dist/services/session-store.js +406 -48
  698. package/dist/services/session-store.js.map +1 -1
  699. package/dist/services/structured-bridge-clis.d.ts +9 -5
  700. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  701. package/dist/services/structured-bridge-clis.js +9 -4
  702. package/dist/services/structured-bridge-clis.js.map +1 -1
  703. package/dist/services/transcript-resolver.d.ts +1 -1
  704. package/dist/services/transcript-resolver.d.ts.map +1 -1
  705. package/dist/services/transcript-resolver.js +6 -1
  706. package/dist/services/transcript-resolver.js.map +1 -1
  707. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  708. package/dist/setup/bot-config-editor.js +7 -2
  709. package/dist/setup/bot-config-editor.js.map +1 -1
  710. package/dist/setup/ensure-herdr-integrations.d.ts +13 -0
  711. package/dist/setup/ensure-herdr-integrations.d.ts.map +1 -1
  712. package/dist/setup/ensure-herdr-integrations.js +21 -3
  713. package/dist/setup/ensure-herdr-integrations.js.map +1 -1
  714. package/dist/setup/open-platform-automation.d.ts +1 -0
  715. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  716. package/dist/setup/open-platform-automation.js +107 -7
  717. package/dist/setup/open-platform-automation.js.map +1 -1
  718. package/dist/skills/definitions.d.ts +17 -0
  719. package/dist/skills/definitions.d.ts.map +1 -1
  720. package/dist/skills/definitions.js +78 -8
  721. package/dist/skills/definitions.js.map +1 -1
  722. package/dist/skills/injection-mode.d.ts +24 -3
  723. package/dist/skills/injection-mode.d.ts.map +1 -1
  724. package/dist/skills/injection-mode.js +64 -15
  725. package/dist/skills/injection-mode.js.map +1 -1
  726. package/dist/skills/installer.d.ts +18 -0
  727. package/dist/skills/installer.d.ts.map +1 -1
  728. package/dist/skills/installer.js +45 -1
  729. package/dist/skills/installer.js.map +1 -1
  730. package/dist/types.d.ts +221 -10
  731. package/dist/types.d.ts.map +1 -1
  732. package/dist/utils/child-env.d.ts +92 -2
  733. package/dist/utils/child-env.d.ts.map +1 -1
  734. package/dist/utils/child-env.js +195 -1
  735. package/dist/utils/child-env.js.map +1 -1
  736. package/dist/utils/cli-usage-limit.d.ts +25 -14
  737. package/dist/utils/cli-usage-limit.d.ts.map +1 -1
  738. package/dist/utils/cli-usage-limit.js +25 -15
  739. package/dist/utils/cli-usage-limit.js.map +1 -1
  740. package/dist/utils/daemon-rejection-guard.d.ts +35 -0
  741. package/dist/utils/daemon-rejection-guard.d.ts.map +1 -0
  742. package/dist/utils/daemon-rejection-guard.js +101 -0
  743. package/dist/utils/daemon-rejection-guard.js.map +1 -0
  744. package/dist/utils/dashboard-env.d.ts +53 -0
  745. package/dist/utils/dashboard-env.d.ts.map +1 -0
  746. package/dist/utils/dashboard-env.js +116 -0
  747. package/dist/utils/dashboard-env.js.map +1 -0
  748. package/dist/utils/global-install.d.ts.map +1 -1
  749. package/dist/utils/global-install.js +61 -5
  750. package/dist/utils/global-install.js.map +1 -1
  751. package/dist/utils/install-diagnostics.d.ts +14 -7
  752. package/dist/utils/install-diagnostics.d.ts.map +1 -1
  753. package/dist/utils/install-diagnostics.js +20 -11
  754. package/dist/utils/install-diagnostics.js.map +1 -1
  755. package/dist/utils/local-dev-update.d.ts +132 -0
  756. package/dist/utils/local-dev-update.d.ts.map +1 -0
  757. package/dist/utils/local-dev-update.js +176 -0
  758. package/dist/utils/local-dev-update.js.map +1 -0
  759. package/dist/utils/pending-input-queue.d.ts +12 -1
  760. package/dist/utils/pending-input-queue.d.ts.map +1 -1
  761. package/dist/utils/pending-input-queue.js.map +1 -1
  762. package/dist/worker.js +1551 -241
  763. package/dist/worker.js.map +1 -1
  764. package/dist/workflows/definition.d.ts +68 -68
  765. package/dist/workflows/events/payloads.d.ts +14 -14
  766. package/dist/workflows/events/schema.d.ts +312 -312
  767. package/dist/workflows/migration/v2-run-archive-schema.d.ts +40 -40
  768. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  769. package/dist/workflows/v3/cli-run.js +7 -0
  770. package/dist/workflows/v3/cli-run.js.map +1 -1
  771. package/dist/workflows/v3/goal-cli.d.ts +3 -0
  772. package/dist/workflows/v3/goal-cli.d.ts.map +1 -1
  773. package/dist/workflows/v3/goal-cli.js +11 -0
  774. package/dist/workflows/v3/goal-cli.js.map +1 -1
  775. package/dist/workflows/v3/run-envelope.d.ts +144 -144
  776. package/package.json +3 -2
  777. package/dist/cli/pm2-god-admission.d.ts +0 -8
  778. package/dist/cli/pm2-god-admission.d.ts.map +0 -1
  779. package/dist/cli/pm2-god-admission.js +0 -25
  780. package/dist/cli/pm2-god-admission.js.map +0 -1
  781. package/dist/core/riff-shutdown-detach.d.ts.map +0 -1
  782. package/dist/core/riff-shutdown-detach.js.map +0 -1
  783. package/dist/core/riff-worker-shutdown-readiness.d.ts.map +0 -1
  784. package/dist/core/riff-worker-shutdown-readiness.js.map +0 -1
  785. package/dist/dashboard-web/chunks/bot-defaults-page-65SMZ4QY.js +0 -10
  786. package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +0 -1
  787. package/dist/dashboard-web/chunks/chunk-IKN6WURK.js +0 -1
  788. package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +0 -1
  789. package/dist/dashboard-web/chunks/groups-page-VDOOLS4M.js +0 -8
  790. package/dist/dashboard-web/chunks/overview-page-7NYPKQSB.js +0 -1
  791. package/dist/dashboard-web/chunks/sessions-page-DYZZMKFL.js +0 -8
  792. package/dist/dashboard-web/chunks/settings-page-LIULUSMH.js +0 -2
@@ -1,4 +1,5 @@
1
1
  import { basename as pathBasename, dirname, join } from 'node:path';
2
+ import { closeResidualIsLocal, describeCloseResidual } from '../../core/close-residual.js';
2
3
  import { config } from '../../config.js';
3
4
  import { getBot, getAllBots, getOwnerOpenId } from '../../bot-registry.js';
4
5
  import { canOperate, canTalk } from './event-dispatcher.js';
@@ -32,18 +33,19 @@ import { ttadkConfigModelChoices } from '../../setup/cli-selection.js';
32
33
  import { logger } from '../../utils/logger.js';
33
34
  import * as sessionStore from '../../services/session-store.js';
34
35
  import { loadFrozenCards, saveFrozenCards } from '../../services/frozen-card-store.js';
35
- import { forkWorker, sendWorkerInput, sendWorkerSessionInput, closeSession as closeWorkerPoolSession, teardownAuthoritativePersistentBackingBeforeClose, scheduleCardPatch, parkStreamCard, clearUsageLimitState, cardUsageLimit, writableTerminalLinkFor, workerHasInitialized, sessionSupportsWebTerminal, readableTerminalUrlFor, resolvePrivateCardAudience, deliverWriteLinkCard, deliverEphemeralOrReply, CARD_POSTING_SENTINEL, requestSessionRestart, isSessionTransferring, getDaemonStreamingCardUsageSnapshot, withActiveSessionKeyLock } from '../../core/worker-pool.js';
36
+ import { resumeStartsFresh } from '../../services/resume-fresh-policy.js';
37
+ import { forkWorker, sendWorkerInput, sendWorkerSessionInput, closeSession as closeWorkerPoolSession, teardownAuthoritativePersistentBackingBeforeClose, scheduleCardPatch, parkStreamCard, clearUsageLimitState, cardUsageLimit, writableTerminalLinkFor, workerHasInitialized, sessionSupportsWebTerminal, readableTerminalUrlFor, resolvePrivateCardAudience, deliverWriteLinkCard, deliverEphemeralOrReply, CARD_POSTING_SENTINEL, requestSessionRestart, isSessionTransferring, getDaemonStreamingCardUsageSnapshot, withActiveSessionKeyLock, buildStreamingCardJson } from '../../core/worker-pool.js';
36
38
  import { getSessionWorkingDir, buildNewTopicCliInput, getAvailableBots, persistStreamCardState, resumeSession, rememberLastCliInput, ensureSessionWhiteboard } from '../../core/session-manager.js';
37
39
  import { markInitialUserTurnPending } from '../../core/initial-user-turn.js';
38
40
  import { publishAttentionPatch, announcePendingRepoSession } from '../../core/session-activity.js';
39
- import { fallbackTurnId } from '../../core/reply-target.js';
41
+ import { fallbackTurnId, rehomeReplyTargetState } from '../../core/reply-target.js';
40
42
  import { sendWorkerIpc } from '../../core/worker-ipc.js';
41
43
  import { validateWorkingDir } from '../../core/working-dir.js';
42
44
  import { activeSessionKey, sessionKey, sessionAnchorId, frozenDisplayMode, markRepoCardConsumed, isActiveRepoCard } from '../../core/types.js';
43
45
  import { buildTerminalUrl } from '../../core/terminal-url.js';
44
46
  import { createRepoWorktree, removeRepoWorktree, dirSuffixForBranch, pushWorktreeBranch } from '../../services/git-worktree.js';
45
47
  import { withCodexAppContext } from '../../utils/codex-app-context.js';
46
- import { isRiffBackendSession, resolvePairedSpawnBackendType } from '../../core/persistent-backend.js';
48
+ import { isRemoteBackendSession, resolvePairedSpawnBackendType } from '../../core/persistent-backend.js';
47
49
  import { sessionConfiguredRuntimeDisplayName } from '../../core/cli-runtime-display.js';
48
50
  import { worktreeSlugFromContextAI } from '../../services/worktree-slug-ai.js';
49
51
  import { t, localeForBot, isLocale } from '../../i18n/index.js';
@@ -261,14 +263,16 @@ opts) {
261
263
  + `(current=${ds.repoCardMessageId ?? 'none'})`);
262
264
  return false;
263
265
  }
264
- // A live Riff generation cannot use the generic close-and-refork branch.
265
- // Riff teardown is a remote prepare/commit protocol; a failed cancellation
266
- // followed by forkWorker would reach the double-fork kill and orphan the
267
- // still-live remote task. Require an explicit /close before any card,
268
- // worktree, or manual-directory selection can replace this generation.
269
- if (!ds.pendingRepo && isRiffBackendSession(ds)) {
270
- await sessionReply(rootId, t('cmd.cd.riff_unsupported', undefined, locTarget));
271
- logger.warn(`[${tag(ds)}] Repo switch refused: Riff session requires explicit close before replacement`);
266
+ // A live REMOTE generation (Riff or Mojo) cannot use the generic
267
+ // close-and-refork branch. Remote teardown is a prepare/commit protocol; a
268
+ // failed cancellation followed by forkWorker would reach the double-fork
269
+ // kill and orphan the still-live remote task. Require an explicit /close
270
+ // before any card, worktree, or manual-directory selection can replace this
271
+ // generation. (Fourth-round review: the riff-only predicate left the card
272
+ // entry point open for mojo.)
273
+ if (!ds.pendingRepo && isRemoteBackendSession(ds)) {
274
+ await sessionReply(rootId, t('cmd.cd.remote_unsupported', undefined, locTarget));
275
+ logger.warn(`[${tag(ds)}] Repo switch refused: remote session requires explicit close before replacement`);
272
276
  return false;
273
277
  }
274
278
  if (!ds.pendingRepo
@@ -492,7 +496,25 @@ opts) {
492
496
  // frozen-card file; it is re-keyed under the replacement session below.
493
497
  parkStreamCard(current);
494
498
  const oldSession = current.session;
495
- await closeWorkerPoolSession(targetSessionId);
499
+ const closeResult = await closeWorkerPoolSession(targetSessionId);
500
+ // A refused close (remote cancellation unproven) leaves the row ACTIVE on
501
+ // purpose. Deleting the owner anyway would strand an active row with no
502
+ // owner — a ghost — while the remote session keeps running and holding the
503
+ // injected credential. Abort the switch instead. (Same guard as the text
504
+ // /repo path in command-handler.)
505
+ if (!closeResult.ok) {
506
+ return { ok: false, error: 'close_refused' };
507
+ }
508
+ if (closeResult.outcome === 'closed_with_residual') {
509
+ // Same rule as the text /repo path: picking a directory is not consent
510
+ // to leave a remote session running, so stop instead of spawning a
511
+ // replacement on top of it.
512
+ return {
513
+ ok: false,
514
+ error: 'close_residual',
515
+ residual: closeResult.residual,
516
+ };
517
+ }
496
518
  if (activeSessions.get(key) === current)
497
519
  activeSessions.delete(key);
498
520
  if (activeSessions.has(key)) {
@@ -520,6 +542,7 @@ opts) {
520
542
  }
521
543
  current.streamCardId = undefined;
522
544
  current.streamCardNonce = undefined;
545
+ rehomeReplyTargetState(current);
523
546
  current.streamCardPending = undefined;
524
547
  current.lastScreenContent = undefined;
525
548
  current.lastScreenStatus = undefined;
@@ -535,6 +558,20 @@ opts) {
535
558
  if (switched.error === 'dispatch_pending') {
536
559
  await sessionReply(rootId, '当前 Codex App 仍有未结算消息,暂不能切换仓库;请等待本轮完成或关闭会话。');
537
560
  }
561
+ else if (switched.error === 'close_residual') {
562
+ await sessionReply(rootId, closeResidualIsLocal(switched.residual)
563
+ ? '⚠️ 原会话已在本地关闭、远端会话已取消,但**本机可能残留带凭证的子进程未确认终止**'
564
+ + `(${describeCloseResidual(switched.residual)}),请人工核查该主机进程。\n`
565
+ + '**未创建新会话** —— 请先确认该子进程已终止,再重新切换仓库。'
566
+ : '⚠️ 原会话已在本地关闭,但它的远端会话未能取消(控制面无法验证),'
567
+ + `需要人工清理:\`${switched.residual.taskId}\`。\n`
568
+ + '**未创建新会话** —— 请先处理遗留的远端会话,再重新切换仓库。');
569
+ }
570
+ else if (switched.error === 'close_refused') {
571
+ // Without this the user taps the card and gets nothing back, while the old
572
+ // session is still active and its remote session still running.
573
+ await sessionReply(rootId, '⚠️ 无法切换仓库:原会话的远端会话未能确认取消,已保留原会话以便重试。请稍后重试。');
574
+ }
538
575
  return false;
539
576
  }
540
577
  await deliverEphemeralOrReply(switched.current, operatorOpenId, switched.closedCard, 'interactive', () => sessionReply(rootId, switched.closedCard, 'interactive'));
@@ -2081,12 +2118,16 @@ export async function handleCardAction(data, deps, larkAppId) {
2081
2118
  await sessionReply(rootId, t('card.action.adopt_no_restart', undefined, locDs));
2082
2119
  return;
2083
2120
  }
2084
- // New Riff cards omit this button, but old/stale cards remain clickable.
2085
- // Surface the same explicit close-and-recreate guidance as /restart
2086
- // instead of forwarding an IPC the Riff worker must silently refuse.
2087
- if (isRiffBackendSession(ds)) {
2088
- logger.warn(`[${tag(ds)}] Rejected restart on Riff backend session`);
2089
- const unsupported = t('cmd.restart.riff_unsupported', undefined, locDs);
2121
+ // New remote cards omit this button, but old/stale cards remain
2122
+ // clickable. Surface the same explicit close-and-recreate guidance as
2123
+ // /restart. This must cover EVERY remote backend: unlike riff (whose
2124
+ // worker refuses restart), a mojo worker EXECUTES restart — its teardown
2125
+ // cancels the remote session and cold-boots a context-less replacement —
2126
+ // so a riff-only guard here was a real user entry point into a silent
2127
+ // remote-session destruction (fourth-round review, gate 1).
2128
+ if (isRemoteBackendSession(ds)) {
2129
+ logger.warn(`[${tag(ds)}] Rejected restart on remote backend session`);
2130
+ const unsupported = t('cmd.restart.remote_unsupported', undefined, locDs);
2090
2131
  await deliverEphemeralOrReply(ds, operatorOpenId, unsupported, 'text', () => sessionReply(rootId, unsupported));
2091
2132
  return;
2092
2133
  }
@@ -2135,14 +2176,44 @@ export async function handleCardAction(data, deps, larkAppId) {
2135
2176
  // Build the closed card BEFORE closeWorkerPoolSession — it reads the
2136
2177
  // live session's identity off `current`.
2137
2178
  const card = buildClosedSessionCard(current, localeForBot(current.larkAppId));
2179
+ // The clicked card IS the live streaming card in the common in-thread
2180
+ // (non-private) case. When so, patch it in place via the callback return
2181
+ // below instead of sending a separate closed card — a stray extra card
2182
+ // (and its now-dead buttons) is what we're avoiding. Only when the
2183
+ // clicked message is that streaming card and we're not in private mode.
2184
+ const patchClickedCardInPlace = !!cardMessageId
2185
+ && cardMessageId === current.streamCardId
2186
+ && value?.visibility !== 'private'
2187
+ && !botCfg.privateCard;
2188
+ let closeResult;
2138
2189
  try {
2139
- await closeWorkerPoolSession(targetSessionId);
2190
+ // Don't await the worker exiting — a busy CLI only dies at the ~7s
2191
+ // SIGKILL backstop, which blows past Lark's ~3s card-ACK window and
2192
+ // surfaces the client-side "code: 300000" toast. The logical close is
2193
+ // synchronous; the worker is killed in the background.
2194
+ closeResult = await closeWorkerPoolSession(targetSessionId, { awaitWorkerExit: false });
2140
2195
  }
2141
2196
  catch (err) {
2142
2197
  logger.error(`[${tag(current)}] Refused close because backing teardown was not verified: ${err}`);
2143
2198
  return { status: 'teardown_failed', err };
2144
2199
  }
2145
- return { status: 'closed', current, botCfg, card };
2200
+ // Returned (not thrown) refusal: the remote session could not be proven
2201
+ // cancelled, so the row stays active. Sending the closed card here would
2202
+ // tell the user it is gone while it keeps running.
2203
+ if (!closeResult.ok) {
2204
+ logger.error(`[${tag(current)}] Refused close: remote cancellation not proven (${closeResult.error})`);
2205
+ return { status: 'close_refused', result: closeResult };
2206
+ }
2207
+ if (closeResult.outcome === 'closed_with_residual') {
2208
+ return {
2209
+ status: 'closed_with_residual',
2210
+ current,
2211
+ botCfg,
2212
+ card,
2213
+ residual: closeResult.residual,
2214
+ };
2215
+ }
2216
+ return { status: 'closed', current, botCfg, card, patchClickedCardInPlace };
2146
2217
  });
2147
2218
  if (!closed) {
2148
2219
  return { toast: { type: 'warning', content: t('card.action.session_gone', undefined, localeForBot(larkAppId)) } };
@@ -2155,7 +2226,36 @@ export async function handleCardAction(data, deps, larkAppId) {
2155
2226
  },
2156
2227
  };
2157
2228
  }
2158
- const { current, botCfg, card } = closed;
2229
+ if (closed.status === 'closed_with_residual') {
2230
+ // Closed locally, with a residual. A LOCAL-subtree residual has no taskId,
2231
+ // so the old wording rendered "远端会话 undefined 未被取消" and pointed the
2232
+ // operator at a nonexistent remote session (round-11 P1-2).
2233
+ return {
2234
+ toast: {
2235
+ type: 'warning',
2236
+ content: closeResidualIsLocal(closed.residual)
2237
+ ? `会话已在本地关闭、远端会话已取消,但本机可能残留带凭证子进程未确认终止`
2238
+ + `(${describeCloseResidual(closed.residual)}),请人工核查该主机进程。`
2239
+ : `会话已在本地关闭,但远端会话 ${closed.residual.taskId} 未被取消`
2240
+ + '(控制面无法验证),需要人工清理。',
2241
+ },
2242
+ };
2243
+ }
2244
+ if (closed.status === 'close_refused') {
2245
+ const locClose = localeForBot(larkAppId);
2246
+ return {
2247
+ toast: {
2248
+ type: 'warning',
2249
+ content: closed.result.taskId
2250
+ ? t('card.action.close_refused_with_task', {
2251
+ error: closed.result.error,
2252
+ taskId: closed.result.taskId,
2253
+ }, locClose)
2254
+ : t('card.action.close_refused', { error: closed.result.error }, locClose),
2255
+ },
2256
+ };
2257
+ }
2258
+ const { current, botCfg, card, patchClickedCardInPlace } = closed;
2159
2259
  // The closed card carries session title / CLI name / workingDir / resume
2160
2260
  // command. In private-card mode those must not leak to the group — send the
2161
2261
  // closed card ephemeral to the same owner audience instead. No group
@@ -2171,6 +2271,14 @@ export async function handleCardAction(data, deps, larkAppId) {
2171
2271
  logger.info(`[${tag(current)}] Closed via card button (private close card → ${audience.length} owner(s))`);
2172
2272
  }
2173
2273
  else {
2274
+ if (patchClickedCardInPlace) {
2275
+ // Return the closed card as the callback response → Lark patches the
2276
+ // just-clicked streaming card in place (no delete, no separate send,
2277
+ // no "code: 300000" race). The "等待输入" card becomes the closed card
2278
+ // with its now-dead buttons removed.
2279
+ logger.info(`[${tag(current)}] Closed via card button (in-place patch)`);
2280
+ return JSON.parse(card);
2281
+ }
2174
2282
  await deliverEphemeralOrReply(current, operatorOpenId, card, 'interactive', () => sessionReply(rootId, card, 'interactive'));
2175
2283
  logger.info(`[${tag(current)}] Closed via card button`);
2176
2284
  }
@@ -2185,7 +2293,53 @@ export async function handleCardAction(data, deps, larkAppId) {
2185
2293
  const result = await resumeSession(targetSessionId, activeSessions);
2186
2294
  if (result.ok) {
2187
2295
  const cliName = sessionCliDisplayName(result.ds);
2188
- const resumeMsg = t('card.action.resume_success', { cliName }, localeForBot(result.ds.larkAppId));
2296
+ // Distinguish "route reactivated" from "CLI history restored": when
2297
+ // the adapter can only resume a precise cliSessionId and none was
2298
+ // persisted, the next spawn starts a FRESH session — say so instead
2299
+ // of claiming history is back.
2300
+ const resumeMsg = resumeStartsFresh(result.ds.session)
2301
+ ? t('card.action.resume_success_fresh', { cliName }, localeForBot(result.ds.larkAppId))
2302
+ : t('card.action.resume_success', { cliName }, localeForBot(result.ds.larkAppId));
2303
+ // Restore the ORIGINAL live streaming card (🖥️ header + usage line +
2304
+ // 显示输出/终端/操作链接/关闭会话) as a WITHDRAW-then-REPOST (old closed card
2305
+ // recalled, fresh card posted at the thread bottom), AND send the
2306
+ // "✅ 会话已恢复…" text follow-up — both are wanted.
2307
+ // Ordering is load-bearing for two reasons:
2308
+ // 1) ACK the callback FIRST (bare `return` → empty ACK), THEN
2309
+ // post/delete in the background — deleting the just-clicked card
2310
+ // inside the callback response races it and triggers client
2311
+ // "code: 300000".
2312
+ // 2) POST the fresh card BEFORE deleting the old one, so the thread
2313
+ // never briefly shows zero cards (same invariant as park→recall).
2314
+ // Skip in private-card mode (clicked card may be an ephemeral snapshot).
2315
+ const botCfgResume = getBot(result.ds.larkAppId).config;
2316
+ if (cardMessageId && value?.visibility !== 'private' && !botCfgResume.privateCard) {
2317
+ const staleCardId = cardMessageId;
2318
+ const resumedDs = result.ds;
2319
+ void (async () => {
2320
+ try {
2321
+ const freshCardId = await sessionReply(rootId, buildStreamingCardJson(resumedDs), 'interactive');
2322
+ resumedDs.streamCardId = freshCardId;
2323
+ persistStreamCardState(resumedDs);
2324
+ await deleteMessage(resumedDs.larkAppId, staleCardId).catch(() => { });
2325
+ // Also send the "✅ 会话已恢复…" text follow-up (the original resume
2326
+ // behavior). Both are wanted: the live streaming card AND the text
2327
+ // prompt telling the user to send a message to continue.
2328
+ await deliverEphemeralOrReply(resumedDs, operatorOpenId, resumeMsg, 'text', () => sessionReply(rootId, resumeMsg));
2329
+ logger.info(`[${targetSessionId.substring(0, 8)}] Resumed via card button (withdraw + repost streaming card + text)`);
2330
+ }
2331
+ catch (err) {
2332
+ logger.warn(`[${targetSessionId.substring(0, 8)}] resume card repost failed: ${err instanceof Error ? err.message : String(err)}`);
2333
+ }
2334
+ })();
2335
+ // Bare `return` (→ undefined) so the dispatcher's shaper emits a
2336
+ // genuine empty ACK `{}`. Returning `{}` here would instead be
2337
+ // truthy and get wrapped as `{card:{type:raw,data:{}}}` — an
2338
+ // in-place patch with an empty card body (invalid), racing the
2339
+ // background deleteMessage above. Matches every other empty-ACK in
2340
+ // this handler.
2341
+ return; // fast empty ACK; card work happens in background
2342
+ }
2189
2343
  await deliverEphemeralOrReply(result.ds, operatorOpenId, resumeMsg, 'text', () => sessionReply(rootId, resumeMsg));
2190
2344
  logger.info(`[${targetSessionId.substring(0, 8)}] Resumed via card button`);
2191
2345
  }
@@ -3075,12 +3229,13 @@ export async function handleCardAction(data, deps, larkAppId) {
3075
3229
  logger.info(`Repo card action blocked for ${operatorOpenId} (pending=${targetDs.pendingRepo})`);
3076
3230
  return { toast: { type: 'error', content: t('card.grant.toast_no_repo_perm', undefined, localeForBot(targetDs.larkAppId)) } };
3077
3231
  }
3078
- // Reject a live Riff repo/worktree replacement before slug generation or
3232
+ // Reject a live REMOTE repo/worktree replacement before slug generation or
3079
3233
  // any local/remote Git side effect. First-spawn pendingRepo selections stay
3080
- // recoverable when a synchronous fork failure has already stamped Riff.
3081
- if (!targetDs.pendingRepo && isRiffBackendSession(targetDs)) {
3082
- await sessionReply(rootId, t('cmd.cd.riff_unsupported', undefined, localeForBot(targetDs.larkAppId)));
3083
- logger.warn(`[${tag(targetDs)}] Repo switch refused before Git work: Riff session requires explicit close before replacement`);
3234
+ // recoverable when a synchronous fork failure has already stamped the
3235
+ // remote backend.
3236
+ if (!targetDs.pendingRepo && isRemoteBackendSession(targetDs)) {
3237
+ await sessionReply(rootId, t('cmd.cd.remote_unsupported', undefined, localeForBot(targetDs.larkAppId)));
3238
+ logger.warn(`[${tag(targetDs)}] Repo switch refused before Git work: remote session requires explicit close before replacement`);
3084
3239
  return;
3085
3240
  }
3086
3241
  // Resolve the project name from cached scan