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
@@ -0,0 +1,335 @@
1
+ /**
2
+ * `/issue` 的命令入口与卡片回调。
3
+ *
4
+ * 卡片渲染在 [[issue-card]](纯数据、无副作用),这里负责取数、鉴权、跑领取流程。
5
+ *
6
+ * ## 谁能操作
7
+ *
8
+ * 两道门,都 fail-closed:
9
+ * 1. **allowedUsers**——`/issue` 会真的领任务、建群、起 agent,不是只读命令,按 bot 的
10
+ * 管理员名单来(与 `/skills attach` 同一套)。
11
+ * 2. **invoker lock**——卡片带 `invoker_open_id`,只有发起那个人能点。群里别人点了不算。
12
+ * 这条不是洁癖:平台的 claim 是按**本机 owner** 记的,不是按点击者记的。谁点都能领的
13
+ * 话,任务会记在 owner 头上而点的人是别人,归属直接错位。
14
+ *
15
+ * 身份只认 `operator.*`(Lark 校验过),绝不从 `action.value` 里读——那份是卡片里带回来的,
16
+ * 未经校验。
17
+ */
18
+ import { logger } from '../../utils/logger.js';
19
+ import { scanMultipleProjects } from '../../services/project-scanner.js';
20
+ import { configuredWorkingDirs, expandHomePath } from '../../utils/working-dir.js';
21
+ import { ISSUE_ACTION_CLAIM_CANCEL, ISSUE_ACTION_CLAIM_CONFIRM, ISSUE_ACTION_CLAIM_DIR, ISSUE_ACTION_CLAIM_OPEN, ISSUE_ACTION_PAGE, ISSUE_ACTION_REFRESH, ISSUE_ACTION_TEAM, buildClaimConfirmCard, buildClaimResultCard, buildIssueBoardCard, claimFailureHint, matchRepo, } from './issue-card.js';
22
+ function toast(content) {
23
+ return { toast: { type: 'error', content } };
24
+ }
25
+ /** 把内部统一产出的卡片字符串包成 Lark 回调要的信封。 */
26
+ function asCallback(r) {
27
+ if ('toast' in r)
28
+ return r;
29
+ return { card: { type: 'raw', data: JSON.parse(r.card) } };
30
+ }
31
+ /** 平台 issue → 卡片行。只留卡片用得到的字段,别把整个 doc 塞进 action.value。 */
32
+ function toRow(i) {
33
+ return {
34
+ issueId: i._id,
35
+ title: i.title,
36
+ ...(i.targetRepoLabel ? { repoLabel: i.targetRepoLabel } : {}),
37
+ stateRev: i.stateRev,
38
+ ...(i.claim?.name ? { claimedByName: i.claim.name } : {}),
39
+ };
40
+ }
41
+ /**
42
+ * 扫出该 bot 可选的仓库。
43
+ *
44
+ * 不能直接用 `workingDirs`:它常常配的是一个工作区父目录(`~/claude-code-workspace`),
45
+ * 直接当候选,选中的会是工作区根目录。扫一层才拿得到真正的仓库和 worktree。
46
+ */
47
+ export function reposFor(larkAppId, deps) {
48
+ const dirs = configuredWorkingDirs({ workingDirs: deps.workingDirs(larkAppId) }).map(expandHomePath);
49
+ if (!dirs.length)
50
+ return [];
51
+ try {
52
+ return scanMultipleProjects(dirs, 3, { includeWorktrees: true }).map((p) => ({
53
+ name: p.name,
54
+ path: p.path,
55
+ ...(p.branch ? { branch: p.branch } : {}),
56
+ }));
57
+ }
58
+ catch (e) {
59
+ // 扫描失败不该让整个命令挂掉:回落到空候选,确认卡会说明"没扫到仓库"。
60
+ logger.warn(`[issue] 扫描仓库失败: ${String(e?.message ?? e)}`);
61
+ return [];
62
+ }
63
+ }
64
+ async function buildBoard(larkAppId, deps, opts) {
65
+ const teams = await deps.fetchTeams();
66
+ if (!teams.ok || !teams.value) {
67
+ return toast(teams.reason === 'unbound' ? '本机还没有绑定 botmux 平台' : `拉取团队失败:${teams.reason}`);
68
+ }
69
+ if (!teams.value.length)
70
+ return toast('你不在任何 botmux 平台团队里');
71
+ const teamId = opts.teamId && teams.value.some((t) => t.teamId === opts.teamId) ? opts.teamId : teams.value[0].teamId;
72
+ const team = teams.value.find((t) => t.teamId === teamId);
73
+ const issues = await deps.fetchIssues(teamId);
74
+ if (!issues.ok || !issues.value)
75
+ return toast(`拉取任务失败:${issues.reason}`);
76
+ const s = issues.value;
77
+ const data = {
78
+ teamId,
79
+ teamName: team.teamName,
80
+ teams: teams.value,
81
+ sections: {
82
+ needsAttention: (s.needsAttention ?? []).map(toRow),
83
+ todo: (s.todo ?? []).map(toRow),
84
+ inProgress: (s.inProgress ?? []).map(toRow),
85
+ inReview: (s.inReview ?? []).map(toRow),
86
+ done: (s.done ?? []).map(toRow),
87
+ },
88
+ page: opts.page ?? 0,
89
+ invokerOpenId: opts.invokerOpenId,
90
+ };
91
+ return { card: buildIssueBoardCard(data) };
92
+ }
93
+ /** `/issue`(裸)→ 看板卡片。 */
94
+ export async function handleIssueCommand(larkAppId, senderOpenId, deps) {
95
+ if (!senderOpenId)
96
+ return toast('无法识别操作者身份');
97
+ const admins = deps.allowedUsers(larkAppId);
98
+ if (!admins.length)
99
+ return toast('这个 bot 还没有配置管理员');
100
+ if (!admins.includes(senderOpenId))
101
+ return toast('只有管理员可以操作 Issue Board');
102
+ return buildBoard(larkAppId, deps, { invokerOpenId: senderOpenId });
103
+ }
104
+ function info(content) {
105
+ return { toast: { type: 'info', content } };
106
+ }
107
+ function err(content) {
108
+ return { toast: { type: 'error', content } };
109
+ }
110
+ /** 管理员门。三个群内命令共用;通过时返回 undefined。 */
111
+ function adminGate(larkAppId, senderOpenId, deps) {
112
+ if (!senderOpenId)
113
+ return err('无法识别操作者身份');
114
+ const admins = deps.allowedUsers(larkAppId);
115
+ if (!admins.length)
116
+ return err('这个 bot 还没有配置管理员');
117
+ if (!admins.includes(senderOpenId))
118
+ return err('只有管理员可以操作 Issue Board');
119
+ return undefined;
120
+ }
121
+ /**
122
+ * 依次试锚点,返回第一个「不是 no_binding」的结果。
123
+ *
124
+ * 锚点候选按 [[core/types]] 的 `sessionAnchorId` 语义给:拉群会话锚在 chatId、话题会话锚在
125
+ * rootMessageId。调用方两个都传、这里依次试——比让调用方先判 scope 简单,两个地址空间
126
+ * (`oc_` / `om_`)不会撞,试错没有歧义。
127
+ *
128
+ * 只要有一个锚点给出了非 no_binding 的结果就停:继续试下去会把真实失败盖成"没有领取记录"。
129
+ */
130
+ async function tryAnchors(anchorCandidates, run) {
131
+ let last;
132
+ for (const anchorId of anchorCandidates.filter((a) => !!a)) {
133
+ last = await run(anchorId);
134
+ if (last.ok || last.reason !== 'no_binding')
135
+ break;
136
+ }
137
+ return last;
138
+ }
139
+ /** 三个终态 bindState 各自的说法。糊成一句「已结束」人会以为自己记错了。 */
140
+ function terminalHint(bindState) {
141
+ if (bindState === 'done')
142
+ return '这条任务已经验收完成(done),平台上已经终结了。';
143
+ if (bindState === 'void')
144
+ return '这条领取此前被平台拒绝、已作废,无需再操作。';
145
+ return '这条领取此前就已经释放了,无需重复操作。';
146
+ }
147
+ /**
148
+ * `/issue release` → 释放当前会话领取的那个 issue,退回平台「待领取」。
149
+ *
150
+ * 在**领取时建出来的那个群里**发。返回文本而不是卡片:这是个一次性动作,结果就一句话,
151
+ * 发张卡反而重。
152
+ */
153
+ export async function handleIssueRelease(larkAppId, senderOpenId, anchorCandidates, deps) {
154
+ const denied = adminGate(larkAppId, senderOpenId, deps);
155
+ if (denied)
156
+ return denied;
157
+ const last = await tryAnchors(anchorCandidates, deps.runRelease);
158
+ if (!last)
159
+ return err('拿不到当前会话的锚点,无法定位领取记录');
160
+ if (last.ok) {
161
+ logger.info(`[issue] 释放成功 issue=${last.issueId} platform_already=${last.alreadyReleasedOnPlatform}`);
162
+ return info(last.alreadyReleasedOnPlatform
163
+ ? '✅ 已释放。平台上这条任务此前就已经不归本机了(可能被回收或已被别人领走),本机记录已同步。\n\n群和会话都还在,需要的话自己停会话或退群。'
164
+ : '✅ 已释放,任务已退回平台「待领取」,别人可以领了。\n\n群和会话都还在,**不会自动解散**——里面的对话记录还留着,要停会话发 `/stop`。');
165
+ }
166
+ if (last.reason === 'no_binding')
167
+ return err('这个会话没有领取任何平台任务,没什么可释放的。');
168
+ if (last.reason === 'already_released')
169
+ return info(terminalHint(last.bindState));
170
+ logger.warn(`[issue] 释放失败 detail=${last.detail} permanent=${last.permanent === true}`);
171
+ // 劝人重试之前先看这次失败是不是永久性的:401/403/404 再发一百次也一样,那句"稍后再试"
172
+ // 会让人一直重试到放弃,而真正该做的是去平台上看这条任务还在不在。
173
+ return err(last.permanent
174
+ ? `❌ 释放失败:${last.detail}\n\n平台明确拒绝了,重试也不会好转(凭证失效、或这条任务已被删除/归档)。去平台上确认这条任务的状态。`
175
+ : `❌ 释放失败:${last.detail}\n\n本机记录保持不变(平台仍认为这台机器持有),稍后可以再发一次 \`/issue release\`。`);
176
+ }
177
+ /**
178
+ * `/issue done` → 验收通过,把任务推到平台的终态。
179
+ *
180
+ * 这一步是**人的决策**,不是 agent 能自己走的:agent 交付只到「待验收」([[issue-report]]),
181
+ * 之后由人看过产出再决定完成还是打回。所以入口是群里的管理员命令,而不是 `botmux` 的某个
182
+ * 子命令——放在 CLI 里 agent 就能自己盖章验收,那这个状态就没有意义了。
183
+ *
184
+ * 平台侧 `done` 会清掉 claim(`clearsClaim`),这条领取就此终结、不能再释放。
185
+ */
186
+ export async function handleIssueDone(larkAppId, senderOpenId, anchorCandidates, deps) {
187
+ const denied = adminGate(larkAppId, senderOpenId, deps);
188
+ if (denied)
189
+ return denied;
190
+ const last = await tryAnchors(anchorCandidates, deps.runDone);
191
+ if (!last)
192
+ return err('拿不到当前会话的锚点,无法定位领取记录');
193
+ if (last.ok) {
194
+ logger.info(`[issue] 验收完成 issue=${last.issueId} platform_already=${last.alreadyReleasedOnPlatform}`);
195
+ return info(last.alreadyReleasedOnPlatform
196
+ ? '✅ 已标记完成。平台上这条任务此前就已经不归本机了,本机记录已同步。\n\n群和会话都还在,需要的话自己停会话或退群。'
197
+ : '🎉 已验收完成,平台上这条任务已终结(不能再释放了)。\n\n群和会话都还在,**不会自动解散**——要停会话发 `/stop`。');
198
+ }
199
+ if (last.reason === 'no_binding')
200
+ return err('这个会话没有领取任何平台任务,没什么可验收的。');
201
+ if (last.reason === 'already_released')
202
+ return info(terminalHint(last.bindState));
203
+ logger.warn(`[issue] 验收完成失败 detail=${last.detail} permanent=${last.permanent === true}`);
204
+ // 平台的追赶白名单不允许 needs_attention → done。这是设计而不是故障,得说清楚下一步。
205
+ const blocked = /invalid_transition/.test(last.detail ?? '');
206
+ return err(blocked
207
+ ? `❌ 平台拒绝了这次状态变更:${last.detail}\n\n多半是这条任务当前在「需要关注」——平台不允许从那里直接标完成。先去平台上处理(或发 \`/issue release\` 退回待领取)。`
208
+ : last.permanent
209
+ ? `❌ 标记完成失败:${last.detail}\n\n平台明确拒绝了,重试也不会好转(凭证失效、或这条任务已被删除/归档)。去平台上确认这条任务的状态。`
210
+ : `❌ 标记完成失败:${last.detail}\n\n本机记录保持不变,稍后可以再发一次 \`/issue done\`。`);
211
+ }
212
+ /**
213
+ * `/issue status` → 摊开本机与平台两边的现状。
214
+ *
215
+ * 只读,所以**不设终态门**:这个命令的用处恰恰是在「这个群是不是已经结束了」存疑的时候
216
+ * 回答它,把终态 binding 当成"没有绑定"是把唯一的答案藏起来。
217
+ */
218
+ export async function handleIssueStatus(larkAppId, senderOpenId, anchorCandidates, deps) {
219
+ const denied = adminGate(larkAppId, senderOpenId, deps);
220
+ if (denied)
221
+ return denied;
222
+ const last = await tryAnchors(anchorCandidates, deps.runStatus);
223
+ if (!last)
224
+ return toast('拿不到当前会话的锚点,无法定位领取记录');
225
+ if (!last.ok)
226
+ return toast('这个会话没有领取任何平台任务。');
227
+ return { card: last.card };
228
+ }
229
+ /** 卡片回调。所有 `issue_*` action 都走这里。 */
230
+ export async function handleIssueCardAction(data, larkAppId, deps) {
231
+ return asCallback(await handleIssueCardActionInner(data, larkAppId, deps));
232
+ }
233
+ async function handleIssueCardActionInner(data, larkAppId, deps) {
234
+ const value = (data.action?.value ?? {});
235
+ const operatorOpenId = data.operator?.open_id;
236
+ const action = value.action;
237
+ // ── invoker lock(fail-closed)─────────────────────────────────────────
238
+ const invokerOpenId = value.invoker_open_id;
239
+ if (!invokerOpenId || !operatorOpenId || invokerOpenId !== operatorOpenId) {
240
+ return toast('这张卡片只有发起人能操作');
241
+ }
242
+ // 每次回调都重跑权限门:发卡之后管理员名单可能已经改了。
243
+ const admins = deps.allowedUsers(larkAppId);
244
+ if (!admins.includes(operatorOpenId))
245
+ return toast('只有管理员可以操作 Issue Board');
246
+ const teamId = value.teamId;
247
+ if (action === ISSUE_ACTION_REFRESH || action === ISSUE_ACTION_PAGE || action === ISSUE_ACTION_TEAM) {
248
+ // 团队切换的新 teamId 来自下拉的选中值,不在 value 里。
249
+ const picked = action === ISSUE_ACTION_TEAM ? selectedOption(data) ?? teamId : teamId;
250
+ const page = action === ISSUE_ACTION_PAGE ? Number(value.page) || 0 : 0;
251
+ return buildBoard(larkAppId, deps, { teamId: picked, page, invokerOpenId });
252
+ }
253
+ if (action === ISSUE_ACTION_CLAIM_CANCEL) {
254
+ return buildBoard(larkAppId, deps, { teamId, invokerOpenId });
255
+ }
256
+ if (action === ISSUE_ACTION_CLAIM_OPEN || action === ISSUE_ACTION_CLAIM_DIR) {
257
+ const issue = await findIssue(teamId, value.issueId, deps);
258
+ if (!issue)
259
+ return toast('这条任务已经不在待领取列表里了,刷新看看');
260
+ const repos = reposFor(larkAppId, deps);
261
+ // 下拉切换时以人选的为准;首次打开才用标签自动匹配。
262
+ const picked = action === ISSUE_ACTION_CLAIM_DIR ? selectedOption(data) : matchRepo(issue.targetRepoLabel, repos);
263
+ return {
264
+ card: buildClaimConfirmCard({
265
+ teamId,
266
+ issueId: issue._id,
267
+ title: issue.title,
268
+ ...(issue.targetRepoLabel ? { repoLabel: issue.targetRepoLabel } : {}),
269
+ stateRev: issue.stateRev,
270
+ repos,
271
+ ...(picked ? { selectedDir: picked } : {}),
272
+ invokerOpenId,
273
+ }),
274
+ };
275
+ }
276
+ if (action === ISSUE_ACTION_CLAIM_CONFIRM) {
277
+ const workingDir = value.dir;
278
+ if (!workingDir)
279
+ return toast('没有选择工作仓库');
280
+ // 重新拉一次而不是用卡片里的 stateRev:卡片可能已经放了很久,用陈旧的 CAS 基线
281
+ // 只会白白撞一次 409。拉不到就说明这条已经不可领了。
282
+ const issue = await findIssue(teamId, value.issueId, deps);
283
+ if (!issue)
284
+ return toast('这条任务已经不在待领取列表里了,刷新看看');
285
+ const r = await deps.runClaim({ issue, teamId, larkAppId, workingDir, invokerOpenId });
286
+ if (r.ok) {
287
+ logger.info(`[issue] 领取成功 issue=${issue._id} chat=${r.chatId}`);
288
+ return {
289
+ card: buildClaimResultCard({
290
+ ok: true,
291
+ title: issue.title,
292
+ chatId: r.chatId,
293
+ chatName: r.chatName,
294
+ ...(r.shareLink ? { shareLink: r.shareLink } : {}),
295
+ }),
296
+ };
297
+ }
298
+ logger.warn(`[issue] 领取失败 issue=${issue._id} stage=${r.stage} reason=${r.reason}`);
299
+ return {
300
+ card: buildClaimResultCard({
301
+ ok: false,
302
+ title: issue.title,
303
+ stage: r.stage,
304
+ reason: r.reason,
305
+ ...(claimFailureHint(r.stage) ? { hint: claimFailureHint(r.stage) } : {}),
306
+ }),
307
+ };
308
+ }
309
+ return toast(`未知操作:${action}`);
310
+ }
311
+ /** 从回调里取下拉选中值。Lark 在不同卡片版本下字段名不一致,两种都认。 */
312
+ function selectedOption(data) {
313
+ const opt = data.action?.option;
314
+ if (typeof opt === 'string' && opt)
315
+ return opt;
316
+ const opts = data.action?.options;
317
+ if (Array.isArray(opts) && typeof opts[0] === 'string' && opts[0])
318
+ return opts[0];
319
+ return undefined;
320
+ }
321
+ /** 按 issueId 在最新的分段列表里找。平台没有「按 id 单查」的机器入口,只能从列表里捞。 */
322
+ async function findIssue(teamId, issueId, deps) {
323
+ if (!teamId || !issueId)
324
+ return null;
325
+ const r = await deps.fetchIssues(teamId);
326
+ if (!r.ok || !r.value)
327
+ return null;
328
+ for (const list of Object.values(r.value)) {
329
+ const hit = list.find((i) => i._id === issueId);
330
+ if (hit)
331
+ return hit;
332
+ }
333
+ return null;
334
+ }
335
+ //# sourceMappingURL=issue-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-command.js","sourceRoot":"","sources":["../../../src/im/lark/issue-command.ts"],"names":[],"mappings":"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"}
@@ -41,4 +41,9 @@ export declare function larkHosts(brand?: Brand): LarkHosts;
41
41
  export declare function sdkDomain(brand?: Brand): string;
