botmux 3.16.0 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +84 -1
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +202 -19
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/backend/sandbox.d.ts +8 -0
  7. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  8. package/dist/adapters/backend/sandbox.js +15 -0
  9. package/dist/adapters/backend/sandbox.js.map +1 -1
  10. package/dist/adapters/backend/tmux-backend.d.ts +61 -7
  11. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-backend.js +80 -9
  13. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  14. package/dist/adapters/backend/tmux-pipe-backend.d.ts +62 -4
  15. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  16. package/dist/adapters/backend/tmux-pipe-backend.js +240 -27
  17. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  18. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  19. package/dist/adapters/cli/claude-code.js +4 -2
  20. package/dist/adapters/cli/claude-code.js.map +1 -1
  21. package/dist/adapters/cli/coco.d.ts.map +1 -1
  22. package/dist/adapters/cli/coco.js +27 -0
  23. package/dist/adapters/cli/coco.js.map +1 -1
  24. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  25. package/dist/adapters/cli/codex-app.js +28 -0
  26. package/dist/adapters/cli/codex-app.js.map +1 -1
  27. package/dist/adapters/cli/codex.d.ts.map +1 -1
  28. package/dist/adapters/cli/codex.js +51 -23
  29. package/dist/adapters/cli/codex.js.map +1 -1
  30. package/dist/adapters/cli/dsh-tui.d.ts +24 -0
  31. package/dist/adapters/cli/dsh-tui.d.ts.map +1 -0
  32. package/dist/adapters/cli/dsh-tui.js +99 -0
  33. package/dist/adapters/cli/dsh-tui.js.map +1 -0
  34. package/dist/adapters/cli/dsh.d.ts.map +1 -1
  35. package/dist/adapters/cli/dsh.js +15 -9
  36. package/dist/adapters/cli/dsh.js.map +1 -1
  37. package/dist/adapters/cli/fs-policy.d.ts +98 -1
  38. package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
  39. package/dist/adapters/cli/fs-policy.js +182 -7
  40. package/dist/adapters/cli/fs-policy.js.map +1 -1
  41. package/dist/adapters/cli/grok.js +16 -18
  42. package/dist/adapters/cli/grok.js.map +1 -1
  43. package/dist/adapters/cli/model-catalog-json.d.ts +17 -0
  44. package/dist/adapters/cli/model-catalog-json.d.ts.map +1 -0
  45. package/dist/adapters/cli/model-catalog-json.js +43 -0
  46. package/dist/adapters/cli/model-catalog-json.js.map +1 -0
  47. package/dist/adapters/cli/oh-my-pi.d.ts +2 -0
  48. package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
  49. package/dist/adapters/cli/oh-my-pi.js +45 -13
  50. package/dist/adapters/cli/oh-my-pi.js.map +1 -1
  51. package/dist/adapters/cli/opencode.js +1 -1
  52. package/dist/adapters/cli/opencode.js.map +1 -1
  53. package/dist/adapters/cli/registry.d.ts +2 -1
  54. package/dist/adapters/cli/registry.d.ts.map +1 -1
  55. package/dist/adapters/cli/registry.js +6 -1
  56. package/dist/adapters/cli/registry.js.map +1 -1
  57. package/dist/adapters/cli/relay.d.ts.map +1 -1
  58. package/dist/adapters/cli/relay.js +7 -0
  59. package/dist/adapters/cli/relay.js.map +1 -1
  60. package/dist/adapters/cli/seed.d.ts.map +1 -1
  61. package/dist/adapters/cli/seed.js +6 -0
  62. package/dist/adapters/cli/seed.js.map +1 -1
  63. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  64. package/dist/adapters/cli/shared-hints.js +20 -14
  65. package/dist/adapters/cli/shared-hints.js.map +1 -1
  66. package/dist/adapters/cli/traex.d.ts +4 -0
  67. package/dist/adapters/cli/traex.d.ts.map +1 -1
  68. package/dist/adapters/cli/traex.js +153 -0
  69. package/dist/adapters/cli/traex.js.map +1 -1
  70. package/dist/adapters/cli/types.d.ts +42 -1
  71. package/dist/adapters/cli/types.d.ts.map +1 -1
  72. package/dist/autostart.d.ts +6 -0
  73. package/dist/autostart.d.ts.map +1 -1
  74. package/dist/autostart.js +21 -1
  75. package/dist/autostart.js.map +1 -1
  76. package/dist/bot-registry.d.ts +27 -0
  77. package/dist/bot-registry.d.ts.map +1 -1
  78. package/dist/bot-registry.js +62 -2
  79. package/dist/bot-registry.js.map +1 -1
  80. package/dist/cli/vc-agent.d.ts.map +1 -1
  81. package/dist/cli/vc-agent.js +21 -3
  82. package/dist/cli/vc-agent.js.map +1 -1
  83. package/dist/cli.d.ts.map +1 -1
  84. package/dist/cli.js +92 -1
  85. package/dist/cli.js.map +1 -1
  86. package/dist/codex-app-runner.js +28 -0
  87. package/dist/codex-app-runner.js.map +1 -1
  88. package/dist/core/bot-steer-directive.d.ts +25 -0
  89. package/dist/core/bot-steer-directive.d.ts.map +1 -0
  90. package/dist/core/bot-steer-directive.js +47 -0
  91. package/dist/core/bot-steer-directive.js.map +1 -0
  92. package/dist/core/command-handler.d.ts.map +1 -1
  93. package/dist/core/command-handler.js +102 -18
  94. package/dist/core/command-handler.js.map +1 -1
  95. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  96. package/dist/core/dashboard-ipc-server.js +53 -13
  97. package/dist/core/dashboard-ipc-server.js.map +1 -1
  98. package/dist/core/dashboard-rows.d.ts +3 -0
  99. package/dist/core/dashboard-rows.d.ts.map +1 -1
  100. package/dist/core/dashboard-rows.js +26 -5
  101. package/dist/core/dashboard-rows.js.map +1 -1
  102. package/dist/core/dashboard-url.d.ts +10 -1
  103. package/dist/core/dashboard-url.d.ts.map +1 -1
  104. package/dist/core/dashboard-url.js +12 -2
  105. package/dist/core/dashboard-url.js.map +1 -1
  106. package/dist/core/dispatch.d.ts.map +1 -1
  107. package/dist/core/dispatch.js +5 -4
  108. package/dist/core/dispatch.js.map +1 -1
  109. package/dist/core/existing-app-server.d.ts +22 -0
  110. package/dist/core/existing-app-server.d.ts.map +1 -0
  111. package/dist/core/existing-app-server.js +85 -0
  112. package/dist/core/existing-app-server.js.map +1 -0
  113. package/dist/core/native-topic-id.d.ts +9 -0
  114. package/dist/core/native-topic-id.d.ts.map +1 -0
  115. package/dist/core/native-topic-id.js +14 -0
  116. package/dist/core/native-topic-id.js.map +1 -0
  117. package/dist/core/per-bot-env.d.ts.map +1 -1
  118. package/dist/core/per-bot-env.js +10 -0
  119. package/dist/core/per-bot-env.js.map +1 -1
  120. package/dist/core/plugins/mcp/gateway.d.ts +27 -3
  121. package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
  122. package/dist/core/plugins/mcp/gateway.js +272 -26
  123. package/dist/core/plugins/mcp/gateway.js.map +1 -1
  124. package/dist/core/plugins/mcp/host.d.ts +18 -0
  125. package/dist/core/plugins/mcp/host.d.ts.map +1 -1
  126. package/dist/core/plugins/mcp/host.js +80 -16
  127. package/dist/core/plugins/mcp/host.js.map +1 -1
  128. package/dist/core/plugins/mcp/launch-record.d.ts +14 -0
  129. package/dist/core/plugins/mcp/launch-record.d.ts.map +1 -0
  130. package/dist/core/plugins/mcp/launch-record.js +63 -0
  131. package/dist/core/plugins/mcp/launch-record.js.map +1 -0
  132. package/dist/core/session-activity.d.ts +11 -0
  133. package/dist/core/session-activity.d.ts.map +1 -1
  134. package/dist/core/session-activity.js +23 -0
  135. package/dist/core/session-activity.js.map +1 -1
  136. package/dist/core/session-group-birth.d.ts.map +1 -1
  137. package/dist/core/session-group-birth.js +23 -8
  138. package/dist/core/session-group-birth.js.map +1 -1
  139. package/dist/core/session-manager.d.ts +1 -4
  140. package/dist/core/session-manager.d.ts.map +1 -1
  141. package/dist/core/session-manager.js +16 -20
  142. package/dist/core/session-manager.js.map +1 -1
  143. package/dist/core/shared-adopt.d.ts +20 -0
  144. package/dist/core/shared-adopt.d.ts.map +1 -0
  145. package/dist/core/shared-adopt.js +26 -0
  146. package/dist/core/shared-adopt.js.map +1 -0
  147. package/dist/core/skills/customize-command.d.ts +7 -0
  148. package/dist/core/skills/customize-command.d.ts.map +1 -0
  149. package/dist/core/skills/customize-command.js +303 -0
  150. package/dist/core/skills/customize-command.js.map +1 -0
  151. package/dist/core/terminal-write-auth.d.ts +15 -0
  152. package/dist/core/terminal-write-auth.d.ts.map +1 -1
  153. package/dist/core/terminal-write-auth.js +15 -0
  154. package/dist/core/terminal-write-auth.js.map +1 -1
  155. package/dist/core/terminal-write-frame.d.ts +30 -0
  156. package/dist/core/terminal-write-frame.d.ts.map +1 -0
  157. package/dist/core/terminal-write-frame.js +44 -0
  158. package/dist/core/terminal-write-frame.js.map +1 -0
  159. package/dist/core/types.d.ts +14 -4
  160. package/dist/core/types.d.ts.map +1 -1
  161. package/dist/core/types.js +6 -8
  162. package/dist/core/types.js.map +1 -1
  163. package/dist/core/worker-pool.d.ts +31 -6
  164. package/dist/core/worker-pool.d.ts.map +1 -1
  165. package/dist/core/worker-pool.js +444 -102
  166. package/dist/core/worker-pool.js.map +1 -1
  167. package/dist/core/worker-startup-retry.d.ts +52 -0
  168. package/dist/core/worker-startup-retry.d.ts.map +1 -0
  169. package/dist/core/worker-startup-retry.js +68 -0
  170. package/dist/core/worker-startup-retry.js.map +1 -0
  171. package/dist/daemon.d.ts +9 -8
  172. package/dist/daemon.d.ts.map +1 -1
  173. package/dist/daemon.js +467 -171
  174. package/dist/daemon.js.map +1 -1
  175. package/dist/dashboard/autostart-api.d.ts +26 -0
  176. package/dist/dashboard/autostart-api.d.ts.map +1 -0
  177. package/dist/dashboard/autostart-api.js +88 -0
  178. package/dist/dashboard/autostart-api.js.map +1 -0
  179. package/dist/dashboard/bot-payload.d.ts +5 -0
  180. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  181. package/dist/dashboard/bot-payload.js +2 -0
  182. package/dist/dashboard/bot-payload.js.map +1 -1
  183. package/dist/dashboard/control-csrf.d.ts +29 -1
  184. package/dist/dashboard/control-csrf.d.ts.map +1 -1
  185. package/dist/dashboard/control-csrf.js +49 -10
  186. package/dist/dashboard/control-csrf.js.map +1 -1
  187. package/dist/dashboard/customization-api.d.ts +23 -0
  188. package/dist/dashboard/customization-api.d.ts.map +1 -0
  189. package/dist/dashboard/customization-api.js +198 -0
  190. package/dist/dashboard/customization-api.js.map +1 -0
  191. package/dist/dashboard/debug-terminal.d.ts +13 -1
  192. package/dist/dashboard/debug-terminal.d.ts.map +1 -1
  193. package/dist/dashboard/debug-terminal.js +18 -4
  194. package/dist/dashboard/debug-terminal.js.map +1 -1
  195. package/dist/dashboard/settings-write-applier.d.ts +0 -23
  196. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  197. package/dist/dashboard/settings-write-applier.js +7 -28
  198. package/dist/dashboard/settings-write-applier.js.map +1 -1
  199. package/dist/dashboard/terminal-control-route.d.ts +32 -0
  200. package/dist/dashboard/terminal-control-route.d.ts.map +1 -0
  201. package/dist/dashboard/terminal-control-route.js +70 -0
  202. package/dist/dashboard/terminal-control-route.js.map +1 -0
  203. package/dist/dashboard/terminal-control.d.ts +64 -13
  204. package/dist/dashboard/terminal-control.d.ts.map +1 -1
  205. package/dist/dashboard/terminal-control.js +77 -14
  206. package/dist/dashboard/terminal-control.js.map +1 -1
  207. package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -1
  208. package/dist/dashboard/terminal-front-proxy.js +41 -9
  209. package/dist/dashboard/terminal-front-proxy.js.map +1 -1
  210. package/dist/dashboard/vc-consumer-profiles-api.d.ts +69 -18
  211. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
  212. package/dist/dashboard/vc-consumer-profiles-api.js +149 -29
  213. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
  214. package/dist/dashboard/web/agent-workbench-api.d.ts +34 -2
  215. package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -1
  216. package/dist/dashboard/web/agent-workbench-api.js +39 -4
  217. package/dist/dashboard/web/agent-workbench-api.js.map +1 -1
  218. package/dist/dashboard/web/agent-workbench-appearance.d.ts +6 -3
  219. package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -1
  220. package/dist/dashboard/web/agent-workbench-appearance.js +7 -4
  221. package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -1
  222. package/dist/dashboard/web/agent-workbench-model.d.ts +2 -0
  223. package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -1
  224. package/dist/dashboard/web/agent-workbench-model.js.map +1 -1
  225. package/dist/dashboard/web/agent-workbench-page.js +2 -2
  226. package/dist/dashboard/web/agent-workbench-page.js.map +1 -1
  227. package/dist/dashboard/web/agent-workbench-panes.d.ts +59 -4
  228. package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -1
  229. package/dist/dashboard/web/agent-workbench-panes.js +493 -85
  230. package/dist/dashboard/web/agent-workbench-panes.js.map +1 -1
  231. package/dist/dashboard/web/agent-workbench-session-list.d.ts +11 -7
  232. package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -1
  233. package/dist/dashboard/web/agent-workbench-session-list.js +24 -31
  234. package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -1
  235. package/dist/dashboard/web/agent-workbench-terminal-control.d.ts +198 -0
  236. package/dist/dashboard/web/agent-workbench-terminal-control.d.ts.map +1 -0
  237. package/dist/dashboard/web/agent-workbench-terminal-control.js +292 -0
  238. package/dist/dashboard/web/agent-workbench-terminal-control.js.map +1 -0
  239. package/dist/dashboard/web/agent-workbench-view.d.ts +3 -2
  240. package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -1
  241. package/dist/dashboard/web/agent-workbench-view.js +69 -50
  242. package/dist/dashboard/web/agent-workbench-view.js.map +1 -1
  243. package/dist/dashboard/web/app.d.ts.map +1 -1
  244. package/dist/dashboard/web/app.js +58 -7
  245. package/dist/dashboard/web/app.js.map +1 -1
  246. package/dist/dashboard/web/bot-defaults-page.d.ts +24 -0
  247. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  248. package/dist/dashboard/web/bot-defaults-page.js +191 -16
  249. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  250. package/dist/dashboard/web/bot-defaults.d.ts +17 -0
  251. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  252. package/dist/dashboard/web/bot-defaults.js +51 -2
  253. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  254. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  255. package/dist/dashboard/web/bot-onboarding.js +32 -8
  256. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  257. package/dist/dashboard/web/confirm-modal.d.ts +35 -0
  258. package/dist/dashboard/web/confirm-modal.d.ts.map +1 -0
  259. package/dist/dashboard/web/confirm-modal.js +111 -0
  260. package/dist/dashboard/web/confirm-modal.js.map +1 -0
  261. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  262. package/dist/dashboard/web/connectors-page.js +2 -1
  263. package/dist/dashboard/web/connectors-page.js.map +1 -1
  264. package/dist/dashboard/web/customization-page.d.ts +3 -0
  265. package/dist/dashboard/web/customization-page.d.ts.map +1 -0
  266. package/dist/dashboard/web/customization-page.js +315 -0
  267. package/dist/dashboard/web/customization-page.js.map +1 -0
  268. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  269. package/dist/dashboard/web/dashboard-routes.js +1 -0
  270. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  271. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  272. package/dist/dashboard/web/groups-page.js +11 -9
  273. package/dist/dashboard/web/groups-page.js.map +1 -1
  274. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  275. package/dist/dashboard/web/i18n.js +226 -42
  276. package/dist/dashboard/web/i18n.js.map +1 -1
  277. package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
  278. package/dist/dashboard/web/monitor-room.js +3 -2
  279. package/dist/dashboard/web/monitor-room.js.map +1 -1
  280. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  281. package/dist/dashboard/web/overview-page.js +98 -63
  282. package/dist/dashboard/web/overview-page.js.map +1 -1
  283. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  284. package/dist/dashboard/web/roles-page.js +4 -3
  285. package/dist/dashboard/web/roles-page.js.map +1 -1
  286. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  287. package/dist/dashboard/web/schedules-page.js +165 -18
  288. package/dist/dashboard/web/schedules-page.js.map +1 -1
  289. package/dist/dashboard/web/sessions-kanban.d.ts +2 -0
  290. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
  291. package/dist/dashboard/web/sessions-kanban.js +142 -24
  292. package/dist/dashboard/web/sessions-kanban.js.map +1 -1
  293. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  294. package/dist/dashboard/web/sessions-page.js +177 -94
  295. package/dist/dashboard/web/sessions-page.js.map +1 -1
  296. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  297. package/dist/dashboard/web/sessions.js +5 -4
  298. package/dist/dashboard/web/sessions.js.map +1 -1
  299. package/dist/dashboard/web/settings-page.d.ts +0 -8
  300. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  301. package/dist/dashboard/web/settings-page.js +185 -65
  302. package/dist/dashboard/web/settings-page.js.map +1 -1
  303. package/dist/dashboard/web/skills/skill-library-tab.d.ts +2 -0
  304. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -1
  305. package/dist/dashboard/web/skills/skill-library-tab.js +15 -1
  306. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -1
  307. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  308. package/dist/dashboard/web/skills-page.js +5 -4
  309. package/dist/dashboard/web/skills-page.js.map +1 -1
  310. package/dist/dashboard/web/store.d.ts +5 -0
  311. package/dist/dashboard/web/store.d.ts.map +1 -1
  312. package/dist/dashboard/web/store.js +4 -0
  313. package/dist/dashboard/web/store.js.map +1 -1
  314. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
  315. package/dist/dashboard/web/team-federation-page.js +3 -2
  316. package/dist/dashboard/web/team-federation-page.js.map +1 -1
  317. package/dist/dashboard/web/toast.d.ts +15 -0
  318. package/dist/dashboard/web/toast.d.ts.map +1 -0
  319. package/dist/dashboard/web/toast.js +70 -0
  320. package/dist/dashboard/web/toast.js.map +1 -0
  321. package/dist/dashboard/web/v3-components.d.ts.map +1 -1
  322. package/dist/dashboard/web/v3-components.js +2 -1
  323. package/dist/dashboard/web/v3-components.js.map +1 -1
  324. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +10 -12
  325. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
  326. package/dist/dashboard/web/vc-consumer-profiles-section.js +219 -200
  327. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
  328. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
  329. package/dist/dashboard/web/whiteboards-page.js +2 -1
  330. package/dist/dashboard/web/whiteboards-page.js.map +1 -1
  331. package/dist/dashboard-web/app.js +1 -1
  332. package/dist/dashboard-web/chunks/agent-workbench-dock-page-LZSUOCEQ.js +1 -0
  333. package/dist/dashboard-web/chunks/agent-workbench-page-YONDRJU7.js +1 -0
  334. package/dist/dashboard-web/chunks/bot-defaults-page-X7LV6373.js +1 -0
  335. package/dist/dashboard-web/chunks/chunk-2PVRDXEL.js +1 -0
  336. package/dist/dashboard-web/chunks/chunk-53JUKBU2.js +10 -0
  337. package/dist/dashboard-web/chunks/{chunk-5CJMHTT4.js → chunk-5QX4OYOR.js} +1 -1
  338. package/dist/dashboard-web/chunks/{chunk-NACP7BMR.js → chunk-5VRVJFQR.js} +1 -1
  339. package/dist/dashboard-web/chunks/{chunk-FDZ7WOBW.js → chunk-6ROOZWYV.js} +1 -1
  340. package/dist/dashboard-web/chunks/{chunk-F6KNPF4R.js → chunk-CK22743G.js} +15 -19
  341. package/dist/dashboard-web/chunks/chunk-CVNIMUPY.js +25 -0
  342. package/dist/dashboard-web/chunks/chunk-GJC2TMWS.js +2 -0
  343. package/dist/dashboard-web/chunks/chunk-OT6L6G7R.js +1 -0
  344. package/dist/dashboard-web/chunks/chunk-QITAMHW6.js +1 -0
  345. package/dist/dashboard-web/chunks/chunk-RHVFZC5Z.js +1 -0
  346. package/dist/dashboard-web/chunks/chunk-SOBMN2VY.js +1 -0
  347. package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
  348. package/dist/dashboard-web/chunks/chunk-XVIXNQGC.js +44 -0
  349. package/dist/dashboard-web/chunks/chunk-YUJF34ME.js +1 -0
  350. package/dist/dashboard-web/chunks/connectors-page-LB2HEJ7F.js +1 -0
  351. package/dist/dashboard-web/chunks/customization-page-4GXBYLG6.js +105 -0
  352. package/dist/dashboard-web/chunks/feedback-page-IZQ7VLDG.js +1 -0
  353. package/dist/dashboard-web/chunks/groups-page-4WCP5OEV.js +8 -0
  354. package/dist/dashboard-web/chunks/{insights-page-HJFDYR5N.js → insights-page-TXQHIPQL.js} +1 -1
  355. package/dist/dashboard-web/chunks/{monitor-room-V7PCP47V.js → monitor-room-VBRVWXCM.js} +8 -8
  356. package/dist/dashboard-web/chunks/monitoring-page-QDDZWERE.js +2 -0
  357. package/dist/dashboard-web/chunks/office-page-PENFNYPG.js +1 -0
  358. package/dist/dashboard-web/chunks/overview-page-BZQDP6MP.js +1 -0
  359. package/dist/dashboard-web/chunks/plugin-page-JX4GSWZS.js +1 -0
  360. package/dist/dashboard-web/chunks/roles-page-VPNINZNK.js +1 -0
  361. package/dist/dashboard-web/chunks/schedules-page-BITO6HEA.js +1 -0
  362. package/dist/dashboard-web/chunks/sessions-page-ZKCOVTD2.js +8 -0
  363. package/dist/dashboard-web/chunks/settings-page-UT6JDTS6.js +2 -0
  364. package/dist/dashboard-web/chunks/skills-page-GULXVAJY.js +4 -0
  365. package/dist/dashboard-web/chunks/team-federation-page-CUUJWGEG.js +1 -0
  366. package/dist/dashboard-web/chunks/v3-page-5WVJ5AUR.js +94 -0
  367. package/dist/dashboard-web/chunks/whiteboards-page-FZ2CME4H.js +1 -0
  368. package/dist/dashboard-web/design-tokens.css +236 -0
  369. package/dist/dashboard-web/index.html +1 -0
  370. package/dist/dashboard-web/style.css +1930 -114
  371. package/dist/dashboard.js +360 -279
  372. package/dist/dashboard.js.map +1 -1
  373. package/dist/desktop/renderer/app.js +6 -0
  374. package/dist/desktop/renderer/app.js.map +1 -1
  375. package/dist/dsh-runner.js +139 -17
  376. package/dist/dsh-runner.js.map +1 -1
  377. package/dist/global-config.d.ts +33 -2
  378. package/dist/global-config.d.ts.map +1 -1
  379. package/dist/global-config.js +62 -0
  380. package/dist/global-config.js.map +1 -1
  381. package/dist/i18n/en.d.ts.map +1 -1
  382. package/dist/i18n/en.js +13 -4
  383. package/dist/i18n/en.js.map +1 -1
  384. package/dist/i18n/index.d.ts +27 -3
  385. package/dist/i18n/index.d.ts.map +1 -1
  386. package/dist/i18n/index.js +33 -4
  387. package/dist/i18n/index.js.map +1 -1
  388. package/dist/i18n/zh.d.ts.map +1 -1
  389. package/dist/i18n/zh.js +13 -4
  390. package/dist/i18n/zh.js.map +1 -1
  391. package/dist/im/lark/card-builder.d.ts +2 -0
  392. package/dist/im/lark/card-builder.d.ts.map +1 -1
  393. package/dist/im/lark/card-builder.js +7 -4
  394. package/dist/im/lark/card-builder.js.map +1 -1
  395. package/dist/im/lark/card-handler.d.ts.map +1 -1
  396. package/dist/im/lark/card-handler.js +135 -20
  397. package/dist/im/lark/card-handler.js.map +1 -1
  398. package/dist/im/lark/event-dispatcher.d.ts +38 -3
  399. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  400. package/dist/im/lark/event-dispatcher.js +163 -13
  401. package/dist/im/lark/event-dispatcher.js.map +1 -1
  402. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
  403. package/dist/im/lark/v3-blocked-card-handler.js +2 -1
  404. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
  405. package/dist/im/lark/v3-blocked-card.d.ts +1 -1
  406. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
  407. package/dist/im/lark/v3-blocked-card.js +14 -0
  408. package/dist/im/lark/v3-blocked-card.js.map +1 -1
  409. package/dist/index-core-only.js +2 -0
  410. package/dist/index-core-only.js.map +1 -1
  411. package/dist/index-daemon.js +3 -0
  412. package/dist/index-daemon.js.map +1 -1
  413. package/dist/platform/binding.d.ts +37 -0
  414. package/dist/platform/binding.d.ts.map +1 -1
  415. package/dist/platform/binding.js +15 -0
  416. package/dist/platform/binding.js.map +1 -1
  417. package/dist/services/bridge-turn-journal.d.ts +63 -0
  418. package/dist/services/bridge-turn-journal.d.ts.map +1 -0
  419. package/dist/services/bridge-turn-journal.js +149 -0
  420. package/dist/services/bridge-turn-journal.js.map +1 -0
  421. package/dist/services/bridge-turn-queue.d.ts +8 -1
  422. package/dist/services/bridge-turn-queue.d.ts.map +1 -1
  423. package/dist/services/bridge-turn-queue.js +2 -1
  424. package/dist/services/bridge-turn-queue.js.map +1 -1
  425. package/dist/services/codex-app-runner-protocol.d.ts +5 -0
  426. package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
  427. package/dist/services/codex-app-runner-protocol.js +5 -0
  428. package/dist/services/codex-app-runner-protocol.js.map +1 -1
  429. package/dist/services/customization-store.d.ts +93 -0
  430. package/dist/services/customization-store.d.ts.map +1 -0
  431. package/dist/services/customization-store.js +542 -0
  432. package/dist/services/customization-store.js.map +1 -0
  433. package/dist/services/file-bridge-path.d.ts.map +1 -1
  434. package/dist/services/file-bridge-path.js +3 -0
  435. package/dist/services/file-bridge-path.js.map +1 -1
  436. package/dist/services/grok-transcript.d.ts.map +1 -1
  437. package/dist/services/grok-transcript.js +44 -9
  438. package/dist/services/grok-transcript.js.map +1 -1
  439. package/dist/services/local-cli-opener.d.ts.map +1 -1
  440. package/dist/services/local-cli-opener.js +12 -3
  441. package/dist/services/local-cli-opener.js.map +1 -1
  442. package/dist/services/model-catalog.d.ts +54 -0
  443. package/dist/services/model-catalog.d.ts.map +1 -0
  444. package/dist/services/model-catalog.js +147 -0
  445. package/dist/services/model-catalog.js.map +1 -0
  446. package/dist/services/omp-transcript.d.ts +27 -0
  447. package/dist/services/omp-transcript.d.ts.map +1 -0
  448. package/dist/services/omp-transcript.js +214 -0
  449. package/dist/services/omp-transcript.js.map +1 -0
  450. package/dist/services/platform-team-store.d.ts +16 -8
  451. package/dist/services/platform-team-store.d.ts.map +1 -1
  452. package/dist/services/platform-team-store.js +17 -10
  453. package/dist/services/platform-team-store.js.map +1 -1
  454. package/dist/services/project-scanner.d.ts.map +1 -1
  455. package/dist/services/project-scanner.js +13 -8
  456. package/dist/services/project-scanner.js.map +1 -1
  457. package/dist/services/resumable-session-discovery.d.ts.map +1 -1
  458. package/dist/services/resumable-session-discovery.js +117 -35
  459. package/dist/services/resumable-session-discovery.js.map +1 -1
  460. package/dist/services/structured-bridge-clis.d.ts +5 -3
  461. package/dist/services/structured-bridge-clis.d.ts.map +1 -1
  462. package/dist/services/structured-bridge-clis.js +5 -1
  463. package/dist/services/structured-bridge-clis.js.map +1 -1
  464. package/dist/services/vc-meeting-action-gate.d.ts.map +1 -1
  465. package/dist/services/vc-meeting-action-gate.js +15 -4
  466. package/dist/services/vc-meeting-action-gate.js.map +1 -1
  467. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +46 -66
  468. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
  469. package/dist/services/vc-meeting-consumer-profile-bootstrap.js +33 -292
  470. package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
  471. package/dist/services/vc-meeting-consumer-profile-templates.js +3 -3
  472. package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -1
  473. package/dist/services/vc-meeting-delivery-store.d.ts +18 -0
  474. package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
  475. package/dist/services/vc-meeting-delivery-store.js +55 -0
  476. package/dist/services/vc-meeting-delivery-store.js.map +1 -1
  477. package/dist/services/vc-meeting-send-policy.d.ts +21 -1
  478. package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
  479. package/dist/services/vc-meeting-send-policy.js +30 -2
  480. package/dist/services/vc-meeting-send-policy.js.map +1 -1
  481. package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts +78 -0
  482. package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts.map +1 -0
  483. package/dist/services/vc-meeting-shared-consumer-catalog-store.js +227 -0
  484. package/dist/services/vc-meeting-shared-consumer-catalog-store.js.map +1 -0
  485. package/dist/services/vc-meeting-shared-consumer-catalog.d.ts +53 -0
  486. package/dist/services/vc-meeting-shared-consumer-catalog.d.ts.map +1 -0
  487. package/dist/services/vc-meeting-shared-consumer-catalog.js +161 -0
  488. package/dist/services/vc-meeting-shared-consumer-catalog.js.map +1 -0
  489. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  490. package/dist/setup/bot-config-editor.js +1 -0
  491. package/dist/setup/bot-config-editor.js.map +1 -1
  492. package/dist/setup/open-platform-automation.d.ts +20 -0
  493. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  494. package/dist/setup/open-platform-automation.js +27 -0
  495. package/dist/setup/open-platform-automation.js.map +1 -1
  496. package/dist/skills/customization-bundle.d.ts +83 -0
  497. package/dist/skills/customization-bundle.d.ts.map +1 -0
  498. package/dist/skills/customization-bundle.js +214 -0
  499. package/dist/skills/customization-bundle.js.map +1 -0
  500. package/dist/skills/definitions.d.ts.map +1 -1
  501. package/dist/skills/definitions.js +10 -3
  502. package/dist/skills/definitions.js.map +1 -1
  503. package/dist/skills/effective-builtins.d.ts +38 -0
  504. package/dist/skills/effective-builtins.d.ts.map +1 -0
  505. package/dist/skills/effective-builtins.js +96 -0
  506. package/dist/skills/effective-builtins.js.map +1 -0
  507. package/dist/skills/injection-mode.d.ts +4 -1
  508. package/dist/skills/injection-mode.d.ts.map +1 -1
  509. package/dist/skills/injection-mode.js +11 -3
  510. package/dist/skills/injection-mode.js.map +1 -1
  511. package/dist/skills/installer.d.ts.map +1 -1
  512. package/dist/skills/installer.js +24 -1
  513. package/dist/skills/installer.js.map +1 -1
  514. package/dist/skills/prompt-fragments.d.ts +58 -0
  515. package/dist/skills/prompt-fragments.d.ts.map +1 -0
  516. package/dist/skills/prompt-fragments.js +88 -0
  517. package/dist/skills/prompt-fragments.js.map +1 -0
  518. package/dist/types.d.ts +51 -0
  519. package/dist/types.d.ts.map +1 -1
  520. package/dist/utils/cli-usage-limit.d.ts +50 -0
  521. package/dist/utils/cli-usage-limit.d.ts.map +1 -1
  522. package/dist/utils/cli-usage-limit.js +43 -0
  523. package/dist/utils/cli-usage-limit.js.map +1 -1
  524. package/dist/utils/idle-detector.d.ts +12 -0
  525. package/dist/utils/idle-detector.d.ts.map +1 -1
  526. package/dist/utils/idle-detector.js +88 -2
  527. package/dist/utils/idle-detector.js.map +1 -1
  528. package/dist/utils/stuck-detector.d.ts +5 -0
  529. package/dist/utils/stuck-detector.d.ts.map +1 -1
  530. package/dist/utils/stuck-detector.js +41 -0
  531. package/dist/utils/stuck-detector.js.map +1 -1
  532. package/dist/utils/usage-limit-tracker.d.ts +46 -0
  533. package/dist/utils/usage-limit-tracker.d.ts.map +1 -0
  534. package/dist/utils/usage-limit-tracker.js +91 -0
  535. package/dist/utils/usage-limit-tracker.js.map +1 -0
  536. package/dist/utils/user-token.js +1 -1
  537. package/dist/utils/user-token.js.map +1 -1
  538. package/dist/worker.js +812 -125
  539. package/dist/worker.js.map +1 -1
  540. package/dist/workflows/definition.d.ts +14 -14
  541. package/dist/workflows/events/payloads.d.ts +12 -12
  542. package/dist/workflows/events/schema.d.ts +164 -164
  543. package/dist/workflows/migration/v2-to-v3.js +1 -1
  544. package/dist/workflows/migration/v2-to-v3.js.map +1 -1
  545. package/dist/workflows/v3/architect.d.ts.map +1 -1
  546. package/dist/workflows/v3/architect.js +11 -5
  547. package/dist/workflows/v3/architect.js.map +1 -1
  548. package/dist/workflows/v3/artifact-contract-declarations.d.ts +22 -0
  549. package/dist/workflows/v3/artifact-contract-declarations.d.ts.map +1 -0
  550. package/dist/workflows/v3/artifact-contract-declarations.js +95 -0
  551. package/dist/workflows/v3/artifact-contract-declarations.js.map +1 -0
  552. package/dist/workflows/v3/contract.d.ts +1 -0
  553. package/dist/workflows/v3/contract.d.ts.map +1 -1
  554. package/dist/workflows/v3/contract.js.map +1 -1
  555. package/dist/workflows/v3/daemon-run.d.ts +2 -2
  556. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  557. package/dist/workflows/v3/daemon-run.js +4 -0
  558. package/dist/workflows/v3/daemon-run.js.map +1 -1
  559. package/dist/workflows/v3/dag.d.ts +7 -0
  560. package/dist/workflows/v3/dag.d.ts.map +1 -1
  561. package/dist/workflows/v3/dag.js +69 -8
  562. package/dist/workflows/v3/dag.js.map +1 -1
  563. package/dist/workflows/v3/ephemeral-pool.js +1 -1
  564. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  565. package/dist/workflows/v3/event-contract.d.ts +3 -1
  566. package/dist/workflows/v3/event-contract.d.ts.map +1 -1
  567. package/dist/workflows/v3/host.d.ts.map +1 -1
  568. package/dist/workflows/v3/host.js +5 -1
  569. package/dist/workflows/v3/host.js.map +1 -1
  570. package/dist/workflows/v3/journal.d.ts +1 -1
  571. package/dist/workflows/v3/journal.d.ts.map +1 -1
  572. package/dist/workflows/v3/journal.js.map +1 -1
  573. package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
  574. package/dist/workflows/v3/library-materialize.js +9 -1
  575. package/dist/workflows/v3/library-materialize.js.map +1 -1
  576. package/dist/workflows/v3/library-schema.d.ts +3 -1
  577. package/dist/workflows/v3/library-schema.d.ts.map +1 -1
  578. package/dist/workflows/v3/library-schema.js +20 -4
  579. package/dist/workflows/v3/library-schema.js.map +1 -1
  580. package/dist/workflows/v3/library-store.d.ts.map +1 -1
  581. package/dist/workflows/v3/library-store.js +15 -3
  582. package/dist/workflows/v3/library-store.js.map +1 -1
  583. package/dist/workflows/v3/run-envelope.d.ts +16 -16
  584. package/dist/workflows/v3/shared-node-runtime.d.ts +2 -1
  585. package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -1
  586. package/dist/workflows/v3/shared-node-runtime.js +48 -7
  587. package/dist/workflows/v3/shared-node-runtime.js.map +1 -1
  588. package/package.json +2 -1
  589. package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +0 -1
  590. package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +0 -1
  591. package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +0 -10
  592. package/dist/dashboard-web/chunks/chunk-22WIADUT.js +0 -2
  593. package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +0 -1
  594. package/dist/dashboard-web/chunks/chunk-2W6SCN3M.js +0 -1
  595. package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +0 -1
  596. package/dist/dashboard-web/chunks/chunk-5THX4DI2.js +0 -66
  597. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
  598. package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +0 -1
  599. package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +0 -1
  600. package/dist/dashboard-web/chunks/chunk-SYC6D5XU.js +0 -1
  601. package/dist/dashboard-web/chunks/connectors-page-VOISXXII.js +0 -1
  602. package/dist/dashboard-web/chunks/feedback-page-RN6HRZMS.js +0 -1
  603. package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +0 -8
  604. package/dist/dashboard-web/chunks/monitoring-page-NKEKVQAP.js +0 -2
  605. package/dist/dashboard-web/chunks/office-page-GVJF73XW.js +0 -1
  606. package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +0 -1
  607. package/dist/dashboard-web/chunks/plugin-page-J3OF5IY4.js +0 -1
  608. package/dist/dashboard-web/chunks/roles-page-WQIRSOLZ.js +0 -1
  609. package/dist/dashboard-web/chunks/schedules-page-J2DEY2X6.js +0 -1
  610. package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +0 -8
  611. package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +0 -2
  612. package/dist/dashboard-web/chunks/skills-page-HGIFR3IU.js +0 -4
  613. package/dist/dashboard-web/chunks/team-federation-page-MR5ZPL4B.js +0 -1
  614. package/dist/dashboard-web/chunks/v3-page-GBR5JWPE.js +0 -94
  615. package/dist/dashboard-web/chunks/whiteboards-page-QAZM4BN3.js +0 -1
  616. package/dist/services/vc-meeting-consumer-profile-store.d.ts +0 -39
  617. package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +0 -1
  618. package/dist/services/vc-meeting-consumer-profile-store.js +0 -191
  619. package/dist/services/vc-meeting-consumer-profile-store.js.map +0 -1
