botmux 3.4.3 → 3.5.2

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 (415) hide show
  1. package/README.en.md +10 -7
  2. package/README.md +11 -6
  3. package/dist/adapters/backend/herdr-backend.d.ts +43 -6
  4. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  5. package/dist/adapters/backend/herdr-backend.js +362 -28
  6. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  7. package/dist/adapters/backend/reproduce-command.d.ts +39 -0
  8. package/dist/adapters/backend/reproduce-command.d.ts.map +1 -0
  9. package/dist/adapters/backend/reproduce-command.js +63 -0
  10. package/dist/adapters/backend/reproduce-command.js.map +1 -0
  11. package/dist/adapters/backend/sandbox.d.ts +99 -279
  12. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  13. package/dist/adapters/backend/sandbox.js +424 -826
  14. package/dist/adapters/backend/sandbox.js.map +1 -1
  15. package/dist/adapters/backend/session-backend-selector.d.ts +10 -1
  16. package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
  17. package/dist/adapters/backend/session-backend-selector.js +73 -4
  18. package/dist/adapters/backend/session-backend-selector.js.map +1 -1
  19. package/dist/adapters/backend/types.d.ts +16 -0
  20. package/dist/adapters/backend/types.d.ts.map +1 -1
  21. package/dist/adapters/backend/types.js.map +1 -1
  22. package/dist/adapters/cli/codex.d.ts.map +1 -1
  23. package/dist/adapters/cli/codex.js +4 -0
  24. package/dist/adapters/cli/codex.js.map +1 -1
  25. package/dist/adapters/cli/fs-policy.d.ts +244 -0
  26. package/dist/adapters/cli/fs-policy.d.ts.map +1 -0
  27. package/dist/adapters/cli/fs-policy.js +539 -0
  28. package/dist/adapters/cli/fs-policy.js.map +1 -0
  29. package/dist/adapters/cli/pi-initial-prompt.d.ts.map +1 -1
  30. package/dist/adapters/cli/pi-initial-prompt.js +5 -1
  31. package/dist/adapters/cli/pi-initial-prompt.js.map +1 -1
  32. package/dist/adapters/cli/read-isolation.d.ts +14 -200
  33. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  34. package/dist/adapters/cli/read-isolation.js +18 -477
  35. package/dist/adapters/cli/read-isolation.js.map +1 -1
  36. package/dist/adapters/cli/traex.d.ts.map +1 -1
  37. package/dist/adapters/cli/traex.js +5 -0
  38. package/dist/adapters/cli/traex.js.map +1 -1
  39. package/dist/adapters/cli/types.d.ts +3 -3
  40. package/dist/adapters/cli/types.d.ts.map +1 -1
  41. package/dist/adapters/hook-installer.d.ts +7 -0
  42. package/dist/adapters/hook-installer.d.ts.map +1 -1
  43. package/dist/adapters/hook-installer.js +56 -0
  44. package/dist/adapters/hook-installer.js.map +1 -1
  45. package/dist/bot-registry.d.ts +39 -23
  46. package/dist/bot-registry.d.ts.map +1 -1
  47. package/dist/bot-registry.js +134 -2
  48. package/dist/bot-registry.js.map +1 -1
  49. package/dist/cli/capabilities.d.ts +24 -0
  50. package/dist/cli/capabilities.d.ts.map +1 -0
  51. package/dist/cli/capabilities.js +25 -0
  52. package/dist/cli/capabilities.js.map +1 -0
  53. package/dist/cli/create-group-resolver.d.ts +24 -0
  54. package/dist/cli/create-group-resolver.d.ts.map +1 -1
  55. package/dist/cli/create-group-resolver.js +23 -0
  56. package/dist/cli/create-group-resolver.js.map +1 -1
  57. package/dist/cli/daemon-lifecycle-env.d.ts +5 -7
  58. package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
  59. package/dist/cli/daemon-lifecycle-env.js +13 -7
  60. package/dist/cli/daemon-lifecycle-env.js.map +1 -1
  61. package/dist/cli/exact-chat-grant-client.d.ts +48 -0
  62. package/dist/cli/exact-chat-grant-client.d.ts.map +1 -0
  63. package/dist/cli/exact-chat-grant-client.js +108 -0
  64. package/dist/cli/exact-chat-grant-client.js.map +1 -0
  65. package/dist/cli/exact-chat-grant.d.ts +18 -0
  66. package/dist/cli/exact-chat-grant.d.ts.map +1 -0
  67. package/dist/cli/exact-chat-grant.js +97 -0
  68. package/dist/cli/exact-chat-grant.js.map +1 -0
  69. package/dist/cli.d.ts +10 -1
  70. package/dist/cli.d.ts.map +1 -1
  71. package/dist/cli.js +795 -144
  72. package/dist/cli.js.map +1 -1
  73. package/dist/codex-rpc-engine.d.ts +26 -0
  74. package/dist/codex-rpc-engine.d.ts.map +1 -1
  75. package/dist/codex-rpc-engine.js +113 -2
  76. package/dist/codex-rpc-engine.js.map +1 -1
  77. package/dist/config.d.ts +16 -0
  78. package/dist/config.d.ts.map +1 -1
  79. package/dist/config.js +16 -0
  80. package/dist/config.js.map +1 -1
  81. package/dist/core/bot-live-control.d.ts +41 -0
  82. package/dist/core/bot-live-control.d.ts.map +1 -0
  83. package/dist/core/bot-live-control.js +135 -0
  84. package/dist/core/bot-live-control.js.map +1 -0
  85. package/dist/core/command-handler.d.ts.map +1 -1
  86. package/dist/core/command-handler.js +44 -66
  87. package/dist/core/command-handler.js.map +1 -1
  88. package/dist/core/daemon-config-fence.d.ts +8 -0
  89. package/dist/core/daemon-config-fence.d.ts.map +1 -0
  90. package/dist/core/daemon-config-fence.js +13 -0
  91. package/dist/core/daemon-config-fence.js.map +1 -0
  92. package/dist/core/dashboard-events.d.ts +5 -0
  93. package/dist/core/dashboard-events.d.ts.map +1 -1
  94. package/dist/core/dashboard-events.js.map +1 -1
  95. package/dist/core/dashboard-ipc-server.d.ts +21 -2
  96. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  97. package/dist/core/dashboard-ipc-server.js +258 -32
  98. package/dist/core/dashboard-ipc-server.js.map +1 -1
  99. package/dist/core/dispatch-registry.d.ts +12 -0
  100. package/dist/core/dispatch-registry.d.ts.map +1 -0
  101. package/dist/core/dispatch-registry.js +33 -0
  102. package/dist/core/dispatch-registry.js.map +1 -0
  103. package/dist/core/dispatch.d.ts +99 -0
  104. package/dist/core/dispatch.d.ts.map +1 -1
  105. package/dist/core/dispatch.js +136 -0
  106. package/dist/core/dispatch.js.map +1 -1
  107. package/dist/core/maintenance.d.ts.map +1 -1
  108. package/dist/core/maintenance.js +10 -3
  109. package/dist/core/maintenance.js.map +1 -1
  110. package/dist/core/passthrough-commands.d.ts.map +1 -1
  111. package/dist/core/passthrough-commands.js +1 -1
  112. package/dist/core/passthrough-commands.js.map +1 -1
  113. package/dist/core/persistent-backend.d.ts +16 -2
  114. package/dist/core/persistent-backend.d.ts.map +1 -1
  115. package/dist/core/persistent-backend.js +40 -0
  116. package/dist/core/persistent-backend.js.map +1 -1
  117. package/dist/core/plugins/mcp/gateway-installer.d.ts.map +1 -1
  118. package/dist/core/plugins/mcp/gateway-installer.js +14 -2
  119. package/dist/core/plugins/mcp/gateway-installer.js.map +1 -1
  120. package/dist/core/session-discovery.d.ts +8 -1
  121. package/dist/core/session-discovery.d.ts.map +1 -1
  122. package/dist/core/session-discovery.js +140 -8
  123. package/dist/core/session-discovery.js.map +1 -1
  124. package/dist/core/session-manager.d.ts.map +1 -1
  125. package/dist/core/session-manager.js +102 -68
  126. package/dist/core/session-manager.js.map +1 -1
  127. package/dist/core/session-title.d.ts +8 -0
  128. package/dist/core/session-title.d.ts.map +1 -1
  129. package/dist/core/session-title.js +54 -0
  130. package/dist/core/session-title.js.map +1 -1
  131. package/dist/core/terminal-write-auth.d.ts +15 -0
  132. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  133. package/dist/core/terminal-write-auth.js +20 -0
  134. package/dist/core/terminal-write-auth.js.map +1 -1
  135. package/dist/core/trigger-session.d.ts.map +1 -1
  136. package/dist/core/trigger-session.js +3 -2
  137. package/dist/core/trigger-session.js.map +1 -1
  138. package/dist/core/types.d.ts +33 -0
  139. package/dist/core/types.d.ts.map +1 -1
  140. package/dist/core/types.js.map +1 -1
  141. package/dist/core/worker-pool.d.ts +51 -8
  142. package/dist/core/worker-pool.d.ts.map +1 -1
  143. package/dist/core/worker-pool.js +439 -25
  144. package/dist/core/worker-pool.js.map +1 -1
  145. package/dist/daemon.d.ts +4 -2
  146. package/dist/daemon.d.ts.map +1 -1
  147. package/dist/daemon.js +403 -26
  148. package/dist/daemon.js.map +1 -1
  149. package/dist/dashboard/bot-onboarding.d.ts +127 -1
  150. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  151. package/dist/dashboard/bot-onboarding.js +1104 -25
  152. package/dist/dashboard/bot-onboarding.js.map +1 -1
  153. package/dist/dashboard/bot-payload.d.ts +5 -0
  154. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  155. package/dist/dashboard/bot-payload.js +7 -0
  156. package/dist/dashboard/bot-payload.js.map +1 -1
  157. package/dist/dashboard/debug-terminal.d.ts +18 -0
  158. package/dist/dashboard/debug-terminal.d.ts.map +1 -0
  159. package/dist/dashboard/debug-terminal.js +338 -0
  160. package/dist/dashboard/debug-terminal.js.map +1 -0
  161. package/dist/dashboard/public-redact.d.ts +2 -0
  162. package/dist/dashboard/public-redact.d.ts.map +1 -1
  163. package/dist/dashboard/public-redact.js +12 -3
  164. package/dist/dashboard/public-redact.js.map +1 -1
  165. package/dist/dashboard/registry.d.ts +8 -0
  166. package/dist/dashboard/registry.d.ts.map +1 -1
  167. package/dist/dashboard/registry.js +13 -0
  168. package/dist/dashboard/registry.js.map +1 -1
  169. package/dist/dashboard/settings-write-applier.d.ts +47 -1
  170. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  171. package/dist/dashboard/settings-write-applier.js +102 -1
  172. package/dist/dashboard/settings-write-applier.js.map +1 -1
  173. package/dist/dashboard/web/app.d.ts.map +1 -1
  174. package/dist/dashboard/web/app.js +2 -0
  175. package/dist/dashboard/web/app.js.map +1 -1
  176. package/dist/dashboard/web/bot-defaults-page.d.ts +17 -0
  177. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  178. package/dist/dashboard/web/bot-defaults-page.js +249 -11
  179. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  180. package/dist/dashboard/web/bot-defaults.d.ts +22 -0
  181. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  182. package/dist/dashboard/web/bot-defaults.js +19 -0
  183. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  184. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  185. package/dist/dashboard/web/i18n.js +114 -28
  186. package/dist/dashboard/web/i18n.js.map +1 -1
  187. package/dist/dashboard/web/icon-tooltip.d.ts +3 -0
  188. package/dist/dashboard/web/icon-tooltip.d.ts.map +1 -0
  189. package/dist/dashboard/web/icon-tooltip.js +108 -0
  190. package/dist/dashboard/web/icon-tooltip.js.map +1 -0
  191. package/dist/dashboard/web/sessions-kanban.js +2 -2
  192. package/dist/dashboard/web/sessions-kanban.js.map +1 -1
  193. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  194. package/dist/dashboard/web/sessions-page.js +49 -53
  195. package/dist/dashboard/web/sessions-page.js.map +1 -1
  196. package/dist/dashboard/web/sessions.d.ts +2 -0
  197. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  198. package/dist/dashboard/web/sessions.js +46 -2
  199. package/dist/dashboard/web/sessions.js.map +1 -1
  200. package/dist/dashboard/web/settings-page.d.ts +78 -0
  201. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  202. package/dist/dashboard/web/settings-page.js +88 -1
  203. package/dist/dashboard/web/settings-page.js.map +1 -1
  204. package/dist/dashboard/web/store.d.ts +2 -0
  205. package/dist/dashboard/web/store.d.ts.map +1 -1
  206. package/dist/dashboard/web/store.js +13 -1
  207. package/dist/dashboard/web/store.js.map +1 -1
  208. package/dist/dashboard-web/app.js +1 -1
  209. package/dist/dashboard-web/chunks/bot-defaults-page-AUKV7P4L.js +10 -0
  210. package/dist/dashboard-web/chunks/{chunk-P6GO5KT4.js → chunk-KPQAUX7V.js} +1 -1
  211. package/dist/dashboard-web/chunks/{chunk-UBOLHQCK.js → chunk-NRL6CVAS.js} +1 -1
  212. package/dist/dashboard-web/chunks/{chunk-JNRSPKLS.js → chunk-R7IAKAYX.js} +1 -1
  213. package/dist/dashboard-web/chunks/{chunk-CUV65BIQ.js → chunk-X2L65IOM.js} +8 -8
  214. package/dist/dashboard-web/chunks/{connectors-page-KTC2QWNW.js → connectors-page-HDQFEXZI.js} +1 -1
  215. package/dist/dashboard-web/chunks/{groups-page-B3EKGOLY.js → groups-page-6DKXBYOM.js} +1 -1
  216. package/dist/dashboard-web/chunks/{insights-page-X6RXNCWX.js → insights-page-NWARTJ6J.js} +1 -1
  217. package/dist/dashboard-web/chunks/{monitor-room-LLRA5LQW.js → monitor-room-AGX3XRJX.js} +1 -1
  218. package/dist/dashboard-web/chunks/{monitoring-page-7MT5FEOS.js → monitoring-page-GGGIWN4C.js} +1 -1
  219. package/dist/dashboard-web/chunks/{office-page-KD46D5TD.js → office-page-6SIVKSK3.js} +1 -1
  220. package/dist/dashboard-web/chunks/{overview-page-JUWNH32O.js → overview-page-FVR3NKAF.js} +1 -1
  221. package/dist/dashboard-web/chunks/{roles-page-P6F7NLOI.js → roles-page-WE2YB7KN.js} +1 -1
  222. package/dist/dashboard-web/chunks/{schedules-page-XIHWZST4.js → schedules-page-TB3I24XN.js} +1 -1
  223. package/dist/dashboard-web/chunks/sessions-page-KOOOASIL.js +2 -0
  224. package/dist/dashboard-web/chunks/settings-page-IEBR7TGN.js +2 -0
  225. package/dist/dashboard-web/chunks/{skills-page-A46KVWBL.js → skills-page-3QAT2IWD.js} +1 -1
  226. package/dist/dashboard-web/chunks/{team-federation-page-SDUC56DF.js → team-federation-page-K4VVAVAK.js} +1 -1
  227. package/dist/dashboard-web/chunks/{v3-page-J5JOTUSQ.js → v3-page-V6IOJR2B.js} +1 -1
  228. package/dist/dashboard-web/chunks/{whiteboards-page-U7LSOAWI.js → whiteboards-page-V6CGKRNX.js} +1 -1
  229. package/dist/dashboard-web/style.css +218 -10
  230. package/dist/dashboard.js +380 -8
  231. package/dist/dashboard.js.map +1 -1
  232. package/dist/features/codex-notifier/adoption.d.ts +11 -0
  233. package/dist/features/codex-notifier/adoption.d.ts.map +1 -0
  234. package/dist/features/codex-notifier/adoption.js +11 -0
  235. package/dist/features/codex-notifier/adoption.js.map +1 -0
  236. package/dist/features/codex-notifier/app-opener.d.ts +21 -0
  237. package/dist/features/codex-notifier/app-opener.d.ts.map +1 -0
  238. package/dist/features/codex-notifier/app-opener.js +33 -0
  239. package/dist/features/codex-notifier/app-opener.js.map +1 -0
  240. package/dist/features/codex-notifier/card-action.d.ts +27 -0
  241. package/dist/features/codex-notifier/card-action.d.ts.map +1 -0
  242. package/dist/features/codex-notifier/card-action.js +84 -0
  243. package/dist/features/codex-notifier/card-action.js.map +1 -0
  244. package/dist/features/codex-notifier/card.d.ts +12 -0
  245. package/dist/features/codex-notifier/card.d.ts.map +1 -0
  246. package/dist/features/codex-notifier/card.js +150 -0
  247. package/dist/features/codex-notifier/card.js.map +1 -0
  248. package/dist/features/codex-notifier/codex-context.d.ts +12 -0
  249. package/dist/features/codex-notifier/codex-context.d.ts.map +1 -0
  250. package/dist/features/codex-notifier/codex-context.js +161 -0
  251. package/dist/features/codex-notifier/codex-context.js.map +1 -0
  252. package/dist/features/codex-notifier/config.d.ts +9 -0
  253. package/dist/features/codex-notifier/config.d.ts.map +1 -0
  254. package/dist/features/codex-notifier/config.js +11 -0
  255. package/dist/features/codex-notifier/config.js.map +1 -0
  256. package/dist/features/codex-notifier/confirmed-turn.d.ts +20 -0
  257. package/dist/features/codex-notifier/confirmed-turn.d.ts.map +1 -0
  258. package/dist/features/codex-notifier/confirmed-turn.js +130 -0
  259. package/dist/features/codex-notifier/confirmed-turn.js.map +1 -0
  260. package/dist/features/codex-notifier/emitter.d.ts +13 -0
  261. package/dist/features/codex-notifier/emitter.d.ts.map +1 -0
  262. package/dist/features/codex-notifier/emitter.js +33 -0
  263. package/dist/features/codex-notifier/emitter.js.map +1 -0
  264. package/dist/features/codex-notifier/event-store.d.ts +29 -0
  265. package/dist/features/codex-notifier/event-store.d.ts.map +1 -0
  266. package/dist/features/codex-notifier/event-store.js +217 -0
  267. package/dist/features/codex-notifier/event-store.js.map +1 -0
  268. package/dist/features/codex-notifier/event.d.ts +46 -0
  269. package/dist/features/codex-notifier/event.d.ts.map +1 -0
  270. package/dist/features/codex-notifier/event.js +188 -0
  271. package/dist/features/codex-notifier/event.js.map +1 -0
  272. package/dist/features/codex-notifier/hook-cli.d.ts +23 -0
  273. package/dist/features/codex-notifier/hook-cli.d.ts.map +1 -0
  274. package/dist/features/codex-notifier/hook-cli.js +130 -0
  275. package/dist/features/codex-notifier/hook-cli.js.map +1 -0
  276. package/dist/features/codex-notifier/hook-installer.d.ts +19 -0
  277. package/dist/features/codex-notifier/hook-installer.d.ts.map +1 -0
  278. package/dist/features/codex-notifier/hook-installer.js +158 -0
  279. package/dist/features/codex-notifier/hook-installer.js.map +1 -0
  280. package/dist/features/codex-notifier/index.d.ts +21 -0
  281. package/dist/features/codex-notifier/index.d.ts.map +1 -0
  282. package/dist/features/codex-notifier/index.js +19 -0
  283. package/dist/features/codex-notifier/index.js.map +1 -0
  284. package/dist/features/codex-notifier/internal-turn.d.ts +5 -0
  285. package/dist/features/codex-notifier/internal-turn.d.ts.map +1 -0
  286. package/dist/features/codex-notifier/internal-turn.js +43 -0
  287. package/dist/features/codex-notifier/internal-turn.js.map +1 -0
  288. package/dist/features/codex-notifier/outbox-worker.d.ts +71 -0
  289. package/dist/features/codex-notifier/outbox-worker.d.ts.map +1 -0
  290. package/dist/features/codex-notifier/outbox-worker.js +290 -0
  291. package/dist/features/codex-notifier/outbox-worker.js.map +1 -0
  292. package/dist/features/codex-notifier/outbox.d.ts +25 -0
  293. package/dist/features/codex-notifier/outbox.d.ts.map +1 -0
  294. package/dist/features/codex-notifier/outbox.js +225 -0
  295. package/dist/features/codex-notifier/outbox.js.map +1 -0
  296. package/dist/features/codex-notifier/paths.d.ts +7 -0
  297. package/dist/features/codex-notifier/paths.d.ts.map +1 -0
  298. package/dist/features/codex-notifier/paths.js +20 -0
  299. package/dist/features/codex-notifier/paths.js.map +1 -0
  300. package/dist/features/codex-notifier/screen-lock.d.ts +12 -0
  301. package/dist/features/codex-notifier/screen-lock.d.ts.map +1 -0
  302. package/dist/features/codex-notifier/screen-lock.js +47 -0
  303. package/dist/features/codex-notifier/screen-lock.js.map +1 -0
  304. package/dist/features/codex-notifier/side-conversation-monitor.d.ts +102 -0
  305. package/dist/features/codex-notifier/side-conversation-monitor.d.ts.map +1 -0
  306. package/dist/features/codex-notifier/side-conversation-monitor.js +774 -0
  307. package/dist/features/codex-notifier/side-conversation-monitor.js.map +1 -0
  308. package/dist/features/codex-notifier/types.d.ts +42 -0
  309. package/dist/features/codex-notifier/types.d.ts.map +1 -0
  310. package/dist/features/codex-notifier/types.js +2 -0
  311. package/dist/features/codex-notifier/types.js.map +1 -0
  312. package/dist/features/codex-notifier/worker-lock.d.ts +8 -0
  313. package/dist/features/codex-notifier/worker-lock.d.ts.map +1 -0
  314. package/dist/features/codex-notifier/worker-lock.js +108 -0
  315. package/dist/features/codex-notifier/worker-lock.js.map +1 -0
  316. package/dist/global-config.d.ts +13 -0
  317. package/dist/global-config.d.ts.map +1 -1
  318. package/dist/global-config.js +34 -1
  319. package/dist/global-config.js.map +1 -1
  320. package/dist/i18n/en.d.ts.map +1 -1
  321. package/dist/i18n/en.js +1 -19
  322. package/dist/i18n/en.js.map +1 -1
  323. package/dist/i18n/zh.d.ts.map +1 -1
  324. package/dist/i18n/zh.js +1 -19
  325. package/dist/i18n/zh.js.map +1 -1
  326. package/dist/im/lark/card-builder.d.ts +0 -13
  327. package/dist/im/lark/card-builder.d.ts.map +1 -1
  328. package/dist/im/lark/card-builder.js +2 -36
  329. package/dist/im/lark/card-builder.js.map +1 -1
  330. package/dist/im/lark/card-handler.d.ts +2 -0
  331. package/dist/im/lark/card-handler.d.ts.map +1 -1
  332. package/dist/im/lark/card-handler.js +166 -64
  333. package/dist/im/lark/card-handler.js.map +1 -1
  334. package/dist/im/lark/client.d.ts +98 -4
  335. package/dist/im/lark/client.d.ts.map +1 -1
  336. package/dist/im/lark/client.js +317 -29
  337. package/dist/im/lark/client.js.map +1 -1
  338. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  339. package/dist/im/lark/event-dispatcher.js +48 -33
  340. package/dist/im/lark/event-dispatcher.js.map +1 -1
  341. package/dist/services/codex-app-threads.d.ts +47 -0
  342. package/dist/services/codex-app-threads.d.ts.map +1 -1
  343. package/dist/services/codex-app-threads.js +502 -10
  344. package/dist/services/codex-app-threads.js.map +1 -1
  345. package/dist/services/exact-chat-grant.d.ts +83 -0
  346. package/dist/services/exact-chat-grant.d.ts.map +1 -0
  347. package/dist/services/exact-chat-grant.js +249 -0
  348. package/dist/services/exact-chat-grant.js.map +1 -0
  349. package/dist/services/group-creator.d.ts +11 -0
  350. package/dist/services/group-creator.d.ts.map +1 -1
  351. package/dist/services/group-creator.js +18 -9
  352. package/dist/services/group-creator.js.map +1 -1
  353. package/dist/services/local-cli-opener.d.ts.map +1 -1
  354. package/dist/services/local-cli-opener.js +10 -5
  355. package/dist/services/local-cli-opener.js.map +1 -1
  356. package/dist/services/sandbox-migration.d.ts +14 -0
  357. package/dist/services/sandbox-migration.d.ts.map +1 -0
  358. package/dist/services/sandbox-migration.js +85 -0
  359. package/dist/services/sandbox-migration.js.map +1 -0
  360. package/dist/services/sandbox-store.d.ts +28 -0
  361. package/dist/services/sandbox-store.d.ts.map +1 -1
  362. package/dist/services/sandbox-store.js +82 -0
  363. package/dist/services/sandbox-store.js.map +1 -1
  364. package/dist/services/traex-user-input.d.ts +19 -0
  365. package/dist/services/traex-user-input.d.ts.map +1 -0
  366. package/dist/services/traex-user-input.js +57 -0
  367. package/dist/services/traex-user-input.js.map +1 -0
  368. package/dist/setup/open-platform-automation.d.ts +24 -3
  369. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  370. package/dist/setup/open-platform-automation.js +45 -8
  371. package/dist/setup/open-platform-automation.js.map +1 -1
  372. package/dist/setup/verify-permissions.d.ts +18 -0
  373. package/dist/setup/verify-permissions.d.ts.map +1 -1
  374. package/dist/setup/verify-permissions.js +60 -0
  375. package/dist/setup/verify-permissions.js.map +1 -1
  376. package/dist/types.d.ts +83 -5
  377. package/dist/types.d.ts.map +1 -1
  378. package/dist/utils/child-env.d.ts +2 -2
  379. package/dist/utils/child-env.d.ts.map +1 -1
  380. package/dist/utils/child-env.js +14 -0
  381. package/dist/utils/child-env.js.map +1 -1
  382. package/dist/utils/stuck-detector.d.ts +45 -0
  383. package/dist/utils/stuck-detector.d.ts.map +1 -0
  384. package/dist/utils/stuck-detector.js +188 -0
  385. package/dist/utils/stuck-detector.js.map +1 -0
  386. package/dist/utils/stuck-key-guard.d.ts +75 -0
  387. package/dist/utils/stuck-key-guard.d.ts.map +1 -0
  388. package/dist/utils/stuck-key-guard.js +77 -0
  389. package/dist/utils/stuck-key-guard.js.map +1 -0
  390. package/dist/worker.js +1119 -588
  391. package/dist/worker.js.map +1 -1
  392. package/dist/workflows/events/payloads.d.ts +56 -0
  393. package/dist/workflows/events/payloads.d.ts.map +1 -1
  394. package/dist/workflows/events/payloads.js +9 -0
  395. package/dist/workflows/events/payloads.js.map +1 -1
  396. package/dist/workflows/events/schema.d.ts +86 -0
  397. package/dist/workflows/events/schema.d.ts.map +1 -1
  398. package/dist/workflows/shared/sandbox-policy.d.ts +10 -1
  399. package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -1
  400. package/dist/workflows/shared/sandbox-policy.js +12 -0
  401. package/dist/workflows/shared/sandbox-policy.js.map +1 -1
  402. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
  403. package/dist/workflows/v3/bot-resolve.js +36 -0
  404. package/dist/workflows/v3/bot-resolve.js.map +1 -1
  405. package/dist/workflows/v3/contract.d.ts +8 -0
  406. package/dist/workflows/v3/contract.d.ts.map +1 -1
  407. package/dist/workflows/v3/contract.js.map +1 -1
  408. package/package.json +1 -1
  409. package/dist/dashboard-web/chunks/bot-defaults-page-B5AY4B2J.js +0 -5
  410. package/dist/dashboard-web/chunks/sessions-page-2VECQ27T.js +0 -3
  411. package/dist/dashboard-web/chunks/settings-page-HMIUE2JA.js +0 -2
  412. package/dist/services/sandbox-land.d.ts +0 -45
  413. package/dist/services/sandbox-land.d.ts.map +0 -1
  414. package/dist/services/sandbox-land.js +0 -394
  415. package/dist/services/sandbox-land.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,15 @@ import { listObservedBots } from '../../services/observed-bots-store.js';
