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,22 +1,22 @@
1
- import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";import{a as E}from"./chunk-24ONYQMR.js";import{C as x,G as O,I as S,K as W,x as r,y as n,z as C}from"./chunk-F6KNPF4R.js";import"./chunk-7SZRL6FY.js";function z(t){let o=String(t??"unknown"),e=`sessions.status.${o}`,i=r(e);return i===e?o:i}function F(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function D(t){let o=String(t??"unknown");return`<span class="status status-${n(F(o))}">${n(z(o))}</span>`}function q(t){return W(t?.title)||String(t?.sessionId??"")}var A=14,G=49,K=18;function U(){let t=[...E.sessions.values()].filter(o=>typeof o?.sessionId=="string"&&o.sessionId&&o.status!=="closed").sort((o,e)=>Number(e.lastMessageAt??0)-Number(o.lastMessageAt??0));return[...new Set(t.map(o=>String(o.sessionId)))]}function j(t,o,e){let i=Math.max(0,Math.floor(e)),s=Math.max(1,t.width),m=Math.max(1,t.height),a=s/m,l=Math.max(1,o.width),p=Math.max(180,m-Math.max(0,o.top)-K);if(i<=0)return{columns:1,rows:0,frameWidth:Math.floor(l),frameHeight:Math.floor(l/a),ratio:a};let d=null;for(let u=1;u<=i;u+=1){let b=Math.ceil(i/u),f=(l-A*(u-1))/u,L=(p-A*(b-1)-G*b)/b;if(f<=0||L<=0)continue;let h=Math.max(1,Math.min(f,L*a)),M=h/a,c=h*M;(!d||c>d.score)&&(d={columns:u,rows:b,frameWidth:h,frameHeight:M,score:c})}if(!d){let u=Math.min(i,Math.max(1,Math.floor(l/220))),b=Math.ceil(i/u),f=Math.max(1,(l-A*(u-1))/u);return{columns:u,rows:b,frameWidth:Math.floor(f),frameHeight:Math.floor(f/a),ratio:a}}return{columns:d.columns,rows:d.rows,frameWidth:Math.floor(d.frameWidth),frameHeight:Math.floor(d.frameHeight),ratio:a}}function J(t,o){let e=Math.max(1,Math.floor(t.width)),i=Math.max(1,Math.floor(t.height)),s=Math.max(1,o.width),m=Math.max(1,o.height),a=Math.min(1,s/e,m/i);return{width:e,height:i,scale:a}}function Q(t,o){return t?`frame:${T(t,o)??"none"}`:"missing"}function V(t,o){let e=E.sessions.get(t),i=o?et(t):"";if(!e)return`<div class="monitor-room-card-title">
1
+ import{a as T,b as I,d as N,e as P,f as _,g as q}from"./chunk-XJ7BGPJH.js";import{a as B}from"./chunk-OT6L6G7R.js";import{a as E}from"./chunk-QITAMHW6.js";import{C as x,G as O,I as S,K as W,x as r,y as n,z as C}from"./chunk-CK22743G.js";import"./chunk-CVNIMUPY.js";function F(t){let o=String(t??"unknown"),e=`sessions.status.${o}`,i=r(e);return i===e?o:i}function D(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function G(t){let o=String(t??"unknown");return`<span class="status status-${n(D(o))}">${n(F(o))}</span>`}function z(t){return W(t?.title)||String(t?.sessionId??"")}var A=14,K=49,U=18;function j(){let t=[...E.sessions.values()].filter(o=>typeof o?.sessionId=="string"&&o.sessionId&&o.status!=="closed").sort((o,e)=>Number(e.lastMessageAt??0)-Number(o.lastMessageAt??0));return[...new Set(t.map(o=>String(o.sessionId)))]}function J(t,o,e){let i=Math.max(0,Math.floor(e)),s=Math.max(1,t.width),m=Math.max(1,t.height),a=s/m,l=Math.max(1,o.width),p=Math.max(180,m-Math.max(0,o.top)-U);if(i<=0)return{columns:1,rows:0,frameWidth:Math.floor(l),frameHeight:Math.floor(l/a),ratio:a};let d=null;for(let u=1;u<=i;u+=1){let b=Math.ceil(i/u),f=(l-A*(u-1))/u,L=(p-A*(b-1)-K*b)/b;if(f<=0||L<=0)continue;let h=Math.max(1,Math.min(f,L*a)),M=h/a,c=h*M;(!d||c>d.score)&&(d={columns:u,rows:b,frameWidth:h,frameHeight:M,score:c})}if(!d){let u=Math.min(i,Math.max(1,Math.floor(l/220))),b=Math.ceil(i/u),f=Math.max(1,(l-A*(u-1))/u);return{columns:u,rows:b,frameWidth:Math.floor(f),frameHeight:Math.floor(f/a),ratio:a}}return{columns:d.columns,rows:d.rows,frameWidth:Math.floor(d.frameWidth),frameHeight:Math.floor(d.frameHeight),ratio:a}}function Q(t,o){let e=Math.max(1,Math.floor(t.width)),i=Math.max(1,Math.floor(t.height)),s=Math.max(1,o.width),m=Math.max(1,o.height),a=Math.min(1,s/e,m/i);return{width:e,height:i,scale:a}}function V(t,o){return t?`frame:${T(t,o)??"none"}`:"missing"}function X(t,o){let e=E.sessions.get(t),i=o?nt(t):"";if(!e)return`<div class="monitor-room-card-title">
2
2
  <strong>${n(t)}</strong>
3
3
  <span>${n(r("monitorRoom.missing"))}</span>
4
- </div>${i}`;let s=q(e),m=T(e),a=S(e),l=m?nt(t):"";return`<div class="monitor-room-card-title">
4
+ </div>${i}`;let s=z(e),m=T(e),a=S(e),l=m?rt(t):"";return`<div class="monitor-room-card-title">
5
5
  ${x({name:a,larkAppId:e.larkAppId,size:"sm"})}
6
6
  <span class="monitor-room-card-meta">
7
7
  <strong title="${n(String(e.title??s))}">${n(s)}</strong>
8
- <small>${n(a)} \xB7 ${D(e.status)} \xB7 ${n(r("monitorRoom.updated",{time:C(e.lastMessageAt)}))}</small>
8
+ <small>${n(a)} \xB7 ${G(e.status)} \xB7 ${n(r("monitorRoom.updated",{time:C(e.lastMessageAt)}))}</small>
9
9
  </span>
10
10
  </div>
11
11
  <div class="monitor-room-card-actions">
12
12
  ${l}
13
13
  ${i}
14
- </div>`}function X(t){let o=E.sessions.get(t);if(!o)return`<div class="monitor-room-placeholder">${n(r("monitorRoom.missingHelp"))}</div>`;let e=T(o);return e?`<iframe class="monitor-room-frame" src="${n(e)}" allow="clipboard-read; clipboard-write"></iframe>`:`<div class="monitor-room-placeholder">
14
+ </div>`}function Y(t){let o=E.sessions.get(t);if(!o)return`<div class="monitor-room-placeholder">${n(r("monitorRoom.missingHelp"))}</div>`;let e=T(o);return e?`<iframe class="monitor-room-frame" src="${n(e)}" allow="clipboard-read; clipboard-write"></iframe>`:`<div class="monitor-room-placeholder">
15
15
  <b>${n(r("monitorRoom.terminalUnavailable"))}</b>
16
16
  <span>${n(r("monitorRoom.terminalUnavailableHelp"))}</span>
17
- </div>`}function Y(t,o,e){let i=t.get(e);if(i)return i;let s=document.createElement("article");s.className="monitor-room-card",s.dataset.id=e;let m=document.createElement("header");m.className="monitor-room-card-head";let a=document.createElement("div");a.className="monitor-room-frame-wrap",s.appendChild(m),s.appendChild(a),o.appendChild(s);let l={article:s,head:m,frameWrap:a,bodyKey:""};return t.set(e,l),l}function Z(t,o,e){t.bodyKey!==e&&(t.frameWrap.innerHTML=X(o),t.bodyKey=e)}function tt(t){return`<h2>${n(r(t?"monitorRoom.autoEmptyTitle":"monitorRoom.emptyTitle"))}</h2>
17
+ </div>`}function Z(t,o,e){let i=t.get(e);if(i)return i;let s=document.createElement("article");s.className="monitor-room-card",s.dataset.id=e;let m=document.createElement("header");m.className="monitor-room-card-head";let a=document.createElement("div");a.className="monitor-room-frame-wrap",s.appendChild(m),s.appendChild(a),o.appendChild(s);let l={article:s,head:m,frameWrap:a,bodyKey:""};return t.set(e,l),l}function tt(t,o,e){t.bodyKey!==e&&(t.frameWrap.innerHTML=Y(o),t.bodyKey=e)}function ot(t){return`<h2>${n(r(t?"monitorRoom.autoEmptyTitle":"monitorRoom.emptyTitle"))}</h2>
18
18
  <p>${n(r(t?"monitorRoom.autoEmptyHelp":"monitorRoom.emptyHelp"))}</p>
19
- <a class="btn-link" href="#/sessions">${n(r("monitorRoom.openSessions"))}</a>`}function ot(t,o){let e={width:window.innerWidth,height:window.innerHeight},i=o.getBoundingClientRect(),s=Number(o.dataset.count||"0"),m=j(e,{width:i.width,top:i.top},s);t.style.setProperty("--monitor-room-viewport-ratio",`${e.width} / ${e.height}`),s>0?o.style.gridTemplateColumns=`repeat(${m.columns}, minmax(0, ${m.frameWidth}px))`:o.style.gridTemplateColumns="",t.querySelectorAll(".monitor-room-frame-wrap").forEach(a=>{let l=a.querySelector(".monitor-room-frame");if(!l)return;let p=a.getBoundingClientRect(),d=J(e,{width:p.width,height:p.height});l.style.width=`${d.width}px`,l.style.height=`${d.height}px`,l.style.transform=`scale(${d.scale})`})}function et(t){return`<button type="button" class="card-act" data-remove="${n(t)}" title="${n(r("monitorRoom.remove"))}" aria-label="${n(r("monitorRoom.remove"))}">\xD7</button>`}function nt(t){return`<button type="button" class="card-act" data-popout="${n(t)}" title="${n(r("monitorRoom.openTerminal"))}" aria-label="${n(r("monitorRoom.openTerminal"))}">\u2197</button>`}function rt(){return`<section class="page monitor-room-page">
19
+ <a class="btn-link" href="#/sessions">${n(r("monitorRoom.openSessions"))}</a>`}function et(t,o){let e={width:window.innerWidth,height:window.innerHeight},i=o.getBoundingClientRect(),s=Number(o.dataset.count||"0"),m=J(e,{width:i.width,top:i.top},s);t.style.setProperty("--monitor-room-viewport-ratio",`${e.width} / ${e.height}`),s>0?o.style.gridTemplateColumns=`repeat(${m.columns}, minmax(0, ${m.frameWidth}px))`:o.style.gridTemplateColumns="",t.querySelectorAll(".monitor-room-frame-wrap").forEach(a=>{let l=a.querySelector(".monitor-room-frame");if(!l)return;let p=a.getBoundingClientRect(),d=Q(e,{width:p.width,height:p.height});l.style.width=`${d.width}px`,l.style.height=`${d.height}px`,l.style.transform=`scale(${d.scale})`})}function nt(t){return`<button type="button" class="card-act" data-remove="${n(t)}" title="${n(r("monitorRoom.remove"))}" aria-label="${n(r("monitorRoom.remove"))}">\xD7</button>`}function rt(t){return`<button type="button" class="card-act" data-popout="${n(t)}" title="${n(r("monitorRoom.openTerminal"))}" aria-label="${n(r("monitorRoom.openTerminal"))}">\u2197</button>`}function it(){return`<section class="page monitor-room-page">
20
20
  <div class="page-heading">
21
21
  <div class="monitor-room-heading-main">
22
22
  <p class="eyebrow">${n(r("monitorRoom.eyebrow"))}</p>
@@ -36,7 +36,7 @@ import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";impor
36
36
  </div>
37
37
  </div>
38
38
  <div id="monitor-room-grid" class="monitor-room-grid"></div>
39
- </section>`}function it(t,o){let e=E.sessions.get(t),i=e?q(e):t,s=e?S(e):"";return`<div class="monitor-room-popover-backdrop">
39
+ </section>`}function st(t,o){let e=E.sessions.get(t),i=e?z(e):t,s=e?S(e):"";return`<div class="monitor-room-popover-backdrop">
40
40
  <section class="monitor-room-popover" role="dialog" tabindex="-1" aria-label="${n(r("monitorRoom.openTerminal"))}">
41
41
  <header class="monitor-room-popover-head">
42
42
  <div class="monitor-room-card-title">
@@ -50,4 +50,4 @@ import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";impor
50
50
  </header>
51
51
  <iframe class="monitor-room-popover-frame" src="${n(o)}" allow="clipboard-read; clipboard-write"></iframe>
52
52
  </section>
53
- </div>`}function ct(t){t.innerHTML=rt();let o=t.querySelector("#monitor-room-grid"),e=t.querySelector("#monitor-room-summary"),i=t.querySelector("#monitor-room-clear"),s=t.querySelector("#monitor-room-auto-active"),m=null;function a(h){let M=T(E.sessions.get(h));if(!M)return;m?.(),t.insertAdjacentHTML("beforeend",it(h,M));let c=t.querySelector(".monitor-room-popover-backdrop"),g=c.querySelector(".monitor-room-popover"),k=c.querySelector("[data-popover-close]"),$=!1,y=()=>{$||($=!0,window.removeEventListener("keydown",v),c.removeEventListener("pointerdown",H),c.removeEventListener("focusout",R),k.removeEventListener("click",y),c.remove(),m===y&&(m=null))},v=w=>{w.key==="Escape"&&(w.preventDefault(),y())},H=w=>{g.contains(w.target)||y()},R=()=>{window.setTimeout(()=>{let w=document.activeElement;(!w||!c.contains(w))&&y()},0)};m=y,window.addEventListener("keydown",v),c.addEventListener("pointerdown",H),c.addEventListener("focusout",R),k.addEventListener("click",y),g.focus()}let l=new Map,p=null,d=0,u=null;function b(){d||(d=requestAnimationFrame(()=>{d=0,ot(t,o)}))}function f(){let h=B(),M=P(),c=h.length===0&&M,g=c?U():h,k=!c,$=g.filter(v=>!!T(E.sessions.get(v))).length;s.checked=M,e.textContent=c&&g.length?r("monitorRoom.autoSummary",{count:g.length,live:$}):g.length?r("monitorRoom.summary",{count:g.length,live:$}):r("monitorRoom.emptySummary"),i.disabled=h.length===0,o.dataset.count=String(g.length),g.length>0&&p&&(p.remove(),p=null);let y=new Set(g);for(let[v,H]of l)y.has(v)||(H.article.remove(),l.delete(v));g.length===0?(p||(p=document.createElement("div"),p.className="monitor-room-empty",o.appendChild(p)),p.innerHTML=tt(c)):g.forEach((v,H)=>{let R=Y(l,o,v);R.article.style.order=String(H),R.head.innerHTML=V(v,k);let w=Q(E.sessions.get(v));Z(R,v,w)}),b()}o.addEventListener("click",h=>{let M=h.target.closest("button[data-popout]");if(M?.dataset.popout){a(M.dataset.popout);return}let c=h.target.closest("button[data-remove]");c?.dataset.remove&&(I(c.dataset.remove),f())}),i.addEventListener("click",()=>{confirm(r("monitorRoom.clearConfirm"))&&(N(),f())}),s.addEventListener("change",()=>{_(s.checked),f()});let L=E.on(f);return window.addEventListener("resize",b),typeof ResizeObserver<"u"&&(u=new ResizeObserver(b),u.observe(t),u.observe(o)),f(),O().then(f),()=>{m?.(),window.removeEventListener("resize",b),u&&u.disconnect(),d&&cancelAnimationFrame(d),L()}}export{J as monitorRoomFrameGeometry,j as monitorRoomGridGeometry,Q as monitorRoomPanelBodyKey,ct as renderMonitorRoomPage};
53
+ </div>`}function ut(t){t.innerHTML=it();let o=t.querySelector("#monitor-room-grid"),e=t.querySelector("#monitor-room-summary"),i=t.querySelector("#monitor-room-clear"),s=t.querySelector("#monitor-room-auto-active"),m=null;function a(h){let M=T(E.sessions.get(h));if(!M)return;m?.(),t.insertAdjacentHTML("beforeend",st(h,M));let c=t.querySelector(".monitor-room-popover-backdrop"),g=c.querySelector(".monitor-room-popover"),k=c.querySelector("[data-popover-close]"),$=!1,y=()=>{$||($=!0,window.removeEventListener("keydown",v),c.removeEventListener("pointerdown",H),c.removeEventListener("focusout",R),k.removeEventListener("click",y),c.remove(),m===y&&(m=null))},v=w=>{w.key==="Escape"&&(w.preventDefault(),y())},H=w=>{g.contains(w.target)||y()},R=()=>{window.setTimeout(()=>{let w=document.activeElement;(!w||!c.contains(w))&&y()},0)};m=y,window.addEventListener("keydown",v),c.addEventListener("pointerdown",H),c.addEventListener("focusout",R),k.addEventListener("click",y),g.focus()}let l=new Map,p=null,d=0,u=null;function b(){d||(d=requestAnimationFrame(()=>{d=0,et(t,o)}))}function f(){let h=I(),M=_(),c=h.length===0&&M,g=c?j():h,k=!c,$=g.filter(v=>!!T(E.sessions.get(v))).length;s.checked=M,e.textContent=c&&g.length?r("monitorRoom.autoSummary",{count:g.length,live:$}):g.length?r("monitorRoom.summary",{count:g.length,live:$}):r("monitorRoom.emptySummary"),i.disabled=h.length===0,o.dataset.count=String(g.length),g.length>0&&p&&(p.remove(),p=null);let y=new Set(g);for(let[v,H]of l)y.has(v)||(H.article.remove(),l.delete(v));g.length===0?(p||(p=document.createElement("div"),p.className="monitor-room-empty",o.appendChild(p)),p.innerHTML=ot(c)):g.forEach((v,H)=>{let R=Z(l,o,v);R.article.style.order=String(H),R.head.innerHTML=X(v,k);let w=V(E.sessions.get(v));tt(R,v,w)}),b()}o.addEventListener("click",h=>{let M=h.target.closest("button[data-popout]");if(M?.dataset.popout){a(M.dataset.popout);return}let c=h.target.closest("button[data-remove]");c?.dataset.remove&&(N(c.dataset.remove),f())}),i.addEventListener("click",async()=>{await B({title:"\u6E05\u7A7A",message:r("monitorRoom.clearConfirm"),danger:!0})&&(P(),f())}),s.addEventListener("change",()=>{q(s.checked),f()});let L=E.on(f);return window.addEventListener("resize",b),typeof ResizeObserver<"u"&&(u=new ResizeObserver(b),u.observe(t),u.observe(o)),f(),O().then(f),()=>{m?.(),window.removeEventListener("resize",b),u&&u.disconnect(),d&&cancelAnimationFrame(d),L()}}export{Q as monitorRoomFrameGeometry,J as monitorRoomGridGeometry,V as monitorRoomPanelBodyKey,ut as renderMonitorRoomPage};
@@ -0,0 +1,2 @@
1
+ import{c as G,d as f,j as _,m as H,n as T,o as D,p as A}from"./chunk-5QX4OYOR.js";import{d as k}from"./chunk-RHVFZC5Z.js";import"./chunk-QITAMHW6.js";import"./chunk-CK22743G.js";import{c as U}from"./chunk-XVIXNQGC.js";import{c as $,d as Y,e as K}from"./chunk-CVNIMUPY.js";var g=$(Y(),1);var e=$(K(),1);function b(n){let s=Number(n);return!Number.isFinite(s)||s<=0?"-":s>=1024**3?`${(s/1024**3).toFixed(1)} GiB`:s>=1024**2?`${(s/1024**2).toFixed(0)} MiB`:`${Math.max(1,Math.round(s/1024))} KiB`}function N(n){let s=Number(n);return Number.isFinite(s)?`${s.toFixed(1)}%`:"-"}function S(n,s){return s?N(n):"-"}function q(n){return n?.cpuReady!==!1}function d(n){let s=Number(n);return Number.isFinite(s)?String(s):"-"}function E(n){let s=Number(n);if(!Number.isFinite(s)||s<0)return"-";if(s===0)return"0s";if(s<6e4)return`${Math.max(1,Math.floor(s/1e3))}s`;let r=Math.floor(s/6e4);if(r<60)return`${Math.max(1,r)}m`;let t=Math.floor(r/60),o=r%60;return o?`${t}h ${o}m`:`${t}h`}function Z(n){return n==="fresh"||n==="stale"||n==="unsupported"?n:"unknown"}function j(n){return n?`${n.botName||"-"} \xB7 ${n.title||n.sessionId}`:"-"}function W(n,s){return s==="cpu"?Number(n.current?.cpu1mPct??n.current?.cpuPct??0):s==="rss"?Number(n.current?.rssBytes??0):s==="growth"?Number(n.current?.rssGrowth5mBytes??0):s==="bot"?n.botName??"":n.status??""}function ee(n,s){return[...n].sort((r,t)=>{let o=W(r,s),u=W(t,s);return typeof o=="number"&&typeof u=="number"?u-o||r.sessionId.localeCompare(t.sessionId):String(o).localeCompare(String(u))||r.sessionId.localeCompare(t.sessionId)})}function V(n,s){return s==="bytes"?b(n):N(n)}function F(n,s,r){let t=(n??[]).filter(Number.isFinite);if(t.length<2)return r("monitoring.chartNoData");let o=t[0],u=Number.isFinite(s)?Number(s):Date.now(),a=Math.max(0,u-o),m=Math.max(1,Math.round(a/6e4));if(m<60)return r("monitoring.chartMinutesAgo",{value:m});let p=Math.round(m/60);return p<48?r("monitoring.chartHoursAgo",{value:p}):r("monitoring.chartDaysAgo",{value:Math.round(p/24)})}function C(n){let s=(n??[]).filter(Number.isFinite);return s.length?s[s.length-1]:void 0}function R({values:n,timestamps:s,unit:r="pct",startLabel:t,endLabel:o,emptyLabel:u,className:a}){let m=(n??[]).filter(Number.isFinite),p=m.length?Math.min(...m):0,x=m.length?Math.max(...m):0,w=x-p,c=m.length>1?m.map((L,i)=>{let l=i/(m.length-1)*100,h=w>0?100-(L-p)/w*100:50;return`${l},${h}`}).join(" "):"",P=c?`0,100 ${c} 100,100`:"",B=c?c.split(" "):[],v=B.length?B[B.length-1].split(",").map(Number):null;return(0,e.jsxs)("div",{className:["resource-chart",a].filter(Boolean).join(" "),children:[(0,e.jsxs)("div",{className:"resource-chart-y","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length?V(x,r):"-"}),(0,e.jsx)("span",{children:m.length?V(p,r):"-"})]}),(0,e.jsxs)("div",{className:"resource-chart-plot",children:[(0,e.jsxs)("div",{className:"resource-spark-wrap",children:[(0,e.jsxs)("svg",{className:"resource-spark",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-label":m.length>1?void 0:u,children:[(0,e.jsx)("line",{x1:"0",y1:"12",x2:"100",y2:"12",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"50",x2:"100",y2:"50",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"88",x2:"100",y2:"88",className:"resource-grid-line"}),P?(0,e.jsx)("polygon",{className:"resource-spark-area",points:P}):null,c?(0,e.jsx)("polyline",{points:c}):null]}),v&&Number.isFinite(v[0])&&Number.isFinite(v[1])?(0,e.jsx)("span",{className:"resource-spark-dot","aria-hidden":"true",style:{left:`${v[0]}%`,top:`${v[1]}%`}}):null]}),(0,e.jsxs)("div",{className:"resource-chart-x","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length>1?t:u}),(0,e.jsx)("span",{children:m.length>1?o:""})]})]})]})}function I(n){let s=r=>r instanceof Element&&!!r.closest(".ui-info-tip");return(0,e.jsx)("section",{className:"metric-card","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:r=>{s(r.target)||n.onOpen()},onKeyDown:r=>{s(r.target)||r.key!=="Enter"&&r.key!==" "||(r.preventDefault(),n.onOpen())},children:n.children})}function M(n){return(0,e.jsx)("article",{className:"resource-trend-cell","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:n.onOpen,onKeyDown:s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),n.onOpen())},children:n.children})}function te(n){let s=k(),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=r.current;if(t)if(n.detail){if(!t.open)try{t.showModal()}catch{}}else t.open&&t.close()},[n.detail]),(0,g.useEffect)(()=>()=>{let t=r.current;t?.open&&t.close()},[]),(0,e.jsx)("dialog",{ref:r,className:"resource-detail-modal",onCancel:t=>{t.preventDefault(),n.onClose()},onClose:n.onClose,onClick:t=>{t.target===t.currentTarget&&n.onClose()},children:n.detail?(0,e.jsxs)("article",{className:"resource-detail-modal-card",children:[(0,e.jsxs)("header",{className:"resource-detail-modal-head",children:[(0,e.jsx)("h3",{children:n.detail.title}),(0,e.jsx)("button",{type:"button",className:"resource-detail-modal-close","aria-label":s("monitoring.modalClose"),title:s("monitoring.modalClose"),onClick:n.onClose})]}),(0,e.jsxs)("div",{className:"resource-detail-modal-body",children:[(0,e.jsxs)("section",{className:"resource-detail-summary",children:[(0,e.jsx)("strong",{children:n.detail.value}),(0,e.jsx)("p",{children:n.detail.detail})]}),n.detail.chart?(0,e.jsx)(R,{className:"resource-detail-chart",values:n.detail.chart.values,timestamps:n.detail.chart.timestamps,unit:n.detail.chart.unit,startLabel:n.detail.chart.startLabel,endLabel:n.detail.chart.endLabel,emptyLabel:n.detail.chart.emptyLabel}):(0,e.jsx)("p",{className:"resource-detail-empty",children:n.detail.emptyText})]})]}):null})}function ne({reasons:n}){return(0,e.jsx)("span",{className:"resource-reasons",children:(n??[]).join(", ")||"-"})}function y({label:n,value:s,tone:r}){return(0,e.jsxs)("span",{className:`resource-pill${r?` ${r}`:""}`,children:[(0,e.jsx)("span",{children:n}),(0,e.jsx)("b",{children:s})]})}function se({bots:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list",children:n.length?n.map(t=>{let o=t.runtime?.sessions,u=t.runtime?.daemonStatus??t.daemonStatus??"unknown",a=u==="online"?"ok":u==="offline"?"off":"warn";return(0,e.jsxs)(T,{className:"resource-list-item resource-bot-item",children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.botName,children:t.botName}),(0,e.jsxs)("span",{children:[r("monitoring.sessionsCount")," ",d(o?.total??t.sessions?.count)]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.daemon"),value:u,tone:a}),(0,e.jsx)(y,{label:r("monitoring.working"),value:d(o?.working),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.starting"),value:d(o?.starting)}),(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.total?.cpuPct,s)}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.total?.rssBytes)})]})})]},t.larkAppId)}):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function re({sessions:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell resource-session-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list resource-session-list",children:n.length?n.map(t=>(0,e.jsxs)(T,{className:`resource-list-item resource-session-item${t.tracked?" is-tracked":""}`,children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.title||t.sessionId,children:t.title||t.sessionId}),(0,e.jsxs)("span",{title:t.sessionId,children:[t.botName," \xB7 ",t.sessionId]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.current?.cpu1mPct??t.current?.cpuPct,s),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.current?.rssBytes)}),(0,e.jsx)(y,{label:r("monitoring.growth"),value:b(t.current?.rssGrowth5mBytes)}),(0,e.jsx)(y,{label:r("monitoring.confidence"),value:t.confidence??"unknown",tone:t.tracked?"ok":void 0}),(0,e.jsxs)("span",{className:"resource-pill resource-rank-pill",children:[(0,e.jsx)("span",{children:r("monitoring.rank")}),(0,e.jsx)(ne,{reasons:t.rankReasons})]})]})})]},t.sessionId)):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function oe({current:n}){let s=k(),r=n.runtime,t=q(n),o=Z(r?.sampleHealth?.status),u=r?.daemons?.total,a=r?.daemons?.online,m=r?.daemons?.offline??(Number.isFinite(Number(u))&&Number.isFinite(Number(a))?Math.max(0,Number(u)-Number(a)):void 0),p=r?.sessions?.total,x=r?.sessions?.working,w=r?.sessions?.starting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.runtimeHealth")}),(0,e.jsx)("section",{className:"panel runtime-health-panel",children:(0,e.jsxs)("div",{className:"runtime-health-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sampleHealth")}),(0,e.jsx)("strong",{children:(0,e.jsx)("span",{className:`runtime-status-pill ${o}`,children:s(`monitoring.sample.${o}`)})}),(0,e.jsxs)("small",{children:[s("monitoring.sampleAge")," ",E(r?.sampleHealth?.ageMs)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.daemonHealth")}),(0,e.jsxs)("strong",{children:[d(a),"/",d(u)]}),(0,e.jsxs)("small",{children:[d(m)," ",s("monitoring.offline")]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sessionHealth")}),(0,e.jsx)("strong",{children:d(p)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(x)," \xB7 ",s("monitoring.starting")," ",d(w)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.resourcePressure")}),(0,e.jsx)("strong",{children:S(n.host?.cpuPct,t)}),(0,e.jsxs)("small",{children:[s("monitoring.hostMemory")," ",N(n.host?.memUsedPct)," \xB7 RSS ",b(n.botmux?.rssBytes)]})]})]})})]})}function ae({runtime:n}){let s=k(),r=n?.sessions,t=r?.longestRunning,o=r?.longestWaiting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.sessionPressure")}),(0,e.jsx)("section",{className:"panel runtime-session-pressure",children:(0,e.jsxs)("div",{className:"runtime-session-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.statusDistribution")}),(0,e.jsx)("strong",{children:d(r?.total)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(r?.working)," \xB7 ",s("monitoring.starting")," ",d(r?.starting)," \xB7 ",s("monitoring.waiting")," ",d(r?.waiting)," \xB7 ",s("monitoring.idle")," ",d(r?.idle)," \xB7 ",s("monitoring.unknown")," ",d(r?.unknown)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestRunning")}),(0,e.jsx)("strong",{children:j(t)}),(0,e.jsx)("small",{children:E(t?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestWaiting")}),(0,e.jsx)("strong",{children:j(o)}),(0,e.jsx)("small",{children:E(o?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.unattributedSessions")}),(0,e.jsx)("strong",{children:d(r?.unattributed)}),(0,e.jsx)("small",{children:s("monitoring.unattributedHint")})]})]})})]})}function ie({initialCurrent:n=null,initialHistory:s=null,poll:r=!0}={}){let t=k(),[o,u]=(0,g.useState)(n),[a,m]=(0,g.useState)(s),[p,x]=(0,g.useState)("cpu"),[w,c]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(!r)return;let l=!1;async function h(){try{let[z,J]=await Promise.all([fetch("/api/resources/current",{cache:"no-store"}),fetch("/api/resources/history?range=3h",{cache:"no-store"})]),[Q,X]=await Promise.all([z.json(),J.json()]);l||(u(Q),m(X))}catch{l||(u({supported:!1,reason:"fetch_failed",bots:[],sessions:[]}),m({supported:!1,bots:[],sessions:[]}))}}h();let O=window.setInterval(()=>{h()},1e4);return()=>{l=!0,window.clearInterval(O)}},[r]);let P=o!==null&&a!==null,B=(0,g.useMemo)(()=>ee(o?.sessions??[],p),[o?.sessions,p]),v=o?.supported!==!1,L=q(o),i={hostStartLabel:F(a?.host?.timestamps,o?.sampledAt,t),botmuxStartLabel:F(a?.botmux?.timestamps,o?.sampledAt,t),endLabel:t("monitoring.chartNow"),emptyLabel:t("monitoring.chartNoData")};return(0,e.jsxs)("section",{className:"page resource-page",children:[(0,e.jsx)("div",{className:"page-heading",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("monitoring.eyebrow")}),(0,e.jsx)("h1",{children:t("monitoring.runtimeTitle")})]})}),P?null:(0,e.jsx)(G,{label:t("common.loading")}),P?(0,e.jsxs)(e.Fragment,{children:[o?(0,e.jsx)(oe,{current:o}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block resource-pressure-block",children:[(0,e.jsx)(f,{title:t("monitoring.resourcePressure")}),(0,e.jsx)("section",{className:"panel resource-pressure",children:(0,e.jsxs)("div",{className:"resource-metrics runtime-pressure-grid",children:[(0,e.jsxs)(I,{label:t("monitoring.hostCpu"),onOpen:()=>c({title:t("monitoring.hostCpu"),value:S(o?.host?.cpuPct,L),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostCpu")}),(0,e.jsx)("strong",{children:S(o?.host?.cpuPct,L)}),(0,e.jsxs)("small",{children:["load ",Number(o?.host?.load1??0).toFixed(2)]})]}),(0,e.jsxs)(I,{label:t("monitoring.hostMemory"),onOpen:()=>c({title:t("monitoring.hostMemory"),value:N(o?.host?.memUsedPct),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostMemory")}),(0,e.jsx)("strong",{children:N(o?.host?.memUsedPct)}),(0,e.jsx)("small",{children:t("monitoring.memoryOnly")})]}),(0,e.jsxs)(I,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(o?.botmux?.rssBytes),detail:o?.botmuxBreakdown?`${t("monitoring.botmuxSelf")} ${b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0))}
2
+ ${t("monitoring.botmuxCli")} ${b(o.botmuxBreakdown.cli.rssBytes)}`:S(o?.botmux?.cpuPct,L),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsxs)("div",{className:"metric-label-with-help",children:[(0,e.jsx)("span",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(_,{label:t("monitoring.rssHelpLabel"),children:t("monitoring.rssHelp")})]}),(0,e.jsx)("strong",{children:b(o?.botmux?.rssBytes)}),o?.botmuxBreakdown&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxSelf")," ",b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0)),(0,e.jsxs)("span",{className:"metric-breakdown-detail",children:[" (",t("monitoring.botmuxDaemon")," ",b(o.botmuxBreakdown.daemon.rssBytes)," \xB7 ",t("monitoring.botmuxWorker")," ",b(o.botmuxBreakdown.worker.rssBytes),")"]})]}),(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxCli")," ",b(o.botmuxBreakdown.cli.rssBytes)]})]})]}),(0,e.jsxs)(I,{label:t("monitoring.trackedSessions"),onOpen:()=>c({title:t("monitoring.trackedSessions"),value:d(o?.rankings?.tracked?.length),detail:`${t("monitoring.currentSessions")} ${(o?.sessions??[]).length}`,emptyText:t("monitoring.trackedSessionHint")}),children:[(0,e.jsx)("span",{children:t("monitoring.trackedSessions")}),(0,e.jsx)("strong",{children:o?.rankings?.tracked?.length??0}),(0,e.jsxs)("small",{children:[t("monitoring.currentSessions")," ",(o?.sessions??[]).length]})]})]})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trends")}),(0,e.jsx)("section",{className:"panel resource-trends",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(0,e.jsxs)(M,{label:t("monitoring.trendHostCpu"),onOpen:()=>c({title:t("monitoring.trendHostCpu"),value:N(C(a?.host?.cpuPct)),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostCpu")}),(0,e.jsx)(R,{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendHostMemory"),onOpen:()=>c({title:t("monitoring.trendHostMemory"),value:N(C(a?.host?.memUsedPct)),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostMemory")}),(0,e.jsx)(R,{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendBotmuxCpu"),onOpen:()=>c({title:t("monitoring.trendBotmuxCpu"),value:N(C(a?.botmux?.cpuPct)),detail:t("monitoring.botRuntime"),chart:{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendBotmuxCpu")}),(0,e.jsx)(R,{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(C(a?.botmux?.rssBytes)),detail:t("monitoring.memoryOnly"),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(R,{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]})]})})]})]}):(0,e.jsx)("section",{className:"panel resource-unavailable",children:(0,e.jsxs)("div",{className:"resource-unavailable-card",children:[(0,e.jsx)("span",{className:"resource-unavailable-status","aria-hidden":"true"}),(0,e.jsxs)("div",{className:"resource-unavailable-copy",children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedKicker")}),(0,e.jsx)("h2",{children:t("monitoring.unsupportedTitle")}),(0,e.jsx)("p",{children:t("monitoring.unsupportedHint")})]}),(0,e.jsxs)("div",{className:"resource-unavailable-tags","aria-label":t("monitoring.unsupported"),children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedRuntimeOk")}),(0,e.jsx)("span",{children:t("monitoring.unsupportedResourceOnly")})]})]})}),o?(0,e.jsx)(ae,{runtime:o.runtime}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.botRuntime")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(se,{bots:o?.bots??[],cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.sessions"),children:(0,e.jsx)("div",{className:"resource-sortbar resource-sortbar-inline dashboard-toolbar",role:"group","aria-label":t("monitoring.sort"),children:(0,e.jsx)("div",{className:"segmented resource-sort-switch",children:["cpu","rss","growth","bot","status"].map(l=>(0,e.jsx)("button",{type:"button",className:p===l?"active":void 0,"aria-pressed":p===l,onClick:()=>x(l),children:t(`monitoring.sort.${l}`)},l))})})}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(re,{sessions:B,cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trackedSessionTrends")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(a?.sessions??[]).map(l=>{let h=`${l.botName} \xB7 ${l.title||l.sessionId}`,O=F(l.series?.timestamps,o?.sampledAt,t);return(0,e.jsxs)(M,{label:h,onOpen:()=>c({title:h,value:b(C(l.series?.rssBytes)),detail:l.sessionId,chart:{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{title:h,children:h}),(0,e.jsx)(R,{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]},l.sessionId)}),(a?.sessions??[]).length?null:(0,e.jsx)("div",{className:"empty",children:t("monitoring.noTrackedHistory")})]})})]})]}):null]}):null,(0,e.jsx)(te,{detail:w,onClose:()=>c(null)})]})}function ce(n){return U(n,(0,e.jsx)(ie,{}))}export{ie as MonitoringPage,re as SessionResourceTable,ce as renderMonitoringPage};
@@ -0,0 +1 @@
1
+ import{d as x}from"./chunk-RHVFZC5Z.js";import"./chunk-QITAMHW6.js";import"./chunk-CK22743G.js";import{c as p}from"./chunk-XVIXNQGC.js";import{c as g,d as S,e as w}from"./chunk-CVNIMUPY.js";var n=g(S(),1);var e=g(w(),1),u=78222186;function y(t){return(t/1048576).toFixed(0)}function T(){let t=x(),[i,a]=(0,n.useState)(null),[c,l]=(0,n.useState)(""),[m,h]=(0,n.useState)(!1),d=(0,n.useRef)(null),r=(0,n.useRef)(!1),v=()=>{d.current&&(clearTimeout(d.current),d.current=null)};async function f(){if(!r.current)try{let s=await fetch("/api/game/status");if(r.current)return;if(!s.ok){a({state:"absent",received:0,total:u});return}let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch{r.current||(d.current=setTimeout(()=>{f()},1500))}}(0,n.useEffect)(()=>(r.current=!1,f(),()=>{r.current=!0,v()}),[]);async function b(){v(),h(!0),a({state:"downloading",received:0,total:u});try{let s=await fetch("/api/game/download",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({proxy:c.trim()})});if(r.current)return;if(!s.ok)throw new Error(`HTTP ${s.status}`);let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch(s){if(r.current)return;a({state:"error",received:0,total:u,error:s instanceof Error?s.message:String(s)})}finally{r.current||h(!1)}}return i?.state==="ready"?(0,e.jsx)("div",{className:"office-frame-shell",children:(0,e.jsx)("iframe",{className:"office-game-frame",src:"/game/index.html",title:"HD2D Office",allow:"autoplay"})}):(0,e.jsx)(P,{status:i??{state:"absent",received:0,total:u},title:t("nav.office"),proxy:c,starting:m,onProxyChange:l,onStart:()=>{b()}})}function P(t){let i=t.status.total||u,a=(0,n.useMemo)(()=>i?Math.min(100,Math.round(t.status.received/i*100)):0,[t.status.received,i]),c=t.status.state==="downloading",l=t.status.state==="error";return(0,e.jsxs)("div",{style:{margin:"auto",textAlign:"center",maxWidth:440,padding:32,color:"var(--fg,#e6e6e6)"},children:[(0,e.jsx)("h1",{style:{fontSize:18,fontWeight:600,lineHeight:1.2,margin:"0 0 8px"},children:t.title}),(0,e.jsxs)("div",{style:{fontSize:13,opacity:.7,lineHeight:1.7,marginBottom:20},children:["\u628A\u6BCF\u4E2A\u4F1A\u8BDD\u53D8\u6210\u529E\u516C\u5BA4\u91CC\u7684\u4E00\u4E2A\u673A\u5668\u4EBA\uFF0C\u5B9E\u65F6\u6620\u5C04\u5C4F\u5E55\u72B6\u6001\u3002",(0,e.jsx)("br",{}),"\u9996\u6B21\u8FDB\u5165\u9700\u4E0B\u8F7D\u7EA6 ",y(i)," MB \u6E38\u620F\u8D44\u6E90\uFF08\u4EC5\u4E00\u6B21\uFF0C\u4E4B\u540E\u672C\u5730\u7F13\u5B58\uFF09\u3002"]}),l?(0,e.jsxs)("div",{style:{color:"#e06c75",fontSize:12,marginBottom:14},children:["\u4E0A\u6B21\u4E0B\u8F7D\u5931\u8D25\uFF1A",t.status.error??"\u672A\u77E5\u9519\u8BEF",(0,e.jsx)("br",{}),(0,e.jsx)("span",{style:{opacity:.7},children:"\u586B\u4EE3\u7406\u540E\u70B9\u91CD\u8BD5"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{background:"var(--surface-muted)",borderRadius:"var(--radius-lg)",height:10,overflow:"hidden",marginBottom:10},children:(0,e.jsx)("div",{style:{height:"100%",width:`${a}%`,background:"var(--accent)",transition:"width .3s"}})}),(0,e.jsxs)("div",{style:{fontSize:12,opacity:.7},children:["\u4E0B\u8F7D\u4E2D... ",y(t.status.received)," / ",y(i)," MB\uFF08",a,"%\uFF09"]})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("input",{id:"hd2d-proxy",className:"office-proxy-input",type:"text",value:t.proxy,onChange:m=>t.onProxyChange(m.currentTarget.value),placeholder:"HTTP \u4EE3\u7406\uFF08\u53EF\u9009\uFF0C\u5982 http://127.0.0.1:7890\uFF09"}),(0,e.jsx)("div",{style:{fontSize:11,opacity:.5,marginBottom:14,textAlign:"left"},children:"\u8FDE\u4E0D\u4E0A GitHub \u65F6\u586B\u4EE3\u7406\uFF08\u4EC5\u7528\u4E8E\u4E0B\u8F7D\u672C\u8D44\u6E90\uFF0C\u4F1A\u8BB0\u4F4F\uFF09\u3002\u7559\u7A7A\u8D70\u76F4\u8FDE/\u7CFB\u7EDF\u4EE3\u7406\u73AF\u5883\u53D8\u91CF\u3002"}),(0,e.jsxs)("button",{id:"hd2d-load",type:"button",className:"page-primary-action office-load-button",disabled:t.starting,onClick:t.onStart,children:[l?"\u91CD\u8BD5":"\u52A0\u8F7D\u529E\u516C\u5BA4","\uFF08\u7EA6 ",y(i)," MB\uFF09"]})]})]})}function B(t){let i={maxWidth:t.style.maxWidth,padding:t.style.padding,flex:t.style.flex,minHeight:t.style.minHeight,minWidth:t.style.minWidth,display:t.style.display,overflow:t.style.overflow};t.style.maxWidth="none",t.style.padding="0",t.style.flex="1 1 auto",t.style.minHeight="0",t.style.minWidth="0",t.style.display="flex",t.style.overflow="hidden";let a=p(t,(0,e.jsx)(T,{}));return()=>{a(),t.style.maxWidth=i.maxWidth,t.style.padding=i.padding,t.style.flex=i.flex,t.style.minHeight=i.minHeight,t.style.minWidth=i.minWidth,t.style.display=i.display,t.style.overflow=i.overflow}}export{B as renderOfficePage};
@@ -0,0 +1 @@
1
+ import{a as re,b as le}from"./chunk-5VRVJFQR.js";import{b as ae}from"./chunk-SZOB6VK2.js";import{b as I,d as M,e as E,f as L,g as ee,k as te,m as ne,n as se,o as oe,r as ie}from"./chunk-5QX4OYOR.js";import{b as q,d as A}from"./chunk-RHVFZC5Z.js";import"./chunk-QITAMHW6.js";import{B as j,C as x,G as V,I as T,J as Y,K as y,L as b,M as N,z as C}from"./chunk-CK22743G.js";import{c as G}from"./chunk-XVIXNQGC.js";import{c as _,d as ue,e as Q}from"./chunk-CVNIMUPY.js";var r=_(ue(),1);var e=_(Q(),1),pe=new Set(["working","analyzing","active"]),ce="botmux.overview.teamExpanded",ve="botmux.overview.activeSort",$=5,D=1,we=6,ge=7,B=24,he=4e3;function fe(){try{return window.localStorage.getItem(ce)==="1"}catch{return!1}}function Se(t){try{window.localStorage.setItem(ce,t?"1":"0")}catch{}}function be(t){return t==="attention"?"attention":"time"}function Ne(){try{return be(window.localStorage.getItem(ve))}catch{return"time"}}function Ae(t){try{window.localStorage.setItem(ve,t)}catch{}}function ke(t,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...t].sort((i,a)=>{let v=b(i)?0:1,w=b(a)?0:1;if(v!==w)return v-w;if(v===0){let c=N(i)-N(a);if(c!==0)return c}return o(i,a)}):[...t].sort(o)}function ye(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Me(t,s){let o=String(t??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Re(t){if(!t)return D*$;let s=window.getComputedStyle(t).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||$)*D}function Ce(t){let s=(0,r.useRef)(null),o=(0,r.useRef)(t);o.current=t;let[,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{s.current===null&&(s.current=Array(B).fill(o.current));let k=window.setInterval(()=>{let m=s.current;m&&(m.push(o.current),m.length>B&&m.shift(),i(u=>u+1))},he);return()=>window.clearInterval(k)},[]);let a=s.current??Array(B).fill(t),v=Math.min(...a),c=Math.max(...a)-v,f=100,l=32,d=4,R=a.map((k,m)=>{let u=m/(a.length-1)*f,p=c===0?l/2:l-d-(k-v)/c*(l-d*2);return`${u.toFixed(1)},${p.toFixed(1)}`}).join(" ");return{line:R,area:`0,${l} ${R} ${f},${l}`}}function xe({kind:t}){let s={viewBox:"0 0 24 24",width:18,height:18,fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0};return t==="need"?(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"}),(0,e.jsx)("path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0"})]}):t==="work"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M3 12h4l3 8 4-16 3 8h4"})}):t==="active"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"})}):(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("rect",{x:"4",y:"8",width:"16",height:"12",rx:"3"}),(0,e.jsx)("path",{d:"M12 8V4"}),(0,e.jsx)("circle",{cx:"12",cy:"3",r:"1"}),(0,e.jsx)("path",{d:"M9 14h.01M15 14h.01"})]})}function O(t){let{line:s,area:o}=Ce(t.value);return(0,e.jsxs)("article",{className:`stat-chip stat-chip--${t.tone}`,children:[(0,e.jsx)("span",{className:"stat-chip-icon",children:(0,e.jsx)(xe,{kind:t.tone})}),(0,e.jsxs)("div",{className:"stat-chip-body",children:[(0,e.jsxs)("b",{className:"stat-chip-value",children:[t.value,t.suffix?(0,e.jsx)("small",{className:"stat-chip-suffix",children:t.suffix}):null]}),(0,e.jsx)("span",{className:"stat-chip-label",children:t.label})]}),(0,e.jsxs)("svg",{className:"stat-chip-spark",viewBox:"0 0 100 32",preserveAspectRatio:"none","aria-hidden":"true",children:[(0,e.jsx)("polygon",{points:o}),(0,e.jsx)("polyline",{points:s,vectorEffect:"non-scaling-stroke"})]})]})}function Te({card:t}){let s=A(),o=j(t.larkAppId,t.brand),i=!t.online&&t.active.length===0,a=t.attention.length>0,v=t.busy.length>0,w=a?"warn":v?"busy":i?"off":"ok",c;if(a){let l=[...t.attention].sort((d,h)=>N(d)-N(h))[0];c=(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})," \xB7 ",b(l)??""]})}else if(v){let l=[...t.busy].sort((d,h)=>Number(h.lastMessageAt??0)-Number(d.lastMessageAt??0))[0];c=(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})}else i?c=s("overview.botOffline"):c=s("overview.botIdle");let f=a?(0,e.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):v?(0,e.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:t.busy.length})}):i?(0,e.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,e.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,e.jsxs)("article",{className:`mate${a?" mate-attn":""}${i?" mate-off":""}`,children:[o?(0,e.jsx)("a",{className:"mate-console",href:o,target:"_blank",rel:"noopener noreferrer","data-tip":s("overview.botConsole"),"aria-label":s("overview.botConsole"),children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,e.jsx)("path",{d:"M7 17 17 7M9 7h8v8"})})}):null,(0,e.jsxs)("div",{className:"mate-top",children:[(0,e.jsx)(I,{html:x({name:t.botName,larkAppId:t.larkAppId,avatarUrl:t.botAvatarUrl,dot:w})}),(0,e.jsxs)("div",{className:"mate-id",children:[(0,e.jsx)("b",{children:t.botName}),(0,e.jsx)("span",{className:"mate-role",children:t.cliId})]})]}),(0,e.jsx)("div",{className:"mate-task",children:c}),(0,e.jsxs)("div",{className:"mate-foot",children:[f,(0,e.jsx)("span",{children:t.lastActiveAt?s("overview.lastActive",{time:C(t.lastActiveAt)}):s("common.never")})]})]})}function Ie({session:t}){let s=A(),o=T(t),i=b(t)??"";return(0,e.jsxs)("a",{className:"attn-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"attn-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[i," \xB7 ",s("overview.waitingFor",{time:C(N(t))})]})]}),(0,e.jsx)("span",{className:"attn-action",children:s("strip.handle")})]})}function Ee({session:t}){let s=A(),o=T(t),i=String(t.status??"unknown");return(0,e.jsxs)("a",{className:"work-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"work-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[o," \xB7 ",Y(t)??t.cliId??"unknown"," \xB7 ",C(t.lastMessageAt)]})]}),(0,e.jsx)("span",{className:`status work-status status-${ye(i)}`,children:Me(i,s)})]})}function Le({schedule:t,timeZone:s}){let o=t.nextRunAt?new Date(t.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,e.jsxs)(se,{kind:"schedule",children:[(0,e.jsx)("span",{className:"sched-clock","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,e.jsx)("path",{d:"M12 7v5l3 2"})]})}),(0,e.jsxs)(oe,{children:[(0,e.jsx)("strong",{children:t.name??t.id}),(0,e.jsxs)("span",{children:[T(t)," \xB7 ",t.parsed?.display??""]})]}),(0,e.jsx)("span",{className:"overview-list-meta",children:(0,e.jsx)(te,{text:o,showPopover:!1,durationMs:2600})})]})}function Oe({mode:t,onModeChange:s}){let o=A(),i=o(t==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,e.jsx)(ie,{className:"overview-active-sort-menu",label:i,value:t,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function He(){let t=A(),s=(0,r.useRef)(null),[o,i]=(0,r.useState)(fe),[a,v]=(0,r.useState)(Ne),[w,c]=(0,r.useState)(D*$),[f,l]=(0,r.useState)(0),{sessions:d,schedules:h,scheduleTimeZone:R,schedulesAvailable:k,online:m}=q(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone,schedulesAvailable:n.schedulesAvailable,online:n.online}));(0,r.useEffect)(()=>{let n=0,g=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let U=Re(s.current);c(Z=>Z===U?Z:U)})};g();let P=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(g);return P&&s.current&&P.observe(s.current),window.addEventListener("resize",g),()=>{window.cancelAnimationFrame(n),P?.disconnect(),window.removeEventListener("resize",g)}},[]),(0,r.useEffect)(()=>{re().then(()=>l(n=>n+1)),V().then(()=>l(n=>n+1))},[]);let u=(0,r.useMemo)(()=>d.filter(n=>n.status!=="closed"),[d]),p=(0,r.useMemo)(()=>le(d),[d,f]),z=o?p:p.slice(0,w),S=(0,r.useMemo)(()=>u.filter(n=>b(n)),[u]),W=(0,r.useMemo)(()=>ke(S,a).slice(0,we),[S,a]),H=(0,r.useMemo)(()=>u.filter(n=>pe.has(String(n.status))).sort((n,g)=>Number(g.lastMessageAt??0)-Number(n.lastMessageAt??0)),[u]),F=H.slice(0,ge),X=(0,r.useMemo)(()=>p.filter(n=>n.online||n.active.length>0).length,[p]),J=(0,r.useMemo)(()=>h.filter(n=>n.nextRunAt).sort((n,g)=>Date.parse(n.nextRunAt)-Date.parse(g.nextRunAt)).slice(0,5),[h]),K=k&&J.length>0,de=()=>{i(n=>(Se(!n),!n))},me=n=>{v(n),Ae(n)};return(0,e.jsxs)("section",{className:"page hero-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{className:"overview-head",children:[(0,e.jsx)("p",{className:"eyebrow",children:t("app.subtitle")}),(0,e.jsx)("h1",{children:t("overview.title")}),(0,e.jsxs)("p",{className:"overview-subtitle",children:[(0,e.jsx)("span",{children:t("overview.headingSubtitle",{bots:X,needs:S.length})}),(0,e.jsxs)("span",{className:`overview-live${m?" is-online":" is-offline"}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),t(m?"overview.liveSync":"overview.syncOffline")]})]})]}),(0,e.jsxs)("div",{className:"page-heading-actions",children:[(0,e.jsx)("a",{className:"btn-link",href:"#/monitoring",children:t("nav.monitoring")}),(0,e.jsx)(ee,{className:"page-primary-action",onClick:()=>ae(),children:t("nav.createSession")})]})]}),(0,e.jsxs)("div",{className:"overview-stats",children:[(0,e.jsx)(O,{tone:"need",label:t("overview.attention"),value:S.length}),(0,e.jsx)(O,{tone:"work",label:t("overview.workingSessions"),value:H.length}),(0,e.jsx)(O,{tone:"active",label:t("overview.activeSessions"),value:u.length}),(0,e.jsx)(O,{tone:"online",label:t("overview.onlineBots"),value:X,suffix:`/ ${p.length}`})]}),(0,e.jsxs)("section",{className:"overview-block attention-section",children:[(0,e.jsx)(M,{title:t("overview.attention"),count:t("strip.pending",{count:S.length}),children:S.length>1?(0,e.jsx)(L,{children:(0,e.jsx)(Oe,{mode:a,onModeChange:me})}):null}),W.length?(0,e.jsx)("div",{className:"attn-list",role:"list",children:W.map(n=>(0,e.jsx)(Ie,{session:n},n.sessionId))}):(0,e.jsxs)("div",{className:"attn-empty",children:[(0,e.jsx)("span",{className:"attn-empty-icon","aria-hidden":"true",children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,e.jsx)("path",{d:"M20 6 9 17l-5-5"})})}),(0,e.jsx)("span",{children:t("overview.allClear")})]})]}),(0,e.jsxs)("div",{className:`overview-layout${K?"":" overview-layout--single"}`,children:[(0,e.jsxs)("div",{className:"overview-main",children:[(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.workingSessions"),count:String(H.length),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/sessions",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("section",{className:"panel active-sessions-panel",children:F.length?(0,e.jsx)("div",{className:"work-list",role:"list",children:F.map(n=>(0,e.jsx)(Ee,{session:n},n.sessionId))}):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})})]}),(0,e.jsxs)("section",{className:"overview-block team-section",children:[(0,e.jsx)(M,{title:t("overview.team"),count:t("overview.teamCount",{count:p.length}),hint:t("overview.teamHint"),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/bot-defaults",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:z.length?z.map(n=>(0,e.jsx)(Te,{card:n},n.larkAppId??n.botName)):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})}),p.length>w?(0,e.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:de,children:t(o?"overview.teamCollapse":"overview.teamExpand")}):null]})]}),K?(0,e.jsx)("aside",{className:"overview-side",children:(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.upcomingSchedules"),children:(0,e.jsx)(E,{href:"#/schedules",children:t("overview.viewAllPlain")})}),(0,e.jsx)("section",{className:"panel schedules-panel",children:(0,e.jsx)(ne,{id:"next-schedules",children:J.map(n=>(0,e.jsx)(Le,{schedule:n,timeZone:R},n.id))})})]})}):null]})]})}function We(t){t.classList.add("overview-root");let s=G(t,(0,e.jsx)(He,{}));return()=>{s(),t.classList.remove("overview-root")}}export{We as renderOverviewPage};
@@ -0,0 +1 @@
1
+ import{a as H}from"./chunk-BD3PZGH2.js";import{c as G}from"./chunk-XVIXNQGC.js";import{c as $,d as W,e as U}from"./chunk-CVNIMUPY.js";var r=$(W(),1);var n=$(U(),1);async function q(){let e=await fetch("/api/plugins/dashboard");if(!e.ok)throw new Error(`HTTP ${e.status}`);let a=await e.json();return Array.isArray(a?.plugins)?a.plugins:[]}function M(e){return{plugins:Array.isArray(e?.plugins)?e.plugins:[],globalPlugins:Array.isArray(e?.globalPlugins)?e.globalPlugins:[],bots:Array.isArray(e?.bots)?e.bots:[],gatewayAdapters:Array.isArray(e?.gatewayAdapters)?e.gatewayAdapters:[]}}async function _(){let e=await fetch("/api/plugins");if(!e.ok)throw new Error(`HTTP ${e.status}`);return M(await e.json())}async function z(e,a,t){let i=t==="global"?"global":`bots/${encodeURIComponent(t)}`,g=await fetch(`/api/plugins/${encodeURIComponent(e)}/${i}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:a})}),l=await g.json().catch(()=>({}));if(!g.ok)throw new Error(typeof l?.error=="string"?l.error:`HTTP ${g.status}`);return M(l)}async function Q(e,a){let t=await fetch(`/api/plugins/${encodeURIComponent(e)}/pin`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({pinned:a})});if(!t.ok)throw new Error(`HTTP ${t.status}`);return M(await t.json())}async function A(e,a){let t=await fetch(`/api/plugins/${encodeURIComponent(e)}/services/${a}`,{method:"POST"});if(!t.ok)throw new Error(`HTTP ${t.status}`);return M(await t.json())}function k(e){return e.values?.length?(0,n.jsx)(n.Fragment,{children:e.values.map(a=>(0,n.jsx)("span",{className:"plugin-chip",children:a},a))}):(0,n.jsx)("span",{className:"plugin-muted",children:"-"})}function y(e){return(0,n.jsx)("code",{className:"plugin-inline-code",children:e.children})}function N(e){return e.rows.length===0?(0,n.jsx)("div",{className:"plugin-empty-state",children:"\u6682\u65E0\u5185\u5BB9"}):(0,n.jsx)("div",{className:"plugin-info-table",children:e.rows.map((a,t)=>(0,n.jsxs)("div",{className:"plugin-info-row",children:[(0,n.jsx)("span",{children:a.label}),(0,n.jsx)("div",{children:a.content})]},`${a.label}:${t}`))})}function C(e){return(0,n.jsxs)("div",{className:"plugin-tab-panel-head",children:[(0,n.jsx)("h3",{children:e.title}),(0,n.jsx)("p",{children:e.description})]})}function T(e){return(0,n.jsx)("div",{className:"plugin-empty-state",children:e.children})}function j(e){return e?e.status||e.action:"unknown"}function B(e){let a=j(e);return a==="online"||a==="started"||a==="already-running"?"\u8FD0\u884C\u4E2D":a==="stopped"||a==="not-running"?"\u5DF2\u505C\u6B62":a==="failed"?"\u5F02\u5E38":"\u672A\u77E5"}function Y(e){return e.mode==="manual"?"\u4E0D\u968F botmux start/stop/restart \u81EA\u52A8\u5F00\u5173\uFF1B\u4ECD\u53EF\u5728\u8FD9\u91CC\u624B\u52A8\u542F\u52A8\u3001\u505C\u6B62\u3001\u91CD\u542F":e.mode==="auto"?"botmux start/restart \u540E\u81EA\u52A8\u786E\u4FDD\u8FD0\u884C\uFF1B\u9ED8\u8BA4 restart \u4E0D\u5148\u505C\u6B62\uFF0C--with-plugin \u624D\u4F1A\u5148\u505C\u518D\u542F\u52A8":"\u672A\u77E5\u751F\u547D\u5468\u671F\u7B56\u7565"}function J(e){return e.mode==="manual"?"\u624B\u52A8\u5F00\u5173":e.mode==="auto"?"\u542F\u52A8\u540E\u786E\u4FDD\u8FD0\u884C":"\u672A\u77E5\u6A21\u5F0F"}function X(e){let a=j(e);return a==="online"||a==="started"||a==="already-running"?"plugin-status-ok":a==="stopped"||a==="not-running"?"plugin-status-idle":a==="failed"?"plugin-status-bad":"plugin-status-muted"}function I(e){return e.url?(0,n.jsx)("a",{className:`plugin-link${e.health?"":" plugin-service-url"}`,href:e.url,target:"_blank",rel:"noreferrer",children:e.health?"\u5065\u5EB7\u68C0\u67E5":e.url}):(0,n.jsx)("span",{className:"plugin-muted",children:e.health?"\u65E0\u5065\u5EB7\u68C0\u67E5":"\u6682\u65E0\u8BBF\u95EE\u5730\u5740"})}function Z(e){let{plugin:a}=e;if(!a.service)return(0,n.jsx)(T,{children:"\u8FD9\u4E2A\u63D2\u4EF6\u6CA1\u6709\u9700\u8981\u5355\u72EC\u542F\u52A8\u7684\u540E\u53F0\u8FDB\u7A0B\u3002"});let t=a.serviceReport,i=[{label:"\u72B6\u6001",content:(0,n.jsx)("span",{className:`plugin-status ${X(t)}`,children:B(t)})},{label:"\u6A21\u5F0F",content:(0,n.jsx)(k,{values:[J(a.service)]})},{label:"\u751F\u547D\u5468\u671F",content:(0,n.jsx)("span",{children:Y(a.service)})},{label:"\u7AEF\u53E3",content:t?.port?(0,n.jsx)(y,{children:t.port}):(0,n.jsx)("span",{className:"plugin-muted",children:"\u672A\u4E0A\u62A5"})},{label:"PID",content:t?.pid?(0,n.jsx)(y,{children:t.pid}):(0,n.jsx)("span",{className:"plugin-muted",children:"\u672A\u4E0A\u62A5"})},{label:"\u8BBF\u95EE\u5730\u5740",content:(0,n.jsx)(I,{url:t?.openUrl})},{label:"\u5065\u5EB7\u68C0\u67E5",content:(0,n.jsx)(I,{url:t?.healthUrl,health:!0})}];return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(N,{rows:i}),t?.warning?(0,n.jsx)("div",{className:"plugin-warning",children:t.warning}):null]})}function nn(e){let{plugin:a}=e;if(!a.service)return null;let t=a.serviceReport;return(0,n.jsxs)("section",{className:"plugin-action-group",children:[(0,n.jsxs)("div",{className:"plugin-action-head",children:[(0,n.jsx)("span",{children:"Service"}),(0,n.jsx)("strong",{children:J(a.service)}),(0,n.jsx)("span",{className:`plugin-status ${X(t)}`,children:B(t)})]}),(0,n.jsxs)("div",{className:"plugin-action-meta",children:[t?.port?(0,n.jsxs)("span",{children:["\u7AEF\u53E3 ",t.port]}):null,t?.pid?(0,n.jsxs)("span",{children:["PID ",t.pid]}):null,(0,n.jsx)(I,{url:t?.openUrl})]}),(0,n.jsx)("div",{className:"plugin-service-actions",children:["start","stop","restart"].map(i=>(0,n.jsx)("button",{type:"button",className:"btn-link","data-plugin-service":a.id,"data-action":i,disabled:e.busy,onClick:()=>e.onAction(i),children:i==="start"?"\u542F\u52A8":i==="stop"?"\u505C\u6B62":"\u91CD\u542F"},i))})]})}function en(e){let a=e.plugin.dashboard??[];return a.length===0?null:(0,n.jsxs)("section",{className:"plugin-action-group",children:[(0,n.jsxs)("div",{className:"plugin-action-head",children:[(0,n.jsx)("span",{children:"Dashboard"}),(0,n.jsxs)("strong",{children:[a.length," \u4E2A\u9875\u9762"]})]}),(0,n.jsx)("div",{className:"plugin-action-links",children:a.map(t=>(0,n.jsxs)("a",{className:"btn-link primary",href:t.route,children:["\u6253\u5F00 ",t.id]},t.id))})]})}function an(e){let a=!!e.plugin.service,t=(e.plugin.dashboard?.length??0)>0;return!a&&!t?null:(0,n.jsxs)("div",{className:"plugin-action-area","aria-label":`${e.plugin.id} \u63D2\u4EF6\u64CD\u4F5C`,children:[(0,n.jsxs)("div",{className:"plugin-action-title",children:[(0,n.jsx)("span",{children:"\u64CD\u4F5C"}),(0,n.jsx)("small",{children:"\u56FA\u5B9A\u64CD\u4F5C\u533A\uFF0C\u4E0B\u9762\u7684 tab \u53EA\u5C55\u793A\u4FE1\u606F"})]}),(0,n.jsxs)("div",{className:"plugin-action-grid",children:[(0,n.jsx)(nn,{plugin:e.plugin,busy:e.busy,onAction:e.onServiceAction}),(0,n.jsx)(en,{plugin:e.plugin})]})]})}function R(e){return(0,n.jsx)("section",{className:`plugin-tab-panel${e.active?" is-active":""}`,role:"tabpanel","data-plugin-panel":e.id,children:e.children})}function tn(e){let t=(e.plugin.contributions?.skills??[]).map(i=>({label:i.name||i.path||"skill",content:i.path?(0,n.jsx)(y,{children:i.path}):(0,n.jsx)("span",{className:"plugin-muted",children:"\u672A\u58F0\u660E\u8DEF\u5F84"})}));return(0,n.jsxs)(R,{id:"skills",active:e.active,children:[(0,n.jsx)(C,{title:"Skills",description:"\u6BCF\u6B21\u771F\u6B63\u542F\u52A8\u6216\u91CD\u542F CLI \u8FDB\u7A0B\u65F6\uFF0C\u90FD\u4F1A\u6309\u5F53\u524D Bot \u7684\u6709\u6548\u63D2\u4EF6\u96C6\u5237\u65B0\u8FD9\u4E9B\u6280\u80FD\uFF1B\u8FD0\u884C\u4E2D\u7684 CLI \u4E0D\u70ED\u66F4\u65B0\u3002"}),t.length>0?(0,n.jsx)(N,{rows:t}):(0,n.jsx)(T,{children:"\u8FD9\u4E2A\u63D2\u4EF6\u6CA1\u6709\u63D0\u4F9B Skills\u3002"})]})}function ln(e){let a=e.plugin,t=a.contributions?.mcp,i=t?[{label:t.name||"mcp",content:(0,n.jsxs)("div",{className:"plugin-info-stack",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u4F20\u8F93"}),(0,n.jsx)(k,{values:[t.transport||"stdio"]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u8FD0\u884C\u914D\u7F6E"}),(0,n.jsx)(k,{values:["\u53D7\u4FDD\u62A4\uFF0C\u7531 Gateway \u6309\u4F1A\u8BDD\u52A0\u8F7D"]})]})]})}]:[],g=(a.gatewayAdapters??[]).map(s=>({label:s.cliId,content:(0,n.jsxs)("div",{className:"plugin-info-stack",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"Gateway"}),(0,n.jsx)(k,{values:[s.state==="configured"||s.state==="unchanged"||s.state==="installed"?"\u5DF2\u63A5\u5165":s.state==="adapter-required"?"\u5F85\u9002\u914D":"\u672A\u5199\u5165"]})]}),s.configPath?(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u914D\u7F6E\u76EE\u6807"}),(0,n.jsx)(y,{children:s.configPath})]}):null,s.warning?(0,n.jsx)("div",{className:"plugin-warning",children:s.warning}):null]})})),l=(a.mcpDiagnostics??[]).map(s=>({label:s.serverName,content:(0,n.jsxs)("div",{className:"plugin-info-stack",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u6700\u8FD1\u8FDE\u63A5"}),(0,n.jsx)(k,{values:[s.status==="connected"?"\u6B63\u5E38":"\u5931\u8D25",s.transport]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u80FD\u529B\u6570\u91CF"}),(0,n.jsx)(k,{values:[`Tools ${s.tools??0}`,`Prompts ${s.prompts??0}`,`Resources ${s.resources??0}`]})]}),s.sessionId?(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u4F1A\u8BDD"}),(0,n.jsx)(y,{children:s.sessionId})]}):null,s.error?(0,n.jsx)("div",{className:"plugin-warning",children:s.error}):null]})}));return(0,n.jsxs)(R,{id:"mcp",active:e.active,children:[(0,n.jsx)(C,{title:"MCP",description:"CLI \u53EA\u8FDE\u63A5\u4E00\u4E2A Botmux Gateway\uFF1B\u6BCF\u4E00\u4EE3 CLI \u8FDB\u7A0B\u6309\u542F\u52A8\u65F6\u6E05\u5355\u8FDE\u63A5\u8FD9\u4E9B\u4E0B\u6E38 MCP\u3002"}),g.length>0?(0,n.jsx)(N,{rows:g}):null,l.length>0?(0,n.jsx)(N,{rows:l}):null,i.length>0?(0,n.jsx)(N,{rows:i}):(0,n.jsx)(T,{children:"\u8FD9\u4E2A\u63D2\u4EF6\u6CA1\u6709\u63D0\u4F9B MCP server\u3002"})]})}function sn(e){let a=e.plugin.contributions?.cli,t=[...a?.entry?[{label:"\u5165\u53E3\u6587\u4EF6",content:(0,n.jsx)(y,{children:a.entry})}]:[],...(a?.commands??[]).map(i=>({label:i.name,content:i.description?(0,n.jsx)("span",{children:i.description}):(0,n.jsx)("span",{className:"plugin-muted",children:"\u65E0\u63CF\u8FF0"})}))];return(0,n.jsxs)(R,{id:"cli",active:e.active,children:[(0,n.jsx)(C,{title:"CLI \u547D\u4EE4",description:"\u542F\u7528\u63D2\u4EF6\u540E\uFF0C\u8FD9\u4E9B\u547D\u4EE4\u4F1A\u8FDB\u5165 botmux \u7684\u547D\u4EE4\u8DEF\u7531\u3002"}),t.length>0?(0,n.jsx)(N,{rows:t}):(0,n.jsx)(T,{children:"\u8FD9\u4E2A\u63D2\u4EF6\u6CA1\u6709\u63D0\u4F9B CLI \u547D\u4EE4\u3002"})]})}function on(e){let a=(e.plugin.dashboard??[]).map(t=>({label:t.id,content:(0,n.jsxs)("div",{className:"plugin-info-stack",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u8DEF\u7531"}),(0,n.jsx)(y,{children:t.route})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"\u5165\u53E3"}),(0,n.jsx)(y,{children:t.entry})]})]})}));return(0,n.jsxs)(R,{id:"dashboard",active:e.active,children:[(0,n.jsx)(C,{title:"Dashboard",description:"\u63D2\u4EF6\u81EA\u5DF1\u7684\u53EF\u89C6\u5316\u9875\u9762\u4F1A\u5728\u8FD9\u91CC\u66B4\u9732\u5165\u53E3\u3002"}),a.length>0?(0,n.jsx)(N,{rows:a}):(0,n.jsx)(T,{children:"\u8FD9\u4E2A\u63D2\u4EF6\u6CA1\u6709\u63D0\u4F9B Dashboard \u9875\u9762\u3002"})]})}function rn(e){return(0,n.jsxs)(R,{id:"service",active:e.active,children:[(0,n.jsx)(C,{title:"Service",description:"\u63D2\u4EF6\u540E\u53F0\u670D\u52A1\u7684\u58F0\u660E\u3001\u5F53\u524D\u72B6\u6001\u548C\u8BBF\u95EE\u5730\u5740\u3002\u542F\u52A8\u3001\u505C\u6B62\u3001\u91CD\u542F\u5728\u4E0A\u65B9\u64CD\u4F5C\u533A\u5904\u7406\u3002"}),(0,n.jsx)(Z,{plugin:e.plugin})]})}function cn(e){let a=e.plugin.contributions?.cli?.commands??[],t=(0,r.useMemo)(()=>[{id:"skills",label:"Skills",count:e.plugin.skillsCount??0,hint:"\u4F1A\u8BDD\u52A0\u8F7D"},{id:"mcp",label:"MCP",count:e.plugin.mcpCount??0,hint:"Gateway \u805A\u5408"},{id:"cli",label:"CLI \u547D\u4EE4",count:a.length,hint:"\u547D\u4EE4\u8DEF\u7531"},{id:"dashboard",label:"Dashboard",count:e.plugin.dashboard?.length??0,hint:"\u9875\u9762\u5165\u53E3"},{id:"service",label:"Service",count:e.plugin.service?1:0,hint:e.plugin.service?J(e.plugin.service):"\u65E0\u540E\u53F0\u8FDB\u7A0B"}],[a.length,e.plugin.dashboard?.length,e.plugin.mcpCount,e.plugin.service,e.plugin.skillsCount]),[i,g]=(0,r.useState)(()=>t.find(l=>l.count>0)?.id??"skills");return(0,n.jsxs)("div",{className:"plugin-tabs",children:[(0,n.jsx)("div",{className:"plugin-tab-list",role:"tablist","aria-label":`${e.plugin.id} \u63D2\u4EF6\u80FD\u529B`,children:t.map(l=>(0,n.jsxs)("button",{type:"button",className:`plugin-tab-button${i===l.id?" is-active":""}`,role:"tab","aria-selected":i===l.id,"data-plugin-tab":l.id,onClick:()=>g(l.id),children:[(0,n.jsx)("strong",{children:l.count}),(0,n.jsx)("span",{children:l.label}),(0,n.jsx)("small",{children:l.hint})]},l.id))}),(0,n.jsxs)("div",{className:"plugin-tab-panels",children:[(0,n.jsx)(tn,{plugin:e.plugin,active:i==="skills"}),(0,n.jsx)(ln,{plugin:e.plugin,active:i==="mcp"}),(0,n.jsx)(sn,{plugin:e.plugin,active:i==="cli"}),(0,n.jsx)(on,{plugin:e.plugin,active:i==="dashboard"}),(0,n.jsx)(rn,{plugin:e.plugin,active:i==="service"})]})]})}function x(e,a){return`${e}:${a}`}function w(e,a,t){let i=t.get(x(e.id,a));return i!==void 0?i:a==="global"?e.enabledGlobal===!0:e.enabledByBot?.[a]===!0}function gn(e){return(0,n.jsxs)("label",{className:"toggle-row plugin-enable-row",children:[(0,n.jsxs)("span",{className:"plugin-enable-copy",children:[(0,n.jsx)("strong",{children:e.label}),(0,n.jsx)("small",{children:e.hint})]}),(0,n.jsx)("input",{type:"checkbox","data-plugin-toggle":e.scope,"data-plugin-id":e.plugin.id,checked:e.checked,disabled:e.busy,onChange:a=>e.onToggle(e.scope,a.currentTarget.checked)}),(0,n.jsx)("span",{className:"switch","aria-hidden":"true"})]})}function un(e){let a=w(e.plugin,"global",e.pendingToggles);return(0,n.jsxs)("label",{className:"toggle-row plugin-global-setting",children:[(0,n.jsxs)("span",{className:"plugin-global-setting-copy",children:[(0,n.jsx)("strong",{children:"\u5168\u5C40\u542F\u7528"}),(0,n.jsx)("small",{children:a?`\u5DF2\u5BF9\u5168\u90E8 ${e.bots.length} \u4E2A Bot \u542F\u7528`:"\u5173\u95ED\u65F6\u53EF\u5C55\u5F00\u5361\u7247\uFF0C\u6309 Bot \u5355\u72EC\u542F\u7528"})]}),(0,n.jsx)("input",{type:"checkbox","data-plugin-toggle":"global","data-plugin-id":e.plugin.id,checked:a,disabled:e.busy,onChange:t=>e.onToggle("global",t.currentTarget.checked)}),(0,n.jsx)("span",{className:"switch","aria-hidden":"true"})]})}function dn(e){let{plugin:a,bots:t,pendingToggles:i}=e,g=t.filter(l=>w(a,l.id,i)).length;return(0,n.jsxs)("section",{className:"plugin-enable-panel","aria-label":`${a.displayName||a.id} \u6309 Bot \u542F\u7528`,children:[(0,n.jsxs)("div",{className:"plugin-enable-panel-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"\u6309 Bot \u542F\u7528"}),(0,n.jsx)("small",{children:"\u5168\u5C40\u5173\u95ED\u65F6\uFF0C\u53EF\u4E3A\u9700\u8981\u6B64\u63D2\u4EF6\u7684 Bot \u5355\u72EC\u5F00\u542F\uFF1B\u65B0\u542F\u52A8\u7684 CLI \u4F1A\u8BDD\u751F\u6548\u3002"})]}),(0,n.jsxs)("span",{children:[g,"/",t.length," \u4E2A Bot \u5DF2\u542F\u7528"]})]}),(0,n.jsxs)("div",{className:"plugin-enable-list",children:[t.map(l=>{let s=w(a,l.id,i),p=s?"\u5DF2\u542F\u7528":"\u672A\u542F\u7528";return(0,n.jsx)(gn,{plugin:a,scope:l.id,label:l.name,hint:`\u5F53\u524D${p}`,checked:s,busy:e.busy,onToggle:e.onToggle},l.id)}),t.length===0?(0,n.jsx)("div",{className:"plugin-enable-empty",children:"\u6682\u65E0\u5DF2\u914D\u7F6E Bot"}):null]})]})}function pn(e){let a=e.plugin.contributions?.cli?.commands??[],t=[{label:"Skills",count:e.plugin.skillsCount??0},{label:"MCP",count:e.plugin.mcpCount??0},{label:"\u547D\u4EE4",count:a.length},{label:"Dashboard",count:e.plugin.dashboard?.length??0}].filter(i=>i.count>0);return(0,n.jsxs)("div",{className:"plugin-card-summary",children:[(0,n.jsxs)("div",{className:"plugin-capability-summary","aria-label":"\u63D2\u4EF6\u80FD\u529B\u6458\u8981",children:[t.map(i=>(0,n.jsxs)("span",{className:"plugin-capability-chip",children:[(0,n.jsx)("strong",{children:i.count}),i.label]},i.label)),e.plugin.service?(0,n.jsxs)("span",{className:`plugin-capability-chip ${X(e.plugin.serviceReport)}`,children:["Service ",B(e.plugin.serviceReport)]}):null,t.length===0&&!e.plugin.service?(0,n.jsx)("span",{className:"plugin-muted",children:"\u672A\u58F0\u660E\u6269\u5C55\u80FD\u529B"}):null]}),(0,n.jsx)("span",{className:"plugin-scope-summary",children:e.globalEnabled?`\u5168\u90E8 ${e.botCount} \u4E2A Bot`:`${e.enabledBotCount}/${e.botCount} \u4E2A Bot \u5355\u72EC\u542F\u7528`})]})}function bn(e){let a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=a.current;if(t)if(e.feedback&&!t.open)try{t.showModal()}catch{t.setAttribute("open","")}else!e.feedback&&t.open&&t.close()},[e.feedback]),(0,n.jsx)("dialog",{className:"plugin-feedback-dialog","data-plugin-feedback-dialog":!0,ref:a,onClose:e.onClose,onClick:t=>{t.target===t.currentTarget&&e.onClose()},children:(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"plugin-feedback-mark","aria-hidden":"true",children:"!"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:"\u63D2\u4EF6\u8BBE\u7F6E\u672A\u4FDD\u5B58"}),(0,n.jsx)("h2",{"data-plugin-feedback-title":!0,children:e.feedback?.title??"\u64CD\u4F5C\u5931\u8D25"})]})]}),(0,n.jsx)("p",{className:"plugin-feedback-message","data-plugin-feedback-message":!0,children:e.feedback?.message}),(0,n.jsx)("footer",{children:(0,n.jsx)("button",{type:"button",className:"btn-link","data-plugin-feedback-close":!0,onClick:e.onClose,children:"\u77E5\u9053\u4E86"})})]})})}function mn(e){let{plugin:a}=e,[t,i]=(0,r.useState)(!1),g=a.displayName||a.id,l=a.dependencies??[],s=w(a,"global",e.pendingToggles),p=e.bots.filter(d=>w(a,d.id,e.pendingToggles)).length,S=s||p>0,b=e.pendingToggles.has(x(a.id,"global")),f=(a.dashboard?.length??0)>0,m=e.pendingPin??a.pinnedToSidebar===!0,P=`plugin-details-${a.id}`;return(0,n.jsxs)("article",{className:`bd-card plugin-card${t?" is-expanded":" is-collapsed"}`,"data-plugin-card":a.id,children:[(0,n.jsxs)("header",{className:"plugin-card-head",children:[(0,n.jsxs)("div",{className:"plugin-title-block",children:[(0,n.jsxs)("div",{className:"plugin-title-row",children:[(0,n.jsx)("h2",{children:g}),(0,n.jsx)("span",{className:`plugin-status ${S?"plugin-status-ok":"plugin-status-idle"}`,children:s?"\u5168\u5C40\u5DF2\u542F\u7528":p>0?`${p} \u4E2A Bot \u5DF2\u542F\u7528`:"\u672A\u542F\u7528"})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:a.id}),(0,n.jsxs)("span",{children:[a.packageName,"@",a.version]}),l.length>0?(0,n.jsxs)("span",{children:["\u4F9D\u8D56 ",l.join(", ")]}):null]})]}),(0,n.jsx)("button",{type:"button",className:"btn-link plugin-expand-button","data-plugin-expand":a.id,"aria-expanded":t,"aria-controls":P,onClick:()=>i(d=>!d),children:t?"\u6536\u8D77\u8BE6\u60C5":"\u5C55\u5F00\u8BE6\u60C5"})]}),(0,n.jsx)(un,{plugin:a,bots:e.bots,pendingToggles:e.pendingToggles,busy:e.busy,onToggle:e.onToggle}),(0,n.jsx)(pn,{plugin:a,globalEnabled:s,enabledBotCount:p,botCount:e.bots.length}),t?(0,n.jsxs)("div",{className:"plugin-card-expanded",id:P,children:[!s&&!b?(0,n.jsx)(dn,{plugin:a,bots:e.bots,pendingToggles:e.pendingToggles,busy:e.busy,onToggle:e.onToggle}):null,b?(0,n.jsx)("div",{className:"plugin-settings-pending",children:"\u6B63\u5728\u66F4\u65B0\u5168\u5C40\u8BBE\u7F6E..."}):null,f?(0,n.jsx)("div",{className:"plugin-card-controls",children:(0,n.jsxs)("label",{className:"toggle-row plugin-pin-toggle",children:[(0,n.jsx)("input",{type:"checkbox","data-plugin-pin":a.id,checked:m,disabled:e.busy,onChange:d=>e.onPin(d.currentTarget.checked)}),(0,n.jsx)("span",{className:"switch"}),(0,n.jsxs)("span",{className:"toggle-tx",children:[(0,n.jsx)("strong",{children:"Pin \u5230\u4FA7\u680F"}),(0,n.jsx)("small",{children:m?"\u5DF2\u56FA\u5B9A\uFF0C\u53EF\u4ECE\u4E3B\u83DC\u5355\u5FEB\u901F\u6253\u5F00":"\u56FA\u5B9A\u540E\u53EF\u4ECE\u4E3B\u83DC\u5355\u5FEB\u901F\u6253\u5F00"})]})]})}):null,(0,n.jsx)(an,{plugin:a,busy:e.busy,onServiceAction:e.onServiceAction}),(0,n.jsx)("div",{className:"plugin-card-body",children:(0,n.jsx)(cn,{plugin:a})})]}):null]})}function E(e,a,t){let i=new Map(e);return t===void 0?i.delete(a):i.set(a,t),i}function vn(e,a,t){let i=new Set(e);return t?i.add(a):i.delete(a),i}function hn(){let[e,a]=(0,r.useState)(null),[t,i]=(0,r.useState)(null),[g,l]=(0,r.useState)(!1),[s,p]=(0,r.useState)(()=>new Set),[S,b]=(0,r.useState)(()=>new Map),[f,m]=(0,r.useState)(()=>new Map),[P,d]=(0,r.useState)(null),D=(0,r.useCallback)(async()=>{l(!0),i(null);try{a(await _())}catch(o){i(o instanceof Error?o.message:String(o))}finally{l(!1)}},[]);(0,r.useEffect)(()=>{D()},[D]);let v=(0,r.useCallback)((o,u)=>{p(c=>vn(c,o,u))},[]),F=(0,r.useCallback)(async(o,u,c)=>{let L=x(o,u);b(h=>E(h,L,c)),v(o,!0);try{let h=await z(o,c,u);a(h)}catch(h){d({title:c?"\u65E0\u6CD5\u542F\u7528\u63D2\u4EF6":"\u65E0\u6CD5\u7981\u7528\u63D2\u4EF6",message:h instanceof Error?h.message:String(h)})}finally{b(h=>E(h,L,void 0)),v(o,!1)}},[v]),K=(0,r.useCallback)(async(o,u)=>{m(c=>E(c,o,u)),v(o,!0);try{let c=await Q(o,u);a(c),window.dispatchEvent(new Event(H))}catch(c){d({title:"\u65E0\u6CD5\u66F4\u65B0\u4FA7\u680F\u56FA\u5B9A",message:c instanceof Error?c.message:String(c)})}finally{m(c=>E(c,o,void 0)),v(o,!1)}},[v]),V=(0,r.useCallback)(async(o,u)=>{v(o,!0);try{let c=await A(o,u);a(c)}catch(c){d({title:"Service \u64CD\u4F5C\u5931\u8D25",message:c instanceof Error?c.message:String(c)})}finally{v(o,!1)}},[v]);if(!e&&!t)return(0,n.jsx)("section",{className:"page",children:(0,n.jsx)("div",{className:"empty",children:"Loading plugins..."})});if(!e)return(0,n.jsx)("section",{className:"page",children:(0,n.jsxs)("div",{className:"bd-card empty",children:["\u63D2\u4EF6\u5217\u8868\u52A0\u8F7D\u5931\u8D25\uFF1A",t]})});let O=e.plugins.filter(o=>w(o,"global",S)).length;return(0,n.jsxs)("section",{className:"page plugin-management-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{children:"\u63D2\u4EF6"}),(0,n.jsx)("p",{children:"\u5361\u7247\u9ED8\u8BA4\u5C55\u793A\u542F\u7528\u8303\u56F4\u4E0E\u80FD\u529B\u6458\u8981\uFF1B\u5C55\u5F00\u540E\u53EF\u7BA1\u7406\u5355\u4E2A Bot\u3001Service \u548C\u8BE6\u7EC6\u80FD\u529B\u3002\u5168\u5C40\u542F\u7528\u5BF9\u6240\u6709 Bot \u751F\u6548\uFF0C\u6539\u52A8\u5728\u65B0\u542F\u52A8\u7684 CLI \u4F1A\u8BDD\u4E2D\u751F\u6548\u3002"})]}),(0,n.jsx)("div",{className:"plugin-heading-actions",children:(0,n.jsx)("button",{type:"button",className:"btn-link","data-plugin-refresh":!0,disabled:g,onClick:()=>{D()},children:g?"\u5237\u65B0\u4E2D...":"\u5237\u65B0"})})]}),(0,n.jsxs)("div",{className:"plugin-summary-grid",children:[(0,n.jsxs)("div",{className:"bd-card plugin-summary-card",children:[(0,n.jsx)("span",{children:"\u5DF2\u5B89\u88C5"}),(0,n.jsx)("strong",{children:e.plugins.length})]}),(0,n.jsxs)("div",{className:"bd-card plugin-summary-card",children:[(0,n.jsx)("span",{children:"\u5168\u5C40\u542F\u7528"}),(0,n.jsx)("strong",{"data-plugin-summary-enabled":!0,children:O})]})]}),e.plugins.length===0?(0,n.jsxs)("div",{className:"bd-card empty",children:["\u6682\u65E0\u5DF2\u5B89\u88C5\u63D2\u4EF6\u3002\u7528 ",(0,n.jsx)("code",{children:"botmux plugin install"})," \u5B89\u88C5\u540E\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"]}):(0,n.jsx)("div",{className:"plugin-card-list",children:e.plugins.map(o=>(0,n.jsx)(mn,{plugin:o,bots:e.bots,pendingToggles:S,pendingPin:f.get(o.id),busy:s.has(o.id),onToggle:(u,c)=>{F(o.id,u,c)},onPin:u=>{K(o.id,u)},onServiceAction:u=>{V(o.id,u)}},o.id))}),(0,n.jsx)(bn,{feedback:P,onClose:()=>d(null)})]})}function fn(e){return{async getServiceStatus(){return(await _()).plugins.find(t=>t.id===e)?.serviceReport},async startService(){return A(e,"start")},async stopService(){return A(e,"stop")},async restartService(){return A(e,"restart")}}}function yn(e){let[a,t]=(0,r.useState)(null),[i,g]=(0,r.useState)(null),[l,s]=(0,r.useState)(null);(0,r.useEffect)(()=>{let b=!1;return t(null),g(null),s(null),(async()=>{try{let m=(await q()).find(d=>e.hash===d.route||e.hash.startsWith(`${d.route}/`)||e.hash.startsWith(`${d.route}?`));if(!m)throw new Error(`Plugin page not found: ${e.hash}`);let P=await import(m.url);if(typeof P.default!="function")throw new Error("plugin_dashboard_default_export_not_function");if(b)return;t(m),g(()=>P.default)}catch(f){b||s(f instanceof Error?f.message:String(f))}})(),()=>{b=!0}},[e.hash]);let p=(0,r.useMemo)(()=>a?fn(a.pluginId):null,[a]);if(l)return(0,n.jsx)("section",{className:"page",children:(0,n.jsxs)("div",{className:"bd-card empty",children:["\u63D2\u4EF6 Dashboard \u52A0\u8F7D\u5931\u8D25\uFF1A",l]})});if(!a||!i||!p)return(0,n.jsx)("section",{className:"page",children:(0,n.jsx)("div",{className:"empty",children:"Loading plugin..."})});let S=a.displayName||a.pluginId;return(0,n.jsx)("section",{className:"page plugin-page",children:(0,n.jsxs)("div",{className:"plugin-dashboard-shell",children:[(0,n.jsx)("div",{className:"plugin-dashboard-toolbar",children:(0,n.jsx)("a",{className:"btn-link plugin-dashboard-back",href:"#/plugins",children:"\u8FD4\u56DE\u63D2\u4EF6\u5217\u8868"})}),(0,n.jsx)("div",{className:"page-heading plugin-dashboard-heading",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"plugin-dashboard-kicker",children:"Plugin Dashboard"}),(0,n.jsx)("h1",{children:S}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:a.pluginId}),(0,n.jsx)("span",{children:"/"}),(0,n.jsx)("code",{children:a.id})]})]})}),(0,n.jsx)("div",{className:"plugin-dashboard-content","data-plugin-dashboard-root":!0,children:(0,n.jsx)(i,{pluginId:a.pluginId,api:p})})]})})}function Pn(){let e=location.hash||"#/plugins";return e==="#/plugins"||e.startsWith("#/plugins?")?(0,n.jsx)(hn,{}):(0,n.jsx)(yn,{hash:e})}function kn(e){return G(e,(0,n.jsx)(Pn,{}))}export{kn as renderPluginPage};
@@ -0,0 +1 @@
1
+ import{a as Ft,b as $t,c as Ot,d as Ut}from"./chunk-R3FXBFQH.js";import{a as Se}from"./chunk-OT6L6G7R.js";import{b as Gt,c as ce,h as Oe,q as Ue}from"./chunk-5QX4OYOR.js";import{d as Bt}from"./chunk-RHVFZC5Z.js";import"./chunk-QITAMHW6.js";import{C as At,G as _t}from"./chunk-CK22743G.js";import{c as $e}from"./chunk-XVIXNQGC.js";import{c as Fe,d as hn,e as Dt}from"./chunk-CVNIMUPY.js";var a=Fe(hn(),1);function Ht(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 jt(t){return[...new Set([...t].filter(Boolean))]}function Vt(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:jt(o)}}let r=new Set(t.include);for(let o of n)r.delete(o),t.listening&&r.add(o);return{include:jt(r),exclude:[]}}function je(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 qt(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,Kt=Math.floor(O*.95),pe=32768,Wt=Math.floor(pe*.95),He=5,Ve=20,Pn=/^[A-Za-z0-9._-]{1,64}$/;function qe(t){return Pn.test(t)&&t!=="."&&t!==".."}function Yt(t=location.hash){let[,n=""]=t.split("?");return new URLSearchParams(n).get("chatId")?.trim()||null}function Ke(t,n){return Ot(t,n)}function xe(t){return new TextEncoder().encode(t).length}function zt(t){return t.memberBots.filter(n=>n.inChat&&n.hasRole).length}function Jt(t){return t.memberBots.filter(n=>n.inChat).length}function me(t,n){return n?t.find(r=>r.larkAppId===n):void 0}function Xt(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 Qt(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 Zt(){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 er(){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 We(t,n){let r=await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function tr(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 rr(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 nr(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 sr(t,n){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function Ye(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 or(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 lr(t,n){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}function we(t){return Number.isFinite(t)?Math.min(Ve,Math.max(1,Math.floor(t))):He}function ue(t){return String(t).padStart(2,"0")}function ir(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 ar(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:we(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??we(o),matches:m.matches??[],error:m.error}}async function dr(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:we(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??we(o),matches:m.matches??[],results:m.results,error:m.error}}async function cr(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 ur(t,n){let r=await fetch(`/api/groups/${encodeURIComponent(t)}/${encodeURIComponent(n)}/members-display`);return(await x(r)).members??[]}async function pr(t,n){let r=await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function mr(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 fr(t,n){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function gr(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=Ke(p.larkAppId,f.chatId);o.has(v)||(o.add(v),c.push({larkAppId:p.larkAppId,chatId:f.chatId}))}let m=await Ut(c);return{entriesByProfile:new Map(r),effectiveRolesByBot:m}}async function yr(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=Fe(Dt(),1),Pr=["text","post","image","interactive"],K={enabled:!1,prompt:"",senderPolicy:{mode:"include_only",includeSenderTypes:["user"],excludeSelf:!0},messagePolicy:{includeMsgTypes:[...Pr],scope:"top_level"}};function Je(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 vr(t){return!!t&&t.prompt.trim().length>0}function In(t){return t.memberBots.some(n=>n.inChat&&(n.hasRole||n.hasMessageListener))}function ze(t,n){return t?.name||n}function Sn(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 wn(t,n){return!n||t==="failed"?"error":t==="replied"?"ok":t==="running"?"running":"triggered"}function xn(t,n=[]){return Je(t??K)}function Rn(){let t=(0,a.useRef)(!0);return(0,a.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),t}function kn(){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 Ir(t){return(0,e.jsx)(Gt,{html:At({name:t.bot.botName,larkAppId:t.bot.larkAppId,avatarUrl:t.bot.botAvatarUrl,size:"sm"})})}function Sr(t){let n=Bt(),r=Rn(),o=kn(),[c,m]=(0,a.useState)([]),[f,p]=(0,a.useState)([]),[v,T]=(0,a.useState)([]),[Re,R]=(0,a.useState)({entriesByProfile:new Map,effectiveRolesByBot:new Map}),[W,A]=(0,a.useState)(!1),[ke,Y]=(0,a.useState)(!0),[Ne,_]=(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),[Xe,Qe]=(0,a.useState)(!1),[Ze,et]=(0,a.useState)(!1),[wr,tt]=(0,a.useState)(!1),[xr,rt]=(0,a.useState)(!1),[Rr,Le]=(0,a.useState)(null),[kr,nt]=(0,a.useState)(null),[Nr,st]=(0,a.useState)(null),[j,ot]=(0,a.useState)("role"),[Lr,Tr]=(0,a.useState)(null),[P,D]=(0,a.useState)(()=>Je(K)),[Te,lt]=(0,a.useState)([]),[Mr,it]=(0,a.useState)(!1),[Cr,at]=(0,a.useState)(!1),[dt,ct]=(0,a.useState)(!1),[Me,ut]=(0,a.useState)(!1),[Er,G]=(0,a.useState)(null),[Ce,Ar]=(0,a.useState)(He),[_r,be]=(0,a.useState)({kind:"idle"}),ee=(0,a.useRef)(null),pt=(0,a.useRef)(0),[S,Br]=(0,a.useState)(null),[C,mt]=(0,a.useState)(null),[te,re]=(0,a.useState)([]),[ne,he]=(0,a.useState)(""),[$,se]=(0,a.useState)(null),[ft,Dr]=(0,a.useState)(!1),[gt,yt]=(0,a.useState)(()=>new Set),[vt,bt]=(0,a.useState)(!1),[ht,Pt]=(0,a.useState)(!1),[Gr,Ee]=(0,a.useState)(null),[Fr,oe]=(0,a.useState)({kind:"idle"}),H=(0,a.useRef)(0),le=(0,a.useRef)(0),It=(0,a.useRef)(null),Ae=g?c.find(s=>s.chatId===g):void 0,$r=Ae&&y?Ae.memberBots.find(s=>s.larkAppId===y):void 0,_e=C?f.find(s=>s.larkAppId===C):void 0,Or=me(te,C),Be=$?c.find(s=>s.chatId===$):void 0,Pe=Be?.memberBots.filter(s=>s.inChat)??[],Ur=Pe.map(s=>s.larkAppId).join("\0"),jr=te.map(s=>s.larkAppId).sort().join("\0"),Hr=(0,a.useMemo)(()=>Xt(c,F),[c,F]),Vr=(0,a.useMemo)(()=>Qt(v,z),[v,z]),De=xe(I),Ge=xe(ne),St=xe(P.prompt),wt=(0,a.useMemo)(()=>{let s=new Map;for(let l of Te)s.set(l.openId,l);return s},[Te]),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 gr(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 Zt();return r.current&&(m(s.groups),p(s.bots)),s},[r]),ie=(0,a.useCallback)(async()=>{let s=await er();return r.current&&T(s),s},[r]),ae=(0,a.useCallback)((s,l=[])=>{let i=xn(s??K,l);Tr(s),D(i)},[]),xt=(0,a.useCallback)(async(s,l,i)=>{it(!0),at(!0),lt([]);try{let[u,h]=await Promise.all([Ye(s,l).catch(()=>Je(K)),ur(s,l).catch(()=>[])]);if(!r.current||i!==H.current)return;ae(vr(u)?u:null,h),lt(h),G(null)}finally{r.current&&i===H.current&&(it(!1),at(!1))}},[r,ae]),Rt=(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 _t(),!r.current))return;if(B(new Set(s.groups.filter(In).map(i=>i.chatId))),t.tab==="profiles"){let i=Yt();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)(()=>{Rt()},[Rt]),(0,a.useEffect)(()=>()=>{pt.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));yt(s),oe({kind:"idle"})},[jr,Ur]);async function qr(s,l){let i=++H.current;ye(s),J(l),Le(null),nt(null),st(null),G(null),ae(null);let u=await We(l,s);!r.current||i!==H.current||(b(u),M(u.content??""),Q(u.injectMode==="once"?"once":"every"),Z(u.dispatchCompletionEnabled===!0),await xt(l,s,i))}async function Kr(){let s=await E();if(r.current&&(L(s.groups,v),g&&y)){let l=++H.current,i=await We(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 xt(y,g,l)}}async function Wr(){if(!(!g||!y)){Qe(!0);try{let s=await tr(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(Le,n("roles.saved"))}else N(Le,I.trim().length===0?n("roles.emptyError"):n("roles.saveFailed"),!0)}finally{r.current&&Qe(!1)}}}async function Yr(){if(!(!g||!y)&&await Se({title:"\u5220\u9664\u89D2\u8272",message:n("roles.confirmDelete"),danger:!0})){et(!0);try{let s=await sr(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&&et(!1)}}}async function zr(s){if(!g||!y)return;let l=X;Q(s),tt(!0);try{let i=await rr(y,g,s);if(!r.current)return;i||Q(l),N(nt,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&tt(!1)}}async function Jr(s){if(!g||!y)return;let l=ve;Z(s),rt(!0);try{let i=await nr(y,g,s);if(!r.current)return;i||Z(l),N(st,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&rt(!1)}}function Xr(s){D(l=>({...l,...s}))}function Qr(s){D(l=>({...l,senderPolicy:{...l.senderPolicy??{},...s}}))}function Zr(s){D(l=>({...l,messagePolicy:{...l.messagePolicy??{scope:"top_level"},...s,scope:"top_level"}}))}function en(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 tn(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 kt(s,l){D(i=>{let u=i.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",h=Vt({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 rn(s,l){kt([s],l)}function nn(s,l){kt(s,l)}function sn(s){D(l=>({...l,senderPolicy:{...l.senderPolicy??{},mode:s,includeSenderOpenIds:[...l.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...l.senderPolicy?.excludeSenderOpenIds??[]]}}))}function Nt(){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=qt(h,Ie=>wt.get(Ie)?.memberType,s.excludeSenderKinds),w=[...new Set(s.includeSenderTypes??[])].filter(Ie=>Ie==="user"||Ie==="bot"),Et=[...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:{...Et.length>0?{includeMsgTypes:Et}:{},scope:"top_level"}}}function on(){return P.prompt.trim()?P.senderPolicy?.mode!=="all_except_excluded"&&(P.senderPolicy?.includeSenderOpenIds?.length??0)===0?(N(G,n("roles.listenerSenderRequired"),!0),null):{...Nt(),enabled:!0}:(N(G,n("roles.listenerPromptRequired"),!0),null)}async function Lt(s){if(!g||!y)return;let l=on();if(!l)return;let i=s?"run":"preview";be({kind:"loading",mode:i});try{let u=s?await dr(y,g,l,Ce):await ar(y,g,l,Ce);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&&ln(u.runId)}catch(u){if(!r.current)return;be({kind:"error",text:u instanceof Error?u.message:n("roles.listenerPreviewFailed")})}}function ln(s){if(!g||!y)return;let l=++pt.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 cr(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:Sn(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 an(){if(!(!g||!y)){if(!P.enabled&&!P.prompt.trim()){await Tt(!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}}ct(!0);try{let s=await or(y,g,Nt());if(!r.current)return;if(s){let l=await E();if(!r.current)return;let i=await Ye(y,g);if(!r.current)return;ae(vr(i)?i:null),L(l.groups,v)}N(G,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&ct(!1)}}}async function Tt(s=!0){if(!(!g||!y)&&!(s&&!await Se({title:"\u5220\u9664\u76D1\u542C\u5668",message:n("roles.listenerConfirmDelete"),danger:!0}))){ut(!0);try{let l=await lr(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&&ut(!1)}}}async function Mt(s){let l=s.trim();if(!qe(l))return;let i=++le.current;Br(l),mt(null),he(""),oe({kind:"idle"}),se(h=>h??c[0]?.chatId??null);let u=await q(l);!r.current||i!==le.current||(re(u),Ee(null))}async function dn(s){if(!S)return;let l=++le.current;mt(s);let i=await pr(S,s);if(!r.current||l!==le.current)return;he(i.content??"");let u=await q(S);!r.current||l!==le.current||(re(u),Ee(null))}async function cn(){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 un(){let s=It.current,l=s?.value.trim()??"";if(l){if(!qe(l)){s?.setCustomValidity(n("roles.profileIdInvalid")),s?.reportValidity();return}s?.setCustomValidity(""),await Mt(l),r.current&&(location.hash.startsWith("#/roles/profile")||(location.hash="#/roles/profile"))}}async function pn(){if(!(!S||!C)){bt(!0);try{let s=await mr(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(Ee,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&bt(!1)}}}async function mn(){if(!(!S||!C)&&await Se({title:"\u5220\u9664\u914D\u7F6E\u9879",message:n("roles.confirmDeleteProfileEntry"),danger:!0})){Pt(!0);try{if(await fr(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&&Pt(!1)}}}function fn(s,l){yt(i=>{let u=new Set(i);return l?u.add(s):u.delete(s),u})}async function Ct(s){if(!S)return;let l=$??c[0]?.chatId;if(!l)return;let i=[...gt];if(i.length===0){oe({kind:"text",text:n("roles.applyPickBots")});return}oe({kind:"text",text:"..."});let u=await Promise.all(i.map(h=>yr({profileId:S,chatId:l,larkAppId:h,force:ft,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 gn=Xe||De>O||I.trim().length===0,yn=dt||Me||St>pe||P.enabled&&P.prompt.trim().length===0,vn=vt||Ge>O||ne.trim().length===0,V=t.tab==="profiles",bn=(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:bn})]}),(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)(Oe,{id:"roles-refresh",label:n("roles.refresh"),onClick:()=>{Kr()}})]}),(0,e.jsx)("div",{id:"roles-tree",className:"roles-tree",children:ke?(0,e.jsx)(ce,{label:n("common.loading")}):(0,e.jsx)(Tn,{groups:Hr,profiles:v,context:Re,contextLoaded:W,expandedGroups:U,selectedGroupId:g,selectedBotId:y,tr:n,onToggleGroup:s=>B(l=>Nn(l,s)),onSelectBot:(s,l)=>{qr(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:Ae?.name??g}),(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{id:"roles-editor-bot-name",children:$r?.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:Ze,onClick:()=>{Yr()},children:Ze?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-save",className:"primary",disabled:gn,onClick:()=>{Wr()},children:Xe?"...":n("roles.save")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-listener-delete",className:"danger",style:{display:Lr?"":"none"},disabled:Me,onClick:()=>{Tt()},children:Me?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-listener-save",className:"primary",disabled:yn,onClick:()=>{an()},children:dt?"...":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:()=>ot("role"),children:n("roles.roleTab")}),(0,e.jsx)("button",{type:"button",className:j==="listener"?"active":"","aria-pressed":j==="listener",onClick:()=>ot("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)(Ue,{id:"roles-editor-inject-mode",className:"roles-inline-menu",ariaLabel:n("roles.injectModeLabel"),disabled:wr,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=>{zr(s==="once"?"once":"every")}}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.injectModeHint")}),(0,e.jsx)(fe,{flash:kr})]}),(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:xr,onChange:s=>{Jr(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:Nr})]}),(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:br(De),children:[De," / ",O," bytes"]}),(0,e.jsx)(fe,{flash:Rr})]}),(0,e.jsx)(hr,{content:I,tr:n,id:"roles-preview"})]}):(0,e.jsx)(Cn,{listener:P,members:Te,memberById:wt,promptByteLen:St,loading:Mr,membersLoading:Cr,flash:Er,tr:n,onPatch:Xr,onSenderPolicyPatch:Qr,onMessagePolicyPatch:Zr,onToggleSenderType:en,onToggleMsgType:tn,onSetTargetPolicy:rn,onSetTargetsPolicy:nn,onSetSenderMode:sn,previewLimit:Ce,previewStatus:_r,onPreviewLimitChange:Ar,onPreview:()=>{Lt(!1)},onRunPreview:()=>{Lt(!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:It,onChange:s=>s.currentTarget.setCustomValidity("")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-select",onClick:()=>{un()},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)(Oe,{id:"roles-profile-refresh",label:n("roles.refresh"),onClick:()=>{cn()}})]}),(0,e.jsx)("div",{id:"roles-profile-list",className:"roles-tree",children:Ne?(0,e.jsx)(ce,{label:n("common.loading")}):(0,e.jsx)(_n,{profiles:Vr,selectedProfileId:S,tr:n,onSelect:s=>{Mt(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}),_e?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{children:_e.botName??_e.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:()=>{dn(s.larkAppId)},children:[(0,e.jsx)(Ir,{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:br(Ge),children:[Ge," / ",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:Or?"":"none"},disabled:ht,onClick:()=>{mn()},children:ht?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-save",className:"primary",disabled:vn,onClick:()=>{pn()},children:vt?"...":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:Gr})}),(0,e.jsx)(hr,{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)(Ue,{id:"roles-profile-apply-group",className:"roles-apply-group-menu",ariaLabel:n("roles.applyToGroup"),disabled:c.length===0,label:Be?.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:ft,onChange:s=>Dr(s.target.checked)})," ",n("roles.applyForce")]})]}),(0,e.jsx)("div",{id:"roles-profile-apply-bots",children:!Be||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:gt.has(s.larkAppId),onChange:i=>fn(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:()=>{Ct(!0)},children:n("roles.previewApply")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-apply",className:"primary",onClick:()=>{Ct(!1)},children:n("roles.applyProfile")})]}),(0,e.jsx)("div",{id:"roles-profile-apply-status",className:"roles-profile-status",children:(0,e.jsx)(Bn,{status:Fr,bots:f,tr:n})})]})]}):(0,e.jsx)("div",{id:"roles-profile-empty",className:"roles-editor-empty",children:n("roles.profileSelectHint")})})]})]})}function Nn(t,n){let r=new Set(t);return r.has(n)?r.delete(n):r.add(n),r}function br(t){return`roles-bytecount ${t>Kt?"warn":""} ${t>O?"over":""}`}function Ln(t){return`roles-bytecount ${t>Wt?"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 Tn(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=zt(r),f=Jt(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)(Mn,{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)(Ir,{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 Mn(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(Ke(T.larkAppId,n.chatId))??null);if(!Ft(f))return null;let p=$t(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 Cn(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??[]),Re=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??[]),ke=[...[...R==="all_except_excluded"?A:W].filter(d=>!t.memberById.has(d))],Y=[...t.members.filter(d=>d.memberType!=="bot"),...ke.map(d=>({openId:d,name:d,memberType:"unknown"}))],Ne=t.members.filter(d=>d.memberType==="bot"),_=o==="bots"?Ne:Y,F=Ht(_,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=je({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")}),Pr.map(d=>(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:Re.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:Ln(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:Ve},(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)(En,{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=je({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":ze(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:ze(d,d.openId)}),(0,e.jsx)("span",{children:d.openId})]}),(0,e.jsxs)("div",{className:"roles-listener-member-actions",role:"group","aria-label":ze(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 hr(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 En(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)(An,{item:f,result:n.response.results?.find(p=>p.messageId===f.messageId),tr:r},f.messageId))})]})}function An(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=ir(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:wn(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 _n(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 Bn(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 Wn(t){return $e(t,(0,e.jsx)(Sr,{tab:"groups"}))}function Yn(t){return $e(t,(0,e.jsx)(Sr,{tab:"profiles"}))}export{Yn as renderRoleProfilesPage,Wn as renderRolesPage};
@@ -0,0 +1 @@
1
+ import{a as Y}from"./chunk-SOBMN2VY.js";import{a as ke}from"./chunk-OT6L6G7R.js";import{g as ge,m as ye,n as we,o as ve,p as be,q as Te}from"./chunk-5QX4OYOR.js";import{b as fe,d as te}from"./chunk-RHVFZC5Z.js";import"./chunk-QITAMHW6.js";import{G as de,J as ee,b as ue}from"./chunk-CK22743G.js";import{c as pe}from"./chunk-XVIXNQGC.js";import{c as X,d as Ie,e as me}from"./chunk-CVNIMUPY.js";var f=X(Ie(),1);function L(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function se(e,t){return e.y===t.y&&e.m===t.m&&e.d===t.d&&e.h===t.h&&e.i===t.i&&e.s===t.s}function _e(e,t){let s=new Date(Date.parse(e));if(isNaN(s))throw new Error("Invalid ISO8601 passed to timezone parser.");let n=e.substring(9);return n.includes("Z")||n.includes("+")||n.includes("-")?ie(s.getUTCFullYear(),s.getUTCMonth()+1,s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),"Etc/UTC"):ie(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds(),t)}function Ne(e,t,s){return Oe(_e(e,t),s)}function Oe(e,t){let s=new Date(L(e)),n=z(s,e.tz),r=L(e),a=L(n),o=r-a,l=new Date(s.getTime()+o),u=z(l,e.tz);if(se(u,e)){let p=new Date(l.getTime()-36e5),m=z(p,e.tz);return se(m,e)?p:l}let d=new Date(l.getTime()+L(e)-L(u)),b=z(d,e.tz);if(se(b,e))return d;if(t)throw new Error("Invalid date passed to fromTZ()");return l.getTime()>d.getTime()?l:d}function z(e,t){let s,n;try{s=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),n=s.formatToParts(e)}catch(a){let o=a instanceof Error?a.message:String(a);throw new RangeError(`toTZ: Invalid timezone '${t}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${o}`)}let r={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let a of n)(a.type==="year"||a.type==="month"||a.type==="day"||a.type==="hour"||a.type==="minute"||a.type==="second")&&(r[a.type]=parseInt(a.value,10));if(isNaN(r.year)||isNaN(r.month)||isNaN(r.day)||isNaN(r.hour)||isNaN(r.minute)||isNaN(r.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${t}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(r)}`);return r.hour===24&&(r.hour=0),{y:r.year,m:r.month,d:r.day,h:r.hour,i:r.minute,s:r.second,tz:t}}function ie(e,t,s,n,r,a,o){return{y:e,m:t,d:s,h:n,i:r,s:a,tz:o}}var xe=[1,2,4,8,16],Ce=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,s){this.pattern=e,this.timezone=t,this.mode=s?.mode??"auto",this.alternativeWeekdays=s?.alternativeWeekdays??!1,this.sloppyRanges=s?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let r=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${r} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0&&(e[0]=e[0].replace(/\?/g,"*"),e[1]=e[1].replace(/\?/g,"*"),e[2]=e[2].replace(/\?/g,"*"),e[3]=e[3].replace(/\?/g,"*"),e[4]=e[4].replace(/\?/g,"*"),e[5]=e[5].replace(/\?/g,"*"),e[6]&&(e[6]=e[6].replace(/\?/g,"*"))),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let s=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],s,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,s,n){let r=this[e],a=e==="day"&&this.lastDayOfMonth,o=e==="day"&&this.lastWeekday;if(t===""&&!a&&!o)throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(n);let l=t.split(",");if(l.length>1)for(let u=0;u<l.length;u++)this.partToArray(e,l[u],s,n);else t.indexOf("-")!==-1&&t.indexOf("/")!==-1?this.handleRangeWithStepping(t,e,s,n):t.indexOf("-")!==-1?this.handleRange(t,e,s,n):t.indexOf("/")!==-1?this.handleStepping(t,e,s,n):t!==""&&this.handleNumber(t,e,s,n)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,s,n){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+s;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||n)}setPart(e,t,s){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,s);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=s}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,s,n,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(s!==void 0){if(s===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(s>this[n].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[n].length+")")}}handleRangeWithStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,l,u]=a,d=parseInt(o,10)+s,b=parseInt(l,10)+s,p=parseInt(u,10);this.validateNotNaN(d,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(b,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(p,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(d,b,p,t,e);for(let m=d;m<=b;m+=p)this.setPart(t,m,r[1]||n)}extractNth(e,t){let s=e,n;if(s.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");n=s.split("#")[1],s=s.split("#")[0]}else if(s.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");n="L",s=s.slice(0,-1)}return[s,n]}handleRange(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+s,l=parseInt(a[1],10)+s;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(l,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,l,void 0,t,e);for(let u=o;u<=l;u++)this.setPart(t,u,r[1]||n)}handleStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+s);let l=parseInt(a[1],10);this.validateNotNaN(l,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,l,t,e);for(let u=o;u<this[t].length;u+=l)this.setPart(t,u,r[1]||n)}replaceAlphaDays(e){return e.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,"1").replace(/mon/gi,"2").replace(/tue/gi,"3").replace(/wed/gi,"4").replace(/thu/gi,"5").replace(/fri/gi,"6").replace(/sat/gi,"7")}replaceAlphaMonths(e){return e.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@yearly"||t==="@annually")return"0 0 1 1 *";if(t==="@monthly")return"0 0 1 * *";if(t==="@weekly")return"0 0 * * 0";if(t==="@daily"||t==="@midnight")return"0 0 * * *";if(t==="@hourly")return"0 * * * *";if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|xe[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},ne=[31,28,31,30,31,30,31,31,30,31,30,31],v=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],k=class Ae{tz;ms;second;minute;hour;day;month;year;constructor(t,s){if(this.tz=s,t&&t instanceof Date)if(!isNaN(t))this.fromDate(t);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(t==null)this.fromDate(new Date);else if(t&&typeof t=="string")this.fromString(t);else if(t instanceof Ae)this.fromCronDate(t);else throw new TypeError("CronDate: Invalid type ("+typeof t+") passed to CronDate constructor")}getLastDayOfMonth(t,s){return s!==1?ne[s]:new Date(Date.UTC(t,s+1,0)).getUTCDate()}getLastWeekday(t,s){let n=this.getLastDayOfMonth(t,s),r=new Date(Date.UTC(t,s,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(t,s,n){let r=this.getLastDayOfMonth(t,s);if(n>r)return-1;let a=new Date(Date.UTC(t,s,n)).getUTCDay();return a===0?n===r?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(t,s,n,r){let a=new Date(Date.UTC(t,s,n)).getUTCDay(),o=0;for(let l=1;l<=n;l++)new Date(Date.UTC(t,s,l)).getUTCDay()===a&&o++;if(r&63&&xe[o-1]&r)return!0;if(r&32){let l=this.getLastDayOfMonth(t,s);for(let u=n+1;u<=l;u++)if(new Date(Date.UTC(t,s,u)).getUTCDay()===a)return!1;return!0}return!1}fromDate(t){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes()+this.tz,this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply();else try{let s=z(t,this.tz);this.ms=t.getMilliseconds(),this.second=s.s,this.minute=s.i,this.hour=s.h,this.day=s.d,this.month=s.m-1,this.year=s.y}catch(s){let n=s instanceof Error?s.message:String(s);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=t.getMilliseconds(),this.second=t.getSeconds(),this.minute=t.getMinutes(),this.hour=t.getHours(),this.day=t.getDate(),this.month=t.getMonth(),this.year=t.getFullYear()}fromCronDate(t){this.tz=t.tz,this.year=t.year,this.month=t.month,this.day=t.day,this.hour=t.hour,this.minute=t.minute,this.second=t.second,this.ms=t.ms}apply(){if(this.month>11||this.month<0||this.day>ne[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let t=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),!0}else return!1}fromString(t){if(typeof this.tz=="number"){let s=Ne(t);this.ms=s.getUTCMilliseconds(),this.second=s.getUTCSeconds(),this.minute=s.getUTCMinutes(),this.hour=s.getUTCHours(),this.day=s.getUTCDate(),this.month=s.getUTCMonth(),this.year=s.getUTCFullYear(),this.apply()}else return this.fromDate(Ne(t,this.tz))}findNext(t,s,n,r){return this._findMatch(t,s,n,r,1)}_findMatch(t,s,n,r,a){let o=this[s],l;n.lastDayOfMonth&&(l=this.getLastDayOfMonth(this.year,this.month));let u=!n.starDOW&&s=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,d=this[s]+r,b=a===1?p=>p<n[s].length:p=>p>=0;for(let p=d;b(p);p+=a){let m=n[s][p];if(s==="day"&&!m){for(let w=0;w<n.nearestWeekdays.length;w++)if(n.nearestWeekdays[w]){let S=this.getNearestWeekday(this.year,this.month,w-r);if(S===-1)continue;if(S===p-r){m=1;break}}}if(s==="day"&&n.lastWeekday){let w=this.getLastWeekday(this.year,this.month);p-r===w&&(m=1)}if(s==="day"&&n.lastDayOfMonth&&p-r==l&&(m=1),s==="day"&&!n.starDOW){let w=n.dayOfWeek[(u+(p-r-1))%7];if(w&&w&63)w=this.isNthWeekdayOfMonth(this.year,this.month,p-r,w)?1:0;else if(w)throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${w}`);n.useAndLogic?m=m&&w:!t.domAndDow&&!n.starDOM?m=m||w:m=m&&w}if(m)return this[s]=p-r,o!==this[s]?2:1}return 3}recurse(t,s,n){if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let a=-1;for(let o=this.year+1;o<t.year.length&&o<1e4;o++)if(t.year[o]===1){a=o;break}if(a===-1)return null;this.year=a,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let r=this.findNext(s,v[n][0],t,v[n][2]);if(r>1){let a=n+1;for(;a<v.length;)this[v[a][0]]=-v[a][2],a++;if(r===3){if(this[v[n][1]]++,this[v[n][0]]=-v[n][2],this.apply(),n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=t.year.length)return null}return this.recurse(t,s,0)}else if(this.apply())return this.recurse(t,s,n-1)}return n+=1,n>=v.length?this:(t.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(t,s,n)}increment(t,s,n){return this.second+=s.interval!==void 0&&s.interval>1&&n?s.interval:1,this.ms=0,this.apply(),this.recurse(t,s,0)}decrement(t,s){return this.second-=s.interval!==void 0&&s.interval>1?s.interval:1,this.ms=0,this.apply(),this.recurseBackward(t,s,0,0)}recurseBackward(t,s,n,r=0){if(r>1e4)return null;if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let o=-1;for(let l=this.year-1;l>=0;l--)if(t.year[l]===1){o=l;break}if(o===-1)return null;this.year=o,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let a=this.findPrevious(s,v[n][0],t,v[n][2]);if(a>1){let o=n+1;for(;o<v.length;){let l=v[o][0],u=v[o][2],d=this.getMaxPatternValue(l,t,u);this[l]=d,o++}if(a===3){if(this[v[n][1]]--,n===0){let b=this.getLastDayOfMonth(this.year,this.month);this.day>b&&(this.day=b)}if(n===1)if(this.day<=0)this.day=1;else{let b=this.year,p=this.month;for(;p<0;)p+=12,b--;for(;p>11;)p-=12,b++;let m=p!==1?ne[p]:new Date(Date.UTC(b,p+1,0)).getUTCDate();this.day>m&&(this.day=m)}this.apply();let l=v[n][0],u=v[n][2],d=this.getMaxPatternValue(l,t,u);if(l==="day"){let b=this.getLastDayOfMonth(this.year,this.month);this[l]=Math.min(d,b)}else this[l]=d;if(this.apply(),n===0){let b=v[1][2],p=this.getMaxPatternValue("day",t,b),m=this.getLastDayOfMonth(this.year,this.month),w=Math.min(p,m);w!==this.day&&(this.day=w,this.hour=this.getMaxPatternValue("hour",t,v[2][2]),this.minute=this.getMaxPatternValue("minute",t,v[3][2]),this.second=this.getMaxPatternValue("second",t,v[4][2]))}if(n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(t,s,0,r+1)}else if(this.apply())return this.recurseBackward(t,s,n-1,r+1)}return n+=1,n>=v.length?this:this.year<0?null:this.recurseBackward(t,s,n,r+1)}getMaxPatternValue(t,s,n){if(t==="day"&&s.lastDayOfMonth)return this.getLastDayOfMonth(this.year,this.month);if(t==="day"&&!s.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let r=s[t].length-1;r>=0;r--)if(s[t][r])return r-n;return s[t].length-1-n}findPrevious(t,s,n,r){return this._findMatch(t,s,n,r,-1)}getDate(t){return t||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):Oe(ie(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(t,s){if(!t.starYear&&(this.year<0||this.year>=t.year.length||t.year[this.year]===0))return!1;for(let n=0;n<v.length;n++){let r=v[n][0],a=v[n][2],o=this[r];if(o+a<0||o+a>=t[r].length)return!1;let l=t[r][o+a];if(r==="day"){if(!l){for(let u=0;u<t.nearestWeekdays.length;u++)if(t.nearestWeekdays[u]){let d=this.getNearestWeekday(this.year,this.month,u-a);if(d!==-1&&d===o){l=1;break}}}if(t.lastWeekday){let u=this.getLastWeekday(this.year,this.month);o===u&&(l=1)}if(t.lastDayOfMonth){let u=this.getLastDayOfMonth(this.year,this.month);o===u&&(l=1)}if(!t.starDOW){let u=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),d=t.dayOfWeek[(u+(o-1))%7];d&&d&63&&(d=this.isNthWeekdayOfMonth(this.year,this.month,o,d)?1:0),t.useAndLogic?l=l&&d:!s.domAndDow&&!t.starDOM?l=l||d:l=l&&d}}if(!l)return!1}return!0}};function Ee(e){if(e===void 0&&(e={}),delete e.name,e.legacyMode!==void 0&&e.domAndDow===void 0?e.domAndDow=!e.legacyMode:e.domAndDow===void 0&&(e.domAndDow=!1),e.legacyMode=!e.domAndDow,e.paused=e.paused===void 0?!1:e.paused,e.maxRuns=e.maxRuns===void 0?1/0:e.maxRuns,e.catch=e.catch===void 0?!1:e.catch,e.interval=e.interval===void 0?0:parseInt(e.interval.toString(),10),e.utcOffset=e.utcOffset===void 0?void 0:parseInt(e.utcOffset.toString(),10),e.dayOffset=e.dayOffset===void 0?0:parseInt(e.dayOffset.toString(),10),e.unref=e.unref===void 0?!1:e.unref,e.mode=e.mode===void 0?"auto":e.mode,e.alternativeWeekdays=e.alternativeWeekdays===void 0?!1:e.alternativeWeekdays,e.sloppyRanges=e.sloppyRanges===void 0?!1:e.sloppyRanges,!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(e.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");if(e.startAt&&(e.startAt=new k(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new k(e.stopAt,e.timezone)),e.interval!==null){if(isNaN(e.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(e.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(e.utcOffset!==void 0){if(isNaN(e.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(e.utcOffset<-870||e.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(e.utcOffset!==void 0&&e.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(e.unref!==!0&&e.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(e.dayOffset!==void 0&&e.dayOffset!==0&&isNaN(e.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return e}function $(e){return Object.prototype.toString.call(e)==="[object Function]"||typeof e=="function"||e instanceof Function}function We(e){return $(e)}function Ue(e){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(e):e&&typeof e.unref<"u"&&e.unref()}var De=30*1e3,B=[],Se=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,s){let n,r;if($(t))r=t;else if(typeof t=="object")n=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if($(s))r=s;else if(typeof s=="object")n=s;else if(s!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=n?.name,this.options=Ee(n),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:n?n.maxRuns:void 0,paused:n?n.paused:!1,pattern:new Ce("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new k(e,this.getTz()):this._states.pattern=new Ce(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(B.find(a=>a.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");B.push(this)}return r!==void 0&&We(r)&&(this.fn=r,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let s=t||this._states.currentRun||void 0;return this._enumerateRuns(e,s,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}_enumerateRuns(e,t,s){let n=[],r=t?new k(t,this.getTz()):null,a=s==="next"?this._next:this._previous;for(;e--;){let o=a.call(this,r);if(!o)break;let l=o.getDate(!1);n.push(this.applyDayOffset(l)),r=o}return n}match(e){if(this._states.once){let s=new k(e,this.getTz());s.ms=0;let n=new k(this._states.once,this.getTz());return n.ms=0,s.getTime()===n.getTime()}let t=new k(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,s=this.fn!==void 0,n=!this._states.kill;return t&&s&&n&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof k||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new k(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=B.indexOf(this);e>=0&&B.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let t=this.msToNext(),s=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||s===null?this:(t>De&&(t=De),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(s),t),this._states.currentTimeout&&this.options.unref&&Ue(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new k(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if($(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new k(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,s=!this._states.paused&&t.getTime()>=e.getTime(),n=this._states.blocking&&this.options.protect;s&&!n?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):s&&n&&$(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),s=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),s=!e),e=new k(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let n=this._states.once||new k(e,this.getTz());return!s&&n!==this._states.once&&(n=n.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||n===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&n.getTime()>=this.options.stopAt.getTime()?null:n}_previous(e){let t=new k(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let s=new k(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(s=s.decrement(this._states.pattern,this.options),s===null||this.options.startAt&&s.getTime()<this.options.startAt.getTime()?null:s)}_calculatePreviousRun(e,t){let s=new k(void 0,this.getTz()),n=e;if(this.options.startAt.getTime()<=s.getTime()){n=this.options.startAt;let r=n.getTime()+this.options.interval*1e3;for(;r<=s.getTime();)n=new k(n,this.getTz()).increment(this._states.pattern,this.options,!0),r=n.getTime()+this.options.interval*1e3;t=!0}return n===null&&(n=void 0),[n,t]}};var i=X(me(),1),Le=1e3;function F(e,t){if(!e)return"\u2014";try{return new Date(e).toLocaleString(void 0,t?{timeZone:t,timeZoneName:"short"}:void 0)}catch{return e}}function ze(e,t){let s=t.q.toLowerCase();return e.filter(n=>!t.kind||n.parsed?.kind===t.kind).filter(n=>!t.enabledOnly||n.enabled).filter(n=>!s||JSON.stringify(n).toLowerCase().includes(s)).sort((n,r)=>{if(n.enabled!==r.enabled)return n.enabled?-1:1;let a=n.nextRunAt?Date.parse(n.nextRunAt):1/0,o=r.nextRunAt?Date.parse(r.nextRunAt):1/0;return a-o})}function re(e){return e.deliver==="local"?"local":e.executionPosition==="new-topic"?"new-topic":e.executionPosition==="topic"?e.rootMessageId?"thread":"chat":e.executionPosition==="top-level"?"chat":e.deliver==="new-topic"?"new-topic":e.scope==="chat"?"chat":e.rootMessageId?"thread":"chat"}function $e(e,t){let s=re(e);return t(s==="local"?"schedules.deliveryLocal":s==="new-topic"?"schedules.deliveryNewTopic":s==="thread"?"schedules.deliveryThread":"schedules.deliveryTopLevel")}function Fe(e){return e.repeat?`${e.repeat.completed}/${e.repeat.times??"\u221E"}`:"\u2014"}function qe(e){return new Promise(t=>window.setTimeout(t,e))}var He=[{label:"\u5DE5\u4F5C\u65E5 09:00",expr:"0 9 * * 1-5"},{label:"\u6BCF\u65E5 09:00",expr:"0 9 * * *"},{label:"\u6BCF\u5468\u4E00 09:00",expr:"0 9 * * 1"},{label:"\u6BCF\u5C0F\u65F6",expr:"0 * * * *"}],je={m:6e4,h:36e5,d:864e5};function Re(e,t,s){let n=e.trim();if(!n)return{ok:!1,error:t("schedules.form.errEmpty")};let r=n.split(/\s+/);if(r.length===5&&r.every(o=>/^[\d*\-,/]+$/.test(o)))try{let o=new Se(n,s?{timezone:s}:void 0).nextRun();return o?{ok:!0,preview:F(o.toISOString(),s)}:{ok:!1,error:t("schedules.form.errCron")}}catch{return{ok:!1,error:t("schedules.form.errCron")}}let a=n.match(/^every\s+(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i);if(a)return{ok:!0};if(a=n.match(/^(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i),a){let o=parseInt(a[1],10)*(je[a[2][0].toLowerCase()]??6e4);return{ok:!0,preview:F(new Date(Date.now()+o).toISOString(),s)}}if(/^\d{4}-\d{2}-\d{2}(T| |$)/.test(n)){let o=new Date(n);if(!isNaN(o.getTime()))return{ok:!0,preview:F(o.toISOString(),s)}}return/^(每日|每周[一二三四五六日天]?|每月|每\d*小时|每\d+分钟|每小时|每分钟|\d+\s*分钟后|\d+\s*小时后|明天|每个?工作日|工作日每[天日])/.test(n)?{ok:!0}:{ok:!1,error:t("schedules.form.errFormat")}}function Ye(e){let{schedule:t,scheduleTimeZone:s,tr:n}=e,r=ee(t),a=String(t.parsed?.kind??"unknown"),o=t.enabled?"pause":"resume",l=`${t.id}:${o}`,u=`${t.id}:run`;return(0,i.jsxs)(we,{kind:"schedule",className:"schedule-list-row","data-id":t.id,children:[(0,i.jsxs)(ve,{children:[(0,i.jsxs)("div",{className:"schedule-row-head",children:[(0,i.jsx)("b",{children:t.name??t.id}),(0,i.jsx)("span",{className:`schedule-state ${t.enabled?"enabled":"paused"}`,children:t.enabled?n("schedules.enabled"):n("schedules.paused")})]}),(0,i.jsxs)("div",{className:"schedule-row-meta",children:[(0,i.jsx)("span",{children:t.botName??t.larkAppId??"-"}),(0,i.jsx)("span",{children:"\xB7"}),(0,i.jsx)("code",{children:t.parsed?.display??"?"})]}),(0,i.jsxs)("div",{className:"schedule-chip-strip",children:[(0,i.jsx)("span",{children:a}),t.chatId?(0,i.jsxs)("span",{className:"schedule-chat-chip",title:r?`${r} \xB7 ${String(t.chatId)}`:String(t.chatId),children:[n("schedules.form.chat"),": ",r??t.chatId]}):null,(0,i.jsxs)("span",{children:[n("schedules.delivery"),": ",$e(t,n)]}),t.silent?(0,i.jsxs)("span",{children:["\u{1F507} ",n("schedules.silent")]}):null,(0,i.jsxs)("span",{children:[n("schedules.next"),": ",F(t.nextRunAt,s)]}),(0,i.jsxs)("span",{children:[n("schedules.last"),": ",F(t.lastRunAt,s)]}),t.lastStatus==="error"?(0,i.jsxs)("span",{className:"schedule-error-chip",title:typeof t.lastError=="string"?t.lastError:void 0,children:["\u26A0 ",n("schedules.error"),": ",typeof t.lastError=="string"&&t.lastError.length>60?t.lastError.slice(0,60)+"\u2026":t.lastError??n("schedules.errorUnknown")]}):null,(0,i.jsxs)("span",{children:[n("schedules.repeat"),": ",Fe(t)]})]})]}),(0,i.jsx)(be,{children:(0,i.jsxs)("div",{className:"schedule-actions",children:[(0,i.jsx)(Ze,{op:"run",label:n("schedules.runNow"),pending:e.pending===u,feedback:e.feedback[u]??null,onClick:()=>e.onAction(t.id,"run")}),(0,i.jsx)(Ge,{checked:!!t.enabled,pending:e.pending===l,feedback:e.feedback[l]??null,tr:n,onClick:()=>e.onAction(t.id,o)}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-edit-button",onClick:()=>e.onEdit(t),title:n("schedules.edit"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.edit")})}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-delete-button",onClick:()=>e.onDelete(t),title:n("schedules.delete"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.delete")})})]})})]})}function Be(){let e=te(),{scheduleRows:t,scheduleTimeZone:s}=fe(h=>({scheduleRows:[...h.schedules.values()],scheduleTimeZone:h.scheduleTimeZone})),[n,r]=(0,f.useState)({q:"",kind:"",enabledOnly:!1}),[a,o]=(0,f.useState)(null),[l,u]=(0,f.useState)({}),d=(0,f.useRef)(new Map),[b,p]=(0,f.useState)(!1),[m,w]=(0,f.useState)(null),[S,N]=(0,f.useState)(null),[W,R]=(0,f.useState)(0),[q,U]=(0,f.useState)([]),[,V]=(0,f.useState)(0);(0,f.useEffect)(()=>{fetch("/api/bots").then(h=>h.json()).then(h=>{Array.isArray(h?.bots)&&U(h.bots)}).catch(()=>{})},[]),(0,f.useEffect)(()=>{de().then(()=>V(h=>h+1))},[]);let D=(0,f.useMemo)(()=>ze(t,n),[t,n]);(0,f.useEffect)(()=>()=>{d.current.forEach(h=>window.clearTimeout(h)),d.current.clear()},[]);function M(h,g){u(C=>({...C,[h]:g}));let T=d.current.get(h);T&&window.clearTimeout(T);let O=window.setTimeout(()=>{u(C=>{let y={...C};return delete y[h],y}),d.current.delete(h)},g==="success"?1600:2200);d.current.set(h,O)}async function x(h,g){let T=`${h}:${g}`,O=performance.now(),C="success";o(T);try{let y=await fetch(`/api/schedules/${encodeURIComponent(h)}/${g}`,{method:"POST"}),A=await y.json().catch(()=>({}));if(!y.ok||A.ok===!1)throw new Error(`Failed: ${y.status} ${A?.error??""}`.trim())}catch{C="error"}finally{if(g==="run"){let y=Le-(performance.now()-O);y>0&&await qe(y)}M(T,C),o(y=>y===T?null:y)}}function H(){w(null),N(null),R(h=>h+1),p(!0)}function I(h){w(h),N(null),R(g=>g+1),p(!0)}async function Z(h){if(!await ke({title:e("schedules.delete"),message:e("schedules.deleteConfirm"),danger:!0,confirmLabel:e("schedules.delete")}))return;let T=`${h.id}:delete`;o(T);try{let O=await fetch(`/api/schedules/${encodeURIComponent(h.id)}`,{method:"DELETE"}),C=await O.json().catch(()=>({}));if(!O.ok||C.ok===!1)throw new Error(C?.error??`HTTP ${O.status}`);Y(e("schedules.deleteDone"),{kind:"success"})}catch{Y(e("schedules.deleteFailed"),{kind:"error"})}finally{o(O=>O===T?null:O)}}async function G(h){N(null);try{let g=m?`/api/schedules/${encodeURIComponent(m.id)}`:"/api/schedules",T=m?"PATCH":"POST",O=m?{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,...h.updateExecutionPosition?{executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle}:{}}:{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle,chatId:h.chatId,larkAppId:h.larkAppId},C=await fetch(g,{method:T,headers:{"Content-Type":"application/json"},body:JSON.stringify(O)}),y=await C.json().catch(()=>({}));if(!C.ok||y.ok===!1)throw new Error(y?.error??`HTTP ${C.status}`);p(!1),Y(e(m?"schedules.saved":"schedules.createDone"),{kind:"success"})}catch(g){N(g instanceof Error?g.message:String(g))}}return(0,i.jsxs)("section",{className:"page schedules-page",children:[(0,i.jsxs)("div",{className:"page-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("p",{className:"eyebrow",children:e("nav.schedules")}),(0,i.jsx)("h1",{children:e("schedules.title")})]}),(0,i.jsx)(ge,{onClick:H,disabled:q.length===0,children:e("schedules.create")})]}),(0,i.jsxs)("form",{id:"sched-filters",className:"filters dashboard-toolbar",children:[(0,i.jsx)("input",{type:"search",name:"q",placeholder:e("schedules.search"),value:n.q,onChange:h=>{let g=h.currentTarget.value;r(T=>({...T,q:g}))}}),(0,i.jsx)(Te,{id:"sched-kind-menu",ariaLabel:e("schedules.anyKind"),label:n.kind||e("schedules.anyKind"),value:n.kind,options:[{value:"",label:e("schedules.anyKind")},{value:"cron",label:"cron"},{value:"interval",label:"interval"},{value:"once",label:"once"}],onChange:h=>r(g=>({...g,kind:h}))}),(0,i.jsxs)("label",{className:"filter-toggle",children:[(0,i.jsx)("input",{type:"checkbox",name:"enabled",checked:n.enabledOnly,onChange:h=>{let g=h.currentTarget.checked;r(T=>({...T,enabledOnly:g}))}}),(0,i.jsx)("span",{className:"filter-toggle-label",children:e("schedules.enabledOnly")}),(0,i.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,i.jsx)("span",{className:"schedules-toolbar-spacer","aria-hidden":"true"}),(0,i.jsxs)("span",{className:"schedules-toolbar-count",children:[D.length,"/",t.length]})]}),(0,i.jsx)("section",{className:"overview-block schedules-list-section",children:(0,i.jsx)("div",{className:"schedules-list-wrap",children:D.length===0?(0,i.jsx)("div",{id:"schedules-tbody",className:"empty schedules-list-empty",children:e("schedules.empty")}):(0,i.jsx)(ye,{id:"schedules-tbody",className:"schedules-list",children:D.map(h=>(0,i.jsx)(Ye,{schedule:h,scheduleTimeZone:s,pending:a,feedback:l,tr:e,onAction:(g,T)=>{x(g,T)},onEdit:I,onDelete:g=>{Z(g)}},h.id))})})}),(0,i.jsx)(Ke,{open:b,editing:m,error:S,bots:q,scheduleTimeZone:s,tr:e,onClose:()=>p(!1),onSubmit:h=>{G(h)}},`${m?.id??"new"}-${W}`)]})}function Ve(e,t,s,n,r){return s?r(e==="run"?"schedules.running":"schedules.saving"):n==="success"?r(e==="run"?"schedules.runDone":"schedules.saved"):n==="error"?r("schedules.failed"):t}function Ze(e){let t=te(),s=e.feedback?` is-${e.feedback}`:"";return(0,i.jsx)("button",{type:"button",className:`schedule-action-button${e.pending?" is-pending":""}${s}`,"data-op":e.op,disabled:e.pending,onClick:e.onClick,children:(0,i.jsx)("span",{className:"schedule-action-label",children:Ve(e.op,e.label,e.pending,e.feedback,t)})})}function Ge(e){let t=e.feedback==="error"?e.tr("schedules.failed"):e.checked?e.tr("schedules.enabled"):e.tr("schedules.paused");return(0,i.jsxs)("button",{type:"button",className:`schedule-enabled-switch${e.checked?" is-on":""}${e.pending?" is-pending":""}${e.feedback?` is-${e.feedback}`:""}`,"aria-pressed":e.checked,disabled:e.pending,onClick:e.onClick,children:[(0,i.jsx)("span",{className:"schedule-enabled-switch-label",children:t}),(0,i.jsx)("span",{className:"schedule-enabled-switch-track","aria-hidden":"true",children:(0,i.jsx)("span",{})})]})}function lt(e){return pe(e,(0,i.jsx)(Be,{}))}function Ke(e){let{editing:t,tr:s,bots:n,open:r,scheduleTimeZone:a}=e,o=(0,f.useRef)(null),[l,u]=(0,f.useState)(t?.name??""),[d,b]=(0,f.useState)(t?.schedule??""),[p,m]=(0,f.useState)(t?.prompt??""),[w,S]=(0,f.useState)(t?.silent===!0),[N,W]=(0,f.useState)(t&&re(t)==="thread"?"topic":t&&re(t)==="new-topic"?"new-topic":"top-level"),[R,q]=(0,f.useState)(t?.rootMessageId??""),[U,V]=(0,f.useState)(t?.topicTitle??""),[D,M]=(0,f.useState)(t?.chatId??""),[x,H]=(0,f.useState)(t?.larkAppId??n[0]?.larkAppId??""),[I,Z]=(0,f.useState)([]),[G,h]=(0,f.useState)(!1),[g,T]=(0,f.useState)(!1),[O,C]=(0,f.useState)(!1),y=t?.deliver==="local";(0,f.useEffect)(()=>{let c=o.current;c&&(r&&!c.open?(c.showModal(),c.querySelector('input[name="name"]')?.focus()):!r&&c.open&&c.close())},[r]),(0,f.useEffect)(()=>{if(!r||t)return;let c=!1;return ue({cacheMs:3e4}).then(E=>{c||Z(E.chats)}).catch(()=>{}),()=>{c=!0}},[r,t]),(0,f.useEffect)(()=>{!t&&!x&&n.length>0&&H(n[0].larkAppId)},[t,x,n]);let A=(0,f.useMemo)(()=>d.trim()?Re(d,s,a):null,[d,s,a]),_=(0,f.useMemo)(()=>[...I.some(P=>P.memberBots?.length>0)&&x?I.filter(P=>P.memberBots?.some(j=>j.larkAppId===x&&j.inChat)):I].sort((P,j)=>{let J=P.name??"",Q=j.name??"";return!J&&!Q?0:J?Q?J.localeCompare(Q,"zh-CN"):-1:1}),[I,x]);(0,f.useEffect)(()=>{!D||!x||_.length===0||_.some(c=>c.chatId===D)||M("")},[x,_,D]);let Pe=!t&&!y&&!G&&_.length>0,ae=O&&A!==null&&!A.ok,oe=A?.ok?A.preview:void 0,le=g&&!l.trim(),he=g&&!p.trim(),K=g&&!t&&!y&&!D.trim(),ce=g&&!y&&N==="topic"&&!R.trim();function Me(c){if(c.preventDefault(),T(!0),!(!t&&!x)&&!(!l.trim()||!p.trim())&&!(!y&&!D.trim())&&!(!y&&N==="topic"&&!R.trim())){if(d.trim()){if(!Re(d,s,a).ok)return}else return;e.onSubmit({name:l.trim(),schedule:d.trim(),prompt:p,silent:w,executionPosition:N,rootMessageId:R.trim(),topicTitle:U.trim(),updateExecutionPosition:!y,chatId:D.trim(),larkAppId:x})}}return(0,i.jsxs)("dialog",{ref:o,className:"schedule-form-dialog",onClose:e.onClose,onClick:c=>{c.target===o.current&&e.onClose()},children:[(0,i.jsx)("h2",{children:s(t?"schedules.edit":"schedules.create")}),(0,i.jsxs)("form",{onSubmit:Me,className:"schedule-form",noValidate:!0,children:[t?null:(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.bot")}),(0,i.jsx)("select",{value:x,onChange:c=>H(c.target.value),required:!0,children:n.map(c=>(0,i.jsx)("option",{value:c.larkAppId,children:c.botName??c.larkAppId},c.larkAppId))})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.name")}),(0,i.jsx)("input",{type:"text",name:"name",value:l,onChange:c=>u(c.target.value),required:!0,autoFocus:!0,"aria-invalid":le||void 0}),le?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errNameRequired")}):null]}),(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.schedule")}),(0,i.jsx)("div",{className:"schedule-templates",role:"group","aria-label":s("schedules.form.templates"),children:He.map(c=>(0,i.jsx)("button",{type:"button",className:`schedule-template-chip${d===c.expr?" is-active":""}`,onClick:()=>{b(c.expr),C(!0)},children:c.label},c.expr))}),(0,i.jsx)("input",{type:"text",value:d,onChange:c=>{b(c.target.value),C(!0)},placeholder:s("schedules.form.scheduleHelp"),required:!0,"aria-invalid":ae||void 0}),ae&&A&&!A.ok?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:A.error}):oe?(0,i.jsxs)("small",{className:"schedule-form-preview",children:["\u2713 ",s("schedules.form.nextRun"),"\uFF1A",oe]}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.scheduleHelp")})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.prompt")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),(0,i.jsx)("textarea",{value:p,onChange:c=>m(c.target.value),rows:4,required:!0,"aria-invalid":he||void 0}),he?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errPromptRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.promptHelp")})]}),t?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.chat")}),(0,i.jsx)("code",{title:D,children:ee(t)??D})]}):y?null:(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.chat")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),Pe?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("select",{value:D,onChange:c=>M(c.target.value),required:!0,"aria-invalid":K||void 0,children:[(0,i.jsx)("option",{value:"",disabled:!0,children:s("schedules.form.chatPlaceholder")}),_.map(c=>{let E=c.memberBots?.filter(P=>P.inChat).length??0;return(0,i.jsxs)("option",{value:c.chatId,children:[c.name??c.chatId,E>0?` \xB7 ${E} bots`:""]},c.chatId)})]}),(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>h(!0),children:s("schedules.form.chatManual")})]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("input",{type:"text",value:D,onChange:c=>M(c.target.value),placeholder:"oc_...",required:!0,"aria-invalid":K||void 0}),_.length>0?(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>{h(!1),M("")},children:s("schedules.form.chatBackToSelect")}):null]}),K?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errChatRequired")}):null]}),y?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-placement",children:[(0,i.jsx)("strong",{children:s("schedules.deliveryLocal")}),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.localHelp")})]})]}):(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-radio-group",children:[(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"top-level",checked:N==="top-level",onChange:()=>W("top-level")}),s("schedules.deliveryTopLevel")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"topic",checked:N==="topic",onChange:()=>W("topic")}),s("schedules.deliveryThread")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"new-topic",checked:N==="new-topic",onChange:()=>{W("new-topic"),S(!1)}}),s("schedules.deliveryNewTopic")]})]}),(0,i.jsx)("small",{className:"schedule-form-help",children:s(N==="top-level"?"schedules.form.topLevelHelp":N==="topic"?"schedules.form.topicHelp":"schedules.form.newTopicHelp")})]}),!y&&N==="topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicRoot")}),(0,i.jsx)("input",{type:"text",value:R,onChange:c=>q(c.target.value),placeholder:"om_...",required:!0,"aria-invalid":ce||void 0}),ce?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errRootRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.topicRootHelp")})]}):null,!y&&N==="new-topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicTitle")}),(0,i.jsx)("input",{type:"text",value:U,onChange:c=>V(c.target.value),placeholder:s("schedules.form.topicTitlePlaceholder"),maxLength:200}),(0,i.jsxs)("small",{className:"schedule-form-help schedule-form-help-with-count",children:[s("schedules.form.topicTitleHelp"),(0,i.jsxs)("span",{children:[Array.from(U).length,"/200"]})]})]}):null,(0,i.jsxs)("label",{className:"schedule-form-field schedule-form-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:w,onChange:c=>S(c.target.checked)}),(0,i.jsxs)("span",{children:[s("schedules.form.silent"),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.silentHelp")})]})]}),N==="new-topic"&&w?(0,i.jsx)("p",{className:"schedule-form-help",children:s("schedules.form.silentNewTopicConflict")}):null,e.error?(0,i.jsx)("p",{className:"schedule-form-error",children:e.error}):null,(0,i.jsxs)("div",{className:"schedule-form-actions",children:[(0,i.jsx)("button",{type:"button",className:"schedule-form-cancel",onClick:e.onClose,children:s("schedules.form.cancel")}),(0,i.jsx)("button",{type:"submit",className:"schedule-form-submit",children:s(t?"schedules.form.save":"schedules.form.create")})]})]})]})}export{ze as filterSchedules,F as fmtScheduleDate,lt as renderSchedulesPage,re as scheduleExecutionPlacement};