@@ -1 +0,0 @@
1
- import{a as Gt,b as Ft,c as $t,d as Ot}from"./chunk-R3FXBFQH.js";import{b as Dt,c as ce,h as $e,q as Oe}from"./chunk-5CJMHTT4.js";import{d as _t}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import{C as Et,G as At}from"./chunk-F6KNPF4R.js";import{a as Fe}from"./chunk-SYC6D5XU.js";import{a as bn,d as Bt}from"./chunk-5THX4DI2.js";import{c as Ge}from"./chunk-7SZRL6FY.js";var a=Ge(bn(),1);function jt(t,n){let r=n.trim().toLowerCase();return r?t.filter(o=>o.openId.toLowerCase().includes(r)||o.name.toLowerCase().includes(r)||o.memberType.toLowerCase().includes(r)):t}function Ut(t){return[...new Set([...t].filter(Boolean))]}function Ht(t){let n=new Set(t.targetIds.filter(Boolean));if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)o.delete(c),t.listening||o.add(c);return{include:[],exclude:Ut(o)}}let r=new Set(t.include);for(let o of n)r.delete(o),t.listening&&r.add(o);return{include:Ut(r),exclude:[]}}function Ue(t){let n=t.targetIds.filter(Boolean);if(n.length===0)return t.mode==="all_except_excluded"?"listen":"ignore";let r=new Set;if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)r.add(o.has(c)?"ignore":"listen")}else{let o=new Set(t.include);for(let c of n)r.add(o.has(c)?"listen":"ignore")}return r.size===1?[...r][0]:"mixed"}function Vt(t,n,r){let o={};for(let c of t){if(!c)continue;let m=n(c),f=m==="user"||m==="bot"?m:r?.[c];(f==="user"||f==="bot")&&(o[c]=f)}return o}var O=32768,qt=Math.floor(O*.95),pe=32768,Kt=Math.floor(pe*.95),je=5,He=20,hn=/^[A-Za-z0-9._-]{1,64}$/;function Ve(t){return hn.test(t)&&t!=="."&&t!==".."}function Wt(t=location.hash){let[,n=""]=t.split("?");return new URLSearchParams(n).get("chatId")?.trim()||null}function qe(t,n){return $t(t,n)}function we(t){return new TextEncoder().encode(t).length}function Yt(t){return t.memberBots.filter(n=>n.inChat&&n.hasRole).length}function zt(t){return t.memberBots.filter(n=>n.inChat).length}function me(t,n){return n?t.find(r=>r.larkAppId===n):void 0}function Jt(t,n){let r=n.toLowerCase();return r?t.filter(o=>{let c=o.chatId.toLowerCase().includes(r)||(o.name??"").toLowerCase().includes(r),m=o.memberBots.some(f=>f.larkAppId.toLowerCase().includes(r)||(f.botName??"").toLowerCase().includes(r));return c||m}):t}function Xt(t,n){let r=n.toLowerCase();return t.filter(o=>!r||o.profileId.toLowerCase().includes(r))}async function x(t){return t.json().catch(()=>({}))}async function Qt(){let t=await fetch("/api/groups"),n=await x(t);return{bots:(n.bots??[]).map(r=>({larkAppId:r.larkAppId,botName:r.botName??r.larkAppId,botAvatarUrl:r.botAvatarUrl})),groups:(n.chats??[]).map(r=>({chatId:r.chatId,name:r.name??r.chatId,memberBots:(r.memberBots??[]).map(o=>({larkAppId:o.larkAppId,botName:o.botName??o.larkAppId,inChat:o.inChat??!1,hasRole:o.hasRole??!1,hasMessageListener:o.hasMessageListener??!1,oncallChat:o.oncallChat??null}))}))}}async function Zt(){let t=await fetch("/api/role-profiles");return(await x(t)).profiles??[]}async function q(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t)}`);return(await x(n)).entries??[]}async function Ke(t,n){let r=await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function er(t,n,r,o,c){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,injectMode:o,dispatchCompletionEnabled:c})})).ok}async function tr(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({injectMode:r})})).ok}async function rr(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({dispatchCompletionEnabled:r})})).ok}async function nr(t,n){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function We(t,n){let r=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return(await x(r)).listener??{enabled:!1,prompt:"",messagePolicy:{scope:"top_level"}}}async function sr(t,n,r){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(r)})).ok}async function or(t,n){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}function Se(t){return Number.isFinite(t)?Math.min(He,Math.max(1,Math.floor(t))):je}function ue(t){return String(t).padStart(2,"0")}function lr(t){if(!t)return"";let n=Number(t);if(!Number.isFinite(n)||n<=0)return"";let r=n<1e12?n*1e3:n,o=new Date(r);return Number.isFinite(o.getTime())?[o.getFullYear(),"-",ue(o.getMonth()+1),"-",ue(o.getDate())," ",ue(o.getHours()),":",ue(o.getMinutes()),":",ue(o.getSeconds())].join(""):""}async function ir(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:Se(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??Se(o),matches:m.matches??[],error:m.error}}async function ar(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:Se(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??Se(o),matches:m.matches??[],results:m.results,error:m.error}}async function dr(t,n,r){let o=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview/${encodeURIComponent(r)}`),c=await x(o);return{ok:o.ok&&c.ok!==!1,runId:c.runId,results:c.results,error:c.error}}async function cr(t,n){let r=await fetch(`/api/groups/${encodeURIComponent(t)}/${encodeURIComponent(n)}/members-display`);return(await x(r)).members??[]}async function ur(t,n){let r=await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function pr(t,n,r){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,allowEmpty:!0})})).ok}async function mr(t,n){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function fr(t,n){let r=await Promise.all(n.map(async f=>{try{let p=await fetch(`/api/role-profiles/${encodeURIComponent(f.profileId)}`),v=await x(p);return[f.profileId,Array.isArray(v.entries)?v.entries:[]]}catch{return[f.profileId,[]]}})),o=new Set,c=[];for(let f of t)for(let p of f.memberBots){if(!p.inChat||!p.hasRole)continue;let v=qe(p.larkAppId,f.chatId);o.has(v)||(o.add(v),c.push({larkAppId:p.larkAppId,chatId:f.chatId}))}let m=await Ot(c);return{entriesByProfile:new Map(r),effectiveRolesByBot:m}}async function gr(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t.profileId)}/apply`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chatId:t.chatId,larkAppId:t.larkAppId,force:t.force,preview:t.preview})}),r=await x(n);return{larkAppId:t.larkAppId,ok:n.ok&&r.ok!==!1,status:n.status,error:r.error,wouldRefuse:r.wouldRefuse}}var e=Ge(Bt(),1),hr=["text","post","image","interactive"],K={enabled:!1,prompt:"",senderPolicy:{mode:"include_only",includeSenderTypes:["user"],excludeSelf:!0},messagePolicy:{includeMsgTypes:[...hr],scope:"top_level"}};function ze(t){let n=t?.senderPolicy?.mode==="include_only"?"include_only":"all_except_excluded";return{enabled:t?.enabled===!0,name:t?.name??"",replyCardTitle:t?.replyCardTitle??"",workingDir:t?.workingDir??"",prompt:t?.prompt??"",senderPolicy:{mode:n,includeSenderOpenIds:[...t?.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...t?.senderPolicy?.excludeSenderOpenIds??[]],...t?.senderPolicy?.excludeSenderKinds?{excludeSenderKinds:{...t.senderPolicy.excludeSenderKinds}}:{},includeSenderTypes:[...t?.senderPolicy?.includeSenderTypes??K.senderPolicy?.includeSenderTypes??[]],excludeSenderTypes:[...t?.senderPolicy?.excludeSenderTypes??[]],excludeSelf:t?.senderPolicy?.excludeSelf!==!1},messagePolicy:{includeMsgTypes:[...t?.messagePolicy?.includeMsgTypes??K.messagePolicy?.includeMsgTypes??[]],scope:"top_level"}}}function yr(t){return!!t&&t.prompt.trim().length>0}function Pn(t){return t.memberBots.some(n=>n.inChat&&(n.hasRole||n.hasMessageListener))}function Ye(t,n){return t?.name||n}function In(t,n){let r=new Map;for(let o of t??[])r.set(o.messageId,o);for(let o of n)r.set(o.messageId,{...r.get(o.messageId),...o});return[...r.values()]}function Sn(t,n){return!n||t==="failed"?"error":t==="replied"?"ok":t==="running"?"running":"triggered"}function wn(t,n=[]){return ze(t??K)}function xn(){let t=(0,a.useRef)(!0);return(0,a.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),t}function Rn(){let t=(0,a.useRef)(new Set);return(0,a.useEffect)(()=>()=>{for(let n of t.current)window.clearTimeout(n);t.current.clear()},[]),(0,a.useCallback)((n,r)=>{let o=window.setTimeout(()=>{t.current.delete(o),n()},r);return t.current.add(o),o},[])}function Pr(t){return(0,e.jsx)(Dt,{html:Et({name:t.bot.botName,larkAppId:t.bot.larkAppId,avatarUrl:t.bot.botAvatarUrl,size:"sm"})})}function Ir(t){let n=_t(),r=xn(),o=Rn(),[c,m]=(0,a.useState)([]),[f,p]=(0,a.useState)([]),[v,T]=(0,a.useState)([]),[xe,R]=(0,a.useState)({entriesByProfile:new Map,effectiveRolesByBot:new Map}),[W,A]=(0,a.useState)(!1),[Re,Y]=(0,a.useState)(!0),[ke,_]=(0,a.useState)(!0),[F,k]=(0,a.useState)(""),[z,ge]=(0,a.useState)(""),[U,B]=(0,a.useState)(()=>new Set),[g,ye]=(0,a.useState)(null),[y,J]=(0,a.useState)(null),[d,b]=(0,a.useState)(null),[I,M]=(0,a.useState)(""),[X,Q]=(0,a.useState)("every"),[ve,Z]=(0,a.useState)(!1),[Je,Xe]=(0,a.useState)(!1),[Qe,Ze]=(0,a.useState)(!1),[Sr,et]=(0,a.useState)(!1),[wr,tt]=(0,a.useState)(!1),[xr,Ne]=(0,a.useState)(null),[Rr,rt]=(0,a.useState)(null),[kr,nt]=(0,a.useState)(null),[j,st]=(0,a.useState)("role"),[Nr,Lr]=(0,a.useState)(null),[P,D]=(0,a.useState)(()=>ze(K)),[Le,ot]=(0,a.useState)([]),[Tr,lt]=(0,a.useState)(!1),[Mr,it]=(0,a.useState)(!1),[at,dt]=(0,a.useState)(!1),[Te,ct]=(0,a.useState)(!1),[Cr,G]=(0,a.useState)(null),[Me,Er]=(0,a.useState)(je),[Ar,be]=(0,a.useState)({kind:"idle"}),ee=(0,a.useRef)(null),ut=(0,a.useRef)(0),[S,_r]=(0,a.useState)(null),[C,pt]=(0,a.useState)(null),[te,re]=(0,a.useState)([]),[ne,he]=(0,a.useState)(""),[$,se]=(0,a.useState)(null),[mt,Br]=(0,a.useState)(!1),[ft,gt]=(0,a.useState)(()=>new Set),[yt,vt]=(0,a.useState)(!1),[bt,ht]=(0,a.useState)(!1),[Dr,Ce]=(0,a.useState)(null),[Gr,oe]=(0,a.useState)({kind:"idle"}),H=(0,a.useRef)(0),le=(0,a.useRef)(0),Pt=(0,a.useRef)(null),Ee=g?c.find(s=>s.chatId===g):void 0,Fr=Ee&&y?Ee.memberBots.find(s=>s.larkAppId===y):void 0,Ae=C?f.find(s=>s.larkAppId===C):void 0,$r=me(te,C),_e=$?c.find(s=>s.chatId===$):void 0,Pe=_e?.memberBots.filter(s=>s.inChat)??[],Or=Pe.map(s=>s.larkAppId).join("\0"),Ur=te.map(s=>s.larkAppId).sort().join("\0"),jr=(0,a.useMemo)(()=>Jt(c,F),[c,F]),Hr=(0,a.useMemo)(()=>Xt(v,z),[v,z]),Be=we(I),De=we(ne),It=we(P.prompt),St=(0,a.useMemo)(()=>{let s=new Map;for(let l of Le)s.set(l.openId,l);return s},[Le]),N=(0,a.useCallback)((s,l,i=!1)=>{let u=Date.now()+Math.random();s({text:l,isError:i,id:u}),o(()=>{s(h=>h?.id===u?null:h)},i?3e3:2e3)},[o]),L=(0,a.useCallback)(async(s,l)=>{try{let i=await fr(s,l);if(!r.current)return;R(i),A(!0)}catch{if(!r.current)return;R({entriesByProfile:new Map,effectiveRolesByBot:new Map}),A(!0)}},[r]),E=(0,a.useCallback)(async()=>{let s=await Qt();return r.current&&(m(s.groups),p(s.bots)),s},[r]),ie=(0,a.useCallback)(async()=>{let s=await Zt();return r.current&&T(s),s},[r]),ae=(0,a.useCallback)((s,l=[])=>{let i=wn(s??K,l);Lr(s),D(i)},[]),wt=(0,a.useCallback)(async(s,l,i)=>{lt(!0),it(!0),ot([]);try{let[u,h]=await Promise.all([We(s,l).catch(()=>ze(K)),cr(s,l).catch(()=>[])]);if(!r.current||i!==H.current)return;ae(yr(u)?u:null,h),ot(h),G(null)}finally{r.current&&i===H.current&&(lt(!1),it(!1))}},[r,ae]),xt=(0,a.useCallback)(async()=>{Y(!0),_(!0),A(!1);try{let s=await E();if(!r.current)return;let l=await ie();if(!r.current||(await At(),!r.current))return;if(B(new Set(s.groups.filter(Pn).map(i=>i.chatId))),t.tab==="profiles"){let i=Wt();se(u=>u||(i&&s.groups.some(h=>h.chatId===i)?i:s.groups[0]?.chatId??null))}else se(i=>i??s.groups[0]?.chatId??null);Y(!1),_(!1),L(s.groups,l)}catch{if(!r.current)return;Y(!1),_(!1),A(!0)}},[r,t.tab,E,ie,L]);(0,a.useEffect)(()=>{xt()},[xt]),(0,a.useEffect)(()=>()=>{ut.current+=1,ee.current=null},[]),(0,a.useEffect)(()=>{$||c.length===0||se(c[0].chatId)},[c,$]),(0,a.useEffect)(()=>{let s=new Set(Pe.filter(l=>!!me(te,l.larkAppId)).map(l=>l.larkAppId));gt(s),oe({kind:"idle"})},[Ur,Or]);async function Vr(s,l){let i=++H.current;ye(s),J(l),Ne(null),rt(null),nt(null),G(null),ae(null);let u=await Ke(l,s);!r.current||i!==H.current||(b(u),M(u.content??""),Q(u.injectMode==="once"?"once":"every"),Z(u.dispatchCompletionEnabled===!0),await wt(l,s,i))}async function qr(){let s=await E();if(r.current&&(L(s.groups,v),g&&y)){let l=++H.current,i=await Ke(y,g);if(!r.current||l!==H.current)return;b(i),M(i.content??""),Q(i.injectMode==="once"?"once":"every"),Z(i.dispatchCompletionEnabled===!0),await wt(y,g,l)}}async function Kr(){if(!(!g||!y)){Xe(!0);try{let s=await er(y,g,I,X,ve);if(!r.current)return;if(s){let l=await E();if(!r.current)return;b(i=>i&&{...i,content:I,hasRole:!0,injectMode:X,dispatchCompletionEnabled:ve}),L(l.groups,v),N(Ne,n("roles.saved"))}else N(Ne,I.trim().length===0?n("roles.emptyError"):n("roles.saveFailed"),!0)}finally{r.current&&Xe(!1)}}}async function Wr(){if(!(!g||!y)&&confirm(n("roles.confirmDelete"))){Ze(!0);try{let s=await nr(y,g);if(!r.current)return;if(s){let l=await E();if(!r.current)return;ye(null),J(null),b(null),M(""),Q("every"),Z(!1),L(l.groups,v)}}finally{r.current&&Ze(!1)}}}async function Yr(s){if(!g||!y)return;let l=X;Q(s),et(!0);try{let i=await tr(y,g,s);if(!r.current)return;i||Q(l),N(rt,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&et(!1)}}async function zr(s){if(!g||!y)return;let l=ve;Z(s),tt(!0);try{let i=await rr(y,g,s);if(!r.current)return;i||Z(l),N(nt,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&tt(!1)}}function Jr(s){D(l=>({...l,...s}))}function Xr(s){D(l=>({...l,senderPolicy:{...l.senderPolicy??{},...s}}))}function Qr(s){D(l=>({...l,messagePolicy:{...l.messagePolicy??{scope:"top_level"},...s,scope:"top_level"}}))}function Zr(s,l){D(i=>{let u=new Set(i.senderPolicy?.includeSenderTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,senderPolicy:{...i.senderPolicy??{},includeSenderTypes:[...u]}}})}function en(s,l){D(i=>{let u=new Set(i.messagePolicy?.includeMsgTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,messagePolicy:{...i.messagePolicy??{scope:"top_level"},includeMsgTypes:[...u],scope:"top_level"}}})}function Rt(s,l){D(i=>{let u=i.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",h=Ht({mode:u,include:i.senderPolicy?.includeSenderOpenIds??[],exclude:i.senderPolicy?.excludeSenderOpenIds??[],targetIds:s,listening:l});return{...i,senderPolicy:{...i.senderPolicy??{},mode:u,includeSenderOpenIds:h.include,excludeSenderOpenIds:h.exclude}}})}function tn(s,l){Rt([s],l)}function rn(s,l){Rt(s,l)}function nn(s){D(l=>({...l,senderPolicy:{...l.senderPolicy??{},mode:s,includeSenderOpenIds:[...l.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...l.senderPolicy?.excludeSenderOpenIds??[]]}}))}function kt(){let s=P.senderPolicy??{},l=P.messagePolicy??{},i=s.mode==="all_except_excluded"?"all_except_excluded":"include_only",u=[...new Set(s.includeSenderOpenIds??[])].filter(Boolean),h=[...new Set(s.excludeSenderOpenIds??[])].filter(Boolean),de=Vt(h,Ie=>St.get(Ie)?.memberType,s.excludeSenderKinds),w=[...new Set(s.includeSenderTypes??[])].filter(Ie=>Ie==="user"||Ie==="bot"),Ct=[...new Set(l.includeMsgTypes??[])].filter(Boolean);return{enabled:P.enabled,...P.name?.trim()?{name:P.name.trim()}:{},...P.replyCardTitle?.trim()?{replyCardTitle:P.replyCardTitle.trim()}:{},...P.workingDir?.trim()?{workingDir:P.workingDir.trim()}:{},prompt:P.prompt.trim(),senderPolicy:{mode:i,...i==="include_only"&&u.length>0?{includeSenderOpenIds:u}:{},...i==="all_except_excluded"&&h.length>0?{excludeSenderOpenIds:h}:{},...i==="all_except_excluded"&&Object.keys(de).length>0?{excludeSenderKinds:de}:{},...w.length>0?{includeSenderTypes:w}:{},excludeSelf:s.excludeSelf!==!1},messagePolicy:{...Ct.length>0?{includeMsgTypes:Ct}:{},scope:"top_level"}}}function sn(){return P.prompt.trim()?P.senderPolicy?.mode!=="all_except_excluded"&&(P.senderPolicy?.includeSenderOpenIds?.length??0)===0?(N(G,n("roles.listenerSenderRequired"),!0),null):{...kt(),enabled:!0}:(N(G,n("roles.listenerPromptRequired"),!0),null)}async function Nt(s){if(!g||!y)return;let l=sn();if(!l)return;let i=s?"run":"preview";be({kind:"loading",mode:i});try{let u=s?await ar(y,g,l,Me):await ir(y,g,l,Me);if(!r.current)return;be(u.ok?{kind:"result",response:u,mode:i}:{kind:"error",text:u.error||n("roles.listenerPreviewFailed")}),u.ok&&s&&u.runId&&on(u.runId)}catch(u){if(!r.current)return;be({kind:"error",text:u instanceof Error?u.message:n("roles.listenerPreviewFailed")})}}function on(s){if(!g||!y)return;let l=++ut.current;ee.current={runId:s,token:l};let i=async()=>{if(!r.current)return;let u=ee.current;if(!(!u||u.runId!==s||u.token!==l||!g||!y))try{let h=await dr(y,g,s);if(!r.current)return;if(h.ok&&h.results){let de=h.results;be(w=>w.kind!=="result"||w.mode!=="run"||w.response.runId!==s?w:{...w,response:{...w.response,results:In(w.response.results,de)}}),de.some(w=>w.state==="triggered"||w.state==="running")?o(i,1500):ee.current?.runId===s&&(ee.current=null)}}catch{o(i,2500)}};o(i,1500)}async function ln(){if(!(!g||!y)){if(!P.enabled&&!P.prompt.trim()){await Lt(!1);return}if(P.enabled){if(!P.prompt.trim()){N(G,n("roles.listenerPromptRequired"),!0);return}if(P.senderPolicy?.mode!=="all_except_excluded"&&(P.senderPolicy?.includeSenderOpenIds?.length??0)===0){N(G,n("roles.listenerSenderRequired"),!0);return}}dt(!0);try{let s=await sr(y,g,kt());if(!r.current)return;if(s){let l=await E();if(!r.current)return;let i=await We(y,g);if(!r.current)return;ae(yr(i)?i:null),L(l.groups,v)}N(G,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&dt(!1)}}}async function Lt(s=!0){if(!(!g||!y)&&!(s&&!confirm(n("roles.listenerConfirmDelete")))){ct(!0);try{let l=await or(y,g);if(!r.current)return;if(l){let i=await E();if(!r.current)return;ae(null),L(i.groups,v)}N(G,n(l?"roles.saved":"roles.saveFailed"),!l)}finally{r.current&&ct(!1)}}}async function Tt(s){let l=s.trim();if(!Ve(l))return;let i=++le.current;_r(l),pt(null),he(""),oe({kind:"idle"}),se(h=>h??c[0]?.chatId??null);let u=await q(l);!r.current||i!==le.current||(re(u),Ce(null))}async function an(s){if(!S)return;let l=++le.current;pt(s);let i=await ur(S,s);if(!r.current||l!==le.current)return;he(i.content??"");let u=await q(S);!r.current||l!==le.current||(re(u),Ce(null))}async function dn(){let s=await E();if(!r.current)return;let l=await ie();if(r.current){if(S){let i=await q(S);if(!r.current)return;re(i)}L(s.groups,l)}}async function cn(){let s=Pt.current,l=s?.value.trim()??"";if(l){if(!Ve(l)){s?.setCustomValidity(n("roles.profileIdInvalid")),s?.reportValidity();return}s?.setCustomValidity(""),await Tt(l),r.current&&(location.hash.startsWith("#/roles/profile")||(location.hash="#/roles/profile"))}}async function un(){if(!(!S||!C)){vt(!0);try{let s=await pr(S,C,ne);if(!r.current)return;let l=await ie();if(!r.current)return;let i=await q(S);if(!r.current)return;re(i),L(c,l),N(Ce,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&vt(!1)}}}async function pn(){if(!(!S||!C)&&confirm(n("roles.confirmDeleteProfileEntry"))){ht(!0);try{if(await mr(S,C),!r.current)return;he("");let s=await ie();if(!r.current)return;let l=await q(S);if(!r.current)return;re(l),L(c,s)}finally{r.current&&ht(!1)}}}function mn(s,l){gt(i=>{let u=new Set(i);return l?u.add(s):u.delete(s),u})}async function Mt(s){if(!S)return;let l=$??c[0]?.chatId;if(!l)return;let i=[...ft];if(i.length===0){oe({kind:"text",text:n("roles.applyPickBots")});return}oe({kind:"text",text:"..."});let u=await Promise.all(i.map(h=>gr({profileId:S,chatId:l,larkAppId:h,force:mt,preview:s})));if(r.current&&(oe({kind:"results",preview:s,results:u}),!s)){let h=await E();if(!r.current)return;L(h.groups,v)}}let fn=Je||Be>O||I.trim().length===0,gn=at||Te||It>pe||P.enabled&&P.prompt.trim().length===0,yn=yt||De>O||ne.trim().length===0,V=t.tab==="profiles",vn=(0,e.jsxs)("nav",{className:"roles-subnav insight-tabs",role:"tablist","aria-label":n("roles.title"),children:[(0,e.jsx)("a",{href:"#/roles",className:`itab${V?"":" on"}`,role:"tab","aria-selected":!V,children:n("roles.tabGroups")}),(0,e.jsx)("a",{href:"#/roles/profile",className:`itab${V?" on":""}`,role:"tab","aria-selected":V,children:n("roles.tabProfiles")})]});return(0,e.jsxs)("section",{className:"page roles-page",children:[(0,e.jsxs)("div",{className:"page-heading roles-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:n("nav.roles")}),(0,e.jsx)("h1",{children:n("roles.title")})]}),(0,e.jsx)("div",{className:"page-heading-actions",children:vn})]}),(0,e.jsxs)("div",{id:"roles-by-group-view",className:"roles-layout",hidden:V,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-search",placeholder:n("roles.search"),value:F,onChange:s=>k(s.target.value)}),(0,e.jsx)($e,{id:"roles-refresh",label:n("roles.refresh"),onClick:()=>{qr()}})]}),(0,e.jsx)("div",{id:"roles-tree",className:"roles-tree",children:Re?(0,e.jsx)(ce,{label:n("common.loading")}):(0,e.jsx)(Ln,{groups:jr,profiles:v,context:xe,contextLoaded:W,expandedGroups:U,selectedGroupId:g,selectedBotId:y,tr:n,onToggleGroup:s=>B(l=>kn(l,s)),onSelectBot:(s,l)=>{Vr(s,l)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:!g||!y?(0,e.jsx)("div",{id:"roles-editor-empty",className:"roles-editor-empty",children:n("roles.selectHint")}):(0,e.jsxs)("div",{id:"roles-editor-form",className:"roles-editor-form",children:[(0,e.jsxs)("div",{className:"roles-editor-head",children:[(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{id:"roles-editor-group-name",children:Ee?.name??g}),(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{id:"roles-editor-bot-name",children:Fr?.botName??y})]}),(0,e.jsx)("div",{className:"roles-editor-meta",children:(0,e.jsxs)("span",{id:"roles-editor-chat-id",className:"roles-editor-meta-line",children:[g," \xB7 ",y]})})]}),(0,e.jsx)("div",{className:"roles-editor-actions roles-editor-head-actions",children:j==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-delete",className:"danger",style:{display:d?.hasRole?"":"none"},disabled:Qe,onClick:()=>{Wr()},children:Qe?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-save",className:"primary",disabled:fn,onClick:()=>{Kr()},children:Je?"...":n("roles.save")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-listener-delete",className:"danger",style:{display:Nr?"":"none"},disabled:Te,onClick:()=>{Lt()},children:Te?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-listener-save",className:"primary",disabled:gn,onClick:()=>{ln()},children:at?"...":n("roles.save")})]})})]}),(0,e.jsxs)("div",{className:"roles-editor-switch segmented",role:"tablist","aria-label":n("roles.editorTabs"),children:[(0,e.jsx)("button",{type:"button",className:j==="role"?"active":"","aria-pressed":j==="role",onClick:()=>st("role"),children:n("roles.roleTab")}),(0,e.jsx)("button",{type:"button",className:j==="listener"?"active":"","aria-pressed":j==="listener",onClick:()=>st("listener"),children:n("roles.listenerTab")})]}),j==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.injectModeLabel")}),(0,e.jsx)(Oe,{id:"roles-editor-inject-mode",className:"roles-inline-menu",ariaLabel:n("roles.injectModeLabel"),disabled:Sr,label:n(X==="once"?"roles.injectModeOnce":"roles.injectModeEvery"),value:X,options:[{value:"every",label:n("roles.injectModeEvery")},{value:"once",label:n("roles.injectModeOnce")}],onChange:s=>{Yr(s==="once"?"once":"every")}}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.injectModeHint")}),(0,e.jsx)(fe,{flash:Rr})]}),(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.dispatchCompletionLabel")}),(0,e.jsxs)("label",{className:"filter-toggle roles-listener-enabled",children:[(0,e.jsx)("input",{id:"roles-editor-dispatch-completion-enabled",type:"checkbox",checked:ve,disabled:wr,onChange:s=>{zr(s.currentTarget.checked)}}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"filter-toggle-label",children:n("roles.dispatchCompletionEnabled")})]}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.dispatchCompletionHint")}),(0,e.jsx)(fe,{flash:kr})]}),(0,e.jsx)("textarea",{id:"roles-editor-textarea",placeholder:n("roles.editorPlaceholder"),rows:14,value:I,onChange:s=>M(s.target.value)}),(0,e.jsxs)("div",{className:"roles-editor-footer",children:[(0,e.jsxs)("span",{id:"roles-editor-bytecount",className:vr(Be),children:[Be," / ",O," bytes"]}),(0,e.jsx)(fe,{flash:xr})]}),(0,e.jsx)(br,{content:I,tr:n,id:"roles-preview"})]}):(0,e.jsx)(Mn,{listener:P,members:Le,memberById:St,promptByteLen:It,loading:Tr,membersLoading:Mr,flash:Cr,tr:n,onPatch:Jr,onSenderPolicyPatch:Xr,onMessagePolicyPatch:Qr,onToggleSenderType:Zr,onToggleMsgType:en,onSetTargetPolicy:tn,onSetTargetsPolicy:rn,onSetSenderMode:nn,previewLimit:Me,previewStatus:Ar,onPreviewLimitChange:Er,onPreview:()=>{Nt(!1)},onRunPreview:()=>{Nt(!0)}})]})})]}),(0,e.jsxs)("div",{id:"roles-profiles-view",className:"roles-layout roles-profiles-layout",hidden:!V,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header roles-profile-create dashboard-toolbar",children:[(0,e.jsx)("input",{type:"text",id:"roles-profile-id",placeholder:n("roles.profileIdPlaceholder"),maxLength:64,ref:Pt,onChange:s=>s.currentTarget.setCustomValidity("")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-select",onClick:()=>{cn()},children:n("roles.openProfile")})]}),(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-profile-search",placeholder:n("roles.profileSearch"),value:z,onChange:s=>ge(s.target.value)}),(0,e.jsx)($e,{id:"roles-profile-refresh",label:n("roles.refresh"),onClick:()=>{dn()}})]}),(0,e.jsx)("div",{id:"roles-profile-list",className:"roles-tree",children:ke?(0,e.jsx)(ce,{label:n("common.loading")}):(0,e.jsx)(An,{profiles:Hr,selectedProfileId:S,tr:n,onSelect:s=>{Tt(s)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:S?(0,e.jsxs)("div",{id:"roles-profile-detail",className:"roles-editor-form roles-profile-detail",children:[(0,e.jsx)("div",{className:"roles-profile-title",children:(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{children:S}),Ae?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{children:Ae.botName??Ae.larkAppId})]}):null]}),(0,e.jsx)("div",{className:"roles-editor-meta-line",children:n("roles.profileRuntimeHint")})]})}),(0,e.jsxs)("div",{className:"roles-profile-grid",children:[(0,e.jsxs)("div",{className:"roles-profile-bots",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.profileBots")}),(0,e.jsx)("div",{className:"roles-profile-bot-list",children:f.map(s=>{let l=!!me(te,s.larkAppId),i=C===s.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row roles-profile-bot-row ${i?"selected":""}`,"data-profile-bot-id":s.larkAppId,onClick:()=>{an(s.larkAppId)},children:[(0,e.jsx)(Pr,{bot:s}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:s.botName??s.larkAppId}),(0,e.jsx)("div",{className:"roles-bot-id",children:s.larkAppId})]}),(0,e.jsx)("span",{className:`roles-badge ${l?"has-role":"no-role"}`,children:n(l?"roles.configured":"roles.unconfigured")})]},s.larkAppId)})})]}),(0,e.jsx)("div",{className:"roles-profile-editor",children:C?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-profile-editor-head",children:[(0,e.jsxs)("span",{id:"roles-profile-bytecount",className:vr(De),children:[De," / ",O," bytes"]}),(0,e.jsxs)("div",{className:"roles-editor-actions roles-editor-head-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-delete",className:"danger",style:{display:$r?"":"none"},disabled:bt,onClick:()=>{pn()},children:bt?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-save",className:"primary",disabled:yn,onClick:()=>{un()},children:yt?"...":n("roles.saveEntry")})]})]}),(0,e.jsx)("textarea",{id:"roles-profile-textarea",placeholder:n("roles.profileEditorPlaceholder"),rows:12,value:ne,onChange:s=>he(s.target.value)}),(0,e.jsx)("div",{className:"roles-editor-footer",children:(0,e.jsx)(fe,{flash:Dr})}),(0,e.jsx)(br,{content:ne,tr:n,id:"roles-profile-preview"})]}):(0,e.jsx)("div",{className:"roles-editor-empty roles-profile-inline-empty",children:n("roles.profileBotSelectHint")})})]}),(0,e.jsxs)("div",{className:"roles-profile-apply",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.applyToGroup")}),(0,e.jsxs)("div",{className:"roles-profile-apply-controls",children:[(0,e.jsx)(Oe,{id:"roles-profile-apply-group",className:"roles-apply-group-menu",ariaLabel:n("roles.applyToGroup"),disabled:c.length===0,label:_e?.name??$??n("roles.noChats"),value:$??"",options:c.map(s=>({value:s.chatId,label:s.name??s.chatId})),onChange:s=>se(s)}),(0,e.jsxs)("label",{className:"roles-profile-force",children:[(0,e.jsx)("input",{type:"checkbox",id:"roles-profile-apply-force",checked:mt,onChange:s=>Br(s.target.checked)})," ",n("roles.applyForce")]})]}),(0,e.jsx)("div",{id:"roles-profile-apply-bots",children:!_e||Pe.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):Pe.map(s=>{let l=!!me(te,s.larkAppId);return(0,e.jsxs)("label",{className:"checkbox-row roles-profile-apply-bot",children:[(0,e.jsx)("input",{type:"checkbox",name:"profile-apply-bot",value:s.larkAppId,checked:ft.has(s.larkAppId),onChange:i=>mn(s.larkAppId,i.target.checked)}),(0,e.jsx)("span",{children:s.botName??s.larkAppId}),(0,e.jsx)("small",{children:n(l?"roles.configured":"roles.profileMissing")})]},s.larkAppId)})}),(0,e.jsxs)("div",{className:"roles-editor-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-preview-apply",onClick:()=>{Mt(!0)},children:n("roles.previewApply")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-apply",className:"primary",onClick:()=>{Mt(!1)},children:n("roles.applyProfile")})]}),(0,e.jsx)("div",{id:"roles-profile-apply-status",className:"roles-profile-status",children:(0,e.jsx)(_n,{status:Gr,bots:f,tr:n})})]})]}):(0,e.jsx)("div",{id:"roles-profile-empty",className:"roles-editor-empty",children:n("roles.profileSelectHint")})})]})]})}function kn(t,n){let r=new Set(t);return r.has(n)?r.delete(n):r.add(n),r}function vr(t){return`roles-bytecount ${t>qt?"warn":""} ${t>O?"over":""}`}function Nn(t){return`roles-bytecount ${t>Kt?"warn":""} ${t>pe?"over":""}`}function fe(t){return t.flash?(0,e.jsxs)("span",{className:`roles-saved-flash ${t.flash.isError?"roles-save-error":""}`,children:[" ",t.flash.text]}):null}function Ln(t){let{tr:n}=t;return t.groups.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):(0,e.jsx)(e.Fragment,{children:t.groups.map(r=>{let o=t.expandedGroups.has(r.chatId),c=r.memberBots.filter(p=>p.inChat),m=Yt(r),f=zt(r);return(0,e.jsxs)("div",{className:"roles-group-section",children:[(0,e.jsxs)("div",{className:`roles-group-row ${o?"expanded":""} ${t.selectedGroupId===r.chatId&&!t.selectedBotId?"selected":""}`,"data-group-id":r.chatId,onClick:()=>t.onToggleGroup(r.chatId),children:[(0,e.jsx)("span",{className:"roles-group-arrow",children:o?"\u25BE":"\u25B8"}),(0,e.jsx)("span",{className:"roles-group-icon","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 16 16",children:[(0,e.jsx)("circle",{cx:"5.6",cy:"5.8",r:"2.4"}),(0,e.jsx)("path",{d:"M1.8 13.2c.5-2.4 2-3.6 3.8-3.6s3.3 1.2 3.8 3.6"}),(0,e.jsx)("circle",{cx:"11",cy:"6.8",r:"1.9"}),(0,e.jsx)("path",{d:"M9.8 12.6c.4-1.7 1.5-2.6 2.8-2.6 1 0 1.9.5 2.4 1.6"})]})}),(0,e.jsxs)("div",{className:"roles-group-info",children:[(0,e.jsx)("div",{className:"roles-group-name",children:r.name??r.chatId}),(0,e.jsxs)("div",{className:"roles-group-meta",children:[m,"/",f," ",n("roles.botsWithRoles")]}),(0,e.jsx)(Tn,{group:r,profiles:t.profiles,context:t.context,loaded:t.contextLoaded,tr:n})]}),(0,e.jsx)("span",{className:"roles-group-chevron"})]}),(0,e.jsx)("div",{className:"roles-bot-list",children:o?c.map(p=>{let v=t.selectedGroupId===r.chatId&&t.selectedBotId===p.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row ${v?"selected":""}`,"data-group-id":r.chatId,"data-bot-id":p.larkAppId,onClick:T=>{T.stopPropagation(),t.onSelectBot(r.chatId,p.larkAppId)},children:[(0,e.jsx)("span",{className:"roles-bot-indent"}),(0,e.jsx)(Pr,{bot:p}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:p.botName}),(0,e.jsx)("div",{className:"roles-bot-id",children:p.larkAppId})]}),(0,e.jsxs)("div",{className:"roles-bot-badges",children:[(0,e.jsx)("span",{className:`roles-badge ${p.hasRole?"has-role":"no-role"}`,children:p.hasRole?n("roles.configured"):n("roles.unconfigured")}),p.hasMessageListener?(0,e.jsx)("span",{className:"roles-badge has-listener",children:n("roles.listenerBadge")}):null]})]},p.larkAppId)}):null})]},r.chatId)})})}function Tn(t){let{group:n,profiles:r,context:o,loaded:c,tr:m}=t;if(!r.length||!c)return null;let f=new Map;for(let T of n.memberBots)T.inChat&&f.set(T.larkAppId,o.effectiveRolesByBot.get(qe(T.larkAppId,n.chatId))??null);if(!Gt(f))return null;let p=Ft(n.memberBots,r,o.entriesByProfile,f)[0];if(!p)return(0,e.jsx)("div",{className:"roles-profile-match muted",children:m("groups.profileStatusUnmatched")});let v=p.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`roles-profile-match ${p.kind}`,children:m(v,{name:p.profileId,matched:p.matched,total:p.total,chat:p.chatMatched})})}function Mn(t){let{listener:n,tr:r}=t,[o,c]=(0,a.useState)("members"),[m,f]=(0,a.useState)(""),[p,v]=(0,a.useState)(()=>new Set),T=new Set(n.senderPolicy?.includeSenderTypes??[]),xe=new Set(n.messagePolicy?.includeMsgTypes??[]),R=n.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",W=new Set(n.senderPolicy?.includeSenderOpenIds??[]),A=new Set(n.senderPolicy?.excludeSenderOpenIds??[]),Re=[...[...R==="all_except_excluded"?A:W].filter(d=>!t.memberById.has(d))],Y=[...t.members.filter(d=>d.memberType!=="bot"),...Re.map(d=>({openId:d,name:d,memberType:"unknown"}))],ke=t.members.filter(d=>d.memberType==="bot"),_=o==="bots"?ke:Y,F=jt(_,m),k=F.map(d=>d.openId),z=k.filter(d=>p.has(d)),ge=k.length>0&&z.length===k.length,U=[...p].filter(d=>_.some(b=>b.openId===d)),B=U.length>0?U:k,g=Ue({mode:R,include:[...W],exclude:[...A],targetIds:B});(0,a.useEffect)(()=>{f(""),v(new Set)},[o]),(0,a.useEffect)(()=>{let d=new Set(_.map(b=>b.openId));v(b=>{let I=new Set([...b].filter(M=>d.has(M)));return I.size===b.size?b:I})},[_]);let ye=(d,b)=>{v(I=>{let M=new Set(I);return b?M.add(d):M.delete(d),M})},y=()=>{v(d=>{let b=new Set(d);if(ge)for(let I of k)b.delete(I);else for(let I of k)b.add(I);return b})},J=d=>{B.length!==0&&t.onSetTargetsPolicy(B,d)};return(0,e.jsxs)("div",{className:"roles-listener-editor",children:[t.loading?(0,e.jsx)(ce,{label:r("common.loading")}):null,(0,e.jsxs)("label",{className:"filter-toggle roles-listener-enabled",children:[(0,e.jsx)("input",{type:"checkbox",checked:n.enabled,onChange:d=>t.onPatch({enabled:d.currentTarget.checked})}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"filter-toggle-label",children:r("roles.listenerEnabled")})]}),(0,e.jsx)("p",{className:"roles-listener-scope-help",children:r("roles.listenerScopeHelp")}),(0,e.jsxs)("div",{className:"roles-listener-grid",children:[(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerName")}),(0,e.jsx)("input",{type:"text",value:n.name??"",placeholder:r("roles.listenerNamePlaceholder"),onChange:d=>t.onPatch({name:d.currentTarget.value})})]}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerReplyCardTitle")}),(0,e.jsx)("input",{type:"text",value:n.replyCardTitle??"",placeholder:r("roles.listenerReplyCardTitlePlaceholder"),onChange:d=>t.onPatch({replyCardTitle:d.currentTarget.value})})]}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerWorkingDir")}),(0,e.jsx)("input",{type:"text",value:n.workingDir??"",placeholder:r("roles.listenerWorkingDirPlaceholder"),onChange:d=>t.onPatch({workingDir:d.currentTarget.value})})]})]}),(0,e.jsxs)("div",{className:"roles-listener-policy-row",children:[(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerSenderTypes")}),(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:T.has("user"),onChange:d=>t.onToggleSenderType("user",d.currentTarget.checked)}),(0,e.jsx)("span",{children:r("roles.listenerSenderUser")})]}),(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:T.has("bot"),onChange:d=>t.onToggleSenderType("bot",d.currentTarget.checked)}),(0,e.jsx)("span",{children:r("roles.listenerSenderBot")})]})]}),(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerMessageTypes")}),hr.map(d=>(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:xe.has(d),onChange:b=>t.onToggleMsgType(d,b.currentTarget.checked)}),(0,e.jsx)("span",{children:d})]},d))]}),(0,e.jsxs)("label",{className:"roles-listener-checkbox",children:[(0,e.jsx)("input",{type:"checkbox",checked:n.senderPolicy?.excludeSelf!==!1,onChange:d=>t.onSenderPolicyPatch({excludeSelf:d.currentTarget.checked})}),(0,e.jsx)("span",{children:r("roles.listenerExcludeSelf")})]})]}),(0,e.jsx)("div",{className:"roles-listener-policy-row",children:(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerSenderMode")}),(0,e.jsxs)("div",{className:"roles-listener-target-tabs segmented",role:"tablist","aria-label":r("roles.listenerSenderMode"),children:[(0,e.jsx)("button",{type:"button",className:R==="include_only"?"active":"","aria-pressed":R==="include_only",onClick:()=>t.onSetSenderMode("include_only"),children:r("roles.listenerSenderModeInclude")}),(0,e.jsx)("button",{type:"button",className:R==="all_except_excluded"?"active":"","aria-pressed":R==="all_except_excluded",onClick:()=>t.onSetSenderMode("all_except_excluded"),children:r("roles.listenerSenderModeAllExcept")})]}),(0,e.jsx)("small",{className:"roles-listener-scope-help",children:r(R==="all_except_excluded"?"roles.listenerSenderModeAllExceptHelp":"roles.listenerSenderModeIncludeHelp")})]})}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerPrompt")}),(0,e.jsx)("textarea",{id:"roles-listener-prompt",placeholder:r("roles.listenerPromptPlaceholder"),rows:9,value:n.prompt,onChange:d=>t.onPatch({prompt:d.currentTarget.value})})]}),(0,e.jsxs)("div",{className:"roles-editor-footer",children:[(0,e.jsxs)("span",{id:"roles-listener-bytecount",className:Nn(t.promptByteLen),children:[t.promptByteLen," / ",pe," bytes"]}),(0,e.jsx)(fe,{flash:t.flash})]}),(0,e.jsxs)("div",{className:"roles-listener-preview-panel",children:[(0,e.jsxs)("div",{className:"roles-listener-preview-head",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:r("roles.listenerPreviewTitle")}),(0,e.jsx)("small",{children:r("roles.listenerPreviewHint")})]}),(0,e.jsxs)("div",{className:"roles-listener-preview-actions",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:r("roles.listenerPreviewCount")}),(0,e.jsx)("select",{value:t.previewLimit,onChange:d=>t.onPreviewLimitChange(Number(d.currentTarget.value)),children:Array.from({length:He},(d,b)=>b+1).map(d=>(0,e.jsx)("option",{value:d,children:d},d))})]}),(0,e.jsx)("button",{type:"button",onClick:t.onPreview,disabled:t.previewStatus.kind==="loading",children:t.previewStatus.kind==="loading"&&t.previewStatus.mode==="preview"?"...":r("roles.listenerPreviewButton")}),(0,e.jsx)("button",{type:"button",className:"primary",onClick:t.onRunPreview,disabled:t.previewStatus.kind==="loading",children:t.previewStatus.kind==="loading"&&t.previewStatus.mode==="run"?"...":r("roles.listenerRunPreviewButton")})]})]}),(0,e.jsx)(Cn,{status:t.previewStatus,tr:r})]}),(0,e.jsxs)("div",{className:"roles-listener-members",children:[(0,e.jsxs)("div",{className:"roles-listener-members-head",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:r("roles.listenerFilters")}),(0,e.jsx)("small",{children:t.membersLoading?r("common.loading"):r("roles.listenerMembersHint")})]}),(0,e.jsxs)("div",{className:"roles-listener-target-tabs segmented",role:"tablist","aria-label":r("roles.listenerFilters"),children:[(0,e.jsx)("button",{type:"button",className:o==="members"?"active":"","aria-pressed":o==="members",onClick:()=>c("members"),children:r("roles.listenerMembers")}),(0,e.jsx)("button",{type:"button",className:o==="bots"?"active":"","aria-pressed":o==="bots",onClick:()=>c("bots"),children:r("roles.listenerBots")})]}),(0,e.jsxs)("div",{className:"roles-listener-filter-toolbar",children:[(0,e.jsx)("input",{type:"search",value:m,placeholder:r("roles.listenerSearchPlaceholder"),onChange:d=>f(d.currentTarget.value)}),m?(0,e.jsx)("button",{type:"button",className:"roles-listener-clear-search",onClick:()=>f(""),"aria-label":r("roles.listenerClearSearch"),children:"\xD7"}):null,(0,e.jsx)("button",{type:"button",className:"roles-listener-select-all",disabled:k.length===0,onClick:y,children:r(ge?"roles.listenerClearVisible":"roles.listenerSelectVisible",{count:k.length})})]}),(0,e.jsxs)("div",{className:"roles-listener-bulkbar",children:[(0,e.jsxs)("span",{children:[U.length>0?r("roles.listenerSelectedCount",{count:U.length}):r("roles.listenerFilteredCount",{count:k.length}),g==="mixed"?` \xB7 ${r("roles.listenerMixedMode")}`:""]}),(0,e.jsxs)("div",{className:"roles-listener-member-actions",role:"group","aria-label":r("roles.listenerBulkActions"),children:[(0,e.jsx)("button",{type:"button",className:g==="listen"?"active":"","aria-pressed":g==="listen",disabled:B.length===0,onClick:()=>J(!0),children:r("roles.listenerTargetListen")}),(0,e.jsx)("button",{type:"button",className:g==="ignore"?"active":"","aria-pressed":g==="ignore",disabled:B.length===0,onClick:()=>J(!1),children:r("roles.listenerTargetIgnore")})]})]}),(0,e.jsx)("div",{className:"roles-listener-member-list",children:F.length===0?(0,e.jsx)("div",{className:"roles-empty",children:r(o==="bots"?"roles.listenerBotsEmpty":"roles.listenerMembersEmpty")}):F.map(d=>{let b=Ue({mode:R,include:[...W],exclude:[...A],targetIds:[d.openId]});return(0,e.jsxs)("div",{className:"roles-listener-member",children:[(0,e.jsx)("label",{className:"roles-listener-member-select","aria-label":Ye(d,d.openId),children:(0,e.jsx)("input",{type:"checkbox",checked:p.has(d.openId),onChange:I=>ye(d.openId,I.currentTarget.checked)})}),(0,e.jsxs)("div",{className:"roles-listener-member-main",children:[(0,e.jsx)("strong",{children:Ye(d,d.openId)}),(0,e.jsx)("span",{children:d.openId})]}),(0,e.jsxs)("div",{className:"roles-listener-member-actions",role:"group","aria-label":Ye(d,d.openId),children:[(0,e.jsx)("button",{type:"button",className:b==="listen"?"active":"","aria-pressed":b==="listen",onClick:()=>t.onSetTargetPolicy(d.openId,!0),children:r("roles.listenerTargetListen")}),(0,e.jsx)("button",{type:"button",className:b==="ignore"?"active":"","aria-pressed":b==="ignore",onClick:()=>t.onSetTargetPolicy(d.openId,!1),children:r("roles.listenerTargetIgnore")})]})]},d.openId)})})]})]})}function br(t){return(0,e.jsx)("div",{id:t.id,className:"roles-preview",children:t.content.trim()?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("strong",{children:t.tr("roles.preview")}),(0,e.jsx)("pre",{children:t.content})]}):(0,e.jsx)("small",{children:t.tr("roles.previewEmpty")})})}function Cn(t){let{status:n,tr:r}=t;if(n.kind==="idle")return(0,e.jsx)("div",{className:"roles-listener-preview-empty",children:r("roles.listenerPreviewEmpty")});if(n.kind==="loading")return(0,e.jsx)(ce,{label:r("common.loading")});if(n.kind==="error")return(0,e.jsx)("div",{className:"roles-listener-preview-error",children:n.text});let o=n.response.matches??[],m=(n.response.results??[]).reduce((f,p)=>{let v=p.ok?p.state??"triggered":"failed";return f[v]=(f[v]??0)+1,f},{});return(0,e.jsxs)("div",{className:"roles-listener-preview-results",children:[(0,e.jsx)("div",{className:"roles-listener-preview-summary",children:n.mode==="run"?r("roles.listenerRunPreviewSummary",{count:o.length,triggered:m.triggered??0,running:m.running??0,replied:m.replied??0,failed:m.failed??0}):r("roles.listenerPreviewSummary",{count:o.length})}),o.length===0?(0,e.jsx)("div",{className:"roles-listener-preview-empty",children:r("roles.listenerPreviewNoMatches")}):(0,e.jsx)("div",{className:"roles-listener-preview-list",children:o.map(f=>(0,e.jsx)(En,{item:f,result:n.response.results?.find(p=>p.messageId===f.messageId),tr:r},f.messageId))})]})}function En(t){let n=t.item.messageText.length>300?`${t.item.messageText.slice(0,300)}...`:t.item.messageText,r=t.item.senderName||t.item.senderOpenId||t.item.senderType,o=lr(t.item.createTime);return(0,e.jsxs)("div",{className:"roles-listener-preview-item",children:[(0,e.jsxs)("div",{className:"roles-listener-preview-meta",children:[(0,e.jsx)("span",{children:t.item.msgType}),(0,e.jsx)("span",{children:t.item.senderType}),t.item.senderOpenId?(0,e.jsx)("span",{children:t.item.senderOpenId}):null,(0,e.jsx)("span",{children:t.item.messageId}),t.result?(0,e.jsx)("span",{className:Sn(t.result.state,t.result.ok),children:t.tr(`roles.listenerRunPreviewState.${t.result.ok?t.result.state??"triggered":"failed"}`)}):null]}),t.result?.sessionId||t.result?.replyMessageId||t.result?.error?(0,e.jsxs)("div",{className:"roles-listener-preview-run-detail",children:[t.result.sessionId?(0,e.jsx)("span",{children:t.result.sessionId}):null,t.result.replyMessageId?(0,e.jsx)("span",{children:t.result.replyMessageId}):null,t.result.error?(0,e.jsx)("strong",{children:t.result.error}):null]}):null,(0,e.jsxs)("div",{className:"roles-listener-preview-sender",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewSender")}),(0,e.jsx)("strong",{children:r})]}),o?(0,e.jsxs)("div",{className:"roles-listener-preview-time",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewTime")}),(0,e.jsx)("strong",{children:o})]}):null,t.item.messageTitle?(0,e.jsxs)("div",{className:"roles-listener-preview-title",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewMessageTitle")}),(0,e.jsx)("strong",{children:t.item.messageTitle})]}):null,(0,e.jsx)("div",{className:"roles-listener-preview-content-label",children:t.tr("roles.listenerPreviewContent")}),(0,e.jsx)("pre",{children:n})]})}function An(t){let{tr:n}=t;return t.profiles.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.profileEmpty")}):(0,e.jsx)(e.Fragment,{children:t.profiles.map(r=>{let o=t.selectedProfileId===r.profileId,c=(r.botEntries??[]).some(m=>m.hasEntry);return(0,e.jsxs)("div",{className:`roles-profile-row ${o?"selected":""}`,"data-profile-id":r.profileId,onClick:()=>t.onSelect(r.profileId),children:[(0,e.jsxs)("div",{className:"roles-profile-row-main",children:[(0,e.jsx)("div",{className:"roles-profile-name",children:r.profileId}),(0,e.jsxs)("div",{className:"roles-group-meta",children:[r.entryCount," ",n("roles.profileEntries")]})]}),(0,e.jsx)("span",{className:`roles-badge ${c?"has-role":"no-role"}`,children:n(c?"roles.configured":"roles.profileMissing")})]},r.profileId)})})}function _n(t){let{status:n,bots:r,tr:o}=t;return n.kind==="idle"?null:n.kind==="text"?(0,e.jsx)(e.Fragment,{children:n.text}):(0,e.jsx)(e.Fragment,{children:n.results.map(c=>{let f=r.find(v=>v.larkAppId===c.larkAppId)?.botName??c.larkAppId,p=c.ok?n.preview?c.wouldRefuse?o("roles.applyWouldRefuse"):o("roles.applyPreviewOk"):o("roles.applyOk"):`${o("roles.applyFailed")}: ${String(c.error??`HTTP ${c.status}`)}`;return(0,e.jsxs)("div",{children:[f,": ",p]},c.larkAppId)})})}function qn(t){return Fe(t,(0,e.jsx)(Ir,{tab:"groups"}))}function Kn(t){return Fe(t,(0,e.jsx)(Ir,{tab:"profiles"}))}export{Kn as renderRoleProfilesPage,qn as renderRolesPage};
@@ -1 +0,0 @@
1
- import{g as B,m as K,n as U,o as j,p as J,q as G}from"./chunk-5CJMHTT4.js";import{b as Z,d as F}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import{G as H,J as M}from"./chunk-F6KNPF4R.js";import{a as q}from"./chunk-SYC6D5XU.js";import{a as Q,d as _}from"./chunk-5THX4DI2.js";import{c as L}from"./chunk-7SZRL6FY.js";var a=L(Q(),1);var e=L(_(),1),W=1e3;function V(t,l){if(!t)return"\u2014";try{return new Date(t).toLocaleString(void 0,l?{timeZone:l,timeZoneName:"short"}:void 0)}catch{return t}}function X(t,l){let n=l.q.toLowerCase();return t.filter(o=>!l.kind||o.parsed?.kind===l.kind).filter(o=>!l.enabledOnly||o.enabled).filter(o=>!n||JSON.stringify(o).toLowerCase().includes(n)).sort((o,r)=>{if(o.enabled!==r.enabled)return o.enabled?-1:1;let w=o.nextRunAt?Date.parse(o.nextRunAt):1/0,p=r.nextRunAt?Date.parse(r.nextRunAt):1/0;return w-p})}function O(t){return t.deliver==="local"?"local":t.executionPosition==="new-topic"?"new-topic":t.executionPosition==="topic"?t.rootMessageId?"thread":"chat":t.executionPosition==="top-level"?"chat":t.deliver==="new-topic"?"new-topic":t.scope==="chat"?"chat":t.rootMessageId?"thread":"chat"}function Y(t,l){let n=O(t);return l(n==="local"?"schedules.deliveryLocal":n==="new-topic"?"schedules.deliveryNewTopic":n==="thread"?"schedules.deliveryThread":"schedules.deliveryTopLevel")}function ee(t){return t.repeat?`${t.repeat.completed}/${t.repeat.times??"\u221E"}`:"\u2014"}function le(t){return new Promise(l=>window.setTimeout(l,t))}function te(t){let{schedule:l,scheduleTimeZone:n,tr:o}=t,r=M(l),w=String(l.parsed?.kind??"unknown"),p=l.enabled?"pause":"resume",N=`${l.id}:${p}`,b=`${l.id}:run`;return(0,e.jsxs)(U,{kind:"schedule",className:"schedule-list-row","data-id":l.id,children:[(0,e.jsxs)(j,{children:[(0,e.jsxs)("div",{className:"schedule-row-head",children:[(0,e.jsx)("b",{children:l.name??l.id}),(0,e.jsx)("span",{className:`schedule-state ${l.enabled?"enabled":"paused"}`,children:l.enabled?o("schedules.enabled"):o("schedules.paused")})]}),(0,e.jsxs)("div",{className:"schedule-row-meta",children:[(0,e.jsx)("span",{children:l.botName??l.larkAppId??"-"}),(0,e.jsx)("span",{children:"\xB7"}),(0,e.jsx)("code",{children:l.parsed?.display??"?"})]}),(0,e.jsxs)("div",{className:"schedule-chip-strip",children:[(0,e.jsx)("span",{children:w}),l.chatId?(0,e.jsxs)("span",{className:"schedule-chat-chip",title:r?`${r} \xB7 ${String(l.chatId)}`:String(l.chatId),children:[o("schedules.form.chat"),": ",r??l.chatId]}):null,(0,e.jsxs)("span",{children:[o("schedules.delivery"),": ",Y(l,o)]}),l.silent?(0,e.jsxs)("span",{children:["\u{1F507} ",o("schedules.silent")]}):null,(0,e.jsxs)("span",{children:[o("schedules.next"),": ",V(l.nextRunAt,n)]}),(0,e.jsxs)("span",{children:[o("schedules.last"),": ",V(l.lastRunAt,n)]}),l.lastStatus==="error"?(0,e.jsxs)("span",{className:"schedule-error-chip",title:typeof l.lastError=="string"?l.lastError:void 0,children:["\u26A0 ",o("schedules.error"),": ",typeof l.lastError=="string"&&l.lastError.length>60?l.lastError.slice(0,60)+"\u2026":l.lastError??o("schedules.errorUnknown")]}):null,(0,e.jsxs)("span",{children:[o("schedules.repeat"),": ",ee(l)]})]})]}),(0,e.jsx)(J,{children:(0,e.jsxs)("div",{className:"schedule-actions",children:[(0,e.jsx)(oe,{op:"run",label:o("schedules.runNow"),pending:t.pending===b,feedback:t.feedback[b]??null,onClick:()=>t.onAction(l.id,"run")}),(0,e.jsx)(ce,{checked:!!l.enabled,pending:t.pending===N,feedback:t.feedback[N]??null,tr:o,onClick:()=>t.onAction(l.id,p)}),(0,e.jsx)("button",{type:"button",className:"schedule-action-button schedule-edit-button",onClick:()=>t.onEdit(l),title:o("schedules.edit"),children:(0,e.jsx)("span",{className:"schedule-action-label",children:o("schedules.edit")})}),(0,e.jsx)("button",{type:"button",className:"schedule-action-button schedule-delete-button",onClick:()=>t.onDelete(l),title:o("schedules.delete"),children:(0,e.jsx)("span",{className:"schedule-action-label",children:o("schedules.delete")})})]})})]})}function se(){let t=F(),{scheduleRows:l,scheduleTimeZone:n}=Z(s=>({scheduleRows:[...s.schedules.values()],scheduleTimeZone:s.scheduleTimeZone})),[o,r]=(0,a.useState)({q:"",kind:"",enabledOnly:!1}),[w,p]=(0,a.useState)(null),[N,b]=(0,a.useState)({}),k=(0,a.useRef)(new Map),[P,y]=(0,a.useState)(!1),[u,T]=(0,a.useState)(null),[S,A]=(0,a.useState)(null),[C,E]=(0,a.useState)([]),[,I]=(0,a.useState)(0);(0,a.useEffect)(()=>{fetch("/api/bots").then(s=>s.json()).then(s=>{Array.isArray(s?.bots)&&E(s.bots)}).catch(()=>{})},[]),(0,a.useEffect)(()=>{H().then(()=>I(s=>s+1))},[]);let R=(0,a.useMemo)(()=>X(l,o),[l,o]);(0,a.useEffect)(()=>()=>{k.current.forEach(s=>window.clearTimeout(s)),k.current.clear()},[]);function m(s,c){b(f=>({...f,[s]:c}));let d=k.current.get(s);d&&window.clearTimeout(d);let v=window.setTimeout(()=>{b(f=>{let h={...f};return delete h[s],h}),k.current.delete(s)},c==="success"?1600:2200);k.current.set(s,v)}async function x(s,c){let d=`${s}:${c}`,v=performance.now(),f="success";p(d);try{let h=await fetch(`/api/schedules/${encodeURIComponent(s)}/${c}`,{method:"POST"}),D=await h.json().catch(()=>({}));if(!h.ok||D.ok===!1)throw new Error(`Failed: ${h.status} ${D?.error??""}`.trim())}catch{f="error"}finally{if(c==="run"){let h=W-(performance.now()-v);h>0&&await le(h)}m(d,f),p(h=>h===d?null:h)}}function g(){T(null),A(null),y(!0)}function $(s){T(s),A(null),y(!0)}async function i(s){if(!window.confirm(t("schedules.deleteConfirm")))return;let c=`${s.id}:delete`;p(c);try{let d=await fetch(`/api/schedules/${encodeURIComponent(s.id)}`,{method:"DELETE"}),v=await d.json().catch(()=>({}));if(!d.ok||v.ok===!1)throw new Error(v?.error??`HTTP ${d.status}`);m(c,"success")}catch{m(c,"error")}finally{p(d=>d===c?null:d)}}async function z(s){A(null);try{let c=u?`/api/schedules/${encodeURIComponent(u.id)}`:"/api/schedules",d=u?"PATCH":"POST",v=u?{name:s.name,schedule:s.schedule,prompt:s.prompt,silent:s.silent,...s.updateExecutionPosition?{executionPosition:s.executionPosition,rootMessageId:s.rootMessageId,topicTitle:s.topicTitle}:{}}:{name:s.name,schedule:s.schedule,prompt:s.prompt,silent:s.silent,executionPosition:s.executionPosition,rootMessageId:s.rootMessageId,topicTitle:s.topicTitle,chatId:s.chatId,larkAppId:s.larkAppId},f=await fetch(c,{method:d,headers:{"Content-Type":"application/json"},body:JSON.stringify(v)}),h=await f.json().catch(()=>({}));if(!f.ok||h.ok===!1)throw new Error(h?.error??`HTTP ${f.status}`);y(!1)}catch(c){A(c instanceof Error?c.message:String(c))}}return(0,e.jsxs)("section",{className:"page schedules-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("nav.schedules")}),(0,e.jsx)("h1",{children:t("schedules.title")})]}),(0,e.jsx)(B,{onClick:g,disabled:C.length===0,children:t("schedules.create")})]}),(0,e.jsxs)("form",{id:"sched-filters",className:"filters dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",name:"q",placeholder:t("schedules.search"),value:o.q,onChange:s=>{let c=s.currentTarget.value;r(d=>({...d,q:c}))}}),(0,e.jsx)(G,{id:"sched-kind-menu",ariaLabel:t("schedules.anyKind"),label:o.kind||t("schedules.anyKind"),value:o.kind,options:[{value:"",label:t("schedules.anyKind")},{value:"cron",label:"cron"},{value:"interval",label:"interval"},{value:"once",label:"once"}],onChange:s=>r(c=>({...c,kind:s}))}),(0,e.jsxs)("label",{className:"filter-toggle",children:[(0,e.jsx)("input",{type:"checkbox",name:"enabled",checked:o.enabledOnly,onChange:s=>{let c=s.currentTarget.checked;r(d=>({...d,enabledOnly:c}))}}),(0,e.jsx)("span",{className:"filter-toggle-label",children:t("schedules.enabledOnly")}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,e.jsx)("span",{className:"schedules-toolbar-spacer","aria-hidden":"true"}),(0,e.jsxs)("span",{className:"schedules-toolbar-count",children:[R.length,"/",l.length]})]}),(0,e.jsx)("section",{className:"overview-block schedules-list-section",children:(0,e.jsx)("div",{className:"schedules-list-wrap",children:R.length===0?(0,e.jsx)("div",{id:"schedules-tbody",className:"empty schedules-list-empty",children:t("schedules.empty")}):(0,e.jsx)(K,{id:"schedules-tbody",className:"schedules-list",children:R.map(s=>(0,e.jsx)(te,{schedule:s,scheduleTimeZone:n,pending:w,feedback:N,tr:t,onAction:(c,d)=>{x(c,d)},onEdit:$,onDelete:c=>{i(c)}},s.id))})})}),P?(0,e.jsx)(ae,{editing:u,error:S,bots:C,tr:t,onClose:()=>y(!1),onSubmit:s=>{z(s)}}):null]})}function ne(t,l,n,o,r){return n?r(t==="run"?"schedules.running":"schedules.saving"):o==="success"?r(t==="run"?"schedules.runDone":"schedules.saved"):o==="error"?r("schedules.failed"):l}function oe(t){let l=F(),n=t.feedback?` is-${t.feedback}`:"";return(0,e.jsx)("button",{type:"button",className:`schedule-action-button${t.pending?" is-pending":""}${n}`,"data-op":t.op,disabled:t.pending,onClick:t.onClick,children:(0,e.jsx)("span",{className:"schedule-action-label",children:ne(t.op,t.label,t.pending,t.feedback,l)})})}function ce(t){let l=t.feedback==="error"?t.tr("schedules.failed"):t.checked?t.tr("schedules.enabled"):t.tr("schedules.paused");return(0,e.jsxs)("button",{type:"button",className:`schedule-enabled-switch${t.checked?" is-on":""}${t.pending?" is-pending":""}${t.feedback?` is-${t.feedback}`:""}`,"aria-pressed":t.checked,disabled:t.pending,onClick:t.onClick,children:[(0,e.jsx)("span",{className:"schedule-enabled-switch-label",children:l}),(0,e.jsx)("span",{className:"schedule-enabled-switch-track","aria-hidden":"true",children:(0,e.jsx)("span",{})})]})}function he(t){return q(t,(0,e.jsx)(se,{}))}function ae(t){let{editing:l,tr:n,bots:o}=t,[r,w]=(0,a.useState)(l?.name??""),[p,N]=(0,a.useState)(l?.schedule??""),[b,k]=(0,a.useState)(l?.prompt??""),[P,y]=(0,a.useState)(l?.silent===!0),[u,T]=(0,a.useState)(l&&O(l)==="thread"?"topic":l&&O(l)==="new-topic"?"new-topic":"top-level"),[S,A]=(0,a.useState)(l?.rootMessageId??""),[C,E]=(0,a.useState)(l?.topicTitle??""),[I,R]=(0,a.useState)(l?.chatId??""),[m,x]=(0,a.useState)(l?.larkAppId??o[0]?.larkAppId??""),g=l?.deliver==="local";(0,a.useEffect)(()=>{!l&&!m&&o.length>0&&x(o[0].larkAppId)},[l,m,o]);function $(i){i.preventDefault(),!(!l&&!m)&&(!g&&u==="topic"&&!S.trim()||t.onSubmit({name:r,schedule:p,prompt:b,silent:P,executionPosition:u,rootMessageId:S.trim(),topicTitle:C.trim(),updateExecutionPosition:!g,chatId:I,larkAppId:m}))}return(0,e.jsx)("div",{className:"schedule-form-overlay",onClick:t.onClose,children:(0,e.jsxs)("div",{className:"schedule-form-dialog",role:"dialog","aria-modal":"true",onClick:i=>i.stopPropagation(),children:[(0,e.jsx)("h2",{children:n(l?"schedules.edit":"schedules.create")}),(0,e.jsxs)("form",{onSubmit:$,className:"schedule-form",children:[l?null:(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.bot")}),(0,e.jsx)("select",{value:m,onChange:i=>x(i.target.value),required:!0,children:o.map(i=>(0,e.jsx)("option",{value:i.larkAppId,children:i.botName??i.larkAppId},i.larkAppId))})]}),(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.name")}),(0,e.jsx)("input",{type:"text",value:r,onChange:i=>w(i.target.value),required:!0,autoFocus:!0})]}),(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.schedule")}),(0,e.jsx)("input",{type:"text",value:p,onChange:i=>N(i.target.value),placeholder:n("schedules.form.scheduleHelp"),required:!0}),(0,e.jsx)("small",{className:"schedule-form-help",children:n("schedules.form.scheduleHelp")})]}),(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.prompt")}),(0,e.jsx)("textarea",{value:b,onChange:i=>k(i.target.value),rows:4,required:!0}),(0,e.jsx)("small",{className:"schedule-form-help",children:n("schedules.form.promptHelp")})]}),l?(0,e.jsxs)("div",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.chat")}),(0,e.jsx)("code",{title:I,children:M(l)??I})]}):(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.chat")}),(0,e.jsx)("input",{type:"text",value:I,onChange:i=>R(i.target.value),placeholder:"oc_...",required:!0})]}),g?(0,e.jsxs)("div",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.deliver")}),(0,e.jsxs)("div",{className:"schedule-form-placement",children:[(0,e.jsx)("strong",{children:n("schedules.deliveryLocal")}),(0,e.jsx)("small",{className:"schedule-form-help",children:n("schedules.form.localHelp")})]})]}):(0,e.jsxs)("div",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.deliver")}),(0,e.jsxs)("div",{className:"schedule-form-radio-group",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)("input",{type:"radio",name:"executionPosition",value:"top-level",checked:u==="top-level",onChange:()=>T("top-level")}),n("schedules.deliveryTopLevel")]}),(0,e.jsxs)("label",{children:[(0,e.jsx)("input",{type:"radio",name:"executionPosition",value:"topic",checked:u==="topic",onChange:()=>T("topic")}),n("schedules.deliveryThread")]}),(0,e.jsxs)("label",{children:[(0,e.jsx)("input",{type:"radio",name:"executionPosition",value:"new-topic",checked:u==="new-topic",onChange:()=>{T("new-topic"),y(!1)}}),n("schedules.deliveryNewTopic")]})]}),(0,e.jsx)("small",{className:"schedule-form-help",children:n(u==="top-level"?"schedules.form.topLevelHelp":u==="topic"?"schedules.form.topicHelp":"schedules.form.newTopicHelp")})]}),!g&&u==="topic"?(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.topicRoot")}),(0,e.jsx)("input",{type:"text",value:S,onChange:i=>A(i.target.value),placeholder:"om_...",required:!0}),(0,e.jsx)("small",{className:"schedule-form-help",children:n("schedules.form.topicRootHelp")})]}):null,!g&&u==="new-topic"?(0,e.jsxs)("label",{className:"schedule-form-field",children:[(0,e.jsx)("span",{className:"schedule-form-label",children:n("schedules.form.topicTitle")}),(0,e.jsx)("input",{type:"text",value:C,onChange:i=>E(i.target.value),placeholder:n("schedules.form.topicTitlePlaceholder"),maxLength:200}),(0,e.jsxs)("small",{className:"schedule-form-help schedule-form-help-with-count",children:[n("schedules.form.topicTitleHelp"),(0,e.jsxs)("span",{children:[Array.from(C).length,"/200"]})]})]}):null,(0,e.jsxs)("label",{className:"schedule-form-field schedule-form-toggle",children:[(0,e.jsx)("input",{type:"checkbox",checked:P,onChange:i=>y(i.target.checked)}),(0,e.jsxs)("span",{children:[n("schedules.form.silent"),(0,e.jsx)("small",{className:"schedule-form-help",children:n("schedules.form.silentHelp")})]})]}),u==="new-topic"&&P?(0,e.jsx)("p",{className:"schedule-form-help",children:n("schedules.form.silentNewTopicConflict")}):null,t.error?(0,e.jsx)("p",{className:"schedule-form-error",children:t.error}):null,(0,e.jsxs)("div",{className:"schedule-form-actions",children:[(0,e.jsx)("button",{type:"button",className:"schedule-form-cancel",onClick:t.onClose,children:n("schedules.form.cancel")}),(0,e.jsx)("button",{type:"submit",className:"schedule-form-submit",disabled:!l&&!m||!g&&u==="topic"&&!S.trim(),children:n(l?"schedules.form.save":"schedules.form.create")})]})]})]})})}export{X as filterSchedules,V as fmtScheduleDate,he as renderSchedulesPage,O as scheduleExecutionPlacement};
@@ -1,8 +0,0 @@
1
- import{a as $t,c as Ht,h as _t}from"./chunk-XJ7BGPJH.js";import{a as Dt}from"./chunk-FDZ7WOBW.js";import{a as Hn,c as Ot,f as Ge}from"./chunk-AGCPF6MT.js";import{a as Dn,b as At,c as on,d as Lt,e as Pt}from"./chunk-4XNJX6B3.js";import{a as bn}from"./chunk-ZJVTGU5X.js";import{a as Bt}from"./chunk-KTQ7B6ZR.js";import{c as ze,g as Mt,q as sn}from"./chunk-5CJMHTT4.js";import{b as Rt,d as Et}from"./chunk-FXW3V4JR.js";import{a as Ue}from"./chunk-24ONYQMR.js";import{C as Oe,E as pn,G as Nt,I as ge,J as $e,K as be,M as fn,d as ft,e as Bn,g as bt,j as ht,k as yt,l as kt,m as On,n as wt,o as Ct,p as vt,q as St,r as $n,s as It,t as Tt,w as Pe,x as o,y as je,z as Be}from"./chunk-F6KNPF4R.js";import{a as xt}from"./chunk-SYC6D5XU.js";import{a as pt,b as Xs,d as hn}from"./chunk-5THX4DI2.js";import{c as Fe}from"./chunk-7SZRL6FY.js";var c=Fe(pt(),1),cn=Fe(Xs(),1);var _n=[24,72,168],Vs=new Set(_n);function Kn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!Vs.has(t)?null:t}function qs(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Ys(e,t=Date.now()){return t-e*60*60*1e3}function Zs(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=qs(e.lastMessageAt);return a!==null&&a<Ys(t,s)}function Kt(e,t,s=Date.now()){return e.filter(a=>Zs(a,t,s))}var Ft={1:"claude-code",2:"aiden",3:"coco",4:"codex",5:"cursor",6:"gemini",7:"opencode",8:"antigravity",9:"mtr",10:"hermes",11:"codex-app",12:"mira",13:"seed",14:"traex",15:"pi",16:"copilot",17:"oh-my-pi",18:"relay",19:"mir",20:"kimi",21:"genius",22:"grok",23:"kiro-cli",24:"riff",25:"reasonix",26:"opencode2",27:"dsh",28:"mojo"},ea=new Set(Object.values(Ft)),Qs={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",opencode2:"OpenCode 2",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff",reasonix:"Reasonix",dsh:"DeepSeek Harness",mojo:"Mojo"},Ut=Object.values(Ft).map(e=>({id:e,label:Qs[e]??e}));function yn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Fn(e){let t=yn(e);return t===null?"-":t.toLocaleString("en-US")}function jt(e,t){let s=String(e??"").replace(/\s+/g," ").trim();return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function zt(e,t){let s=String(e??"").replace(/\r\n?/g,`
2
- `).replace(/[^\S\n]+\n/g,`
3
- `).replace(/\n{3,}/g,`
4
-
5
- `).replace(/^\n+/,"").replace(/\s+$/,"");return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Wt(e){let t=zt(e.previewUserFullText??e.previewUserText??"",4e3),s=e.previewBotState==="replied"?zt(e.previewBotFullText??e.previewBotText??"",4e3):"";return{userText:jt(t,120),userFullText:t,botText:jt(s,220),botFullText:s}}var Xt={open:!1,suppressFocusOpen:!1};function Vt(e,t){switch(t){case"open":return{open:!0,suppressFocusOpen:!1};case"close":return{open:!1,suppressFocusOpen:!1};case"toggle":return{open:!e.open,suppressFocusOpen:!1};case"focus":return e.suppressFocusOpen?{open:e.open,suppressFocusOpen:!1}:{open:!0,suppressFocusOpen:!1};case"escape-refocus":return{open:!1,suppressFocusOpen:!0};default:return e}}var ye=[...Ut.map(e=>e.id),"unknown"],Un=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"todo",labelKey:"sessions.board.todo",hintKey:"sessions.board.todoHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function kn(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var qt=["starting","working","idle","dormant","analyzing","stalled","active","limited","closed"];function an(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function Yt(e){let t=0,s=0,a=0;for(let r of e)r?.status!=="closed"&&(t++,typeof r?.workerPid=="number"&&s++,r?.status==="dormant"&&a++);return{logical:t,resident:s,dormant:a}}function jn(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Gt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function eo(e){let t=o("sessions.directChat"),s=String(e?.chatDisplayName??"").trim()||String(e?.chatId??"").trim()||o("sessions.chatUnknown"),a=ge(e);return`${t} \xB7 ${s} - ${a}`}function De(e){let t=String(e?.chatId??"").trim();if(e?.chatType==="p2p")return eo(e);let s=$e(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${Gt(e)} \xB7 ${s}${a}`:t?`${Gt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function zn(e,t=$e){return!!String(e?.chatId??"").trim()&&!t(e)}function Jt(e,t){let s=String(t??"").trim();return!!s&&String(e??"").includes(s)}function Zt(e,t,s){if(e===void 0)return t;let a=Jt(e,s),r=Jt(t,s);return a!==r?a?t:e:t<e?t:e}function Gn(e){let t=De(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function Qt(e){return`${JSON.stringify(e)} ${De(e)} ${Gn(e)}`.toLowerCase()}function he(e){return typeof e=="string"?e.trim():""}function es(e){let t=he(e?.chatId),s=he(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function Jn(e){let t=he(e?.chatId),s=he(e?.rootMessageId),a=es(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(he(e?.sessionId)||"unknown")}`}function no(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=he(a?.title);if(r)return r}return t}function wn(e){let t=new Map;for(let a of e){let r=Jn(a),m=t.get(r);m?m.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let m=[...r].sort((A,_)=>Number(_.lastMessageAt??0)-Number(A.lastMessageAt??0)),p=m[0]??{},l=es(p),g=he(p.chatId),C=l==="thread"?he(p.rootMessageId):"",w=new Set(m.map(A=>he(A.larkAppId)||he(A.botName)).filter(Boolean)),v=Math.max(1,w.size),O=m.filter(A=>A.status!=="closed").length,P=m.filter(A=>A.lastInputFromBot===!0).length,E=m.reduce((A,_)=>Math.max(A,Number(_.lastMessageAt??0)),0),M=C||g||he(p.sessionId)||a;s.push({key:a,kind:l,chatId:g,...C?{rootMessageId:C}:{},title:no(m,M),rows:m,botCount:v,activeCount:O,closedCount:m.length-O,inferredBotInputCount:P,latestActivityAt:E,multiBot:w.size>1,inferredBotTriggered:P>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var rn=$t;function Cn(e=Pe){return e.authed?!0:(e.publicReadOnly,!1)}var J={pin:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 14.3s4.2-3.9 4.2-7.3A4.2 4.2 0 0 0 8 2.9a4.2 4.2 0 0 0-4.2 4.1C3.8 10.4 8 14.3 8 14.3z"/><circle cx="8" cy="6.9" r="1.5"/></svg>',openChat:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 2.8h3.8v3.8"/><path d="M13.2 2.8 7.3 8.7"/><path d="M11.5 9.3v2.9a1.2 1.2 0 0 1-1.2 1.2H3.8a1.2 1.2 0 0 1-1.2-1.2V5.7a1.2 1.2 0 0 1 1.2-1.2h2.9"/></svg>',details:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="2.4" y="2.6" width="11.2" height="10.8" rx="2"/><path d="M5.2 5.4h5.6"/><path d="M5.2 8h5.6"/><path d="M5.2 10.6h3.2"/></svg>',terminal:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.8" y="2.2" width="12.4" height="10.5" rx="2"/><path d="M1.8 5h12.4"/><circle cx="4" cy="3.6" r=".45" fill="currentColor" stroke="none"/><path d="m4.2 7.3 1.8 1.6-1.8 1.6"/><path d="M8 10.6h3.4"/></svg>',key:'<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="6" cy="6.1" r="3"/><path d="M8.1 8.2 13 13.1"/><path d="M11.3 11.4 12.6 10.1"/><path d="M12.7 12.8 13.7 11.8"/></svg>',lock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.4a2.9 2.9 0 0 1 5.8 0V7"/><path d="M8 9.5v1.4"/></svg>',unlock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.3a2.9 2.9 0 0 1 5.1-1.9"/><path d="M8 9.5v1.4"/></svg>',close:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.2 4.2 11.8 11.8"/><path d="M11.8 4.2 4.2 11.8"/></svg>',edit:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10.7 3.3 12.7 5.3 6.3 11.7 3.7 12.3 4.3 9.7 10.7 3.3z"/></svg>',history:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3.2 7.8a4.8 4.8 0 1 0 1.4-3.4"/><path d="M3.2 3.1v3.2h3.2"/><path d="M8 5.4v3l2.1 1.2"/></svg>',restart:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M12.7 6.5A4.8 4.8 0 1 0 13 9"/><path d="M12.7 3.3v3.2H9.5"/></svg>',feishu:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 5.2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3.3a2 2 0 0 1-2 2H7.1L4.3 13v-2.5H5"/><path d="M9.1 3.2h3.7v3.7"/><path d="M12.8 3.2 8.5 7.5"/></svg>',copy:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="5.5" y="5.5" width="7.5" height="7.5" rx="1.4"/><path d="M10.5 5.5V4.1a1.4 1.4 0 0 0-1.4-1.4H4.1a1.4 1.4 0 0 0-1.4 1.4v5a1.4 1.4 0 0 0 1.4 1.4h1.4"/></svg>'};function vn(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function Wn(e,t){let s=window.open("about:blank","_blank");s&&(s.opener=null),t&&(t.disabled=!0);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/write-link`),r=await a.json().catch(()=>({}));if(!a.ok||r?.ok===!1||!r?.url){s?.close(),a.status!==401&&alert(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`);return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),alert(`${o("sessions.writeLinkFail")}: ${a}`)}finally{t&&(t.disabled=!1)}}async function ns(e,t){t&&(t.disabled=!0);try{let s=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/spawn-command`),a=await s.json().catch(()=>({}));if(!s.ok||a?.ok===!1||!a?.command){s.status!==401&&alert(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`);return}if(await bn(a.command,o("sessions.copyCommand"))&&t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch(s){alert(`${o("sessions.copyCommandFail")}: ${s}`)}finally{t&&(t.disabled=!1)}}function Xn(e){let t=String(e?.senderType??"unknown"),s=t==="app"||t==="bot"?"bot":t,a=String(e?.senderId??"").trim(),r=String(e?.senderName??"").trim();return`${s}:${a||r||"unknown"}`}function ts(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"||e.status==="stalled"?"needs-you":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":to(e)?"todo":"idle"}function to(e){let t=e?.openTodos;return!!t&&typeof t.remaining=="number"&&t.remaining>0}function ss(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=Pe.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${an(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
6
- `)}function Sn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo&&!Bt(e.cliId)}async function os(){try{let e=await fetch("/api/groups");if(!e.ok)return[];let t=await e.json();return(Array.isArray(t?.bots)?t.bots:[]).filter(a=>a&&typeof a.larkAppId=="string").map(a=>({larkAppId:a.larkAppId,botName:typeof a.botName=="string"&&a.botName?a.botName:a.larkAppId}))}catch{return[]}}var ln=new Dt({html:!1,linkify:!0,breaks:!0});ln.validateLink=e=>/^(https?:|mailto:)/i.test(e.trim());var as=ln.renderer.rules.link_open;ln.renderer.rules.link_open=(e,t,s,a,r)=>(e[t].attrSet("target","_blank"),e[t].attrSet("rel","noopener noreferrer nofollow"),as?as(e,t,s,a,r):r.renderToken(e,t,s));ln.renderer.rules.image=(e,t)=>{let s=e[t],a=s.children?.reduce((l,g)=>l+(g.content??""),"")??"",r=je(a.trim()||"image"),m=s.attrGet("src")??"";return/^(https?:|mailto:)/i.test(m.trim())?`<span class="session-card-exchange-img">\u{1F5BC} <a href="${je(m)}" target="_blank" rel="noopener noreferrer nofollow">${r}</a></span>`:`<span class="session-card-exchange-img">\u{1F5BC} ${r}</span>`};function Vn(e){let t=String(e??"");if(!t.trim())return"";try{return ln.render(t).trim()||`<p>${je(t)}</p>`}catch{return`<p>${je(t)}</p>`}}function qn(e,t){let s=Math.max(0,Math.min(t,e.length)),r=e.slice(0,s).match(/(?:^|\s)@([^\s@]*)$/u);if(!r)return null;let m=r[1]??"";return{start:s-m.length-1,end:s,query:m}}function is(e,t,s){let a=`@${s} `,r=e[t.end]===" "?t.end+1:t.end;return{text:e.slice(0,t.start)+a+e.slice(r),caret:t.start+a.length}}function rs(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function ls(e,t,s,a){if(a.length===0)return{text:e,caret:Math.max(0,Math.min(t,e.length))};let r=Math.max(0,Math.min(t,e.length)),m=Math.max(r,Math.min(s,e.length)),p=e.slice(0,r),l=e.slice(m),g=p&&!/\s$/u.test(p)?" ":"",C=l&&!/^\s/u.test(l)?" ":"",w=`${g}${a.join(" ")}${C}`;return{text:p+w+l,caret:p.length+w.length}}function so(e,t){let s=e.indexOf(t);if(s<0)return e;let a=e.slice(0,s),r=e.slice(s+t.length);return/\s$/u.test(a)&&/^\s/u.test(r)&&(r=r.slice(1)),a+r}function cs(e,t,s,a){let r=so(e,t),m=s.map((p,l)=>a(l));return s.forEach((p,l)=>{let g=r.indexOf(p);g<0||p===m[l]||(r=r.slice(0,g)+m[l]+r.slice(g+p.length))}),{text:r,markers:m}}var L=Fe(pt(),1);var ds=["backlog","todo","in_progress","in_review","done"];function us(e){return typeof e=="string"&&ds.includes(e)?e:null}function ms(e){if(e.status==="closed")return"done";let t=us(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"||e.status==="stalled"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var oo=1e15;function Je(e){if(typeof e.kanbanPosition=="number"&&Number.isFinite(e.kanbanPosition))return e.kanbanPosition;let t=typeof e.lastMessageAt=="number"&&Number.isFinite(e.lastMessageAt)?e.lastMessageAt:0;return oo-t}function Yn(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var T=Fe(hn(),1),gs=[{id:"backlog",labelKey:"sessions.kanban.backlog"},{id:"todo",labelKey:"sessions.kanban.todo"},{id:"in_progress",labelKey:"sessions.kanban.inProgress"},{id:"in_review",labelKey:"sessions.kanban.inReview"},{id:"done",labelKey:"sessions.kanban.done"}],Zn=50;function ps(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function ao(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function io(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):e.status==="stalled"?o("sessions.board.signalStalled"):""}function ro(e){let t=(s="")=>`<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="5.4" fill="none" stroke="currentColor" stroke-width="1.6"${s}/>`;switch(e){case"backlog":return`${t(' stroke-dasharray="1.6 2.1"')}</svg>`;case"in_progress":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 0 1 7,10.4 Z" fill="currentColor"/></svg>`;case"in_review":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 1 1 3.6,7 Z" fill="currentColor"/></svg>`;case"done":return'<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="6.2" fill="currentColor"/><path d="M4.4 7.2 6.2 9 9.7 5.4" fill="none" stroke="var(--surface)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';default:return`${t()}</svg>`}}function Ze(e){return{__html:e}}function In(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function lo(e){return be(e.title)||e.sessionId}function ks(e){let t=[],s=new Map;for(let m of e){let p=String(m.chatId??m.sessionId),l=s.get(p);l||(l={chatId:p,rows:[]},s.set(p,l),t.push(l)),l.rows.push(m)}let a=[];return{clusters:t.map(m=>(a.push(...m.rows),m.rows.length<2?{type:"card",row:m.rows[0]}:{type:"cluster",chatId:m.chatId,rows:m.rows})),flat:a}}function fs(e){let t=new Map(gs.map(a=>[a.id,[]]));for(let a of e)t.get(ms(a)).push(a);return{columns:gs.map(a=>{let r=(t.get(a.id)??[]).sort((g,C)=>Je(g)-Je(C)),m=0;a.id==="done"&&r.length>Zn&&(m=r.length-Zn,r=r.slice(0,Zn));let{clusters:p,flat:l}=ks(r);return t.set(a.id,l),{id:a.id,labelKey:a.labelKey,rows:r,clusters:p,hiddenCount:m}}),groups:t}}function co(e){let t=new Map;for(let s of e){if(s.status==="closed")continue;let a=String(s.larkAppId||s.botName||"unknown"),r=t.get(a);r||(r={name:ge(s),larkAppId:s.larkAppId,rows:[]},t.set(a,r)),r.rows.push(s)}return[...t.values()].sort((s,a)=>s.name.localeCompare(a.name)).map(s=>{let a=s.rows.sort((m,p)=>Number(p.lastMessageAt??0)-Number(m.lastMessageAt??0)),{clusters:r}=ks(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function Qn(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function uo(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!In(r));return{mode:"bot",columns:co(a),groups:new Map,rowById:Qn(a),team:null,scope:null}}if(e.groupBy==="team"){if(!e.teamsLoaded)return{mode:"loading",groups:new Map,rowById:new Map,team:null,scope:null};let a=e.teams.find(v=>v.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),m=a?e.rows.filter(v=>r.has(String(v.chatId))):[],p=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},l=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],g=[...m,...l].map(v=>{let O=p[String(v.sessionId)];return O?{...v,kanbanColumn:O.column,kanbanPosition:O.position}:v}),{columns:C,groups:w}=fs(g);return{mode:"flow",columns:C,groups:w,rowById:Qn(g),team:a,scope:{chats:r.size,sessions:g.length}}}let{columns:t,groups:s}=fs(e.rows);return{mode:"flow",columns:t,groups:s,rowById:Qn(e.rows),team:null,scope:null}}function mo(e){let t=new Map;return e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col;a&&s.scrollTop&&t.set(a,s.scrollTop)}),t}function go(e,t){t?.size&&e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col,r=a?t.get(a):void 0;r&&(s.scrollTop=r)})}function bs(e,t){for(let s of e.querySelectorAll(".kanban-card:not(.dragging)")){if(s.closest(".kanban-cluster.dragging"))continue;let a=s.getBoundingClientRect();if(t<a.top+a.height/2)return s}return null}function Ye(e){return(0,T.jsx)("button",{type:"button",className:`card-act kanban-card-act${e.className?` ${e.className}`:""}`,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,onClick:t=>{t.stopPropagation(),e.onClick(t.currentTarget)},dangerouslySetInnerHTML:Ze(e.icon)})}function po(e){let t=be(e.row.title)||"",[s,a]=(0,L.useState)(t),r=(0,L.useRef)(null),m=(0,L.useRef)(!1);(0,L.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let p=(0,L.useCallback)(l=>{if(m.current)return;m.current=!0;let g=s.trim();l&&g&&g!==t&&e.onCommit(e.row,g),e.onCancel()},[t,e,s]);return(0,T.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:l=>a(l.currentTarget.value),onClick:l=>l.stopPropagation(),onBlur:()=>p(!0),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"?(l.preventDefault(),p(!0)):l.key==="Escape"&&(l.preventDefault(),p(!1))}})}function hs(e){let{callbacks:t,row:s}=e,a=lo(s),r=ge(s),m=$e(s),p=ao(s.workingDir),l=io(s),g=[m,p!=="-"?p:null].filter(Boolean).join(" \xB7 "),C=String(s.status??"unknown"),w=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",v=e.editingId===s.sessionId,O=t.selectedSessionIds.has(String(s.sessionId)),P=["kanban-card",O?"selected":"",w?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),E=w?null:(0,T.jsxs)("span",{className:"kanban-card-actions-rail",children:[(0,T.jsx)(Ye,{action:"history",icon:t.icons.history,label:o("sessions.history.title"),onClick:()=>t.onHistory(s)}),s.webPort&&t.onOpenTerminal?(0,T.jsx)(Ye,{action:"terminal",icon:t.icons.terminal,label:o("sessions.openReadonlyTerminal"),onClick:()=>t.onOpenTerminal?.(s)}):null,s.webPort&&t.onOpenWritableTerminal?(0,T.jsx)(Ye,{action:"write-link",icon:t.icons.key,label:o("sessions.openWritableTerminal"),onClick:M=>t.onOpenWritableTerminal?.(s,M)}):null,s.feishuChatLink?(0,T.jsx)("a",{className:"card-act kanban-card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),onClick:M=>M.stopPropagation(),dangerouslySetInnerHTML:Ze(t.icons.feishu)}):null,(0,T.jsx)(Ye,{action:"lock",className:s.locked?"locked":"",icon:s.locked?t.icons.unlock:t.icons.lock,label:t.lockActionLabel(s),onClick:M=>t.onToggleLock(s,M)}),(0,T.jsx)(Ye,{action:"details",icon:t.icons.details,label:o("sessions.details"),onClick:()=>t.onDetails(s)}),t.canRestartSession(s)?(0,T.jsx)(Ye,{action:"restart",icon:t.icons.restart,label:o("sessions.restart"),onClick:M=>t.onRestart(s,M)}):null]});return(0,T.jsxs)("article",{className:P,"data-id":s.sessionId,tabIndex:0,role:"button","aria-pressed":O,draggable:!0,onClick:M=>e.onCardClick(s,M),onKeyDown:M=>e.onCardKeyDown(s,M),onDragStart:M=>e.onDragStartCard(s,M),children:[(0,T.jsxs)("div",{className:"kanban-card-top",children:[(0,T.jsx)("span",{className:`badge cli-${ps(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,T.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,T.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,w?(0,T.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:w}),children:w}):null,E]}),(0,T.jsx)("div",{className:"kanban-card-title-row",children:v?(0,T.jsx)(po,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,T.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:M=>{M.stopPropagation(),e.cancelOpen(),w||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),g||l?(0,T.jsxs)("div",{className:"kanban-card-meta-row",children:[g?(0,T.jsx)("p",{className:"kanban-card-desc",title:g,children:g}):(0,T.jsx)("span",{className:"kanban-card-desc kanban-card-desc-empty","aria-hidden":"true"}),l?(0,T.jsx)("span",{className:"session-signal",title:l,children:l}):null]}):null,(0,T.jsxs)("div",{className:"kanban-card-foot",children:[(0,T.jsx)("span",{className:"kanban-card-owner",dangerouslySetInnerHTML:Ze(`${Oe({name:r,larkAppId:s.larkAppId,size:"sm"})}<span>${je(r)}</span>`)}),(0,T.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Be(s.lastMessageAt)}),(0,T.jsx)("span",{className:"kanban-card-dot","data-status":ps(C),title:t.sessionStatusText(C)})]})]})]})}function ys(e){let t=e.item;if(t.type==="card")return(0,T.jsx)(hs,{...e.cardProps,row:t.row});let s=$e(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,T.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,T.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,T.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:Ze(pn({chatId:t.chatId,name:s,size:"sm"}))}),(0,T.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,T.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,T.jsx)("button",{type:"button",className:"kanban-cluster-toggle","aria-expanded":e.expanded,title:o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),"aria-label":o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),onClick:r=>{r.stopPropagation(),e.onToggleExpanded()},children:(0,T.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,T.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,T.jsx)(hs,{...e.cardProps,row:r},r.sessionId)):null]})}function ws(e){let[t,s]=(0,L.useState)(e),[a,r]=(0,L.useState)(null),[m,p]=(0,L.useState)(null),[l,g]=(0,L.useState)(null),[C,w]=(0,L.useState)(null),[v,O]=(0,L.useState)(()=>new Set),P=(0,L.useRef)(null),E=(0,L.useRef)(null),M=(0,L.useRef)(null),A=(0,L.useRef)(new Map),_=(0,L.useRef)(new Map),U=(0,L.useRef)(m),j=!!a||!!m,x=(0,L.useCallback)(()=>{M.current!==null&&(clearTimeout(M.current),M.current=null)},[]),$=(0,L.useCallback)(N=>{E.current=mo(e.host),s(N)},[e.host]);(0,L.useEffect)(()=>{if(j){P.current=e;return}$(e)},[$,j,e]),(0,L.useEffect)(()=>{if(j||!P.current)return;let N=P.current;P.current=null,$(N)},[$,j]),(0,L.useLayoutEffect)(()=>{go(e.host,E.current),E.current=null},[t,e.host]),(0,L.useEffect)(()=>{U.current=m},[m]),(0,L.useEffect)(()=>()=>x(),[x]);let D=(0,L.useMemo)(()=>uo(t),[t]);(0,L.useLayoutEffect)(()=>{A.current=D.groups,_.current=D.rowById},[D]),(0,L.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,L.useEffect)(()=>{t.groupBy==="team"&&D.mode==="flow"&&D.team&&t.onNeedTeamBoard(D.team)},[t,D]),(0,L.useEffect)(()=>{t.onTeamScope(D.mode==="flow"?D.scope:null)},[t,D]);let Y=(0,L.useCallback)(()=>{p(null),g(null),w(null)},[]),H=(0,L.useCallback)(N=>{O(S=>{let G=new Set(S);return G.has(N)?G.delete(N):G.add(N),G})},[]),de=(0,L.useCallback)(N=>{x(),!In(N)&&r(N.sessionId)},[x]),Te=(0,L.useCallback)((N,S)=>{In(N)||S.target.closest("a, button, input, label")||(x(),M.current=setTimeout(()=>{M.current=null,t.onToggleSelect(N)},220))},[x,t]),ke=(0,L.useCallback)((N,S)=>{S.key!=="Enter"&&S.key!==" "||S.target!==S.currentTarget||In(N)||(S.preventDefault(),t.onToggleSelect(N))},[t]),we=(0,L.useCallback)((N,S)=>{t.groupBy!=="bot"&&(x(),p({kind:"card",id:String(N.sessionId)}),S.dataTransfer&&(S.dataTransfer.effectAllowed="move",S.dataTransfer.setData("text/plain",String(N.sessionId))))},[x,t.groupBy]),Me=(0,L.useCallback)((N,S,G)=>{t.groupBy!=="bot"&&(x(),p({kind:"cluster",chatId:N,col:S}),G.dataTransfer&&(G.dataTransfer.effectAllowed="move",G.dataTransfer.setData("text/plain",`cluster:${N}`)))},[x,t.groupBy]),W=(0,L.useCallback)((N,S)=>{!U.current||t.groupBy==="bot"||(S.preventDefault(),S.dataTransfer&&(S.dataTransfer.dropEffect="move"),g(N),w(bs(S.currentTarget,S.clientY)?.dataset.id??null))},[t.groupBy]),We=(0,L.useCallback)((N,S)=>{let G=U.current;if(!G||t.groupBy==="bot")return;S.preventDefault();let pe=bs(S.currentTarget,S.clientY);Y();let te=A.current,se=N;if(G.kind==="cluster"){let Q=(te.get(G.col)??[]).filter(V=>String(V.chatId)===G.chatId).filter(V=>!(V.status==="closed"&&se!=="done"));if(!Q.length)return;let Ne=new Set(Q.map(V=>V.sessionId)),ie=(te.get(se)??[]).filter(V=>!Ne.has(V.sessionId)),oe=pe?ie.findIndex(V=>V.sessionId===pe.dataset.id):ie.length;oe<0&&(oe=ie.length);let Ie=oe>0?ie[oe-1]:null,He=oe<ie.length?ie[oe]:null,Qe=Yn(Ie?Je(Ie):null,He?Je(He):null);t.onMoveRows(Q.map((V,xe)=>({row:V,column:se,position:Qe+xe*.001})));return}let X=_.current.get(G.id);if(!X||X.status==="closed"&&se!=="done")return;let Z=(te.get(se)??[]).filter(Q=>Q.sessionId!==G.id),ee=pe?Z.findIndex(Q=>Q.sessionId===pe.dataset.id):Z.length;ee<0&&(ee=Z.length);let ve=ee>0?Z[ee-1]:null,fe=ee<Z.length?Z[ee]:null,Se=Yn(ve?Je(ve):null,fe?Je(fe):null);t.onMoveRows([{row:X,column:se,position:Se}])},[Y,t]),Ce={dragId:m?.kind==="card"?m.id:null,dropBeforeId:C,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:x,onBeginEdit:de,onCardClick:Te,onCardKeyDown:ke,onDragStartCard:we,onEditDone:()=>r(null)};return D.mode==="loading"?(0,T.jsx)(ze,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):D.mode==="bot"?D.columns.length?(0,T.jsx)(T.Fragment,{children:D.columns.map(N=>(0,T.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":N.key,children:[(0,T.jsxs)("header",{children:[(0,T.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:Ze(Oe({name:N.name,larkAppId:N.larkAppId,size:"sm"}))}),(0,T.jsx)("h2",{children:N.name}),(0,T.jsx)("span",{className:"kanban-col-count",children:N.rows.length})]}),(0,T.jsx)("div",{className:"kanban-col-list",onDragOver:S=>W(N.key,S),onDragEnd:Y,children:N.clusters.map(S=>(0,T.jsx)(ys,{item:S,dragCluster:m?.kind==="cluster"?m:null,cardProps:Ce,expanded:S.type==="cluster"&&v.has(`bot:${N.key}:${S.chatId}`),onToggleExpanded:()=>{S.type==="cluster"&&H(`bot:${N.key}:${S.chatId}`)},onDragStartCluster:Me},S.type==="card"?S.row.sessionId:S.chatId))})]},N.key))}):(0,T.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,T.jsx)(T.Fragment,{children:D.columns.map(N=>(0,T.jsxs)("section",{className:`kanban-column kanban-${N.id}${l===N.id?" drag-over":""}`,"data-col":N.id,onDragOver:S=>W(N.id,S),onDrop:S=>We(N.id,S),onDragEnd:Y,children:[(0,T.jsxs)("header",{children:[(0,T.jsx)("span",{className:"kanban-col-icon",dangerouslySetInnerHTML:Ze(ro(N.id))}),(0,T.jsx)("h2",{children:o(N.labelKey)}),(0,T.jsx)("span",{className:"kanban-col-count",children:N.rows.length+N.hiddenCount})]}),(0,T.jsxs)("div",{className:"kanban-col-list",children:[N.rows.length?N.clusters.map(S=>(0,T.jsx)(ys,{item:S,columnId:N.id,dragCluster:m?.kind==="cluster"?m:null,cardProps:Ce,expanded:S.type==="cluster"&&v.has(`${N.id}:${S.chatId}`),onToggleExpanded:()=>{S.type==="cluster"&&H(`${N.id}:${S.chatId}`)},onDragStartCluster:Me},S.type==="card"?S.row.sessionId:S.chatId)):(0,T.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),N.hiddenCount?(0,T.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:N.hiddenCount})}):null]})]},N.id))})}var n=Fe(hn(),1),fo=new Set(["image/png","image/jpeg","image/gif","image/webp"]),Cs=8,bo=10*1024*1024,ho=25*1024*1024;function yo(e){return new Promise((t,s)=>{let a=new FileReader;a.onload=()=>typeof a.result=="string"?t(a.result):s(new Error("bad_image_data")),a.onerror=()=>s(a.error??new Error("image_read_failed")),a.readAsDataURL(e)})}function ko(e){return e===168?"7d":`${e}H`}var wo=_n.map(e=>({value:String(e),label:ko(e)}));function ce(e){return{__html:e}}function ae(){return typeof window>"u"?void 0:window.localStorage}function Tn(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${kn(t)}`,children:an(t)})}function nt(e){let t=e.row?.openTodos,[s,a]=(0,c.useState)(null),[r,m]=(0,c.useState)(!1),[p,l]=(0,c.useState)(!1),g=(0,c.useRef)(null),C=(0,c.useRef)(null);if((0,c.useEffect)(()=>{if(!r)return;let x=D=>{let Y=D.target;C.current?.contains(Y)||g.current?.contains(Y)||(m(!1),a(null))},$=D=>{D.key==="Escape"&&(m(!1),a(null))};return document.addEventListener("mousedown",x,!0),document.addEventListener("keydown",$,!0),()=>{document.removeEventListener("mousedown",x,!0),document.removeEventListener("keydown",$,!0)}},[r]),!t||typeof t.remaining!="number"||t.remaining<=0)return null;let w=Number(t.total??0),v=Number(t.done??0),O=o("sessions.board.todoBadge",{done:v,total:w}),P=o("sessions.board.todoBadgeTitle",{remaining:t.remaining,total:w,done:v}),E=Array.isArray(t.items)?t.items:[],M=x=>x==="completed"?"\u2713":x==="in_progress"?"\u25B6":"\u25CB",A=x=>{let $=x.getBoundingClientRect();a({x:$.left,y:$.bottom+6})},_=()=>{let x=D=>D==="completed"?"[x]":D==="in_progress"?"[>]":"[ ]",$=E.map((D,Y)=>`${x(D.status)} ${D.text||`#${Y+1}`}`);return`${P}
7
- ${$.join(`
8
- `)}`},U=async()=>{let x=_();try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(x);else{let $=document.createElement("textarea");$.value=x,$.style.position="fixed",$.style.opacity="0",document.body.appendChild($),$.select(),document.execCommand("copy"),document.body.removeChild($)}l(!0),window.setTimeout(()=>l(!1),1500)}catch{}},j=r||s;return(0,n.jsxs)("span",{ref:g,className:`session-todo-badge${t.hasInProgress?" active":""}${r?" pinned":""}`,tabIndex:0,onMouseEnter:x=>{r||A(x.currentTarget)},onFocus:x=>{r||A(x.currentTarget)},onMouseLeave:()=>{r||a(null)},onBlur:()=>{r||a(null)},onClick:x=>{x.stopPropagation(),r?(m(!1),a(null)):(A(x.currentTarget),m(!0))},children:[t.hasInProgress?(0,n.jsx)("span",{className:"session-todo-dot","aria-hidden":"true"}):null,O,j&&E.length?(0,cn.createPortal)((0,n.jsxs)("div",{ref:C,className:`session-todo-pop${r?" pinned":""}`,role:r?"dialog":"tooltip",style:{left:`${s?.x??0}px`,top:`${s?.y??0}px`},onMouseDown:x=>x.stopPropagation(),children:[(0,n.jsxs)("div",{className:"session-todo-pop-head",children:[(0,n.jsx)("span",{className:"session-todo-pop-title",children:P}),r?(0,n.jsx)("button",{type:"button",className:"session-todo-pop-copy",onClick:x=>{x.stopPropagation(),U()},children:p?o("sessions.board.todoCopied"):o("sessions.board.todoCopy")}):(0,n.jsx)("span",{className:"session-todo-pop-hint",children:o("sessions.board.todoClickHint")})]}),(0,n.jsx)("div",{className:"session-todo-pop-list",children:E.map((x,$)=>(0,n.jsxs)("div",{className:`session-todo-pop-item st-${kn(x.status)}`,children:[(0,n.jsx)("span",{className:"session-todo-pop-glyph","aria-hidden":"true",children:M(x.status)}),(0,n.jsx)("span",{className:"session-todo-pop-text",children:x.text||`#${$+1}`})]},$))})]}),document.body):null]})}function tt(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function Ee(e){let t=e.className??`card-act${e.kind?` ${e.kind}`:""}`;return(0,n.jsx)("button",{type:"button",id:e.id,className:t,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,disabled:e.disabled,onClick:s=>{s.stopPropagation(),e.onClick(s.currentTarget)},dangerouslySetInnerHTML:ce(e.icon)})}function Is(e){if(!e.url||!Ge())return null;let t=Cn();return(0,n.jsxs)("span",{className:"term-pill",children:[(0,n.jsx)("a",{className:"term-btn term-open",href:e.url,target:"_blank",rel:"noopener","data-action":"terminal","data-tip":o("sessions.openReadonlyTerminal"),"aria-label":o("sessions.openReadonlyTerminal"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:ce(J.terminal)}),t?(0,n.jsx)("button",{type:"button",className:"term-btn term-write","data-action":"write-link","data-tip":o("sessions.openWritableTerminal"),"aria-label":o("sessions.openWritableTerminal"),onClick:s=>{s.stopPropagation(),Wn(e.row,s.currentTarget)},dangerouslySetInnerHTML:ce(J.key)}):null]})}function Ts(e){let t=e.row;return t.scope!=="chat"||!t.feishuChatLink?null:(0,n.jsx)("a",{className:e.className??"card-act",href:t.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.openChat"),"aria-label":o("sessions.openChat"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:ce(J.feishu)})}function Co(e){let t=e.sortKey===e.sort;return(0,n.jsx)("th",{"data-sort":e.sort,"data-label":e.label,className:t?"sorted":void 0,"aria-sort":t?e.sortDir==="asc"?"ascending":"descending":"none",onClick:()=>e.onSort(e.sort),children:t?`${e.label} ${e.sortDir==="asc"?"\u25B2":"\u25BC"}`:e.label})}function vs(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?yn(e.tokenUsage?.in)??-1:t==="tokenOut"?yn(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?De(e).toLowerCase():t==="cliId"?dn(e).toLowerCase():String(e[t]??"").toLowerCase()}function dn(e){return String(e.runtimeDisplayName??e.cliId??"unknown")}function Ss(e,t,s,a){let r=vs(e,s),m=vs(t,s),p=0;return typeof r=="number"&&typeof m=="number"?p=r-m:typeof r=="boolean"&&typeof m=="boolean"?p=Number(r)-Number(m):p=String(r).localeCompare(String(m)),p===0&&(p=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?p:-p}function vo(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):e.status==="stalled"?o("sessions.board.signalStalled"):""}function So(e,t,s){let a=s==="needs-you"?fn(e):Number(e.lastMessageAt??0),r=s==="needs-you"?fn(t):Number(t.lastMessageAt??0);return a!==r?s==="needs-you"?a-r:r-a:String(e.title??e.sessionId).localeCompare(String(t.title??t.sessionId))}function Io(e){if(e==null||e==="")return"";let t=Number(e),s=Number.isFinite(t)&&t>0?new Date(t):new Date(String(e));return Number.isNaN(s.getTime())?"":s.toLocaleString()}function To(e){return e===void 0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m${Math.round(e%6e4/1e3)}s`}function st(e,t){(0,c.useEffect)(()=>{let s=e.current;if(s)if(t){if(!s.open)try{s.showModal()}catch{}}else s.open&&s.close()},[t,e])}function et(e){let[t,s]=(0,c.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{bn(e.value,o("sessions.copy")).then(a=>{a&&(s(!0),window.setTimeout(()=>s(!1),800))})},children:t?o("sessions.copied"):o("sessions.copy")})}function No(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.locateSession(e.row);r(!1),m&&s(30)},children:t>0?o("sessions.cooldown",{seconds:t}):a?o("sessions.locating"):o("sessions.locate")})}function xo(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)(Ee,{action:"locate",icon:J.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.onLocate(e.row);r(!1),m&&s(30)}})}function Ro(e){let t=ye.filter(l=>e.selected.has(l)).length,s=(0,c.useRef)(null),[a,r]=(0,c.useState)("");(0,c.useEffect)(()=>{let l=()=>{s.current?.open&&(s.current.open=!1)},g=w=>{let v=s.current;v?.open&&!v.contains(w.target)&&l()},C=w=>{w.key==="Escape"&&l()};return document.addEventListener("pointerdown",g,!0),document.addEventListener("keydown",C),()=>{document.removeEventListener("pointerdown",g,!0),document.removeEventListener("keydown",C)}},[]);let m=a.trim().toLowerCase(),p=m?ye.filter(l=>l.toLowerCase().includes(m)):ye;return(0,n.jsxs)("details",{className:"filter-cli",ref:s,children:[(0,n.jsxs)("summary",{children:[o("sessions.cli")," \xB7 ",(0,n.jsx)("b",{id:"cli-filter-count",className:t===ye.length?void 0:"cli-filter-active",children:t===ye.length?o("common.all"):`${t}/${ye.length}`})]}),(0,n.jsxs)("div",{className:"filter-cli-pop",role:"group","aria-label":o("sessions.cli"),children:[(0,n.jsxs)("div",{className:"filter-cli-head",children:[(0,n.jsx)("input",{type:"search",className:"filter-cli-search",placeholder:o("sessions.cliSearch"),value:a,autoFocus:!0,onChange:l=>r(l.currentTarget.value),onClick:l=>l.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ye)e.selected.has(l)||e.onToggle(l,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ye)e.selected.has(l)&&e.onToggle(l,!1)},children:o("sessions.cliClear")})]})]}),(0,n.jsx)("div",{className:"filter-cli-options",children:p.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):p.map(l=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:l,checked:e.selected.has(l),onChange:g=>e.onToggle(l,g.currentTarget.checked)}),(0,n.jsx)("span",{children:l})]},l))})]})]})}function Eo(e){let t=[{value:"",label:o("sessions.anyStatus")},...qt.map(l=>({value:l,label:an(l)}))],s=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],a=t.find(l=>l.value===e.filters.status)?.label??o("sessions.anyStatus"),r=s.find(l=>l.value===e.filters.adopt)?.label??o("sessions.adoptAny"),m=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],p=m.find(l=>l.value===e.filters.chat)?.label??o("sessions.chatAny");return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:l=>{let g=l.currentTarget.value;e.setFilters(C=>({...C,q:g}))}}),(0,n.jsx)(sn,{label:a,value:e.filters.status,options:t,onChange:l=>e.setFilters(g=>({...g,status:l}))}),(0,n.jsx)(sn,{label:r,value:e.filters.adopt,options:s,onChange:l=>e.setFilters(g=>({...g,adopt:l}))}),(0,n.jsx)(sn,{ariaLabel:o("sessions.location"),className:"filter-chat-menu",label:p,value:e.filters.chat,options:m,searchable:!0,searchPlaceholder:o("sessions.chatSearch"),searchEmptyLabel:o("sessions.chatNoMatch"),onChange:l=>e.setFilters(g=>({...g,chat:l}))}),(0,n.jsx)(Ro,{selected:e.filters.cli,onToggle:(l,g)=>{e.setFilters(C=>{let w=new Set(C.cli);return g?w.add(l):w.delete(l),{...C,cli:w}})}}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,multiBotTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.multiBotTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"botTriggeredTopics",checked:e.filters.botTriggeredTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,botTriggeredTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.botTriggeredTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"showUnknownChats",checked:e.filters.showUnknownChats,onChange:l=>{let g=l.currentTarget.checked;Ct(ae(),g),e.setFilters(C=>({...C,showUnknownChats:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.showUnknownChats")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"active",checked:e.filters.active,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,active:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.activeOnly")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsx)(Ao,{...e.idleCleanup})]})}function Mo(e){let t=!!e.closeProgress||!!e.lockProgress,s=e.lockProgress?.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.lockSelected"),a=e.lockProgress&&!e.lockProgress.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.unlockSelected"),r=Ge();return(0,n.jsxs)("div",{id:"bulk-bar",className:"bulk-bar",hidden:e.selectedCount===0,children:[(0,n.jsx)("span",{id:"bulk-count",children:o("sessions.selectedCount",{count:e.selectedCount})}),r?(0,n.jsx)("button",{type:"button",id:"bulk-monitor-room",disabled:t||e.selectedCount===0,onClick:e.onAddToMonitorRoom,children:e.monitorRoomText??o("sessions.addToMonitorRoom")}):null,(0,n.jsx)("button",{type:"button",id:"bulk-lock",disabled:t||e.lockDisabled,onClick:()=>e.onLock(!0),children:s}),(0,n.jsx)("button",{type:"button",id:"bulk-unlock",disabled:t||e.unlockDisabled,onClick:()=>e.onLock(!1),children:a}),(0,n.jsx)("button",{type:"button",id:"bulk-close",className:"contrast",disabled:t,onClick:e.onClose,children:e.closeProgress?`${e.closeProgress.done}/${e.closeProgress.total}`:o("sessions.closeSelected")}),(0,n.jsx)("button",{type:"button",id:"bulk-clear",disabled:t,onClick:e.onClear,children:o("sessions.clearSelection")})]})}function Ao(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(e.hours),[m,p]=(0,c.useState)(),l=(0,c.useRef)(null),g=(0,c.useRef)(null),C=(0,c.useRef)(null),w=e.countForHours(a);return(0,c.useEffect)(()=>{t?r(e.hours):p(void 0)},[t,e.hours]),(0,c.useLayoutEffect)(()=>{if(!t)return;let v=()=>{let P=g.current,E=C.current;if(!P||!E)return;let M=12,A=window.innerWidth,_=window.innerHeight,U=Math.max(0,Math.min(292,A-M*2)),j=P.getBoundingClientRect(),x=E.offsetHeight,$=Math.max(M,A-U-M),D=j.left+j.width/2-U/2,Y=Math.min(Math.max(D,M),$),H=j.bottom+8,de=j.top-x-8,Te=H+x<=_-M||de<M?Math.min(Math.max(H,M),Math.max(M,_-x-M)):Math.max(M,de);p({left:Y,top:Te,width:U})},O=window.requestAnimationFrame(v);return window.addEventListener("resize",v),window.addEventListener("scroll",v,!0),()=>{window.cancelAnimationFrame(O),window.removeEventListener("resize",v),window.removeEventListener("scroll",v,!0)}},[t,e.busy,e.status]),(0,c.useEffect)(()=>{if(!t)return;let v=P=>{let E=P.target;E instanceof Node&&l.current?.contains(E)||E instanceof Node&&C.current?.contains(E)||s(!1)},O=P=>{P.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",v,!0),document.addEventListener("keydown",O),()=>{document.removeEventListener("pointerdown",v,!0),document.removeEventListener("keydown",O)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${w===0?" is-empty":""}${t?" is-open":""}`,ref:l,children:[(0,n.jsxs)("button",{ref:g,type:"button",id:"idle-cleanup-run",className:"contrast idle-cleanup-run","aria-haspopup":"dialog","aria-expanded":t,disabled:e.busy,onClick:()=>s(v=>!v),children:[(0,n.jsxs)("svg",{className:"idle-cleanup-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3.5 6.5h17"}),(0,n.jsx)("path",{d:"M9 3.5h6"}),(0,n.jsx)("path",{d:"m6.5 6.5.9 13h9.2l.9-13"}),(0,n.jsx)("path",{d:"M10 10.5v5M14 10.5v5"})]}),(0,n.jsx)("span",{children:o("sessions.idleCleanupRun")})]}),t&&typeof document<"u"?(0,cn.createPortal)((0,n.jsxs)("div",{ref:C,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:m??{visibility:"hidden"},children:[(0,n.jsxs)("div",{className:"idle-cleanup-pop-head",children:[(0,n.jsx)("span",{className:"idle-cleanup-pop-title",children:o("sessions.idleCleanupRun")}),(0,n.jsxs)("span",{id:"idle-cleanup-count",className:"idle-cleanup-count",children:[(0,n.jsx)("span",{className:"idle-cleanup-dot","aria-hidden":"true"}),o("sessions.idleCleanupCount",{count:w})]})]}),(0,n.jsxs)("div",{className:"idle-cleanup-pop-field",children:[(0,n.jsx)("span",{className:"idle-cleanup-label",children:o("sessions.idleCleanupOlderThan")}),(0,n.jsx)("div",{id:"idle-cleanup-threshold",className:"idle-cleanup-threshold-options",role:"radiogroup","aria-label":o("sessions.idleCleanupThreshold"),children:wo.map(v=>{let O=Kn(v.value),P=O===a;return(0,n.jsx)("button",{type:"button",className:P?"active":void 0,"aria-pressed":P?"true":"false",disabled:e.busy,onClick:()=>r(O),children:v.label},v.value)})})]}),e.busy&&e.status?(0,n.jsx)("span",{id:"idle-cleanup-status",className:"idle-cleanup-status","aria-live":"polite",children:e.status}):null,(0,n.jsxs)("div",{className:"idle-cleanup-pop-actions",children:[(0,n.jsx)("button",{type:"button",className:"idle-cleanup-cancel",disabled:e.busy,onClick:()=>s(!1),children:o("sessions.idleCleanupCancel")}),(0,n.jsx)("button",{type:"button",className:"idle-cleanup-confirm",disabled:e.busy||w===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function Lo(e){let t=(0,c.useRef)(null);(0,c.useLayoutEffect)(()=>{t.current&&(t.current.indeterminate=e.selectAllIndeterminate)},[e.selectAllIndeterminate]);let s=[{id:"botName",label:o("sessions.bot")},{id:"cliId",label:o("sessions.cli")},{id:"status",label:o("sessions.status")},{id:"chat",label:o("sessions.location")},{id:"tokenIn",label:o("sessions.tokenIn")},{id:"tokenOut",label:o("sessions.tokenOut")},{id:"title",label:o("sessions.titleCol")},{id:"workingDir",label:o("sessions.workingDir")},{id:"spawnedAt",label:o("sessions.created")},{id:"lastMessageAt",label:o("sessions.last")},{id:"adopt",label:o("sessions.adopt")}],a=s.filter(l=>!e.hiddenColumns.has(l.id)),r=2+a.length,m={select:o("sessions.selectSession"),botName:o("sessions.bot"),cliId:o("sessions.cli"),status:o("sessions.status"),chat:o("sessions.location"),tokenIn:o("sessions.tokenIn"),tokenOut:o("sessions.tokenOut"),title:o("sessions.titleCol"),workingDir:o("sessions.workingDir"),spawnedAt:o("sessions.created"),lastMessageAt:o("sessions.last"),adopt:o("sessions.adopt"),actions:o("sessions.actions")};function p(l,g){switch(g){case"botName":return(0,n.jsx)("td",{"data-label":m.botName,children:ge(l)});case"cliId":return(0,n.jsx)("td",{"data-label":m.cliId,children:(0,n.jsx)("span",{className:`badge cli-${kn(l.cliId)}`,title:l.runtimeId&&l.runtimeId!==l.cliId?`${l.cliId} / ${l.runtimeId}`:void 0,children:dn(l)})});case"status":return(0,n.jsxs)("td",{"data-label":m.status,children:[(0,n.jsx)(Tn,{status:l.status}),(0,n.jsx)(nt,{row:l}),(0,n.jsx)(tt,{row:l})]});case"chat":return(0,n.jsx)("td",{className:"session-location-cell","data-label":m.chat,title:Gn(l),children:De(l)});case"tokenIn":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenIn,children:Fn(l.tokenUsage?.in)});case"tokenOut":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenOut,children:Fn(l.tokenUsage?.out)});case"title":return(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":m.title,title:String(l.title??""),children:be(l.title??"").slice(0,48)});case"workingDir":return(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":m.workingDir,title:l.workingDir??"",children:String(l.workingDir??"").slice(-34)});case"spawnedAt":return(0,n.jsx)("td",{"data-label":m.spawnedAt,children:Be(l.spawnedAt)});case"lastMessageAt":return(0,n.jsx)("td",{"data-label":m.lastMessageAt,children:Be(l.lastMessageAt)});case"adopt":return(0,n.jsx)("td",{"data-label":m.adopt,children:l.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null});default:return null}}return(0,n.jsxs)("table",{id:"sessions-table",hidden:e.hidden,children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:(0,n.jsx)("input",{ref:t,type:"checkbox",id:"select-all",title:o("sessions.activeOnly"),checked:e.selectAllChecked,disabled:e.selectAllDisabled,onChange:l=>e.onSelectAll(l.currentTarget.checked)})}),a.map(l=>(0,n.jsx)(Co,{sort:l.id,label:l.label,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},l.id)),(0,n.jsx)("th",{className:"session-table-columns-th",children:(0,n.jsxs)("details",{className:"session-table-columns-menu",children:[(0,n.jsxs)("summary",{title:o("sessions.columns"),children:[(0,n.jsx)("span",{className:"session-table-columns-icon","aria-hidden":"true",children:(0,n.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M2 4h12M2 8h12M2 12h12"})})}),o("sessions.columns")]}),(0,n.jsxs)("div",{className:"session-table-columns-dropdown",role:"menu",children:[(0,n.jsxs)("div",{className:"session-table-columns-header",children:[(0,n.jsx)("span",{children:o("sessions.columnsMenu")}),(0,n.jsx)("button",{type:"button",className:"session-table-columns-reset",onClick:e.onResetColumns,children:o("sessions.columnsReset")})]}),s.map(l=>(0,n.jsxs)("label",{className:"session-table-columns-item",children:[(0,n.jsx)("input",{type:"checkbox",checked:!e.hiddenColumns.has(l.id),onChange:()=>e.onToggleColumn(l.id)}),l.label]},l.id))]})]})})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(l=>{let g=l.status==="closed",C=String(l.sessionId);return(0,n.jsxs)("tr",{"data-id":C,onClick:()=>e.onOpen(l),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":m.select,onClick:w=>w.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(C),disabled:g,onChange:w=>e.onSelect(C,w.currentTarget.checked)})}),a.map(w=>(0,n.jsx)(c.Fragment,{children:p(l,w.id)},w.id)),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":m.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},C)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:r,className:"empty",children:o("sessions.empty")})})})]})}function Po(e){let{exchange:t}=e,s=(0,c.useRef)(null),a=(0,c.useRef)(null),r=(0,c.useRef)(null),[m,p]=(0,c.useReducer)(Vt,Xt),l=m.open,[g,C]=(0,c.useState)(null),w=`session-exchange-tooltip-${(0,c.useId)().replace(/[^a-zA-Z0-9_-]/g,"-")}`,v=(0,c.useCallback)(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),O=(0,c.useCallback)(()=>{v(),p("open")},[v]),P=(0,c.useCallback)(()=>{v(),p("close"),C(null)},[v]),E=(0,c.useCallback)(()=>{v(),r.current=window.setTimeout(P,120)},[v,P]),M=(0,c.useCallback)(()=>{let A=s.current,_=a.current;if(!A||!_)return;let U=A.getBoundingClientRect(),j=_.getBoundingClientRect(),x=12,$=9,D=U.top-x-$,Y=window.innerHeight-U.bottom-x-$,H=D>=j.height||D>Y?"top":"bottom",de=U.left+U.width/2-j.width/2,Te=Math.min(Math.max(de,x),Math.max(x,window.innerWidth-j.width-x)),ke=H==="top"?U.top-j.height-$:U.bottom+$,we=Math.min(Math.max(ke,x),Math.max(x,window.innerHeight-j.height-x));C({left:Te,placement:H,top:we})},[]);return(0,c.useLayoutEffect)(()=>{if(l)return M(),window.addEventListener("resize",M),window.addEventListener("scroll",M,!0),()=>{window.removeEventListener("resize",M),window.removeEventListener("scroll",M,!0)}},[t.botFullText,t.userFullText,l,M]),(0,c.useEffect)(()=>()=>v(),[v]),(0,c.useEffect)(()=>{if(!l)return;let A=U=>{let j=U.target;j instanceof Node&&(s.current?.contains(j)||a.current?.contains(j)||P())},_=U=>{U.key==="Escape"&&P()};return document.addEventListener("pointerdown",A),document.addEventListener("keydown",_),()=>{document.removeEventListener("pointerdown",A),document.removeEventListener("keydown",_)}},[P,l]),!t.userText&&!t.botText?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"session-card-exchange-wrap",children:(0,n.jsxs)("div",{ref:s,className:"session-card-exchange",role:"button",tabIndex:0,"aria-label":o("sessions.preview.showFull"),"aria-haspopup":"dialog","aria-controls":l?w:void 0,"aria-expanded":l,onClick:A=>{A.stopPropagation(),l?P():O()},onFocus:()=>{v(),p("focus")},onBlur:E,onPointerEnter:A=>{A.pointerType!=="touch"&&O()},onPointerLeave:A=>{A.pointerType!=="touch"&&E()},onKeyDown:A=>{A.key==="Escape"?P():(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),l?P():O())},children:[t.userText?(0,n.jsxs)("div",{className:"session-card-exchange-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("p",{children:t.userText})]}):null,t.botText?(0,n.jsxs)("div",{className:"session-card-exchange-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("p",{children:t.botText})]}):null]})}),l&&typeof document<"u"?(0,cn.createPortal)((0,n.jsx)("div",{ref:a,id:w,className:"session-card-exchange-tooltip",role:"dialog","aria-label":o("sessions.preview.latestExchange"),"data-placement":g?.placement??"top",style:{left:g?.left??-1e4,top:g?.top??-1e4,visibility:g?"visible":"hidden"},onPointerEnter:v,onPointerLeave:A=>{A.pointerType!=="touch"&&E()},onFocusCapture:v,onBlur:A=>{let _=A.relatedTarget;_&&(a.current?.contains(_)||s.current?.contains(_))||E()},onKeyDown:A=>{A.key==="Escape"&&(A.stopPropagation(),v(),p("escape-refocus"),C(null),s.current?.focus())},children:(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-scroll",children:[t.userFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:ce(Vn(t.userFullText))})]}):null,t.botFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:ce(Vn(t.botFullText))})]}):null]})}),document.body):null]})}function Ns(e){let t=e.row,s=be(t.title)||t.sessionId,a=ge(t),r=$e(t),m=rn(t),p=vo(t),l=jn(t.workingDir),g=Wt(t),C=w=>{w.target.closest("a, button, input, label")||e.onToggleSelect(t)};return(0,n.jsxs)("article",{className:`session-card${e.selected?" selected":""}${t.locked?" locked":""}`,"data-id":t.sessionId,"aria-pressed":e.selected,onClick:C,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:ce(Oe({name:a,larkAppId:t.larkAppId,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-card-title",children:[(0,n.jsx)("strong",{title:String(t.title??s),children:String(s).slice(0,72)}),(0,n.jsxs)("span",{children:[a," \xB7 ",r??dn(t)]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(Tn,{status:t.status}),(0,n.jsx)(nt,{row:t}),(0,n.jsx)(tt,{row:t})]})]}),l!=="-"||t.adopt||p?(0,n.jsxs)("div",{className:"session-card-meta",children:[l!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:l}):null,t.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null,p?(0,n.jsx)("span",{className:"session-signal",title:p,children:p}):null]}):null,(0,n.jsx)(Po,{exchange:g}),(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Be(fn(t))}`:`${o("sessions.last")}: ${Be(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(Ts,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(xo,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(Ee,{action:"details",icon:J.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),Sn(t)?(0,n.jsx)(Ee,{action:"restart",icon:J.restart,label:o("sessions.restart"),onClick:w=>e.onRestart(t,w)}):null,(0,n.jsx)(Is,{row:t,url:m}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(Ee,{action:"lock",icon:t.locked?J.unlock:J.lock,label:vn(t),kind:t.locked?"locked":"",onClick:w=>e.onLock(t,!t.locked,w)}),(0,n.jsx)(Ee,{action:"close",icon:J.close,label:o("sessions.close"),kind:"danger",onClick:w=>e.onClose(t,w)})]}):null]})]})}function Bo(e){(0,c.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(Un.map(a=>[a.id,[]]));for(let a of e.rows){let r=ts(a);r&&t.get(r).push(a)}let s=e.order.map(a=>Un.find(r=>r.id===a)).filter(a=>!!a);return(0,n.jsx)("div",{id:"sessions-board",className:`sessions-board${e.animated||e.hidden?"":" board-enter"}`,hidden:e.hidden,children:s.map((a,r)=>{let m=(t.get(a.id)??[]).sort((p,l)=>So(p,l,a.id));return(0,n.jsxs)("section",{className:`session-board-column session-board-${a.id}${e.dragColId===a.id?" dragging":""}${e.dragOverCol===a.id?" drag-over":""}`,"data-col":a.id,onDragOver:p=>{e.dragColId&&(p.preventDefault(),p.dataTransfer&&(p.dataTransfer.dropEffect="move"),e.dragColId!==a.id&&e.onDragOverCol(a.id))},onDrop:p=>{e.dragColId&&(p.preventDefault(),e.onMoveColumnTo(e.dragColId,a.id),e.onDragCol(null),e.onDragOverCol(null))},children:[(0,n.jsxs)("header",{draggable:!0,title:o("sessions.board.dragHint"),onDragStart:p=>{e.onDragCol(a.id),p.dataTransfer&&(p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",a.id))},onDragEnd:()=>{e.onDragCol(null),e.onDragOverCol(null)},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:o(a.labelKey)}),(0,n.jsx)("p",{children:o(a.hintKey)})]}),(0,n.jsxs)("span",{className:"session-board-head-right",children:[(0,n.jsxs)("span",{className:"session-board-move",children:[(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"-1","aria-label":o("sessions.board.moveLeft"),disabled:r===0,onClick:()=>e.onMoveColumn(a.id,-1),children:"\u2039"}),(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"1","aria-label":o("sessions.board.moveRight"),disabled:r===s.length-1,onClick:()=>e.onMoveColumn(a.id,1),children:"\u203A"})]}),(0,n.jsx)("span",{className:"session-board-count",children:m.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:m.length?m.map(p=>(0,n.jsx)(Ns,{row:p,selected:e.selected.has(p.sessionId),onToggleSelect:e.onToggleSelect,onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},p.sessionId)):(0,n.jsx)("div",{className:"session-board-empty",children:o("sessions.board.emptyColumn")})})]},a.id)})})}function Oo(e){let t=be(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function $o(e){let t=(0,c.useMemo)(()=>wn(e.rows),[e.rows]),s=(0,c.useMemo)(()=>new Map(wn(e.relationRows??e.rows).map(a=>[a.key,a])),[e.relationRows,e.rows]);return(0,n.jsx)("div",{id:"sessions-topics",className:"sessions-topic-view",hidden:e.hidden,children:t.length?t.map(a=>{let r=s.get(a.key)??a,m=a.rows[0],p=De(m),l=Oo(r),g=r.rootMessageId||r.chatId;return(0,n.jsxs)("section",{className:`session-topic-group${r.multiBot?" multi-bot":""}${r.inferredBotTriggered?" inferred-bot-trigger":""}`,"data-topic-key":a.key,children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"session-topic-avatar",dangerouslySetInnerHTML:ce(pn({chatId:a.chatId,name:p,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-topic-heading",children:[(0,n.jsx)("span",{className:"session-topic-location",children:p}),(0,n.jsx)("h2",{title:r.title,children:l}),(0,n.jsx)("code",{title:g,children:r.kind==="thread"?g:r.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession")})]}),(0,n.jsxs)("div",{className:"session-topic-summary","aria-label":o("sessions.topic.summary"),children:[r.multiBot?(0,n.jsx)("span",{className:"topic-chip collaboration",children:o("sessions.topic.collaboration")}):null,(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.sessions",{count:r.rows.length})}),(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.bots",{count:r.botCount})}),(0,n.jsx)("span",{className:"topic-chip active",children:o("sessions.topic.active",{count:r.activeCount})}),r.closedCount?(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.closed",{count:r.closedCount})}):null,r.inferredBotInputCount?(0,n.jsx)("span",{className:"topic-chip inferred",title:o("sessions.topic.inferredHint"),children:o("sessions.topic.botInputs",{count:r.inferredBotInputCount})}):null,(0,n.jsxs)("span",{className:"session-topic-updated",children:[o("sessions.last"),": ",Be(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(C=>(0,n.jsx)(Ns,{row:C,selected:e.selected.has(C.sessionId),onToggleSelect:w=>{w.status!=="closed"?e.onToggleSelect(w):e.onOpen(w)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},C.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function Do(e){let t=e.message,s=t.senderType==="user",a=t.senderType==="app"||t.senderType==="bot",r=s?t.senderName||(e.ownerOpenId&&t.senderId===e.ownerOpenId?o("sessions.history.owner"):o("sessions.history.user")):t.senderName||String(t.senderId??"").slice(0,16)||o(a?"sessions.history.bot":"sessions.history.system"),m=String(t.content??"").trim()||`[${t.msgType??"message"}]`;return(0,n.jsxs)("div",{className:`history-msg${e.groupStart?" group-start":" continuation"}`,children:[e.groupStart?s?t.senderAvatar?(0,n.jsx)("img",{className:"history-avatar-img",src:String(t.senderAvatar),alt:"",decoding:"async",referrerPolicy:"no-referrer"}):(0,n.jsx)("span",{className:"history-avatar-user","aria-hidden":"true",children:String(r).slice(0,1)}):(0,n.jsx)("span",{className:"history-avatar-bot",dangerouslySetInnerHTML:ce(Oe({name:r,larkAppId:t.senderBotAppId,avatarUrl:t.senderAvatar,size:"sm"}))}):(0,n.jsx)("span",{className:"history-avatar-spacer","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"history-msg-main",children:[e.groupStart?(0,n.jsxs)("div",{className:"history-msg-meta",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)("time",{children:Io(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:m})]})]})}function Ho(e){let t=(0,c.useRef)(null);st(t,!!e.state);let s=e.state?Ue.sessions.get(e.state.sessionId):null,a=(0,c.useRef)(null),r=!!e.state&&!e.state.loading&&!e.state.error&&e.state.messages.length>0;return(0,c.useEffect)(()=>{if(!r)return;let m=a.current;m&&(m.scrollTop=m.scrollHeight)},[r,e.state?.sessionId,e.state?.messages.length]),(0,n.jsx)("dialog",{id:"history-modal",className:"history-modal",ref:t,onClose:e.onClose,onClick:m=>{m.target===m.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:ce(Oe({name:ge(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(be(s.title)||s.sessionId).slice(0,60)}),(0,n.jsx)("span",{className:"history-scope-tag",children:o("sessions.history.title")})]}),(0,n.jsx)("span",{className:"term-modal-actions",children:(0,n.jsx)(Ee,{id:"history-close",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})})]}),(0,n.jsxs)("div",{className:"history-body",ref:a,children:[e.state.loading?(0,n.jsx)(ze,{label:o("sessions.history.loading"),className:"term-modal-loading",compact:!0}):null,!e.state.loading&&e.state.error?(0,n.jsxs)("div",{className:"history-error",children:[o("sessions.history.fail"),": ",e.state.error,e.state.stale?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("span",{children:o("sessions.history.staleHint")})]}):null]}):null,!e.state.loading&&!e.state.error&&e.state.messages.length===0?(0,n.jsx)("div",{className:"history-error",children:o("sessions.history.empty")}):null,!e.state.loading&&!e.state.error&&e.state.messages.length>0?(0,n.jsx)("div",{className:"history-list",children:e.state.messages.map((m,p,l)=>(0,n.jsx)(Do,{message:m,ownerOpenId:e.state?.ownerOpenId,groupStart:p===0||Xn(l[p-1])!==Xn(m)},m.messageId??p))}):null]})]}):null})}function _o(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(""),m=(0,c.useRef)(null),p=be(e.row.title)||e.row.sessionId;(0,c.useLayoutEffect)(()=>{if(!t||!m.current)return;let g=m.current;g.focus(),g.select(),(()=>{let w=getComputedStyle(g),v=document.createElement("span");v.style.cssText="position:absolute;visibility:hidden;white-space:pre",v.style.fontSize=w.fontSize,v.style.fontFamily=w.fontFamily,v.style.fontWeight=w.fontWeight,v.style.letterSpacing=w.letterSpacing,v.textContent=g.value||" ",document.body.appendChild(v);let O=Math.round(window.innerWidth*.6);g.style.width=`${Math.min(Math.max(v.offsetWidth+22,80),O)}px`,v.remove()})()},[t,a]);let l=g=>{let C=a.trim();s(!1),g&&C&&C!==p&&e.onRename(e.row,C)};return t?(0,n.jsx)("input",{ref:m,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:g=>r(g.currentTarget.value),onBlur:()=>l(!0),onKeyDown:g=>{g.stopPropagation(),g.key==="Enter"?(g.preventDefault(),l(!0)):g.key==="Escape"&&(g.preventDefault(),l(!1))}}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{className:"term-modal-name",title:String(e.row.title??p),children:String(p).slice(0,60)}),(0,n.jsx)(Ee,{id:"term-modal-edit",icon:J.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(be(e.row.title)||""),s(!0)}})]})}function Ko(e){let t=(0,c.useRef)(null);st(t,!!e.state);let s=e.state?Ue.sessions.get(e.state.sessionId):null,a=s?rn(s):null,r=e.state?.url??a??"",m=s?dn(s):"",p=s?jn(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:l=>{l.target===l.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:ce(Oe({name:ge(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsxs)("span",{className:"term-modal-title-copy",children:[(0,n.jsxs)("span",{className:"term-modal-title-main",children:[(0,n.jsx)(_o,{row:s,onRename:e.onRename}),(0,n.jsx)(Tn,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:ge(s)}),(0,n.jsx)("span",{children:m}),p!=="-"?(0,n.jsx)("span",{title:s.workingDir??"",children:p}):null]})]})]}),(0,n.jsxs)("span",{className:"term-modal-actions",children:[s.feishuChatLink?(0,n.jsx)("a",{className:"card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener",title:o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),dangerouslySetInnerHTML:ce(J.feishu)}):null,(0,n.jsx)("a",{id:"term-modal-tab",className:"card-act",href:r,target:"_blank",rel:"noopener",title:o("sessions.kanban.openTab"),"aria-label":o("sessions.kanban.openTab"),dangerouslySetInnerHTML:ce(J.terminal)}),(0,n.jsx)(Ee,{id:"term-modal-close",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})]})]}),(0,n.jsx)("div",{className:"term-modal-body",children:(0,n.jsx)("div",{className:"term-modal-frame-shell",children:e.state.loading?(0,n.jsx)(ze,{label:o("sessions.kanban.terminalLoading"),className:"term-modal-loading",compact:!0}):(0,n.jsx)("iframe",{className:"term-modal-frame",src:r,allow:"clipboard-read; clipboard-write"})})})]}):null})}function Fo(e){let t=e.report;if(!t||t.status!=="ok"){let g=t?.error?.message?String(t.error.message):String(t?.status??"error");return(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",g]})}let s=t.agg??{};if(!s.totalSpans)return(0,n.jsx)("p",{children:o("sessions.insightEmpty")});let a=[t.meta?.asOf?o("sessions.insightAsOf",{asOf:String(t.meta.asOf)}):null,t.meta?.partial?o("sessions.insightPartial"):null].filter(Boolean),r=Array.isArray(t.suggestions)?t.suggestions:[],m=Array.isArray(t.spans)?t.spans:[],p=g=>g==="bad"||g==="warn"?"!":"i",l=g=>g==="error"?"!":g==="running"?"...":"ok";return(0,n.jsxs)(n.Fragment,{children:[a.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:a.join(" \xB7 ")}):null,(0,n.jsx)("p",{children:o("sessions.insightMetrics",{total:String(s.totalSpans??0),failed:String(s.failedSpans??0),slow:String(s.slowSpans??0),rw:s.readWriteRatio===null||s.readWriteRatio===void 0?"-":String(s.readWriteRatio),compactions:String(s.compactions??0)})}),r.length?(0,n.jsxs)("details",{open:!0,children:[(0,n.jsx)("summary",{children:o("sessions.insightSuggestions")}),(0,n.jsx)("ul",{style:{paddingLeft:18,margin:"6px 0"},children:r.map((g,C)=>(0,n.jsxs)("li",{children:[p(String(g.severity??""))," ",(0,n.jsx)("b",{children:String(g.title??"")})," - ",String(g.action??""),Array.isArray(g.evidence)&&g.evidence.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("small",{style:{color:"var(--muted,#8f959e)"},children:g.evidence.join("; ")})]}):null]},C))})]}):null,m.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",m.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??m.length),total:String(t.meta.spansTotal??m.length)})}):null,(0,n.jsx)("div",{style:{maxHeight:320,overflow:"auto"},children:(0,n.jsx)("table",{style:{width:"100%",fontSize:12},children:(0,n.jsx)("tbody",{children:[...m].sort((g,C)=>(g.relStartMs??0)-(C.relStartMs??0)).map((g,C)=>{let w=[g.inputSummary,g.outputSummary].filter(Boolean).map(String).join(" -> ");return(0,n.jsxs)("tr",{style:g.status==="error"?{color:"var(--danger,#d33)"}:void 0,children:[(0,n.jsx)("td",{children:l(String(g.status??""))}),(0,n.jsx)("td",{children:(0,n.jsx)("code",{children:String(g.tool??"")})}),(0,n.jsx)("td",{children:String(g.phase??"")}),(0,n.jsx)("td",{children:To(g.durationMs)}),(0,n.jsxs)("td",{children:["#",String(g.turnIndex??0)]}),(0,n.jsx)("td",{children:w})]},C)})})})})]}):null]})}function Uo(e){let[t,s]=(0,c.useState)(null);if((0,c.useEffect)(()=>s(null),[e.row.sessionId]),!Pe.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),m=await r.json().catch(()=>({}));!m.ok||!m.report?s({loading:!1,error:String(m.error??r.status)}):s({loading:!1,report:m.report})}catch(r){s({loading:!1,error:String(r)})}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"insight-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.insight")}),(0,n.jsxs)("div",{id:"insight-area",children:[t?.loading?(0,n.jsx)(ze,{label:o("sessions.insightLoading"),compact:!0}):null,t?.error?(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",t.error]}):null,t?.report?(0,n.jsx)(Fo,{report:t.report}):null]})]})}function jo(e){let t=(0,c.useRef)(null);st(t,!!e.row);let s=e.row,a=s?rn(s):null;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:r=>{r.target===r.currentTarget&&e.onClose()},children:s?(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{className:"drawer-title-row",children:[(0,n.jsx)("h3",{children:be(s.title)||s.sessionId}),(0,n.jsx)(Ee,{id:"drawer-close",className:"card-act drawer-close-btn",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(Tn,{status:s.status}),(0,n.jsx)(nt,{row:s}),(0,n.jsx)(tt,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)(et,{value:s.sessionId})]})]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",ge(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",dn(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",De(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)(et,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)(et,{value:s.rootMessageId??""})]}),s.threadId?(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"threadId:"})," ",(0,n.jsx)("code",{children:s.threadId})]}):null,(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.workingDir"),":"]})," ",s.workingDir??"-"]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)(Ts,{row:s}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)(No,{row:s,locateSession:e.locateSession}):null,(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),(0,n.jsx)(Is,{row:s,url:a}),Cn()&&s.status!=="closed"?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button","data-tip":o("sessions.copyCommandHint"),onClick:r=>{ns(s,r.currentTarget)},children:o("sessions.copyCommand")}):null,Sn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",onClick:async r=>{await e.restartSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,(0,n.jsx)("button",{id:"lock-btn",type:"button",onClick:r=>{e.setSessionLocked(s,!s.locked,r.currentTarget)},children:vn(s)}),s.queued&&s.status!=="closed"?(0,n.jsx)("button",{id:"start-btn",type:"button",className:"primary",onClick:async r=>{await e.startSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null,s.status==="closed"?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary",onClick:async r=>{await e.resumeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.resume")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"close-btn",type:"button",className:"contrast",onClick:async r=>{await e.closeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.close")}):null,(0,n.jsx)(Uo,{row:s})]})]}):null})}function zo(e){let t=e.state;(0,c.useEffect)(()=>{let f=e.dialog;return()=>{f.open&&f.close()}},[e.dialog]),(0,c.useEffect)(()=>{let f=e.dialog;if(t){if(!f.open)try{f.showModal()}catch{}}else f.open&&f.close()},[e.dialog,t]),(0,c.useEffect)(()=>{let f=e.dialog,I=()=>e.onClose(),R=B=>{B.target===f&&e.onClose()};return f.addEventListener("close",I),f.addEventListener("click",R),()=>{f.removeEventListener("close",I),f.removeEventListener("click",R)}},[e]);let[s,a]=(0,c.useState)(""),[r,m]=(0,c.useState)([]),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lead"),[w,v]=(0,c.useState)(""),[O,P]=(0,c.useState)("in_progress"),[E,M]=(0,c.useState)(""),[A,_]=(0,c.useState)(""),[U,j]=(0,c.useState)(!1),[x,$]=(0,c.useState)(!1),[D,Y]=(0,c.useState)(()=>vt(ae())),[H,de]=(0,c.useState)(null),[Te,ke]=(0,c.useState)([]),[we,Me]=(0,c.useState)(""),[W,We]=(0,c.useState)(""),[Ce,N]=(0,c.useState)(""),[S,G]=(0,c.useState)(""),[pe,te]=(0,c.useState)(!1),[se,X]=(0,c.useState)(!1),[Z,ee]=(0,c.useState)(""),[ve,fe]=(0,c.useState)(""),[Se,Q]=(0,c.useState)(null),[Ne,ie]=(0,c.useState)(0),oe=(0,c.useRef)(null),Ie=(0,c.useRef)(1);(0,c.useEffect)(()=>{t&&(a(""),m([]),l(new Set),C("lead"),v(""),P("in_progress"),M(""),_(""),j(!1),$(!1),de(null),We(""),N(""),G(""),ee(""),fe(""),Q(null),ie(0),Ie.current=1)},[t]),(0,c.useEffect)(()=>{if(!Z)return;let f=!0,I=window.setInterval(()=>{fetch("/api/feed-groups").then(async R=>{let B=await R.json().catch(()=>({}));!R.ok||!B.ok||!f||(ke(Array.isArray(B.groups)?B.groups:[]),Me(typeof B.larkAppId=="string"?B.larkAppId:""),G(""),ee(""),fe(""))}).catch(()=>{})},1e3);return()=>{f=!1,window.clearInterval(I)}},[Z]),(0,c.useEffect)(()=>{if(!t||t.loading||t.success)return;let f=!0;return te(!0),fetch("/api/feed-groups").then(async I=>{let R=await I.json().catch(()=>({}));if(!I.ok||!R.ok)throw new Error(R.message??R.error??`HTTP ${I.status}`);f&&(ke(Array.isArray(R.groups)?R.groups:[]),Me(typeof R.larkAppId=="string"?R.larkAppId:""),G(""))}).catch(I=>{f&&G(I instanceof Error?I.message:String(I))}).finally(()=>{f&&te(!1)}),()=>{f=!1}},[t]);let He=async()=>{let f=we?`?larkAppId=${encodeURIComponent(we)}`:"",I=await fetch(`/api/feed-groups/auth-url${f}`),R=await I.json().catch(()=>({}));if(!I.ok||!R.authUrl){alert(R.error??`HTTP ${I.status}`);return}ee(String(R.authUrl)),fe("")},Qe=async f=>{X(!0);try{let I=await fetch("/api/feed-groups/oauth-callback",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({callbackUrl:f.trim()})}),R=await I.json().catch(()=>({}));if(!I.ok||!R.ok)throw new Error(R.message??R.error??`HTTP ${I.status}`);let B=await fetch("/api/feed-groups"),K=await B.json().catch(()=>({}));if(!B.ok||!K.ok)throw new Error(K.message??K.error??`HTTP ${B.status}`);ke(Array.isArray(K.groups)?K.groups:[]),Me(typeof K.larkAppId=="string"?K.larkAppId:""),G(""),ee(""),fe("")}catch(I){alert(I instanceof Error?I.message:String(I))}finally{X(!1)}};if(!t)return null;if(t.success){let f=t.success,I=typeof f.shareLink=="string"&&f.shareLink?f.shareLink:"",R=Array.isArray(f.failed)?f.failed.length:0,B=Array.isArray(f.spawned)?f.spawned.length:0,K=f.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress");return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.doneTitle")})}),(0,n.jsxs)("p",{children:[K,"\uFF08",B,"\uFF09"]}),R>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(R)})}):null,I?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:I,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")})}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",id:"cs-done",className:"primary",onClick:e.onClose,children:o("sessions.create.close")})})]})}if(t.loading)return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsx)(ze,{label:o("common.loading"),className:"cs-loading",compact:!0}),(0,n.jsx)("div",{className:"actions cs-actions",children:(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")})})]});let V=t.bots,xe=[...p],Xe=xe,Nn=f=>V.find(I=>I.larkAppId===f)?.botName??f,ue=Se?rs(V,Se.query).slice(0,8):[],en=f=>{if(!Se)return;let I=is(s,Se,f.botName);a(I.text),Q(null),ie(0),l(R=>new Set(R).add(f.larkAppId)),v(R=>R||f.larkAppId),requestAnimationFrame(()=>{let R=oe.current;R&&(R.focus(),R.setSelectionRange(I.caret,I.caret))})},Ae=f=>{if(!(!Se||ue.length===0)){if(f.key==="ArrowDown"||f.key==="ArrowUp"){f.preventDefault();let I=f.key==="ArrowDown"?1:-1;ie(R=>(R+I+ue.length)%ue.length);return}if(f.key==="Enter"||f.key==="Tab"){f.preventDefault(),en(ue[Math.min(Ne,ue.length-1)]);return}f.key==="Escape"&&(f.preventDefault(),Q(null))}},xn=async f=>{let I=[...f.clipboardData.files].filter(re=>re.type.startsWith("image/"));if(I.length===0)return;f.preventDefault();let R=f.currentTarget.selectionStart??s.length,B=f.currentTarget.selectionEnd??R,K=I.filter(re=>fo.has(re.type.toLowerCase()));if(K.length!==I.length){alert(o("sessions.create.imageUnsupported"));return}if(r.length+K.length>Cs){alert(o("sessions.create.imageCountLimit",{n:String(Cs)}));return}if(K.some(re=>re.size>bo)){alert(o("sessions.create.imageSizeLimit"));return}if(r.reduce((re,me)=>re+me.size,0)+K.reduce((re,me)=>re+me.size,0)>ho){alert(o("sessions.create.imageTotalLimit"));return}try{let re=Ie.current,me=await Promise.all(K.map(async(ne,Re)=>{let Ke=await yo(ne),le=Ke.indexOf(",");if(le<0)throw new Error("bad_image_data");let qe=re+Re;return{id:`${Date.now()}-${Re}-${Math.random().toString(36).slice(2)}`,ordinal:qe,marker:`[${o("sessions.create.imageMarker",{n:String(qe)})}]`,name:ne.name||`pasted-image-${r.length+Re+1}`,mimeType:ne.type.toLowerCase(),size:ne.size,dataBase64:Ke.slice(le+1),previewUrl:Ke}}));Ie.current+=me.length;let nn=ls(s,R,B,me.map(ne=>ne.marker));a(nn.text),m(ne=>[...ne,...me]),Q(null),requestAnimationFrame(()=>{let ne=oe.current;ne&&(ne.focus(),ne.setSelectionRange(nn.caret,nn.caret))})}catch{alert(o("sessions.create.imageReadFailed"))}},_e=async f=>{f.preventDefault();let I=s.trim();if(!I){alert(o("sessions.create.errContent"));return}if(xe.length===0){alert(o("sessions.create.errNoBot"));return}let R=w||xe[0]||"";if(g==="lead"&&(!R||!xe.includes(R))){alert(o("sessions.create.errLead"));return}$(!0),de(null);try{let B=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:I,larkAppIds:xe,mode:g,column:O,leadLarkAppId:g==="lead"?R:void 0,name:E.trim()||void 0,bindWorkingDir:A.trim()||void 0,feedGroupId:W||void 0,newFeedGroupName:Ce.trim()||void 0,feedGroupAppId:W||Ce.trim()?we:void 0,images:r.map(Ve=>({name:Ve.name,mimeType:Ve.mimeType,dataBase64:Ve.dataBase64}))})}),K=await B.json().catch(()=>null);B.ok&&K?.ok?D?(de(K),a(""),m([]),Ie.current=1,M("")):e.onSuccess(K):B.status!==401&&alert(`${o("sessions.create.failed")}: ${K?.error??B.status}`)}catch(B){alert(`${o("sessions.create.failed")}: ${B}`)}finally{$(!1)}};return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsxs)("form",{id:"cs-form",onSubmit:_e,children:[(0,n.jsxs)("fieldset",{className:"cs-content",children:[(0,n.jsx)("legend",{children:o("sessions.create.content")}),(0,n.jsxs)("div",{className:"cs-composer",children:[(0,n.jsx)("textarea",{ref:oe,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:f=>{let I=f.currentTarget,R=I.value;a(R),Q(qn(R,I.selectionStart??R.length)),ie(0)},onClick:f=>Q(qn(s,f.currentTarget.selectionStart??s.length)),onKeyDown:Ae,onPaste:f=>{xn(f)},onBlur:()=>setTimeout(()=>Q(null),0)}),Se?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:ue.length?ue.map((f,I)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":I===Ne,className:I===Ne?"active":void 0,onMouseDown:R=>R.preventDefault(),onClick:()=>en(f),children:[(0,n.jsxs)("strong",{children:["@",f.botName]}),(0,n.jsx)("small",{children:f.larkAppId})]},f.larkAppId)):(0,n.jsx)("p",{children:o("sessions.create.noBotMatch")})}):null]}),(0,n.jsx)("small",{id:"cs-content-help",children:o("sessions.create.contentHelp")}),r.length?(0,n.jsx)("div",{className:"cs-image-list","aria-label":o("sessions.create.pastedImages"),children:r.map(f=>(0,n.jsxs)("figure",{className:"cs-image-item",children:[(0,n.jsx)("img",{src:f.previewUrl,alt:f.name}),(0,n.jsxs)("figcaption",{title:`${f.marker} ${f.name}`,children:[(0,n.jsx)("strong",{children:f.marker}),(0,n.jsx)("span",{children:f.name})]}),(0,n.jsx)("button",{type:"button",className:"cs-image-remove","aria-label":o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),title:o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),onClick:()=>{let I=r.filter(B=>B.id!==f.id),R=cs(s,f.marker,I.map(B=>B.marker),B=>`[${o("sessions.create.imageMarker",{n:String(B+1)})}]`);a(R.text),m(I.map((B,K)=>({...B,ordinal:K+1,marker:R.markers[K]}))),Ie.current=I.length+1},children:(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M7 7l10 10M17 7 7 17"})})})]},f.id))}):null]}),(0,n.jsxs)("fieldset",{className:"cs-bots",children:[(0,n.jsx)("legend",{children:o("sessions.create.bots")}),(0,n.jsx)(Pt,{bots:V,selected:p,onToggle:(f,I)=>{l(R=>{let B=new Set(R);return I?B.add(f):B.delete(f),B.has(w)||v(B.values().next().value??""),B})},searchPlaceholder:o("botPicker.searchPlaceholder"),noMatchLabel:o("botPicker.noMatch"),emptyLabel:o("sessions.create.noBots"),selectedCountLabel:f=>o("botPicker.selectedCount",{n:String(f)})})]}),(0,n.jsxs)("fieldset",{className:"cs-mode",children:[(0,n.jsx)("legend",{children:o("sessions.create.mode")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"lead",checked:g==="lead",onChange:()=>C("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:g==="all",onChange:()=>C("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),Z?(0,n.jsx)("div",{className:"feed-group-auth-overlay",children:(0,n.jsxs)("section",{className:"feed-group-auth-card",role:"dialog","aria-modal":"true","aria-labelledby":"session-feed-group-auth-title",children:[(0,n.jsx)("h3",{id:"session-feed-group-auth-title",children:"\u6388\u6743\u98DE\u4E66\u6807\u7B7E"}),(0,n.jsxs)("p",{children:["\u70B9\u51FB\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u5728\u98DE\u4E66\u9875\u9762\u786E\u8BA4\u6388\u6743\u3002\u5982\u679C BotMux \u4E0E\u6D4F\u89C8\u5668\u5728\u540C\u4E00\u53F0\u7535\u8111\uFF0C\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u5B8C\u6210\u6388\u6743\u3002\u5982\u679C BotMux \u8FD0\u884C\u5728\u8FDC\u7A0B\u865A\u62DF\u673A\u4E0A\uFF0C\u6D4F\u89C8\u5668\u4F1A\u56E0\u65E0\u6CD5\u8BBF\u95EE\u672C\u673A\u5730\u5740 ",(0,n.jsx)("code",{children:"127.0.0.1:9768"})," \u800C\u663E\u793A\u201C\u65E0\u6CD5\u8BBF\u95EE\u201D\uFF1B\u6B64\u65F6\u8BF7\u590D\u5236\u5730\u5740\u680F\u4E2D\u7684\u5B8C\u6574\u94FE\u63A5\u5E76\u7C98\u8D34\u5230\u4E0B\u65B9\u3002"]}),(0,n.jsx)("button",{type:"button",className:"primary feed-group-auth-open",onClick:()=>window.open(Z,"_blank","noopener"),children:"\u8DF3\u8F6C\u98DE\u4E66\u6388\u6743"}),(0,n.jsxs)("label",{children:[(0,n.jsx)("span",{children:"\u8BF7\u628A\u70B9\u51FB\u6388\u6743\u540E\u7684\u5B8C\u6574\u94FE\u63A5\u7C98\u8D34\u5728\u8FD9\u91CC"}),(0,n.jsx)("input",{type:"url",value:ve,placeholder:"http://127.0.0.1:9768/callback?code=\u2026&state=\u2026",onChange:f=>fe(f.currentTarget.value)})]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{ee(""),fe("")},children:"\u53D6\u6D88"}),(0,n.jsx)("button",{type:"button",className:"primary",disabled:!ve.trim()||se,onClick:()=>{Qe(ve)},children:se?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u5B8C\u6210\u6388\u6743"})]})]})}):null,(0,n.jsxs)("fieldset",{className:"cs-lead-row",hidden:g!=="lead",children:[(0,n.jsx)("legend",{children:o("sessions.create.lead")}),(0,n.jsx)("select",{name:"lead",disabled:Xe.length===0,value:Xe.includes(w)?w:"",onChange:f=>v(f.currentTarget.value),children:Xe.length?Xe.map(f=>(0,n.jsx)("option",{value:f,children:Nn(f)},f)):(0,n.jsx)("option",{value:"",disabled:!0,children:o("sessions.create.leadPickFirst")})}),(0,n.jsx)("small",{children:o("sessions.create.leadHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-column",children:[(0,n.jsx)("legend",{children:o("sessions.create.column")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"in_progress",checked:O==="in_progress",onChange:()=>P("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:O==="backlog",onChange:()=>P("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${U?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":U,"aria-controls":"cs-advanced-fields",onClick:()=>j(f=>!f),children:o("sessions.create.optionalConfig")})}),U?(0,n.jsxs)("div",{id:"cs-advanced-fields",className:"cs-advanced-fields",children:[(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.groupName")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"name",maxLength:60,placeholder:o("sessions.create.groupNamePlaceholder"),value:E,onChange:f=>M(f.currentTarget.value)})]}),(0,n.jsxs)("fieldset",{className:"cs-feed-group",children:[(0,n.jsx)("legend",{children:"\u98DE\u4E66\u6807\u7B7E\uFF08\u53EF\u9009\uFF09"}),(0,n.jsx)(Lt,{groups:Te,selectedId:W,newName:Ce,disabled:pe||!!S,onChange:(f,I)=>{We(f),N(I)}}),(0,n.jsx)("small",{children:"\u5C55\u5F00\u540E\u53EF\u5728\u7B2C\u4E00\u884C\u8F93\u5165\u65B0\u6807\u7B7E\u540D\u79F0\uFF0C\u6216\u9009\u62E9\u4E0B\u65B9\u5DF2\u6709\u6807\u7B7E\u3002"}),pe?(0,n.jsx)("small",{children:"\u6B63\u5728\u8BFB\u53D6\u98DE\u4E66\u6807\u7B7E\u2026"}):null,S?(0,n.jsxs)("div",{className:"cs-warn",children:[(0,n.jsx)("small",{children:S})," ",(0,n.jsx)("button",{type:"button",disabled:se,onClick:()=>{He()},children:se?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u7ACB\u5373\u6388\u6743"}),(0,n.jsx)("small",{children:" \u6388\u6743\u540E\u4F1A\u5F39\u7A97\u63D0\u793A\u4F60\u7C98\u8D34\u56DE\u8C03\u5730\u5740\u3002"})]}):null]}),(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.workingDir")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/foo",value:A,onChange:f=>_(f.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),H?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[H.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(H.failed)&&H.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(H.failed.length)})}`:""]}),typeof H.shareLink=="string"&&H.shareLink?(0,n.jsx)("a",{href:H.shareLink,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")}):null]}):null,(0,n.jsxs)("div",{className:"actions cs-actions",children:[(0,n.jsxs)("label",{className:"cs-keep-open",title:o("sessions.create.keepOpenHelp"),children:[(0,n.jsx)("input",{type:"checkbox",name:"keepOpen",checked:D,onChange:f=>{let I=f.currentTarget.checked;Y(I),St(ae(),I)}}),(0,n.jsx)("span",{children:o("sessions.create.keepOpen")})]}),(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")}),(0,n.jsx)("button",{type:"submit",className:"cs-submit",disabled:x||V.length===0,children:x?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function Go(){Et();let e=Rt(i=>[...i.sessions.values()]),[t,s]=(0,c.useState)(0),a=(0,c.useCallback)(()=>s(i=>i+1),[]),[r,m]=(0,c.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:yt(ae()),active:!0,cli:new Set(ye)}),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lastMessageAt"),[w,v]=(0,c.useState)("desc"),[O,P]=(0,c.useState)(()=>new Set(ft(ae()))),[E,M]=(0,c.useState)(()=>ht(ae())),[A,_]=(0,c.useState)(()=>kt(ae())),[U,j]=(0,c.useState)(!1),[x,$]=(0,c.useState)(null),[D,Y]=(0,c.useState)(null),[H,de]=(0,c.useState)(()=>It(ae())),Te=`${E}:${E==="kanban"?H:"-"}`,ke=(0,c.useRef)(!0),[we,Me]=(0,c.useState)(0),[W,We]=(0,c.useState)([]),[Ce,N]=(0,c.useState)(null),[S,G]=(0,c.useState)(!1),pe=(0,c.useRef)(!1),[te,se]=(0,c.useState)(()=>{try{return window.localStorage.getItem($n)??""}catch{return""}}),[X,Z]=(0,c.useState)({data:null,key:"",fetchedAt:0}),ee=(0,c.useRef)(!1),ve=(0,c.useRef)(new Set),[fe,Se]=(0,c.useState)(""),[Q,Ne]=(0,c.useState)(null),[ie,oe]=(0,c.useState)(null),[Ie,He]=(0,c.useState)(null),[Qe,V]=(0,c.useState)(!1),[xe,Xe]=(0,c.useState)(24),[Nn,ue]=(0,c.useState)(""),[en,Ae]=(0,c.useState)(null),[xn,_e]=(0,c.useState)(null),[f,I]=(0,c.useState)(null),[R,B]=(0,c.useState)(null),[K,Ve]=(0,c.useState)(null),[re,me]=(0,c.useState)(null),[nn,ne]=(0,c.useState)(!1),Re=(0,c.useRef)(0);(0,c.useLayoutEffect)(()=>{if(ke.current){ke.current=!1;return}Me(i=>i+1)},[Te]),(0,c.useEffect)(()=>{Ve(document.getElementById("create-session-modal"))},[]),(0,c.useEffect)(()=>{Nt().then(a)},[a]);let Ke=(0,c.useMemo)(()=>{let i=new Map;for(let u of e){let d=String(u.chatId??"").trim();if(!d||!r.showUnknownChats&&zn(u))continue;let b=De(u);i.set(d,Zt(i.get(d),b,d))}return[...i.entries()].sort((u,d)=>u[1].localeCompare(d[1])).map(([u,d])=>({value:u,label:d}))},[r.showUnknownChats,t,e]);(0,c.useEffect)(()=>{r.chat&&(Ke.some(i=>i.value===r.chat)||m(i=>({...i,chat:""})))},[Ke,r.chat]);let le=(0,c.useMemo)(()=>{let i=r.q.toLowerCase(),u=[...r.cli],d=u.length>0&&u.length<ye.length,b=E==="kanban",y=r.multiBotTopics||r.botTriggeredTopics?new Set(wn(e).filter(h=>!r.multiBotTopics||h.multiBot).filter(h=>!r.botTriggeredTopics||h.inferredBotTriggered).map(h=>h.key)):null,k=e.filter(h=>!d||u.includes(h.cliId??"unknown")).filter(h=>r.showUnknownChats||!zn(h)).filter(h=>!r.status||h.status===r.status).filter(h=>!r.adopt||r.adopt==="yes"==!!h.adopt).filter(h=>!r.chat||String(h.chatId??"")===r.chat).filter(h=>!r.active||b||h.status!=="closed").filter(h=>!i||Qt(h).includes(i));return y?k.filter(h=>y.has(Jn(h))).sort((h,F)=>Ss(h,F,g,w)):k.sort((h,F)=>Ss(h,F,g,w))},[r,t,w,g,e,E]),qe=(0,c.useMemo)(()=>Yt(e),[e]),Le=(0,c.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,t]),ot=(0,c.useMemo)(()=>le.filter(i=>i.status!=="closed"),[le]),tn=(E==="table"||E==="topics"?le:ot).filter(i=>i.status!=="closed"),at=[...p].map(i=>Le.get(i)).filter(i=>!!i&&i.status!=="closed"),it=tn.length>0&&tn.every(i=>p.has(i.sessionId)),xs=tn.some(i=>p.has(i.sessionId))&&!it;(0,c.useEffect)(()=>{l(i=>{let u=!1,d=new Set;for(let b of i){let y=Le.get(b);y&&y.status!=="closed"?d.add(b):u=!0}return u?d:i})},[Le]);let Rn=(0,c.useCallback)(i=>{let u=new Set;if(!i)return u;for(let d of i.groupChats)u.add(d);if(Ce)for(let[d,b]of Ce){if(u.has(d))continue;let y=!1;for(let k of i.botIds)if(b.botIds.has(k)){y=!0;break}if(y){for(let k of b.observedNames)if(i.botNames.has(k)){u.add(d);break}}}return u},[Ce]),rt=(0,c.useMemo)(()=>{if(E==="kanban"&&H==="team"){let i=W.find(d=>d.key===te)??W[0],u=Rn(i);return le.filter(d=>u.has(String(d.chatId)))}return le},[H,te,W,le,Rn,E]),En=(0,c.useCallback)(i=>Kt(rt,i),[rt]),Mn=(0,c.useCallback)(async()=>{if(!(pe.current||S)){pe.current=!0;try{let[i,u,d]=await Promise.all([fetch("/api/team/hosted").then(k=>k.json()).catch(()=>null),fetch("/api/team/remote-roster").then(k=>k.json()).catch(()=>null),fetch("/api/groups").then(k=>k.json()).catch(()=>null)]);Array.isArray(d?.chats)&&N(new Map(d.chats.map(k=>[String(k.chatId),{botIds:new Set((k.memberBots??[]).filter(h=>h.inChat).map(h=>String(h.larkAppId))),observedNames:new Set((k.observedBotNames??[]).map(h=>String(h)))}])));let b=k=>({ids:new Set(k.map(h=>String(h.larkAppId))),names:new Set(k.map(h=>String(h.name??"")).filter(Boolean))}),y=[];for(let k of i?.teams??[]){let{ids:h,names:F}=b(k.bots??[]);y.push({key:`local:${k.teamId}`,label:k.isDefault?o("team.myHostedTeam"):String(k.name??k.teamId),botIds:h,botNames:F,groupChats:new Set((k.groupChatIds??[]).map(z=>String(z)))})}for(let k of u?.memberships??[]){let{ids:h,names:F}=b(k.roster?.bots??[]);y.push({key:`${k.hubUrl}::${k.teamId}`,label:String(k.teamName??k.teamId??k.hubUrl),botIds:h,botNames:F,groupChats:new Set})}We(y),se(k=>y.length&&!y.some(h=>h.key===k)?y[0].key:k)}finally{G(!0),pe.current=!1}}},[S]),lt=(0,c.useCallback)(async(i,u,d,b,y)=>{try{let h=i.startsWith("local:")?await fetch(`/api/team/board/local/${encodeURIComponent(i.slice(6))}/move`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:u,column:d,position:b})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:u,column:d,position:b})}),F=await h.json().catch(()=>({}));(!h.ok||F?.ok===!1)&&(Z(z=>{if(!z.data||z.key!==i)return z;let q={...z.data.board};return y?q[u]=y:delete q[u],{...z,data:{...z.data,board:q}}}),h.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${F?.error??h.status}`))}catch(k){Z(h=>{if(!h.data||h.key!==i)return h;let F={...h.data.board};return y?F[u]=y:delete F[u],{...h,data:{...h.data,board:F}}}),alert(`${o("sessions.kanban.moveFail")}: ${k}`)}},[]),Rs=(0,c.useCallback)(async i=>{let u=X.key===i.key&&Date.now()-X.fetchedAt<3e4;if(!(ee.current||u)){ee.current=!0;try{let b=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,y=await fetch(b),k=await y.json().catch(()=>({}));if(!y.ok||k?.ok===!1)return;let h=typeof k.deploymentId=="string"?k.deploymentId:null,F=[];for(let z of Array.isArray(k.reports)?k.reports:[])if(!(h&&z.deploymentId===h))for(let q of Array.isArray(z.sessions)?z.sessions:[])F.push({...q,remoteDeployment:z.deploymentName||z.deploymentId});Z({key:i.key,fetchedAt:Date.now(),data:{board:k.board&&typeof k.board=="object"?k.board:{},remoteRows:F}})}finally{ee.current=!1}}},[X.fetchedAt,X.key]);(0,c.useEffect)(()=>{E==="kanban"&&H==="team"&&!S&&Mn()},[H,S,Mn,E]),(0,c.useEffect)(()=>{let i=window.setInterval(()=>{E==="kanban"&&H==="team"&&(Z(u=>({...u,fetchedAt:0})),a())},3e4);return()=>window.clearInterval(i)},[H,a,E]);let ct=(0,c.useCallback)(async(i,u,d,b)=>{try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:u,position:d})}),k=await y.json().catch(()=>({}));(!y.ok||k?.ok===!1)&&(i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),y.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${k?.error??y.status}`))}catch(y){i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),alert(`${o("sessions.kanban.moveFail")}: ${y}`)}},[a]),Es=(0,c.useCallback)(i=>{let u=!1;for(let d of i){let b=String(d.row.sessionId);if(!b||d.row.status==="closed"&&d.column!=="done")continue;if(H==="team"){let h=W.find(q=>q.key===te)??W[0];if(!h)continue;let z=(X.key===h.key&&X.data?X.data.board:{})[b];Z(q=>{let gt=q.key===h.key&&q.data?q.data:{board:{},remoteRows:q.data?.remoteRows??[]},Ws={...gt.board,[b]:{column:d.column,position:d.position}};return{...q,key:h.key,data:{...gt,board:Ws}}}),lt(h.key,b,d.column,d.position,z),u=!0;continue}let y=Ue.sessions.get(b);if(!y)continue;let k={column:y.kanbanColumn,position:y.kanbanPosition};y.kanbanColumn=d.column,y.kanbanPosition=d.position,ct(y,d.column,d.position,k),u=!0}u&&a()},[H,te,W,X,ct,lt,a]),dt=(0,c.useCallback)(async(i,u)=>{let d=i.title;i.title=u,a();try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:u})}),y=await b.json().catch(()=>({}));(!b.ok||y?.ok===!1)&&(i.title=d,a(),b.status!==401&&alert(`${o("sessions.kanban.renameFail")}: ${y?.error??b.status}`))}catch(b){i.title=d,a(),alert(`${o("sessions.kanban.renameFail")}: ${b}`)}},[a]),An=(0,c.useCallback)(async i=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),d=await u.json();return d.ok?!0:(alert(`Locate failed: ${d.error??u.status}`),!1)}catch(u){return alert(`Locate error: ${u}`),!1}},[]),Ln=(0,c.useCallback)(async(i,u)=>{if(!confirm(o("sessions.closeConfirm")))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),b=await d.json().catch(()=>({}));if(!d.ok||b?.ok===!1)return d.status!==401&&alert(`Close failed: ${b?.error??d.status}`),!1;let y=Dn(b);return y&&alert(At(y)?`\u26A0\uFE0F Closed locally, but a credentialed host subtree could NOT be proven terminated: ${on(y)}. The remote session WAS cancelled \u2014 inspect the local host process.`:`\u26A0\uFE0F Closed locally, but the remote session was NOT cancelled: ${on(y)} \u2014 manual cleanup required.`),l(k=>{let h=new Set(k);return h.delete(i.sessionId),h}),a(),!0}catch(d){return alert(`Close error: ${d}`),!1}finally{u&&(u.disabled=!1)}},[a]),un=(0,c.useCallback)(async(i,u,d)=>{let b=!!i.locked;if(b===u)return!0;i.locked=u,a(),d&&(d.disabled=!0);try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:u})}),k=await y.json().catch(()=>({}));return!y.ok||k?.ok===!1?(i.locked=b,a(),y.status!==401&&alert(`${o("sessions.lockFailed")}: ${k?.error??y.status}`),!1):(i.locked=!!k.locked,a(),!0)}catch(y){return i.locked=b,a(),alert(`${o("sessions.lockFailed")}: ${y}`),!1}finally{d&&(d.disabled=!1)}},[a]),mn=(0,c.useCallback)(async(i,u)=>{if(ve.current.has(i.sessionId)||!confirm(ss(i)))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b?.ok===!1?(d.status!==401&&alert(`${o("sessions.restartFailed")}: ${b?.message??b?.error??d.status}`),!1):(ve.current.add(i.sessionId),window.setTimeout(()=>ve.current.delete(i.sessionId),5e3),!0)}catch(d){return alert(`${o("sessions.restartFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),Ms=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(alert(`${o("sessions.resumeFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.resumeFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),As=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(d.status!==401&&alert(`${o("sessions.create.startFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.create.startFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),gn=(0,c.useCallback)(i=>{_e({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),d=await u.json().catch(()=>({}));if(!u.ok||d?.ok===!1){let y=String(d?.error??u.status),k=y==="not_found_yet"||y==="not_found";_e(h=>h?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:y,stale:k}:h);return}let b=Array.isArray(d.messages)?d.messages:[];_e(y=>y?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:b,ownerOpenId:d.ownerOpenId}:y)}catch(u){_e(d=>d?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(u)}:d)}})()},[]),Ls=(0,c.useCallback)(i=>{if(!Ge())return;let u=rn(i);if(!u){Ae(i.sessionId);return}I({sessionId:i.sessionId,url:u,loading:!1})},[]),Ps=(0,c.useCallback)((i,u)=>{Wn(i,u)},[]),Bs=(0,c.useCallback)(async()=>{let i=[...p];if(i.length===0||!confirm(o("sessions.closeBulkConfirm",{count:i.length})))return;Ne({done:0,total:i.length});let u=0,d=0,b=[],y=[...i];async function k(){for(;y.length;){let h=y.shift();try{let F=await fetch(`/api/sessions/${encodeURIComponent(h)}/close`,{method:"POST"}),z=await F.json().catch(()=>({}));if(!F.ok||z?.ok===!1)d+=1;else{let q=Dn(z);q&&b.push(on(q))}}catch{d+=1}finally{u+=1,Ne({done:u,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>k())),Ne(null),l(new Set),a(),d>0&&alert(`Failed: ${d}/${i.length}`),b.length>0&&alert(`\u26A0\uFE0F ${b.length}/${i.length} closed locally but left a residual requiring manual cleanup: ${b.join(", ")}`)},[a,p]),Os=(0,c.useCallback)(async i=>{let u=[...p].map(h=>Le.get(h)).filter(h=>!!h&&h.status!=="closed"&&!!h.locked!==i);if(u.length===0)return;oe({locked:i,done:0,total:u.length});let d=0,b=0,y=[...u];async function k(){for(;y.length;){let h=y.shift(),F=!!h.locked;try{let z=await fetch(`/api/sessions/${encodeURIComponent(h.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),q=await z.json().catch(()=>({}));!z.ok||q?.ok===!1?(b+=1,h.locked=F):h.locked=!!q.locked}catch{b+=1,h.locked=F}finally{d+=1,oe({locked:i,done:d,total:u.length})}}}await Promise.all(Array.from({length:Math.min(6,u.length)},()=>k())),oe(null),a(),b>0&&alert(`${o("sessions.lockFailed")}: ${b}/${u.length}`)},[a,Le,p]),$s=(0,c.useCallback)(()=>{let i=[...p].filter(d=>!!Le.get(d));if(i.length===0)return;let u=Ht(i);He(o("sessions.monitorRoomAdded",{added:u.added,total:u.total})),window.setTimeout(()=>He(null),1800)},[Le,p]),Ds=(0,c.useCallback)(async i=>{let u=Kn(i);if(!u)return;let d=En(u);if(d.length!==0){Xe(u),V(!0),ue(o("sessions.idleCleanupRunning"));try{let b=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:u,sessionIds:d.map(h=>h.sessionId)})}),y=await b.json().catch(()=>({}));if(!b.ok){b.status!==401&&alert(`${o("sessions.idleCleanupFailed")}: ${y?.error??b.status}`),ue("");return}l(h=>{let F=new Set(h);for(let z of y?.results??[])z?.ok&&z?.sessionId&&F.delete(String(z.sessionId));return F}),ue(o("sessions.idleCleanupDone",{closed:Number(y?.closed??0),failed:Number(y?.failed??0)}));let k=(y?.results??[]).filter(h=>h?.ok&&h?.residual).map(h=>on(h.residual));k.length>0&&alert(`\u26A0\uFE0F ${k.length} session(s) closed locally but left a residual requiring manual cleanup: ${k.join(", ")}`),a()}catch(b){alert(`${o("sessions.idleCleanupFailed")}: ${b}`),ue("")}finally{V(!1)}}},[En,a]),Hs=i=>{let u=bt(i)??"board";u!==E&&(M(u),wt(ae(),u))},_s=(i,u)=>{_(d=>{let b=d.indexOf(i),y=b+u;if(b<0||y<0||y>=d.length)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),On(ae(),k),k})},Ks=(i,u)=>{i!==u&&_(d=>{let b=d.indexOf(i),y=d.indexOf(u);if(b<0||y<0)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),On(ae(),k),k})},Fs=(0,c.useMemo)(()=>({rows:le,groupBy:H,teams:W,teamsLoaded:S,teamKey:te,teamBoardData:X.data,teamBoardKey:X.key}),[H,te,W,S,le,X.data,X.key]),Us=en?Le.get(en)??null:null,Pn=(0,c.useMemo)(()=>S?W.length?W.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[W,S]),js=!S||W.length===0,ut=W.some(i=>i.key===te)?te:Pn[0]?.value??"",zs=Pn.find(i=>i.value===ut)?.label??o("sessions.kanban.groupTeam"),Gs=(0,c.useCallback)(()=>{Re.current+=1,ne(!1),me(null)},[]),mt=(0,c.useCallback)(async()=>{let i=Re.current+1;Re.current=i,me({bots:[],loading:!0}),ne(!0);try{let u=await os();if(Re.current!==i)return;me({bots:u})}finally{Re.current===i&&ne(!1)}},[]),Js=(0,c.useCallback)(async()=>{let i=window.prompt(o("sessions.debugTerminalPrompt"),"");if(i===null)return;let u=i.trim(),d=window.open("about:blank","_blank");d&&(d.opener=null);try{let b=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u?{workingDir:u}:{})}),y=await b.json().catch(()=>({}));if(!b.ok||y?.ok===!1||!y?.url){d?.close(),b.status!==401&&alert(`${o("sessions.debugTerminalFail")}: ${y?.error??b.status}`);return}d?d.location.href=y.url:window.open(y.url,"_blank","noopener")}catch(b){d?.close(),alert(`${o("sessions.debugTerminalFail")}: ${b}`)}},[]);return(0,c.useEffect)(()=>{let i=()=>{Ot()&&Pe.authed&&mt()};return i(),window.addEventListener(Hn,i),()=>window.removeEventListener(Hn,i)},[]),(0,n.jsxs)("section",{className:"page sessions-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{className:"sessions-heading-main",children:[(0,n.jsx)("p",{className:"eyebrow",children:o("nav.sessions")}),(0,n.jsx)("h1",{children:o("sessions.title")}),(0,n.jsxs)("div",{className:"sessions-view-controls",children:[(0,n.jsx)("div",{className:"segmented sessions-view-toggle",role:"group","aria-label":o("sessions.viewMode"),children:[["kanban",o("sessions.viewKanban")],["board",o("sessions.viewBoard")],["topics",o("sessions.viewTopics")],["table",o("sessions.viewTable")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-view":i,className:E===i?"active":void 0,"aria-pressed":E===i,onClick:()=>Hs(i),children:u},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${E==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":E!=="kanban",children:[["flow",o("sessions.kanban.groupFlow")],["team",o("sessions.kanban.groupTeam")],["bot",o("sessions.kanban.groupBot")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-groupby":i,className:H===i?"active":void 0,"aria-pressed":H===i,onClick:()=>{de(i),Tt(ae(),i)},children:u},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(E==="kanban"&&H==="team"&&S),children:fe}),(0,n.jsx)(sn,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(E==="kanban"&&H==="team"),disabled:js,label:zs,value:ut,options:Pn,onChange:i=>{if(W.some(u=>u.key===i)){se(i);try{window.localStorage.setItem($n,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[Ge()?(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=_t()},children:o("sessions.monitorRoom")}):null,Pe.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{Js()},children:o("sessions.debugTerminal")}):null,Pe.authed?(0,n.jsx)(Mt,{className:"page-primary-action create-session-btn",disabled:nn,onClick:()=>{mt()},children:o("sessions.create.button")}):null]})]}),(0,n.jsxs)("div",{className:"session-runtime-stats","aria-live":"polite",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:qe.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:qe.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:qe.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)(Eo,{chatOptions:Ke,filters:r,setFilters:m,idleCleanup:{busy:Qe,hours:xe,status:Nn,countForHours:i=>En(i).length,onRun:Ds}}),(0,n.jsx)(Mo,{selectedCount:p.size,lockDisabled:!at.some(i=>!i.locked),unlockDisabled:!at.some(i=>!!i.locked),closeProgress:Q,lockProgress:ie,monitorRoomText:Ie,onClear:()=>l(new Set),onClose:()=>{Bs()},onAddToMonitorRoom:$s,onLock:i=>{Os(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${we>0?" sessions-view-stage-enter":""}`,"data-view":E,"data-kanban-group":H,children:[(0,n.jsx)(Lo,{rows:le,selected:p,hidden:E!=="table",sortKey:g,sortDir:w,selectAllChecked:it,selectAllIndeterminate:xs,selectAllDisabled:tn.length===0,hiddenColumns:O,onToggleColumn:i=>{let u=!O.has(i),d=new Set(O);u?d.add(i):d.delete(i),Bn(ae(),Array.from(d)),P(d),u&&i===g&&(C("lastMessageAt"),v("desc"))},onResetColumns:()=>{P(new Set),Bn(ae(),[])},onOpen:i=>Ae(i.sessionId),onSelect:(i,u)=>l(d=>{let b=new Set(d);return u?b.add(i):b.delete(i),b}),onSelectAll:i=>l(u=>{let d=new Set(u);for(let b of tn)i?d.add(b.sessionId):d.delete(b.sessionId);return d}),onSort:i=>{g===i?v(w==="asc"?"desc":"asc"):(C(i),v(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))}}),(0,n.jsx)(Bo,{rows:ot,selected:p,hidden:E!=="board",order:A,animated:U,dragColId:x,dragOverCol:D,onAnimated:()=>j(!0),onMoveColumn:_s,onMoveColumnTo:Ks,onDragCol:$,onDragOverCol:Y,onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>Ae(i.sessionId),onHistory:gn,onLocate:i=>An(i),onRestart:(i,u)=>{mn(i,u)},onLock:(i,u,d)=>{un(i,u,d)},onClose:(i,u)=>{Ln(i,u)}}),(0,n.jsx)($o,{rows:le,relationRows:e,selected:p,hidden:E!=="topics",onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>Ae(i.sessionId),onHistory:gn,onLocate:i=>An(i),onRestart:(i,u)=>{mn(i,u)},onLock:(i,u,d)=>{un(i,u,d)},onClose:(i,u)=>{Ln(i,u)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:B,className:`sessions-kanban${H==="bot"?" kanban-mode-bot":""}`,hidden:E!=="kanban",children:E==="kanban"?(0,n.jsx)(ws,{host:R,...Fs,canRestartSession:Sn,getTeamChatIds:Rn,icons:{details:J.details,feishu:J.feishu,history:J.history,key:J.key,lock:J.lock,restart:J.restart,terminal:J.terminal,unlock:J.unlock},lockActionLabel:vn,sessionStatusText:an,onDetails:i=>Ae(String(i.sessionId)),onHistory:gn,onMoveRows:Es,onNeedTeamBoard:i=>{Rs(i)},onNeedTeams:()=>{Mn()},onOpenTerminal:Ge()?Ls:void 0,onOpenWritableTerminal:Ge()&&Cn()?Ps:void 0,onRename:(i,u)=>{let d=Ue.sessions.get(String(i.sessionId));d&&dt(d,u)},onRestart:(i,u)=>{let d=Ue.sessions.get(String(i.sessionId));d&&mn(d,u)},onTeamScope:i=>Se(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,u)=>{let d=Ue.sessions.get(String(i.sessionId));d&&un(d,!d.locked,u)},onToggleSelect:i=>l(u=>{let d=String(i.sessionId),b=new Set(u);return b.has(d)?b.delete(d):b.add(d),b}),selectedSessionIds:p}):null})]},we),(0,n.jsx)(jo,{row:Us,onClose:()=>Ae(null),locateSession:An,openHistory:gn,resumeSession:Ms,restartSession:mn,closeSession:Ln,setSessionLocked:un,startSession:As}),(0,n.jsx)(Ko,{state:f,onClose:()=>I(null),onRename:dt}),(0,n.jsx)(Ho,{state:xn,onClose:()=>_e(null)}),K?(0,cn.createPortal)((0,n.jsx)(zo,{dialog:K,state:re,onClose:Gs,onSuccess:i=>me(u=>u&&{...u,success:i})}),K):null]})}function Ha(e){return xt(e,(0,n.jsx)(Go,{}))}export{Ro as CliFilterGroup,$o as TopicGroupsView,Ha as renderSessionsPage};