42
42
  /** 构造"在客户端打开群聊"的 AppLink,按 brand 选 applink host。 */
43
43
  export declare function chatAppLink(chatId: string, brand?: Brand): string;
44
+ /** Build an AppLink for a topic inside a topic group. `threadId` is the
45
+ * `omt_...` topic id, not the `om_...` root-message id used for routing.
46
+ * Lark's own message AppLinks use `thread_position=-1`; large positive values
47
+ * stop opening once a topic grows beyond the client's clamp range. */
48
+ export declare function threadAppLink(chatId: string, threadId: string, brand?: Brand): string;
44
49
  //# sourceMappingURL=lark-hosts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lark-hosts.d.ts","sourceRoot":"","sources":["../../../src/im/lark/lark-hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAEhD;AAED,sCAAsC;AACtC,wBAAgB,SAAS,CAAC,KAAK,GAAE,KAAgB,GAAG,SAAS,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAE,KAAgB,GAAG,MAAM,CAEzD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"lark-hosts.d.ts","sourceRoot":"","sources":["../../../src/im/lark/lark-hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAEhD;AAED,sCAAsC;AACtC,wBAAgB,SAAS,CAAC,KAAK,GAAE,KAAgB,GAAG,SAAS,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAE,KAAgB,GAAG,MAAM,CAEzD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAE3E;AAED;;;uEAGuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAK/F"}