13
13
  import { getBotCapability } from '../../services/bot-profile-store.js';
14
14
  import { resolveTeamRoleFile } from '../../core/role-resolver.js';
15
15
  import { larkHosts, normalizeBrand, sdkDomain } from './lark-hosts.js';
16
+ function larkRequestDeadline(options) {
17
+ const timeout = options?.timeoutMs;
18
+ return {
19
+ ...(typeof timeout === 'number' && Number.isFinite(timeout) && timeout > 0
20
+ ? { timeout: Math.max(1, Math.floor(timeout)) }
21
+ : {}),
22
+ ...(options?.signal ? { signal: options.signal } : {}),
23
+ };
24
+ }
16
25
  /**
17
26
  * Call a Feishu GET endpoint without a request body.
18
27
  *
@@ -28,8 +37,13 @@ import { larkHosts, normalizeBrand, sdkDomain } from './lark-hosts.js';
28
37
  * already be interpolated by the caller. Returns the parsed JSON body
29
38
  * (`{ code, msg, data }`), identical to the generated method's resolved value.
30
39
  */
31
- export async function larkGet(c, url, params = {}) {
32
- return c.request({ method: 'GET', url, params });
40
+ export async function larkGet(c, url, params = {}, options) {
41
+ return c.request({
42
+ method: 'GET',
43
+ url,
44
+ params,
45
+ ...larkRequestDeadline(options),
46
+ });
33
47
  }
34
48
  // Cached lightweight Lark clients for all configured bots (for isInChat checks).
35
49
  //
@@ -53,25 +67,47 @@ const probeLarkLogger = {
53
67
  trace: (..._msg) => { },
54
68
  };
55
69
  let allBotClients = null;
56
- function getAllBotClients() {
57
- if (!allBotClients) {
58
- let cfgs;
59
- try {
60
- cfgs = loadBotConfigs();
61
- }
62
- catch {
63
- // riff sandbox:没有 bots.json,只有经 env 合成注册进 registry 的 bot——
64
- // 降级用注册表里的配置,`botmux bots list` 等只读探测照常可用。
65
- cfgs = getAllBots().map((b) => b.config);
70
+ let allBotClientsFingerprint = null;
71
+ function loadAllBotClientConfigs() {
72
+ try {
73
+ return loadBotConfigs();
74
+ }
75
+ catch {
76
+ // riff sandbox:没有 bots.json,只有经 env 合成注册进 registry 的 bot——
77
+ // 降级用注册表里的配置,`botmux bots list` 等只读探测照常可用。
78
+ return getAllBots().map((b) => b.config);
79
+ }
80
+ }
81
+ function getAllBotClients(opts = {}) {
82
+ if (!allBotClients || opts.refresh) {
83
+ const cfgs = loadAllBotClientConfigs();
84
+ // The strict stable-App resolver is an authorization boundary and must see
85
+ // bots appended after this process started. Reload the controlled config on
86
+ // every strict resolution, while retaining Client instances when the exact
87
+ // credential/domain tuple is unchanged. Discovery callers keep the cheap
88
+ // process cache.
89
+ const fingerprint = JSON.stringify(cfgs.map(cfg => [
90
+ cfg.larkAppId,
91
+ cfg.cliId,
92
+ cfg.larkAppSecret,
93
+ normalizeBrand(cfg.brand),
94
+ ]));
95
+ if (!allBotClients || allBotClientsFingerprint !== fingerprint) {
96
+ allBotClients = cfgs.map((cfg) => ({
97
+ appId: cfg.larkAppId,
98
+ cliId: cfg.cliId,
99
+ client: new Client({ appId: cfg.larkAppId, appSecret: cfg.larkAppSecret, domain: sdkDomain(normalizeBrand(cfg.brand)), logger: probeLarkLogger }),
100
+ }));
101
+ allBotClientsFingerprint = fingerprint;
66
102
  }
67
- allBotClients = cfgs.map((cfg) => ({
68
- appId: cfg.larkAppId,
69
- cliId: cfg.cliId,
70
- client: new Client({ appId: cfg.larkAppId, appSecret: cfg.larkAppSecret, domain: sdkDomain(normalizeBrand(cfg.brand)), logger: probeLarkLogger }),
71
- }));
72
103
  }
73
104
  return allBotClients;
74
105
  }
106
+ /** Test seam for suites that replace the configured bot set at runtime. */
107
+ export function __testOnly_resetAllBotClients() {
108
+ allBotClients = null;
109
+ allBotClientsFingerprint = null;
110
+ }
75
111
  // ─── Error types ──────────────────────────────────────────────────────────────
76
112
  /** Thrown when the target message has been withdrawn (Lark code 230011). */
77
113
  export class MessageWithdrawnError extends Error {
@@ -350,17 +386,27 @@ export async function isHumanOpenId(larkAppId, openId) {
350
386
  return false;
351
387
  }
352
388
  }
353
- export async function sendUserMessage(larkAppId, openId, content, msgType = 'text') {
389
+ export async function sendUserMessage(larkAppId, openId, content, msgType = 'text', uuid, requestOptions) {
354
390
  const c = getBotClient(larkAppId);
355
391
  const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
356
- const res = await c.im.v1.message.create({
357
- params: { receive_id_type: 'open_id' },
358
- data: {
359
- receive_id: openId,
360
- msg_type: msgType,
361
- content: body,
362
- },
363
- });
392
+ const data = {
393
+ receive_id: openId,
394
+ msg_type: msgType,
395
+ content: body,
396
+ ...(uuid ? { uuid } : {}),
397
+ };
398
+ const res = requestOptions
399
+ ? await c.request({
400
+ method: 'POST',
401
+ url: '/open-apis/im/v1/messages',
402
+ params: { receive_id_type: 'open_id' },
403
+ data,
404
+ ...larkRequestDeadline(requestOptions),
405
+ })
406
+ : await c.im.v1.message.create({
407
+ params: { receive_id_type: 'open_id' },
408
+ data,
409
+ });
364
410
  if (res.code !== 0) {
365
411
  throw new Error(`Failed to send user message: ${res.msg} (code: ${res.code})`);
366
412
  }
@@ -649,15 +695,18 @@ export async function getMessageDetail(larkAppId, messageId, options = {}) {
649
695
  // user AND bot senders); without it the server omits them. Matters here for
650
696
  // merge_forward sub-messages, whose senders appear nowhere else.
651
697
  with_sender_name: 'true',
652
- });
698
+ }, options);
653
699
  if (res.code !== 0) {
654
700
  throw new Error(`Failed to get message: ${res.msg} (code: ${res.code})`);
655
701
  }
656
702
  return res.data;
657
703
  }
658
- export async function getMessageChatId(larkAppId, messageId) {
704
+ export async function getMessageChatId(larkAppId, messageId, options) {
659
705
  try {
660
- const detail = await getMessageDetail(larkAppId, messageId, { userCardContent: false });
706
+ const detail = await getMessageDetail(larkAppId, messageId, {
707
+ userCardContent: false,
708
+ ...options,
709
+ });
661
710
  const candidates = [
662
711
  detail?.items?.[0]?.chat_id,
663
712
  detail?.chat_id,
@@ -670,6 +719,9 @@ export async function getMessageChatId(larkAppId, messageId) {
670
719
  return null;
671
720
  }
672
721
  catch (err) {
722
+ if (options?.signal?.aborted) {
723
+ throw options.signal.reason instanceof Error ? options.signal.reason : err;
724
+ }
673
725
  logger.debug(`[message] failed to resolve chat_id for ${messageId.substring(0, 12)}: ${err instanceof Error ? err.message : err}`);
674
726
  return null;
675
727
  }
@@ -1167,6 +1219,242 @@ async function listChatBotsViaMembersBots(larkAppId, chatId, timeoutMs) {
1167
1219
  return { ok: false, reason: err?.message ?? String(err), cacheable: true };
1168
1220
  }
1169
1221
  }
1222
+ /**
1223
+ * Read the current chat's bot members from Feishu and fail closed on any API
1224
+ * error. This is the authorization-grade counterpart to
1225
+ * {@link listChatBotMembers}: it NEVER consults the 30-day observed/cross-ref
1226
+ * fallback and NEVER treats a cached capability failure as membership truth.
1227
+ *
1228
+ * Keep this separate from the user-facing discovery helper. `/members/bots`
1229
+ * is still an undocumented endpoint, so discovery may degrade gracefully; a
1230
+ * permission mutation must not.
1231
+ */
1232
+ export async function listCurrentChatBotMembers(larkAppId, chatId) {
1233
+ const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
1234
+ const result = await listChatBotsViaMembersBots(larkAppId, chatId, timeoutMs);
1235
+ if (!result.ok) {
1236
+ throw new Error(`live_chat_bot_members_unavailable: ${result.reason}`);
1237
+ }
1238
+ return result.items.map(item => ({ openId: item.botId, displayName: item.botName }));
1239
+ }
1240
+ /**
1241
+ * Resolve stable configured Lark app ids to the receiver-scoped open_ids that
1242
+ * may be written to the receiver's exact chatGrant.
1243
+ *
1244
+ * This is deliberately stricter than bot discovery. Identity is accepted only
1245
+ * when all three current signals agree: the receiver's live `/members/bots`
1246
+ * row, the subject app's own `is_in_chat` result, and one exact, unique
1247
+ * `bot_name` binding from bots-info.json. Cross-reference and observed-bot
1248
+ * stores are never consulted, because either can be stale or scoped to another
1249
+ * app.
1250
+ */
1251
+ export async function resolveCurrentChatBotOpenIdsByLarkAppIds(receiverLarkAppId, chatId, subjectLarkAppIds) {
1252
+ const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
1253
+ const live = await listChatBotsViaMembersBots(receiverLarkAppId, chatId, timeoutMs);
1254
+ if (!live.ok) {
1255
+ return {
1256
+ ok: false,
1257
+ error: 'live_membership_unavailable',
1258
+ message: `live_chat_bot_members_unavailable: ${live.reason}`,
1259
+ };
1260
+ }
1261
+ const configured = getAllBotClients({ refresh: true });
1262
+ const configuredByAppId = new Map(configured.map(entry => [entry.appId, entry]));
1263
+ const namesByAppId = new Map();
1264
+ try {
1265
+ const raw = JSON.parse(readFileSync(join(config.session.dataDir, 'bots-info.json'), 'utf-8'));
1266
+ if (!Array.isArray(raw))
1267
+ throw new Error('bots-info.json must contain an array');
1268
+ for (const entry of raw) {
1269
+ const appId = typeof entry?.larkAppId === 'string' ? entry.larkAppId.trim() : '';
1270
+ const botName = typeof entry?.botName === 'string' ? entry.botName.trim() : '';
1271
+ if (!appId || !botName)
1272
+ continue;
1273
+ const names = namesByAppId.get(appId);
1274
+ if (names)
1275
+ names.push(botName);
1276
+ else
1277
+ namesByAppId.set(appId, [botName]);
1278
+ }
1279
+ }
1280
+ catch (err) {
1281
+ return {
1282
+ ok: false,
1283
+ error: 'subject_lark_app_name_unavailable',
1284
+ message: `Unable to read a strict bot_name binding: ${err?.message ?? String(err)}`,
1285
+ invalidSubjectLarkAppIds: subjectLarkAppIds,
1286
+ };
1287
+ }
1288
+ const subjectNames = new Map();
1289
+ for (const subjectLarkAppId of subjectLarkAppIds) {
1290
+ if (!configuredByAppId.has(subjectLarkAppId)) {
1291
+ return {
1292
+ ok: false,
1293
+ error: 'subject_lark_app_not_configured',
1294
+ message: 'Every subject app must be configured in this botmux runtime',
1295
+ invalidSubjectLarkAppIds: [subjectLarkAppId],
1296
+ };
1297
+ }
1298
+ const names = namesByAppId.get(subjectLarkAppId) ?? [];
1299
+ if (names.length !== 1) {
1300
+ return {
1301
+ ok: false,
1302
+ error: names.length === 0 ? 'subject_lark_app_name_unavailable' : 'subject_lark_app_ambiguous',
1303
+ message: names.length === 0
1304
+ ? 'Every subject app must have one non-empty bot_name in bots-info.json'
1305
+ : 'A subject app has multiple bot_name bindings in bots-info.json',
1306
+ invalidSubjectLarkAppIds: [subjectLarkAppId],
1307
+ };
1308
+ }
1309
+ subjectNames.set(subjectLarkAppId, names[0]);
1310
+ }
1311
+ // If multiple configured apps claim the requested name, probe every claimant.
1312
+ // A strict name is safe only when exactly one claimant is currently in chat
1313
+ // and it is the requested subject app.
1314
+ const candidateAppIds = new Set();
1315
+ const requestedNames = new Set(subjectNames.values());
1316
+ for (const entry of configured) {
1317
+ const names = namesByAppId.get(entry.appId) ?? [];
1318
+ if (names.length === 1 && requestedNames.has(names[0]))
1319
+ candidateAppIds.add(entry.appId);
1320
+ }
1321
+ const inChatByAppId = new Map();
1322
+ for (const appId of candidateAppIds) {
1323
+ const entry = configuredByAppId.get(appId);
1324
+ try {
1325
+ const res = await promiseWithTimeout(larkGet(entry.client, `/open-apis/im/v1/chats/${encodeURIComponent(chatId)}/members/is_in_chat`), timeoutMs, `is_in_chat for ${appId}`);
1326
+ if (res?.code !== 0 || typeof res?.data?.is_in_chat !== 'boolean') {
1327
+ return {
1328
+ ok: false,
1329
+ error: 'live_membership_unavailable',
1330
+ message: `is_in_chat failed for ${appId}: code=${res?.code ?? 'unknown'} msg=${res?.msg ?? ''}`,
1331
+ invalidSubjectLarkAppIds: subjectLarkAppIds.includes(appId) ? [appId] : undefined,
1332
+ };
1333
+ }
1334
+ inChatByAppId.set(appId, res.data.is_in_chat);
1335
+ }
1336
+ catch (err) {
1337
+ return {
1338
+ ok: false,
1339
+ error: 'live_membership_unavailable',
1340
+ message: `is_in_chat failed for ${appId}: ${err?.message ?? String(err)}`,
1341
+ invalidSubjectLarkAppIds: subjectLarkAppIds.includes(appId) ? [appId] : undefined,
1342
+ };
1343
+ }
1344
+ }
1345
+ const mappings = [];
1346
+ const mappedOpenIds = new Set();
1347
+ for (const subjectLarkAppId of subjectLarkAppIds) {
1348
+ const botName = subjectNames.get(subjectLarkAppId);
1349
+ if (inChatByAppId.get(subjectLarkAppId) !== true) {
1350
+ return {
1351
+ ok: false,
1352
+ error: 'subject_lark_app_not_in_chat',
1353
+ message: 'Every subject app must independently confirm it is in the current chat',
1354
+ invalidSubjectLarkAppIds: [subjectLarkAppId],
1355
+ };
1356
+ }
1357
+ const configuredInChatWithName = configured.filter(entry => {
1358
+ const names = namesByAppId.get(entry.appId) ?? [];
1359
+ return names.length === 1 && names[0] === botName && inChatByAppId.get(entry.appId) === true;
1360
+ });
1361
+ const liveRows = live.items.filter(item => item.botName === botName);
1362
+ if (configuredInChatWithName.length !== 1
1363
+ || configuredInChatWithName[0].appId !== subjectLarkAppId
1364
+ || liveRows.length !== 1
1365
+ || mappedOpenIds.has(liveRows[0]?.botId)) {
1366
+ return {
1367
+ ok: false,
1368
+ error: 'subject_lark_app_ambiguous',
1369
+ message: 'Stable app identity did not bind to exactly one live bot_name row',
1370
+ invalidSubjectLarkAppIds: [subjectLarkAppId],
1371
+ };
1372
+ }
1373
+ mappings.push({ larkAppId: subjectLarkAppId, subjectOpenId: liveRows[0].botId });
1374
+ mappedOpenIds.add(liveRows[0].botId);
1375
+ }
1376
+ return { ok: true, mappings };
1377
+ }
1378
+ /**
1379
+ * Resolve a foreign-bot SENDER open_id (receiver-scoped) to a same-deployment
1380
+ * sibling, using only live authorization-grade signals — never the possibly
1381
+ * stale/uninitialized cross-ref or observed stores. This closes the cold-start
1382
+ * window where a same-machine sibling @s a receiver whose cross-ref has not yet
1383
+ * learned that sibling's receiver-scoped open_id (Lark open_id is per-app).
1384
+ *
1385
+ * Identity is accepted only when all signals agree, mirroring
1386
+ * {@link resolveCurrentChatBotOpenIdsByLarkAppIds}:
1387
+ * 1. the receiver's live `/members/bots` row carries `bot_id === senderOpenId`;
1388
+ * 2. exactly one locally-configured bot (other than the receiver) has that
1389
+ * exact `bot_name` in bots-info.json — a unique name binding;
1390
+ * 3. that candidate app independently confirms `is_in_chat` and binds to
1391
+ * exactly one live row for its name (the strict resolver's own re-check).
1392
+ *
1393
+ * Fails closed (returns `{ ok: false }`) on any API error, ambiguity, or name
1394
+ * collision, so the caller falls back to the `/grant` request card. Never
1395
+ * authorizes a genuine external bot: an external sender's open_id has no
1396
+ * locally-configured app of the same unique name, so step 2 fails.
1397
+ */
1398
+ export async function resolveSiblingBotBySenderOpenId(receiverLarkAppId, chatId, senderOpenId) {
1399
+ if (!senderOpenId)
1400
+ return { ok: false, reason: 'no_sender_open_id' };
1401
+ const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
1402
+ const live = await listChatBotsViaMembersBots(receiverLarkAppId, chatId, timeoutMs);
1403
+ if (!live.ok)
1404
+ return { ok: false, reason: `live_membership_unavailable: ${live.reason}` };
1405
+ // 1. The sender must appear in the receiver's live bot roster by open_id.
1406
+ const liveRow = live.items.find(item => item.botId === senderOpenId);
1407
+ if (!liveRow)
1408
+ return { ok: false, reason: 'sender_not_in_live_roster' };
1409
+ const botName = liveRow.botName;
1410
+ // 2. Exactly one locally-configured sibling (≠ receiver) must claim that
1411
+ // exact name. Read the controlled config fresh — a sibling appended after
1412
+ // this process started must still be recognized (auth boundary).
1413
+ let candidateAppIds = [];
1414
+ try {
1415
+ const raw = JSON.parse(readFileSync(join(config.session.dataDir, 'bots-info.json'), 'utf-8'));
1416
+ if (!Array.isArray(raw))
1417
+ throw new Error('bots-info.json must contain an array');
1418
+ const namesByAppId = new Map();
1419
+ for (const entry of raw) {
1420
+ const appId = typeof entry?.larkAppId === 'string' ? entry.larkAppId.trim() : '';
1421
+ const name = typeof entry?.botName === 'string' ? entry.botName.trim() : '';
1422
+ if (!appId || !name)
1423
+ continue;
1424
+ const names = namesByAppId.get(appId);
1425
+ if (names)
1426
+ names.push(name);
1427
+ else
1428
+ namesByAppId.set(appId, [name]);
1429
+ }
1430
+ for (const [appId, names] of namesByAppId) {
1431
+ if (appId === receiverLarkAppId)
1432
+ continue;
1433
+ // Require a unique name binding for the app — an app with multiple names
1434
+ // is ambiguous and must not shortcut vetting.
1435
+ if (names.length === 1 && names[0] === botName)
1436
+ candidateAppIds.push(appId);
1437
+ }
1438
+ }
1439
+ catch (err) {
1440
+ return { ok: false, reason: `bots_info_unavailable: ${err?.message ?? String(err)}` };
1441
+ }
1442
+ if (candidateAppIds.length !== 1) {
1443
+ return { ok: false, reason: candidateAppIds.length === 0 ? 'no_sibling_with_name' : 'ambiguous_sibling_name' };
1444
+ }
1445
+ const candidateAppId = candidateAppIds[0];
1446
+ // 3. Delegate the strict re-check (is_in_chat + unique name + unique live
1447
+ // row) to the auth-grade resolver, then require it to bind back to exactly
1448
+ // the sender's open_id.
1449
+ const resolved = await resolveCurrentChatBotOpenIdsByLarkAppIds(receiverLarkAppId, chatId, [candidateAppId]);
1450
+ if (!resolved.ok)
1451
+ return { ok: false, reason: `strict_resolve_failed: ${resolved.error}` };
1452
+ const mapping = resolved.mappings.find(m => m.larkAppId === candidateAppId);
1453
+ if (!mapping || mapping.subjectOpenId !== senderOpenId) {
1454
+ return { ok: false, reason: 'strict_resolve_open_id_mismatch' };
1455
+ }
1456
+ return { ok: true, larkAppId: candidateAppId, botName, senderOpenId };
1457
+ }
1170
1458
  // `/members/bots` returns the observer-scoped mention handle (`bot_id`) and
1171
1459
  // display name only. Bind botmux identity only when a configured bot has already
1172
1460
  // been proven to be in this chat and the name match is unique, OR the item's