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
- import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{b as W}from"./chunk-P6GO5KT4.js";import{a as ce,c as le,g as Le,k as M,p as ie}from"./chunk-QFMH6ITB.js";import"./chunk-CUV65BIQ.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Ce,d as re}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var l=K(Ce(),1);var m=K(Ce(),1);var n=K(re(),1),Re=50,we={total:0,ok:0,error:0,successRate:0};function $e(t,e=Date.now()){if(t==="all")return;let s=t==="24h"?24:t==="7d"?168:720;return new Date(e-s*60*60*1e3).toISOString()}function Ae(t,e=0){let s=new URLSearchParams({limit:String(Re),offset:String(e)});t.connectorId&&s.set("connectorId",t.connectorId),t.status&&s.set("status",t.status);let g=$e(t.timeWindow);return g&&s.set("since",g),t.query.trim()&&s.set("q",t.query.trim()),s}function Ie(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function de(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function He(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ke(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function Oe(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,s])=>s!=null&&s!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([s,g])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:s}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(g)})})]},s))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function ve(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function ue(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Te(t={}){let e=W(),s=(0,m.useRef)(!1),g=(0,m.useRef)([]),[k,L]=(0,m.useState)([]),[h,I]=(0,m.useState)([]),[y,R]=(0,m.useState)(we),[C,$]=(0,m.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,r]=(0,m.useState)(null),[E,_]=(0,m.useState)(!0),[v,U]=(0,m.useState)(!1),[O,J]=(0,m.useState)(!1),[V,Y]=(0,m.useState)(0),[q,P]=(0,m.useState)(""),[X,Z]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>new Map(k.map(c=>[c.id,c.name])),[k]),u=(0,m.useMemo)(()=>h.find(c=>c.triggerId===d)??h[0]??null,[h,d]),ee=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...k.map(c=>({value:c.id,label:c.name}))],[k,e]),B=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,m.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),A=(0,m.useCallback)(async(c=!1,w=!1)=>{w?U(!0):_(!0),P("");let z=c?g.current.length:0,oe=Ae(C,z),f=new URLSearchParams(oe);f.delete("limit"),f.delete("offset");try{let[F,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),c?Promise.resolve(null):H(`/api/trigger-logs/summary?${f}`)]);if(!s.current)return;if(F.status!==200)throw new Error(String(F.body?.error||F.status));let S=Array.isArray(F.body?.logs)?F.body.logs:[],ne=c?[...g.current,...S]:S;g.current=ne,I(ne),Y(Number(F.body?.total??S.length)),J(F.body?.hasMore===!0),c||(R(te?.status===200?te.body?.summary??we:we),r(ae=>S.some(fe=>fe.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(F){s.current&&P(F?.message||e("webhookLogs.loadFailed"))}finally{s.current&&(_(!1),U(!1))}},[C,e]);(0,m.useEffect)(()=>(s.current=!0,H("/api/connectors").then(c=>{s.current&&c.status===200&&L(Array.isArray(c.body?.connectors)?c.body.connectors:[])}),()=>{s.current=!1}),[]),(0,m.useEffect)(()=>{let c=setTimeout(()=>{A(!1)},C.query?260:0);return()=>clearTimeout(c)},[C,A]),(0,m.useEffect)(()=>{let c=setInterval(()=>{A(!1,!0)},15e3);return()=>clearInterval(c)},[A]);async function pe(){u&&(await navigator.clipboard?.writeText(JSON.stringify(u,null,2)),Z(!0),setTimeout(()=>s.current&&Z(!1),1200))}let he=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${v?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ue,{label:e("webhookLogs.total"),value:y.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ue,{label:e("webhookLogs.successRate"),value:`${y.successRate.toFixed(y.successRate%1?1:0)}%`,tone:"ok",hint:`${y.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ue,{label:e("webhookLogs.failures"),value:y.error,tone:y.error?"error":void 0,hint:y.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ue,{label:e("webhookLogs.p95"),value:de(y.p95DurationMs),hint:`${e("webhookLogs.average")} ${de(y.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:c=>c.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:C.query,onChange:c=>{let w=c.currentTarget.value;$(z=>({...z,query:w}))}}),(0,n.jsx)(ve,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:C.connectorId,options:ee,onChange:c=>$(w=>({...w,connectorId:c}))}),(0,n.jsx)(ve,{id:"webhook-log-status",label:e("webhookLogs.status"),value:C.status,options:B,onChange:c=>$(w=>({...w,status:c}))}),(0,n.jsx)(ve,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:C.timeWindow,options:be,onChange:c=>$(w=>({...w,timeWindow:c}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:v,onClick:()=>{A(!1,!0)},children:e("webhookLogs.refresh")})]}),q?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",q]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),E&&!h.length?(0,n.jsx)(le,{label:e("webhookLogs.loading"),compact:!0}):null,!E&&!h.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:h.map(c=>{let w=u?.triggerId===c.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":w,className:`webhook-log-row${w?" active":""}`,onClick:()=>r(c.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${c.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:T.get(c.connectorId||"")||c.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:c.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Ie(c.createdAt)}),(0,n.jsx)("span",{children:c.errorCode||c.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:c.status,children:c.response?.httpStatus??(c.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:de(c.response?.durationMs)})]})]},`${c.triggerId}-${c.createdAt}`)})}),O?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:E,onClick:()=>{A(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:T.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Ie(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{pe()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:de(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:He(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ke,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ke,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ke,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:he})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Oe,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(re(),1);function qe(t,e){return t.map(s=>s.id===e.id?e:s)}var Me={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",topicMessageMode:"default",topicMessageText:"",verify:"token",secret:"",storePayload:!0};function oo(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Be(t){return[{value:"turn",label:t("connectors.kindTurn")},{value:"workflow",label:t("connectors.kindWorkflowRetiring"),disabled:!0}]}function Ne(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function ge(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function Pe(t){let e=(0,l.useRef)(null),[s,g]=(0,l.useState)(!1),[k,L]=(0,l.useState)(""),h=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,l.useMemo)(()=>new Set(h),[h]),y=k.trim().toLocaleLowerCase(),R=(0,l.useMemo)(()=>y?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(y)):t.groups,[y,t.groups]),C=t.multiple?h.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(h.length):t.groups.find(d=>d.chatId===h[0])?.name||h[0]||t.placeholder;(0,l.useEffect)(()=>{if(!s)return;let d=r=>{e.current?.contains(r.target)||g(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[s]);function $(d){if(!t.multiple){t.onChange(d),g(!1),L("");return}t.onChange(I.has(d)?h.filter(r=>r!==d):[...h,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${s?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":s,onClick:()=>g(d=>!d),children:[(0,o.jsx)("span",{className:h.length||t.multiple&&t.allLabel?"":"muted",children:C}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),s?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:k,placeholder:t.searchPlaceholder,onChange:d=>L(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),g(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!y?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${h.length===0?" selected":""}`,role:"option","aria-selected":h.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,R.map(d=>{let r=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${r?" selected":""}`,role:"option","aria-selected":r,onClick:()=>$(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),R.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function me(t,e){return t.filter(s=>s.bots.includes(e))}function Ge(t,e){let s=t.target.chatId||"",g=s&&me(e,t.target.botId).some(k=>k.chatId===s);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:g?s:"",manualChat:!!(s&&!g),manualChatId:g?"":s,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",topicMessageMode:t.topicMessage?.mode||"default",topicMessageText:t.topicMessage?.text||"",verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function We(t){let e=W(),s=t.active==="webhooks",g=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${s?" on":""}`,role:"tab","aria-selected":s,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${g?" on":""}`,role:"tab","aria-selected":g,children:e("connectors.tabLogs")})]})}function xe(t){let e=W(),s=(0,l.useRef)(!1),g=(0,l.useRef)(null),k=(0,l.useRef)(null),[L,h]=(0,l.useState)([]),[I,y]=(0,l.useState)([]),[R,C]=(0,l.useState)([]),[$,d]=(0,l.useState)(!0),[r,E]=(0,l.useState)(Me),[_,v]=(0,l.useState)(null),[U,O]=(0,l.useState)(null),[J,V]=(0,l.useState)(!1),[Y,q]=(0,l.useState)(!1),[P,X]=(0,l.useState)(null),[Z,T]=(0,l.useState)(null),[u,ee]=(0,l.useState)(null),B=(0,l.useMemo)(()=>me(I,r.botId),[I,r.botId]),be=(0,l.useMemo)(()=>L.length?L.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[L,e]),A=(0,l.useMemo)(()=>Be(e),[e]),pe=(0,l.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),he=(0,l.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,l.useCallback)(a=>I.find(b=>b.chatId===a)?.name||a,[I]),c=(0,l.useCallback)((a,i)=>{E(b=>{let N=b.botId&&a.some(D=>D.larkAppId===b.botId)?b.botId:a[0]?.larkAppId??"",p=me(i,N),x=b.chatId&&p.some(D=>D.chatId===b.chatId)?b.chatId:p[0]?.chatId??"",G=new Set(p.map(D=>D.chatId));return{...b,botId:N,chatId:x,allowChats:b.allowChats.filter(D=>G.has(D))}})},[]),w=(0,l.useCallback)(async()=>{d(!0);try{let[a,i,b]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!s.current)return;let N=(a.body?.bots||[]).map(x=>({larkAppId:x.larkAppId,botName:x.botName||x.larkAppId})),p=(b.body?.chats||[]).map(x=>({chatId:x.chatId,name:x.name||"",bots:(x.memberBots||[]).filter(G=>G.inChat).map(G=>G.larkAppId)}));h(N),y(p),C(Array.isArray(i.body?.connectors)?i.body.connectors:[]),c(N,p)}finally{s.current&&d(!1)}},[c]);(0,l.useEffect)(()=>(s.current=!0,w(),()=>{s.current=!1,g.current&&clearTimeout(g.current)}),[w]),(0,l.useEffect)(()=>{let a=new Set(B.map(i=>i.chatId));E(i=>({...i,chatId:i.chatId&&a.has(i.chatId)?i.chatId:B[0]?.chatId??"",allowChats:i.allowChats.filter(b=>a.has(b))}))},[B]),(0,l.useEffect)(()=>{let a=k.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let i=a.querySelector(".connector-modal-body");i&&(i.scrollTop=0)}else a.open&&a.close()},[Y]),(0,l.useEffect)(()=>()=>{let a=k.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function f(a){E(i=>({...i,...a}))}function F(){v(null),O(null),X(null),E(a=>{let i=a.botId||L[0]?.larkAppId||"";return{...Me,botId:i,chatId:me(I,i)[0]?.chatId||""}}),q(!0)}function te(a){v(null),O(null),T(null),X(a),E(Ge(a,I)),q(!0)}function S(){J||(q(!1),v(null),O(null),X(null))}async function ne(){v(null),O(null);let a=r.name.trim(),i=r.botId;if(!a){v({text:e("connectors.errName"),error:!0});return}if(!i){v({text:e("connectors.errBot"),error:!0});return}if(r.kind==="workflow"){v({text:e("connectors.errLegacyWorkflowRetired"),error:!0});return}let b=r.topicMessageText.trim();if(r.topicMessageMode==="custom"&&!b){v({text:e("connectors.errTopicMessage"),error:!0});return}let N={name:a,enabled:P?.enabled??!0,target:{kind:r.kind,mode:r.mode,botId:i},promptEnvelope:{sourceName:a,instruction:r.instruction.trim()},topicMessage:{mode:r.topicMessageMode,...r.topicMessageMode==="custom"?{text:b}:{}},verify:{type:r.verify},loggingPolicy:{storePayload:r.storePayload,storeHeaders:!0,retentionDays:14}};if(r.mode==="fixed"){let p=r.manualChat?r.manualChatId.trim():r.chatId;if(!p){v({text:e("connectors.errChat"),error:!0});return}N.target.chatId=p}else r.mode==="dynamic"&&(N.target.allowChats=r.allowChats);if(r.mode==="new-group"){let p=r.dedup.trim();if(r.deduplicate&&!p){v({text:e("connectors.errDedup"),error:!0});return}N.lifecycleExtractors=r.deduplicate?{dedupKey:p}:null}else N.lifecycleExtractors=null;r.secret.trim()&&(N.secret=r.secret.trim()),V(!0),v({text:e(P?"connectors.saving":"connectors.creating")});try{let p=await Q(P?"PUT":"POST",P?`/api/connectors/${encodeURIComponent(P.id)}`:"/api/connectors",N);if(!s.current)return;if((p.status===201||p.status===200)&&p.body?.ok){if(P){let ye=P.id;C(De=>qe(De,p.body.connector)),T({id:ye,text:e("connectors.updated")}),q(!1),X(null);return}let x=p.body.webhookUrl||Ne(p.body.connector.id),G=(p.body.connector?.verify?.type??"token")==="token",D=r.mode==="dynamic",Ee=D?N.target.allowChats?.[0]||"<chatId>":"";v(null),O({name:a,mode:r.mode,chatId:N.target.chatId,url:x,secret:p.body.secret,isToken:G,isDynamic:D,exampleChat:Ee}),E(ye=>({...ye,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",topicMessageMode:"default",topicMessageText:"",allowChats:[],storePayload:!0})),await w()}else{let x=p.body?.error||p.status;v({text:e("connectors.createFailed",{error:String(x)}),error:!0})}}finally{s.current&&V(!1)}}async function ae(a){T({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let i=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.toggleFailed",{error:String(b)}),error:!0})}}async function fe(a){let i=a.loggingPolicy?.storePayload!==!1;T({id:a.id,text:e("connectors.saving")});let b=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!i,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(s.current)if(b.status===200&&b.body?.ok)T(null),await w();else{let N=b.body?.error||b.status;T({id:a.id,text:e("connectors.saveFailed",{error:String(N)}),error:!0})}}async function Se(a){if(!confirm(e("connectors.delConfirm")))return;T({id:a.id,text:e("connectors.deleting")});let i=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.deleteFailed",{error:String(b)}),error:!0})}}function Fe(a){navigator.clipboard?.writeText(Ne(a.id)),ee(a.id),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{s.current&&ee(null)},1200)}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Le,{className:"page-primary-action connector-create-trigger",onClick:F,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(We,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:k,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(P?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(_e,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(M,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:r.name,onChange:a=>f({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fBot")}),(0,o.jsx)(ge,{id:"cn-bot",label:e("connectors.fBot"),value:r.botId,options:be,onChange:a=>f({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fKind")}),(0,o.jsx)(ge,{id:"cn-kind",label:e("connectors.fKind"),value:r.kind,options:A,onChange:a=>f({kind:a})})]}),r.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(M,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:r.workflowId,onChange:a=>f({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fMode")}),(0,o.jsx)(ge,{id:"cn-mode",label:e("connectors.fMode"),value:r.mode,options:pe,onChange:a=>f({mode:a})})]}),r.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(M,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[r.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:r.manualChatId,onChange:a=>f({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(Pe,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:B,value:r.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>f({manualChat:!r.manualChat}),children:r.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):r.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(M,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(Pe,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:B,value:r.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({allowChats:a})})]}):null,r.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,r.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(M,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!r.deduplicate,className:`connector-strategy-option${r.deduplicate?"":" selected"}`,onClick:()=>f({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.deduplicate,className:`connector-strategy-option${r.deduplicate?" selected":""}`,onClick:()=>f({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),r.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(M,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:r.dedup,onChange:a=>f({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(M,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:r.instruction,onChange:a=>f({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-topic-message-config",children:[(0,o.jsx)(M,{help:e("connectors.topicMessageHint"),children:e("connectors.topicMessage")}),(0,o.jsx)("div",{className:"connector-topic-message-options",role:"radiogroup","aria-label":e("connectors.topicMessage"),children:["default","custom","none"].map(a=>(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.topicMessageMode===a,className:`connector-topic-message-option${r.topicMessageMode===a?" selected":""}`,onClick:()=>f({topicMessageMode:a}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e(`connectors.topicMessage${a==="default"?"Default":a==="custom"?"Custom":"None"}`)}),(0,o.jsx)("small",{children:e(`connectors.topicMessage${a==="default"?"DefaultHint":a==="custom"?"CustomHint":"NoneHint"}`)})]})]},a))}),r.topicMessageMode==="custom"?(0,o.jsxs)("label",{className:"connector-topic-message-input",htmlFor:"cn-topic-message",children:[(0,o.jsx)("input",{id:"cn-topic-message",type:"text",maxLength:200,value:r.topicMessageText,onChange:a=>f({topicMessageText:a.currentTarget.value}),placeholder:e("connectors.topicMessageCustomPh")}),(0,o.jsxs)("small",{children:[e("connectors.topicMessageCustomHelp"),(0,o.jsxs)("span",{children:[Array.from(r.topicMessageText).length,"/200"]})]})]}):(0,o.jsx)("p",{className:`connector-topic-message-preview${r.topicMessageMode==="none"?" muted":""}`,children:r.topicMessageMode==="none"?e("connectors.topicMessageNonePreview"):e("connectors.topicMessagePreview",{source:r.name.trim()||e("connectors.topicMessageSourceFallback")})})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:r.storePayload,onChange:a=>f({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fVerify")}),(0,o.jsx)(ge,{id:"cn-verify",label:e("connectors.fVerify"),value:r.verify,options:he,onChange:a=>f({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(M,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:r.secret,onChange:a=>f({secret:a.currentTarget.value}),placeholder:e(P?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(P?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:$?(0,o.jsx)(le,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(Ue,{connectors:R,bots:L,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Fe,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{fe(a)},onDelete:a=>{Se(a)}})})})]}):(0,o.jsx)(Te,{embedded:!0})]})}function _e(t){let e=W(),s=t.created,g=s.isDynamic?`${s.url}?chatId=${s.exampleChat}`:s.url,k=s.exampleChat!=="<chatId>"?`\uFF08${t.groupName(s.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:s.name}),s.mode==="fixed"&&s.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(s.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:s.url})]}),s.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[s.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:s.secret})]}):null,s.isToken&&s.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:k})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):s.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(s.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function Ue(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(s=>{let g=t.bots.find(C=>C.larkAppId===s.target.botId),k=Ne(s.id),L=(s.verify?.type??"token")==="token",h=e(L?"connectors.badgeToken":"connectors.badgeSign"),I=s.target.mode==="fixed"&&s.target.chatId?e("connectors.dest",{name:t.groupName(s.target.chatId)}):"",y=t.editMsg?.id===s.id?t.editMsg:null,R=t.copiedId===s.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:s.name}),(0,o.jsx)("span",{className:s.enabled?"connector-status-pill ok":"connector-status-pill muted",children:s.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:g?.botName||s.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(s.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(s.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:h}),(0,o.jsx)("span",{children:s.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:s.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${R?" copied":""}`,type:"button",onClick:()=>t.onCopy(s),children:e(R?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[k,L?"/<token>":""]})]}),L?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,s.target.kind==="workflow"?(0,o.jsx)("div",{className:"muted connector-item-note",children:e("connectors.legacyWorkflowNote")}):null,s.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,s.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),s.promptEnvelope.instruction]}):null,(0,o.jsx)("div",{className:"muted connector-item-note",children:s.topicMessage?.mode==="none"?e("connectors.topicMessageListNone"):s.topicMessage?.mode==="custom"?e("connectors.topicMessageListCustom",{text:s.topicMessage.text||""}):e("connectors.topicMessageListDefault")}),y?(0,o.jsx)("div",{className:y.error?"err connector-item-note":"muted connector-item-note",children:y.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(s),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(s),children:s.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(s),children:s.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(s),children:e("connectors.btnDel")})]})]},s.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function to(t){return se(t,(0,o.jsx)(xe,{tab:"webhooks"}))}function no(t){return se(t,(0,o.jsx)(xe,{tab:"logs"}))}export{oo as buildConnectorInstructionUpdateBody,Be as buildConnectorKindOptions,no as renderConnectorsLogsPage,to as renderConnectorsPage,qe as replaceConnectorById};
1
+ import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{b as W}from"./chunk-KPQAUX7V.js";import{a as ce,c as le,g as Le,k as M,p as ie}from"./chunk-QFMH6ITB.js";import"./chunk-X2L65IOM.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Ce,d as re}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var l=K(Ce(),1);var m=K(Ce(),1);var n=K(re(),1),Re=50,we={total:0,ok:0,error:0,successRate:0};function $e(t,e=Date.now()){if(t==="all")return;let s=t==="24h"?24:t==="7d"?168:720;return new Date(e-s*60*60*1e3).toISOString()}function Ae(t,e=0){let s=new URLSearchParams({limit:String(Re),offset:String(e)});t.connectorId&&s.set("connectorId",t.connectorId),t.status&&s.set("status",t.status);let g=$e(t.timeWindow);return g&&s.set("since",g),t.query.trim()&&s.set("q",t.query.trim()),s}function Ie(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function de(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function He(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ke(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function Oe(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,s])=>s!=null&&s!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([s,g])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:s}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(g)})})]},s))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function ve(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function ue(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Te(t={}){let e=W(),s=(0,m.useRef)(!1),g=(0,m.useRef)([]),[k,L]=(0,m.useState)([]),[h,I]=(0,m.useState)([]),[y,R]=(0,m.useState)(we),[C,$]=(0,m.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,r]=(0,m.useState)(null),[E,_]=(0,m.useState)(!0),[v,U]=(0,m.useState)(!1),[O,J]=(0,m.useState)(!1),[V,Y]=(0,m.useState)(0),[q,P]=(0,m.useState)(""),[X,Z]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>new Map(k.map(c=>[c.id,c.name])),[k]),u=(0,m.useMemo)(()=>h.find(c=>c.triggerId===d)??h[0]??null,[h,d]),ee=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...k.map(c=>({value:c.id,label:c.name}))],[k,e]),B=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,m.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),A=(0,m.useCallback)(async(c=!1,w=!1)=>{w?U(!0):_(!0),P("");let z=c?g.current.length:0,oe=Ae(C,z),f=new URLSearchParams(oe);f.delete("limit"),f.delete("offset");try{let[F,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),c?Promise.resolve(null):H(`/api/trigger-logs/summary?${f}`)]);if(!s.current)return;if(F.status!==200)throw new Error(String(F.body?.error||F.status));let S=Array.isArray(F.body?.logs)?F.body.logs:[],ne=c?[...g.current,...S]:S;g.current=ne,I(ne),Y(Number(F.body?.total??S.length)),J(F.body?.hasMore===!0),c||(R(te?.status===200?te.body?.summary??we:we),r(ae=>S.some(fe=>fe.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(F){s.current&&P(F?.message||e("webhookLogs.loadFailed"))}finally{s.current&&(_(!1),U(!1))}},[C,e]);(0,m.useEffect)(()=>(s.current=!0,H("/api/connectors").then(c=>{s.current&&c.status===200&&L(Array.isArray(c.body?.connectors)?c.body.connectors:[])}),()=>{s.current=!1}),[]),(0,m.useEffect)(()=>{let c=setTimeout(()=>{A(!1)},C.query?260:0);return()=>clearTimeout(c)},[C,A]),(0,m.useEffect)(()=>{let c=setInterval(()=>{A(!1,!0)},15e3);return()=>clearInterval(c)},[A]);async function pe(){u&&(await navigator.clipboard?.writeText(JSON.stringify(u,null,2)),Z(!0),setTimeout(()=>s.current&&Z(!1),1200))}let he=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${v?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ue,{label:e("webhookLogs.total"),value:y.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ue,{label:e("webhookLogs.successRate"),value:`${y.successRate.toFixed(y.successRate%1?1:0)}%`,tone:"ok",hint:`${y.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ue,{label:e("webhookLogs.failures"),value:y.error,tone:y.error?"error":void 0,hint:y.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ue,{label:e("webhookLogs.p95"),value:de(y.p95DurationMs),hint:`${e("webhookLogs.average")} ${de(y.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:c=>c.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:C.query,onChange:c=>{let w=c.currentTarget.value;$(z=>({...z,query:w}))}}),(0,n.jsx)(ve,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:C.connectorId,options:ee,onChange:c=>$(w=>({...w,connectorId:c}))}),(0,n.jsx)(ve,{id:"webhook-log-status",label:e("webhookLogs.status"),value:C.status,options:B,onChange:c=>$(w=>({...w,status:c}))}),(0,n.jsx)(ve,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:C.timeWindow,options:be,onChange:c=>$(w=>({...w,timeWindow:c}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:v,onClick:()=>{A(!1,!0)},children:e("webhookLogs.refresh")})]}),q?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",q]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),E&&!h.length?(0,n.jsx)(le,{label:e("webhookLogs.loading"),compact:!0}):null,!E&&!h.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:h.map(c=>{let w=u?.triggerId===c.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":w,className:`webhook-log-row${w?" active":""}`,onClick:()=>r(c.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${c.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:T.get(c.connectorId||"")||c.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:c.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Ie(c.createdAt)}),(0,n.jsx)("span",{children:c.errorCode||c.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:c.status,children:c.response?.httpStatus??(c.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:de(c.response?.durationMs)})]})]},`${c.triggerId}-${c.createdAt}`)})}),O?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:E,onClick:()=>{A(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:T.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Ie(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{pe()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:de(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:He(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ke,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ke,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ke,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:he})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Oe,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(re(),1);function qe(t,e){return t.map(s=>s.id===e.id?e:s)}var Me={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",topicMessageMode:"default",topicMessageText:"",verify:"token",secret:"",storePayload:!0};function oo(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Be(t){return[{value:"turn",label:t("connectors.kindTurn")},{value:"workflow",label:t("connectors.kindWorkflowRetiring"),disabled:!0}]}function Ne(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function ge(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function Pe(t){let e=(0,l.useRef)(null),[s,g]=(0,l.useState)(!1),[k,L]=(0,l.useState)(""),h=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,l.useMemo)(()=>new Set(h),[h]),y=k.trim().toLocaleLowerCase(),R=(0,l.useMemo)(()=>y?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(y)):t.groups,[y,t.groups]),C=t.multiple?h.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(h.length):t.groups.find(d=>d.chatId===h[0])?.name||h[0]||t.placeholder;(0,l.useEffect)(()=>{if(!s)return;let d=r=>{e.current?.contains(r.target)||g(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[s]);function $(d){if(!t.multiple){t.onChange(d),g(!1),L("");return}t.onChange(I.has(d)?h.filter(r=>r!==d):[...h,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${s?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":s,onClick:()=>g(d=>!d),children:[(0,o.jsx)("span",{className:h.length||t.multiple&&t.allLabel?"":"muted",children:C}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),s?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:k,placeholder:t.searchPlaceholder,onChange:d=>L(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),g(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!y?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${h.length===0?" selected":""}`,role:"option","aria-selected":h.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,R.map(d=>{let r=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${r?" selected":""}`,role:"option","aria-selected":r,onClick:()=>$(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),R.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function me(t,e){return t.filter(s=>s.bots.includes(e))}function Ge(t,e){let s=t.target.chatId||"",g=s&&me(e,t.target.botId).some(k=>k.chatId===s);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:g?s:"",manualChat:!!(s&&!g),manualChatId:g?"":s,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",topicMessageMode:t.topicMessage?.mode||"default",topicMessageText:t.topicMessage?.text||"",verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function We(t){let e=W(),s=t.active==="webhooks",g=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${s?" on":""}`,role:"tab","aria-selected":s,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${g?" on":""}`,role:"tab","aria-selected":g,children:e("connectors.tabLogs")})]})}function xe(t){let e=W(),s=(0,l.useRef)(!1),g=(0,l.useRef)(null),k=(0,l.useRef)(null),[L,h]=(0,l.useState)([]),[I,y]=(0,l.useState)([]),[R,C]=(0,l.useState)([]),[$,d]=(0,l.useState)(!0),[r,E]=(0,l.useState)(Me),[_,v]=(0,l.useState)(null),[U,O]=(0,l.useState)(null),[J,V]=(0,l.useState)(!1),[Y,q]=(0,l.useState)(!1),[P,X]=(0,l.useState)(null),[Z,T]=(0,l.useState)(null),[u,ee]=(0,l.useState)(null),B=(0,l.useMemo)(()=>me(I,r.botId),[I,r.botId]),be=(0,l.useMemo)(()=>L.length?L.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[L,e]),A=(0,l.useMemo)(()=>Be(e),[e]),pe=(0,l.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),he=(0,l.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,l.useCallback)(a=>I.find(b=>b.chatId===a)?.name||a,[I]),c=(0,l.useCallback)((a,i)=>{E(b=>{let N=b.botId&&a.some(D=>D.larkAppId===b.botId)?b.botId:a[0]?.larkAppId??"",p=me(i,N),x=b.chatId&&p.some(D=>D.chatId===b.chatId)?b.chatId:p[0]?.chatId??"",G=new Set(p.map(D=>D.chatId));return{...b,botId:N,chatId:x,allowChats:b.allowChats.filter(D=>G.has(D))}})},[]),w=(0,l.useCallback)(async()=>{d(!0);try{let[a,i,b]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!s.current)return;let N=(a.body?.bots||[]).map(x=>({larkAppId:x.larkAppId,botName:x.botName||x.larkAppId})),p=(b.body?.chats||[]).map(x=>({chatId:x.chatId,name:x.name||"",bots:(x.memberBots||[]).filter(G=>G.inChat).map(G=>G.larkAppId)}));h(N),y(p),C(Array.isArray(i.body?.connectors)?i.body.connectors:[]),c(N,p)}finally{s.current&&d(!1)}},[c]);(0,l.useEffect)(()=>(s.current=!0,w(),()=>{s.current=!1,g.current&&clearTimeout(g.current)}),[w]),(0,l.useEffect)(()=>{let a=new Set(B.map(i=>i.chatId));E(i=>({...i,chatId:i.chatId&&a.has(i.chatId)?i.chatId:B[0]?.chatId??"",allowChats:i.allowChats.filter(b=>a.has(b))}))},[B]),(0,l.useEffect)(()=>{let a=k.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let i=a.querySelector(".connector-modal-body");i&&(i.scrollTop=0)}else a.open&&a.close()},[Y]),(0,l.useEffect)(()=>()=>{let a=k.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function f(a){E(i=>({...i,...a}))}function F(){v(null),O(null),X(null),E(a=>{let i=a.botId||L[0]?.larkAppId||"";return{...Me,botId:i,chatId:me(I,i)[0]?.chatId||""}}),q(!0)}function te(a){v(null),O(null),T(null),X(a),E(Ge(a,I)),q(!0)}function S(){J||(q(!1),v(null),O(null),X(null))}async function ne(){v(null),O(null);let a=r.name.trim(),i=r.botId;if(!a){v({text:e("connectors.errName"),error:!0});return}if(!i){v({text:e("connectors.errBot"),error:!0});return}if(r.kind==="workflow"){v({text:e("connectors.errLegacyWorkflowRetired"),error:!0});return}let b=r.topicMessageText.trim();if(r.topicMessageMode==="custom"&&!b){v({text:e("connectors.errTopicMessage"),error:!0});return}let N={name:a,enabled:P?.enabled??!0,target:{kind:r.kind,mode:r.mode,botId:i},promptEnvelope:{sourceName:a,instruction:r.instruction.trim()},topicMessage:{mode:r.topicMessageMode,...r.topicMessageMode==="custom"?{text:b}:{}},verify:{type:r.verify},loggingPolicy:{storePayload:r.storePayload,storeHeaders:!0,retentionDays:14}};if(r.mode==="fixed"){let p=r.manualChat?r.manualChatId.trim():r.chatId;if(!p){v({text:e("connectors.errChat"),error:!0});return}N.target.chatId=p}else r.mode==="dynamic"&&(N.target.allowChats=r.allowChats);if(r.mode==="new-group"){let p=r.dedup.trim();if(r.deduplicate&&!p){v({text:e("connectors.errDedup"),error:!0});return}N.lifecycleExtractors=r.deduplicate?{dedupKey:p}:null}else N.lifecycleExtractors=null;r.secret.trim()&&(N.secret=r.secret.trim()),V(!0),v({text:e(P?"connectors.saving":"connectors.creating")});try{let p=await Q(P?"PUT":"POST",P?`/api/connectors/${encodeURIComponent(P.id)}`:"/api/connectors",N);if(!s.current)return;if((p.status===201||p.status===200)&&p.body?.ok){if(P){let ye=P.id;C(De=>qe(De,p.body.connector)),T({id:ye,text:e("connectors.updated")}),q(!1),X(null);return}let x=p.body.webhookUrl||Ne(p.body.connector.id),G=(p.body.connector?.verify?.type??"token")==="token",D=r.mode==="dynamic",Ee=D?N.target.allowChats?.[0]||"<chatId>":"";v(null),O({name:a,mode:r.mode,chatId:N.target.chatId,url:x,secret:p.body.secret,isToken:G,isDynamic:D,exampleChat:Ee}),E(ye=>({...ye,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",topicMessageMode:"default",topicMessageText:"",allowChats:[],storePayload:!0})),await w()}else{let x=p.body?.error||p.status;v({text:e("connectors.createFailed",{error:String(x)}),error:!0})}}finally{s.current&&V(!1)}}async function ae(a){T({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let i=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.toggleFailed",{error:String(b)}),error:!0})}}async function fe(a){let i=a.loggingPolicy?.storePayload!==!1;T({id:a.id,text:e("connectors.saving")});let b=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!i,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(s.current)if(b.status===200&&b.body?.ok)T(null),await w();else{let N=b.body?.error||b.status;T({id:a.id,text:e("connectors.saveFailed",{error:String(N)}),error:!0})}}async function Se(a){if(!confirm(e("connectors.delConfirm")))return;T({id:a.id,text:e("connectors.deleting")});let i=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.deleteFailed",{error:String(b)}),error:!0})}}function Fe(a){navigator.clipboard?.writeText(Ne(a.id)),ee(a.id),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{s.current&&ee(null)},1200)}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Le,{className:"page-primary-action connector-create-trigger",onClick:F,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(We,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:k,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(P?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(_e,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(M,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:r.name,onChange:a=>f({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fBot")}),(0,o.jsx)(ge,{id:"cn-bot",label:e("connectors.fBot"),value:r.botId,options:be,onChange:a=>f({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fKind")}),(0,o.jsx)(ge,{id:"cn-kind",label:e("connectors.fKind"),value:r.kind,options:A,onChange:a=>f({kind:a})})]}),r.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(M,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:r.workflowId,onChange:a=>f({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fMode")}),(0,o.jsx)(ge,{id:"cn-mode",label:e("connectors.fMode"),value:r.mode,options:pe,onChange:a=>f({mode:a})})]}),r.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(M,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[r.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:r.manualChatId,onChange:a=>f({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(Pe,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:B,value:r.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>f({manualChat:!r.manualChat}),children:r.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):r.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(M,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(Pe,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:B,value:r.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({allowChats:a})})]}):null,r.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,r.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(M,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!r.deduplicate,className:`connector-strategy-option${r.deduplicate?"":" selected"}`,onClick:()=>f({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.deduplicate,className:`connector-strategy-option${r.deduplicate?" selected":""}`,onClick:()=>f({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),r.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(M,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:r.dedup,onChange:a=>f({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(M,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:r.instruction,onChange:a=>f({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-topic-message-config",children:[(0,o.jsx)(M,{help:e("connectors.topicMessageHint"),children:e("connectors.topicMessage")}),(0,o.jsx)("div",{className:"connector-topic-message-options",role:"radiogroup","aria-label":e("connectors.topicMessage"),children:["default","custom","none"].map(a=>(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.topicMessageMode===a,className:`connector-topic-message-option${r.topicMessageMode===a?" selected":""}`,onClick:()=>f({topicMessageMode:a}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e(`connectors.topicMessage${a==="default"?"Default":a==="custom"?"Custom":"None"}`)}),(0,o.jsx)("small",{children:e(`connectors.topicMessage${a==="default"?"DefaultHint":a==="custom"?"CustomHint":"NoneHint"}`)})]})]},a))}),r.topicMessageMode==="custom"?(0,o.jsxs)("label",{className:"connector-topic-message-input",htmlFor:"cn-topic-message",children:[(0,o.jsx)("input",{id:"cn-topic-message",type:"text",maxLength:200,value:r.topicMessageText,onChange:a=>f({topicMessageText:a.currentTarget.value}),placeholder:e("connectors.topicMessageCustomPh")}),(0,o.jsxs)("small",{children:[e("connectors.topicMessageCustomHelp"),(0,o.jsxs)("span",{children:[Array.from(r.topicMessageText).length,"/200"]})]})]}):(0,o.jsx)("p",{className:`connector-topic-message-preview${r.topicMessageMode==="none"?" muted":""}`,children:r.topicMessageMode==="none"?e("connectors.topicMessageNonePreview"):e("connectors.topicMessagePreview",{source:r.name.trim()||e("connectors.topicMessageSourceFallback")})})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:r.storePayload,onChange:a=>f({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fVerify")}),(0,o.jsx)(ge,{id:"cn-verify",label:e("connectors.fVerify"),value:r.verify,options:he,onChange:a=>f({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(M,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:r.secret,onChange:a=>f({secret:a.currentTarget.value}),placeholder:e(P?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(P?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:$?(0,o.jsx)(le,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(Ue,{connectors:R,bots:L,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Fe,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{fe(a)},onDelete:a=>{Se(a)}})})})]}):(0,o.jsx)(Te,{embedded:!0})]})}function _e(t){let e=W(),s=t.created,g=s.isDynamic?`${s.url}?chatId=${s.exampleChat}`:s.url,k=s.exampleChat!=="<chatId>"?`\uFF08${t.groupName(s.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:s.name}),s.mode==="fixed"&&s.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(s.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:s.url})]}),s.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[s.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:s.secret})]}):null,s.isToken&&s.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:k})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):s.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(s.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function Ue(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(s=>{let g=t.bots.find(C=>C.larkAppId===s.target.botId),k=Ne(s.id),L=(s.verify?.type??"token")==="token",h=e(L?"connectors.badgeToken":"connectors.badgeSign"),I=s.target.mode==="fixed"&&s.target.chatId?e("connectors.dest",{name:t.groupName(s.target.chatId)}):"",y=t.editMsg?.id===s.id?t.editMsg:null,R=t.copiedId===s.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:s.name}),(0,o.jsx)("span",{className:s.enabled?"connector-status-pill ok":"connector-status-pill muted",children:s.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:g?.botName||s.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(s.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(s.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:h}),(0,o.jsx)("span",{children:s.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:s.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${R?" copied":""}`,type:"button",onClick:()=>t.onCopy(s),children:e(R?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[k,L?"/<token>":""]})]}),L?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,s.target.kind==="workflow"?(0,o.jsx)("div",{className:"muted connector-item-note",children:e("connectors.legacyWorkflowNote")}):null,s.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,s.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),s.promptEnvelope.instruction]}):null,(0,o.jsx)("div",{className:"muted connector-item-note",children:s.topicMessage?.mode==="none"?e("connectors.topicMessageListNone"):s.topicMessage?.mode==="custom"?e("connectors.topicMessageListCustom",{text:s.topicMessage.text||""}):e("connectors.topicMessageListDefault")}),y?(0,o.jsx)("div",{className:y.error?"err connector-item-note":"muted connector-item-note",children:y.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(s),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(s),children:s.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(s),children:s.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(s),children:e("connectors.btnDel")})]})]},s.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function to(t){return se(t,(0,o.jsx)(xe,{tab:"webhooks"}))}function no(t){return se(t,(0,o.jsx)(xe,{tab:"logs"}))}export{oo as buildConnectorInstructionUpdateBody,Be as buildConnectorKindOptions,no as renderConnectorsLogsPage,to as renderConnectorsPage,qe as replaceConnectorById};
@@ -1,4 +1,4 @@
1
- import{a as fe,b as he,c as ve,d as be}from"./chunk-R3FXBFQH.js";import{b as me}from"./chunk-P6GO5KT4.js";import{c as Z,g as X,h as le,l as ce,m as ue,n as de,o as pe,p as ge}from"./chunk-QFMH6ITB.js";import{c as j,d as J,s as z,v as ae,x as ne}from"./chunk-CUV65BIQ.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Le,d as ie}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var i=K(Le(),1);var $e=/^[A-Za-z0-9._-]{1,64}$/,we=6,ye=30;function Y(o,t){return ve(o,t)}function ke(o,t,r=ye){let n=Number.isFinite(r)?Math.max(1,Math.floor(r)):ye,a=o.length,c=Math.max(1,Math.ceil(a/n)),s=Number.isFinite(t)?Math.floor(t):1,d=Math.min(c,Math.max(1,s)),f=(d-1)*n,I=Math.min(a,f+n);return{rows:o.slice(f,I),page:d,totalPages:c,from:a===0?0:f+1,to:I,total:a}}async function Pe(o,t,r){if(o.length===0)return[];let n=new Array(o.length),a=0,c=Math.min(Math.max(1,t),o.length);return await Promise.all(Array.from({length:c},async()=>{for(;a<o.length;){let s=a++;n[s]=await r(o[s])}})),n}function Q(o){return $e.test(o)&&o!=="."&&o!==".."}function ee(o){let t=String(o??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return Q(t)?t:"profile"}async function V(){let t=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(t.profiles)?t.profiles:[]}async function Ce(o){let t=await V(),r=await Pe(t,we,async s=>{try{let f=await(await fetch(`/api/role-profiles/${encodeURIComponent(s.profileId)}`)).json().catch(()=>({}));return[s.profileId,Array.isArray(f.entries)?f.entries:[]]}catch{return[s.profileId,[]]}}),n=new Set,a=[];for(let s of o.chats??[])for(let d of s.memberBots??[]){if(!d?.inChat||!d?.hasRole||!d?.larkAppId)continue;let f=Y(d.larkAppId,s.chatId);n.has(f)||(n.add(f),a.push({chatId:s.chatId,larkAppId:d.larkAppId}))}let c=await be(a);return{profiles:t,entriesById:new Map(r),groupRoleContentByBot:c,loaded:!0}}async function Ie(o){let t=(o.memberBots??[]).filter(r=>r?.inChat&&r?.larkAppId);return Pe(t,we,async r=>{try{let a=await(await fetch(`/api/roles/${encodeURIComponent(r.larkAppId)}/${encodeURIComponent(o.chatId)}`)).json().catch(()=>({})),c=a?.hasEffectiveRole??a?.hasRole,s="effectiveContent"in a?a.effectiveContent:a.content,d=c?String(s??"").trim():"",f=a?.effectiveSource==="chat"||a?.effectiveSource==="team"?a.effectiveSource:null;return{larkAppId:r.larkAppId,botName:r.botName,content:d,status:d?f??"chat":"empty"}}catch{return{larkAppId:r.larkAppId,botName:r.botName,content:"",status:"error"}}})}function Se(o,t){return o.filter(r=>!t||!t.has(r.larkAppId))}function Ne(o,t){let r=t.q.trim().toLowerCase();return o.filter(n=>!r||(n.name??"").toLowerCase().includes(r)||n.chatId.toLowerCase().includes(r)||(n.ownerId??"").toLowerCase().includes(r)).filter(n=>!t.missingOnly||(n.memberBots??[]).some(a=>!a.inChat))}function Re(o,t){if(t.size===0)return!0;let r=o?.memberBots??[];for(let n of t)if(!r.some(a=>a.larkAppId===n&&a.inChat))return!1;return!0}function xe(o){let t=Array.isArray(o)?o:[],r=t.filter(n=>!!n?.ok).length;return{rows:t,okCount:r,failed:t.length-r}}function Ae(o,t,r){let n=String(o??"").trim();if(!n)return null;if(r)return{kind:"warn",text:z("groups.roleProfileBootstrapFailed",{name:n,reason:String(r)})};let a=typeof t=="string"&&t.trim()?t.trim():"";return a?{kind:"ok",text:z("groups.roleProfileBootstrapSent",{name:n,messageId:a})}:{kind:"ok",text:z("groups.roleProfileBootstrapDone",{name:n})}}function Ge(o,t,r,n,a){let c=new Set(n);a&&c.add(a);let s={chatId:t,name:r,ownerId:a??null,memberBots:o.bots.map(d=>({larkAppId:d.larkAppId,botName:d.botName,inChat:c.has(d.larkAppId),oncallChat:null}))};return{bots:o.bots,chats:[s,...o.chats.filter(d=>d.chatId!==t)]}}var e=K(ie(),1);function Be(){return{profiles:[],entriesById:new Map,groupRoleContentByBot:new Map,loaded:!1}}function Me(o){let t={};for(let r of ae(o).split(";")){if(!r)continue;let n=r.indexOf(":");n<=0||(t[r.slice(0,n)]=r.slice(n+1))}return t}function Oe(o){let t=o.chat,r=t.avatar??ne(t.chatId),[n,a]=(0,i.useState)(!1);(0,i.useEffect)(()=>{a(!1)},[r]);let c=t.name??t.chatId,s=!!r&&!n;return(0,e.jsx)("span",{className:`orb-avatar orb-square orb-avatar-sm${s?" orb-has-img":""}`,style:Me(c),"aria-hidden":"true",children:s?(0,e.jsx)("img",{className:"orb-img",src:r,alt:"",decoding:"async",referrerPolicy:"no-referrer",onError:()=>a(!0)}):null})}function te(o){return(0,e.jsxs)("p",{className:"hint-warn",children:[(0,e.jsx)("strong",{children:o.title}),(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:String(o.reason??"unknown")})]})}function Te(o){return(0,e.jsx)(e.Fragment,{children:Se(o.bots,o.excludeIds).map(t=>(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox",name:"bot",value:t.larkAppId}),(0,e.jsxs)("span",{className:"checkbox-row-main",children:[(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]})]},t.larkAppId))})}function De(o){let t=o.summary;return t.rows.length?(0,e.jsxs)("div",{className:t.failed?"hint-warn":"hint-ok",children:[(0,e.jsxs)("strong",{children:["\u6DFB\u52A0\u7ED3\u679C\uFF1A\u6210\u529F ",t.okCount,"/",t.rows.length,t.failed?`\uFF0C\u5931\u8D25 ${t.failed}`:""]}),(0,e.jsx)("ul",{children:t.rows.map((r,n)=>{let a=String(r?.id??"?");return(0,e.jsxs)("li",{children:[(0,e.jsx)("code",{children:a}),": ",r?.ok?"OK":`failed (${String(r?.error??"unknown")})`]},`${a}-${n}`)})})]}):(0,e.jsx)("p",{className:"hint-warn",children:"\u6CA1\u6709\u8FD4\u56DE\u6DFB\u52A0\u7ED3\u679C\u3002"})}function Fe(o){let{chat:t,context:r,tr:n}=o;if(!r.profiles.length||!r.loaded)return null;let a=new Map;for(let f of t.memberBots??[])f?.inChat&&a.set(f.larkAppId,r.groupRoleContentByBot.get(Y(f.larkAppId,t.chatId))??null);if(!fe(a))return null;let s=he(t.memberBots??[],r.profiles,r.entriesById,a)[0];if(!s)return(0,e.jsx)("div",{className:"g-profile-status muted",children:n("groups.profileStatusUnmatched")});let d=s.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`g-profile-status ${s.kind}`,children:n(d,{name:s.profileId,matched:s.matched,total:s.total,chat:s.chatMatched})})}function je(o){return o?o.error?"error":o.inChat?"in":"out":"unknown"}function Ue(o,t){switch(o){case"in":return t("groups.botStatusIn");case"out":return t("groups.botStatusOut");case"error":return t("groups.botStatusError");default:return t("groups.botStatusUnknown")}}function He(o){let t=new Map((o.chat.memberBots??[]).map(r=>[r.larkAppId,r]));return(0,e.jsx)("div",{className:"groups-bot-strip","aria-label":o.tr("groups.botCoverage"),children:o.bots.map(r=>{let n=t.get(r.larkAppId),a=je(n),c=Ue(a,o.tr),s=r.botName??r.larkAppId;return(0,e.jsxs)("span",{className:`groups-bot-pill groups-bot-${a}`,title:`${s}: ${c}${n?.error?` (${String(n.error)})`:""}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),(0,e.jsx)("span",{className:"groups-bot-name",children:s}),(0,e.jsx)("span",{className:"groups-bot-state",children:c})]},r.larkAppId)})})}var _e=(0,i.memo)(function(t){let{chat:r,tr:n}=t,c=(r.memberBots??[]).filter(s=>s.inChat).length;return(0,e.jsxs)(ue,{kind:"group",className:"groups-list-row","data-chat":r.chatId,children:[(0,e.jsx)(Oe,{chat:r}),(0,e.jsxs)(de,{children:[(0,e.jsxs)("div",{className:"groups-row-head",children:[(0,e.jsx)("b",{children:r.name??r.chatId}),(0,e.jsxs)("span",{className:"groups-row-meta",children:[(0,e.jsx)("span",{className:"groups-row-tag",children:(0,e.jsx)("code",{children:r.chatId})}),r.ownerId?(0,e.jsxs)("span",{className:"groups-row-tag groups-row-owner-tag",children:[(0,e.jsx)("span",{children:n("groups.owner")}),(0,e.jsx)("code",{children:r.ownerId})]}):null]})]}),(0,e.jsx)(Fe,{chat:r,context:t.roleContext,tr:n})]}),(0,e.jsx)("span",{className:"groups-row-count",children:n("groups.memberSummary",{count:c,total:t.bots.length})}),(0,e.jsxs)("div",{className:"groups-row-lower",children:[(0,e.jsx)(He,{chat:r,bots:t.bots,tr:n}),(0,e.jsxs)(pe,{children:[(0,e.jsx)(X,{className:"add-bots",onClick:()=>t.onAddBots(r),children:n("groups.addBots")}),(0,e.jsx)("button",{className:"save-profile",type:"button",onClick:()=>t.onSaveProfile(r),children:n("groups.saveAsProfile")}),(0,e.jsx)("button",{className:"manage-chat",type:"button",onClick:()=>t.onManage(r),children:n("groups.manage")})]})]})]})});function We(o){let{tr:t}=o,[r,n]=(0,i.useState)(!1),[a,c]=(0,i.useState)(null),[s,d]=(0,i.useState)(null),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)("");async function w(u){u.preventDefault();let v=new FormData(u.currentTarget),g=String(v.get("name")??"").trim(),y=String(v.get("bindWorkingDir")??"").trim(),C=String(v.get("roleProfileId")??"").trim(),x=v.getAll("bot");if(x.length===0){c({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u521B\u5EFA\u7FA4\u804A\u3002"});return}n(!0),c(null);try{let P=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:g||void 0,larkAppIds:x,bindWorkingDir:y||void 0,roleProfileId:C||void 0})}),S=await P.json().catch(()=>({ok:!1,error:`HTTP ${P.status}`}));S.ok&&S.chatId?(d(S),o.onCreated(S,x,g)):(c({title:"\u521B\u5EFA\u5931\u8D25",reason:S.error??`HTTP ${P.status}`}),n(!1))}catch(P){c({title:"\u7F51\u7EDC\u9519\u8BEF",reason:P}),n(!1)}}if(s){let u=String(s.chatId),v=typeof s.shareLink=="string"&&s.shareLink?s.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(u)}`,g=s.invalidBotIds??[],y=s.invalidUserIds??[],C=Array.isArray(s.oncallBindings)?s.oncallBindings:[],x=C.filter(R=>R?.ok).length,P=C.filter(R=>!R?.ok),S=Ae(typeof s.roleProfileId=="string"?s.roleProfileId:"",s.roleProfileBootstrapMessageId,s.roleProfileBootstrapError);return(0,e.jsxs)("article",{className:"g-create-dialog g-create-success",children:[(0,e.jsx)("header",{children:(0,e.jsx)("h3",{children:t("groups.successTitle")})}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"chatId:"})," ",(0,e.jsx)("code",{children:u})," ",(0,e.jsx)("button",{type:"button","data-copy":u,onClick:()=>{navigator.clipboard.writeText(u),I(!0),o.setTimer(()=>I(!1),800)},children:t(f?"sessions.copied":"sessions.copy")})]}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"\u521B\u5EFA\u8005:"})," ",(0,e.jsx)("code",{children:String(s.creator??"?")})]}),(0,e.jsx)(Je,{resp:s}),C.length>0?P.length===0?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u7ED1\u5B9A\u76EE\u5F55\uFF1A",(0,e.jsx)("code",{children:String(s.bindResolvedPath??"")}),"\uFF08",x,"/",C.length," bots\uFF09"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ",x,"/",C.length,"\u3002",P.map((R,A)=>(0,e.jsxs)("span",{children:[(0,e.jsx)("br",{}),(0,e.jsx)("code",{children:String(R?.larkAppId??"?")}),": ",String(R?.error??"unknown")]},`${R?.larkAppId??"?"}-${A}`))]}):null,S?(0,e.jsx)("p",{className:S.kind==="ok"?"hint-ok":"hint-warn",children:S.text}):null,g.length||y.length?(0,e.jsxs)("ul",{children:[g.length?(0,e.jsxs)("li",{children:["\u65E0\u6548 bot id: ",(0,e.jsx)("code",{children:g.join(", ")})]}):null,y.length?(0,e.jsxs)("li",{children:["\u65E0\u6548\u7528\u6237 open_id: ",(0,e.jsx)("code",{children:y.join(", ")})]}):null]}):null,(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-close",onClick:o.onClose,children:t("sessions.dismiss")}),(0,e.jsx)("a",{className:"btn-link primary",href:v,target:"_blank",rel:"noopener",children:t("groups.openGroup")})]})]})}return(0,e.jsxs)("article",{className:"g-create-dialog",children:[(0,e.jsxs)("header",{className:"g-create-head",children:[(0,e.jsx)("h3",{children:t("groups.createTitle")}),(0,e.jsx)("p",{children:t("groups.createHelp")})]}),(0,e.jsxs)("form",{id:"g-createform",className:"g-create-form",onSubmit:u=>{w(u)},children:[(0,e.jsxs)("fieldset",{className:"g-modal-field g-create-bots",children:[(0,e.jsx)("legend",{children:t("groups.botPicker")}),(0,e.jsx)("div",{className:"g-bot-picker",children:(0,e.jsx)(Te,{bots:o.bots})})]}),(0,e.jsxs)("div",{className:"g-create-fields",children:[(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.name")}),(0,e.jsx)("input",{type:"text",name:"name",placeholder:t("groups.namePlaceholder"),maxLength:60})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.bindDir")}),(0,e.jsx)("input",{type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/botmux"}),(0,e.jsx)("small",{children:t("groups.bindDirHelp")})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field g-profile-field",children:[(0,e.jsx)("legend",{children:t("groups.roleProfile")}),(0,e.jsx)("input",{type:"hidden",name:"roleProfileId",value:p}),(0,e.jsx)(ge,{className:"g-profile-menu",ariaLabel:t("groups.roleProfile"),label:p||t("groups.roleProfileNone"),value:p,options:[{value:"",label:t("groups.roleProfileNone")},...o.roleProfiles.map(u=>({value:u.profileId,label:u.profileId}))],onChange:h}),(0,e.jsx)("small",{children:t("groups.roleProfileHelp")})]})]}),(0,e.jsx)("div",{className:"g-create-status","data-create-status":!0,"aria-live":"polite",children:a?(0,e.jsx)(te,{...a}):null}),(0,e.jsxs)("div",{className:"actions g-create-actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:r,children:r?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("i",{className:"button-spinner","aria-hidden":"true"}),t("groups.createSubmitting")]}):t("groups.createSubmit")})]})]})]})}function Je(o){let t=o.resp,r=t.autoInvitedOpenId,n=!!t.autoInviteRejected,a=t.ownerTransferredTo,c=t.transferError,s=t.notifyMessageId,d=t.notifyError;return r?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u81EA\u52A8\u9080\u8BF7\u4F60\uFF08",(0,e.jsx)("code",{children:r}),"\uFF09\u4F5C\u4E3A\u6210\u5458\u3002",a?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:"\u7FA4\u4E3B\u5DF2\u4ECE\u673A\u5668\u4EBA\u8F6C\u8BA9\u7ED9\u4F60\u3002"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8\u8F6C\u8BA9\u7FA4\u4E3B\u5931\u8D25\uFF08",c,"\uFF09\uFF0C\u4F60\u73B0\u5728\u662F\u6210\u5458\u4F46\u7FA4\u4E3B\u4ECD\u662F\u673A\u5668\u4EBA\u3002"]})]}):null,s?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{children:["\u673A\u5668\u4EBA\u5DF2\u5728\u7FA4\u91CC @ \u4E86\u4F60\uFF08\u6D88\u606F id ",(0,e.jsx)("code",{children:s}),"\uFF09\uFF0C\u770B\u98DE\u4E66\u901A\u77E5\u5C31\u80FD\u8FDB\u7FA4\u3002"]})]}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8 @ \u901A\u77E5\u5931\u8D25\uFF08",d,"\uFF09\uFF0C\u65B0\u7FA4\u53EF\u80FD\u4E0D\u4F1A\u4E3B\u52A8\u51FA\u73B0\u5728\u4F60\u4FA7\u8FB9\u680F\uFF0C\u5EFA\u8BAE\u4ECE\u4E0B\u9762\u6309\u94AE\u8DF3\u8FDB\u53BB\u3002"]})]}):null]}):n?(0,e.jsxs)("p",{className:"hint-warn",children:["\u98DE\u4E66\u62D2\u7EDD\u4E86\u81EA\u52A8\u9080\u8BF7\uFF08\u4F60\u7684 open_id \u5728\u521B\u5EFA\u8005 bot \u7684 scope \u4E0B\u4E0D\u53EF\u7528\uFF09\u3002",(0,e.jsx)("strong",{children:"\u4F60\u76EE\u524D\u4E0D\u662F\u65B0\u7FA4\u6210\u5458"}),"\uFF0C\u9700\u8981\u8BA9\u7FA4\u91CC\u7684\u67D0\u4E2A\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u6765\u3002"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u6CA1\u5728 dashboard \u7F13\u5B58\u91CC\u627E\u5230 ownerOpenId\uFF0C",(0,e.jsx)("strong",{children:"\u6CA1\u6709\u81EA\u52A8\u9080\u8BF7\u4F60"}),"\u3002\u70B9\u5F00\u4E0B\u9762\u94FE\u63A5\u524D\uFF0C\u5148\u8BA9\u7FA4\u91CC\u4EFB\u4E00\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u53BB\u3002"]})}function ze(o){let{chat:t,tr:r}=o,[n,a]=(0,i.useState)(!1),[c,s]=(0,i.useState)(null),[d,f]=(0,i.useState)(null),I=(0,i.useMemo)(()=>new Set((t.memberBots??[]).filter(h=>h.inChat).map(h=>h.larkAppId)),[t]);async function p(h){h.preventDefault();let u=new FormData(h.currentTarget).getAll("bot");if(u.length===0){s({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"}),f(null);return}a(!0),s(null),f(null);try{let g=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:u})})).json();if(g.error==="no_proxy_bot")s({title:"\u65E0\u6CD5\u6DFB\u52A0 bot",reason:"\u5F53\u524D\u7FA4\u91CC\u6CA1\u6709\u53EF\u4EE3\u7406\u64CD\u4F5C\u7684 bot\u3002\u8BF7\u5148\u5728\u98DE\u4E66\u91CC\u624B\u52A8\u62C9\u5165\u4E00\u4E2A bot\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"});else if(g.result){let y=xe(g.result);try{await o.onReloadGroups({force:!0}),f({result:y})}catch(C){f({result:y,refreshError:`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${C}`})}}else s({title:"\u54CD\u5E94\u5F02\u5E38",reason:JSON.stringify(g)})}catch(v){s({title:"\u7F51\u7EDC\u9519\u8BEF",reason:v})}finally{a(!1)}}return(0,e.jsxs)("article",{className:"g-add-bots-dialog",children:[(0,e.jsx)("header",{children:(0,e.jsxs)("h3",{children:[r("groups.addBots")," \xB7 ",t.name??t.chatId]})}),(0,e.jsx)("p",{children:r("groups.createHelp")}),(0,e.jsxs)("form",{id:"g-addform",onSubmit:h=>{p(h)},children:[(0,e.jsx)(Te,{bots:o.bots,excludeIds:I}),(0,e.jsxs)("div",{"data-add-status":!0,"aria-live":"polite",children:[c?(0,e.jsx)(te,{...c}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(De,{summary:d.result}),d.refreshError?(0,e.jsx)(te,{title:"\u5237\u65B0\u5931\u8D25",reason:d.refreshError}):null]}):null]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-cancel",onClick:o.onClose,children:r("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:n,children:n?"Adding...":r("groups.addBots")})]})]})]})}function Ve(o){let{tr:t}=o,[r,n]=(0,i.useState)([]),[a,c]=(0,i.useState)([]),[s,d]=(0,i.useState)(!0),[f,I]=(0,i.useState)(null),p=(0,i.useMemo)(()=>[...a].sort((m,T)=>m.profileId.localeCompare(T.profileId)),[a]),h=p.length>0,w=r.filter(m=>m.status==="empty").length,u=r.filter(m=>m.status==="error").length,v=!s&&!f&&r.length>0&&u===0,[g,y]=(0,i.useState)("new"),[C,x]=(0,i.useState)(o.suggestedProfileId),[P,S]=(0,i.useState)(""),[R,A]=(0,i.useState)(!1),[_,G]=(0,i.useState)(null),B=g==="overwrite"?P:C.trim(),D=t(g==="overwrite"?"groups.saveProfileOverwriteSubmit":"groups.saveProfileSubmit"),q=f||(s?t("groups.saveProfilePreparing"):u?t("groups.saveProfileFailedLoadSummary",{count:u}):r.length?w?t("groups.saveProfileEntrySummaryWithEmpty",{count:r.length,emptyCount:w}):t("groups.saveProfileEntrySummary",{count:r.length}):t("groups.saveProfileNoRoles"));(0,i.useEffect)(()=>{let m=!0;return d(!0),I(null),G(null),(async()=>{try{let[T,L]=await Promise.all([Ie(o.chat),V().catch(()=>[])]);if(!m)return;let M=[...L].sort((O,U)=>O.profileId.localeCompare(U.profileId));n(T),c(L),S(O=>M.some(U=>U.profileId===O)?O:M[0]?.profileId??"")}catch(T){if(!m)return;n([]),c([]),S(""),I(T instanceof Error?T.message:String(T))}finally{m&&d(!1)}})(),()=>{m=!1}},[o.chat]);async function $(m){if(m.preventDefault(),!!v){if(!Q(B)){G({text:t("groups.saveProfileInvalid"),className:"error"});return}A(!0),G({text:t("groups.saveProfileSaving")});try{let L=(await Promise.all(r.map(async M=>(await fetch(`/api/role-profiles/${encodeURIComponent(B)}/${encodeURIComponent(M.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:M.content,allowEmpty:!0})})).ok))).filter(Boolean).length;if(L!==r.length){G({text:t("groups.saveProfileFailed",{saved:L,total:r.length}),className:"error"}),A(!1);return}G({text:t("groups.saveProfileDone",{name:B,count:L}),className:"ok"}),await o.onRefreshRoleContext(),o.setTimer(o.onClose,700)}catch(T){G({text:String(T),className:"error"}),A(!1)}}}function N(m){m==="overwrite"&&!h||(y(m),G(null))}return(0,e.jsxs)("article",{className:"g-save-profile-dialog",children:[(0,e.jsxs)("header",{children:[(0,e.jsx)("h3",{children:t("groups.saveProfileTitle")}),(0,e.jsx)("p",{children:t("groups.saveProfileIntro",{name:o.chat.name??o.chat.chatId,count:s?"-":r.length})})]}),(0,e.jsxs)("form",{id:"g-save-profile-form",onSubmit:m=>{$(m)},children:[(0,e.jsxs)("section",{className:"g-save-profile-panel",children:[(0,e.jsxs)("div",{className:"g-save-profile-section-head",children:[(0,e.jsx)("span",{children:t("groups.saveProfileScope")}),(0,e.jsx)("small",{children:t("groups.saveProfileScopeHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-stats",children:[(0,e.jsxs)("span",{children:[t("groups.saveProfileBotCount")," ",(0,e.jsx)("strong",{children:s?"-":r.length})]}),u?(0,e.jsxs)("span",{className:"warn",children:[t("groups.saveProfileLoadFailed")," ",(0,e.jsx)("strong",{children:u})]}):null]}),(0,e.jsx)("div",{className:"g-save-profile-entry-list",children:s?(0,e.jsx)("div",{className:"g-save-profile-loading",children:(0,e.jsx)(Z,{label:t("common.loading")})}):f?(0,e.jsx)("div",{className:"g-save-profile-empty",children:f}):r.length?r.map(m=>(0,e.jsxs)("div",{className:`g-save-profile-entry ${m.status==="error"?"error":""}`,children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:m.botName??m.larkAppId}),(0,e.jsx)("code",{children:m.larkAppId})]}),(0,e.jsx)("span",{className:`g-save-profile-entry-status ${m.status==="error"?"error":"ok"}`,children:t(m.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")})]},m.larkAppId)):(0,e.jsx)("div",{className:"g-save-profile-empty",children:t("groups.saveProfileNoRoles")})})]}),(0,e.jsxs)("div",{className:"form-row",children:[(0,e.jsx)("span",{children:t("groups.saveProfileMode")}),(0,e.jsxs)("div",{className:"g-save-profile-switch",role:"tablist","aria-label":t("groups.saveProfileMode"),children:[(0,e.jsx)("button",{type:"button",className:g==="new"?"active":"","data-save-profile-mode":"new","aria-pressed":g==="new",onClick:()=>N("new"),children:t("groups.saveProfileNew")}),(0,e.jsx)("button",{type:"button",className:g==="overwrite"?"active":"","data-save-profile-mode":"overwrite","aria-pressed":g==="overwrite",disabled:!h,onClick:()=>N("overwrite"),children:t("groups.saveProfileOverwrite")})]})]}),(0,e.jsxs)("label",{className:"form-row","data-profile-mode-row":"new",hidden:g!=="new",children:[(0,e.jsx)("span",{children:t("groups.saveProfileIdLabel")}),(0,e.jsx)("input",{type:"text",name:"profileId",value:C,maxLength:64,autoComplete:"off",onChange:m=>{x(m.currentTarget.value),G(null)}}),(0,e.jsx)("small",{children:t("groups.saveProfileInvalid")})]}),(0,e.jsxs)("div",{className:"form-row","data-profile-mode-row":"overwrite",hidden:g!=="overwrite",children:[(0,e.jsx)("span",{children:t("groups.saveProfileExistingLabel")}),h?(0,e.jsx)("div",{className:"g-save-profile-picker",children:p.map(m=>(0,e.jsxs)("button",{type:"button",className:`g-save-profile-pick ${m.profileId===P?"selected":""}`,"data-profile-id":m.profileId,"aria-pressed":m.profileId===P,onClick:()=>{S(m.profileId),y("overwrite"),G(null)},children:[(0,e.jsx)("span",{children:m.profileId}),(0,e.jsx)("small",{children:t("groups.saveProfileExistingMeta",{count:m.entryCount??0})})]},m.profileId))}):(0,e.jsx)("div",{className:"g-save-profile-summary warn",children:t("groups.saveProfileExistingEmpty")}),(0,e.jsx)("small",{children:t("groups.saveProfileOverwriteHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-target",children:[(0,e.jsx)("span",{children:t("groups.saveProfileTarget")}),(0,e.jsx)("code",{"data-save-profile-target":!0,children:B||"-"}),(0,e.jsx)("small",{"data-save-profile-target-mode":!0,children:t(g==="overwrite"?"groups.saveProfileTargetOverwrite":"groups.saveProfileTargetNew")})]}),(0,e.jsx)("div",{className:`g-save-profile-summary ${v?"":"warn"}`,children:q}),(0,e.jsx)("div",{className:`g-save-profile-status ${_?.className??""}`,"data-save-profile-status":!0,children:_?.text??""}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-save-profile-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:!v||R||g==="overwrite"&&!P,children:R?t("groups.saveProfileSaving"):D})]})]})]})}function qe(o){let{member:t,tr:r}=o,n=(0,i.useRef)(null),[a,c]=(0,i.useState)(!!t.oncallChat),[s,d]=(0,i.useState)(t.oncallChat?.workingDir??""),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)(null);async function w(){h(null);let u=s.trim();if(a&&!u){h({text:r("groups.needWorkingDir"),className:"hint-warn-inline"});return}I(!0);try{let v=`/api/groups/${encodeURIComponent(o.chat.chatId)}/oncall/${encodeURIComponent(t.larkAppId)}`,g=a?await fetch(v,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:u})}):await fetch(v,{method:"DELETE"}),y=await g.json().catch(()=>({}));if(g.ok&&y.ok){h({text:a?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${y.resolvedPath??u}`:"\u2713 \u5DF2\u89E3\u7ED1",className:"hint-ok"});try{await o.onSaved()}catch{}}else h({text:`\u2717 ${y.error??g.status}`,className:"hint-warn-inline"})}catch(v){h({text:`\u2717 ${v?.message??v}`,className:"hint-warn-inline"})}finally{I(!1)}}return(0,e.jsxs)("div",{className:"oncall-row","data-bot":t.larkAppId,children:[(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox","data-action":"toggle",checked:a,onChange:u=>{c(u.currentTarget.checked),u.currentTarget.checked&&window.setTimeout(()=>n.current?.focus(),0)}}),(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]}),(0,e.jsxs)("div",{className:"oncall-row-body",children:[(0,e.jsx)("input",{ref:n,type:"text","data-input":"workingDir",placeholder:"e.g. /root/iserver/botmux",value:s,disabled:!a,onChange:u=>d(u.currentTarget.value)}),(0,e.jsx)("button",{type:"button","data-action":"save",disabled:f,onClick:()=>{w()},children:r("groups.save")}),(0,e.jsx)("span",{className:`oncall-status ${p?.className??""}`,"data-status":!0,children:p?.text??""})]})]})}function Ke(o){let{chat:t,tr:r}=o,n=(t.memberBots??[]).filter(p=>p.inChat),a=typeof t.ownerId=="string"?t.ownerId:"",[c,s]=(0,i.useState)(()=>new Set);function d(p,h){s(w=>{let u=new Set(w);return h?u.add(p):u.delete(p),u})}async function f(){let p=[...c];if(p.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${p.length} \u4E2A\u673A\u5668\u4EBA\u9000\u51FA\u7FA4\u804A\uFF1F\u8BE5 bot \u5728\u6B64\u7FA4\u7684\u4F1A\u8BDD\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))try{let w=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:p})})).json(),u=(w.result??[]).map(v=>{if(!v.ok)return`${v.larkAppId}: \u5931\u8D25 (${v.error??"unknown"})`;let g=v.closedSessions??[],y=g.filter(P=>!P.ok).length,C=g.length-y,x=g.length===0?"":y===0?`\uFF08\u5173\u95ED ${C} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${C} \u4E2A\uFF0C${y} \u4E2A\u5931\u8D25\uFF09`;return`${v.larkAppId}: OK${x}`}).join(`
1
+ import{a as fe,b as he,c as ve,d as be}from"./chunk-R3FXBFQH.js";import{b as me}from"./chunk-KPQAUX7V.js";import{c as Z,g as X,h as le,l as ce,m as ue,n as de,o as pe,p as ge}from"./chunk-QFMH6ITB.js";import{c as j,d as J,s as z,v as ae,x as ne}from"./chunk-X2L65IOM.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Le,d as ie}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var i=K(Le(),1);var $e=/^[A-Za-z0-9._-]{1,64}$/,we=6,ye=30;function Y(o,t){return ve(o,t)}function ke(o,t,r=ye){let n=Number.isFinite(r)?Math.max(1,Math.floor(r)):ye,a=o.length,c=Math.max(1,Math.ceil(a/n)),s=Number.isFinite(t)?Math.floor(t):1,d=Math.min(c,Math.max(1,s)),f=(d-1)*n,I=Math.min(a,f+n);return{rows:o.slice(f,I),page:d,totalPages:c,from:a===0?0:f+1,to:I,total:a}}async function Pe(o,t,r){if(o.length===0)return[];let n=new Array(o.length),a=0,c=Math.min(Math.max(1,t),o.length);return await Promise.all(Array.from({length:c},async()=>{for(;a<o.length;){let s=a++;n[s]=await r(o[s])}})),n}function Q(o){return $e.test(o)&&o!=="."&&o!==".."}function ee(o){let t=String(o??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return Q(t)?t:"profile"}async function V(){let t=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(t.profiles)?t.profiles:[]}async function Ce(o){let t=await V(),r=await Pe(t,we,async s=>{try{let f=await(await fetch(`/api/role-profiles/${encodeURIComponent(s.profileId)}`)).json().catch(()=>({}));return[s.profileId,Array.isArray(f.entries)?f.entries:[]]}catch{return[s.profileId,[]]}}),n=new Set,a=[];for(let s of o.chats??[])for(let d of s.memberBots??[]){if(!d?.inChat||!d?.hasRole||!d?.larkAppId)continue;let f=Y(d.larkAppId,s.chatId);n.has(f)||(n.add(f),a.push({chatId:s.chatId,larkAppId:d.larkAppId}))}let c=await be(a);return{profiles:t,entriesById:new Map(r),groupRoleContentByBot:c,loaded:!0}}async function Ie(o){let t=(o.memberBots??[]).filter(r=>r?.inChat&&r?.larkAppId);return Pe(t,we,async r=>{try{let a=await(await fetch(`/api/roles/${encodeURIComponent(r.larkAppId)}/${encodeURIComponent(o.chatId)}`)).json().catch(()=>({})),c=a?.hasEffectiveRole??a?.hasRole,s="effectiveContent"in a?a.effectiveContent:a.content,d=c?String(s??"").trim():"",f=a?.effectiveSource==="chat"||a?.effectiveSource==="team"?a.effectiveSource:null;return{larkAppId:r.larkAppId,botName:r.botName,content:d,status:d?f??"chat":"empty"}}catch{return{larkAppId:r.larkAppId,botName:r.botName,content:"",status:"error"}}})}function Se(o,t){return o.filter(r=>!t||!t.has(r.larkAppId))}function Ne(o,t){let r=t.q.trim().toLowerCase();return o.filter(n=>!r||(n.name??"").toLowerCase().includes(r)||n.chatId.toLowerCase().includes(r)||(n.ownerId??"").toLowerCase().includes(r)).filter(n=>!t.missingOnly||(n.memberBots??[]).some(a=>!a.inChat))}function Re(o,t){if(t.size===0)return!0;let r=o?.memberBots??[];for(let n of t)if(!r.some(a=>a.larkAppId===n&&a.inChat))return!1;return!0}function xe(o){let t=Array.isArray(o)?o:[],r=t.filter(n=>!!n?.ok).length;return{rows:t,okCount:r,failed:t.length-r}}function Ae(o,t,r){let n=String(o??"").trim();if(!n)return null;if(r)return{kind:"warn",text:z("groups.roleProfileBootstrapFailed",{name:n,reason:String(r)})};let a=typeof t=="string"&&t.trim()?t.trim():"";return a?{kind:"ok",text:z("groups.roleProfileBootstrapSent",{name:n,messageId:a})}:{kind:"ok",text:z("groups.roleProfileBootstrapDone",{name:n})}}function Ge(o,t,r,n,a){let c=new Set(n);a&&c.add(a);let s={chatId:t,name:r,ownerId:a??null,memberBots:o.bots.map(d=>({larkAppId:d.larkAppId,botName:d.botName,inChat:c.has(d.larkAppId),oncallChat:null}))};return{bots:o.bots,chats:[s,...o.chats.filter(d=>d.chatId!==t)]}}var e=K(ie(),1);function Be(){return{profiles:[],entriesById:new Map,groupRoleContentByBot:new Map,loaded:!1}}function Me(o){let t={};for(let r of ae(o).split(";")){if(!r)continue;let n=r.indexOf(":");n<=0||(t[r.slice(0,n)]=r.slice(n+1))}return t}function Oe(o){let t=o.chat,r=t.avatar??ne(t.chatId),[n,a]=(0,i.useState)(!1);(0,i.useEffect)(()=>{a(!1)},[r]);let c=t.name??t.chatId,s=!!r&&!n;return(0,e.jsx)("span",{className:`orb-avatar orb-square orb-avatar-sm${s?" orb-has-img":""}`,style:Me(c),"aria-hidden":"true",children:s?(0,e.jsx)("img",{className:"orb-img",src:r,alt:"",decoding:"async",referrerPolicy:"no-referrer",onError:()=>a(!0)}):null})}function te(o){return(0,e.jsxs)("p",{className:"hint-warn",children:[(0,e.jsx)("strong",{children:o.title}),(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:String(o.reason??"unknown")})]})}function Te(o){return(0,e.jsx)(e.Fragment,{children:Se(o.bots,o.excludeIds).map(t=>(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox",name:"bot",value:t.larkAppId}),(0,e.jsxs)("span",{className:"checkbox-row-main",children:[(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]})]},t.larkAppId))})}function De(o){let t=o.summary;return t.rows.length?(0,e.jsxs)("div",{className:t.failed?"hint-warn":"hint-ok",children:[(0,e.jsxs)("strong",{children:["\u6DFB\u52A0\u7ED3\u679C\uFF1A\u6210\u529F ",t.okCount,"/",t.rows.length,t.failed?`\uFF0C\u5931\u8D25 ${t.failed}`:""]}),(0,e.jsx)("ul",{children:t.rows.map((r,n)=>{let a=String(r?.id??"?");return(0,e.jsxs)("li",{children:[(0,e.jsx)("code",{children:a}),": ",r?.ok?"OK":`failed (${String(r?.error??"unknown")})`]},`${a}-${n}`)})})]}):(0,e.jsx)("p",{className:"hint-warn",children:"\u6CA1\u6709\u8FD4\u56DE\u6DFB\u52A0\u7ED3\u679C\u3002"})}function Fe(o){let{chat:t,context:r,tr:n}=o;if(!r.profiles.length||!r.loaded)return null;let a=new Map;for(let f of t.memberBots??[])f?.inChat&&a.set(f.larkAppId,r.groupRoleContentByBot.get(Y(f.larkAppId,t.chatId))??null);if(!fe(a))return null;let s=he(t.memberBots??[],r.profiles,r.entriesById,a)[0];if(!s)return(0,e.jsx)("div",{className:"g-profile-status muted",children:n("groups.profileStatusUnmatched")});let d=s.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`g-profile-status ${s.kind}`,children:n(d,{name:s.profileId,matched:s.matched,total:s.total,chat:s.chatMatched})})}function je(o){return o?o.error?"error":o.inChat?"in":"out":"unknown"}function Ue(o,t){switch(o){case"in":return t("groups.botStatusIn");case"out":return t("groups.botStatusOut");case"error":return t("groups.botStatusError");default:return t("groups.botStatusUnknown")}}function He(o){let t=new Map((o.chat.memberBots??[]).map(r=>[r.larkAppId,r]));return(0,e.jsx)("div",{className:"groups-bot-strip","aria-label":o.tr("groups.botCoverage"),children:o.bots.map(r=>{let n=t.get(r.larkAppId),a=je(n),c=Ue(a,o.tr),s=r.botName??r.larkAppId;return(0,e.jsxs)("span",{className:`groups-bot-pill groups-bot-${a}`,title:`${s}: ${c}${n?.error?` (${String(n.error)})`:""}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),(0,e.jsx)("span",{className:"groups-bot-name",children:s}),(0,e.jsx)("span",{className:"groups-bot-state",children:c})]},r.larkAppId)})})}var _e=(0,i.memo)(function(t){let{chat:r,tr:n}=t,c=(r.memberBots??[]).filter(s=>s.inChat).length;return(0,e.jsxs)(ue,{kind:"group",className:"groups-list-row","data-chat":r.chatId,children:[(0,e.jsx)(Oe,{chat:r}),(0,e.jsxs)(de,{children:[(0,e.jsxs)("div",{className:"groups-row-head",children:[(0,e.jsx)("b",{children:r.name??r.chatId}),(0,e.jsxs)("span",{className:"groups-row-meta",children:[(0,e.jsx)("span",{className:"groups-row-tag",children:(0,e.jsx)("code",{children:r.chatId})}),r.ownerId?(0,e.jsxs)("span",{className:"groups-row-tag groups-row-owner-tag",children:[(0,e.jsx)("span",{children:n("groups.owner")}),(0,e.jsx)("code",{children:r.ownerId})]}):null]})]}),(0,e.jsx)(Fe,{chat:r,context:t.roleContext,tr:n})]}),(0,e.jsx)("span",{className:"groups-row-count",children:n("groups.memberSummary",{count:c,total:t.bots.length})}),(0,e.jsxs)("div",{className:"groups-row-lower",children:[(0,e.jsx)(He,{chat:r,bots:t.bots,tr:n}),(0,e.jsxs)(pe,{children:[(0,e.jsx)(X,{className:"add-bots",onClick:()=>t.onAddBots(r),children:n("groups.addBots")}),(0,e.jsx)("button",{className:"save-profile",type:"button",onClick:()=>t.onSaveProfile(r),children:n("groups.saveAsProfile")}),(0,e.jsx)("button",{className:"manage-chat",type:"button",onClick:()=>t.onManage(r),children:n("groups.manage")})]})]})]})});function We(o){let{tr:t}=o,[r,n]=(0,i.useState)(!1),[a,c]=(0,i.useState)(null),[s,d]=(0,i.useState)(null),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)("");async function w(u){u.preventDefault();let v=new FormData(u.currentTarget),g=String(v.get("name")??"").trim(),y=String(v.get("bindWorkingDir")??"").trim(),C=String(v.get("roleProfileId")??"").trim(),x=v.getAll("bot");if(x.length===0){c({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u521B\u5EFA\u7FA4\u804A\u3002"});return}n(!0),c(null);try{let P=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:g||void 0,larkAppIds:x,bindWorkingDir:y||void 0,roleProfileId:C||void 0})}),S=await P.json().catch(()=>({ok:!1,error:`HTTP ${P.status}`}));S.ok&&S.chatId?(d(S),o.onCreated(S,x,g)):(c({title:"\u521B\u5EFA\u5931\u8D25",reason:S.error??`HTTP ${P.status}`}),n(!1))}catch(P){c({title:"\u7F51\u7EDC\u9519\u8BEF",reason:P}),n(!1)}}if(s){let u=String(s.chatId),v=typeof s.shareLink=="string"&&s.shareLink?s.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(u)}`,g=s.invalidBotIds??[],y=s.invalidUserIds??[],C=Array.isArray(s.oncallBindings)?s.oncallBindings:[],x=C.filter(R=>R?.ok).length,P=C.filter(R=>!R?.ok),S=Ae(typeof s.roleProfileId=="string"?s.roleProfileId:"",s.roleProfileBootstrapMessageId,s.roleProfileBootstrapError);return(0,e.jsxs)("article",{className:"g-create-dialog g-create-success",children:[(0,e.jsx)("header",{children:(0,e.jsx)("h3",{children:t("groups.successTitle")})}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"chatId:"})," ",(0,e.jsx)("code",{children:u})," ",(0,e.jsx)("button",{type:"button","data-copy":u,onClick:()=>{navigator.clipboard.writeText(u),I(!0),o.setTimer(()=>I(!1),800)},children:t(f?"sessions.copied":"sessions.copy")})]}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"\u521B\u5EFA\u8005:"})," ",(0,e.jsx)("code",{children:String(s.creator??"?")})]}),(0,e.jsx)(Je,{resp:s}),C.length>0?P.length===0?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u7ED1\u5B9A\u76EE\u5F55\uFF1A",(0,e.jsx)("code",{children:String(s.bindResolvedPath??"")}),"\uFF08",x,"/",C.length," bots\uFF09"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ",x,"/",C.length,"\u3002",P.map((R,A)=>(0,e.jsxs)("span",{children:[(0,e.jsx)("br",{}),(0,e.jsx)("code",{children:String(R?.larkAppId??"?")}),": ",String(R?.error??"unknown")]},`${R?.larkAppId??"?"}-${A}`))]}):null,S?(0,e.jsx)("p",{className:S.kind==="ok"?"hint-ok":"hint-warn",children:S.text}):null,g.length||y.length?(0,e.jsxs)("ul",{children:[g.length?(0,e.jsxs)("li",{children:["\u65E0\u6548 bot id: ",(0,e.jsx)("code",{children:g.join(", ")})]}):null,y.length?(0,e.jsxs)("li",{children:["\u65E0\u6548\u7528\u6237 open_id: ",(0,e.jsx)("code",{children:y.join(", ")})]}):null]}):null,(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-close",onClick:o.onClose,children:t("sessions.dismiss")}),(0,e.jsx)("a",{className:"btn-link primary",href:v,target:"_blank",rel:"noopener",children:t("groups.openGroup")})]})]})}return(0,e.jsxs)("article",{className:"g-create-dialog",children:[(0,e.jsxs)("header",{className:"g-create-head",children:[(0,e.jsx)("h3",{children:t("groups.createTitle")}),(0,e.jsx)("p",{children:t("groups.createHelp")})]}),(0,e.jsxs)("form",{id:"g-createform",className:"g-create-form",onSubmit:u=>{w(u)},children:[(0,e.jsxs)("fieldset",{className:"g-modal-field g-create-bots",children:[(0,e.jsx)("legend",{children:t("groups.botPicker")}),(0,e.jsx)("div",{className:"g-bot-picker",children:(0,e.jsx)(Te,{bots:o.bots})})]}),(0,e.jsxs)("div",{className:"g-create-fields",children:[(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.name")}),(0,e.jsx)("input",{type:"text",name:"name",placeholder:t("groups.namePlaceholder"),maxLength:60})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.bindDir")}),(0,e.jsx)("input",{type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/botmux"}),(0,e.jsx)("small",{children:t("groups.bindDirHelp")})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field g-profile-field",children:[(0,e.jsx)("legend",{children:t("groups.roleProfile")}),(0,e.jsx)("input",{type:"hidden",name:"roleProfileId",value:p}),(0,e.jsx)(ge,{className:"g-profile-menu",ariaLabel:t("groups.roleProfile"),label:p||t("groups.roleProfileNone"),value:p,options:[{value:"",label:t("groups.roleProfileNone")},...o.roleProfiles.map(u=>({value:u.profileId,label:u.profileId}))],onChange:h}),(0,e.jsx)("small",{children:t("groups.roleProfileHelp")})]})]}),(0,e.jsx)("div",{className:"g-create-status","data-create-status":!0,"aria-live":"polite",children:a?(0,e.jsx)(te,{...a}):null}),(0,e.jsxs)("div",{className:"actions g-create-actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:r,children:r?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("i",{className:"button-spinner","aria-hidden":"true"}),t("groups.createSubmitting")]}):t("groups.createSubmit")})]})]})]})}function Je(o){let t=o.resp,r=t.autoInvitedOpenId,n=!!t.autoInviteRejected,a=t.ownerTransferredTo,c=t.transferError,s=t.notifyMessageId,d=t.notifyError;return r?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u81EA\u52A8\u9080\u8BF7\u4F60\uFF08",(0,e.jsx)("code",{children:r}),"\uFF09\u4F5C\u4E3A\u6210\u5458\u3002",a?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:"\u7FA4\u4E3B\u5DF2\u4ECE\u673A\u5668\u4EBA\u8F6C\u8BA9\u7ED9\u4F60\u3002"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8\u8F6C\u8BA9\u7FA4\u4E3B\u5931\u8D25\uFF08",c,"\uFF09\uFF0C\u4F60\u73B0\u5728\u662F\u6210\u5458\u4F46\u7FA4\u4E3B\u4ECD\u662F\u673A\u5668\u4EBA\u3002"]})]}):null,s?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{children:["\u673A\u5668\u4EBA\u5DF2\u5728\u7FA4\u91CC @ \u4E86\u4F60\uFF08\u6D88\u606F id ",(0,e.jsx)("code",{children:s}),"\uFF09\uFF0C\u770B\u98DE\u4E66\u901A\u77E5\u5C31\u80FD\u8FDB\u7FA4\u3002"]})]}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8 @ \u901A\u77E5\u5931\u8D25\uFF08",d,"\uFF09\uFF0C\u65B0\u7FA4\u53EF\u80FD\u4E0D\u4F1A\u4E3B\u52A8\u51FA\u73B0\u5728\u4F60\u4FA7\u8FB9\u680F\uFF0C\u5EFA\u8BAE\u4ECE\u4E0B\u9762\u6309\u94AE\u8DF3\u8FDB\u53BB\u3002"]})]}):null]}):n?(0,e.jsxs)("p",{className:"hint-warn",children:["\u98DE\u4E66\u62D2\u7EDD\u4E86\u81EA\u52A8\u9080\u8BF7\uFF08\u4F60\u7684 open_id \u5728\u521B\u5EFA\u8005 bot \u7684 scope \u4E0B\u4E0D\u53EF\u7528\uFF09\u3002",(0,e.jsx)("strong",{children:"\u4F60\u76EE\u524D\u4E0D\u662F\u65B0\u7FA4\u6210\u5458"}),"\uFF0C\u9700\u8981\u8BA9\u7FA4\u91CC\u7684\u67D0\u4E2A\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u6765\u3002"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u6CA1\u5728 dashboard \u7F13\u5B58\u91CC\u627E\u5230 ownerOpenId\uFF0C",(0,e.jsx)("strong",{children:"\u6CA1\u6709\u81EA\u52A8\u9080\u8BF7\u4F60"}),"\u3002\u70B9\u5F00\u4E0B\u9762\u94FE\u63A5\u524D\uFF0C\u5148\u8BA9\u7FA4\u91CC\u4EFB\u4E00\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u53BB\u3002"]})}function ze(o){let{chat:t,tr:r}=o,[n,a]=(0,i.useState)(!1),[c,s]=(0,i.useState)(null),[d,f]=(0,i.useState)(null),I=(0,i.useMemo)(()=>new Set((t.memberBots??[]).filter(h=>h.inChat).map(h=>h.larkAppId)),[t]);async function p(h){h.preventDefault();let u=new FormData(h.currentTarget).getAll("bot");if(u.length===0){s({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"}),f(null);return}a(!0),s(null),f(null);try{let g=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:u})})).json();if(g.error==="no_proxy_bot")s({title:"\u65E0\u6CD5\u6DFB\u52A0 bot",reason:"\u5F53\u524D\u7FA4\u91CC\u6CA1\u6709\u53EF\u4EE3\u7406\u64CD\u4F5C\u7684 bot\u3002\u8BF7\u5148\u5728\u98DE\u4E66\u91CC\u624B\u52A8\u62C9\u5165\u4E00\u4E2A bot\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"});else if(g.result){let y=xe(g.result);try{await o.onReloadGroups({force:!0}),f({result:y})}catch(C){f({result:y,refreshError:`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${C}`})}}else s({title:"\u54CD\u5E94\u5F02\u5E38",reason:JSON.stringify(g)})}catch(v){s({title:"\u7F51\u7EDC\u9519\u8BEF",reason:v})}finally{a(!1)}}return(0,e.jsxs)("article",{className:"g-add-bots-dialog",children:[(0,e.jsx)("header",{children:(0,e.jsxs)("h3",{children:[r("groups.addBots")," \xB7 ",t.name??t.chatId]})}),(0,e.jsx)("p",{children:r("groups.createHelp")}),(0,e.jsxs)("form",{id:"g-addform",onSubmit:h=>{p(h)},children:[(0,e.jsx)(Te,{bots:o.bots,excludeIds:I}),(0,e.jsxs)("div",{"data-add-status":!0,"aria-live":"polite",children:[c?(0,e.jsx)(te,{...c}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(De,{summary:d.result}),d.refreshError?(0,e.jsx)(te,{title:"\u5237\u65B0\u5931\u8D25",reason:d.refreshError}):null]}):null]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-cancel",onClick:o.onClose,children:r("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:n,children:n?"Adding...":r("groups.addBots")})]})]})]})}function Ve(o){let{tr:t}=o,[r,n]=(0,i.useState)([]),[a,c]=(0,i.useState)([]),[s,d]=(0,i.useState)(!0),[f,I]=(0,i.useState)(null),p=(0,i.useMemo)(()=>[...a].sort((m,T)=>m.profileId.localeCompare(T.profileId)),[a]),h=p.length>0,w=r.filter(m=>m.status==="empty").length,u=r.filter(m=>m.status==="error").length,v=!s&&!f&&r.length>0&&u===0,[g,y]=(0,i.useState)("new"),[C,x]=(0,i.useState)(o.suggestedProfileId),[P,S]=(0,i.useState)(""),[R,A]=(0,i.useState)(!1),[_,G]=(0,i.useState)(null),B=g==="overwrite"?P:C.trim(),D=t(g==="overwrite"?"groups.saveProfileOverwriteSubmit":"groups.saveProfileSubmit"),q=f||(s?t("groups.saveProfilePreparing"):u?t("groups.saveProfileFailedLoadSummary",{count:u}):r.length?w?t("groups.saveProfileEntrySummaryWithEmpty",{count:r.length,emptyCount:w}):t("groups.saveProfileEntrySummary",{count:r.length}):t("groups.saveProfileNoRoles"));(0,i.useEffect)(()=>{let m=!0;return d(!0),I(null),G(null),(async()=>{try{let[T,L]=await Promise.all([Ie(o.chat),V().catch(()=>[])]);if(!m)return;let M=[...L].sort((O,U)=>O.profileId.localeCompare(U.profileId));n(T),c(L),S(O=>M.some(U=>U.profileId===O)?O:M[0]?.profileId??"")}catch(T){if(!m)return;n([]),c([]),S(""),I(T instanceof Error?T.message:String(T))}finally{m&&d(!1)}})(),()=>{m=!1}},[o.chat]);async function $(m){if(m.preventDefault(),!!v){if(!Q(B)){G({text:t("groups.saveProfileInvalid"),className:"error"});return}A(!0),G({text:t("groups.saveProfileSaving")});try{let L=(await Promise.all(r.map(async M=>(await fetch(`/api/role-profiles/${encodeURIComponent(B)}/${encodeURIComponent(M.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:M.content,allowEmpty:!0})})).ok))).filter(Boolean).length;if(L!==r.length){G({text:t("groups.saveProfileFailed",{saved:L,total:r.length}),className:"error"}),A(!1);return}G({text:t("groups.saveProfileDone",{name:B,count:L}),className:"ok"}),await o.onRefreshRoleContext(),o.setTimer(o.onClose,700)}catch(T){G({text:String(T),className:"error"}),A(!1)}}}function N(m){m==="overwrite"&&!h||(y(m),G(null))}return(0,e.jsxs)("article",{className:"g-save-profile-dialog",children:[(0,e.jsxs)("header",{children:[(0,e.jsx)("h3",{children:t("groups.saveProfileTitle")}),(0,e.jsx)("p",{children:t("groups.saveProfileIntro",{name:o.chat.name??o.chat.chatId,count:s?"-":r.length})})]}),(0,e.jsxs)("form",{id:"g-save-profile-form",onSubmit:m=>{$(m)},children:[(0,e.jsxs)("section",{className:"g-save-profile-panel",children:[(0,e.jsxs)("div",{className:"g-save-profile-section-head",children:[(0,e.jsx)("span",{children:t("groups.saveProfileScope")}),(0,e.jsx)("small",{children:t("groups.saveProfileScopeHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-stats",children:[(0,e.jsxs)("span",{children:[t("groups.saveProfileBotCount")," ",(0,e.jsx)("strong",{children:s?"-":r.length})]}),u?(0,e.jsxs)("span",{className:"warn",children:[t("groups.saveProfileLoadFailed")," ",(0,e.jsx)("strong",{children:u})]}):null]}),(0,e.jsx)("div",{className:"g-save-profile-entry-list",children:s?(0,e.jsx)("div",{className:"g-save-profile-loading",children:(0,e.jsx)(Z,{label:t("common.loading")})}):f?(0,e.jsx)("div",{className:"g-save-profile-empty",children:f}):r.length?r.map(m=>(0,e.jsxs)("div",{className:`g-save-profile-entry ${m.status==="error"?"error":""}`,children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:m.botName??m.larkAppId}),(0,e.jsx)("code",{children:m.larkAppId})]}),(0,e.jsx)("span",{className:`g-save-profile-entry-status ${m.status==="error"?"error":"ok"}`,children:t(m.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")})]},m.larkAppId)):(0,e.jsx)("div",{className:"g-save-profile-empty",children:t("groups.saveProfileNoRoles")})})]}),(0,e.jsxs)("div",{className:"form-row",children:[(0,e.jsx)("span",{children:t("groups.saveProfileMode")}),(0,e.jsxs)("div",{className:"g-save-profile-switch",role:"tablist","aria-label":t("groups.saveProfileMode"),children:[(0,e.jsx)("button",{type:"button",className:g==="new"?"active":"","data-save-profile-mode":"new","aria-pressed":g==="new",onClick:()=>N("new"),children:t("groups.saveProfileNew")}),(0,e.jsx)("button",{type:"button",className:g==="overwrite"?"active":"","data-save-profile-mode":"overwrite","aria-pressed":g==="overwrite",disabled:!h,onClick:()=>N("overwrite"),children:t("groups.saveProfileOverwrite")})]})]}),(0,e.jsxs)("label",{className:"form-row","data-profile-mode-row":"new",hidden:g!=="new",children:[(0,e.jsx)("span",{children:t("groups.saveProfileIdLabel")}),(0,e.jsx)("input",{type:"text",name:"profileId",value:C,maxLength:64,autoComplete:"off",onChange:m=>{x(m.currentTarget.value),G(null)}}),(0,e.jsx)("small",{children:t("groups.saveProfileInvalid")})]}),(0,e.jsxs)("div",{className:"form-row","data-profile-mode-row":"overwrite",hidden:g!=="overwrite",children:[(0,e.jsx)("span",{children:t("groups.saveProfileExistingLabel")}),h?(0,e.jsx)("div",{className:"g-save-profile-picker",children:p.map(m=>(0,e.jsxs)("button",{type:"button",className:`g-save-profile-pick ${m.profileId===P?"selected":""}`,"data-profile-id":m.profileId,"aria-pressed":m.profileId===P,onClick:()=>{S(m.profileId),y("overwrite"),G(null)},children:[(0,e.jsx)("span",{children:m.profileId}),(0,e.jsx)("small",{children:t("groups.saveProfileExistingMeta",{count:m.entryCount??0})})]},m.profileId))}):(0,e.jsx)("div",{className:"g-save-profile-summary warn",children:t("groups.saveProfileExistingEmpty")}),(0,e.jsx)("small",{children:t("groups.saveProfileOverwriteHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-target",children:[(0,e.jsx)("span",{children:t("groups.saveProfileTarget")}),(0,e.jsx)("code",{"data-save-profile-target":!0,children:B||"-"}),(0,e.jsx)("small",{"data-save-profile-target-mode":!0,children:t(g==="overwrite"?"groups.saveProfileTargetOverwrite":"groups.saveProfileTargetNew")})]}),(0,e.jsx)("div",{className:`g-save-profile-summary ${v?"":"warn"}`,children:q}),(0,e.jsx)("div",{className:`g-save-profile-status ${_?.className??""}`,"data-save-profile-status":!0,children:_?.text??""}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-save-profile-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:!v||R||g==="overwrite"&&!P,children:R?t("groups.saveProfileSaving"):D})]})]})]})}function qe(o){let{member:t,tr:r}=o,n=(0,i.useRef)(null),[a,c]=(0,i.useState)(!!t.oncallChat),[s,d]=(0,i.useState)(t.oncallChat?.workingDir??""),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)(null);async function w(){h(null);let u=s.trim();if(a&&!u){h({text:r("groups.needWorkingDir"),className:"hint-warn-inline"});return}I(!0);try{let v=`/api/groups/${encodeURIComponent(o.chat.chatId)}/oncall/${encodeURIComponent(t.larkAppId)}`,g=a?await fetch(v,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:u})}):await fetch(v,{method:"DELETE"}),y=await g.json().catch(()=>({}));if(g.ok&&y.ok){h({text:a?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${y.resolvedPath??u}`:"\u2713 \u5DF2\u89E3\u7ED1",className:"hint-ok"});try{await o.onSaved()}catch{}}else h({text:`\u2717 ${y.error??g.status}`,className:"hint-warn-inline"})}catch(v){h({text:`\u2717 ${v?.message??v}`,className:"hint-warn-inline"})}finally{I(!1)}}return(0,e.jsxs)("div",{className:"oncall-row","data-bot":t.larkAppId,children:[(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox","data-action":"toggle",checked:a,onChange:u=>{c(u.currentTarget.checked),u.currentTarget.checked&&window.setTimeout(()=>n.current?.focus(),0)}}),(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]}),(0,e.jsxs)("div",{className:"oncall-row-body",children:[(0,e.jsx)("input",{ref:n,type:"text","data-input":"workingDir",placeholder:"e.g. /root/iserver/botmux",value:s,disabled:!a,onChange:u=>d(u.currentTarget.value)}),(0,e.jsx)("button",{type:"button","data-action":"save",disabled:f,onClick:()=>{w()},children:r("groups.save")}),(0,e.jsx)("span",{className:`oncall-status ${p?.className??""}`,"data-status":!0,children:p?.text??""})]})]})}function Ke(o){let{chat:t,tr:r}=o,n=(t.memberBots??[]).filter(p=>p.inChat),a=typeof t.ownerId=="string"?t.ownerId:"",[c,s]=(0,i.useState)(()=>new Set);function d(p,h){s(w=>{let u=new Set(w);return h?u.add(p):u.delete(p),u})}async function f(){let p=[...c];if(p.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${p.length} \u4E2A\u673A\u5668\u4EBA\u9000\u51FA\u7FA4\u804A\uFF1F\u8BE5 bot \u5728\u6B64\u7FA4\u7684\u4F1A\u8BDD\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))try{let w=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:p})})).json(),u=(w.result??[]).map(v=>{if(!v.ok)return`${v.larkAppId}: \u5931\u8D25 (${v.error??"unknown"})`;let g=v.closedSessions??[],y=g.filter(P=>!P.ok).length,C=g.length-y,x=g.length===0?"":y===0?`\uFF08\u5173\u95ED ${C} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${C} \u4E2A\uFF0C${y} \u4E2A\u5931\u8D25\uFF09`;return`${v.larkAppId}: OK${x}`}).join(`
2
2
  `);alert(u||`Unexpected: ${JSON.stringify(w)}`),await o.onReloadGroups({force:!0})}catch(h){alert("Network error: "+h)}finally{o.onClose()}}async function I(){if(n.length===0||!confirm(`\u786E\u5B9A\u89E3\u6563\u7FA4\u804A\u300C${t.name??t.chatId}\u300D\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF0C\u672C\u7FA4\u6240\u6709\u673A\u5668\u4EBA\u4F1A\u8BDD\u4E5F\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))return;let p=[...n].sort((w,u)=>(u.larkAppId===a?1:0)-(w.larkAppId===a?1:0)),h=[];for(let w of p)try{let u=await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/disband`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppId:w.larkAppId})}),v=await u.json();if(v.ok){let g=v.closedSessions??[],y=g.filter(P=>!P.ok).length,C=g.length-y,x=g.length===0?"":y===0?`
3
3
  \u5173\u95ED\u4E86 ${C} \u4E2A\u4F1A\u8BDD\u3002`:`
4
4
  \u5173\u95ED\u4E86 ${C} \u4E2A\u4F1A\u8BDD\uFF0C${y} \u4E2A\u4F1A\u8BDD\u5173\u95ED\u5931\u8D25\u3002`;alert(`\u5DF2\u89E3\u6563\uFF08\u7531 ${w.botName??w.larkAppId} \u6267\u884C\uFF09${x}`),await o.onReloadGroups({force:!0}),o.onClose();return}h.push(`${w.botName??w.larkAppId}: ${v.error??u.status}`)}catch(u){h.push(`${w.botName??w.larkAppId}: ${u}`)}alert(`\u6240\u6709\u5728\u7FA4\u673A\u5668\u4EBA\u5747\u65E0\u6CD5\u89E3\u6563\uFF1A