@@ -46,4 +46,14 @@ export function sdkDomain(brand = 'feishu') {
46
46
  export function chatAppLink(chatId, brand = 'feishu') {
47
47
  return `https://${larkHosts(brand).applink}/client/chat/open?openChatId=${encodeURIComponent(chatId)}`;
48
48
  }
49
+ /** Build an AppLink for a topic inside a topic group. `threadId` is the
50
+ * `omt_...` topic id, not the `om_...` root-message id used for routing.
51
+ * Lark's own message AppLinks use `thread_position=-1`; large positive values
52
+ * stop opening once a topic grows beyond the client's clamp range. */
53
+ export function threadAppLink(chatId, threadId, brand = 'feishu') {
54
+ const host = larkHosts(brand).applink;
55
+ const chat = encodeURIComponent(chatId);
56
+ const thread = encodeURIComponent(threadId);
57
+ return `https://${host}/client/thread/open?open_chat_id=${chat}&open_thread_id=${thread}&openchatid=${chat}&openthreadid=${thread}&thread_position=-1`;
58
+ }
49
59
  //# sourceMappingURL=lark-hosts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lark-hosts.js","sourceRoot":"","sources":["../../../src/im/lark/lark-hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,MAAM,GAAc;IACxB,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF,MAAM,IAAI,GAAc;IACtB,OAAO,EAAE,4BAA4B;IACrC,QAAQ,EAAE,gCAAgC;IAC1C,OAAO,EAAE,uBAAuB;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1C,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,QAAe,QAAQ;IAC/C,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,QAAe,QAAQ;IAC/C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,QAAe,QAAQ;IACjE,OAAO,WAAW,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,gCAAgC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AACzG,CAAC"}
1
+ {"version":3,"file":"lark-hosts.js","sourceRoot":"","sources":["../../../src/im/lark/lark-hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,MAAM,GAAc;IACxB,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF,MAAM,IAAI,GAAc;IACtB,OAAO,EAAE,4BAA4B;IACrC,QAAQ,EAAE,gCAAgC;IAC1C,OAAO,EAAE,uBAAuB;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1C,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,QAAe,QAAQ;IAC/C,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,QAAe,QAAQ;IAC/C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,QAAe,QAAQ;IACjE,OAAO,WAAW,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,gCAAgC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;uEAGuE;AACvE,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAe,QAAQ;IACrF,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,WAAW,IAAI,oCAAoC,IAAI,mBAAmB,MAAM,eAAe,IAAI,iBAAiB,MAAM,qBAAqB,CAAC;AACzJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-parser.d.ts","sourceRoot":"","sources":["../../../src/im/lark/message-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-parser.d.ts","sourceRoot":"","sources":["../../../src/im/lark/message-parser.ts"],"names":[],"mappings":"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"}
@@ -783,15 +783,18 @@ export function extractCardContent(rawContent, numberer) {
783
783
  }
784
784
  const textNodes = [];
785
785
  const buttons = [];
786
- let hasFooterProof = false;
786
+ let inSignedFooter = false;
787
787
  for (const node of paragraph) {
788
+ if (inSignedFooter)
789
+ continue;
788
790
  if (node.tag === 'text') {
789
791
  if (node.text)
790
792
  textNodes.push(node.text);
791
793
  }
792
794
  else if (node.tag === 'a') {
793
795
  if (isBotmuxFooterMarkerAnchor(node.href, node.text)) {
794
- hasFooterProof = true;
796
+ inSignedFooter = true;
797
+ continue;
795
798
  }
796
799
  // Keep the href so links survive — Format A separates text/href,
797
800
  // and dropping href loses real content (规则配置/详情/Trace 链接).
@@ -841,8 +844,21 @@ export function extractCardContent(rawContent, numberer) {
841
844
  }
842
845
  }
843
846
  const line = textNodes.join('').trim();
844
- if (line && !hasFooterProof)
845
- parts.push(line);
847
+ if (line) {
848
+ if (inSignedFooter) {
849
+ const lastBreak = line.lastIndexOf('\n');
850
+ if (lastBreak >= 0) {
851
+ const beforeFooter = line.slice(0, lastBreak).trim();
852
+ if (beforeFooter)
853
+ parts.push(beforeFooter);
854
+ }
855
+ // No newline before the signed marker means the whole paragraph is
856
+ // footer chrome (brand/usage/recipient). Keep nothing.
857
+ }
858
+ else {
859
+ parts.push(line);
860
+ }
861
+ }
846
862
  if (buttons.length)
847
863
  parts.push(buttons.join(' '));
848
864
  }
@@ -1144,13 +1160,14 @@ function extractElementText(el, parts, imgLabel) {
1144
1160
  return;
1145
1161
  const tag = el.tag;
1146
1162
  // The public element id alone is not ownership proof: third-party cards may
1147
- // collide with it. New botmux footers carry all four invariants together.
1163
+ // collide with it. New botmux footers carry the id plus the exact reserved
1164
+ // marker; unexpected large text stays visible rather than being stripped.
1148
1165
  const elementText = el.text?.content ?? el.content;
1149
1166
  if (el.element_id === REPLY_CARD_FOOTER_ELEMENT_ID
1150
1167
  && tag === 'markdown'
1151
- && el.text_size === 'notation_small_v2'
1168
+ && (el.text_size === undefined || el.text_size === 'notation_small_v2')
1152
1169
  && typeof elementText === 'string'
1153
- && isSignedFormatBFooterLine(elementText)) {
1170
+ && hasExactMarkerMarkdown(elementText)) {
1154
1171
  return;
1155
1172
  }
1156
1173
  // div / markdown / plain_text blocks