botmux 3.9.1 → 3.10.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 (374) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/.runtime-build-id +1 -1
  4. package/dist/adapters/cli/codex.d.ts.map +1 -1
  5. package/dist/adapters/cli/codex.js +6 -0
  6. package/dist/adapters/cli/codex.js.map +1 -1
  7. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  8. package/dist/adapters/cli/opencode.js +7 -1
  9. package/dist/adapters/cli/opencode.js.map +1 -1
  10. package/dist/adapters/cli/reasonix.d.ts +35 -0
  11. package/dist/adapters/cli/reasonix.d.ts.map +1 -0
  12. package/dist/adapters/cli/reasonix.js +236 -0
  13. package/dist/adapters/cli/reasonix.js.map +1 -0
  14. package/dist/adapters/cli/registry.d.ts +2 -1
  15. package/dist/adapters/cli/registry.d.ts.map +1 -1
  16. package/dist/adapters/cli/registry.js +4 -1
  17. package/dist/adapters/cli/registry.js.map +1 -1
  18. package/dist/adapters/cli/traex.d.ts.map +1 -1
  19. package/dist/adapters/cli/traex.js +87 -87
  20. package/dist/adapters/cli/traex.js.map +1 -1
  21. package/dist/adapters/cli/types.d.ts +5 -1
  22. package/dist/adapters/cli/types.d.ts.map +1 -1
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +253 -69
  25. package/dist/cli.js.map +1 -1
  26. package/dist/core/command-handler.d.ts +18 -4
  27. package/dist/core/command-handler.d.ts.map +1 -1
  28. package/dist/core/command-handler.js +274 -27
  29. package/dist/core/command-handler.js.map +1 -1
  30. package/dist/core/dashboard-ipc-server.d.ts +1 -0
  31. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  32. package/dist/core/dashboard-ipc-server.js +27 -3
  33. package/dist/core/dashboard-ipc-server.js.map +1 -1
  34. package/dist/core/dispatch.d.ts +54 -24
  35. package/dist/core/dispatch.d.ts.map +1 -1
  36. package/dist/core/dispatch.js +81 -27
  37. package/dist/core/dispatch.js.map +1 -1
  38. package/dist/core/input-turn-dedupe.d.ts +20 -0
  39. package/dist/core/input-turn-dedupe.d.ts.map +1 -0
  40. package/dist/core/input-turn-dedupe.js +57 -0
  41. package/dist/core/input-turn-dedupe.js.map +1 -0
  42. package/dist/core/local-terminal-opener.d.ts.map +1 -1
  43. package/dist/core/local-terminal-opener.js +10 -1
  44. package/dist/core/local-terminal-opener.js.map +1 -1
  45. package/dist/core/passthrough-commands.d.ts.map +1 -1
  46. package/dist/core/passthrough-commands.js +1 -1
  47. package/dist/core/passthrough-commands.js.map +1 -1
  48. package/dist/core/plugins/pm2.d.ts.map +1 -1
  49. package/dist/core/plugins/pm2.js +7 -1
  50. package/dist/core/plugins/pm2.js.map +1 -1
  51. package/dist/core/resource-monitor/attribution.d.ts.map +1 -1
  52. package/dist/core/resource-monitor/attribution.js +17 -1
  53. package/dist/core/resource-monitor/attribution.js.map +1 -1
  54. package/dist/core/resource-monitor/darwin.d.ts +145 -0
  55. package/dist/core/resource-monitor/darwin.d.ts.map +1 -0
  56. package/dist/core/resource-monitor/darwin.js +360 -0
  57. package/dist/core/resource-monitor/darwin.js.map +1 -0
  58. package/dist/core/resource-monitor/procfs.d.ts.map +1 -1
  59. package/dist/core/resource-monitor/procfs.js +6 -0
  60. package/dist/core/resource-monitor/procfs.js.map +1 -1
  61. package/dist/core/resource-monitor/types.d.ts +1 -1
  62. package/dist/core/resource-monitor/types.d.ts.map +1 -1
  63. package/dist/core/scheduler.d.ts.map +1 -1
  64. package/dist/core/scheduler.js +5 -2
  65. package/dist/core/scheduler.js.map +1 -1
  66. package/dist/core/session-discovery.d.ts.map +1 -1
  67. package/dist/core/session-discovery.js +3 -0
  68. package/dist/core/session-discovery.js.map +1 -1
  69. package/dist/core/session-manager.d.ts +3 -1
  70. package/dist/core/session-manager.d.ts.map +1 -1
  71. package/dist/core/session-manager.js +46 -0
  72. package/dist/core/session-manager.js.map +1 -1
  73. package/dist/core/session-marker.d.ts +1 -8
  74. package/dist/core/session-marker.d.ts.map +1 -1
  75. package/dist/core/session-marker.js +2 -50
  76. package/dist/core/session-marker.js.map +1 -1
  77. package/dist/core/types.d.ts +3 -1
  78. package/dist/core/types.d.ts.map +1 -1
  79. package/dist/core/types.js.map +1 -1
  80. package/dist/core/worker-pool.d.ts +17 -0
  81. package/dist/core/worker-pool.d.ts.map +1 -1
  82. package/dist/core/worker-pool.js +292 -9
  83. package/dist/core/worker-pool.js.map +1 -1
  84. package/dist/daemon.d.ts +11 -1
  85. package/dist/daemon.d.ts.map +1 -1
  86. package/dist/daemon.js +59 -15
  87. package/dist/daemon.js.map +1 -1
  88. package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
  89. package/dist/dashboard/daemon-internal-api.js +11 -2
  90. package/dist/dashboard/daemon-internal-api.js.map +1 -1
  91. package/dist/dashboard/groups-action-helpers.d.ts +2 -0
  92. package/dist/dashboard/groups-action-helpers.d.ts.map +1 -1
  93. package/dist/dashboard/groups-action-helpers.js +9 -0
  94. package/dist/dashboard/groups-action-helpers.js.map +1 -1
  95. package/dist/dashboard/groups-matrix-snapshot.d.ts +56 -0
  96. package/dist/dashboard/groups-matrix-snapshot.d.ts.map +1 -0
  97. package/dist/dashboard/groups-matrix-snapshot.js +127 -0
  98. package/dist/dashboard/groups-matrix-snapshot.js.map +1 -0
  99. package/dist/dashboard/resource-monitor-service.d.ts.map +1 -1
  100. package/dist/dashboard/resource-monitor-service.js +18 -2
  101. package/dist/dashboard/resource-monitor-service.js.map +1 -1
  102. package/dist/dashboard/web/app.d.ts.map +1 -1
  103. package/dist/dashboard/web/app.js +45 -4
  104. package/dist/dashboard/web/app.js.map +1 -1
  105. package/dist/dashboard/web/groups-api.js +1 -1
  106. package/dist/dashboard/web/groups-api.js.map +1 -1
  107. package/dist/dashboard/web/i18n.js +10 -10
  108. package/dist/dashboard/web/i18n.js.map +1 -1
  109. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  110. package/dist/dashboard/web/roles-page.js +26 -11
  111. package/dist/dashboard/web/roles-page.js.map +1 -1
  112. package/dist/dashboard-web/app.js +1 -1
  113. package/dist/dashboard-web/chunks/{bot-defaults-page-BHTQEWCH.js → bot-defaults-page-LTVOUDIS.js} +1 -1
  114. package/dist/dashboard-web/chunks/{chunk-KLZCQAHF.js → chunk-3UE7S77S.js} +1 -1
  115. package/dist/dashboard-web/chunks/{chunk-W77TPKZH.js → chunk-DCS35UMD.js} +1 -1
  116. package/dist/dashboard-web/chunks/{chunk-E3HZZXK5.js → chunk-MFQPCVHY.js} +4 -4
  117. package/dist/dashboard-web/chunks/{chunk-EZH56JCI.js → chunk-ZU3UUKAR.js} +1 -1
  118. package/dist/dashboard-web/chunks/{connectors-page-BP255CAX.js → connectors-page-5KWDIMKC.js} +1 -1
  119. package/dist/dashboard-web/chunks/{groups-page-CDHVXBUT.js → groups-page-FHOKYXMW.js} +1 -1
  120. package/dist/dashboard-web/chunks/{insights-page-57BFE6GT.js → insights-page-T2ZX2RWL.js} +1 -1
  121. package/dist/dashboard-web/chunks/{monitor-room-UTOYGQVF.js → monitor-room-YNVBAGR6.js} +1 -1
  122. package/dist/dashboard-web/chunks/{monitoring-page-WTHYAIUM.js → monitoring-page-LHM55YWN.js} +1 -1
  123. package/dist/dashboard-web/chunks/{office-page-JSMIB353.js → office-page-ATXVP7PW.js} +1 -1
  124. package/dist/dashboard-web/chunks/{overview-page-3VDBOH7L.js → overview-page-QYI3KBDD.js} +1 -1
  125. package/dist/dashboard-web/chunks/roles-page-56VWM6CD.js +1 -0
  126. package/dist/dashboard-web/chunks/{schedules-page-HHN736H6.js → schedules-page-S5K6U4EO.js} +1 -1
  127. package/dist/dashboard-web/chunks/{sessions-page-EIWOZD7A.js → sessions-page-WBP4N7D2.js} +1 -1
  128. package/dist/dashboard-web/chunks/{settings-page-2IUT5LS4.js → settings-page-QUZDQARR.js} +1 -1
  129. package/dist/dashboard-web/chunks/{skills-page-JKFKMUEM.js → skills-page-IFY7AEND.js} +1 -1
  130. package/dist/dashboard-web/chunks/{team-federation-page-Q2PXC3UY.js → team-federation-page-C7FJQPFZ.js} +1 -1
  131. package/dist/dashboard-web/chunks/{v3-page-EBQCD4AO.js → v3-page-2LMF3WWR.js} +1 -1
  132. package/dist/dashboard-web/chunks/{whiteboards-page-QZRMVNZN.js → whiteboards-page-3XC6QRMY.js} +1 -1
  133. package/dist/dashboard-web/style.css +2 -4
  134. package/dist/dashboard.js +65 -9
  135. package/dist/dashboard.js.map +1 -1
  136. package/dist/i18n/en.d.ts.map +1 -1
  137. package/dist/i18n/en.js +34 -7
  138. package/dist/i18n/en.js.map +1 -1
  139. package/dist/i18n/zh.d.ts.map +1 -1
  140. package/dist/i18n/zh.js +32 -7
  141. package/dist/i18n/zh.js.map +1 -1
  142. package/dist/im/lark/card-builder.d.ts +7 -0
  143. package/dist/im/lark/card-builder.d.ts.map +1 -1
  144. package/dist/im/lark/card-builder.js +56 -0
  145. package/dist/im/lark/card-builder.js.map +1 -1
  146. package/dist/im/lark/card-handler.d.ts.map +1 -1
  147. package/dist/im/lark/card-handler.js +51 -19
  148. package/dist/im/lark/card-handler.js.map +1 -1
  149. package/dist/im/lark/client.d.ts +10 -0
  150. package/dist/im/lark/client.d.ts.map +1 -1
  151. package/dist/im/lark/client.js +79 -0
  152. package/dist/im/lark/client.js.map +1 -1
  153. package/dist/im/lark/event-dispatcher.d.ts +14 -1
  154. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  155. package/dist/im/lark/event-dispatcher.js +171 -15
  156. package/dist/im/lark/event-dispatcher.js.map +1 -1
  157. package/dist/im/lark/issue-card.d.ts +223 -0
  158. package/dist/im/lark/issue-card.d.ts.map +1 -0
  159. package/dist/im/lark/issue-card.js +542 -0
  160. package/dist/im/lark/issue-card.js.map +1 -0
  161. package/dist/im/lark/issue-command-deps.d.ts +41 -0
  162. package/dist/im/lark/issue-command-deps.d.ts.map +1 -0
  163. package/dist/im/lark/issue-command-deps.js +195 -0
  164. package/dist/im/lark/issue-command-deps.js.map +1 -0
  165. package/dist/im/lark/issue-command.d.ts +137 -0
  166. package/dist/im/lark/issue-command.d.ts.map +1 -0
  167. package/dist/im/lark/issue-command.js +335 -0
  168. package/dist/im/lark/issue-command.js.map +1 -0
  169. package/dist/im/lark/lark-hosts.d.ts +5 -0
  170. package/dist/im/lark/lark-hosts.d.ts.map +1 -1
  171. package/dist/im/lark/lark-hosts.js +10 -0
  172. package/dist/im/lark/lark-hosts.js.map +1 -1
  173. package/dist/im/lark/message-parser.d.ts.map +1 -1
  174. package/dist/im/lark/message-parser.js +24 -7
  175. package/dist/im/lark/message-parser.js.map +1 -1
  176. package/dist/platform/issue-client.d.ts +201 -0
  177. package/dist/platform/issue-client.d.ts.map +1 -0
  178. package/dist/platform/issue-client.js +142 -0
  179. package/dist/platform/issue-client.js.map +1 -0
  180. package/dist/platform/platform-http.d.ts +4 -0
  181. package/dist/platform/platform-http.d.ts.map +1 -1
  182. package/dist/platform/platform-http.js +38 -2
  183. package/dist/platform/platform-http.js.map +1 -1
  184. package/dist/pm2-graceful-exit.d.ts +28 -0
  185. package/dist/pm2-graceful-exit.d.ts.map +1 -0
  186. package/dist/pm2-graceful-exit.js +39 -0
  187. package/dist/pm2-graceful-exit.js.map +1 -0
  188. package/dist/services/bridge-fallback-gate.d.ts +9 -2
  189. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  190. package/dist/services/bridge-fallback-gate.js +31 -19
  191. package/dist/services/bridge-fallback-gate.js.map +1 -1
  192. package/dist/services/issue-board-store.d.ts +214 -0
  193. package/dist/services/issue-board-store.d.ts.map +1 -0
  194. package/dist/services/issue-board-store.js +472 -0
  195. package/dist/services/issue-board-store.js.map +1 -0
  196. package/dist/services/issue-claim-flow.d.ts +160 -0
  197. package/dist/services/issue-claim-flow.d.ts.map +1 -0
  198. package/dist/services/issue-claim-flow.js +222 -0
  199. package/dist/services/issue-claim-flow.js.map +1 -0
  200. package/dist/services/issue-outbox-pump.d.ts +25 -0
  201. package/dist/services/issue-outbox-pump.d.ts.map +1 -0
  202. package/dist/services/issue-outbox-pump.js +102 -0
  203. package/dist/services/issue-outbox-pump.js.map +1 -0
  204. package/dist/services/issue-release.d.ts +78 -0
  205. package/dist/services/issue-release.d.ts.map +1 -0
  206. package/dist/services/issue-release.js +89 -0
  207. package/dist/services/issue-release.js.map +1 -0
  208. package/dist/services/issue-report.d.ts +72 -0
  209. package/dist/services/issue-report.d.ts.map +1 -0
  210. package/dist/services/issue-report.js +84 -0
  211. package/dist/services/issue-report.js.map +1 -0
  212. package/dist/services/issue-status-view.d.ts +52 -0
  213. package/dist/services/issue-status-view.d.ts.map +1 -0
  214. package/dist/services/issue-status-view.js +42 -0
  215. package/dist/services/issue-status-view.js.map +1 -0
  216. package/dist/services/issue-status-writer.d.ts +98 -0
  217. package/dist/services/issue-status-writer.d.ts.map +1 -0
  218. package/dist/services/issue-status-writer.js +123 -0
  219. package/dist/services/issue-status-writer.js.map +1 -0
  220. package/dist/services/message-listener-store.d.ts +18 -0
  221. package/dist/services/message-listener-store.d.ts.map +1 -1
  222. package/dist/services/message-listener-store.js +35 -10
  223. package/dist/services/message-listener-store.js.map +1 -1
  224. package/dist/services/message-listener.d.ts +17 -0
  225. package/dist/services/message-listener.d.ts.map +1 -1
  226. package/dist/services/message-listener.js +26 -0
  227. package/dist/services/message-listener.js.map +1 -1
  228. package/dist/services/traex-paths.d.ts +14 -2
  229. package/dist/services/traex-paths.d.ts.map +1 -1
  230. package/dist/services/traex-paths.js +16 -2
  231. package/dist/services/traex-paths.js.map +1 -1
  232. package/dist/services/traex-transcript.d.ts +33 -0
  233. package/dist/services/traex-transcript.d.ts.map +1 -1
  234. package/dist/services/traex-transcript.js +135 -28
  235. package/dist/services/traex-transcript.js.map +1 -1
  236. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  237. package/dist/setup/bot-config-editor.js +2 -0
  238. package/dist/setup/bot-config-editor.js.map +1 -1
  239. package/dist/setup/lark-scopes.json +1 -2
  240. package/dist/setup/verify-permissions.d.ts.map +1 -1
  241. package/dist/setup/verify-permissions.js +8 -0
  242. package/dist/setup/verify-permissions.js.map +1 -1
  243. package/dist/types.d.ts +34 -0
  244. package/dist/types.d.ts.map +1 -1
  245. package/dist/utils/child-env.d.ts +1 -1
  246. package/dist/utils/child-env.d.ts.map +1 -1
  247. package/dist/utils/child-env.js +13 -0
  248. package/dist/utils/child-env.js.map +1 -1
  249. package/dist/utils/file-lock.d.ts.map +1 -1
  250. package/dist/utils/file-lock.js +1 -1
  251. package/dist/utils/file-lock.js.map +1 -1
  252. package/dist/utils/global-install.d.ts.map +1 -1
  253. package/dist/utils/global-install.js +56 -10
  254. package/dist/utils/global-install.js.map +1 -1
  255. package/dist/utils/idle-detector.d.ts +4 -0
  256. package/dist/utils/idle-detector.d.ts.map +1 -1
  257. package/dist/utils/idle-detector.js +25 -0
  258. package/dist/utils/idle-detector.js.map +1 -1
  259. package/dist/utils/process-identity.d.ts +7 -0
  260. package/dist/utils/process-identity.d.ts.map +1 -0
  261. package/dist/utils/process-identity.js +62 -0
  262. package/dist/utils/process-identity.js.map +1 -0
  263. package/dist/worker.js +264 -24
  264. package/dist/worker.js.map +1 -1
  265. package/dist/workflows/events/payloads.d.ts +10 -10
  266. package/dist/workflows/events/schema.d.ts +28 -28
  267. package/dist/workflows/hostExecutors/registry.d.ts +2 -7
  268. package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
  269. package/dist/workflows/hostExecutors/registry.js.map +1 -1
  270. package/dist/workflows/shared/provider-reconciler.d.ts +1 -30
  271. package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -1
  272. package/dist/workflows/shared/provider-reconciler.js.map +1 -1
  273. package/dist/workflows/v3/artifact-contract.d.ts +41 -0
  274. package/dist/workflows/v3/artifact-contract.d.ts.map +1 -0
  275. package/dist/workflows/v3/artifact-contract.js +20 -0
  276. package/dist/workflows/v3/artifact-contract.js.map +1 -0
  277. package/dist/workflows/v3/botmux-attempt-lease.d.ts +7 -0
  278. package/dist/workflows/v3/botmux-attempt-lease.d.ts.map +1 -0
  279. package/dist/workflows/v3/botmux-attempt-lease.js +189 -0
  280. package/dist/workflows/v3/botmux-attempt-lease.js.map +1 -0
  281. package/dist/workflows/v3/botmux-host-policy.d.ts +7 -0
  282. package/dist/workflows/v3/botmux-host-policy.d.ts.map +1 -0
  283. package/dist/workflows/v3/botmux-host-policy.js +34 -0
  284. package/dist/workflows/v3/botmux-host-policy.js.map +1 -0
  285. package/dist/workflows/v3/cli-run.d.ts +1 -1
  286. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  287. package/dist/workflows/v3/cli-run.js +1 -1
  288. package/dist/workflows/v3/cli-run.js.map +1 -1
  289. package/dist/workflows/v3/contract.d.ts +8 -89
  290. package/dist/workflows/v3/contract.d.ts.map +1 -1
  291. package/dist/workflows/v3/contract.js +2 -8
  292. package/dist/workflows/v3/contract.js.map +1 -1
  293. package/dist/workflows/v3/core-control.d.ts +16 -0
  294. package/dist/workflows/v3/core-control.d.ts.map +1 -0
  295. package/dist/workflows/v3/core-control.js +60 -0
  296. package/dist/workflows/v3/core-control.js.map +1 -0
  297. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  298. package/dist/workflows/v3/daemon-run.js +2 -1
  299. package/dist/workflows/v3/daemon-run.js.map +1 -1
  300. package/dist/workflows/v3/dag-loader.d.ts +5 -0
  301. package/dist/workflows/v3/dag-loader.d.ts.map +1 -0
  302. package/dist/workflows/v3/dag-loader.js +22 -0
  303. package/dist/workflows/v3/dag-loader.js.map +1 -0
  304. package/dist/workflows/v3/dag.d.ts +2 -6
  305. package/dist/workflows/v3/dag.d.ts.map +1 -1
  306. package/dist/workflows/v3/dag.js +2 -24
  307. package/dist/workflows/v3/dag.js.map +1 -1
  308. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  309. package/dist/workflows/v3/ephemeral-pool.js +22 -12
  310. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  311. package/dist/workflows/v3/event-contract.d.ts +273 -0
  312. package/dist/workflows/v3/event-contract.d.ts.map +1 -0
  313. package/dist/workflows/v3/event-contract.js +8 -0
  314. package/dist/workflows/v3/event-contract.js.map +1 -0
  315. package/dist/workflows/v3/gate-policy.d.ts +12 -0
  316. package/dist/workflows/v3/gate-policy.d.ts.map +1 -0
  317. package/dist/workflows/v3/gate-policy.js +20 -0
  318. package/dist/workflows/v3/gate-policy.js.map +1 -0
  319. package/dist/workflows/v3/gate-wait-store.d.ts +99 -0
  320. package/dist/workflows/v3/gate-wait-store.d.ts.map +1 -0
  321. package/dist/workflows/v3/gate-wait-store.js +263 -0
  322. package/dist/workflows/v3/gate-wait-store.js.map +1 -0
  323. package/dist/workflows/v3/host.js +1 -1
  324. package/dist/workflows/v3/host.js.map +1 -1
  325. package/dist/workflows/v3/human-gate.d.ts +4 -99
  326. package/dist/workflows/v3/human-gate.d.ts.map +1 -1
  327. package/dist/workflows/v3/human-gate.js +4 -275
  328. package/dist/workflows/v3/human-gate.js.map +1 -1
  329. package/dist/workflows/v3/in-process-attempt-lease.d.ts +10 -0
  330. package/dist/workflows/v3/in-process-attempt-lease.d.ts.map +1 -0
  331. package/dist/workflows/v3/in-process-attempt-lease.js +47 -0
  332. package/dist/workflows/v3/in-process-attempt-lease.js.map +1 -0
  333. package/dist/workflows/v3/journal.d.ts +2 -275
  334. package/dist/workflows/v3/journal.d.ts.map +1 -1
  335. package/dist/workflows/v3/journal.js.map +1 -1
  336. package/dist/workflows/v3/library-service.js +1 -1
  337. package/dist/workflows/v3/library-service.js.map +1 -1
  338. package/dist/workflows/v3/orchestrator.d.ts +1 -2
  339. package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
  340. package/dist/workflows/v3/orchestrator.js.map +1 -1
  341. package/dist/workflows/v3/portable-artifact-snapshot.d.ts +15 -0
  342. package/dist/workflows/v3/portable-artifact-snapshot.d.ts.map +1 -0
  343. package/dist/workflows/v3/portable-artifact-snapshot.js +76 -0
  344. package/dist/workflows/v3/portable-artifact-snapshot.js.map +1 -0
  345. package/dist/workflows/v3/portable-final-outputs.d.ts +37 -0
  346. package/dist/workflows/v3/portable-final-outputs.d.ts.map +1 -0
  347. package/dist/workflows/v3/portable-final-outputs.js +137 -0
  348. package/dist/workflows/v3/portable-final-outputs.js.map +1 -0
  349. package/dist/workflows/v3/portable-run-snapshot.d.ts +14 -0
  350. package/dist/workflows/v3/portable-run-snapshot.d.ts.map +1 -0
  351. package/dist/workflows/v3/portable-run-snapshot.js +176 -0
  352. package/dist/workflows/v3/portable-run-snapshot.js.map +1 -0
  353. package/dist/workflows/v3/portable-runtime.d.ts +83 -0
  354. package/dist/workflows/v3/portable-runtime.d.ts.map +1 -0
  355. package/dist/workflows/v3/portable-runtime.js +135 -0
  356. package/dist/workflows/v3/portable-runtime.js.map +1 -0
  357. package/dist/workflows/v3/runtime-host-contract.d.ts +182 -0
  358. package/dist/workflows/v3/runtime-host-contract.d.ts.map +1 -0
  359. package/dist/workflows/v3/runtime-host-contract.js +9 -0
  360. package/dist/workflows/v3/runtime-host-contract.js.map +1 -0
  361. package/dist/workflows/v3/runtime.d.ts +12 -226
  362. package/dist/workflows/v3/runtime.d.ts.map +1 -1
  363. package/dist/workflows/v3/runtime.js +14 -3173
  364. package/dist/workflows/v3/runtime.js.map +1 -1
  365. package/dist/workflows/v3/shared-node-runtime.d.ts +203 -0
  366. package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -0
  367. package/dist/workflows/v3/shared-node-runtime.js +2978 -0
  368. package/dist/workflows/v3/shared-node-runtime.js.map +1 -0
  369. package/dist/workflows/v3/shared-runtime.d.ts +17 -0
  370. package/dist/workflows/v3/shared-runtime.d.ts.map +1 -0
  371. package/dist/workflows/v3/shared-runtime.js +12 -0
  372. package/dist/workflows/v3/shared-runtime.js.map +1 -0
  373. package/package.json +4 -1
  374. package/dist/dashboard-web/chunks/roles-page-LHVAU2BI.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"platform-http.js","sourceRoot":"","sources":["../../src/platform/platform-http.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,wDAAwD;AACxD,2DAA2D;AAC3D,gDAAgD;AAChD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAanD,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAa,EAAE,OAAwB,EAAE;IAC7E,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,SAAS,CACnB;YACE,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,MAAM;YACN,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;SAClF,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,IAAI,GAAY,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;gBACD,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"platform-http.js","sourceRoot":"","sources":["../../src/platform/platform-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * PM2 only receives an exit code plus a signal. For signal exits Node reports
3
+ * a null code, which PM2 normalizes to 0 before applying `stop_exit_codes`.
4
+ * Therefore 0 cannot safely mean "intentional shutdown" for a PM2-managed
5
+ * process: SIGKILL would be mistaken for a clean stop and never restarted.
6
+ */
7
+ export declare const PM2_GRACEFUL_EXIT_CODE = 90;
8
+ export declare const PM2_GRACEFUL_EXIT_CODE_ENV = "BOTMUX_PM2_GRACEFUL_EXIT_CODE";
9
+ export declare function pm2ManagedExitConfig(): {
10
+ stopExitCodes: number[];
11
+ env: Record<string, string>;
12
+ };
13
+ /** Keep direct/foreground launches on the conventional successful exit code. */
14
+ export declare function gracefulProcessExitCode(env?: NodeJS.ProcessEnv): number;
15
+ /**
16
+ * Strip the graceful-exit sentinel from an env destined for a child/spawned
17
+ * process, returning a fresh shallow copy (never mutates the input). Only the
18
+ * two PM2-managed cores (daemon.ts, dashboard.ts) may see this marker;
19
+ * anything they fork/spawn that inherits it — a worker, a CLI child, a plugin
20
+ * PM2 app, a local terminal — could re-launch a foreground `botmux` and then
21
+ * exit 90 on a clean stop, which a supervisor misreads as a crash. Boundaries
22
+ * that copy raw `process.env` (pm2Env, spawnDetached) call this; boundaries
23
+ * with a key deny-list (redactChildEnv, workerForkEnv) list the key there
24
+ * instead. Always returns a new object so callers can safely mutate the result
25
+ * (e.g. delete other keys) without touching process.env.
26
+ */
27
+ export declare function stripPm2GracefulExitMarker(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
28
+ //# sourceMappingURL=pm2-graceful-exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-graceful-exit.d.ts","sourceRoot":"","sources":["../src/pm2-graceful-exit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,0BAA0B,kCAAkC,CAAC;AAE1E,wBAAgB,oBAAoB,IAAI;IACtC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAKA;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAIpF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * PM2 only receives an exit code plus a signal. For signal exits Node reports
3
+ * a null code, which PM2 normalizes to 0 before applying `stop_exit_codes`.
4
+ * Therefore 0 cannot safely mean "intentional shutdown" for a PM2-managed
5
+ * process: SIGKILL would be mistaken for a clean stop and never restarted.
6
+ */
7
+ // Keep the sentinel outside POSIX sysexits (64-78) and signal-derived 128+N.
8
+ export const PM2_GRACEFUL_EXIT_CODE = 90;
9
+ export const PM2_GRACEFUL_EXIT_CODE_ENV = 'BOTMUX_PM2_GRACEFUL_EXIT_CODE';
10
+ export function pm2ManagedExitConfig() {
11
+ return {
12
+ stopExitCodes: [PM2_GRACEFUL_EXIT_CODE],
13
+ env: { [PM2_GRACEFUL_EXIT_CODE_ENV]: String(PM2_GRACEFUL_EXIT_CODE) },
14
+ };
15
+ }
16
+ /** Keep direct/foreground launches on the conventional successful exit code. */
17
+ export function gracefulProcessExitCode(env = process.env) {
18
+ return env[PM2_GRACEFUL_EXIT_CODE_ENV] === String(PM2_GRACEFUL_EXIT_CODE)
19
+ ? PM2_GRACEFUL_EXIT_CODE
20
+ : 0;
21
+ }
22
+ /**
23
+ * Strip the graceful-exit sentinel from an env destined for a child/spawned
24
+ * process, returning a fresh shallow copy (never mutates the input). Only the
25
+ * two PM2-managed cores (daemon.ts, dashboard.ts) may see this marker;
26
+ * anything they fork/spawn that inherits it — a worker, a CLI child, a plugin
27
+ * PM2 app, a local terminal — could re-launch a foreground `botmux` and then
28
+ * exit 90 on a clean stop, which a supervisor misreads as a crash. Boundaries
29
+ * that copy raw `process.env` (pm2Env, spawnDetached) call this; boundaries
30
+ * with a key deny-list (redactChildEnv, workerForkEnv) list the key there
31
+ * instead. Always returns a new object so callers can safely mutate the result
32
+ * (e.g. delete other keys) without touching process.env.
33
+ */
34
+ export function stripPm2GracefulExitMarker(env) {
35
+ const next = { ...env };
36
+ delete next[PM2_GRACEFUL_EXIT_CODE_ENV];
37
+ return next;
38
+ }
39
+ //# sourceMappingURL=pm2-graceful-exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2-graceful-exit.js","sourceRoot":"","sources":["../src/pm2-graceful-exit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,+BAA+B,CAAC;AAE1E,MAAM,UAAU,oBAAoB;IAIlC,OAAO;QACL,aAAa,EAAE,CAAC,sBAAsB,CAAC;QACvC,GAAG,EAAE,EAAE,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAAE;KACtE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,OAAO,GAAG,CAAC,0BAA0B,CAAC,KAAK,MAAM,CAAC,sBAAsB,CAAC;QACvE,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAsB;IAC/D,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,5 +1,12 @@
1
- export declare const BRIDGE_NO_REPLY_SENTINEL = "BOTMUX_NO_REPLY";
2
- export declare function isBridgeNoReplyFinal(finalText: string | undefined): boolean;
1
+ export declare const BRIDGE_NOTHING_TO_SEND_SENTINEL = "BOTMUX_NOTHING_TO_SEND";
2
+ /** Superseded token name. Instructions no longer teach it, but the matcher
3
+ * below still accepts it: during a rollout (and after a restart that restores
4
+ * sessions spawned before the rename) in-flight turns still carry the old
5
+ * token in their captured system prompt, and dropping recognition would leak
6
+ * that literal sentinel line into Lark. The reader stays liberal; only the
7
+ * instruction surface moved to the new name. */
8
+ export declare const BRIDGE_NO_REPLY_SENTINEL_LEGACY = "BOTMUX_NO_REPLY";
9
+ export declare function isBridgeNothingToSendFinal(finalText: string | undefined): boolean;
3
10
  export interface BridgeSendMarker {
4
11
  sentAtMs: number;
5
12
  messageId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-fallback-gate.d.ts","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAuB3E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;2DACuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B;;yCAEqC;IACrC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;qDACiD;IACjD,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B;mFAC+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;gEAC4D;IAC5D,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CACvD;AAID;;;;;;oFAMoF;AACpF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW9E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,aAAa,CAAC,GAAG,SAAS,CAUrE;AA8BD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,EACrB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,SAAS,EAAE,OAAO,GACjB,OAAO,CAST;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA2B2D;AAC3D,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,eAAe,EACrB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,SAAS,EAAE,OAAO,GACjB,OAAO,CAMT"}
1
+ {"version":3,"file":"bridge-fallback-gate.d.ts","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE;;;;;iDAKiD;AACjD,eAAO,MAAM,+BAA+B,oBAAoB,CAAC;AAOjE,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAuBjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;2DACuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B;;yCAEqC;IACrC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;qDACiD;IACjD,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B;mFAC+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;gEAC4D;IAC5D,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CACvD;AAID;;;;;;oFAMoF;AACpF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW9E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,aAAa,CAAC,GAAG,SAAS,CAUrE;AA8BD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,EACrB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,SAAS,EAAE,OAAO,GACjB,OAAO,CAST;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA2B2D;AAC3D,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,eAAe,EACrB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,SAAS,EAAE,OAAO,GACjB,OAAO,CAMT"}
@@ -8,14 +8,15 @@
8
8
  * disk and threads them through here.
9
9
  *
10
10
  * Rules:
11
- * - Non-adopt + no-reply sentinel terminator: suppress the whole turn.
12
- * Botmux-aware models use this explicit protocol when a turn genuinely
13
- * needs no chat response. The signal is the LAST non-empty line of the
14
- * final being exactly `BOTMUX_NO_REPLY` — models almost always explain
15
- * the silence first and then append the token on its own line, so a
16
- * full-string exact match leaked the literal token into Lark. A token
17
- * that only appears inline (mid-sentence, or with prose after it) is
18
- * still a normal answer and is NOT guessed away. See isBridgeNoReplyFinal.
11
+ * - Non-adopt + nothing-to-send sentinel terminator: suppress the whole turn.
12
+ * Botmux-aware models use this explicit protocol when a turn has nothing
13
+ * left to send (already sent, or genuinely no reply needed). The signal is
14
+ * the LAST non-empty line of the final being exactly `BOTMUX_NOTHING_TO_SEND`
15
+ * (or the legacy `BOTMUX_NO_REPLY`) models almost always explain the
16
+ * silence first and then append the token on its own line, so a full-string
17
+ * exact match leaked the literal token into Lark. A token that only appears
18
+ * inline (mid-sentence, or with prose after it) is still a normal answer and
19
+ * is NOT guessed away. See isBridgeNothingToSendFinal.
19
20
  * - Adopt mode never suppresses: in /adopt the model in the adopted
20
21
  * session is unaware of botmux, so transcript drain is the ONLY
21
22
  * channel from model to Lark. There's no `botmux send` to compete
@@ -41,30 +42,41 @@
41
42
  import { normaliseForFingerprint } from './bridge-turn-queue.js';
42
43
  const MATERIAL_FINAL_LENGTH_RATIO = 2;
43
44
  const MATERIAL_FINAL_MIN_EXTRA_CHARS = 120;
44
- export const BRIDGE_NO_REPLY_SENTINEL = 'BOTMUX_NO_REPLY';
45
- export function isBridgeNoReplyFinal(finalText) {
45
+ export const BRIDGE_NOTHING_TO_SEND_SENTINEL = 'BOTMUX_NOTHING_TO_SEND';
46
+ /** Superseded token name. Instructions no longer teach it, but the matcher
47
+ * below still accepts it: during a rollout (and after a restart that restores
48
+ * sessions spawned before the rename) in-flight turns still carry the old
49
+ * token in their captured system prompt, and dropping recognition would leak
50
+ * that literal sentinel line into Lark. The reader stays liberal; only the
51
+ * instruction surface moved to the new name. */
52
+ export const BRIDGE_NO_REPLY_SENTINEL_LEGACY = 'BOTMUX_NO_REPLY';
53
+ const BRIDGE_SENTINEL_TOKENS = [
54
+ BRIDGE_NOTHING_TO_SEND_SENTINEL,
55
+ BRIDGE_NO_REPLY_SENTINEL_LEGACY,
56
+ ];
57
+ export function isBridgeNothingToSendFinal(finalText) {
46
58
  if (finalText === undefined)
47
59
  return false;
48
60
  // Suppress the whole turn when the model's final ENDS WITH a standalone
49
- // no-reply sentinel line. We look at the LAST non-empty line only:
50
- // - pure `BOTMUX_NO_REPLY` → suppress
51
- // - `<prose>\n\nBOTMUX_NO_REPLY` → suppress the whole turn
52
- // - a final whose last non-empty line is prose → NOT a no-reply signal
61
+ // nothing-to-send sentinel line. We look at the LAST non-empty line only:
62
+ // - pure `BOTMUX_NOTHING_TO_SEND` → suppress
63
+ // - `<prose>\n\nBOTMUX_NOTHING_TO_SEND` → suppress the whole turn
64
+ // - a final whose last non-empty line is prose → NOT a sentinel signal
53
65
  // (the token inline in a sentence, or followed by more prose, still posts)
54
66
  // Full-string exact match was too brittle: botmux-aware models almost always
55
67
  // explain the silence first ("...no reply needed.") and then append the token
56
68
  // on its own line, which exact match let leak the literal token into Lark.
57
69
  // Trade-off (accepted): a genuine answer that happens to end with a bare
58
- // sentinel line is dropped WHOLE — the product wants a fully silent no-reply
59
- // turn over the safer strip-and-forward. The last-non-empty-line rule (not a
70
+ // sentinel line is dropped WHOLE — the product wants a fully silent turn
71
+ // over the safer strip-and-forward. The last-non-empty-line rule (not a
60
72
  // substring / endsWith test) keeps that risk to finals the model deliberately
61
- // terminated with the sentinel.
73
+ // terminated with the sentinel. Both the current and legacy tokens match.
62
74
  const lines = finalText.split('\n');
63
75
  for (let i = lines.length - 1; i >= 0; i--) {
64
76
  const line = lines[i].trim();
65
77
  if (line.length === 0)
66
78
  continue;
67
- return line === BRIDGE_NO_REPLY_SENTINEL;
79
+ return BRIDGE_SENTINEL_TOKENS.includes(line);
68
80
  }
69
81
  return false;
70
82
  }
@@ -125,7 +137,7 @@ function markerSetCoversFinal(markers, finalText) {
125
137
  export function shouldSuppressBridgeEmit(turn, nextBoundaryMs, markers, adoptMode) {
126
138
  if (adoptMode)
127
139
  return false;
128
- if (isBridgeNoReplyFinal(turn.finalText))
140
+ if (isBridgeNothingToSendFinal(turn.finalText))
129
141
  return true;
130
142
  if (turn.isLocal)
131
143
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-fallback-gate.js","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-fallback-gate.js","sourceRoot":"","sources":["../../src/services/bridge-fallback-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * localTaskRef 的**唯一**构造入口,且 `createBinding` 会自己调它——`CreateBindingInput`
3
+ * 里没有 localTaskRef 字段,调用方**没有**手拼的机会。
4
+ *
5
+ * 之所以做成内生而不是「约定调用方用这个函数」:拼反了顺序不会当场报错,要等平台 bind
6
+ * 记下的 localTaskRef 与崩溃恢复时的重确认对不上,那条 held 会话被判 claim_mismatch 作废
7
+ * 才暴露——离出错点太远。直接复用 botmux 自己的 `sessionKey`,与 activeSessions 键同源。
8
+ */
9
+ export declare function buildLocalTaskRef(anchorId: string, larkAppId: string): string;
10
+ /** 平台 IssueStatus 的线上取值(回写目标只用得到其中一部分,但解析要认全)。 */
11
+ export type IssueStatus = 'open' | 'claimed' | 'in_progress' | 'in_review' | 'done' | 'cancelling' | 'needs_attention' | 'reopened';
12
+ export type AttentionReason = 'cancel_delivery_timeout' | 'claim_activate_timeout' | 'task_blocked' | 'run_timeout';
13
+ /**
14
+ * 一条 issue ↔ 本机会话的绑定。
15
+ *
16
+ * `bindState` 对应 §六 的崩溃恢复分支,外加一个人为终态:
17
+ * - `pending` :claim 成功、binding 已落盘,但还没向平台 bind(群可能还没建出来)
18
+ * - `bound` :平台已接受 bind,本地会话可以 activate(发 kickoff @ bot)
19
+ * - `void` :补 bind 被平台拒(issue 被回收 / 别人领走 / 代次过期),这条作废
20
+ * - `released`:人主动释放([[issue-release]]),issue 已退回平台待领取池
21
+ * - `done` :人验收通过(`/issue done`),平台已终结这条 issue
22
+ *
23
+ * 三个终态都不再回写,但**不能合并**:`void` 是"平台不认这次领取",对账见到它要考虑群是不是
24
+ * 白建了;`released` 是"领取本来是好的,人不做了",群里有正经的工作记录,对账不该去动它;
25
+ * `done` 是"活干完并且验收了"。区分开也让日志能说清一个群到底是怎么结束的。
26
+ *
27
+ * 加终态时只改 `isActiveBindState` 一处——散落的 `!== 'void'` 式判断漏改一处,就会出现
28
+ * 「已结束的 issue 仍被当成本机持有」,而且全程不报错。
29
+ */
30
+ export interface IssueBinding {
31
+ /**
32
+ * **路由锚点**——主键,也是平台契约里的「本地任务」标识。
33
+ *
34
+ * 这里必须是 anchor 而**不是** botmux 的 session id:协议要求 bind(带 localTaskRef)
35
+ * 发生在 activate 之前,而 botmux 的会话是 kickoff 消息把 bot @ 起来之后才由 daemon
36
+ * 创建的——bind 那一刻根本还没有 session id。anchor 则在 kickoff 之前就存在:
37
+ * - 拉群模式 → `chatId`(chat-scope 会话的路由键,建群即得)
38
+ * - 话题模式 → `rootMessageId`(先发无 @ 的 seed 拿到,再发 threaded kickoff)
39
+ * 见 core/types.ts 的 `sessionAnchorId` / `sessionKey`。
40
+ */
41
+ anchorId: string;
42
+ /** 平台契约的 localTaskRef,取值就是 botmux 自己的 `sessionKey(anchorId, larkAppId)`
43
+ * = `<anchorId>::<larkAppId>`。复用它而不是另造一套:它本来就是本仓跨 bot 的规范会话
44
+ * 身份,且 `om_`(消息)与 `oc_`(群)两个地址空间不会碰撞。 */
45
+ localTaskRef: string;
46
+ larkAppId: string;
47
+ issueId: string;
48
+ teamId: string;
49
+ /** 绑到哪个平台(换绑/多平台时区分该往哪回写)。 */
50
+ platformBaseUrl: string;
51
+ /** 领取幂等键,必须是高熵随机(禁止由 issueId 派生)。全表唯一。 */
52
+ claimId: string;
53
+ /** 领取代次快照——回写栅栏,旧代次的迟到回写会被平台按 stale_epoch 丢弃。 */
54
+ claimEpoch: number;
55
+ bindState: 'pending' | 'bound' | 'void' | 'released' | 'done';
56
+ /** 会话所在的群。拉群模式下 === anchorId;话题模式下是承载话题的那个群。
57
+ * 崩溃恢复据此复用已建的群而不是再建一个。 */
58
+ chatId?: string;
59
+ /** 会话作用域:拉群 → 'chat'(一群一 issue 一会话);话题 → 'thread'。 */
60
+ scope: 'chat' | 'thread';
61
+ /** 本 binding 的 sourceSeq 分配计数器:单调、每 binding 唯一,平台的线上幂等只认它。 */
62
+ nextSourceSeq: number;
63
+ /** 已成功回写的状态(离线期间不动——去重合并要拿它和「最新未完成目标」一起比)。 */
64
+ lastSyncedStatus?: IssueStatus;
65
+ /** 上次回写后平台返回的 issue.stateRev,下次状态 CAS 用。 */
66
+ platformStateRev?: number;
67
+ createdAt: number;
68
+ updatedAt: number;
69
+ }
70
+ export interface IssueOutboxRow {
71
+ /** 仅本地行主键(去重发送用),不上送平台——平台幂等只认 sourceSeq。 */
72
+ writeId: string;
73
+ anchorId: string;
74
+ sourceSeq: number;
75
+ targetStatus: IssueStatus;
76
+ attentionReason?: AttentionReason;
77
+ claimId: string;
78
+ claimEpoch: number;
79
+ expectedStateRev?: number;
80
+ state: 'pending' | 'inflight' | 'done' | 'failed';
81
+ attempts: number;
82
+ nextRetryAt?: number;
83
+ lastError?: string;
84
+ createdAt: number;
85
+ }
86
+ export declare function listBindings(dataDir: string): IssueBinding[];
87
+ export declare function getBinding(dataDir: string, anchorId: string): IssueBinding | null;
88
+ /**
89
+ * 这条 binding 是否还代表「本机正持有这个 issue」。
90
+ *
91
+ * 抽成一个谓词而不是到处写 `!== 'void'`:终态从一个变成两个(`void` / `released`)时,
92
+ * 散落各处的判断只要漏改一处,就会出现「已释放的 issue 仍被当成已领取」——重领被拦、
93
+ * 回写继续发,而且全程不报错。加状态就改这一个地方。
94
+ */
95
+ export declare function isActiveBindState(state: IssueBinding['bindState']): boolean;
96
+ /** 按 claimId 反查——崩溃恢复的入口(§六:不依赖平台「按 claimId 查 issue」的接口,那个接口不存在)。 */
97
+ export declare function findBindingByClaimId(dataDir: string, claimId: string): IssueBinding | null;
98
+ /** 某 issue 当前在本机的活跃 binding(作废/已释放的不算)。用于「这个 issue 是不是我已经领了」。 */
99
+ export declare function findActiveBindingByIssue(dataDir: string, issueId: string): IssueBinding | null;
100
+ export interface IssueClaimIntent {
101
+ /** 主键。高熵随机,与平台 claim 用的是同一个值。 */
102
+ claimId: string;
103
+ issueId: string;
104
+ teamId: string;
105
+ claimEpoch: number;
106
+ platformBaseUrl: string;
107
+ /** 平台 claim 返回的 stateRev,后续 bind 的 CAS 基线。 */
108
+ platformStateRev: number;
109
+ /** 这个 issue 交给哪个 bot 跑(决定 localTaskRef 的 appId 段)。 */
110
+ larkAppId: string;
111
+ scope: 'chat' | 'thread';
112
+ /**
113
+ * 建群/发 seed 拿到 anchor 后回填。它出现 = 群已存在,对账时**不要再建一个**。
114
+ * 注意这份回填本身也可能崩在中间,所以对账不能只信它,还要按 claimId 去群里反查。
115
+ */
116
+ anchorId?: string;
117
+ chatId?: string;
118
+ createdAt: number;
119
+ updatedAt: number;
120
+ }
121
+ export declare function listClaimIntents(dataDir: string): IssueClaimIntent[];
122
+ export declare function getClaimIntent(dataDir: string, claimId: string): IssueClaimIntent | null;
123
+ /**
124
+ * 记下一次领取意图。**必须在 platform claim 返回成功后立刻调用,早于任何建群动作**。
125
+ *
126
+ * 同 claimId 重入返回既有记录(claim 本身幂等,重试不该产生第二条意图)。
127
+ */
128
+ export declare function recordClaimIntent(dataDir: string, input: Omit<IssueClaimIntent, 'createdAt' | 'updatedAt'>, now?: number): IssueClaimIntent;
129
+ /** 回填 anchorId / chatId(建群成功后)。 */
130
+ export declare function updateClaimIntent(dataDir: string, claimId: string, patch: Partial<Omit<IssueClaimIntent, 'claimId' | 'createdAt'>>, now?: number): IssueClaimIntent | null;
131
+ /**
132
+ * 领取流程走完(binding 已 bound)后清掉意图——此后 binding 自己就是完整证据。
133
+ *
134
+ * ⚠️ 清除必须**晚于** binding 落盘。反过来先清意图再写 binding,中间崩溃就同时丢掉了两份
135
+ * 证据,那个群彻底认不回来——这正是意图存在的意义。
136
+ */
137
+ export declare function clearClaimIntent(dataDir: string, claimId: string): boolean;
138
+ /** 对账分类:意图还在、但没有对应 binding 的,就是需要人/流程接手的悬空领取。 */
139
+ export declare function listDanglingClaimIntents(dataDir: string): IssueClaimIntent[];
140
+ /** 注意没有 `localTaskRef`:它由 `buildLocalTaskRef(anchorId, larkAppId)` 内生,见上。 */
141
+ export type CreateBindingInput = Omit<IssueBinding, 'nextSourceSeq' | 'createdAt' | 'updatedAt' | 'bindState' | 'localTaskRef'> & {
142
+ bindState?: IssueBinding['bindState'];
143
+ };
144
+ /**
145
+ * 写入一条 pending binding。**在建群/发 seed 拿到 anchorId 之后调用**——主键就是那个
146
+ * anchor,之前不可能有。放在 `createGroupWithBots` 的 `onChatCreated` 同步钩子里写,
147
+ * 让它成为「群已存在」到「群已归属某个 issue」之间的 durable boundary(见文件头时序)。
148
+ *
149
+ * 两条不变式都在这层强制,不指望调用方自觉:
150
+ * - **claimId 唯一**:同 claimId 重入直接返回既有行(本地幂等,对应 Desktop 侧的
151
+ * `UNIQUE(claim_id)`)——领取重试不会产生第二条 binding、也不会重复建群。
152
+ * - **一 issue 一活跃 binding**:同 issue 已有非 void 的 binding 却拿着不同 claimId 进来,
153
+ * 是调用方漏查(比如没先 `findActiveBindingByIssue`)。此时**抛错**而不是照写——写下去
154
+ * 就是同一个 issue 两个群、两个 agent 同时开工,而平台侧只认最后一次 claim,另一个群
155
+ * 会变成谁也不管的孤儿。抛在这里离原因最近;释放后重领是安全的(旧 binding 已置 void)。
156
+ */
157
+ export declare function createBinding(dataDir: string, input: CreateBindingInput, now?: number): IssueBinding;
158
+ /** 局部更新一条 binding(read-modify-write,保住并发写入的其它字段)。 */
159
+ export declare function updateBinding(dataDir: string, anchorId: string, patch: Partial<Omit<IssueBinding, 'anchorId' | 'createdAt'>>, now?: number): IssueBinding | null;
160
+ /** 删除一条 binding(会话彻底结束且 issue 已终态后清理)。返回是否删掉。 */
161
+ export declare function removeBinding(dataDir: string, anchorId: string): boolean;
162
+ export declare function listOutbox(dataDir: string, anchorId?: string): IssueOutboxRow[];
163
+ /**
164
+ * 投影一次「本会话应达的 issue 状态」到发件箱(§七 去重合并)。
165
+ *
166
+ * 合并规则(**与最新未完成目标比,不是与 lastSyncedStatus 比**):
167
+ * - 该 binding 已有 `pending` 行 → **就地覆盖**它的 targetStatus 并重分配 sourceSeq,不新增行;
168
+ * - 否则仅当 desired 与「最新目标 ∪ lastSyncedStatus」都不同才排一条新行。
169
+ *
170
+ * 为什么必须这样:离线期间 30s 一次的 tick 会反复投影,若每次都追加,恢复后会把一长串
171
+ * 早已过时的中间态依次发给平台——既刷无效自迁移,又让**最新**状态排在队尾迟迟到不了。
172
+ *
173
+ * 返回排出的行;无需回写时返回 null。
174
+ */
175
+ export declare function enqueueDesiredStatus(dataDir: string, anchorId: string, desired: IssueStatus, opts?: {
176
+ attentionReason?: AttentionReason;
177
+ expectedStateRev?: number;
178
+ }, now?: number): IssueOutboxRow | null;
179
+ /**
180
+ * 领取该 binding 的下一条待发行(`pending → inflight` 的 CAS)。
181
+ *
182
+ * **串行**:同一 binding 已有 inflight 行时返回 null——平台侧要求同一 issue 的 sourceSeq
183
+ * 单调到达,并发发送会让顺序乱掉。`nextRetryAt` 未到的行也不返回(退避)。
184
+ */
185
+ export declare function claimNextOutboxRow(dataDir: string, anchorId: string, now?: number): IssueOutboxRow | null;
186
+ /**
187
+ * 发送成功:标 done,并把平台返回的 stateRev / 已同步状态写回 binding。
188
+ *
189
+ * `applied: false` 用于「这条行不必再发了,但平台**没有**采纳它」——目前只有一种情况:
190
+ * 409 对账发现 claim 已易主。此时**绝不能**写 `lastSyncedStatus`:写了本地就以为
191
+ * "已经是 in_review 了",下一次交付会走幂等分支直接回成功,而平台上那条压根没变。
192
+ */
193
+ export declare function settleOutboxRow(dataDir: string, writeId: string, result: {
194
+ platformStateRev?: number;
195
+ platformLastSourceSeq?: number;
196
+ applied?: boolean;
197
+ }, now?: number): void;
198
+ /** 发送失败:退回 pending + 指数退避(上限 5min)。`fatal` 用于平台明确拒绝、重试无意义的情况。 */
199
+ export declare function failOutboxRow(dataDir: string, writeId: string, error: string, opts?: {
200
+ fatal?: boolean;
201
+ }, now?: number): void;
202
+ /**
203
+ * 启动对账:把本机所有 `inflight` 退回 `pending`。
204
+ *
205
+ * 进程在「标 inflight 后、记录响应前」崩溃时,那一行会永远停在 inflight 并**堵死该
206
+ * binding 的串行 pump**(claimNextOutboxRow 见到 inflight 就返回 null)。平台侧的
207
+ * sourceSeq 单调 + 终态幂等保证重复投递是安全的,所以无脑退回即可,不需要发送租约。
208
+ *
209
+ * 返回被退回的行数。
210
+ */
211
+ export declare function resetInflightToPending(dataDir: string): number;
212
+ /** 清理已完成的发件箱行(保留最近 `keep` 条便于排查)。返回清掉的行数。 */
213
+ export declare function pruneOutbox(dataDir: string, keep?: number): number;
214
+ //# sourceMappingURL=issue-board-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-board-store.d.ts","sourceRoot":"","sources":["../../src/services/issue-board-store.ts"],"names":[],"mappings":"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"}