botmux 3.5.0 → 3.6.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 (505) hide show
  1. package/README.en.md +56 -396
  2. package/README.md +55 -396
  3. package/dist/.runtime-build-id +1 -0
  4. package/dist/adapters/backend/sandbox.d.ts +99 -279
  5. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  6. package/dist/adapters/backend/sandbox.js +424 -826
  7. package/dist/adapters/backend/sandbox.js.map +1 -1
  8. package/dist/adapters/cli/claude-code.d.ts +6 -0
  9. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  10. package/dist/adapters/cli/claude-code.js +197 -11
  11. package/dist/adapters/cli/claude-code.js.map +1 -1
  12. package/dist/adapters/cli/coco.js +4 -4
  13. package/dist/adapters/cli/coco.js.map +1 -1
  14. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  15. package/dist/adapters/cli/codex-app.js +9 -6
  16. package/dist/adapters/cli/codex-app.js.map +1 -1
  17. package/dist/adapters/cli/codex.d.ts.map +1 -1
  18. package/dist/adapters/cli/codex.js +9 -5
  19. package/dist/adapters/cli/codex.js.map +1 -1
  20. package/dist/adapters/cli/fs-policy.d.ts +244 -0
  21. package/dist/adapters/cli/fs-policy.d.ts.map +1 -0
  22. package/dist/adapters/cli/fs-policy.js +537 -0
  23. package/dist/adapters/cli/fs-policy.js.map +1 -0
  24. package/dist/adapters/cli/grok.d.ts +2 -1
  25. package/dist/adapters/cli/grok.d.ts.map +1 -1
  26. package/dist/adapters/cli/grok.js +2 -1
  27. package/dist/adapters/cli/grok.js.map +1 -1
  28. package/dist/adapters/cli/hermes.d.ts.map +1 -1
  29. package/dist/adapters/cli/hermes.js +8 -4
  30. package/dist/adapters/cli/hermes.js.map +1 -1
  31. package/dist/adapters/cli/mtr.d.ts.map +1 -1
  32. package/dist/adapters/cli/mtr.js +3 -2
  33. package/dist/adapters/cli/mtr.js.map +1 -1
  34. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  35. package/dist/adapters/cli/opencode.js +5 -4
  36. package/dist/adapters/cli/opencode.js.map +1 -1
  37. package/dist/adapters/cli/read-isolation.d.ts +14 -200
  38. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  39. package/dist/adapters/cli/read-isolation.js +18 -477
  40. package/dist/adapters/cli/read-isolation.js.map +1 -1
  41. package/dist/adapters/cli/relay.js +2 -2
  42. package/dist/adapters/cli/relay.js.map +1 -1
  43. package/dist/adapters/cli/runner-input.d.ts +2 -2
  44. package/dist/adapters/cli/runner-input.d.ts.map +1 -1
  45. package/dist/adapters/cli/runner-input.js +9 -6
  46. package/dist/adapters/cli/runner-input.js.map +1 -1
  47. package/dist/adapters/cli/seed.d.ts.map +1 -1
  48. package/dist/adapters/cli/seed.js +2 -1
  49. package/dist/adapters/cli/seed.js.map +1 -1
  50. package/dist/adapters/cli/traex.d.ts.map +1 -1
  51. package/dist/adapters/cli/traex.js +3 -2
  52. package/dist/adapters/cli/traex.js.map +1 -1
  53. package/dist/adapters/cli/types.d.ts +25 -18
  54. package/dist/adapters/cli/types.d.ts.map +1 -1
  55. package/dist/bot-registry.d.ts +54 -23
  56. package/dist/bot-registry.d.ts.map +1 -1
  57. package/dist/bot-registry.js +91 -0
  58. package/dist/bot-registry.js.map +1 -1
  59. package/dist/cli.d.ts.map +1 -1
  60. package/dist/cli.js +297 -104
  61. package/dist/cli.js.map +1 -1
  62. package/dist/codex-app-runner.js +85 -192
  63. package/dist/codex-app-runner.js.map +1 -1
  64. package/dist/config.d.ts +0 -16
  65. package/dist/config.d.ts.map +1 -1
  66. package/dist/config.js +0 -30
  67. package/dist/config.js.map +1 -1
  68. package/dist/core/ask-broker.d.ts +12 -0
  69. package/dist/core/ask-broker.d.ts.map +1 -1
  70. package/dist/core/ask-broker.js +41 -0
  71. package/dist/core/ask-broker.js.map +1 -1
  72. package/dist/core/bot-turn-mutation-gate.d.ts +24 -0
  73. package/dist/core/bot-turn-mutation-gate.d.ts.map +1 -0
  74. package/dist/core/bot-turn-mutation-gate.js +369 -0
  75. package/dist/core/bot-turn-mutation-gate.js.map +1 -0
  76. package/dist/core/command-handler.d.ts +5 -0
  77. package/dist/core/command-handler.d.ts.map +1 -1
  78. package/dist/core/command-handler.js +53 -73
  79. package/dist/core/command-handler.js.map +1 -1
  80. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  81. package/dist/core/dashboard-ipc-server.js +356 -84
  82. package/dist/core/dashboard-ipc-server.js.map +1 -1
  83. package/dist/core/dashboard-rows.d.ts +8 -0
  84. package/dist/core/dashboard-rows.d.ts.map +1 -1
  85. package/dist/core/dashboard-rows.js.map +1 -1
  86. package/dist/core/host-overload-alert.d.ts +157 -0
  87. package/dist/core/host-overload-alert.d.ts.map +1 -0
  88. package/dist/core/host-overload-alert.js +251 -0
  89. package/dist/core/host-overload-alert.js.map +1 -0
  90. package/dist/core/passthrough-commands.d.ts +8 -0
  91. package/dist/core/passthrough-commands.d.ts.map +1 -1
  92. package/dist/core/passthrough-commands.js +20 -1
  93. package/dist/core/passthrough-commands.js.map +1 -1
  94. package/dist/core/plugins/mcp/gateway-installer.d.ts.map +1 -1
  95. package/dist/core/plugins/mcp/gateway-installer.js +14 -2
  96. package/dist/core/plugins/mcp/gateway-installer.js.map +1 -1
  97. package/dist/core/restart-coordinator.d.ts +28 -0
  98. package/dist/core/restart-coordinator.d.ts.map +1 -0
  99. package/dist/core/restart-coordinator.js +82 -0
  100. package/dist/core/restart-coordinator.js.map +1 -0
  101. package/dist/core/restart-followup-policy.d.ts +112 -0
  102. package/dist/core/restart-followup-policy.d.ts.map +1 -0
  103. package/dist/core/restart-followup-policy.js +49 -0
  104. package/dist/core/restart-followup-policy.js.map +1 -0
  105. package/dist/core/role-library.d.ts +1 -1
  106. package/dist/core/role-library.js +1 -1
  107. package/dist/core/session-cwd.d.ts.map +1 -1
  108. package/dist/core/session-cwd.js +8 -0
  109. package/dist/core/session-cwd.js.map +1 -1
  110. package/dist/core/session-discovery.d.ts +14 -0
  111. package/dist/core/session-discovery.d.ts.map +1 -1
  112. package/dist/core/session-discovery.js +25 -0
  113. package/dist/core/session-discovery.js.map +1 -1
  114. package/dist/core/session-liveness.d.ts +15 -0
  115. package/dist/core/session-liveness.d.ts.map +1 -0
  116. package/dist/core/session-liveness.js +76 -0
  117. package/dist/core/session-liveness.js.map +1 -0
  118. package/dist/core/session-manager.d.ts.map +1 -1
  119. package/dist/core/session-manager.js +90 -60
  120. package/dist/core/session-manager.js.map +1 -1
  121. package/dist/core/session-row-enrichment.d.ts +15 -0
  122. package/dist/core/session-row-enrichment.d.ts.map +1 -0
  123. package/dist/core/session-row-enrichment.js +93 -0
  124. package/dist/core/session-row-enrichment.js.map +1 -0
  125. package/dist/core/slash-inject.js +1 -1
  126. package/dist/core/slash-inject.js.map +1 -1
  127. package/dist/core/trigger-final-suppression.d.ts +24 -0
  128. package/dist/core/trigger-final-suppression.d.ts.map +1 -0
  129. package/dist/core/trigger-final-suppression.js +97 -0
  130. package/dist/core/trigger-final-suppression.js.map +1 -0
  131. package/dist/core/trigger-session.d.ts.map +1 -1
  132. package/dist/core/trigger-session.js +64 -4
  133. package/dist/core/trigger-session.js.map +1 -1
  134. package/dist/core/types.d.ts +6 -0
  135. package/dist/core/types.d.ts.map +1 -1
  136. package/dist/core/types.js.map +1 -1
  137. package/dist/core/worker-pool.d.ts +44 -0
  138. package/dist/core/worker-pool.d.ts.map +1 -1
  139. package/dist/core/worker-pool.js +333 -38
  140. package/dist/core/worker-pool.js.map +1 -1
  141. package/dist/daemon.d.ts +5 -1
  142. package/dist/daemon.d.ts.map +1 -1
  143. package/dist/daemon.js +526 -35
  144. package/dist/daemon.js.map +1 -1
  145. package/dist/dashboard/aggregator.d.ts +1 -0
  146. package/dist/dashboard/aggregator.d.ts.map +1 -1
  147. package/dist/dashboard/aggregator.js +34 -6
  148. package/dist/dashboard/aggregator.js.map +1 -1
  149. package/dist/dashboard/bot-payload.d.ts +8 -0
  150. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  151. package/dist/dashboard/bot-payload.js +10 -0
  152. package/dist/dashboard/bot-payload.js.map +1 -1
  153. package/dist/dashboard/compat.d.ts +102 -2
  154. package/dist/dashboard/compat.d.ts.map +1 -1
  155. package/dist/dashboard/compat.js +78 -14
  156. package/dist/dashboard/compat.js.map +1 -1
  157. package/dist/dashboard/connector-api.d.ts.map +1 -1
  158. package/dist/dashboard/connector-api.js +1 -0
  159. package/dist/dashboard/connector-api.js.map +1 -1
  160. package/dist/dashboard/desktop-asks.d.ts +21 -0
  161. package/dist/dashboard/desktop-asks.d.ts.map +1 -0
  162. package/dist/dashboard/desktop-asks.js +49 -0
  163. package/dist/dashboard/desktop-asks.js.map +1 -0
  164. package/dist/dashboard/public-redact.d.ts +7 -0
  165. package/dist/dashboard/public-redact.d.ts.map +1 -1
  166. package/dist/dashboard/public-redact.js +35 -3
  167. package/dist/dashboard/public-redact.js.map +1 -1
  168. package/dist/dashboard/session-presentation.d.ts +16 -0
  169. package/dist/dashboard/session-presentation.d.ts.map +1 -0
  170. package/dist/dashboard/session-presentation.js +62 -0
  171. package/dist/dashboard/session-presentation.js.map +1 -0
  172. package/dist/dashboard/settings-write-applier.d.ts +2 -1
  173. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  174. package/dist/dashboard/settings-write-applier.js +19 -1
  175. package/dist/dashboard/settings-write-applier.js.map +1 -1
  176. package/dist/dashboard/trigger-api.d.ts.map +1 -1
  177. package/dist/dashboard/trigger-api.js +19 -1
  178. package/dist/dashboard/trigger-api.js.map +1 -1
  179. package/dist/dashboard/vc-consumer-profiles-api.d.ts +7 -2
  180. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
  181. package/dist/dashboard/vc-consumer-profiles-api.js +13 -0
  182. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
  183. package/dist/dashboard/web/app.d.ts.map +1 -1
  184. package/dist/dashboard/web/app.js +18 -5
  185. package/dist/dashboard/web/app.js.map +1 -1
  186. package/dist/dashboard/web/bot-defaults-page.d.ts +16 -0
  187. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  188. package/dist/dashboard/web/bot-defaults-page.js +288 -7
  189. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  190. package/dist/dashboard/web/bot-defaults.d.ts +10 -0
  191. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  192. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  193. package/dist/dashboard/web/client-shell.d.ts +29 -0
  194. package/dist/dashboard/web/client-shell.d.ts.map +1 -0
  195. package/dist/dashboard/web/client-shell.js +89 -0
  196. package/dist/dashboard/web/client-shell.js.map +1 -0
  197. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  198. package/dist/dashboard/web/connectors-page.js +5 -1
  199. package/dist/dashboard/web/connectors-page.js.map +1 -1
  200. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  201. package/dist/dashboard/web/i18n.js +130 -22
  202. package/dist/dashboard/web/i18n.js.map +1 -1
  203. package/dist/dashboard/web/preferences.d.ts +7 -0
  204. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  205. package/dist/dashboard/web/preferences.js +32 -0
  206. package/dist/dashboard/web/preferences.js.map +1 -1
  207. package/dist/dashboard/web/sessions-kanban.d.ts +1 -1
  208. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
  209. package/dist/dashboard/web/sessions-kanban.js +1 -1
  210. package/dist/dashboard/web/sessions-kanban.js.map +1 -1
  211. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  212. package/dist/dashboard/web/sessions-page.js +78 -67
  213. package/dist/dashboard/web/sessions-page.js.map +1 -1
  214. package/dist/dashboard/web/sessions.d.ts +4 -0
  215. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  216. package/dist/dashboard/web/sessions.js +14 -1
  217. package/dist/dashboard/web/sessions.js.map +1 -1
  218. package/dist/dashboard/web/settings-page.d.ts +6 -0
  219. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  220. package/dist/dashboard/web/settings-page.js +55 -30
  221. package/dist/dashboard/web/settings-page.js.map +1 -1
  222. package/dist/dashboard/web/store.d.ts +1 -2
  223. package/dist/dashboard/web/store.d.ts.map +1 -1
  224. package/dist/dashboard/web/store.js +69 -20
  225. package/dist/dashboard/web/store.js.map +1 -1
  226. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
  227. package/dist/dashboard/web/vc-consumer-profiles-section.js +128 -42
  228. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
  229. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  230. package/dist/dashboard/webhook-routes.js +9 -2
  231. package/dist/dashboard/webhook-routes.js.map +1 -1
  232. package/dist/dashboard-web/app.js +1 -1
  233. package/dist/dashboard-web/chunks/bot-defaults-page-VQMPUJ4Y.js +10 -0
  234. package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +1 -0
  235. package/dist/dashboard-web/chunks/{chunk-QCPPKCX3.js → chunk-JMRGZQDB.js} +1 -1
  236. package/dist/dashboard-web/chunks/{chunk-EJDYUINZ.js → chunk-NP4JUBGS.js} +1 -1
  237. package/dist/dashboard-web/chunks/{chunk-WXPMNEYV.js → chunk-P327LXOT.js} +1 -1
  238. package/dist/dashboard-web/chunks/chunk-SNKATZWK.js +49 -0
  239. package/dist/dashboard-web/chunks/connectors-page-DOY4J3ZL.js +1 -0
  240. package/dist/dashboard-web/chunks/{groups-page-3P4TLUMF.js → groups-page-74TS2DIH.js} +1 -1
  241. package/dist/dashboard-web/chunks/{insights-page-TDCZV56A.js → insights-page-AYCO65JC.js} +1 -1
  242. package/dist/dashboard-web/chunks/{monitor-room-QWCWL3SX.js → monitor-room-YKYLTSAN.js} +1 -1
  243. package/dist/dashboard-web/chunks/{monitoring-page-IOWFSNVC.js → monitoring-page-QBIUNRBR.js} +1 -1
  244. package/dist/dashboard-web/chunks/{office-page-5AUPEHZP.js → office-page-4PH2A26P.js} +1 -1
  245. package/dist/dashboard-web/chunks/overview-page-H73D5UT4.js +1 -0
  246. package/dist/dashboard-web/chunks/{roles-page-WJVB52ET.js → roles-page-U4BTOQ7F.js} +1 -1
  247. package/dist/dashboard-web/chunks/{schedules-page-RVRWHP4V.js → schedules-page-RHRHX7R7.js} +1 -1
  248. package/dist/dashboard-web/chunks/sessions-page-VSC6AM5G.js +2 -0
  249. package/dist/dashboard-web/chunks/settings-page-LF3RKM5P.js +2 -0
  250. package/dist/dashboard-web/chunks/{skills-page-7YT5TIX5.js → skills-page-SYOIGGXH.js} +1 -1
  251. package/dist/dashboard-web/chunks/{team-federation-page-NJZKTU7A.js → team-federation-page-RMBLASTW.js} +1 -1
  252. package/dist/dashboard-web/chunks/{v3-page-NQ73UA2Q.js → v3-page-XJXKKJRN.js} +1 -1
  253. package/dist/dashboard-web/chunks/{whiteboards-page-DSM3MDMN.js → whiteboards-page-K3YVSTHJ.js} +1 -1
  254. package/dist/dashboard-web/style.css +571 -3
  255. package/dist/dashboard.js +238 -9
  256. package/dist/dashboard.js.map +1 -1
  257. package/dist/global-config.d.ts +11 -0
  258. package/dist/global-config.d.ts.map +1 -1
  259. package/dist/global-config.js +27 -1
  260. package/dist/global-config.js.map +1 -1
  261. package/dist/i18n/en.d.ts.map +1 -1
  262. package/dist/i18n/en.js +6 -19
  263. package/dist/i18n/en.js.map +1 -1
  264. package/dist/i18n/zh.d.ts.map +1 -1
  265. package/dist/i18n/zh.js +6 -19
  266. package/dist/i18n/zh.js.map +1 -1
  267. package/dist/im/lark/card-builder.d.ts +1 -14
  268. package/dist/im/lark/card-builder.d.ts.map +1 -1
  269. package/dist/im/lark/card-builder.js +1 -35
  270. package/dist/im/lark/card-builder.js.map +1 -1
  271. package/dist/im/lark/card-handler.d.ts +10 -0
  272. package/dist/im/lark/card-handler.d.ts.map +1 -1
  273. package/dist/im/lark/card-handler.js +161 -44
  274. package/dist/im/lark/card-handler.js.map +1 -1
  275. package/dist/im/lark/client.d.ts +47 -0
  276. package/dist/im/lark/client.d.ts.map +1 -1
  277. package/dist/im/lark/client.js +127 -18
  278. package/dist/im/lark/client.js.map +1 -1
  279. package/dist/im/lark/event-dispatcher.d.ts +13 -0
  280. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  281. package/dist/im/lark/event-dispatcher.js +48 -3
  282. package/dist/im/lark/event-dispatcher.js.map +1 -1
  283. package/dist/im/lark/identity-cache.d.ts +25 -1
  284. package/dist/im/lark/identity-cache.d.ts.map +1 -1
  285. package/dist/im/lark/identity-cache.js +47 -1
  286. package/dist/im/lark/identity-cache.js.map +1 -1
  287. package/dist/im/lark/overload-nonce.d.ts +19 -0
  288. package/dist/im/lark/overload-nonce.d.ts.map +1 -0
  289. package/dist/im/lark/overload-nonce.js +72 -0
  290. package/dist/im/lark/overload-nonce.js.map +1 -0
  291. package/dist/im/lark/v3-progress-card.d.ts.map +1 -1
  292. package/dist/im/lark/v3-progress-card.js +5 -0
  293. package/dist/im/lark/v3-progress-card.js.map +1 -1
  294. package/dist/services/async-trigger-state.d.ts +82 -0
  295. package/dist/services/async-trigger-state.d.ts.map +1 -0
  296. package/dist/services/async-trigger-state.js +95 -0
  297. package/dist/services/async-trigger-state.js.map +1 -0
  298. package/dist/services/async-trigger-store.d.ts +28 -0
  299. package/dist/services/async-trigger-store.d.ts.map +1 -0
  300. package/dist/services/async-trigger-store.js +120 -0
  301. package/dist/services/async-trigger-store.js.map +1 -0
  302. package/dist/services/bot-config-store.d.ts.map +1 -1
  303. package/dist/services/bot-config-store.js +34 -2
  304. package/dist/services/bot-config-store.js.map +1 -1
  305. package/dist/services/bridge-fallback-gate.d.ts +32 -0
  306. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  307. package/dist/services/bridge-fallback-gate.js +39 -0
  308. package/dist/services/bridge-fallback-gate.js.map +1 -1
  309. package/dist/services/bridge-turn-queue.d.ts.map +1 -1
  310. package/dist/services/bridge-turn-queue.js +15 -1
  311. package/dist/services/bridge-turn-queue.js.map +1 -1
  312. package/dist/services/card-prefs-store.d.ts +4 -0
  313. package/dist/services/card-prefs-store.d.ts.map +1 -1
  314. package/dist/services/card-prefs-store.js +8 -0
  315. package/dist/services/card-prefs-store.js.map +1 -1
  316. package/dist/services/claude-transcript.d.ts +23 -0
  317. package/dist/services/claude-transcript.d.ts.map +1 -1
  318. package/dist/services/claude-transcript.js +33 -0
  319. package/dist/services/claude-transcript.js.map +1 -1
  320. package/dist/services/codex-app-runner-protocol.d.ts +61 -0
  321. package/dist/services/codex-app-runner-protocol.d.ts.map +1 -0
  322. package/dist/services/codex-app-runner-protocol.js +170 -0
  323. package/dist/services/codex-app-runner-protocol.js.map +1 -0
  324. package/dist/services/codex-app-turn-controller.d.ts +72 -0
  325. package/dist/services/codex-app-turn-controller.d.ts.map +1 -0
  326. package/dist/services/codex-app-turn-controller.js +524 -0
  327. package/dist/services/codex-app-turn-controller.js.map +1 -0
  328. package/dist/services/codex-runner-freshness.d.ts +39 -0
  329. package/dist/services/codex-runner-freshness.d.ts.map +1 -0
  330. package/dist/services/codex-runner-freshness.js +78 -0
  331. package/dist/services/codex-runner-freshness.js.map +1 -0
  332. package/dist/services/connector-store.d.ts +6 -0
  333. package/dist/services/connector-store.d.ts.map +1 -1
  334. package/dist/services/connector-store.js.map +1 -1
  335. package/dist/services/grant-store.d.ts.map +1 -1
  336. package/dist/services/grant-store.js +16 -0
  337. package/dist/services/grant-store.js.map +1 -1
  338. package/dist/services/hermes-transcript.d.ts +1 -0
  339. package/dist/services/hermes-transcript.d.ts.map +1 -1
  340. package/dist/services/hermes-transcript.js +49 -0
  341. package/dist/services/hermes-transcript.js.map +1 -1
  342. package/dist/services/sandbox-migration.d.ts +14 -0
  343. package/dist/services/sandbox-migration.d.ts.map +1 -0
  344. package/dist/services/sandbox-migration.js +85 -0
  345. package/dist/services/sandbox-migration.js.map +1 -0
  346. package/dist/services/sandbox-store.d.ts +28 -0
  347. package/dist/services/sandbox-store.d.ts.map +1 -1
  348. package/dist/services/sandbox-store.js +82 -0
  349. package/dist/services/sandbox-store.js.map +1 -1
  350. package/dist/services/schedule-split-migration.d.ts +2 -0
  351. package/dist/services/schedule-split-migration.d.ts.map +1 -0
  352. package/dist/services/schedule-split-migration.js +159 -0
  353. package/dist/services/schedule-split-migration.js.map +1 -0
  354. package/dist/services/schedule-store.d.ts +28 -4
  355. package/dist/services/schedule-store.d.ts.map +1 -1
  356. package/dist/services/schedule-store.js +118 -33
  357. package/dist/services/schedule-store.js.map +1 -1
  358. package/dist/services/trigger-types.d.ts +18 -1
  359. package/dist/services/trigger-types.d.ts.map +1 -1
  360. package/dist/services/trigger-types.js +3 -0
  361. package/dist/services/trigger-types.js.map +1 -1
  362. package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +1 -1
  363. package/dist/services/vc-meeting-consumer-profile-store.js +1 -0
  364. package/dist/services/vc-meeting-consumer-profile-store.js.map +1 -1
  365. package/dist/services/vc-meeting-consumer-profile-templates.d.ts +32 -0
  366. package/dist/services/vc-meeting-consumer-profile-templates.d.ts.map +1 -0
  367. package/dist/services/vc-meeting-consumer-profile-templates.js +106 -0
  368. package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -0
  369. package/dist/services/vc-meeting-delivery-feed.d.ts +1 -1
  370. package/dist/services/vc-meeting-delivery-feed.d.ts.map +1 -1
  371. package/dist/services/vc-meeting-delivery-feed.js +2 -1
  372. package/dist/services/vc-meeting-delivery-feed.js.map +1 -1
  373. package/dist/services/vc-meeting-delivery-hub-store.d.ts +3 -1
  374. package/dist/services/vc-meeting-delivery-hub-store.d.ts.map +1 -1
  375. package/dist/services/vc-meeting-delivery-hub-store.js +11 -0
  376. package/dist/services/vc-meeting-delivery-hub-store.js.map +1 -1
  377. package/dist/services/vc-meeting-delivery-protocol.d.ts +9 -2
  378. package/dist/services/vc-meeting-delivery-protocol.d.ts.map +1 -1
  379. package/dist/services/vc-meeting-delivery-protocol.js +10 -1
  380. package/dist/services/vc-meeting-delivery-protocol.js.map +1 -1
  381. package/dist/services/vc-meeting-delivery-receiver.d.ts.map +1 -1
  382. package/dist/services/vc-meeting-delivery-receiver.js +10 -1
  383. package/dist/services/vc-meeting-delivery-receiver.js.map +1 -1
  384. package/dist/services/vc-meeting-delivery-store.d.ts +12 -2
  385. package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
  386. package/dist/services/vc-meeting-delivery-store.js +14 -2
  387. package/dist/services/vc-meeting-delivery-store.js.map +1 -1
  388. package/dist/services/vc-meeting-im-reply.d.ts +2 -1
  389. package/dist/services/vc-meeting-im-reply.d.ts.map +1 -1
  390. package/dist/services/vc-meeting-im-reply.js +19 -3
  391. package/dist/services/vc-meeting-im-reply.js.map +1 -1
  392. package/dist/services/vc-meeting-listener-output-protocol.d.ts +27 -0
  393. package/dist/services/vc-meeting-listener-output-protocol.d.ts.map +1 -0
  394. package/dist/services/vc-meeting-listener-output-protocol.js +58 -0
  395. package/dist/services/vc-meeting-listener-output-protocol.js.map +1 -0
  396. package/dist/services/vc-meeting-listener-topic-store.d.ts +31 -0
  397. package/dist/services/vc-meeting-listener-topic-store.d.ts.map +1 -0
  398. package/dist/services/vc-meeting-listener-topic-store.js +120 -0
  399. package/dist/services/vc-meeting-listener-topic-store.js.map +1 -0
  400. package/dist/services/vc-meeting-runtime-store.d.ts +2 -1
  401. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
  402. package/dist/services/vc-meeting-runtime-store.js +8 -0
  403. package/dist/services/vc-meeting-runtime-store.js.map +1 -1
  404. package/dist/services/vc-meeting-send-policy.d.ts +8 -1
  405. package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
  406. package/dist/services/vc-meeting-send-policy.js +8 -0
  407. package/dist/services/vc-meeting-send-policy.js.map +1 -1
  408. package/dist/types.d.ts +53 -4
  409. package/dist/types.d.ts.map +1 -1
  410. package/dist/utils/allowed-users-apply.d.ts +76 -0
  411. package/dist/utils/allowed-users-apply.d.ts.map +1 -0
  412. package/dist/utils/allowed-users-apply.js +123 -0
  413. package/dist/utils/allowed-users-apply.js.map +1 -0
  414. package/dist/utils/allowed-users-cache.d.ts +29 -0
  415. package/dist/utils/allowed-users-cache.d.ts.map +1 -0
  416. package/dist/utils/allowed-users-cache.js +82 -0
  417. package/dist/utils/allowed-users-cache.js.map +1 -0
  418. package/dist/utils/child-env.d.ts +4 -3
  419. package/dist/utils/child-env.d.ts.map +1 -1
  420. package/dist/utils/child-env.js +16 -1
  421. package/dist/utils/child-env.js.map +1 -1
  422. package/dist/utils/cli-usage-limit.d.ts +27 -1
  423. package/dist/utils/cli-usage-limit.d.ts.map +1 -1
  424. package/dist/utils/cli-usage-limit.js +92 -20
  425. package/dist/utils/cli-usage-limit.js.map +1 -1
  426. package/dist/utils/input-gate.d.ts +2 -0
  427. package/dist/utils/input-gate.d.ts.map +1 -1
  428. package/dist/utils/input-gate.js +2 -0
  429. package/dist/utils/input-gate.js.map +1 -1
  430. package/dist/utils/runtime-build-id.d.ts +21 -0
  431. package/dist/utils/runtime-build-id.d.ts.map +1 -0
  432. package/dist/utils/runtime-build-id.js +83 -0
  433. package/dist/utils/runtime-build-id.js.map +1 -0
  434. package/dist/utils/terminal-renderer.d.ts +3 -3
  435. package/dist/utils/terminal-renderer.js +3 -3
  436. package/dist/vc-agent/cards.d.ts.map +1 -1
  437. package/dist/vc-agent/cards.js +21 -1
  438. package/dist/vc-agent/cards.js.map +1 -1
  439. package/dist/worker.js +1010 -669
  440. package/dist/worker.js.map +1 -1
  441. package/dist/workflows/events/payloads.d.ts +56 -0
  442. package/dist/workflows/events/payloads.d.ts.map +1 -1
  443. package/dist/workflows/events/payloads.js +9 -0
  444. package/dist/workflows/events/payloads.js.map +1 -1
  445. package/dist/workflows/events/schema.d.ts +86 -0
  446. package/dist/workflows/events/schema.d.ts.map +1 -1
  447. package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
  448. package/dist/workflows/hostExecutors/botmux-schedule.js +13 -1
  449. package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
  450. package/dist/workflows/migration/v2-run-archive-schema.d.ts +20 -20
  451. package/dist/workflows/migration/v2-to-v3.d.ts.map +1 -1
  452. package/dist/workflows/migration/v2-to-v3.js +5 -1
  453. package/dist/workflows/migration/v2-to-v3.js.map +1 -1
  454. package/dist/workflows/shared/sandbox-policy.d.ts +10 -1
  455. package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -1
  456. package/dist/workflows/shared/sandbox-policy.js +12 -0
  457. package/dist/workflows/shared/sandbox-policy.js.map +1 -1
  458. package/dist/workflows/v3/architect.d.ts.map +1 -1
  459. package/dist/workflows/v3/architect.js +1 -0
  460. package/dist/workflows/v3/architect.js.map +1 -1
  461. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
  462. package/dist/workflows/v3/bot-resolve.js +36 -0
  463. package/dist/workflows/v3/bot-resolve.js.map +1 -1
  464. package/dist/workflows/v3/cli-run.d.ts +9 -0
  465. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  466. package/dist/workflows/v3/cli-run.js +17 -2
  467. package/dist/workflows/v3/cli-run.js.map +1 -1
  468. package/dist/workflows/v3/contract.d.ts +8 -0
  469. package/dist/workflows/v3/contract.d.ts.map +1 -1
  470. package/dist/workflows/v3/contract.js.map +1 -1
  471. package/dist/workflows/v3/goal-cli.d.ts +58 -0
  472. package/dist/workflows/v3/goal-cli.d.ts.map +1 -0
  473. package/dist/workflows/v3/goal-cli.js +430 -0
  474. package/dist/workflows/v3/goal-cli.js.map +1 -0
  475. package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
  476. package/dist/workflows/v3/library-materialize.js +5 -1
  477. package/dist/workflows/v3/library-materialize.js.map +1 -1
  478. package/dist/workflows/v3/library-schema.d.ts +21 -0
  479. package/dist/workflows/v3/library-schema.d.ts.map +1 -1
  480. package/dist/workflows/v3/library-schema.js +95 -1
  481. package/dist/workflows/v3/library-schema.js.map +1 -1
  482. package/dist/workflows/v3/progress-projection.d.ts +3 -0
  483. package/dist/workflows/v3/progress-projection.d.ts.map +1 -1
  484. package/dist/workflows/v3/progress-projection.js +23 -1
  485. package/dist/workflows/v3/progress-projection.js.map +1 -1
  486. package/dist/workflows/v3/run-envelope.d.ts +46 -1
  487. package/dist/workflows/v3/run-envelope.d.ts.map +1 -1
  488. package/dist/workflows/v3/run-envelope.js +32 -1
  489. package/dist/workflows/v3/run-envelope.js.map +1 -1
  490. package/package.json +2 -2
  491. package/dist/dashboard-web/chunks/bot-defaults-page-O376WSER.js +0 -5
  492. package/dist/dashboard-web/chunks/chunk-H7P5UV4W.js +0 -49
  493. package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +0 -1
  494. package/dist/dashboard-web/chunks/connectors-page-IR54AOAI.js +0 -1
  495. package/dist/dashboard-web/chunks/overview-page-QJMI6NLW.js +0 -1
  496. package/dist/dashboard-web/chunks/sessions-page-KWLGBX6G.js +0 -3
  497. package/dist/dashboard-web/chunks/settings-page-TNZEPC7V.js +0 -2
  498. package/dist/services/sandbox-land.d.ts +0 -45
  499. package/dist/services/sandbox-land.d.ts.map +0 -1
  500. package/dist/services/sandbox-land.js +0 -394
  501. package/dist/services/sandbox-land.js.map +0 -1
  502. package/dist/utils/screen-analyzer.d.ts +0 -75
  503. package/dist/utils/screen-analyzer.d.ts.map +0 -1
  504. package/dist/utils/screen-analyzer.js +0 -333
  505. package/dist/utils/screen-analyzer.js.map +0 -1
@@ -1 +0,0 @@
1
- var s="botmux:open-create-session",e=!1;function o(){e=!0,window.dispatchEvent(new Event(s)),window.location.hash.startsWith("#/sessions")||(window.location.hash="#/sessions")}function t(){let n=e;return e=!1,n}export{s as a,o as b,t as c};
@@ -1 +0,0 @@
1
- import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{b as W}from"./chunk-QCPPKCX3.js";import{a as ce,c as le,g as Le,k as M,p as ie}from"./chunk-QFMH6ITB.js";import"./chunk-H7P5UV4W.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Ce,d as re}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var l=K(Ce(),1);var m=K(Ce(),1);var n=K(re(),1),Re=50,we={total:0,ok:0,error:0,successRate:0};function $e(t,e=Date.now()){if(t==="all")return;let s=t==="24h"?24:t==="7d"?168:720;return new Date(e-s*60*60*1e3).toISOString()}function Ae(t,e=0){let s=new URLSearchParams({limit:String(Re),offset:String(e)});t.connectorId&&s.set("connectorId",t.connectorId),t.status&&s.set("status",t.status);let g=$e(t.timeWindow);return g&&s.set("since",g),t.query.trim()&&s.set("q",t.query.trim()),s}function Ie(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function de(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function He(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ke(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function Oe(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,s])=>s!=null&&s!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([s,g])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:s}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(g)})})]},s))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function ve(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function ue(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Te(t={}){let e=W(),s=(0,m.useRef)(!1),g=(0,m.useRef)([]),[k,L]=(0,m.useState)([]),[h,I]=(0,m.useState)([]),[y,R]=(0,m.useState)(we),[C,$]=(0,m.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,r]=(0,m.useState)(null),[E,_]=(0,m.useState)(!0),[v,U]=(0,m.useState)(!1),[O,J]=(0,m.useState)(!1),[V,Y]=(0,m.useState)(0),[q,P]=(0,m.useState)(""),[X,Z]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>new Map(k.map(c=>[c.id,c.name])),[k]),u=(0,m.useMemo)(()=>h.find(c=>c.triggerId===d)??h[0]??null,[h,d]),ee=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...k.map(c=>({value:c.id,label:c.name}))],[k,e]),B=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,m.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),A=(0,m.useCallback)(async(c=!1,w=!1)=>{w?U(!0):_(!0),P("");let z=c?g.current.length:0,oe=Ae(C,z),f=new URLSearchParams(oe);f.delete("limit"),f.delete("offset");try{let[F,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),c?Promise.resolve(null):H(`/api/trigger-logs/summary?${f}`)]);if(!s.current)return;if(F.status!==200)throw new Error(String(F.body?.error||F.status));let S=Array.isArray(F.body?.logs)?F.body.logs:[],ne=c?[...g.current,...S]:S;g.current=ne,I(ne),Y(Number(F.body?.total??S.length)),J(F.body?.hasMore===!0),c||(R(te?.status===200?te.body?.summary??we:we),r(ae=>S.some(fe=>fe.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(F){s.current&&P(F?.message||e("webhookLogs.loadFailed"))}finally{s.current&&(_(!1),U(!1))}},[C,e]);(0,m.useEffect)(()=>(s.current=!0,H("/api/connectors").then(c=>{s.current&&c.status===200&&L(Array.isArray(c.body?.connectors)?c.body.connectors:[])}),()=>{s.current=!1}),[]),(0,m.useEffect)(()=>{let c=setTimeout(()=>{A(!1)},C.query?260:0);return()=>clearTimeout(c)},[C,A]),(0,m.useEffect)(()=>{let c=setInterval(()=>{A(!1,!0)},15e3);return()=>clearInterval(c)},[A]);async function pe(){u&&(await navigator.clipboard?.writeText(JSON.stringify(u,null,2)),Z(!0),setTimeout(()=>s.current&&Z(!1),1200))}let he=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${v?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ue,{label:e("webhookLogs.total"),value:y.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ue,{label:e("webhookLogs.successRate"),value:`${y.successRate.toFixed(y.successRate%1?1:0)}%`,tone:"ok",hint:`${y.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ue,{label:e("webhookLogs.failures"),value:y.error,tone:y.error?"error":void 0,hint:y.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ue,{label:e("webhookLogs.p95"),value:de(y.p95DurationMs),hint:`${e("webhookLogs.average")} ${de(y.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:c=>c.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:C.query,onChange:c=>{let w=c.currentTarget.value;$(z=>({...z,query:w}))}}),(0,n.jsx)(ve,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:C.connectorId,options:ee,onChange:c=>$(w=>({...w,connectorId:c}))}),(0,n.jsx)(ve,{id:"webhook-log-status",label:e("webhookLogs.status"),value:C.status,options:B,onChange:c=>$(w=>({...w,status:c}))}),(0,n.jsx)(ve,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:C.timeWindow,options:be,onChange:c=>$(w=>({...w,timeWindow:c}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:v,onClick:()=>{A(!1,!0)},children:e("webhookLogs.refresh")})]}),q?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",q]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),E&&!h.length?(0,n.jsx)(le,{label:e("webhookLogs.loading"),compact:!0}):null,!E&&!h.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:h.map(c=>{let w=u?.triggerId===c.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":w,className:`webhook-log-row${w?" active":""}`,onClick:()=>r(c.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${c.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:T.get(c.connectorId||"")||c.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:c.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Ie(c.createdAt)}),(0,n.jsx)("span",{children:c.errorCode||c.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:c.status,children:c.response?.httpStatus??(c.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:de(c.response?.durationMs)})]})]},`${c.triggerId}-${c.createdAt}`)})}),O?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:E,onClick:()=>{A(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:T.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Ie(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{pe()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:de(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:He(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ke,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ke,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ke,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:he})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Oe,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(re(),1);function qe(t,e){return t.map(s=>s.id===e.id?e:s)}var Me={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",topicMessageMode:"default",topicMessageText:"",verify:"token",secret:"",storePayload:!0};function oo(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Be(t){return[{value:"turn",label:t("connectors.kindTurn")},{value:"workflow",label:t("connectors.kindWorkflowRetiring"),disabled:!0}]}function Ne(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function ge(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function Pe(t){let e=(0,l.useRef)(null),[s,g]=(0,l.useState)(!1),[k,L]=(0,l.useState)(""),h=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,l.useMemo)(()=>new Set(h),[h]),y=k.trim().toLocaleLowerCase(),R=(0,l.useMemo)(()=>y?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(y)):t.groups,[y,t.groups]),C=t.multiple?h.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(h.length):t.groups.find(d=>d.chatId===h[0])?.name||h[0]||t.placeholder;(0,l.useEffect)(()=>{if(!s)return;let d=r=>{e.current?.contains(r.target)||g(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[s]);function $(d){if(!t.multiple){t.onChange(d),g(!1),L("");return}t.onChange(I.has(d)?h.filter(r=>r!==d):[...h,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${s?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":s,onClick:()=>g(d=>!d),children:[(0,o.jsx)("span",{className:h.length||t.multiple&&t.allLabel?"":"muted",children:C}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),s?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:k,placeholder:t.searchPlaceholder,onChange:d=>L(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),g(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!y?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${h.length===0?" selected":""}`,role:"option","aria-selected":h.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,R.map(d=>{let r=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${r?" selected":""}`,role:"option","aria-selected":r,onClick:()=>$(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),R.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function me(t,e){return t.filter(s=>s.bots.includes(e))}function Ge(t,e){let s=t.target.chatId||"",g=s&&me(e,t.target.botId).some(k=>k.chatId===s);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:g?s:"",manualChat:!!(s&&!g),manualChatId:g?"":s,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",topicMessageMode:t.topicMessage?.mode||"default",topicMessageText:t.topicMessage?.text||"",verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function We(t){let e=W(),s=t.active==="webhooks",g=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${s?" on":""}`,role:"tab","aria-selected":s,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${g?" on":""}`,role:"tab","aria-selected":g,children:e("connectors.tabLogs")})]})}function xe(t){let e=W(),s=(0,l.useRef)(!1),g=(0,l.useRef)(null),k=(0,l.useRef)(null),[L,h]=(0,l.useState)([]),[I,y]=(0,l.useState)([]),[R,C]=(0,l.useState)([]),[$,d]=(0,l.useState)(!0),[r,E]=(0,l.useState)(Me),[_,v]=(0,l.useState)(null),[U,O]=(0,l.useState)(null),[J,V]=(0,l.useState)(!1),[Y,q]=(0,l.useState)(!1),[P,X]=(0,l.useState)(null),[Z,T]=(0,l.useState)(null),[u,ee]=(0,l.useState)(null),B=(0,l.useMemo)(()=>me(I,r.botId),[I,r.botId]),be=(0,l.useMemo)(()=>L.length?L.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[L,e]),A=(0,l.useMemo)(()=>Be(e),[e]),pe=(0,l.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),he=(0,l.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,l.useCallback)(a=>I.find(b=>b.chatId===a)?.name||a,[I]),c=(0,l.useCallback)((a,i)=>{E(b=>{let N=b.botId&&a.some(D=>D.larkAppId===b.botId)?b.botId:a[0]?.larkAppId??"",p=me(i,N),x=b.chatId&&p.some(D=>D.chatId===b.chatId)?b.chatId:p[0]?.chatId??"",G=new Set(p.map(D=>D.chatId));return{...b,botId:N,chatId:x,allowChats:b.allowChats.filter(D=>G.has(D))}})},[]),w=(0,l.useCallback)(async()=>{d(!0);try{let[a,i,b]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!s.current)return;let N=(a.body?.bots||[]).map(x=>({larkAppId:x.larkAppId,botName:x.botName||x.larkAppId})),p=(b.body?.chats||[]).map(x=>({chatId:x.chatId,name:x.name||"",bots:(x.memberBots||[]).filter(G=>G.inChat).map(G=>G.larkAppId)}));h(N),y(p),C(Array.isArray(i.body?.connectors)?i.body.connectors:[]),c(N,p)}finally{s.current&&d(!1)}},[c]);(0,l.useEffect)(()=>(s.current=!0,w(),()=>{s.current=!1,g.current&&clearTimeout(g.current)}),[w]),(0,l.useEffect)(()=>{let a=new Set(B.map(i=>i.chatId));E(i=>({...i,chatId:i.chatId&&a.has(i.chatId)?i.chatId:B[0]?.chatId??"",allowChats:i.allowChats.filter(b=>a.has(b))}))},[B]),(0,l.useEffect)(()=>{let a=k.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let i=a.querySelector(".connector-modal-body");i&&(i.scrollTop=0)}else a.open&&a.close()},[Y]),(0,l.useEffect)(()=>()=>{let a=k.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function f(a){E(i=>({...i,...a}))}function F(){v(null),O(null),X(null),E(a=>{let i=a.botId||L[0]?.larkAppId||"";return{...Me,botId:i,chatId:me(I,i)[0]?.chatId||""}}),q(!0)}function te(a){v(null),O(null),T(null),X(a),E(Ge(a,I)),q(!0)}function S(){J||(q(!1),v(null),O(null),X(null))}async function ne(){v(null),O(null);let a=r.name.trim(),i=r.botId;if(!a){v({text:e("connectors.errName"),error:!0});return}if(!i){v({text:e("connectors.errBot"),error:!0});return}if(r.kind==="workflow"){v({text:e("connectors.errLegacyWorkflowRetired"),error:!0});return}let b=r.topicMessageText.trim();if(r.topicMessageMode==="custom"&&!b){v({text:e("connectors.errTopicMessage"),error:!0});return}let N={name:a,enabled:P?.enabled??!0,target:{kind:r.kind,mode:r.mode,botId:i},promptEnvelope:{sourceName:a,instruction:r.instruction.trim()},topicMessage:{mode:r.topicMessageMode,...r.topicMessageMode==="custom"?{text:b}:{}},verify:{type:r.verify},loggingPolicy:{storePayload:r.storePayload,storeHeaders:!0,retentionDays:14}};if(r.mode==="fixed"){let p=r.manualChat?r.manualChatId.trim():r.chatId;if(!p){v({text:e("connectors.errChat"),error:!0});return}N.target.chatId=p}else r.mode==="dynamic"&&(N.target.allowChats=r.allowChats);if(r.mode==="new-group"){let p=r.dedup.trim();if(r.deduplicate&&!p){v({text:e("connectors.errDedup"),error:!0});return}N.lifecycleExtractors=r.deduplicate?{dedupKey:p}:null}else N.lifecycleExtractors=null;r.secret.trim()&&(N.secret=r.secret.trim()),V(!0),v({text:e(P?"connectors.saving":"connectors.creating")});try{let p=await Q(P?"PUT":"POST",P?`/api/connectors/${encodeURIComponent(P.id)}`:"/api/connectors",N);if(!s.current)return;if((p.status===201||p.status===200)&&p.body?.ok){if(P){let ye=P.id;C(De=>qe(De,p.body.connector)),T({id:ye,text:e("connectors.updated")}),q(!1),X(null);return}let x=p.body.webhookUrl||Ne(p.body.connector.id),G=(p.body.connector?.verify?.type??"token")==="token",D=r.mode==="dynamic",Ee=D?N.target.allowChats?.[0]||"<chatId>":"";v(null),O({name:a,mode:r.mode,chatId:N.target.chatId,url:x,secret:p.body.secret,isToken:G,isDynamic:D,exampleChat:Ee}),E(ye=>({...ye,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",topicMessageMode:"default",topicMessageText:"",allowChats:[],storePayload:!0})),await w()}else{let x=p.body?.error||p.status;v({text:e("connectors.createFailed",{error:String(x)}),error:!0})}}finally{s.current&&V(!1)}}async function ae(a){T({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let i=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.toggleFailed",{error:String(b)}),error:!0})}}async function fe(a){let i=a.loggingPolicy?.storePayload!==!1;T({id:a.id,text:e("connectors.saving")});let b=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!i,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(s.current)if(b.status===200&&b.body?.ok)T(null),await w();else{let N=b.body?.error||b.status;T({id:a.id,text:e("connectors.saveFailed",{error:String(N)}),error:!0})}}async function Se(a){if(!confirm(e("connectors.delConfirm")))return;T({id:a.id,text:e("connectors.deleting")});let i=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(s.current)if(i.status===200&&i.body?.ok)T(null),await w();else{let b=i.body?.error||i.status;T({id:a.id,text:e("connectors.deleteFailed",{error:String(b)}),error:!0})}}function Fe(a){navigator.clipboard?.writeText(Ne(a.id)),ee(a.id),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{s.current&&ee(null)},1200)}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Le,{className:"page-primary-action connector-create-trigger",onClick:F,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(We,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:k,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(P?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(_e,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(M,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:r.name,onChange:a=>f({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fBot")}),(0,o.jsx)(ge,{id:"cn-bot",label:e("connectors.fBot"),value:r.botId,options:be,onChange:a=>f({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fKind")}),(0,o.jsx)(ge,{id:"cn-kind",label:e("connectors.fKind"),value:r.kind,options:A,onChange:a=>f({kind:a})})]}),r.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(M,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:r.workflowId,onChange:a=>f({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fMode")}),(0,o.jsx)(ge,{id:"cn-mode",label:e("connectors.fMode"),value:r.mode,options:pe,onChange:a=>f({mode:a})})]}),r.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(M,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[r.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:r.manualChatId,onChange:a=>f({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(Pe,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:B,value:r.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>f({manualChat:!r.manualChat}),children:r.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):r.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(M,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(Pe,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:B,value:r.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>f({allowChats:a})})]}):null,r.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,r.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(M,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!r.deduplicate,className:`connector-strategy-option${r.deduplicate?"":" selected"}`,onClick:()=>f({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.deduplicate,className:`connector-strategy-option${r.deduplicate?" selected":""}`,onClick:()=>f({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),r.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(M,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:r.dedup,onChange:a=>f({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(M,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:r.instruction,onChange:a=>f({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-topic-message-config",children:[(0,o.jsx)(M,{help:e("connectors.topicMessageHint"),children:e("connectors.topicMessage")}),(0,o.jsx)("div",{className:"connector-topic-message-options",role:"radiogroup","aria-label":e("connectors.topicMessage"),children:["default","custom","none"].map(a=>(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.topicMessageMode===a,className:`connector-topic-message-option${r.topicMessageMode===a?" selected":""}`,onClick:()=>f({topicMessageMode:a}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e(`connectors.topicMessage${a==="default"?"Default":a==="custom"?"Custom":"None"}`)}),(0,o.jsx)("small",{children:e(`connectors.topicMessage${a==="default"?"DefaultHint":a==="custom"?"CustomHint":"NoneHint"}`)})]})]},a))}),r.topicMessageMode==="custom"?(0,o.jsxs)("label",{className:"connector-topic-message-input",htmlFor:"cn-topic-message",children:[(0,o.jsx)("input",{id:"cn-topic-message",type:"text",maxLength:200,value:r.topicMessageText,onChange:a=>f({topicMessageText:a.currentTarget.value}),placeholder:e("connectors.topicMessageCustomPh")}),(0,o.jsxs)("small",{children:[e("connectors.topicMessageCustomHelp"),(0,o.jsxs)("span",{children:[Array.from(r.topicMessageText).length,"/200"]})]})]}):(0,o.jsx)("p",{className:`connector-topic-message-preview${r.topicMessageMode==="none"?" muted":""}`,children:r.topicMessageMode==="none"?e("connectors.topicMessageNonePreview"):e("connectors.topicMessagePreview",{source:r.name.trim()||e("connectors.topicMessageSourceFallback")})})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:r.storePayload,onChange:a=>f({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fVerify")}),(0,o.jsx)(ge,{id:"cn-verify",label:e("connectors.fVerify"),value:r.verify,options:he,onChange:a=>f({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(M,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:r.secret,onChange:a=>f({secret:a.currentTarget.value}),placeholder:e(P?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(P?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:$?(0,o.jsx)(le,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(Ue,{connectors:R,bots:L,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Fe,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{fe(a)},onDelete:a=>{Se(a)}})})})]}):(0,o.jsx)(Te,{embedded:!0})]})}function _e(t){let e=W(),s=t.created,g=s.isDynamic?`${s.url}?chatId=${s.exampleChat}`:s.url,k=s.exampleChat!=="<chatId>"?`\uFF08${t.groupName(s.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:s.name}),s.mode==="fixed"&&s.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(s.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:s.url})]}),s.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[s.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:s.secret})]}):null,s.isToken&&s.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:k})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):s.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(s.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function Ue(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(s=>{let g=t.bots.find(C=>C.larkAppId===s.target.botId),k=Ne(s.id),L=(s.verify?.type??"token")==="token",h=e(L?"connectors.badgeToken":"connectors.badgeSign"),I=s.target.mode==="fixed"&&s.target.chatId?e("connectors.dest",{name:t.groupName(s.target.chatId)}):"",y=t.editMsg?.id===s.id?t.editMsg:null,R=t.copiedId===s.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:s.name}),(0,o.jsx)("span",{className:s.enabled?"connector-status-pill ok":"connector-status-pill muted",children:s.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:g?.botName||s.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(s.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(s.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:h}),(0,o.jsx)("span",{children:s.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:s.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${R?" copied":""}`,type:"button",onClick:()=>t.onCopy(s),children:e(R?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[k,L?"/<token>":""]})]}),L?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,s.target.kind==="workflow"?(0,o.jsx)("div",{className:"muted connector-item-note",children:e("connectors.legacyWorkflowNote")}):null,s.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,s.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),s.promptEnvelope.instruction]}):null,(0,o.jsx)("div",{className:"muted connector-item-note",children:s.topicMessage?.mode==="none"?e("connectors.topicMessageListNone"):s.topicMessage?.mode==="custom"?e("connectors.topicMessageListCustom",{text:s.topicMessage.text||""}):e("connectors.topicMessageListDefault")}),y?(0,o.jsx)("div",{className:y.error?"err connector-item-note":"muted connector-item-note",children:y.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(s),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(s),children:s.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(s),children:s.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(s),children:e("connectors.btnDel")})]})]},s.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function to(t){return se(t,(0,o.jsx)(xe,{tab:"webhooks"}))}function no(t){return se(t,(0,o.jsx)(xe,{tab:"logs"}))}export{oo as buildConnectorInstructionUpdateBody,Be as buildConnectorKindOptions,no as renderConnectorsLogsPage,to as renderConnectorsPage,qe as replaceConnectorById};
@@ -1 +0,0 @@
1
- import{a as Q,b as j}from"./chunk-EJDYUINZ.js";import{a as J,b as A}from"./chunk-QCPPKCX3.js";import{b as H,d as M,e as T,f as O,j as W,l as x,m as I,n as P,o as X,q as G}from"./chunk-QFMH6ITB.js";import{A as $,C,D as q,E as y,F as f,G as h,u as L,w as k}from"./chunk-H7P5UV4W.js";import{a as V}from"./chunk-SYC6D5XU.js";import{a as ae,d as K}from"./chunk-5THX4DI2.js";import{c as R}from"./chunk-7SZRL6FY.js";var r=R(ae(),1);var t=R(K(),1),re=new Set(["working","analyzing","active","starting"]),le=new Set(["idle","dormant"]),ee="botmux.overview.teamExpanded",te="botmux.overview.activeSort",_=5,z=1,ce=260;function ve(){try{return window.localStorage.getItem(ee)==="1"}catch{return!1}}function de(e){try{window.localStorage.setItem(ee,e?"1":"0")}catch{}}function me(e){return e==="attention"?"attention":"time"}function ue(){try{return me(window.localStorage.getItem(te))}catch{return"time"}}function we(e){try{window.localStorage.setItem(te,e)}catch{}}function pe(e,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...e].sort((i,a)=>{let m=f(i)?0:1,l=f(a)?0:1;if(m!==l)return m-l;if(m===0){let p=h(i)-h(a);if(p!==0)return p}return o(i,a)}):[...e].sort(o)}function fe(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function ge(e,s){let o=String(e??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Se(e){if(!e)return z*_;let s=window.getComputedStyle(e).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||_)*z}function be(e,s){if(!e)return;let o=document.querySelector(".sidebar");if(!o||window.matchMedia("(max-width: 980px)").matches){e.style.removeProperty(s);return}let i=o.getBoundingClientRect().bottom,a=e.getBoundingClientRect().top,l=`${Math.max(ce,Math.round(i-a))}px`;e.style.getPropertyValue(s)!==l&&e.style.setProperty(s,l)}function he({card:e}){let s=A(),o=!e.online&&e.active.length===0,i=e.attention.length>0,a=e.busy.length>0,m=i?"warn":a?"busy":o?"off":"ok",l;if(i){let v=[...e.attention].sort((g,S)=>h(g)-h(S))[0];l=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("b",{children:(y(v.title)||v.sessionId).slice(0,60)})," \xB7 ",f(v)??""]})}else if(a){let v=[...e.busy].sort((g,S)=>Number(S.lastMessageAt??0)-Number(g.lastMessageAt??0))[0];l=(0,t.jsx)("b",{children:(y(v.title)||v.sessionId).slice(0,60)})}else o?l=s("overview.botOffline"):l=s("overview.botIdle");let p=i?(0,t.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):a?(0,t.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:e.busy.length})}):o?(0,t.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,t.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,t.jsxs)("article",{className:`mate${i?" mate-attn":""}${o?" mate-off":""}`,children:[(0,t.jsxs)("div",{className:"mate-top",children:[(0,t.jsx)(H,{html:k({name:e.botName,larkAppId:e.larkAppId,avatarUrl:e.botAvatarUrl,dot:m})}),(0,t.jsxs)("div",{className:"mate-id",children:[(0,t.jsx)("b",{children:e.botName}),(0,t.jsx)("span",{className:"mate-role",children:e.cliId})]})]}),(0,t.jsx)("div",{className:"mate-task",children:l}),(0,t.jsxs)("div",{className:"mate-foot",children:[p,(0,t.jsx)("span",{children:e.lastActiveAt?s("overview.lastActive",{time:L(e.lastActiveAt)}):s("common.never")})]})]})}function Ae({session:e}){let s=A(),o=C(e),i=String(e.status??"unknown"),a=f(e);return(0,t.jsxs)(I,{kind:"session",children:[(0,t.jsx)(H,{html:k({name:o,larkAppId:e.larkAppId,size:"sm"})}),(0,t.jsxs)(P,{children:[(0,t.jsx)("b",{children:(y(e.title)||e.sessionId).slice(0,64)}),(0,t.jsxs)("span",{children:[o," \xB7 ",q(e)??e.cliId??"unknown"," \xB7 ",L(e.lastMessageAt)]})]}),(0,t.jsx)(X,{children:a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("a",{className:"overview-list-action",href:"#/sessions",children:s("strip.handle")}),(0,t.jsx)("span",{className:"status overview-list-status status-attention",children:a})]}):(0,t.jsx)("span",{className:`status overview-list-status status-${fe(i)}`,children:ge(i,s)})})]})}function Ne({schedule:e,timeZone:s}){let o=e.nextRunAt?new Date(e.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,t.jsxs)(I,{kind:"schedule",children:[(0,t.jsxs)(P,{children:[(0,t.jsx)("strong",{children:e.name??e.id}),(0,t.jsxs)("span",{children:[C(e)," \xB7 ",e.parsed?.display??""]})]}),(0,t.jsx)("span",{className:"overview-list-meta",children:(0,t.jsx)(W,{text:o,showPopover:!1,durationMs:2600})})]})}function ye({mode:e,onModeChange:s}){let o=A(),i=o(e==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,t.jsx)(G,{className:"overview-active-sort-menu",label:i,value:e,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function Me(){let e=A(),s=(0,r.useRef)(null),o=(0,r.useRef)(null),i=(0,r.useRef)(null),[a,m]=(0,r.useState)(ve),[l,p]=(0,r.useState)(ue),[v,g]=(0,r.useState)(z*_),[S,D]=(0,r.useState)(0),{sessions:N,schedules:B,scheduleTimeZone:ne}=J(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone}));(0,r.useEffect)(()=>{let n=0,d=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let w=Se(s.current);g(c=>c===w?c:w)})};d();let u=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(d);return u&&s.current&&u.observe(s.current),window.addEventListener("resize",d),()=>{window.cancelAnimationFrame(n),u?.disconnect(),window.removeEventListener("resize",d)}},[]),(0,r.useEffect)(()=>{Q().then(()=>D(n=>n+1)),$().then(()=>D(n=>n+1))},[]);let F=(0,r.useMemo)(()=>N.filter(n=>n.status!=="closed"),[N]),b=(0,r.useMemo)(()=>j(N),[N,S]),U=a?b:b.slice(0,v),Y=(0,r.useMemo)(()=>pe(F.filter(n=>f(n)||re.has(n.status)||le.has(n.status)),l).slice(0,7),[F,l]),E=(0,r.useMemo)(()=>B.filter(n=>n.nextRunAt).sort((n,d)=>Date.parse(n.nextRunAt)-Date.parse(d.nextRunAt)).slice(0,5),[B]);(0,r.useEffect)(()=>{let n=[{el:o.current,propertyName:"--active-sessions-min-height"},{el:i.current,propertyName:"--schedules-panel-min-height"}].filter(c=>!!c.el);if(!n.length)return;let d=0,u=()=>{window.cancelAnimationFrame(d),d=window.requestAnimationFrame(()=>{for(let c of n)be(c.el,c.propertyName)})};u();let w=typeof ResizeObserver>"u"?null:new ResizeObserver(u);if(w){for(let ie of n)w.observe(ie.el);let c=document.querySelector(".sidebar"),Z=n[0].el.closest(".page");c&&w.observe(c),Z&&w.observe(Z)}return window.addEventListener("resize",u),()=>{window.cancelAnimationFrame(d),w?.disconnect(),window.removeEventListener("resize",u);for(let c of n)c.el.style.removeProperty(c.propertyName)}},[a,v,b.length,E.length]);let se=()=>{m(n=>(de(!n),!n))},oe=n=>{p(n),we(n)};return(0,t.jsxs)("section",{className:"page hero-page",children:[(0,t.jsx)("div",{className:"page-heading",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"eyebrow",children:e("app.subtitle")}),(0,t.jsx)("h1",{children:e("overview.title")})]})}),(0,t.jsxs)("div",{className:"overview-layout",children:[(0,t.jsxs)("div",{className:"overview-main",children:[(0,t.jsxs)("section",{className:"overview-block team-section",children:[(0,t.jsx)(M,{title:e("overview.team"),count:e("overview.teamCount",{count:b.length}),hint:e("overview.teamHint"),children:(0,t.jsx)(O,{children:(0,t.jsx)(T,{href:"#/bot-defaults",children:e("overview.viewAllPlain")})})}),(0,t.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:U.length?U.map(n=>(0,t.jsx)(he,{card:n},n.larkAppId??n.botName)):(0,t.jsx)("div",{className:"empty",children:e("overview.noSessions")})}),b.length>v?(0,t.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:se,children:e(a?"overview.teamCollapse":"overview.teamExpand")}):null]}),(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(M,{title:e("overview.activeSessions"),children:(0,t.jsxs)(O,{children:[(0,t.jsx)(ye,{mode:l,onModeChange:oe}),(0,t.jsx)(T,{href:"#/sessions",children:e("overview.viewAllPlain")})]})}),(0,t.jsx)("section",{className:"panel active-sessions-panel",ref:o,children:(0,t.jsx)(x,{id:"recent-sessions",children:Y.length?Y.map(n=>(0,t.jsx)(Ae,{session:n},n.sessionId)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSessions")})})})]})]}),(0,t.jsx)("aside",{className:"overview-side",children:(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(M,{title:e("overview.nextSchedules"),children:(0,t.jsx)(T,{href:"#/schedules",children:e("overview.viewAllPlain")})}),(0,t.jsx)("section",{className:"panel schedules-panel",ref:i,children:(0,t.jsx)(x,{id:"next-schedules",children:E.length?E.map(n=>(0,t.jsx)(Ne,{schedule:n,timeZone:ne},n.id)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSchedules")})})})]})})]})]})}function Ce(e){e.classList.add("overview-root");let s=V(e,(0,t.jsx)(Me,{}));return()=>{s(),e.classList.remove("overview-root")}}export{Ce as renderOverviewPage};
@@ -1,3 +0,0 @@
1
- import{a as gt,c as ft,h as pt}from"./chunk-DFLNXQNT.js";import{a as wn,c as mt}from"./chunk-SZOB6VK2.js";import{a as dt,b as ut}from"./chunk-QCPPKCX3.js";import{c as Me,g as ct,p as Ue}from"./chunk-QFMH6ITB.js";import{A as rt,C as he,D as Ne,E as ie,G as Ye,a as Be,f as qn,g as Yn,h as Qn,i as Zn,j as yn,k as et,l as nt,m as tt,n as st,o as kn,p as ot,q as at,r as ve,s as o,t as it,u as Ie,w as Te,y as qe}from"./chunk-H7P5UV4W.js";import{a as lt}from"./chunk-SYC6D5XU.js";import{a as Wn,b as Ss,d as Qe}from"./chunk-5THX4DI2.js";import{c as Re}from"./chunk-7SZRL6FY.js";var u=Re(Wn(),1),Pn=Re(Ss(),1);var Cn=[24,72,168],vs=new Set(Cn);function Sn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!vs.has(t)?null:t}function Is(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Ts(e,t=Date.now()){return t-e*60*60*1e3}function Ns(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=Is(e.lastMessageAt);return a!==null&&a<Ts(t,s)}function bt(e,t,s=Date.now()){return e.filter(a=>Ns(a,t,s))}var ht={1:"claude-code",2:"aiden",3:"coco",4:"codex",5:"cursor",6:"gemini",7:"opencode",8:"antigravity",9:"mtr",10:"hermes",11:"codex-app",12:"mira",13:"seed",14:"traex",15:"pi",16:"copilot",17:"oh-my-pi",18:"relay",19:"mir",20:"kimi",21:"genius",22:"grok",23:"kiro-cli",24:"riff"},vo=new Set(Object.values(ht)),Ms={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff"},yt=Object.values(ht).map(e=>({id:e,label:Ms[e]??e}));function Ze(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function vn(e){let t=Ze(e);return t===null?"-":t.toLocaleString("en-US")}var le=[...yt.map(e=>e.id),"unknown"],In=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"starting",labelKey:"sessions.board.starting",hintKey:"sessions.board.startingHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function Tn(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var wt=["starting","working","idle","dormant","analyzing","active","limited","closed"];function Fe(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function Ct(e){let t=0,s=0,a=0;for(let r of e)r?.status!=="closed"&&(t++,typeof r?.workerPid=="number"&&s++,r?.status==="dormant"&&a++);return{logical:t,resident:s,dormant:a}}function Nn(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function kt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function xe(e){let t=String(e?.chatId??"").trim(),s=Ne(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${kt(e)} \xB7 ${s}${a}`:t?`${kt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function Mn(e,t=Ne){return!!String(e?.chatId??"").trim()&&!t(e)}function xn(e){let t=xe(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function St(e){return`${JSON.stringify(e)} ${xe(e)} ${xn(e)}`.toLowerCase()}function re(e){return typeof e=="string"?e.trim():""}function vt(e){let t=re(e?.chatId),s=re(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function An(e){let t=re(e?.chatId),s=re(e?.rootMessageId),a=vt(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(re(e?.sessionId)||"unknown")}`}function xs(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=re(a?.title);if(r)return r}return t}function en(e){let t=new Map;for(let a of e){let r=An(a),m=t.get(r);m?m.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let m=[...r].sort((K,Q)=>Number(Q.lastMessageAt??0)-Number(K.lastMessageAt??0)),g=m[0]??{},d=vt(g),f=re(g.chatId),w=d==="thread"?re(g.rootMessageId):"",I=new Set(m.map(K=>re(K.larkAppId)||re(K.botName)).filter(Boolean)),N=Math.max(1,I.size),T=m.filter(K=>K.status!=="closed").length,P=m.filter(K=>K.lastInputFromBot===!0).length,U=m.reduce((K,Q)=>Math.max(K,Number(Q.lastMessageAt??0)),0),L=w||f||re(g.sessionId)||a;s.push({key:a,kind:d,chatId:f,...w?{rootMessageId:w}:{},title:xs(m,L),rows:m,botCount:N,activeCount:T,closedCount:m.length-T,inferredBotInputCount:P,latestActivityAt:U,multiBot:I.size>1,inferredBotTriggered:P>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var je=gt;function nn(e=ve){return e.authed?!0:(e.publicReadOnly,!1)}var H={pin:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 14.3s4.2-3.9 4.2-7.3A4.2 4.2 0 0 0 8 2.9a4.2 4.2 0 0 0-4.2 4.1C3.8 10.4 8 14.3 8 14.3z"/><circle cx="8" cy="6.9" r="1.5"/></svg>',openChat:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 2.8h3.8v3.8"/><path d="M13.2 2.8 7.3 8.7"/><path d="M11.5 9.3v2.9a1.2 1.2 0 0 1-1.2 1.2H3.8a1.2 1.2 0 0 1-1.2-1.2V5.7a1.2 1.2 0 0 1 1.2-1.2h2.9"/></svg>',details:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="2.4" y="2.6" width="11.2" height="10.8" rx="2"/><path d="M5.2 5.4h5.6"/><path d="M5.2 8h5.6"/><path d="M5.2 10.6h3.2"/></svg>',terminal:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.8" y="2.2" width="12.4" height="10.5" rx="2"/><path d="M1.8 5h12.4"/><circle cx="4" cy="3.6" r=".45" fill="currentColor" stroke="none"/><path d="m4.2 7.3 1.8 1.6-1.8 1.6"/><path d="M8 10.6h3.4"/></svg>',key:'<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="6" cy="6.1" r="3"/><path d="M8.1 8.2 13 13.1"/><path d="M11.3 11.4 12.6 10.1"/><path d="M12.7 12.8 13.7 11.8"/></svg>',lock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.4a2.9 2.9 0 0 1 5.8 0V7"/><path d="M8 9.5v1.4"/></svg>',unlock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.3a2.9 2.9 0 0 1 5.1-1.9"/><path d="M8 9.5v1.4"/></svg>',close:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.2 4.2 11.8 11.8"/><path d="M11.8 4.2 4.2 11.8"/></svg>',edit:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10.7 3.3 12.7 5.3 6.3 11.7 3.7 12.3 4.3 9.7 10.7 3.3z"/></svg>',history:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3.2 7.8a4.8 4.8 0 1 0 1.4-3.4"/><path d="M3.2 3.1v3.2h3.2"/><path d="M8 5.4v3l2.1 1.2"/></svg>',restart:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M12.7 6.5A4.8 4.8 0 1 0 13 9"/><path d="M12.7 3.3v3.2H9.5"/></svg>',feishu:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 5.2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3.3a2 2 0 0 1-2 2H7.1L4.3 13v-2.5H5"/><path d="M9.1 3.2h3.7v3.7"/><path d="M12.8 3.2 8.5 7.5"/></svg>',copy:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="5.5" y="5.5" width="7.5" height="7.5" rx="1.4"/><path d="M10.5 5.5V4.1a1.4 1.4 0 0 0-1.4-1.4H4.1a1.4 1.4 0 0 0-1.4 1.4v5a1.4 1.4 0 0 0 1.4 1.4h1.4"/></svg>'};function tn(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function It(e,t){let s=window.open("about:blank","_blank");s&&(s.opener=null),t&&(t.disabled=!0);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/write-link`),r=await a.json().catch(()=>({}));if(!a.ok||r?.ok===!1||!r?.url){s?.close(),a.status!==401&&alert(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`);return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),alert(`${o("sessions.writeLinkFail")}: ${a}`)}finally{t&&(t.disabled=!1)}}async function Tt(e,t){t&&(t.disabled=!0);try{let s=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/spawn-command`),a=await s.json().catch(()=>({}));if(!s.ok||a?.ok===!1||!a?.command){s.status!==401&&alert(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`);return}try{if(await navigator.clipboard.writeText(a.command),t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch{window.prompt(o("sessions.copyCommand"),a.command)}}catch(s){alert(`${o("sessions.copyCommandFail")}: ${s}`)}finally{t&&(t.disabled=!1)}}function Ln(e){let t=String(e?.senderType??"unknown"),s=t==="app"||t==="bot"?"bot":t,a=String(e?.senderId??"").trim(),r=String(e?.senderName??"").trim();return`${s}:${a||r||"unknown"}`}function Nt(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"needs-you":e.status==="starting"?"starting":e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":(e.status==="dormant","idle")}function Mt(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=ve.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${Fe(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
2
- `)}function sn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo}async function xt(){try{let e=await fetch("/api/groups");if(!e.ok)return[];let t=await e.json();return(Array.isArray(t?.bots)?t.bots:[]).filter(a=>a&&typeof a.larkAppId=="string").map(a=>({larkAppId:a.larkAppId,botName:typeof a.botName=="string"&&a.botName?a.botName:a.larkAppId}))}catch{return[]}}function En(e,t){let s=Math.max(0,Math.min(t,e.length)),r=e.slice(0,s).match(/(?:^|\s)@([^\s@]*)$/u);if(!r)return null;let m=r[1]??"";return{start:s-m.length-1,end:s,query:m}}function At(e,t,s){let a=`@${s} `,r=e[t.end]===" "?t.end+1:t.end;return{text:e.slice(0,t.start)+a+e.slice(r),caret:t.start+a.length}}function Lt(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function Et(e,t,s,a){if(a.length===0)return{text:e,caret:Math.max(0,Math.min(t,e.length))};let r=Math.max(0,Math.min(t,e.length)),m=Math.max(r,Math.min(s,e.length)),g=e.slice(0,r),d=e.slice(m),f=g&&!/\s$/u.test(g)?" ":"",w=d&&!/^\s/u.test(d)?" ":"",I=`${f}${a.join(" ")}${w}`;return{text:g+I+d,caret:g.length+I.length}}function As(e,t){let s=e.indexOf(t);if(s<0)return e;let a=e.slice(0,s),r=e.slice(s+t.length);return/\s$/u.test(a)&&/^\s/u.test(r)&&(r=r.slice(1)),a+r}function Rt(e,t,s,a){let r=As(e,t),m=s.map((g,d)=>a(d));return s.forEach((g,d)=>{let f=r.indexOf(g);f<0||g===m[d]||(r=r.slice(0,f)+m[d]+r.slice(f+g.length))}),{text:r,markers:m}}var M=Re(Wn(),1);var Bt=["backlog","todo","in_progress","in_review","done"];function Dt(e){return typeof e=="string"&&Bt.includes(e)?e:null}function $t(e){if(e.status==="closed")return"done";let t=Dt(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var Ls=1e15;function De(e){if(typeof e.kanbanPosition=="number"&&Number.isFinite(e.kanbanPosition))return e.kanbanPosition;let t=typeof e.lastMessageAt=="number"&&Number.isFinite(e.lastMessageAt)?e.lastMessageAt:0;return Ls-t}function Rn(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var S=Re(Qe(),1),Pt=[{id:"backlog",labelKey:"sessions.kanban.backlog"},{id:"todo",labelKey:"sessions.kanban.todo"},{id:"in_progress",labelKey:"sessions.kanban.inProgress"},{id:"in_review",labelKey:"sessions.kanban.inReview"},{id:"done",labelKey:"sessions.kanban.done"}],Bn=50;function Ot(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Es(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Rs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function Bs(e){let t=(s="")=>`<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="5.4" fill="none" stroke="currentColor" stroke-width="1.6"${s}/>`;switch(e){case"backlog":return`${t(' stroke-dasharray="1.6 2.1"')}</svg>`;case"in_progress":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 0 1 7,10.4 Z" fill="currentColor"/></svg>`;case"in_review":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 1 1 3.6,7 Z" fill="currentColor"/></svg>`;case"done":return'<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="6.2" fill="currentColor"/><path d="M4.4 7.2 6.2 9 9.7 5.4" fill="none" stroke="var(--surface)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';default:return`${t()}</svg>`}}function He(e){return{__html:e}}function on(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function Ds(e){return ie(e.title)||e.sessionId}function Ft(e){let t=[],s=new Map;for(let m of e){let g=String(m.chatId??m.sessionId),d=s.get(g);d||(d={chatId:g,rows:[]},s.set(g,d),t.push(d)),d.rows.push(m)}let a=[];return{clusters:t.map(m=>(a.push(...m.rows),m.rows.length<2?{type:"card",row:m.rows[0]}:{type:"cluster",chatId:m.chatId,rows:m.rows})),flat:a}}function Ht(e){let t=new Map(Pt.map(a=>[a.id,[]]));for(let a of e)t.get($t(a)).push(a);return{columns:Pt.map(a=>{let r=(t.get(a.id)??[]).sort((f,w)=>De(f)-De(w)),m=0;a.id==="done"&&r.length>Bn&&(m=r.length-Bn,r=r.slice(0,Bn));let{clusters:g,flat:d}=Ft(r);return t.set(a.id,d),{id:a.id,labelKey:a.labelKey,rows:r,clusters:g,hiddenCount:m}}),groups:t}}function $s(e){let t=new Map;for(let s of e){if(s.status==="closed")continue;let a=String(s.larkAppId||s.botName||"unknown"),r=t.get(a);r||(r={name:he(s),larkAppId:s.larkAppId,rows:[]},t.set(a,r)),r.rows.push(s)}return[...t.values()].sort((s,a)=>s.name.localeCompare(a.name)).map(s=>{let a=s.rows.sort((m,g)=>Number(g.lastMessageAt??0)-Number(m.lastMessageAt??0)),{clusters:r}=Ft(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function Dn(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function Ps(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!on(r));return{mode:"bot",columns:$s(a),groups:new Map,rowById:Dn(a),team:null,scope:null}}if(e.groupBy==="team"){if(!e.teamsLoaded)return{mode:"loading",groups:new Map,rowById:new Map,team:null,scope:null};let a=e.teams.find(N=>N.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),m=a?e.rows.filter(N=>r.has(String(N.chatId))):[],g=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},d=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],f=[...m,...d].map(N=>{let T=g[String(N.sessionId)];return T?{...N,kanbanColumn:T.column,kanbanPosition:T.position}:N}),{columns:w,groups:I}=Ht(f);return{mode:"flow",columns:w,groups:I,rowById:Dn(f),team:a,scope:{chats:r.size,sessions:f.length}}}let{columns:t,groups:s}=Ht(e.rows);return{mode:"flow",columns:t,groups:s,rowById:Dn(e.rows),team:null,scope:null}}function Os(e){let t=new Map;return e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col;a&&s.scrollTop&&t.set(a,s.scrollTop)}),t}function Hs(e,t){t?.size&&e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col,r=a?t.get(a):void 0;r&&(s.scrollTop=r)})}function Kt(e,t){for(let s of e.querySelectorAll(".kanban-card:not(.dragging)")){if(s.closest(".kanban-cluster.dragging"))continue;let a=s.getBoundingClientRect();if(t<a.top+a.height/2)return s}return null}function ze(e){return(0,S.jsx)("button",{type:"button",className:`card-act kanban-card-act${e.className?` ${e.className}`:""}`,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,onClick:t=>{t.stopPropagation(),e.onClick(t.currentTarget)},dangerouslySetInnerHTML:He(e.icon)})}function Ks(e){let t=ie(e.row.title)||"",[s,a]=(0,M.useState)(t),r=(0,M.useRef)(null),m=(0,M.useRef)(!1);(0,M.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let g=(0,M.useCallback)(d=>{if(m.current)return;m.current=!0;let f=s.trim();d&&f&&f!==t&&e.onCommit(e.row,f),e.onCancel()},[t,e,s]);return(0,S.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:d=>a(d.currentTarget.value),onClick:d=>d.stopPropagation(),onBlur:()=>g(!0),onKeyDown:d=>{d.stopPropagation(),d.key==="Enter"?(d.preventDefault(),g(!0)):d.key==="Escape"&&(d.preventDefault(),g(!1))}})}function _t(e){let{callbacks:t,row:s}=e,a=Ds(s),r=he(s),m=Ne(s),g=Es(s.workingDir),d=Rs(s),f=[m,g!=="-"?g:null].filter(Boolean).join(" \xB7 "),w=String(s.status??"unknown"),I=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",N=e.editingId===s.sessionId,T=t.selectedSessionIds.has(String(s.sessionId)),P=["kanban-card",T?"selected":"",I?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),U=I?null:(0,S.jsxs)("span",{className:"kanban-card-actions-rail",children:[(0,S.jsx)(ze,{action:"history",icon:t.icons.history,label:o("sessions.history.title"),onClick:()=>t.onHistory(s)}),s.webPort?(0,S.jsx)(ze,{action:"terminal",icon:t.icons.terminal,label:o("sessions.openTerminal"),onClick:()=>t.onOpenTerminal(s)}):null,s.feishuChatLink?(0,S.jsx)("a",{className:"card-act kanban-card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),onClick:L=>L.stopPropagation(),dangerouslySetInnerHTML:He(t.icons.feishu)}):null,(0,S.jsx)(ze,{action:"lock",className:s.locked?"locked":"",icon:s.locked?t.icons.unlock:t.icons.lock,label:t.lockActionLabel(s),onClick:L=>t.onToggleLock(s,L)}),(0,S.jsx)(ze,{action:"details",icon:t.icons.details,label:o("sessions.details"),onClick:()=>t.onDetails(s)}),t.canRestartSession(s)?(0,S.jsx)(ze,{action:"restart",icon:t.icons.restart,label:o("sessions.restart"),onClick:L=>t.onRestart(s,L)}):null]});return(0,S.jsxs)("article",{className:P,"data-id":s.sessionId,tabIndex:0,role:"button","aria-pressed":T,draggable:!0,onClick:L=>e.onCardClick(s,L),onKeyDown:L=>e.onCardKeyDown(s,L),onDragStart:L=>e.onDragStartCard(s,L),children:[(0,S.jsxs)("div",{className:"kanban-card-top",children:[(0,S.jsx)("span",{className:`badge cli-${Ot(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,S.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,S.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,I?(0,S.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:I}),children:I}):null,U]}),(0,S.jsx)("div",{className:"kanban-card-title-row",children:N?(0,S.jsx)(Ks,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,S.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:L=>{L.stopPropagation(),e.cancelOpen(),I||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),f||d?(0,S.jsxs)("div",{className:"kanban-card-meta-row",children:[f?(0,S.jsx)("p",{className:"kanban-card-desc",title:f,children:f}):(0,S.jsx)("span",{className:"kanban-card-desc kanban-card-desc-empty","aria-hidden":"true"}),d?(0,S.jsx)("span",{className:"session-signal",title:d,children:d}):null]}):null,(0,S.jsxs)("div",{className:"kanban-card-foot",children:[(0,S.jsx)("span",{className:"kanban-card-owner",dangerouslySetInnerHTML:He(`${Te({name:r,larkAppId:s.larkAppId,size:"sm"})}<span>${it(r)}</span>`)}),(0,S.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Ie(s.lastMessageAt)}),(0,S.jsx)("span",{className:"kanban-card-dot","data-status":Ot(w),title:t.sessionStatusText(w)})]})]})]})}function Ut(e){let t=e.item;if(t.type==="card")return(0,S.jsx)(_t,{...e.cardProps,row:t.row});let s=Ne(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,S.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,S.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,S.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:He(qe({chatId:t.chatId,name:s,size:"sm"}))}),(0,S.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,S.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,S.jsx)("button",{type:"button",className:"kanban-cluster-toggle","aria-expanded":e.expanded,title:o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),"aria-label":o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),onClick:r=>{r.stopPropagation(),e.onToggleExpanded()},children:(0,S.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,S.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,S.jsx)(_t,{...e.cardProps,row:r},r.sessionId)):null]})}function jt(e){let[t,s]=(0,M.useState)(e),[a,r]=(0,M.useState)(null),[m,g]=(0,M.useState)(null),[d,f]=(0,M.useState)(null),[w,I]=(0,M.useState)(null),[N,T]=(0,M.useState)(()=>new Set),P=(0,M.useRef)(null),U=(0,M.useRef)(null),L=(0,M.useRef)(null),K=(0,M.useRef)(new Map),Q=(0,M.useRef)(new Map),ee=(0,M.useRef)(m),Z=!!a||!!m,F=(0,M.useCallback)(()=>{L.current!==null&&(clearTimeout(L.current),L.current=null)},[]),ne=(0,M.useCallback)(C=>{U.current=Os(e.host),s(C)},[e.host]);(0,M.useEffect)(()=>{if(Z){P.current=e;return}ne(e)},[ne,Z,e]),(0,M.useEffect)(()=>{if(Z||!P.current)return;let C=P.current;P.current=null,ne(C)},[ne,Z]),(0,M.useLayoutEffect)(()=>{Hs(e.host,U.current),U.current=null},[t,e.host]),(0,M.useEffect)(()=>{ee.current=m},[m]),(0,M.useEffect)(()=>()=>F(),[F]);let E=(0,M.useMemo)(()=>Ps(t),[t]);(0,M.useLayoutEffect)(()=>{K.current=E.groups,Q.current=E.rowById},[E]),(0,M.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,M.useEffect)(()=>{t.groupBy==="team"&&E.mode==="flow"&&E.team&&t.onNeedTeamBoard(E.team)},[t,E]),(0,M.useEffect)(()=>{t.onTeamScope(E.mode==="flow"?E.scope:null)},[t,E]);let oe=(0,M.useCallback)(()=>{g(null),f(null),I(null)},[]),ue=(0,M.useCallback)(C=>{T(v=>{let R=new Set(v);return R.has(C)?R.delete(C):R.add(C),R})},[]),ye=(0,M.useCallback)(C=>{F(),!on(C)&&r(C.sessionId)},[F]),q=(0,M.useCallback)((C,v)=>{on(C)||v.target.closest("a, button, input, label")||(F(),L.current=setTimeout(()=>{L.current=null,t.onToggleSelect(C)},220))},[F,t]),Ae=(0,M.useCallback)((C,v)=>{v.key!=="Enter"&&v.key!==" "||v.target!==v.currentTarget||on(C)||(v.preventDefault(),t.onToggleSelect(C))},[t]),O=(0,M.useCallback)((C,v)=>{t.groupBy!=="bot"&&(F(),g({kind:"card",id:String(C.sessionId)}),v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(C.sessionId))))},[F,t.groupBy]),te=(0,M.useCallback)((C,v,R)=>{t.groupBy!=="bot"&&(F(),g({kind:"cluster",chatId:C,col:v}),R.dataTransfer&&(R.dataTransfer.effectAllowed="move",R.dataTransfer.setData("text/plain",`cluster:${C}`)))},[F,t.groupBy]),me=(0,M.useCallback)((C,v)=>{!ee.current||t.groupBy==="bot"||(v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),f(C),I(Kt(v.currentTarget,v.clientY)?.dataset.id??null))},[t.groupBy]),we=(0,M.useCallback)((C,v)=>{let R=ee.current;if(!R||t.groupBy==="bot")return;v.preventDefault();let se=Kt(v.currentTarget,v.clientY);oe();let z=K.current,V=C;if(R.kind==="cluster"){let p=(z.get(R.col)??[]).filter(_=>String(_.chatId)===R.chatId).filter(_=>!(_.status==="closed"&&V!=="done"));if(!p.length)return;let A=new Set(p.map(_=>_.sessionId)),x=(z.get(V)??[]).filter(_=>!A.has(_.sessionId)),B=se?x.findIndex(_=>_.sessionId===se.dataset.id):x.length;B<0&&(B=x.length);let $=B>0?x[B-1]:null,fe=B<x.length?x[B]:null,Y=Rn($?De($):null,fe?De(fe):null);t.onMoveRows(p.map((_,Ee)=>({row:_,column:V,position:Y+Ee*.001})));return}let ge=Q.current.get(R.id);if(!ge||ge.status==="closed"&&V!=="done")return;let J=(z.get(V)??[]).filter(p=>p.sessionId!==R.id),ae=se?J.findIndex(p=>p.sessionId===se.dataset.id):J.length;ae<0&&(ae=J.length);let $e=ae>0?J[ae-1]:null,Pe=ae<J.length?J[ae]:null,Le=Rn($e?De($e):null,Pe?De(Pe):null);t.onMoveRows([{row:ge,column:V,position:Le}])},[oe,t]),X={dragId:m?.kind==="card"?m.id:null,dropBeforeId:w,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:F,onBeginEdit:ye,onCardClick:q,onCardKeyDown:Ae,onDragStartCard:O,onEditDone:()=>r(null)};return E.mode==="loading"?(0,S.jsx)(Me,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):E.mode==="bot"?E.columns.length?(0,S.jsx)(S.Fragment,{children:E.columns.map(C=>(0,S.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":C.key,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:He(Te({name:C.name,larkAppId:C.larkAppId,size:"sm"}))}),(0,S.jsx)("h2",{children:C.name}),(0,S.jsx)("span",{className:"kanban-col-count",children:C.rows.length})]}),(0,S.jsx)("div",{className:"kanban-col-list",onDragOver:v=>me(C.key,v),onDragEnd:oe,children:C.clusters.map(v=>(0,S.jsx)(Ut,{item:v,dragCluster:m?.kind==="cluster"?m:null,cardProps:X,expanded:v.type==="cluster"&&N.has(`bot:${C.key}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&ue(`bot:${C.key}:${v.chatId}`)},onDragStartCluster:te},v.type==="card"?v.row.sessionId:v.chatId))})]},C.key))}):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,S.jsx)(S.Fragment,{children:E.columns.map(C=>(0,S.jsxs)("section",{className:`kanban-column kanban-${C.id}${d===C.id?" drag-over":""}`,"data-col":C.id,onDragOver:v=>me(C.id,v),onDrop:v=>we(C.id,v),onDragEnd:oe,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:"kanban-col-icon",dangerouslySetInnerHTML:He(Bs(C.id))}),(0,S.jsx)("h2",{children:o(C.labelKey)}),(0,S.jsx)("span",{className:"kanban-col-count",children:C.rows.length+C.hiddenCount})]}),(0,S.jsxs)("div",{className:"kanban-col-list",children:[C.rows.length?C.clusters.map(v=>(0,S.jsx)(Ut,{item:v,columnId:C.id,dragCluster:m?.kind==="cluster"?m:null,cardProps:X,expanded:v.type==="cluster"&&N.has(`${C.id}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&ue(`${C.id}:${v.chatId}`)},onDragStartCluster:te},v.type==="card"?v.row.sessionId:v.chatId)):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),C.hiddenCount?(0,S.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:C.hiddenCount})}):null]})]},C.id))})}var n=Re(Qe(),1),_s=new Set(["image/png","image/jpeg","image/gif","image/webp"]),zt=8,Us=10*1024*1024,Fs=25*1024*1024;function js(e){return new Promise((t,s)=>{let a=new FileReader;a.onload=()=>typeof a.result=="string"?t(a.result):s(new Error("bad_image_data")),a.onerror=()=>s(a.error??new Error("image_read_failed")),a.readAsDataURL(e)})}function zs(e){return e===168?"7d":`${e}H`}var Js=Cn.map(e=>({value:String(e),label:zs(e)}));function de(e){return{__html:e}}function ce(){return typeof window>"u"?void 0:window.localStorage}function an(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${Tn(t)}`,children:Fe(t)})}function On(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function ke(e){let t=e.className??`card-act${e.kind?` ${e.kind}`:""}`;return(0,n.jsx)("button",{type:"button",id:e.id,className:t,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,disabled:e.disabled,onClick:s=>{s.stopPropagation(),e.onClick(s.currentTarget)},dangerouslySetInnerHTML:de(e.icon)})}function Gt(e){if(!e.url)return null;let t=!nn();return(0,n.jsx)("span",{className:`term-pill${t?" readonly":" writable"}`,children:t?(0,n.jsx)("a",{className:"term-btn term-open",href:e.url,target:"_blank",rel:"noopener","data-tip":o("sessions.openTerminal"),"aria-label":o("sessions.openTerminal"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:de(H.terminal)}):(0,n.jsx)("button",{type:"button",className:"term-btn term-write","data-action":"write-link","data-tip":o("sessions.openTerminal"),"aria-label":o("sessions.openTerminal"),onClick:s=>{s.stopPropagation(),It(e.row,s.currentTarget)},dangerouslySetInnerHTML:de(H.terminal)})})}function Vt(e){let t=e.row;return t.scope!=="chat"||!t.feishuChatLink?null:(0,n.jsx)("a",{className:e.className??"card-act",href:t.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.openChat"),"aria-label":o("sessions.openChat"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:de(H.feishu)})}function Xs(e){let t=e.sortKey===e.sort;return(0,n.jsx)("th",{"data-sort":e.sort,"data-label":e.label,className:t?"sorted":void 0,"aria-sort":t?e.sortDir==="asc"?"ascending":"descending":"none",onClick:()=>e.onSort(e.sort),children:t?`${e.label} ${e.sortDir==="asc"?"\u25B2":"\u25BC"}`:e.label})}function Jt(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?Ze(e.tokenUsage?.in)??-1:t==="tokenOut"?Ze(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?xe(e).toLowerCase():String(e[t]??"").toLowerCase()}function Xt(e,t,s,a){let r=Jt(e,s),m=Jt(t,s),g=0;return typeof r=="number"&&typeof m=="number"?g=r-m:typeof r=="boolean"&&typeof m=="boolean"?g=Number(r)-Number(m):g=String(r).localeCompare(String(m)),g===0&&(g=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?g:-g}function Gs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function Vs(e,t,s){let a=s==="needs-you"?Ye(e):Number(e.lastMessageAt??0),r=s==="needs-you"?Ye(t):Number(t.lastMessageAt??0);return a!==r?s==="needs-you"?a-r:r-a:String(e.title??e.sessionId).localeCompare(String(t.title??t.sessionId))}function Ws(e){if(e==null||e==="")return"";let t=Number(e),s=Number.isFinite(t)&&t>0?new Date(t):new Date(String(e));return Number.isNaN(s.getTime())?"":s.toLocaleString()}function qs(e){return e===void 0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m${Math.round(e%6e4/1e3)}s`}function Hn(e,t){(0,u.useEffect)(()=>{let s=e.current;if(s)if(t){if(!s.open)try{s.showModal()}catch{}}else s.open&&s.close()},[t,e])}function $n(e){let[t,s]=(0,u.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{navigator.clipboard.writeText(e.value),s(!0),window.setTimeout(()=>s(!1),800)},children:t?o("sessions.copied"):o("sessions.copy")})}function Ys(e){let[t,s]=(0,u.useState)(0),[a,r]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.locateSession(e.row);r(!1),m&&s(30)},children:t>0?o("sessions.cooldown",{seconds:t}):a?o("sessions.locating"):o("sessions.locate")})}function Qs(e){let[t,s]=(0,u.useState)(0),[a,r]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)(ke,{action:"locate",icon:H.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.onLocate(e.row);r(!1),m&&s(30)}})}function Zs(e){let t=le.filter(d=>e.selected.has(d)).length,s=(0,u.useRef)(null),[a,r]=(0,u.useState)("");(0,u.useEffect)(()=>{let d=()=>{s.current?.open&&(s.current.open=!1)},f=I=>{let N=s.current;N?.open&&!N.contains(I.target)&&d()},w=I=>{I.key==="Escape"&&d()};return document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",w),()=>{document.removeEventListener("pointerdown",f,!0),document.removeEventListener("keydown",w)}},[]);let m=a.trim().toLowerCase(),g=m?le.filter(d=>d.toLowerCase().includes(m)):le;return(0,n.jsxs)("details",{className:"filter-cli",ref:s,children:[(0,n.jsxs)("summary",{children:[o("sessions.cli")," \xB7 ",(0,n.jsx)("b",{id:"cli-filter-count",className:t===le.length?void 0:"cli-filter-active",children:t===le.length?o("common.all"):`${t}/${le.length}`})]}),(0,n.jsxs)("div",{className:"filter-cli-pop",role:"group","aria-label":o("sessions.cli"),children:[(0,n.jsxs)("div",{className:"filter-cli-head",children:[(0,n.jsx)("input",{type:"search",className:"filter-cli-search",placeholder:o("sessions.cliSearch"),value:a,autoFocus:!0,onChange:d=>r(d.currentTarget.value),onClick:d=>d.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of le)e.selected.has(d)||e.onToggle(d,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of le)e.selected.has(d)&&e.onToggle(d,!1)},children:o("sessions.cliClear")})]})]}),(0,n.jsx)("div",{className:"filter-cli-options",children:g.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):g.map(d=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:d,checked:e.selected.has(d),onChange:f=>e.onToggle(d,f.currentTarget.checked)}),(0,n.jsx)("span",{children:d})]},d))})]})]})}function eo(e){let t=[{value:"",label:o("sessions.anyStatus")},...wt.map(d=>({value:d,label:Fe(d)}))],s=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],a=t.find(d=>d.value===e.filters.status)?.label??o("sessions.anyStatus"),r=s.find(d=>d.value===e.filters.adopt)?.label??o("sessions.adoptAny"),m=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],g=m.find(d=>d.value===e.filters.chat)?.label??o("sessions.chatAny");return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters",onSubmit:d=>d.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:d=>{let f=d.currentTarget.value;e.setFilters(w=>({...w,q:f}))}}),(0,n.jsx)(Ue,{label:a,value:e.filters.status,options:t,onChange:d=>e.setFilters(f=>({...f,status:d}))}),(0,n.jsx)(Ue,{label:r,value:e.filters.adopt,options:s,onChange:d=>e.setFilters(f=>({...f,adopt:d}))}),(0,n.jsx)(Ue,{ariaLabel:o("sessions.location"),className:"filter-chat-menu",label:g,value:e.filters.chat,options:m,searchable:!0,searchPlaceholder:o("sessions.chatSearch"),searchEmptyLabel:o("sessions.chatNoMatch"),onChange:d=>e.setFilters(f=>({...f,chat:d}))}),(0,n.jsx)(Zs,{selected:e.filters.cli,onToggle:(d,f)=>{e.setFilters(w=>{let I=new Set(w.cli);return f?I.add(d):I.delete(d),{...w,cli:I}})}}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,multiBotTopics:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.multiBotTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"botTriggeredTopics",checked:e.filters.botTriggeredTopics,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,botTriggeredTopics:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.botTriggeredTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"showUnknownChats",checked:e.filters.showUnknownChats,onChange:d=>{let f=d.currentTarget.checked;nt(ce(),f),e.setFilters(w=>({...w,showUnknownChats:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.showUnknownChats")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"active",checked:e.filters.active,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,active:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.activeOnly")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsx)(to,{...e.idleCleanup})]})}function no(e){let t=!!e.closeProgress||!!e.lockProgress,s=e.lockProgress?.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.lockSelected"),a=e.lockProgress&&!e.lockProgress.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.unlockSelected");return(0,n.jsxs)("div",{id:"bulk-bar",className:"bulk-bar",hidden:e.selectedCount===0,children:[(0,n.jsx)("span",{id:"bulk-count",children:o("sessions.selectedCount",{count:e.selectedCount})}),(0,n.jsx)("button",{type:"button",id:"bulk-monitor-room",disabled:t||e.selectedCount===0,onClick:e.onAddToMonitorRoom,children:e.monitorRoomText??o("sessions.addToMonitorRoom")}),(0,n.jsx)("button",{type:"button",id:"bulk-lock",disabled:t||e.lockDisabled,onClick:()=>e.onLock(!0),children:s}),(0,n.jsx)("button",{type:"button",id:"bulk-unlock",disabled:t||e.unlockDisabled,onClick:()=>e.onLock(!1),children:a}),(0,n.jsx)("button",{type:"button",id:"bulk-close",className:"contrast",disabled:t,onClick:e.onClose,children:e.closeProgress?`${e.closeProgress.done}/${e.closeProgress.total}`:o("sessions.closeSelected")}),(0,n.jsx)("button",{type:"button",id:"bulk-clear",disabled:t,onClick:e.onClear,children:o("sessions.clearSelection")})]})}function to(e){let[t,s]=(0,u.useState)(!1),[a,r]=(0,u.useState)(e.hours),[m,g]=(0,u.useState)(),d=(0,u.useRef)(null),f=(0,u.useRef)(null),w=(0,u.useRef)(null),I=e.countForHours(a);return(0,u.useEffect)(()=>{t?r(e.hours):g(void 0)},[t,e.hours]),(0,u.useLayoutEffect)(()=>{if(!t)return;let N=()=>{let P=f.current,U=w.current;if(!P||!U)return;let L=12,K=window.innerWidth,Q=window.innerHeight,ee=Math.max(0,Math.min(292,K-L*2)),Z=P.getBoundingClientRect(),F=U.offsetHeight,ne=Math.max(L,K-ee-L),E=Z.left+Z.width/2-ee/2,oe=Math.min(Math.max(E,L),ne),ue=Z.bottom+8,ye=Z.top-F-8,q=ue+F<=Q-L||ye<L?Math.min(Math.max(ue,L),Math.max(L,Q-F-L)):Math.max(L,ye);g({left:oe,top:q,width:ee})},T=window.requestAnimationFrame(N);return window.addEventListener("resize",N),window.addEventListener("scroll",N,!0),()=>{window.cancelAnimationFrame(T),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)}},[t,e.busy,e.status]),(0,u.useEffect)(()=>{if(!t)return;let N=P=>{let U=P.target;U instanceof Node&&d.current?.contains(U)||U instanceof Node&&w.current?.contains(U)||s(!1)},T=P=>{P.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",N,!0),document.addEventListener("keydown",T),()=>{document.removeEventListener("pointerdown",N,!0),document.removeEventListener("keydown",T)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${I===0?" is-empty":""}${t?" is-open":""}`,ref:d,children:[(0,n.jsxs)("button",{ref:f,type:"button",id:"idle-cleanup-run",className:"contrast idle-cleanup-run","aria-haspopup":"dialog","aria-expanded":t,disabled:e.busy,onClick:()=>s(N=>!N),children:[(0,n.jsxs)("svg",{className:"idle-cleanup-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3.5 6.5h17"}),(0,n.jsx)("path",{d:"M9 3.5h6"}),(0,n.jsx)("path",{d:"m6.5 6.5.9 13h9.2l.9-13"}),(0,n.jsx)("path",{d:"M10 10.5v5M14 10.5v5"})]}),(0,n.jsx)("span",{children:o("sessions.idleCleanupRun")})]}),t&&typeof document<"u"?(0,Pn.createPortal)((0,n.jsxs)("div",{ref:w,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:m??{visibility:"hidden"},children:[(0,n.jsxs)("div",{className:"idle-cleanup-pop-head",children:[(0,n.jsx)("span",{className:"idle-cleanup-pop-title",children:o("sessions.idleCleanupRun")}),(0,n.jsxs)("span",{id:"idle-cleanup-count",className:"idle-cleanup-count",children:[(0,n.jsx)("span",{className:"idle-cleanup-dot","aria-hidden":"true"}),o("sessions.idleCleanupCount",{count:I})]})]}),(0,n.jsxs)("div",{className:"idle-cleanup-pop-field",children:[(0,n.jsx)("span",{className:"idle-cleanup-label",children:o("sessions.idleCleanupOlderThan")}),(0,n.jsx)("div",{id:"idle-cleanup-threshold",className:"idle-cleanup-threshold-options",role:"radiogroup","aria-label":o("sessions.idleCleanupThreshold"),children:Js.map(N=>{let T=Sn(N.value),P=T===a;return(0,n.jsx)("button",{type:"button",className:P?"active":void 0,"aria-pressed":P?"true":"false",disabled:e.busy,onClick:()=>r(T),children:N.label},N.value)})})]}),e.busy&&e.status?(0,n.jsx)("span",{id:"idle-cleanup-status",className:"idle-cleanup-status","aria-live":"polite",children:e.status}):null,(0,n.jsxs)("div",{className:"idle-cleanup-pop-actions",children:[(0,n.jsx)("button",{type:"button",className:"idle-cleanup-cancel",disabled:e.busy,onClick:()=>s(!1),children:o("sessions.idleCleanupCancel")}),(0,n.jsx)("button",{type:"button",className:"idle-cleanup-confirm",disabled:e.busy||I===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function so(e){let t=(0,u.useRef)(null);(0,u.useLayoutEffect)(()=>{t.current&&(t.current.indeterminate=e.selectAllIndeterminate)},[e.selectAllIndeterminate]);let s=[["botName",o("sessions.bot")],["cliId",o("sessions.cli")],["status",o("sessions.status")],["chat",o("sessions.location")],["tokenIn",o("sessions.tokenIn")],["tokenOut",o("sessions.tokenOut")],["title",o("sessions.titleCol")],["workingDir",o("sessions.workingDir")],["spawnedAt",o("sessions.created")],["lastMessageAt",o("sessions.last")],["adopt",o("sessions.adopt")]],a={select:o("sessions.selectSession"),botName:o("sessions.bot"),cliId:o("sessions.cli"),status:o("sessions.status"),chat:o("sessions.location"),tokenIn:o("sessions.tokenIn"),tokenOut:o("sessions.tokenOut"),title:o("sessions.titleCol"),workingDir:o("sessions.workingDir"),spawnedAt:o("sessions.created"),lastMessageAt:o("sessions.last"),adopt:o("sessions.adopt"),actions:o("sessions.actions")};return(0,n.jsxs)("table",{id:"sessions-table",hidden:e.hidden,children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:(0,n.jsx)("input",{ref:t,type:"checkbox",id:"select-all",title:o("sessions.activeOnly"),checked:e.selectAllChecked,disabled:e.selectAllDisabled,onChange:r=>e.onSelectAll(r.currentTarget.checked)})}),s.map(([r,m])=>(0,n.jsx)(Xs,{sort:r,label:m,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},r)),(0,n.jsx)("th",{children:o("sessions.actions")})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(r=>{let m=r.status==="closed",g=String(r.sessionId);return(0,n.jsxs)("tr",{"data-id":g,onClick:()=>e.onOpen(r),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":a.select,onClick:d=>d.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(g),disabled:m,onChange:d=>e.onSelect(g,d.currentTarget.checked)})}),(0,n.jsx)("td",{"data-label":a.botName,children:he(r)}),(0,n.jsx)("td",{"data-label":a.cliId,children:(0,n.jsx)("span",{className:`badge cli-${Tn(r.cliId)}`,children:r.cliId??"unknown"})}),(0,n.jsxs)("td",{"data-label":a.status,children:[(0,n.jsx)(an,{status:r.status}),(0,n.jsx)(On,{row:r})]}),(0,n.jsx)("td",{className:"session-location-cell","data-label":a.chat,title:xn(r),children:xe(r)}),(0,n.jsx)("td",{className:"token-cell","data-label":a.tokenIn,children:vn(r.tokenUsage?.in)}),(0,n.jsx)("td",{className:"token-cell","data-label":a.tokenOut,children:vn(r.tokenUsage?.out)}),(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":a.title,title:String(r.title??""),children:ie(r.title??"").slice(0,48)}),(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":a.workingDir,title:r.workingDir??"",children:String(r.workingDir??"").slice(-34)}),(0,n.jsx)("td",{"data-label":a.spawnedAt,children:Ie(r.spawnedAt)}),(0,n.jsx)("td",{"data-label":a.lastMessageAt,children:Ie(r.lastMessageAt)}),(0,n.jsx)("td",{"data-label":a.adopt,children:r.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null}),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":a.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},g)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:13,className:"empty",children:o("sessions.empty")})})})]})}function Wt(e){let t=e.row,s=ie(t.title)||t.sessionId,a=he(t),r=Ne(t),m=je(t),g=Gs(t),d=Nn(t.workingDir),f=w=>{w.target.closest("a, button, input, label")||e.onToggleSelect(t)};return(0,n.jsxs)("article",{className:`session-card${e.selected?" selected":""}${t.locked?" locked":""}`,"data-id":t.sessionId,"aria-pressed":e.selected,onClick:f,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:a,larkAppId:t.larkAppId,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-card-title",children:[(0,n.jsx)("strong",{title:String(t.title??s),children:String(s).slice(0,72)}),(0,n.jsxs)("span",{children:[a," \xB7 ",r??t.cliId??"unknown"]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(an,{status:t.status}),(0,n.jsx)(On,{row:t})]})]}),d!=="-"||t.adopt||g?(0,n.jsxs)("div",{className:"session-card-meta",children:[d!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:d}):null,t.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null,g?(0,n.jsx)("span",{className:"session-signal",title:g,children:g}):null]}):null,(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Ie(Ye(t))}`:`${o("sessions.last")}: ${Ie(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(Vt,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(Qs,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(ke,{action:"details",icon:H.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),sn(t)?(0,n.jsx)(ke,{action:"restart",icon:H.restart,label:o("sessions.restart"),onClick:w=>e.onRestart(t,w)}):null,(0,n.jsx)(Gt,{row:t,url:m}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ke,{action:"lock",icon:t.locked?H.unlock:H.lock,label:tn(t),kind:t.locked?"locked":"",onClick:w=>e.onLock(t,!t.locked,w)}),(0,n.jsx)(ke,{action:"close",icon:H.close,label:o("sessions.close"),kind:"danger",onClick:w=>e.onClose(t,w)})]}):null]})]})}function oo(e){(0,u.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(In.map(a=>[a.id,[]]));for(let a of e.rows){let r=Nt(a);r&&t.get(r).push(a)}let s=e.order.map(a=>In.find(r=>r.id===a)).filter(a=>!!a);return(0,n.jsx)("div",{id:"sessions-board",className:`sessions-board${e.animated||e.hidden?"":" board-enter"}`,hidden:e.hidden,children:s.map((a,r)=>{let m=(t.get(a.id)??[]).sort((g,d)=>Vs(g,d,a.id));return(0,n.jsxs)("section",{className:`session-board-column session-board-${a.id}${e.dragColId===a.id?" dragging":""}${e.dragOverCol===a.id?" drag-over":""}`,"data-col":a.id,onDragOver:g=>{e.dragColId&&(g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="move"),e.dragColId!==a.id&&e.onDragOverCol(a.id))},onDrop:g=>{e.dragColId&&(g.preventDefault(),e.onMoveColumnTo(e.dragColId,a.id),e.onDragCol(null),e.onDragOverCol(null))},children:[(0,n.jsxs)("header",{draggable:!0,title:o("sessions.board.dragHint"),onDragStart:g=>{e.onDragCol(a.id),g.dataTransfer&&(g.dataTransfer.effectAllowed="move",g.dataTransfer.setData("text/plain",a.id))},onDragEnd:()=>{e.onDragCol(null),e.onDragOverCol(null)},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:o(a.labelKey)}),(0,n.jsx)("p",{children:o(a.hintKey)})]}),(0,n.jsxs)("span",{className:"session-board-head-right",children:[(0,n.jsxs)("span",{className:"session-board-move",children:[(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"-1","aria-label":o("sessions.board.moveLeft"),disabled:r===0,onClick:()=>e.onMoveColumn(a.id,-1),children:"\u2039"}),(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"1","aria-label":o("sessions.board.moveRight"),disabled:r===s.length-1,onClick:()=>e.onMoveColumn(a.id,1),children:"\u203A"})]}),(0,n.jsx)("span",{className:"session-board-count",children:m.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:m.length?m.map(g=>(0,n.jsx)(Wt,{row:g,selected:e.selected.has(g.sessionId),onToggleSelect:e.onToggleSelect,onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},g.sessionId)):(0,n.jsx)("div",{className:"session-board-empty",children:o("sessions.board.emptyColumn")})})]},a.id)})})}function ao(e){let t=ie(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function io(e){let t=(0,u.useMemo)(()=>en(e.rows),[e.rows]),s=(0,u.useMemo)(()=>new Map(en(e.relationRows??e.rows).map(a=>[a.key,a])),[e.relationRows,e.rows]);return(0,n.jsx)("div",{id:"sessions-topics",className:"sessions-topic-view",hidden:e.hidden,children:t.length?t.map(a=>{let r=s.get(a.key)??a,m=a.rows[0],g=xe(m),d=ao(r),f=r.rootMessageId||r.chatId;return(0,n.jsxs)("section",{className:`session-topic-group${r.multiBot?" multi-bot":""}${r.inferredBotTriggered?" inferred-bot-trigger":""}`,"data-topic-key":a.key,children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"session-topic-avatar",dangerouslySetInnerHTML:de(qe({chatId:a.chatId,name:g,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-topic-heading",children:[(0,n.jsx)("span",{className:"session-topic-location",children:g}),(0,n.jsx)("h2",{title:r.title,children:d}),(0,n.jsx)("code",{title:f,children:r.kind==="thread"?f:r.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession")})]}),(0,n.jsxs)("div",{className:"session-topic-summary","aria-label":o("sessions.topic.summary"),children:[r.multiBot?(0,n.jsx)("span",{className:"topic-chip collaboration",children:o("sessions.topic.collaboration")}):null,(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.sessions",{count:r.rows.length})}),(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.bots",{count:r.botCount})}),(0,n.jsx)("span",{className:"topic-chip active",children:o("sessions.topic.active",{count:r.activeCount})}),r.closedCount?(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.closed",{count:r.closedCount})}):null,r.inferredBotInputCount?(0,n.jsx)("span",{className:"topic-chip inferred",title:o("sessions.topic.inferredHint"),children:o("sessions.topic.botInputs",{count:r.inferredBotInputCount})}):null,(0,n.jsxs)("span",{className:"session-topic-updated",children:[o("sessions.last"),": ",Ie(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(w=>(0,n.jsx)(Wt,{row:w,selected:e.selected.has(w.sessionId),onToggleSelect:I=>{I.status!=="closed"?e.onToggleSelect(I):e.onOpen(I)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},w.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function ro(e){let t=e.message,s=t.senderType==="user",a=t.senderType==="app"||t.senderType==="bot",r=s?t.senderName||(e.ownerOpenId&&t.senderId===e.ownerOpenId?o("sessions.history.owner"):o("sessions.history.user")):t.senderName||String(t.senderId??"").slice(0,16)||o(a?"sessions.history.bot":"sessions.history.system"),m=String(t.content??"").trim()||`[${t.msgType??"message"}]`;return(0,n.jsxs)("div",{className:`history-msg${e.groupStart?" group-start":" continuation"}`,children:[e.groupStart?s?t.senderAvatar?(0,n.jsx)("img",{className:"history-avatar-img",src:String(t.senderAvatar),alt:"",decoding:"async",referrerPolicy:"no-referrer"}):(0,n.jsx)("span",{className:"history-avatar-user","aria-hidden":"true",children:String(r).slice(0,1)}):(0,n.jsx)("span",{className:"history-avatar-bot",dangerouslySetInnerHTML:de(Te({name:r,larkAppId:t.senderBotAppId,avatarUrl:t.senderAvatar,size:"sm"}))}):(0,n.jsx)("span",{className:"history-avatar-spacer","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"history-msg-main",children:[e.groupStart?(0,n.jsxs)("div",{className:"history-msg-meta",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)("time",{children:Ws(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:m})]})]})}function lo(e){let t=(0,u.useRef)(null);Hn(t,!!e.state);let s=e.state?Be.sessions.get(e.state.sessionId):null,a=(0,u.useRef)(null),r=!!e.state&&!e.state.loading&&!e.state.error&&e.state.messages.length>0;return(0,u.useEffect)(()=>{if(!r)return;let m=a.current;m&&(m.scrollTop=m.scrollHeight)},[r,e.state?.sessionId,e.state?.messages.length]),(0,n.jsx)("dialog",{id:"history-modal",className:"history-modal",ref:t,onClose:e.onClose,onClick:m=>{m.target===m.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:he(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(ie(s.title)||s.sessionId).slice(0,60)}),(0,n.jsx)("span",{className:"history-scope-tag",children:o("sessions.history.title")})]}),(0,n.jsx)("span",{className:"term-modal-actions",children:(0,n.jsx)(ke,{id:"history-close",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})})]}),(0,n.jsxs)("div",{className:"history-body",ref:a,children:[e.state.loading?(0,n.jsx)(Me,{label:o("sessions.history.loading"),className:"term-modal-loading",compact:!0}):null,!e.state.loading&&e.state.error?(0,n.jsxs)("div",{className:"history-error",children:[o("sessions.history.fail"),": ",e.state.error,e.state.stale?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("span",{children:o("sessions.history.staleHint")})]}):null]}):null,!e.state.loading&&!e.state.error&&e.state.messages.length===0?(0,n.jsx)("div",{className:"history-error",children:o("sessions.history.empty")}):null,!e.state.loading&&!e.state.error&&e.state.messages.length>0?(0,n.jsx)("div",{className:"history-list",children:e.state.messages.map((m,g,d)=>(0,n.jsx)(ro,{message:m,ownerOpenId:e.state?.ownerOpenId,groupStart:g===0||Ln(d[g-1])!==Ln(m)},m.messageId??g))}):null]})]}):null})}function co(e){let[t,s]=(0,u.useState)(!1),[a,r]=(0,u.useState)(""),m=(0,u.useRef)(null),g=ie(e.row.title)||e.row.sessionId;(0,u.useLayoutEffect)(()=>{if(!t||!m.current)return;let f=m.current;f.focus(),f.select(),(()=>{let I=getComputedStyle(f),N=document.createElement("span");N.style.cssText="position:absolute;visibility:hidden;white-space:pre",N.style.fontSize=I.fontSize,N.style.fontFamily=I.fontFamily,N.style.fontWeight=I.fontWeight,N.style.letterSpacing=I.letterSpacing,N.textContent=f.value||" ",document.body.appendChild(N);let T=Math.round(window.innerWidth*.6);f.style.width=`${Math.min(Math.max(N.offsetWidth+22,80),T)}px`,N.remove()})()},[t,a]);let d=f=>{let w=a.trim();s(!1),f&&w&&w!==g&&e.onRename(e.row,w)};return t?(0,n.jsx)("input",{ref:m,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:f=>r(f.currentTarget.value),onBlur:()=>d(!0),onKeyDown:f=>{f.stopPropagation(),f.key==="Enter"?(f.preventDefault(),d(!0)):f.key==="Escape"&&(f.preventDefault(),d(!1))}}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{className:"term-modal-name",title:String(e.row.title??g),children:String(g).slice(0,60)}),(0,n.jsx)(ke,{id:"term-modal-edit",icon:H.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(ie(e.row.title)||""),s(!0)}})]})}function uo(e){let t=(0,u.useRef)(null);Hn(t,!!e.state);let s=e.state?Be.sessions.get(e.state.sessionId):null,a=s?je(s):null,r=e.state?.url??a??"",m=s?String(s.cliId??"unknown"):"",g=s?Nn(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:d=>{d.target===d.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:he(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsxs)("span",{className:"term-modal-title-copy",children:[(0,n.jsxs)("span",{className:"term-modal-title-main",children:[(0,n.jsx)(co,{row:s,onRename:e.onRename}),(0,n.jsx)(an,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:he(s)}),(0,n.jsx)("span",{children:m}),g!=="-"?(0,n.jsx)("span",{title:s.workingDir??"",children:g}):null]})]})]}),(0,n.jsxs)("span",{className:"term-modal-actions",children:[s.feishuChatLink?(0,n.jsx)("a",{className:"card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener",title:o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),dangerouslySetInnerHTML:de(H.feishu)}):null,(0,n.jsx)("a",{id:"term-modal-tab",className:"card-act",href:r,target:"_blank",rel:"noopener",title:o("sessions.kanban.openTab"),"aria-label":o("sessions.kanban.openTab"),dangerouslySetInnerHTML:de(H.terminal)}),(0,n.jsx)(ke,{id:"term-modal-close",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})]})]}),(0,n.jsx)("div",{className:"term-modal-body",children:(0,n.jsx)("div",{className:"term-modal-frame-shell",children:e.state.loading?(0,n.jsx)(Me,{label:o("sessions.kanban.terminalLoading"),className:"term-modal-loading",compact:!0}):(0,n.jsx)("iframe",{className:"term-modal-frame",src:r,allow:"clipboard-read; clipboard-write"})})})]}):null})}function mo(e){let[t,s]=(0,u.useState)(null);(0,u.useEffect)(()=>s(null),[e.row.sessionId]);let a=async()=>{s({loading:!0});try{let g=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-diff`),d=await g.json().catch(()=>({}));if(!d.ok){s({loading:!1,message:(0,n.jsxs)("p",{children:[o("sessions.landUnavailable"),": ",String(d.error??g.status)]})});return}if(d.empty){s({loading:!1,message:(0,n.jsx)("p",{children:o("sessions.landEmpty")})});return}let f=String(d.patch??"");s({loading:!1,diff:d,patch:f.slice(0,2e4)+(f.length>2e4?`
3
- ...(truncated)`:"")})}catch(g){s({loading:!1,message:(0,n.jsxs)("p",{children:[o("sessions.landUnavailable"),": ",String(g)]})})}},r=async()=>{let g=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-land/apply`,{method:"POST"}),d=await g.json().catch(()=>({}));s({loading:!1,message:d.ok?(0,n.jsxs)("p",{children:[o("sessions.landApplied"),": ",d.files," files (+",d.insertions,"/-",d.deletions,") \u2192 ",(0,n.jsx)("code",{children:String(d.workingDir??"")})]}):(0,n.jsxs)("p",{children:[o("sessions.landFailed"),": ",String(d.error??g.status)]})})},m=async()=>{await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-land/discard`,{method:"POST"}),s({loading:!1,message:(0,n.jsx)("p",{children:o("sessions.landDiscarded")})})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"land-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.land")}),(0,n.jsxs)("div",{id:"land-area",children:[t?.loading?(0,n.jsx)(Me,{label:o("sessions.landLoading"),compact:!0}):null,t?.message,t?.diff&&t.patch!==void 0?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:t.diff.files})," files (+",t.diff.insertions,"/-",t.diff.deletions,") \u2192 ",(0,n.jsx)("code",{children:String(t.diff.workingDir??"")})]}),(0,n.jsx)("pre",{style:{maxHeight:320,overflow:"auto",whiteSpace:"pre-wrap"},children:t.patch}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)("button",{id:"land-apply",type:"button",className:"primary",onClick:()=>{r()},children:o("sessions.landApply")}),(0,n.jsx)("button",{id:"land-discard",type:"button",className:"contrast",onClick:()=>{m()},children:o("sessions.landDiscard")})]})]}):null]})]})}function go(e){let t=e.report;if(!t||t.status!=="ok"){let f=t?.error?.message?String(t.error.message):String(t?.status??"error");return(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",f]})}let s=t.agg??{};if(!s.totalSpans)return(0,n.jsx)("p",{children:o("sessions.insightEmpty")});let a=[t.meta?.asOf?o("sessions.insightAsOf",{asOf:String(t.meta.asOf)}):null,t.meta?.partial?o("sessions.insightPartial"):null].filter(Boolean),r=Array.isArray(t.suggestions)?t.suggestions:[],m=Array.isArray(t.spans)?t.spans:[],g=f=>f==="bad"||f==="warn"?"!":"i",d=f=>f==="error"?"!":f==="running"?"...":"ok";return(0,n.jsxs)(n.Fragment,{children:[a.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:a.join(" \xB7 ")}):null,(0,n.jsx)("p",{children:o("sessions.insightMetrics",{total:String(s.totalSpans??0),failed:String(s.failedSpans??0),slow:String(s.slowSpans??0),rw:s.readWriteRatio===null||s.readWriteRatio===void 0?"-":String(s.readWriteRatio),compactions:String(s.compactions??0)})}),r.length?(0,n.jsxs)("details",{open:!0,children:[(0,n.jsx)("summary",{children:o("sessions.insightSuggestions")}),(0,n.jsx)("ul",{style:{paddingLeft:18,margin:"6px 0"},children:r.map((f,w)=>(0,n.jsxs)("li",{children:[g(String(f.severity??""))," ",(0,n.jsx)("b",{children:String(f.title??"")})," - ",String(f.action??""),Array.isArray(f.evidence)&&f.evidence.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("small",{style:{color:"var(--muted,#8f959e)"},children:f.evidence.join("; ")})]}):null]},w))})]}):null,m.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",m.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??m.length),total:String(t.meta.spansTotal??m.length)})}):null,(0,n.jsx)("div",{style:{maxHeight:320,overflow:"auto"},children:(0,n.jsx)("table",{style:{width:"100%",fontSize:12},children:(0,n.jsx)("tbody",{children:[...m].sort((f,w)=>(f.relStartMs??0)-(w.relStartMs??0)).map((f,w)=>{let I=[f.inputSummary,f.outputSummary].filter(Boolean).map(String).join(" -> ");return(0,n.jsxs)("tr",{style:f.status==="error"?{color:"var(--danger,#d33)"}:void 0,children:[(0,n.jsx)("td",{children:d(String(f.status??""))}),(0,n.jsx)("td",{children:(0,n.jsx)("code",{children:String(f.tool??"")})}),(0,n.jsx)("td",{children:String(f.phase??"")}),(0,n.jsx)("td",{children:qs(f.durationMs)}),(0,n.jsxs)("td",{children:["#",String(f.turnIndex??0)]}),(0,n.jsx)("td",{children:I})]},w)})})})})]}):null]})}function fo(e){let[t,s]=(0,u.useState)(null);if((0,u.useEffect)(()=>s(null),[e.row.sessionId]),!ve.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),m=await r.json().catch(()=>({}));!m.ok||!m.report?s({loading:!1,error:String(m.error??r.status)}):s({loading:!1,report:m.report})}catch(r){s({loading:!1,error:String(r)})}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"insight-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.insight")}),(0,n.jsxs)("div",{id:"insight-area",children:[t?.loading?(0,n.jsx)(Me,{label:o("sessions.insightLoading"),compact:!0}):null,t?.error?(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",t.error]}):null,t?.report?(0,n.jsx)(go,{report:t.report}):null]})]})}function po(e){let t=(0,u.useRef)(null);Hn(t,!!e.row);let s=e.row,a=s?je(s):null;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:r=>{r.target===r.currentTarget&&e.onClose()},children:s?(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{className:"drawer-title-row",children:[(0,n.jsx)("h3",{children:ie(s.title)||s.sessionId}),(0,n.jsx)(ke,{id:"drawer-close",className:"card-act drawer-close-btn",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(an,{status:s.status}),(0,n.jsx)(On,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)($n,{value:s.sessionId})]})]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",he(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",s.cliId??"?"]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",xe(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)($n,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)($n,{value:s.rootMessageId??""})]}),s.threadId?(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"threadId:"})," ",(0,n.jsx)("code",{children:s.threadId})]}):null,(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.workingDir"),":"]})," ",s.workingDir??"-"]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)(Vt,{row:s}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)(Ys,{row:s,locateSession:e.locateSession}):null,(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),(0,n.jsx)(Gt,{row:s,url:a}),nn()&&s.status!=="closed"?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button","data-tip":o("sessions.copyCommandHint"),onClick:r=>{Tt(s,r.currentTarget)},children:o("sessions.copyCommand")}):null,sn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",onClick:async r=>{await e.restartSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"lock-btn",type:"button",onClick:r=>{e.setSessionLocked(s,!s.locked,r.currentTarget)},children:tn(s)}):null,s.queued&&s.status!=="closed"?(0,n.jsx)("button",{id:"start-btn",type:"button",className:"primary",onClick:async r=>{await e.startSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null,s.status==="closed"?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary",onClick:async r=>{await e.resumeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.resume")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"close-btn",type:"button",className:"contrast",onClick:async r=>{await e.closeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.close")}):null,(0,n.jsx)(mo,{row:s}),(0,n.jsx)(fo,{row:s})]})]}):null})}function bo(e){let t=e.state;(0,u.useEffect)(()=>{let p=e.dialog;return()=>{p.open&&p.close()}},[e.dialog]),(0,u.useEffect)(()=>{let p=e.dialog;if(t){if(!p.open)try{p.showModal()}catch{}}else p.open&&p.close()},[e.dialog,t]),(0,u.useEffect)(()=>{let p=e.dialog,A=()=>e.onClose(),x=B=>{B.target===p&&e.onClose()};return p.addEventListener("close",A),p.addEventListener("click",x),()=>{p.removeEventListener("close",A),p.removeEventListener("click",x)}},[e]);let[s,a]=(0,u.useState)(""),[r,m]=(0,u.useState)([]),[g,d]=(0,u.useState)(new Set),[f,w]=(0,u.useState)("lead"),[I,N]=(0,u.useState)(""),[T,P]=(0,u.useState)("in_progress"),[U,L]=(0,u.useState)(""),[K,Q]=(0,u.useState)(""),[ee,Z]=(0,u.useState)(!1),[F,ne]=(0,u.useState)(!1),[E,oe]=(0,u.useState)(""),[ue,ye]=(0,u.useState)(()=>tt(ce())),[q,Ae]=(0,u.useState)(null),[O,te]=(0,u.useState)(null),[me,we]=(0,u.useState)(0),X=(0,u.useRef)(null),C=(0,u.useRef)(1);if((0,u.useEffect)(()=>{t&&(a(""),m([]),d(new Set),w("lead"),N(""),P("in_progress"),L(""),Q(""),Z(!1),ne(!1),oe(""),Ae(null),te(null),we(0),C.current=1)},[t]),!t)return null;if(t.success){let p=t.success,A=typeof p.shareLink=="string"&&p.shareLink?p.shareLink:"",x=Array.isArray(p.failed)?p.failed.length:0,B=Array.isArray(p.spawned)?p.spawned.length:0,$=p.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress");return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.doneTitle")})}),(0,n.jsxs)("p",{children:[$,"\uFF08",B,"\uFF09"]}),x>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(x)})}):null,A?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:A,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")})}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",id:"cs-done",className:"primary",onClick:e.onClose,children:o("sessions.create.close")})})]})}if(t.loading)return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsx)(Me,{label:o("common.loading"),className:"cs-loading",compact:!0}),(0,n.jsx)("div",{className:"actions cs-actions",children:(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")})})]});let v=t.bots,R=[...g],se=R,z=p=>v.find(A=>A.larkAppId===p)?.botName??p,V=E.trim().toLowerCase(),ge=V?v.filter(p=>p.botName.toLowerCase().includes(V)||p.larkAppId.toLowerCase().includes(V)):v,J=O?Lt(v,O.query).slice(0,8):[],ae=p=>{if(!O)return;let A=At(s,O,p.botName);a(A.text),te(null),we(0),d(x=>new Set(x).add(p.larkAppId)),N(x=>x||p.larkAppId),requestAnimationFrame(()=>{let x=X.current;x&&(x.focus(),x.setSelectionRange(A.caret,A.caret))})},$e=p=>{if(!(!O||J.length===0)){if(p.key==="ArrowDown"||p.key==="ArrowUp"){p.preventDefault();let A=p.key==="ArrowDown"?1:-1;we(x=>(x+A+J.length)%J.length);return}if(p.key==="Enter"||p.key==="Tab"){p.preventDefault(),ae(J[Math.min(me,J.length-1)]);return}p.key==="Escape"&&(p.preventDefault(),te(null))}},Pe=async p=>{let A=[...p.clipboardData.files].filter(Y=>Y.type.startsWith("image/"));if(A.length===0)return;p.preventDefault();let x=p.currentTarget.selectionStart??s.length,B=p.currentTarget.selectionEnd??x,$=A.filter(Y=>_s.has(Y.type.toLowerCase()));if($.length!==A.length){alert(o("sessions.create.imageUnsupported"));return}if(r.length+$.length>zt){alert(o("sessions.create.imageCountLimit",{n:String(zt)}));return}if($.some(Y=>Y.size>Us)){alert(o("sessions.create.imageSizeLimit"));return}if(r.reduce((Y,_)=>Y+_.size,0)+$.reduce((Y,_)=>Y+_.size,0)>Fs){alert(o("sessions.create.imageTotalLimit"));return}try{let Y=C.current,_=await Promise.all($.map(async(G,Oe)=>{let pe=await js(G),Je=pe.indexOf(",");if(Je<0)throw new Error("bad_image_data");let Ce=Y+Oe;return{id:`${Date.now()}-${Oe}-${Math.random().toString(36).slice(2)}`,ordinal:Ce,marker:`[${o("sessions.create.imageMarker",{n:String(Ce)})}]`,name:G.name||`pasted-image-${r.length+Oe+1}`,mimeType:G.type.toLowerCase(),size:G.size,dataBase64:pe.slice(Je+1),previewUrl:pe}}));C.current+=_.length;let Ee=Et(s,x,B,_.map(G=>G.marker));a(Ee.text),m(G=>[...G,..._]),te(null),requestAnimationFrame(()=>{let G=X.current;G&&(G.focus(),G.setSelectionRange(Ee.caret,Ee.caret))})}catch{alert(o("sessions.create.imageReadFailed"))}},Le=async p=>{p.preventDefault();let A=s.trim();if(!A){alert(o("sessions.create.errContent"));return}if(R.length===0){alert(o("sessions.create.errNoBot"));return}let x=I||R[0]||"";if(f==="lead"&&(!x||!R.includes(x))){alert(o("sessions.create.errLead"));return}ne(!0),Ae(null);try{let B=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:A,larkAppIds:R,mode:f,column:T,leadLarkAppId:f==="lead"?x:void 0,name:U.trim()||void 0,bindWorkingDir:K.trim()||void 0,images:r.map(fe=>({name:fe.name,mimeType:fe.mimeType,dataBase64:fe.dataBase64}))})}),$=await B.json().catch(()=>null);B.ok&&$?.ok?ue?(Ae($),a(""),m([]),C.current=1,L("")):e.onSuccess($):B.status!==401&&alert(`${o("sessions.create.failed")}: ${$?.error??B.status}`)}catch(B){alert(`${o("sessions.create.failed")}: ${B}`)}finally{ne(!1)}};return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsxs)("form",{id:"cs-form",onSubmit:Le,children:[(0,n.jsxs)("fieldset",{className:"cs-content",children:[(0,n.jsx)("legend",{children:o("sessions.create.content")}),(0,n.jsxs)("div",{className:"cs-composer",children:[(0,n.jsx)("textarea",{ref:X,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:p=>{let A=p.currentTarget,x=A.value;a(x),te(En(x,A.selectionStart??x.length)),we(0)},onClick:p=>te(En(s,p.currentTarget.selectionStart??s.length)),onKeyDown:$e,onPaste:p=>{Pe(p)},onBlur:()=>setTimeout(()=>te(null),0)}),O?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:J.length?J.map((p,A)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":A===me,className:A===me?"active":void 0,onMouseDown:x=>x.preventDefault(),onClick:()=>ae(p),children:[(0,n.jsxs)("strong",{children:["@",p.botName]}),(0,n.jsx)("small",{children:p.larkAppId})]},p.larkAppId)):(0,n.jsx)("p",{children:o("sessions.create.noBotMatch")})}):null]}),(0,n.jsx)("small",{id:"cs-content-help",children:o("sessions.create.contentHelp")}),r.length?(0,n.jsx)("div",{className:"cs-image-list","aria-label":o("sessions.create.pastedImages"),children:r.map(p=>(0,n.jsxs)("figure",{className:"cs-image-item",children:[(0,n.jsx)("img",{src:p.previewUrl,alt:p.name}),(0,n.jsxs)("figcaption",{title:`${p.marker} ${p.name}`,children:[(0,n.jsx)("strong",{children:p.marker}),(0,n.jsx)("span",{children:p.name})]}),(0,n.jsx)("button",{type:"button",className:"cs-image-remove","aria-label":o("sessions.create.removeImage",{name:`${p.marker} ${p.name}`}),title:o("sessions.create.removeImage",{name:`${p.marker} ${p.name}`}),onClick:()=>{let A=r.filter(B=>B.id!==p.id),x=Rt(s,p.marker,A.map(B=>B.marker),B=>`[${o("sessions.create.imageMarker",{n:String(B+1)})}]`);a(x.text),m(A.map((B,$)=>({...B,ordinal:$+1,marker:x.markers[$]}))),C.current=A.length+1},children:(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M7 7l10 10M17 7 7 17"})})})]},p.id))}):null]}),(0,n.jsxs)("fieldset",{className:"cs-bots",children:[(0,n.jsx)("legend",{children:o("sessions.create.bots")}),v.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{className:"cs-bot-search",type:"search",name:"botSearch",placeholder:o("sessions.create.botSearchPlaceholder"),"aria-label":o("sessions.create.botSearchPlaceholder"),value:E,onChange:p=>oe(p.currentTarget.value)}),ge.length?(0,n.jsx)("div",{className:"cs-bot-list",children:ge.map(p=>(0,n.jsxs)("label",{className:"cs-bot",children:[(0,n.jsx)("input",{type:"checkbox",name:"bot",value:p.larkAppId,checked:g.has(p.larkAppId),onChange:A=>{let x=A.currentTarget.checked;d(B=>{let $=new Set(B);return x?$.add(p.larkAppId):$.delete(p.larkAppId),$.has(I)||N($.values().next().value??""),$})}})," ",(0,n.jsx)("span",{children:p.botName})]},p.larkAppId))}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBotMatch")}),R.length?(0,n.jsx)("small",{children:o("sessions.create.selectedCount",{n:String(R.length)})}):null]}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBots")})]}),(0,n.jsxs)("fieldset",{className:"cs-mode",children:[(0,n.jsx)("legend",{children:o("sessions.create.mode")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"lead",checked:f==="lead",onChange:()=>w("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:f==="all",onChange:()=>w("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-lead-row",hidden:f!=="lead",children:[(0,n.jsx)("legend",{children:o("sessions.create.lead")}),(0,n.jsx)("select",{name:"lead",disabled:se.length===0,value:se.includes(I)?I:"",onChange:p=>N(p.currentTarget.value),children:se.length?se.map(p=>(0,n.jsx)("option",{value:p,children:z(p)},p)):(0,n.jsx)("option",{value:"",disabled:!0,children:o("sessions.create.leadPickFirst")})}),(0,n.jsx)("small",{children:o("sessions.create.leadHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-column",children:[(0,n.jsx)("legend",{children:o("sessions.create.column")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"in_progress",checked:T==="in_progress",onChange:()=>P("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:T==="backlog",onChange:()=>P("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${ee?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":ee,"aria-controls":"cs-advanced-fields",onClick:()=>Z(p=>!p),children:o("sessions.create.optionalConfig")})}),ee?(0,n.jsxs)("div",{id:"cs-advanced-fields",className:"cs-advanced-fields",children:[(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.groupName")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"name",maxLength:60,placeholder:o("sessions.create.groupNamePlaceholder"),value:U,onChange:p=>L(p.currentTarget.value)})]}),(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.workingDir")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/foo",value:K,onChange:p=>Q(p.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),q?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[q.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(q.failed)&&q.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(q.failed.length)})}`:""]}),typeof q.shareLink=="string"&&q.shareLink?(0,n.jsx)("a",{href:q.shareLink,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")}):null]}):null,(0,n.jsxs)("div",{className:"actions cs-actions",children:[(0,n.jsxs)("label",{className:"cs-keep-open",title:o("sessions.create.keepOpenHelp"),children:[(0,n.jsx)("input",{type:"checkbox",name:"keepOpen",checked:ue,onChange:p=>{let A=p.currentTarget.checked;ye(A),st(ce(),A)}}),(0,n.jsx)("span",{children:o("sessions.create.keepOpen")})]}),(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")}),(0,n.jsx)("button",{type:"submit",className:"cs-submit",disabled:F||v.length===0,children:F?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function ho(){ut();let e=dt(i=>[...i.sessions.values()]),[t,s]=(0,u.useState)(0),a=(0,u.useCallback)(()=>s(i=>i+1),[]),[r,m]=(0,u.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:Qn(ce()),active:!0,cli:new Set(le)}),[g,d]=(0,u.useState)(new Set),[f,w]=(0,u.useState)("lastMessageAt"),[I,N]=(0,u.useState)("desc"),[T,P]=(0,u.useState)(()=>Yn(ce())),[U,L]=(0,u.useState)(()=>Zn(ce())),[K,Q]=(0,u.useState)(!1),[ee,Z]=(0,u.useState)(null),[F,ne]=(0,u.useState)(null),[E,oe]=(0,u.useState)(()=>ot(ce())),ue=`${T}:${T==="kanban"?E:"-"}`,ye=(0,u.useRef)(!0),[q,Ae]=(0,u.useState)(0),[O,te]=(0,u.useState)([]),[me,we]=(0,u.useState)(null),[X,C]=(0,u.useState)(!1),v=(0,u.useRef)(!1),[R,se]=(0,u.useState)(()=>{try{return window.localStorage.getItem(kn)??""}catch{return""}}),[z,V]=(0,u.useState)({data:null,key:"",fetchedAt:0}),ge=(0,u.useRef)(!1),J=(0,u.useRef)(new Set),[ae,$e]=(0,u.useState)(""),[Pe,Le]=(0,u.useState)(null),[p,A]=(0,u.useState)(null),[x,B]=(0,u.useState)(null),[$,fe]=(0,u.useState)(!1),[Y,_]=(0,u.useState)(24),[Ee,G]=(0,u.useState)(""),[Oe,pe]=(0,u.useState)(null),[Je,Ce]=(0,u.useState)(null),[qt,rn]=(0,u.useState)(null),[Yt,Qt]=(0,u.useState)(null),[ln,Zt]=(0,u.useState)(null),[es,Xe]=(0,u.useState)(null),[ns,cn]=(0,u.useState)(!1),Ke=(0,u.useRef)(0);(0,u.useLayoutEffect)(()=>{if(ye.current){ye.current=!1;return}Ae(i=>i+1)},[ue]),(0,u.useEffect)(()=>{Zt(document.getElementById("create-session-modal"))},[]),(0,u.useEffect)(()=>{rt().then(a)},[a]);let dn=(0,u.useMemo)(()=>{let i=new Map;for(let c of e){let l=String(c.chatId??"").trim();if(!l||!r.showUnknownChats&&Mn(c))continue;let b=xe(c),h=i.get(l);(!h||b<h)&&i.set(l,b)}return[...i.entries()].sort((c,l)=>c[1].localeCompare(l[1])).map(([c,l])=>({value:c,label:l}))},[r.showUnknownChats,t,e]);(0,u.useEffect)(()=>{r.chat&&(dn.some(i=>i.value===r.chat)||m(i=>({...i,chat:""})))},[dn,r.chat]);let be=(0,u.useMemo)(()=>{let i=r.q.toLowerCase(),c=[...r.cli],l=c.length>0&&c.length<le.length,b=T==="kanban",h=r.multiBotTopics||r.botTriggeredTopics?new Set(en(e).filter(y=>!r.multiBotTopics||y.multiBot).filter(y=>!r.botTriggeredTopics||y.inferredBotTriggered).map(y=>y.key)):null,k=e.filter(y=>!l||c.includes(y.cliId??"unknown")).filter(y=>r.showUnknownChats||!Mn(y)).filter(y=>!r.status||y.status===r.status).filter(y=>!r.adopt||r.adopt==="yes"==!!y.adopt).filter(y=>!r.chat||String(y.chatId??"")===r.chat).filter(y=>!r.active||b||y.status!=="closed").filter(y=>!i||St(y).includes(i));return h?k.filter(y=>h.has(An(y))).sort((y,D)=>Xt(y,D,f,I)):k.sort((y,D)=>Xt(y,D,f,I))},[r,t,I,f,e,T]),un=(0,u.useMemo)(()=>Ct(e),[e]),Se=(0,u.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,t]),Kn=(0,u.useMemo)(()=>be.filter(i=>i.status!=="closed"),[be]),_e=(T==="table"||T==="topics"?be:Kn).filter(i=>i.status!=="closed"),_n=[...g].map(i=>Se.get(i)).filter(i=>!!i&&i.status!=="closed"),Un=_e.length>0&&_e.every(i=>g.has(i.sessionId)),ts=_e.some(i=>g.has(i.sessionId))&&!Un;(0,u.useEffect)(()=>{d(i=>{let c=!1,l=new Set;for(let b of i){let h=Se.get(b);h&&h.status!=="closed"?l.add(b):c=!0}return c?l:i})},[Se]);let mn=(0,u.useCallback)(i=>{let c=new Set;if(!i)return c;for(let l of i.groupChats)c.add(l);if(me)for(let[l,b]of me){if(c.has(l))continue;let h=!1;for(let k of i.botIds)if(b.botIds.has(k)){h=!0;break}if(h){for(let k of b.observedNames)if(i.botNames.has(k)){c.add(l);break}}}return c},[me]),Fn=(0,u.useMemo)(()=>{if(T==="kanban"&&E==="team"){let i=O.find(l=>l.key===R)??O[0],c=mn(i);return be.filter(l=>c.has(String(l.chatId)))}return be},[E,R,O,be,mn,T]),gn=(0,u.useCallback)(i=>bt(Fn,i),[Fn]),fn=(0,u.useCallback)(async()=>{if(!(v.current||X)){v.current=!0;try{let[i,c,l]=await Promise.all([fetch("/api/team/hosted").then(k=>k.json()).catch(()=>null),fetch("/api/team/remote-roster").then(k=>k.json()).catch(()=>null),fetch("/api/groups").then(k=>k.json()).catch(()=>null)]);Array.isArray(l?.chats)&&we(new Map(l.chats.map(k=>[String(k.chatId),{botIds:new Set((k.memberBots??[]).filter(y=>y.inChat).map(y=>String(y.larkAppId))),observedNames:new Set((k.observedBotNames??[]).map(y=>String(y)))}])));let b=k=>({ids:new Set(k.map(y=>String(y.larkAppId))),names:new Set(k.map(y=>String(y.name??"")).filter(Boolean))}),h=[];for(let k of i?.teams??[]){let{ids:y,names:D}=b(k.bots??[]);h.push({key:`local:${k.teamId}`,label:k.isDefault?o("team.myHostedTeam"):String(k.name??k.teamId),botIds:y,botNames:D,groupChats:new Set((k.groupChatIds??[]).map(j=>String(j)))})}for(let k of c?.memberships??[]){let{ids:y,names:D}=b(k.roster?.bots??[]);h.push({key:`${k.hubUrl}::${k.teamId}`,label:String(k.teamName??k.teamId??k.hubUrl),botIds:y,botNames:D,groupChats:new Set})}te(h),se(k=>h.length&&!h.some(y=>y.key===k)?h[0].key:k)}finally{C(!0),v.current=!1}}},[X]),jn=(0,u.useCallback)(async(i,c,l,b,h)=>{try{let y=i.startsWith("local:")?await fetch(`/api/team/board/local/${encodeURIComponent(i.slice(6))}/move`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:c,column:l,position:b})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:c,column:l,position:b})}),D=await y.json().catch(()=>({}));(!y.ok||D?.ok===!1)&&(V(j=>{if(!j.data||j.key!==i)return j;let W={...j.data.board};return h?W[c]=h:delete W[c],{...j,data:{...j.data,board:W}}}),y.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${D?.error??y.status}`))}catch(k){V(y=>{if(!y.data||y.key!==i)return y;let D={...y.data.board};return h?D[c]=h:delete D[c],{...y,data:{...y.data,board:D}}}),alert(`${o("sessions.kanban.moveFail")}: ${k}`)}},[]),ss=(0,u.useCallback)(async i=>{let c=z.key===i.key&&Date.now()-z.fetchedAt<3e4;if(!(ge.current||c)){ge.current=!0;try{let b=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,h=await fetch(b),k=await h.json().catch(()=>({}));if(!h.ok||k?.ok===!1)return;let y=typeof k.deploymentId=="string"?k.deploymentId:null,D=[];for(let j of Array.isArray(k.reports)?k.reports:[])if(!(y&&j.deploymentId===y))for(let W of Array.isArray(j.sessions)?j.sessions:[])D.push({...W,remoteDeployment:j.deploymentName||j.deploymentId});V({key:i.key,fetchedAt:Date.now(),data:{board:k.board&&typeof k.board=="object"?k.board:{},remoteRows:D}})}finally{ge.current=!1}}},[z.fetchedAt,z.key]);(0,u.useEffect)(()=>{T==="kanban"&&E==="team"&&!X&&fn()},[E,X,fn,T]),(0,u.useEffect)(()=>{let i=window.setInterval(()=>{T==="kanban"&&E==="team"&&(V(c=>({...c,fetchedAt:0})),a())},3e4);return()=>window.clearInterval(i)},[E,a,T]);let zn=(0,u.useCallback)(async(i,c,l,b)=>{try{let h=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:c,position:l})}),k=await h.json().catch(()=>({}));(!h.ok||k?.ok===!1)&&(i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),h.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${k?.error??h.status}`))}catch(h){i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),alert(`${o("sessions.kanban.moveFail")}: ${h}`)}},[a]),os=(0,u.useCallback)(i=>{let c=!1;for(let l of i){let b=String(l.row.sessionId);if(!b||l.row.status==="closed"&&l.column!=="done")continue;if(E==="team"){let y=O.find(W=>W.key===R)??O[0];if(!y)continue;let j=(z.key===y.key&&z.data?z.data.board:{})[b];V(W=>{let Vn=W.key===y.key&&W.data?W.data:{board:{},remoteRows:W.data?.remoteRows??[]},Cs={...Vn.board,[b]:{column:l.column,position:l.position}};return{...W,key:y.key,data:{...Vn,board:Cs}}}),jn(y.key,b,l.column,l.position,j),c=!0;continue}let h=Be.sessions.get(b);if(!h)continue;let k={column:h.kanbanColumn,position:h.kanbanPosition};h.kanbanColumn=l.column,h.kanbanPosition=l.position,zn(h,l.column,l.position,k),c=!0}c&&a()},[E,R,O,z,zn,jn,a]),Jn=(0,u.useCallback)(async(i,c)=>{let l=i.title;i.title=c,a();try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:c})}),h=await b.json().catch(()=>({}));(!b.ok||h?.ok===!1)&&(i.title=l,a(),b.status!==401&&alert(`${o("sessions.kanban.renameFail")}: ${h?.error??b.status}`))}catch(b){i.title=l,a(),alert(`${o("sessions.kanban.renameFail")}: ${b}`)}},[a]),pn=(0,u.useCallback)(async i=>{try{let c=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),l=await c.json();return l.ok?!0:(alert(`Locate failed: ${l.error??c.status}`),!1)}catch(c){return alert(`Locate error: ${c}`),!1}},[]),bn=(0,u.useCallback)(async(i,c)=>{if(!confirm(o("sessions.closeConfirm")))return!1;c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b?.ok===!1?(l.status!==401&&alert(`Close failed: ${b?.error??l.status}`),!1):(d(h=>{let k=new Set(h);return k.delete(i.sessionId),k}),a(),!0)}catch(l){return alert(`Close error: ${l}`),!1}finally{c&&(c.disabled=!1)}},[a]),Ge=(0,u.useCallback)(async(i,c,l)=>{let b=!!i.locked;if(b===c)return!0;i.locked=c,a(),l&&(l.disabled=!0);try{let h=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:c})}),k=await h.json().catch(()=>({}));return!h.ok||k?.ok===!1?(i.locked=b,a(),h.status!==401&&alert(`${o("sessions.lockFailed")}: ${k?.error??h.status}`),!1):(i.locked=!!k.locked,a(),!0)}catch(h){return i.locked=b,a(),alert(`${o("sessions.lockFailed")}: ${h}`),!1}finally{l&&(l.disabled=!1)}},[a]),Ve=(0,u.useCallback)(async(i,c)=>{if(J.current.has(i.sessionId)||!confirm(Mt(i)))return!1;c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b?.ok===!1?(l.status!==401&&alert(`${o("sessions.restartFailed")}: ${b?.error??l.status}`),!1):(J.current.add(i.sessionId),window.setTimeout(()=>J.current.delete(i.sessionId),5e3),!0)}catch(l){return alert(`${o("sessions.restartFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),as=(0,u.useCallback)(async(i,c)=>{c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b.ok===!1?(alert(`${o("sessions.resumeFailed")}: ${b?.error??l.status}`),!1):!0}catch(l){return alert(`${o("sessions.resumeFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),is=(0,u.useCallback)(async(i,c)=>{c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b.ok===!1?(l.status!==401&&alert(`${o("sessions.create.startFailed")}: ${b?.error??l.status}`),!1):!0}catch(l){return alert(`${o("sessions.create.startFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),We=(0,u.useCallback)(i=>{Ce({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let c=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),l=await c.json().catch(()=>({}));if(!c.ok||l?.ok===!1){let h=String(l?.error??c.status),k=h==="not_found_yet"||h==="not_found";Ce(y=>y?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:h,stale:k}:y);return}let b=Array.isArray(l.messages)?l.messages:[];Ce(h=>h?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:b,ownerOpenId:l.ownerOpenId}:h)}catch(c){Ce(l=>l?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(c)}:l)}})()},[]),rs=(0,u.useCallback)(i=>{let c=je(i);if(!c){pe(i.sessionId);return}rn({sessionId:i.sessionId,url:c,loading:!0}),(async()=>{let l=c;if(nn())try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/write-link`),h=await b.json().catch(()=>({}));b.ok&&h?.ok!==!1&&h?.url&&(l=h.url)}catch{}rn(b=>b?.sessionId===i.sessionId?{sessionId:i.sessionId,url:l,loading:!1}:b)})()},[]),ls=(0,u.useCallback)(async()=>{let i=[...g];if(i.length===0||!confirm(o("sessions.closeBulkConfirm",{count:i.length})))return;Le({done:0,total:i.length});let c=0,l=0,b=[...i];async function h(){for(;b.length;){let k=b.shift();try{let y=await fetch(`/api/sessions/${encodeURIComponent(k)}/close`,{method:"POST"}),D=await y.json().catch(()=>({}));(!y.ok||D?.ok===!1)&&(l+=1)}catch{l+=1}finally{c+=1,Le({done:c,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>h())),Le(null),d(new Set),a(),l>0&&alert(`Failed: ${l}/${i.length}`)},[a,g]),cs=(0,u.useCallback)(async i=>{let c=[...g].map(y=>Se.get(y)).filter(y=>!!y&&y.status!=="closed"&&!!y.locked!==i);if(c.length===0)return;A({locked:i,done:0,total:c.length});let l=0,b=0,h=[...c];async function k(){for(;h.length;){let y=h.shift(),D=!!y.locked;try{let j=await fetch(`/api/sessions/${encodeURIComponent(y.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),W=await j.json().catch(()=>({}));!j.ok||W?.ok===!1?(b+=1,y.locked=D):y.locked=!!W.locked}catch{b+=1,y.locked=D}finally{l+=1,A({locked:i,done:l,total:c.length})}}}await Promise.all(Array.from({length:Math.min(6,c.length)},()=>k())),A(null),a(),b>0&&alert(`${o("sessions.lockFailed")}: ${b}/${c.length}`)},[a,Se,g]),ds=(0,u.useCallback)(()=>{let i=[...g].filter(l=>!!Se.get(l));if(i.length===0)return;let c=ft(i);B(o("sessions.monitorRoomAdded",{added:c.added,total:c.total})),window.setTimeout(()=>B(null),1800)},[Se,g]),us=(0,u.useCallback)(async i=>{let c=Sn(i);if(!c)return;let l=gn(c);if(l.length!==0){_(c),fe(!0),G(o("sessions.idleCleanupRunning"));try{let b=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:c,sessionIds:l.map(k=>k.sessionId)})}),h=await b.json().catch(()=>({}));if(!b.ok){b.status!==401&&alert(`${o("sessions.idleCleanupFailed")}: ${h?.error??b.status}`),G("");return}d(k=>{let y=new Set(k);for(let D of h?.results??[])D?.ok&&D?.sessionId&&y.delete(String(D.sessionId));return y}),G(o("sessions.idleCleanupDone",{closed:Number(h?.closed??0),failed:Number(h?.failed??0)})),a()}catch(b){alert(`${o("sessions.idleCleanupFailed")}: ${b}`),G("")}finally{fe(!1)}}},[gn,a]),ms=i=>{let c=qn(i)??"board";c!==T&&(P(c),et(ce(),c))},gs=(i,c)=>{L(l=>{let b=l.indexOf(i),h=b+c;if(b<0||h<0||h>=l.length)return l;let k=[...l];return k.splice(b,1),k.splice(h,0,i),yn(ce(),k),k})},fs=(i,c)=>{i!==c&&L(l=>{let b=l.indexOf(i),h=l.indexOf(c);if(b<0||h<0)return l;let k=[...l];return k.splice(b,1),k.splice(h,0,i),yn(ce(),k),k})},ps=(0,u.useMemo)(()=>({rows:be,groupBy:E,teams:O,teamsLoaded:X,teamKey:R,teamBoardData:z.data,teamBoardKey:z.key}),[E,R,O,X,be,z.data,z.key]),bs=Oe?Se.get(Oe)??null:null,hn=(0,u.useMemo)(()=>X?O.length?O.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[O,X]),hs=!X||O.length===0,Xn=O.some(i=>i.key===R)?R:hn[0]?.value??"",ys=hn.find(i=>i.value===Xn)?.label??o("sessions.kanban.groupTeam"),ks=(0,u.useCallback)(()=>{Ke.current+=1,cn(!1),Xe(null)},[]),Gn=(0,u.useCallback)(async()=>{let i=Ke.current+1;Ke.current=i,Xe({bots:[],loading:!0}),cn(!0);try{let c=await xt();if(Ke.current!==i)return;Xe({bots:c})}finally{Ke.current===i&&cn(!1)}},[]),ws=(0,u.useCallback)(async()=>{let i=window.prompt(o("sessions.debugTerminalPrompt"),"");if(i===null)return;let c=i.trim(),l=window.open("about:blank","_blank");l&&(l.opener=null);try{let b=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c?{workingDir:c}:{})}),h=await b.json().catch(()=>({}));if(!b.ok||h?.ok===!1||!h?.url){l?.close(),b.status!==401&&alert(`${o("sessions.debugTerminalFail")}: ${h?.error??b.status}`);return}l?l.location.href=h.url:window.open(h.url,"_blank","noopener")}catch(b){l?.close(),alert(`${o("sessions.debugTerminalFail")}: ${b}`)}},[]);return(0,u.useEffect)(()=>{let i=()=>{mt()&&ve.authed&&Gn()};return i(),window.addEventListener(wn,i),()=>window.removeEventListener(wn,i)},[]),(0,n.jsxs)("section",{className:"page sessions-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{className:"sessions-heading-main",children:[(0,n.jsx)("p",{className:"eyebrow",children:o("nav.sessions")}),(0,n.jsx)("h1",{children:o("sessions.title")}),(0,n.jsxs)("div",{className:"sessions-view-controls",children:[(0,n.jsx)("div",{className:"segmented sessions-view-toggle",role:"group","aria-label":o("sessions.viewMode"),children:[["kanban",o("sessions.viewKanban")],["board",o("sessions.viewBoard")],["topics",o("sessions.viewTopics")],["table",o("sessions.viewTable")]].map(([i,c])=>(0,n.jsx)("button",{type:"button","data-view":i,className:T===i?"active":void 0,"aria-pressed":T===i,onClick:()=>ms(i),children:c},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${T==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":T!=="kanban",children:[["flow",o("sessions.kanban.groupFlow")],["team",o("sessions.kanban.groupTeam")],["bot",o("sessions.kanban.groupBot")]].map(([i,c])=>(0,n.jsx)("button",{type:"button","data-groupby":i,className:E===i?"active":void 0,"aria-pressed":E===i,onClick:()=>{oe(i),at(ce(),i)},children:c},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(T==="kanban"&&E==="team"&&X),children:ae}),(0,n.jsx)(Ue,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(T==="kanban"&&E==="team"),disabled:hs,label:ys,value:Xn,options:hn,onChange:i=>{if(O.some(c=>c.key===i)){se(i);try{window.localStorage.setItem(kn,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=pt()},children:o("sessions.monitorRoom")}),ve.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{ws()},children:o("sessions.debugTerminal")}):null,ve.authed?(0,n.jsx)(ct,{className:"page-primary-action create-session-btn",disabled:ns,onClick:()=>{Gn()},children:o("sessions.create.button")}):null]})]}),(0,n.jsxs)("div",{className:"session-runtime-stats","aria-live":"polite",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)(eo,{chatOptions:dn,filters:r,setFilters:m,idleCleanup:{busy:$,hours:Y,status:Ee,countForHours:i=>gn(i).length,onRun:us}}),(0,n.jsx)(no,{selectedCount:g.size,lockDisabled:!_n.some(i=>!i.locked),unlockDisabled:!_n.some(i=>!!i.locked),closeProgress:Pe,lockProgress:p,monitorRoomText:x,onClear:()=>d(new Set),onClose:()=>{ls()},onAddToMonitorRoom:ds,onLock:i=>{cs(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${q>0?" sessions-view-stage-enter":""}`,"data-view":T,"data-kanban-group":E,children:[(0,n.jsx)(so,{rows:be,selected:g,hidden:T!=="table",sortKey:f,sortDir:I,selectAllChecked:Un,selectAllIndeterminate:ts,selectAllDisabled:_e.length===0,onOpen:i=>pe(i.sessionId),onSelect:(i,c)=>d(l=>{let b=new Set(l);return c?b.add(i):b.delete(i),b}),onSelectAll:i=>d(c=>{let l=new Set(c);for(let b of _e)i?l.add(b.sessionId):l.delete(b.sessionId);return l}),onSort:i=>{f===i?N(I==="asc"?"desc":"asc"):(w(i),N(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))}}),(0,n.jsx)(oo,{rows:Kn,selected:g,hidden:T!=="board",order:U,animated:K,dragColId:ee,dragOverCol:F,onAnimated:()=>Q(!0),onMoveColumn:gs,onMoveColumnTo:fs,onDragCol:Z,onDragOverCol:ne,onToggleSelect:i=>d(c=>{let l=new Set(c);return l.has(i.sessionId)?l.delete(i.sessionId):l.add(i.sessionId),l}),onOpen:i=>pe(i.sessionId),onHistory:We,onLocate:i=>pn(i),onRestart:(i,c)=>{Ve(i,c)},onLock:(i,c,l)=>{Ge(i,c,l)},onClose:(i,c)=>{bn(i,c)}}),(0,n.jsx)(io,{rows:be,relationRows:e,selected:g,hidden:T!=="topics",onToggleSelect:i=>d(c=>{let l=new Set(c);return l.has(i.sessionId)?l.delete(i.sessionId):l.add(i.sessionId),l}),onOpen:i=>pe(i.sessionId),onHistory:We,onLocate:i=>pn(i),onRestart:(i,c)=>{Ve(i,c)},onLock:(i,c,l)=>{Ge(i,c,l)},onClose:(i,c)=>{bn(i,c)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:Qt,className:`sessions-kanban${E==="bot"?" kanban-mode-bot":""}`,hidden:T!=="kanban",children:T==="kanban"?(0,n.jsx)(jt,{host:Yt,...ps,canRestartSession:sn,getTeamChatIds:mn,icons:{details:H.details,feishu:H.feishu,history:H.history,lock:H.lock,restart:H.restart,terminal:H.terminal,unlock:H.unlock},lockActionLabel:tn,sessionStatusText:Fe,onDetails:i=>pe(String(i.sessionId)),onHistory:We,onMoveRows:os,onNeedTeamBoard:i=>{ss(i)},onNeedTeams:()=>{fn()},onOpenTerminal:rs,onRename:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Jn(l,c)},onRestart:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Ve(l,c)},onTeamScope:i=>$e(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Ge(l,!l.locked,c)},onToggleSelect:i=>d(c=>{let l=String(i.sessionId),b=new Set(c);return b.has(l)?b.delete(l):b.add(l),b}),selectedSessionIds:g}):null})]},q),(0,n.jsx)(po,{row:bs,onClose:()=>pe(null),locateSession:pn,openHistory:We,resumeSession:as,restartSession:Ve,closeSession:bn,setSessionLocked:Ge,startSession:is}),(0,n.jsx)(uo,{state:qt,onClose:()=>rn(null),onRename:Jn}),(0,n.jsx)(lo,{state:Je,onClose:()=>Ce(null)}),ln?(0,Pn.createPortal)((0,n.jsx)(bo,{dialog:ln,state:es,onClose:ks,onSuccess:i=>Xe(c=>c&&{...c,success:i})}),ln):null]})}function Wo(e){return lt(e,(0,n.jsx)(ho,{}))}export{Zs as CliFilterGroup,io as TopicGroupsView,Wo as renderSessionsPage};
@@ -1,2 +0,0 @@
1
- import{b as w}from"./chunk-QCPPKCX3.js";import{a as F,c as re,i as Pe,k as B,p as L}from"./chunk-QFMH6ITB.js";import{a as fe,r as pe}from"./chunk-H7P5UV4W.js";import{a as ke}from"./chunk-SYC6D5XU.js";import{a as Ne,d as oe}from"./chunk-5THX4DI2.js";import{c as te}from"./chunk-7SZRL6FY.js";var f=te(Ne(),1);var N=te(Ne(),1);var s=te(oe(),1),Oe=["transcript_received","chat_received","participant_joined","participant_left","magic_share_started","magic_share_ended"],me=8e3,Re=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,Be="\u6301\u7EED\u6574\u7406\u4F1A\u8BAE\u7EAA\u8981\uFF0C\u91CD\u70B9\u8BB0\u5F55\u5DF2\u786E\u8BA4\u7684\u51B3\u7B56\u3001\u5F85\u529E\u4E8B\u9879\uFF08\u542B\u8D1F\u8D23\u4EBA\u548C\u622A\u6B62\u65F6\u95F4\uFF09\u4EE5\u53CA\u672A\u89E3\u51B3\u98CE\u9669\uFF1B\u5B57\u5E55\u4FEE\u8BA2\u65F6\u66F4\u65B0\u5DF2\u6709\u6761\u76EE\uFF0C\u4E0D\u91CD\u590D\u8BB0\u5F55\u540C\u4E00\u4E8B\u9879\u3002\u4EC5\u5728\u51FA\u73B0\u65B0\u7684\u5173\u952E\u51B3\u7B56\u3001\u660E\u786E\u5F85\u529E\u6216\u98CE\u9669\uFF0C\u6216\u88AB\u7528\u6237\u70B9\u540D\u65F6\uFF0C\u624D\u5728\u76D1\u542C\u7FA4\u8F93\u51FA\u7B80\u6D01\u589E\u91CF\uFF1B\u65E0\u5B9E\u8D28\u589E\u91CF\u65F6\u4FDD\u6301\u9759\u9ED8\uFF0C\u4E0D\u53D1\u9001\u786E\u8BA4\u6216\u5FC3\u8DF3\u3002\u9700\u8981\u5411\u4F1A\u8BAE\u5185\u53D1\u9001\u6587\u5B57\u6216\u8BED\u97F3\u65F6\uFF0C\u5FC5\u987B\u901A\u8FC7 botmux \u53D7\u7BA1 request-output/action gate \u63D0\u4EA4\uFF0C\u4E0D\u5F97\u7ED5\u8FC7\u6743\u9650\u3001\u6240\u6709\u6743\u4E0E\u5BA1\u6838\u7B56\u7565\u3002",Ce=0;function Te(){return Ce+=1,`p${Ce}`}function Se(e){return{...e,uiKey:Te(),isNew:!1}}function Le(e){let{uiKey:t,isNew:i,...d}=e;return d}function G(e){return(0,s.jsxs)("span",{className:"vc-profile-field-head",children:[e.title,(0,s.jsx)(Pe,{label:e.title,children:(0,s.jsx)("span",{className:"vc-profile-help",children:e.help})})]})}function Ae(e){let t=w();return e.enabled?e.canWrite?(0,s.jsx)(De,{canWrite:e.canWrite,listenerBotAppId:e.listenerBotAppId,listenerBotOptions:e.listenerBotOptions}):(0,s.jsx)("p",{className:"hint",children:t("settings.vcProfiles.needAuth")}):null}function De(e){let t=w(),i=(0,N.useRef)(!1),d=e.listenerBotOptions,[p,v]=(0,N.useState)(e.listenerBotAppId??d[0]?.larkAppId??""),[c,k]=(0,N.useState)(null),[T,A]=(0,N.useState)(null),[h,V]=(0,N.useState)(!1),[P,Z]=(0,N.useState)(!1),[I,Q]=(0,N.useState)(!1),[r,m]=(0,N.useState)(!1),[C,D]=(0,N.useState)({}),[z,ie]=(0,N.useState)(!1);(0,N.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let W=(0,N.useRef)(0);(0,N.useEffect)(()=>{e.listenerBotAppId&&e.listenerBotAppId!==p&&!P&&v(e.listenerBotAppId)},[P,e.listenerBotAppId,p]);let J=(0,N.useCallback)(async a=>{let o=++W.current;if(k(null),Z(!1),m(!1),D({}),!a){A(null);return}V(!0);try{let l=await fetch(`/api/vc-meeting/consumer-profiles?listenerBotAppId=${encodeURIComponent(a)}`),g=await l.json().catch(()=>({}));if(!i.current||W.current!==o)return;!l.ok||g?.ok!==!0?(k(null),A(typeof g?.error=="string"?g.error:`HTTP ${l.status}`)):(k({forBot:a,revision:g.revision,catalogState:g.catalogState==="explicit_empty"||g.catalogState==="legacy_or_partial"||g.catalogState==="profiles"?g.catalogState:"uninitialized",defaultMode:g.defaultMode==="agents"?"agents":"listenOnly",defaultConsumerIds:Array.isArray(g.defaultConsumerIds)?g.defaultConsumerIds:[],profiles:(Array.isArray(g.profiles)?g.profiles:[]).map(Se),agentOptions:Array.isArray(g.agentOptions)?g.agentOptions:[],...g.migrationOffer==="enable_seeded_minutes_default"?{migrationOffer:g.migrationOffer}:{}}),A(null),Z(!1))}catch(l){if(!i.current||W.current!==o)return;k(null),A(l instanceof Error?l.message:String(l))}finally{i.current&&W.current===o&&V(!1)}},[]);(0,N.useEffect)(()=>{J(p)},[J,p]);let M=(0,N.useCallback)(a=>{k(o=>o&&a(o)),Z(!0),ie(!1)},[]),K=(0,N.useCallback)((a,o)=>{M(l=>({...l,profiles:l.profiles.map(g=>g.uiKey===a?{...g,...o}:g)}))},[M]),ne=(0,N.useCallback)(async()=>{if(!c||I||h||!c.forBot||c.forBot!==p)return;let a={};if(c.profiles.forEach((o,l)=>{Re.test(o.id)||(a[`profiles[${l}].id`]=t("settings.vcProfiles.idInvalid")),(o.instructions??"").length>me&&(a[`profiles[${l}].instructions`]=t("settings.vcProfiles.instructionsTooLong"))}),Object.keys(a).length>0){D(a);return}Q(!0),m(!1),D({});try{let o=await fetch("/api/vc-meeting/consumer-profiles",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({listenerBotAppId:c.forBot,expectedRevision:c.revision,defaultMode:c.defaultMode,defaultConsumerIds:c.defaultConsumerIds,profiles:c.profiles.map(Le)})}),l=await o.json().catch(()=>({}));if(!i.current||c.forBot!==p)return;if(o.status===409){m(!0);return}if(o.status===422){let g={};for(let R of Array.isArray(l?.fieldErrors)?l.fieldErrors:[])typeof R?.path=="string"&&typeof R?.message=="string"&&(g[R.path]=R.message);D(Object.keys(g).length>0?g:{profiles:t("settings.vcProfiles.validationFailed")});return}if(!o.ok||l?.ok!==!0){D({profiles:typeof l?.error=="string"?l.error:`HTTP ${o.status}`});return}k({forBot:c.forBot,revision:l.revision,catalogState:l.catalogState==="explicit_empty"||l.catalogState==="legacy_or_partial"||l.catalogState==="profiles"?l.catalogState:"uninitialized",defaultMode:l.defaultMode==="agents"?"agents":"listenOnly",defaultConsumerIds:Array.isArray(l.defaultConsumerIds)?l.defaultConsumerIds:[],profiles:(Array.isArray(l.profiles)?l.profiles:[]).map(Se),agentOptions:Array.isArray(l.agentOptions)?l.agentOptions:[],...l.migrationOffer==="enable_seeded_minutes_default"?{migrationOffer:l.migrationOffer}:{}}),Z(!1),ie(!0)}catch(o){if(!i.current)return;D({profiles:o instanceof Error?o.message:String(o)})}finally{i.current&&Q(!1)}},[c,I,p,t]),X=(0,N.useMemo)(()=>d.map(a=>({value:a.larkAppId,label:a.botName||a.larkAppId})),[d]),Y=X.find(a=>a.value===p)?.label??p,ce=(0,N.useMemo)(()=>c?c.agentOptions.map(a=>{let o=[a.online?void 0:t("settings.vcProfiles.agentOffline"),a.workingDirReady?void 0:t("settings.vcProfiles.agentNoWorkingDir"),a.reliableTurnTerminal?void 0:t("settings.vcProfiles.agentNoReliableTerminal"),a.managedSideEffectIsolation?void 0:t("settings.vcProfiles.agentNoManagedIsolation")].filter(Boolean);return{value:a.appId,label:(0,s.jsxs)("span",{className:"vc-agent-option",children:[(0,s.jsxs)("span",{className:"vc-agent-option-name",children:[a.label,a.cliId?(0,s.jsx)("em",{className:"vc-agent-option-cli",children:a.cliId}):null]}),o.length>0?(0,s.jsxs)("span",{className:"vc-agent-option-warn",children:["\u26A0 ",o.join(" \xB7 ")]}):null]})}}):[],[c,t]),ae=a=>{let o=c?.agentOptions.find(g=>g.appId===a);return o?!o.online||!o.workingDirReady||!o.reliableTurnTerminal||!o.managedSideEffectIsolation?`\u26A0 ${o.label}`:o.label:a},se=(0,N.useCallback)(a=>{let l=["observe_only","meeting_text","meeting_voice","meeting_text_voice"].map(g=>({value:g,label:t(`settings.vcProfiles.preset.${g}`)}));return(!a.isNew||a.permissionPreset==="custom")&&l.push({value:"custom",label:t("settings.vcProfiles.preset.custom")}),l},[t]),de=(0,N.useCallback)(()=>{M(a=>({...a,profiles:[...a.profiles,{uiKey:Te(),isNew:!0,id:"",agentAppId:a.agentOptions[0]?.appId??"",responseMode:"silent",permissionPreset:"observe_only"}]}))},[M]),ue=(0,N.useCallback)(a=>{M(o=>({...o,profiles:o.profiles.filter(l=>l.uiKey!==a),defaultConsumerIds:o.defaultConsumerIds.filter(l=>o.profiles.some(g=>g.uiKey!==a&&g.id===l))}))},[M]);if(d.length===0)return null;let y=a=>C[a],U=!e.canWrite||I||h,O=c?.agentOptions.some(a=>a.workingDirReady&&a.reliableTurnTerminal&&a.managedSideEffectIsolation)??!1;return(0,s.jsxs)("div",{className:"vc-profiles-section",children:[(0,s.jsxs)("div",{className:"settings-field-row",children:[(0,s.jsx)(B,{help:t("settings.vcProfiles.help"),children:t("settings.vcProfiles.title")}),e.listenerBotAppId===null&&X.length>1?(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:t("settings.vcProfiles.listenerOwner")}),(0,s.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.vcProfiles.listenerOwner"),disabled:h||I,value:p,label:F(X,p),options:X,onChange:a=>{a!==p&&(P&&!window.confirm(t("settings.vcProfiles.discardConfirm"))||v(a))}})]}):(0,s.jsx)("span",{className:"vc-profile-config-target",children:t("settings.vcProfiles.configuringBot",{bot:Y})})]}),(0,s.jsx)("p",{className:"hint vc-profiles-freeze",children:t("settings.vcProfiles.freezeNotice")}),h?(0,s.jsx)("p",{className:"hint",children:t("settings.vcProfiles.loading")}):null,T?(0,s.jsx)("p",{className:"hint-warn",children:T==="bot_not_in_config"?t("settings.vcProfiles.botNotInConfig"):`${t("settings.vcProfiles.loadFailed")}: ${T}`}):null,r?(0,s.jsxs)("p",{className:"hint-warn",children:[t("settings.vcProfiles.conflict")," ",(0,s.jsx)("button",{type:"button",className:"vc-profiles-link",onClick:()=>{J(p)},children:t("settings.vcProfiles.reload")})]}):null,y("profiles")?(0,s.jsx)("p",{className:"hint-warn",children:y("profiles")}):null,c?(0,s.jsxs)(s.Fragment,{children:[c.migrationOffer==="enable_seeded_minutes_default"?(0,s.jsxs)("p",{className:"hint-warn vc-profile-migration-offer",children:[t("settings.vcProfiles.migrationOffer")," ",(0,s.jsx)("button",{type:"button",className:"vc-profiles-link",disabled:U||P,onClick:()=>M(a=>({...a,defaultMode:"agents",defaultConsumerIds:["minutes"],profiles:a.profiles.map(o=>o.id==="minutes"?{...o,instructions:Be,responseMode:"listener_thread",permissionPreset:"meeting_text_voice"}:o),migrationOffer:void 0})),children:t("settings.vcProfiles.migrationEnable")})]}):null,c.catalogState==="uninitialized"&&c.profiles.length===0&&!O?(0,s.jsx)("p",{className:"hint-warn",children:t("settings.vcProfiles.noEligibleDefaultAgent")}):null,c.catalogState==="legacy_or_partial"?(0,s.jsx)("p",{className:"hint",children:t("settings.vcProfiles.legacyCatalog")}):null,c.profiles.map((a,o)=>(0,s.jsxs)("div",{className:"vc-profile-card",children:[(0,s.jsxs)("div",{className:"vc-profile-grid",children:[(0,s.jsxs)("label",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldId"),help:t("settings.vcProfiles.idHelp")})}),(0,s.jsx)("input",{type:"text",value:a.id,disabled:U||!a.isNew,placeholder:"minutes",onChange:l=>{let g=l.target.value,R=a.id;M($=>({...$,profiles:$.profiles.map(H=>H.uiKey===a.uiKey?{...H,id:g}:H),defaultConsumerIds:$.defaultConsumerIds.map(H=>H===R&&R?g:H).filter(H=>!!H)}))}}),y(`profiles[${o}].id`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].id`)}):null]}),(0,s.jsxs)("label",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldLabel"),help:t("settings.vcProfiles.labelHelp")})}),(0,s.jsx)("input",{type:"text",value:a.label??"",disabled:U,onChange:l=>K(a.uiKey,{label:l.target.value||void 0})}),y(`profiles[${o}].label`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].label`)}):null]}),(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldAgent"),help:t("settings.vcProfiles.agentHelp")})}),(0,s.jsx)(L,{className:"vc-profile-agent-menu",ariaLabel:t("settings.vcProfiles.fieldAgent"),disabled:U,value:a.agentAppId,label:ae(a.agentAppId),options:ce,onChange:l=>K(a.uiKey,{agentAppId:l})}),y(`profiles[${o}].agentAppId`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].agentAppId`)}):null]}),(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldResponseMode"),help:t("settings.vcProfiles.responseModeHelp")})}),(0,s.jsx)(L,{ariaLabel:t("settings.vcProfiles.fieldResponseMode"),disabled:U,value:a.responseMode,label:a.responseMode==="listener_thread"?t("settings.vcProfiles.responseListener"):t("settings.vcProfiles.responseSilent"),options:[{value:"silent",label:t("settings.vcProfiles.responseSilent")},{value:"listener_thread",label:t("settings.vcProfiles.responseListener")}],onChange:l=>K(a.uiKey,{responseMode:l})}),y(`profiles[${o}].responseMode`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].responseMode`)}):null]}),(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldPreset"),help:t("settings.vcProfiles.presetHelp")})}),(0,s.jsx)(L,{ariaLabel:t("settings.vcProfiles.fieldPreset"),disabled:U,value:a.permissionPreset,label:F(se(a),a.permissionPreset),options:se(a),onChange:l=>K(a.uiKey,{permissionPreset:l})}),y(`profiles[${o}].permissionPreset`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].permissionPreset`)}):null]})]}),(0,s.jsxs)("label",{className:"vc-profile-field vc-profile-instructions",children:[(0,s.jsxs)("span",{children:[(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldInstructions"),help:t("settings.vcProfiles.instructionsHelp")}),(0,s.jsxs)("em",{className:"vc-profile-count",children:[(a.instructions??"").length,"/",me]})]}),(0,s.jsx)("textarea",{rows:4,maxLength:me,value:a.instructions??"",disabled:U,placeholder:t("settings.vcProfiles.instructionsPlaceholder"),onChange:l=>K(a.uiKey,{instructions:l.target.value||void 0})}),y(`profiles[${o}].instructions`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].instructions`)}):null]}),(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:(0,s.jsx)(G,{title:t("settings.vcProfiles.fieldActivityTypes"),help:t("settings.vcProfiles.activityHelp")})}),(0,s.jsx)("div",{className:"vc-profile-activity",children:Oe.map(l=>{let g=a.activityTypes?.includes(l)??!1;return(0,s.jsxs)("label",{className:"vc-profile-check",children:[(0,s.jsx)("input",{type:"checkbox",checked:g,disabled:U,onChange:R=>{let $=new Set(a.activityTypes??[]);R.target.checked?$.add(l):$.delete(l),K(a.uiKey,{activityTypes:$.size>0?[...$]:void 0})}}),t(`settings.vcProfiles.activity.${l}`)]},l)})}),(0,s.jsx)("em",{className:"vc-profile-hint",children:t("settings.vcProfiles.activityAllHint")}),y(`profiles[${o}].activityTypes`)?(0,s.jsx)("em",{className:"vc-profile-err",children:y(`profiles[${o}].activityTypes`)}):null]}),e.canWrite?(0,s.jsx)("button",{type:"button",className:"vc-profiles-link vc-profile-remove",disabled:I||h,onClick:()=>ue(a.uiKey),children:t("settings.vcProfiles.remove")}):null]},a.uiKey)),e.canWrite?(0,s.jsx)("button",{type:"button",className:"vc-profiles-link",disabled:I||h,onClick:de,children:t("settings.vcProfiles.add")}):null,(0,s.jsxs)("div",{className:"settings-field-row",children:[(0,s.jsx)(B,{help:t("settings.vcProfiles.defaultModeHelp"),children:t("settings.vcProfiles.defaultMode")}),(0,s.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.vcProfiles.defaultMode"),disabled:U,value:c.defaultMode,label:c.defaultMode==="agents"?t("settings.vcProfiles.defaultModeAgents"):t("settings.vcProfiles.defaultModeListenOnly"),options:[{value:"listenOnly",label:t("settings.vcProfiles.defaultModeListenOnly")},{value:"agents",label:t("settings.vcProfiles.defaultModeAgents")}],onChange:a=>M(o=>({...o,defaultMode:a==="agents"?"agents":"listenOnly"}))})]}),c.defaultMode==="agents"?(0,s.jsxs)("div",{className:"vc-profile-field",children:[(0,s.jsx)("span",{children:t("settings.vcProfiles.defaultConsumers")}),(0,s.jsx)("div",{className:"vc-profile-activity",children:c.profiles.filter(a=>a.id).map(a=>{let o=c.defaultConsumerIds.includes(a.id);return(0,s.jsxs)("label",{className:"vc-profile-check",children:[(0,s.jsx)("input",{type:"checkbox",checked:o,disabled:U,onChange:l=>{M(g=>({...g,defaultConsumerIds:l.target.checked?[...g.defaultConsumerIds,a.id]:g.defaultConsumerIds.filter(R=>R!==a.id)}))}}),a.label||a.id]},a.uiKey)})}),y("defaultConsumerIds")?(0,s.jsx)("em",{className:"vc-profile-err",children:y("defaultConsumerIds")}):null,y("defaultMode")?(0,s.jsx)("em",{className:"vc-profile-err",children:y("defaultMode")}):null]}):null,e.canWrite?(0,s.jsxs)("div",{className:"vc-profiles-actions",children:[(0,s.jsx)("button",{type:"button",className:"vc-profiles-save",disabled:!P||I||r,onClick:()=>{ne()},children:t(I?"settings.vcProfiles.saving":"settings.vcProfiles.save")}),z?(0,s.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.saved")}):null,P&&!I?(0,s.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.unsaved")}):null]}):null]}):null]})}var n=te(oe(),1),ve=["Asia/Shanghai","Asia/Hong_Kong","Asia/Tokyo","Asia/Singapore","Asia/Kolkata","UTC","Europe/London","Europe/Paris","Europe/Moscow","America/Los_Angeles","America/New_York","America/Sao_Paulo","Australia/Sydney"];function Ue(e,t){if(!e||typeof e!="object")return null;if(e.failed){let i=e.failed.step==="install"?t("settings.herdrTraexInstallStepInstall"):t("settings.herdrTraexInstallStepAction");return{text:`${t("settings.herdrTraexInstallFailed")}\uFF08${i}\uFF09: ${e.failed.reason??""}`,cls:"hint-warn-inline"}}if(e.skippedReason==="plugin_unsupported"){let i=typeof e.herdrVersion=="string"&&e.herdrVersion?` (${e.herdrVersion})`:"";return{text:`${t("settings.herdrTraexUnsupported")}${i}`,cls:"hint-warn-inline"}}return e.installed||e.actionInvoked?{text:t("settings.herdrTraexInstalled"),cls:"hint-ok"}:e.alreadyInstalled?{text:t("settings.herdrTraexAlreadyInstalled"),cls:"hint-ok"}:null}function he(e){return{publicReadOnly:e?.publicReadOnly===!0,openTerminalInFeishu:e?.openTerminalInFeishu===!0,enableLocalCliOpen:e?.enableLocalCliOpen===!0,localCliOpenMode:e?.localCliOpenMode==="resume"?"resume":"attach",chatBotDiscovery:e?.chatBotDiscovery!==!1,herdrTraexPlugin:{enabled:e?.herdrTraexPlugin?.enabled===!0,source:typeof e?.herdrTraexPlugin?.source=="string"?e.herdrTraexPlugin.source:"",ref:typeof e?.herdrTraexPlugin?.ref=="string"?e.herdrTraexPlugin.ref:"",recommendedSource:typeof e?.herdrTraexPlugin?.recommendedSource=="string"?e.herdrTraexPlugin.recommendedSource:"",recommendedRef:typeof e?.herdrTraexPlugin?.recommendedRef=="string"?e.herdrTraexPlugin.recommendedRef:""},codexRpcInput:e?.codexRpcInput===!0,codexNotifier:{enabled:e?.codexNotifier?.enabled===!0,targetBotAppId:typeof e?.codexNotifier?.targetBotAppId=="string"?e.codexNotifier.targetBotAppId:null,notifyWhen:e?.codexNotifier?.notifyWhen==="always"?"always":"locked_only",platformSupported:e?.codexNotifier?.platformSupported===!0,hookInstalled:e?.codexNotifier?.hookInstalled===!0,botOptions:Array.isArray(e?.codexNotifier?.botOptions)?e.codexNotifier.botOptions:[],targetDaemonOnline:e?.codexNotifier?.targetDaemonOnline===!0,pendingCount:Number.isSafeInteger(e?.codexNotifier?.pendingCount)?Math.max(0,e.codexNotifier.pendingCount):0,workerOnline:e?.codexNotifier?.workerOnline===!0,lastError:e?.codexNotifier?.lastError&&typeof e.codexNotifier.lastError.message=="string"?e.codexNotifier.lastError:null},vcMeetingAgent:{enabled:e?.vcMeetingAgent?.enabled!==!1,listenerBotAppId:typeof e?.vcMeetingAgent?.listenerBotAppId=="string"?e.vcMeetingAgent.listenerBotAppId:null,listenerBotOptions:Array.isArray(e?.vcMeetingAgent?.listenerBotOptions)?e.vcMeetingAgent.listenerBotOptions:[],larkCliVersion:e?.vcMeetingAgent?.larkCliVersion===void 0?void 0:e.vcMeetingAgent.larkCliVersion??null,larkCliMeetsRequirement:e?.vcMeetingAgent?.larkCliMeetsRequirement===!0,larkCliMinVersion:typeof e?.vcMeetingAgent?.larkCliMinVersion=="string"?e.vcMeetingAgent.larkCliMinVersion:void 0},repoPickerMode:e?.repoPickerMode==="repos"?"repos":"all",maintenance:e?.maintenance&&typeof e.maintenance=="object"?e.maintenance:{},localDevInstall:e?.localDevInstall===!0,autoUpdateSupported:e?.autoUpdateSupported!==!1,whiteboard:{enabled:e?.whiteboard?.enabled===!0},remoteAccess:e?.remoteAccess===!0,scheduleTimeZone:typeof e?.scheduleTimeZone=="string"?e.scheduleTimeZone:"",hostTimeZone:typeof e?.hostTimeZone=="string"&&e.hostTimeZone?e.hostTimeZone:"UTC",effectiveScheduleTimeZone:typeof e?.effectiveScheduleTimeZone=="string"&&e.effectiveScheduleTimeZone?e.effectiveScheduleTimeZone:typeof e?.scheduleTimeZone=="string"&&e.scheduleTimeZone?e.scheduleTimeZone:typeof e?.hostTimeZone=="string"&&e.hostTimeZone?e.hostTimeZone:"UTC"}}function Ee(e,t){let i=e?.[t]??{};return{enabled:i.enabled===!0,time:typeof i.time=="string"?i.time:"04:00"}}function Ie(e,t){return t(e==="npm-global"?"update.kindNpm":e==="pnpm-global"?"update.kindPnpm":e==="yarn-global"?"update.kindYarn":e==="bun-global"?"update.kindBun":e==="source-checkout"?"update.kindSource":"update.kindUnknown")}function _e(){let e=w(),t=(0,f.useRef)(!1),i=(0,f.useRef)(new Set),[d,p]=(0,f.useState)(null),[v,c]=(0,f.useState)(!1),[k,T]=(0,f.useState)(null),[A,h]=(0,f.useState)(!0),[V,P]=(0,f.useState)(!1),[Z,I]=(0,f.useState)(null),[Q,r]=(0,f.useState)(null),[m,C]=(0,f.useState)(null),[D,z]=(0,f.useState)(null),[ie,W]=(0,f.useState)(null),[J,M]=(0,f.useState)(null),[K,ne]=(0,f.useState)(!1),[X,Y]=(0,f.useState)(!0),[ce,ae]=(0,f.useState)(!1),[se,de]=(0,f.useState)(""),[ue,y]=(0,f.useState)(!1),[U,O]=(0,f.useState)(null),a=(0,f.useCallback)(()=>{for(let u of i.current)window.clearTimeout(u);i.current.clear()},[]),o=(0,f.useCallback)((u,b)=>{let S=window.setTimeout(()=>{i.current.delete(S),u()},b);return i.current.add(S),S},[]),l=(0,f.useCallback)(async()=>{try{let u=await fetch("/api/update/status"),b=await u.json().catch(()=>({}));if(!t.current)return;if(!u.ok){z(null),W(b?.error??`HTTP ${u.status}`);return}z(b),W(null)}catch(u){if(!t.current)return;z(null),W(u instanceof Error?u.message:String(u))}},[]),g=(0,f.useCallback)(async()=>{try{let u=await fetch("/api/settings"),b=await u.json().catch(()=>({}));if(!t.current)return;if(!u.ok){p(null),T(b?.error??`HTTP ${u.status}`),c(!0);return}p(he(b.settings)),h(b.authed===!0),P(b.bound===!0),T(null),c(!0)}catch(u){if(!t.current)return;p(null),T(u instanceof Error?u.message:String(u)),c(!0)}},[]);(0,f.useEffect)(()=>(t.current=!0,g(),()=>{t.current=!1,a()}),[a,g]),(0,f.useEffect)(()=>{v&&(y(!1),O(null),ne(!1),A&&l())},[A,l,v]);async function R(u,b,S){if(!d)return;let x=d;p(S(d)),I(u),r({text:e("settings.saving")});try{let j=await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(b)}),_=await j.json().catch(()=>({}));if(!t.current)return;if(!j.ok||_.ok===!1)throw typeof _?.feishuLoginQr=="string"&&_.feishuLoginQr&&C(_.feishuLoginQr),new Error(_?.error??`HTTP ${j.status}`);C(null);let ee=he(_.settings);p(ee),pe.publicReadOnly=ee.publicReadOnly,fe.setScheduleTimeZone(ee.effectiveScheduleTimeZone);let le=Ue(_.herdrTraexInstall,e);r(le??{text:e("settings.saved"),cls:"hint-ok"})}catch(j){if(!t.current)return;let _=!1;try{let le=await fetch("/api/settings"),ye=await le.json().catch(()=>({}));if(t.current&&le.ok&&ye?.settings){let ge=he(ye.settings);p(ge),pe.publicReadOnly=ge.publicReadOnly,fe.setScheduleTimeZone(ge.effectiveScheduleTimeZone),_=!0}}catch{}if(!t.current)return;_||p(x);let ee=j instanceof Error?j.message:String(j);r({text:_?`${e("settings.saveReconciled")}: ${ee}`:`${e("settings.saveFailed")}: ${ee}`,cls:"hint-warn-inline"})}finally{t.current&&I(null)}}async function $(){M(null),Y(!0),ae(!1);try{let u=await fetch("/api/update/changelog"),b=await u.json().catch(()=>({}));if(!t.current)return;de(typeof b?.releasesUrl=="string"?b.releasesUrl:""),u.ok?(M(Array.isArray(b.releases)?b.releases:[]),Y(b.ok!==!1),ae(b.rateLimited===!0)):(M([]),Y(!1))}catch{if(!t.current)return;M([]),Y(!1)}}function H(){let u=Date.now(),b=async()=>{if(t.current){if(Date.now()-u>9e4){y(!1),O({text:e("update.restartSlow"),cls:"hint-warn-inline"});return}try{let S=await fetch("/__health",{cache:"no-store"});if(!t.current)return;if(S.ok){location.reload();return}}catch{}t.current&&o(()=>{b()},2e3)}};o(()=>{b()},3e3)}async function be(u){y(!0),O({text:e("update.restarting")});try{let b=await fetch("/api/update/restart",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u?{update:u}:{})}),S=await b.json().catch(()=>({}));if(!b.ok||S.ok===!1)throw new Error(String(S.detail??S.error??`HTTP ${b.status}`));if(!t.current)return}catch(b){if(!t.current)return;y(!1),O({text:e("update.restartFailed",{detail:b instanceof Error?b.message:String(b)}),cls:"hint-warn-inline"});return}H()}async function we(){let u=D;if(!u)return;if(!u.node.ok){window.alert(e("update.nodeTooOldAlert",{version:u.node.version,required:u.node.required}));return}if(!u.updateSupported||!u.updateCommand){window.alert(e("update.unsupportedInstall"));return}if(u.installs.multiple){let S=u.installs.entries.map(x=>`\u2022 ${x.binPath} (${Ie(x.kind,e)})`).join(`
2
- `);if(!window.confirm(e("update.confirmMultiInstall",{paths:S})))return}let b=u.latest?e("update.confirmUpdate",{version:`v${u.latest}`,command:u.updateCommand}):e("update.confirmUpdateNoVer",{command:u.updateCommand});if(window.confirm(b)){y(!0),O({text:e("update.updating",{command:u.updateCommand})});try{let S=await fetch("/api/update/run",{method:"POST"}),x=await S.json().catch(()=>({}));if(!t.current)return;if(!S.ok||x.ok===!1){let j=x?.detail??x?.error??`HTTP ${S.status}`;y(!1),O({text:e("update.updateFailed",{detail:j}),cls:"hint-warn-inline"});return}x.changed?(y(!1),O({text:e("update.updatedChanged",{old:`v${x.oldVersion}`,new:`v${x.newVersion}`}),cls:"hint-ok"}),window.confirm(e("update.confirmRestart"))?await be({oldVersion:x.oldVersion,newVersion:x.newVersion}):t.current&&O({text:e("update.noRestartHint"),cls:"hint-ok"})):(y(!1),O({text:e("update.alreadyLatestRun",{version:`v${x.newVersion}`}),cls:"hint-ok"}),await l())}catch(S){if(!t.current)return;y(!1),O({text:e("update.updateFailed",{detail:S instanceof Error?S.message:String(S)}),cls:"hint-warn-inline"})}}}let xe=d?(0,n.jsx)($e,{settings:d,canWrite:A,bound:V,savingKey:Z,message:Q,updateBlock:(0,n.jsx)(We,{canWrite:A,status:D,statusError:ie,changelog:J,changelogOpen:K,changelogOk:X,changelogRateLimited:ce,releasesUrl:se,busy:ue,message:U,onCheck:()=>{z(null),M(null),ne(!1),O(null),W(null),l()},onToggleChangelog:()=>{let u=!K;ne(u),u&&J===null&&$()},onUpdate:()=>{we()},onRestart:()=>{window.confirm(e("update.confirmPlainRestart"))&&be(null)}}),feishuLoginQr:m,onCloseFeishuLoginQr:()=>C(null),onSave:R}):k?(0,n.jsxs)("p",{className:"hint-warn",children:[e("settings.loadFailed"),": ",k]}):(0,n.jsx)(re,{label:e("settings.loading")});return(0,n.jsxs)("section",{className:"page settings-page",children:[(0,n.jsx)("div",{className:"page-heading",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.settings")}),(0,n.jsx)("h1",{children:e("settings.title")})]})}),xe]})}function $e(e){let t=w(),{settings:i,canWrite:d,bound:p,savingKey:v}=e,c=!d,k=Ee(i.maintenance,"autoUpdate"),T=!d||i.localDevInstall||!i.autoUpdateSupported,A=!d||i.maintenance.autoUpdate?.enabled!==!0,h=(r,m)=>{e.onSave(r,{[r]:m},C=>({...C,[r]:m}))},V=r=>e.onSave("herdrTraexPlugin",{herdrTraexPlugin:r},m=>({...m,herdrTraexPlugin:{...m.herdrTraexPlugin,...r}})),P=r=>e.onSave("codexNotifier",{codexNotifier:r},m=>({...m,codexNotifier:{...m.codexNotifier,...r}})),Z=(0,f.useMemo)(()=>[{value:"all",label:t("settings.repoPickerModeAll")},{value:"repos",label:t("settings.repoPickerModeRepos")}],[t]),I=(0,f.useMemo)(()=>[{value:"attach",label:t("settings.localCliOpenModeAttach")},{value:"resume",label:t("settings.localCliOpenModeResume")}],[t]),Q=(0,f.useMemo)(()=>[{value:"",label:t("settings.vcMeetingListenerBotAuto")},...i.vcMeetingAgent.listenerBotOptions.map(r=>{let m=r.botName||r.larkAppId,C=r.cliId?` \xB7 ${r.cliId}`:"",D=[r.vcMeetingAgentEnabled===!0?void 0:t("settings.vcMeetingListenerBotDisabled"),r.hasLarkCliProfile===!0?void 0:t("settings.vcMeetingListenerBotNoProfile")].filter(Boolean),z=D.length>0?` \xB7 ${D.join(" \xB7 ")}`:"";return{value:r.larkAppId,label:`${m}${C}${z}`}})],[i.vcMeetingAgent.listenerBotOptions,t]);return(0,n.jsxs)("div",{className:"settings-layout",children:[d?null:(0,n.jsx)("article",{className:"bd-card settings-card settings-alert-card",children:(0,n.jsx)("p",{className:"hint-warn",children:t("settings.readOnlyVisitor")})}),(0,n.jsxs)(Me,{className:"settings-group-main",children:[(0,n.jsxs)(q,{title:t("settings.sectionAccess"),children:[(0,n.jsx)(E,{title:t("settings.publicReadOnly"),help:t("settings.publicReadOnlyHelp"),checked:i.publicReadOnly,disabled:c||v==="publicReadOnly",onChange:r=>h("publicReadOnly",r)}),p?(0,n.jsx)(E,{title:t("settings.remoteAccess"),help:t("settings.remoteAccessHelp"),checked:i.remoteAccess,disabled:c||v==="remoteAccess",onChange:r=>h("remoteAccess",r)}):null]}),(0,n.jsxs)(q,{title:t("settings.sectionCards"),children:[(0,n.jsx)(E,{title:t("settings.openTerminalInFeishu"),help:t("settings.openTerminalInFeishuHelp"),checked:i.openTerminalInFeishu,disabled:c||v==="openTerminalInFeishu",onChange:r=>h("openTerminalInFeishu",r)}),(0,n.jsx)(E,{title:t("settings.enableLocalCliOpen"),help:t("settings.enableLocalCliOpenHelp"),checked:i.enableLocalCliOpen,disabled:c||v==="enableLocalCliOpen",onChange:r=>h("enableLocalCliOpen",r)}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.localCliOpenModeHelp"),children:t("settings.localCliOpenMode")}),(0,n.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.localCliOpenMode"),disabled:c||!i.enableLocalCliOpen||v==="localCliOpenMode",value:i.localCliOpenMode,label:F(I,i.localCliOpenMode),options:I,onChange:r=>{e.onSave("localCliOpenMode",{localCliOpenMode:r},m=>({...m,localCliOpenMode:r}))}})]})]}),(0,n.jsxs)(q,{title:t("settings.sectionExperimental"),children:[(0,n.jsx)(E,{title:t("settings.chatBotDiscovery"),help:t("settings.chatBotDiscoveryHelp"),checked:i.chatBotDiscovery,disabled:c||v==="chatBotDiscovery",onChange:r=>h("chatBotDiscovery",r)}),(0,n.jsx)(E,{title:t("settings.herdrTraexPlugin"),help:t("settings.herdrTraexPluginHelp"),checked:i.herdrTraexPlugin.enabled,disabled:c||v==="herdrTraexPlugin",onChange:r=>V({enabled:r})}),i.herdrTraexPlugin.enabled?(0,n.jsx)(Ze,{value:i.herdrTraexPlugin,disabled:c||v==="herdrTraexPlugin",onSave:r=>V(r)}):null,(0,n.jsx)(E,{title:t("settings.codexRpcInput"),help:t("settings.codexRpcInputHelp"),checked:i.codexRpcInput,disabled:c||v==="codexRpcInput",onChange:r=>h("codexRpcInput",r)}),(0,n.jsx)(Fe,{value:i.codexNotifier,disabled:c,saving:v==="codexNotifier",onSave:P})]}),(0,n.jsx)(q,{title:t("settings.sectionWhiteboard"),children:(0,n.jsx)(E,{title:t("settings.whiteboardEnable"),help:t("settings.whiteboardEnableHelp"),checked:i.whiteboard.enabled,disabled:c||v==="whiteboard",onChange:r=>{e.onSave("whiteboard",{whiteboard:{enabled:r}},m=>({...m,whiteboard:{enabled:r}}))}})}),(0,n.jsx)(q,{title:t("settings.sectionRepoPicker"),children:(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.repoPickerModeHelp"),children:t("settings.repoPickerMode")}),(0,n.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.repoPickerMode"),disabled:c||v==="repoPickerMode",value:i.repoPickerMode,label:F(Z,i.repoPickerMode),options:Z,onChange:r=>{e.onSave("repoPickerMode",{repoPickerMode:r},m=>({...m,repoPickerMode:r}))}})]})}),(0,n.jsx)(q,{title:t("settings.sectionSchedule"),children:(0,n.jsx)(Ve,{value:i.scheduleTimeZone,host:i.hostTimeZone,effective:i.effectiveScheduleTimeZone,disabled:c||v==="scheduleTimeZone",onSave:r=>{e.onSave("scheduleTimeZone",{scheduleTimeZone:r},m=>({...m,scheduleTimeZone:r??""}))}})}),(0,n.jsxs)(q,{className:"settings-vc-block",title:t("settings.sectionVcMeetingAgent"),children:[(0,n.jsx)(E,{title:t("settings.vcMeetingAgent"),help:t("settings.vcMeetingAgentHelp"),checked:i.vcMeetingAgent.enabled,disabled:c||v==="vcMeetingAgent",onChange:r=>{e.onSave("vcMeetingAgent",{vcMeetingAgent:{enabled:r}},m=>({...m,vcMeetingAgent:{...m.vcMeetingAgent,enabled:r}}))}}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.vcMeetingListenerBotHelp"),children:t("settings.vcMeetingListenerBot")}),(0,n.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.vcMeetingListenerBot"),disabled:c||v==="vcMeetingAgent",value:i.vcMeetingAgent.listenerBotAppId??"",label:F(Q,i.vcMeetingAgent.listenerBotAppId??""),options:Q,onChange:r=>{let m=r||null;e.onSave("vcMeetingAgent",{vcMeetingAgent:{listenerBotAppId:m}},C=>({...C,vcMeetingAgent:{...C.vcMeetingAgent,listenerBotAppId:m}}))}})]}),(0,n.jsx)(He,{settings:i.vcMeetingAgent}),(0,n.jsx)(Ae,{enabled:i.vcMeetingAgent.enabled,canWrite:d,listenerBotAppId:i.vcMeetingAgent.listenerBotAppId,listenerBotOptions:i.vcMeetingAgent.listenerBotOptions}),e.feishuLoginQr?(0,n.jsxs)("div",{className:"settings-feishu-login",children:[(0,n.jsx)("button",{type:"button",className:"settings-feishu-login-close","aria-label":t("settings.feishuLoginClose"),title:t("settings.feishuLoginClose"),onClick:e.onCloseFeishuLoginQr}),(0,n.jsx)("p",{children:t("settings.feishuLoginRequired")}),(0,n.jsx)("img",{src:e.feishuLoginQr,alt:t("settings.feishuLoginQrAlt")})]}):null]})]}),(0,n.jsxs)(Me,{className:"settings-group-ops",children:[(0,n.jsx)(q,{title:t("settings.sectionMaintenance"),titleExtra:i.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:t("settings.autoUpdateLocalDev")}):i.autoUpdateSupported?null:(0,n.jsx)("span",{className:"settings-title-note",children:t("settings.autoUpdateUnsupportedInstall")}),children:(0,n.jsxs)("div",{className:"settings-maintenance-grid",children:[(0,n.jsxs)("div",{className:"settings-maintenance-update",children:[(0,n.jsx)(E,{title:t("settings.autoUpdate"),help:t("settings.autoUpdateHelp"),checked:k.enabled,disabled:T||v==="autoUpdate",onChange:r=>{let m={enabled:r,time:k.time};e.onSave("autoUpdate",{maintenance:{autoUpdate:m}},C=>({...C,maintenance:{...C.maintenance,autoUpdate:m}}))}}),(0,n.jsx)("div",{className:"maint-time",children:(0,n.jsxs)("label",{children:[(0,n.jsx)("span",{children:t("settings.maintenanceTime")}),(0,n.jsx)("input",{type:"time",value:k.time,disabled:T||v==="autoUpdate",onChange:r=>{let m={enabled:k.enabled,time:r.currentTarget.value||"04:00"};e.onSave("autoUpdate",{maintenance:{autoUpdate:m}},C=>({...C,maintenance:{...C.maintenance,autoUpdate:m}}))}})]})})]}),(0,n.jsx)("div",{className:"settings-maintenance-restart",children:(0,n.jsx)(E,{title:t("settings.autoRestart"),help:t("settings.autoRestartHelp"),checked:i.maintenance.autoRestart?.enabled===!0,disabled:A||v==="autoRestart",onChange:r=>{let m={enabled:r};e.onSave("autoRestart",{maintenance:{autoRestart:m}},C=>({...C,maintenance:{...C.maintenance,autoRestart:m}}))}})})]})}),e.updateBlock]}),(0,n.jsx)("div",{className:"settings-status-row",children:(0,n.jsx)("span",{className:`oncall-status ${e.message?.cls??""}`,"data-settings-status":!0,children:e.message?.text??""})})]})}function He(e){let t=w(),i=e.settings.larkCliVersion,d=typeof i=="string"&&e.settings.larkCliMeetsRequirement===!0,p=d?t("settings.larkCliReady",{version:i}):typeof i=="string"?t("settings.larkCliOutdated",{version:i,minimum:e.settings.larkCliMinVersion??"-"}):t("settings.larkCliMissing");return(0,n.jsxs)("div",{className:`settings-lark-cli-status ${d?"is-ready":"is-warning"}`,children:[(0,n.jsx)("span",{"aria-hidden":"true"}),(0,n.jsx)("strong",{children:p}),d?null:(0,n.jsx)("code",{children:"npm i -g @larksuite/cli@latest"})]})}function Me(e){let t=["settings-group",e.className].filter(Boolean).join(" ");return(0,n.jsx)("section",{className:t,children:(0,n.jsx)("article",{className:"bd-card settings-group-card",children:e.children})})}function q(e){let t=["settings-block",e.className].filter(Boolean).join(" ");return(0,n.jsx)("section",{className:t,children:(0,n.jsxs)("article",{className:"bd-card settings-card",children:[(0,n.jsxs)("div",{className:"settings-block-title-row",children:[(0,n.jsx)("h2",{className:"bd-section-title",children:e.title}),e.titleExtra?(0,n.jsx)("div",{className:"settings-block-title-extra",children:e.titleExtra}):null]}),e.children]})})}function Fe(e){let t=w(),[i,d]=(0,f.useState)(!1),p=(0,f.useRef)(!1),v=(0,f.useMemo)(()=>[{value:"",label:t("settings.codexNotifierTargetPlaceholder")},...e.value.botOptions.map(P=>({value:P.larkAppId,label:[P.botName||P.larkAppId,P.cliId].filter(Boolean).join(" \xB7 ")}))],[e.value.botOptions,t]),c=(0,f.useMemo)(()=>[{value:"locked_only",label:t("settings.codexNotifierLockedOnly")},{value:"always",label:t("settings.codexNotifierAlways")}],[t]),k=e.value.botOptions.find(P=>P.larkAppId===e.value.targetBotAppId),T=!e.value.targetBotAppId||k?.recipientConfigured!==!0||k?.recipientVerified!==!0||!e.value.targetDaemonOnline||!e.value.platformSupported&&e.value.notifyWhen==="locked_only",A=e.value.enabled||i,h=e.disabled||e.saving;(0,f.useEffect)(()=>{if(!i||e.value.enabled||T){p.current=!1;return}h||p.current||(p.current=!0,e.onSave({enabled:!0}))},[h,T,i,e.onSave,e.value.enabled]),(0,f.useEffect)(()=>{e.value.enabled&&i&&d(!1)},[i,e.value.enabled]);let V=P=>{if(!P){p.current=!1,d(!1),e.value.enabled&&e.onSave({enabled:!1});return}if(T){d(!0);return}e.onSave({enabled:!0})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(E,{title:t("settings.codexNotifier"),help:t("settings.codexNotifierHelp"),checked:e.value.enabled||i,disabled:h,onChange:V}),A?(0,n.jsxs)("div",{className:"settings-codex-notifier-details",children:[e.value.enabled?null:(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.codexNotifierEnablePending")}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.codexNotifierTargetHelp"),children:t("settings.codexNotifierTarget")}),(0,n.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierTarget"),disabled:h,searchable:!0,value:e.value.targetBotAppId??"",label:F(v,e.value.targetBotAppId??""),options:v,onChange:P=>{e.onSave({targetBotAppId:P||null})}})]}),k?.recipientHint?(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.codexNotifierRecipient",{recipient:k.recipientHint})}):null,(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.codexNotifierNotifyWhenHelp"),children:t("settings.codexNotifierNotifyWhen")}),(0,n.jsx)(L,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierNotifyWhen"),disabled:h,value:e.value.notifyWhen,label:F(c,e.value.notifyWhen),options:c,onChange:P=>{e.onSave({notifyWhen:P})}})]}),e.value.targetBotAppId?k?.recipientConfigured!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierRecipientMissing")}):e.value.targetDaemonOnline?k?.recipientVerified!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierRecipientUnverified")}):!e.value.platformSupported&&e.value.notifyWhen==="locked_only"?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierUnsupported")}):e.value.enabled?e.value.hookInstalled?e.value.workerOnline?e.value.lastError?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierLastError",{error:e.value.lastError.message})}):e.value.pendingCount>0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierPending",{count:e.value.pendingCount})}):null:(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierWorkerPending")}):(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierHookPending")}):null:(0,n.jsx)("p",{className:"hint-warn-inline",children:t(e.value.enabled?"settings.codexNotifierDaemonOffline":"settings.codexNotifierTargetOffline")}):(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierTargetRequired")})]}):null]})}function Ve(e){let t=w(),i=e.value.trim(),d=e.effective||e.value.trim()||e.host,p=(0,f.useMemo)(()=>{let v=i&&!ve.includes(i)?[i,...ve]:ve;return[{value:"",label:t("settings.scheduleTimeZoneHost",{host:e.host})},...v.map(c=>({value:c,label:c}))]},[e.host,t,i]);return(0,n.jsxs)("div",{className:"settings-field-row settings-timezone-row",children:[(0,n.jsx)(B,{help:t("settings.scheduleTimeZoneHelp",{host:e.host,effective:d}),children:t("settings.scheduleTimeZone")}),(0,n.jsx)(L,{className:"settings-field-menu settings-timezone-menu",ariaLabel:t("settings.scheduleTimeZone"),value:i,label:F(p,i),options:p,disabled:e.disabled,onChange:v=>e.onSave(v===""?null:v)})]})}function E(e){return(0,n.jsxs)("label",{className:"toggle-row",children:[(0,n.jsx)("input",{type:"checkbox",checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)}),(0,n.jsx)("span",{className:"switch","aria-hidden":"true"}),(0,n.jsx)("span",{className:"toggle-tx",children:(0,n.jsx)("strong",{children:(0,n.jsx)(B,{className:"settings-toggle-title",help:e.help,children:e.title})})})]})}function Ze(e){let t=w(),[i,d]=(0,f.useState)(e.value.source),[p,v]=(0,f.useState)(e.value.ref);(0,f.useEffect)(()=>{d(e.value.source),v(e.value.ref)},[e.value.source,e.value.ref]);let c=i.trim(),k=p.trim(),T=c!==e.value.source.trim()||k!==e.value.ref.trim(),A=()=>{e.disabled||!T||e.onSave({source:c,ref:k})};return(0,n.jsxs)("div",{className:"settings-subfield",children:[(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.herdrTraexPluginSourceHelp"),children:t("settings.herdrTraexPluginSource")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:i,placeholder:t("settings.herdrTraexPluginSourcePlaceholder"),disabled:e.disabled,onChange:h=>d(h.currentTarget.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),A())}})]}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(B,{help:t("settings.herdrTraexPluginRefHelp"),children:t("settings.herdrTraexPluginRef")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:p,placeholder:t("settings.herdrTraexPluginRefPlaceholder"),disabled:e.disabled,onChange:h=>v(h.currentTarget.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),A())}})]}),c?null:(0,n.jsx)("p",{className:"hint-warn-inline settings-subfield-hint",children:t("settings.herdrTraexPluginSourceRequired")}),e.value.recommendedSource&&(c!==e.value.recommendedSource||k!==e.value.recommendedRef)?(0,n.jsxs)("p",{className:"settings-subfield-hint",children:[t("settings.herdrTraexPluginRecommended")," ",(0,n.jsxs)("button",{type:"button",className:"settings-inline-link",disabled:e.disabled,onClick:()=>{d(e.value.recommendedSource),v(e.value.recommendedRef)},children:[e.value.recommendedSource,e.value.recommendedRef?` @ ${e.value.recommendedRef}`:""]})]}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",className:"page-primary-action",disabled:e.disabled||!T,onClick:A,children:t("settings.herdrTraexPluginSave")})})]})}function We(e){let t=w(),i;if(!e.canWrite)i=(0,n.jsx)("p",{className:"hint-warn",children:t("update.loginRequired")});else if(e.statusError)i=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"hint-warn",children:[t("update.checkFailed"),": ",e.statusError]}),(0,n.jsx)("div",{className:"update-actions",children:(0,n.jsx)("button",{type:"button","data-up":"check",onClick:e.onCheck,children:t("update.btnCheck")})})]});else if(!e.status)i=(0,n.jsx)(re,{label:t("update.loading"),compact:!0});else{let d=e.status,p=d.localDevInstall||!d.updateSupported||e.busy;i=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"update-version",children:[(0,n.jsxs)("span",{children:[t("update.current"),": ",(0,n.jsxs)("strong",{children:["v",d.current]})]})," ",(0,n.jsx)(je,{status:d})]}),d.node.ok?null:(0,n.jsx)("p",{className:"hint-warn",children:t("update.nodeWarn",{version:d.node.version,required:d.node.required})}),!d.localDevInstall&&!d.updateSupported?(0,n.jsx)("p",{className:"hint-warn",children:t("update.unsupportedInstall")}):null,d.installs.multiple?(0,n.jsx)(qe,{entries:d.installs.entries}):null,(0,n.jsxs)("div",{className:"update-actions",children:[(0,n.jsx)("button",{type:"button","data-up":"check",disabled:e.busy,onClick:e.onCheck,children:t("update.btnCheck")}),(0,n.jsx)("button",{type:"button","data-up":"changelog",disabled:e.busy,onClick:e.onToggleChangelog,children:e.changelogOpen?t("update.btnChangelogHide"):t("update.btnChangelog")}),(0,n.jsx)("button",{type:"button",className:"page-primary-action","data-up":"update",disabled:p,onClick:e.onUpdate,children:t("update.btnUpdate")}),(0,n.jsx)("button",{type:"button","data-up":"restart",disabled:e.busy,onClick:e.onRestart,children:t("update.btnRestart")})]}),d.cliUpdates?.length?(0,n.jsx)(Ke,{entries:d.cliUpdates}):null,e.changelogOpen?(0,n.jsx)(ze,{changelog:e.changelog,ok:e.changelogOk,rateLimited:e.changelogRateLimited,releasesUrl:e.releasesUrl}):null,e.message?(0,n.jsx)("p",{className:`oncall-status ${e.message.cls??""}`,children:e.message.text}):null]})}return(0,n.jsx)(q,{className:"settings-update-block",title:t("update.section"),titleExtra:e.status?.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:t("update.localDev")}):e.status&&!e.status.updateSupported?(0,n.jsx)("span",{className:"settings-title-note",children:t("update.unsupportedInstall")}):null,children:i})}function Ke(e){let t=w();return(0,n.jsxs)("div",{className:"cli-runtime-updates",children:[(0,n.jsx)("strong",{children:t("update.runtimeTitle")}),(0,n.jsx)("ul",{children:e.entries.map(i=>(0,n.jsxs)("li",{className:i.updateAvailable?"is-behind":"",children:[(0,n.jsxs)("div",{className:"cli-runtime-update-head",children:[(0,n.jsx)("span",{children:"Codex"}),i.updateAvailable&&i.latest?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.runtimeAvailable",{current:i.current??"?",latest:i.latest})}):i.latest?(0,n.jsx)("span",{className:"update-badge update-badge-ok",children:t("update.upToDate")}):(0,n.jsx)("span",{className:"hint-warn-inline",children:t("update.checkUnavailable")})]}),(0,n.jsx)("code",{children:i.binPath}),i.updateAvailable?(0,n.jsxs)("small",{children:[t("update.runtimeCommand"),": ",(0,n.jsx)("code",{children:i.updateCommand})]}):null]},`${i.cliId}:${i.binPath}`))}),(0,n.jsx)("p",{className:"settings-help",children:t("update.runtimeHelp")})]})}function je(e){let t=w(),i=e.status;return i.latest?i.behind?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.newAvailable",{version:`v${i.latest}`})}):(0,n.jsx)("span",{className:"update-badge update-badge-ok",children:t("update.upToDate")}):(0,n.jsx)("span",{className:"hint-warn-inline",children:t("update.checkUnavailable")})}function qe(e){let t=w();return(0,n.jsxs)("div",{className:"hint-warn",children:[(0,n.jsx)("p",{children:t("update.multiInstallWarn")}),(0,n.jsx)("ul",{className:"update-install-list",children:e.entries.map(i=>(0,n.jsxs)("li",{children:[(0,n.jsx)("code",{children:i.binPath})," \u2192 ",Ie(i.kind,t)," ",(0,n.jsx)("small",{children:i.root})]},`${i.binPath}:${i.root}`))})]})}function ze(e){let t=w();if(e.changelog===null)return(0,n.jsx)(re,{label:t("update.changelogLoading"),compact:!0});if(!e.ok){let i=e.rateLimited?t("update.changelogRateLimited"):t("update.changelogFailed");return(0,n.jsxs)("p",{className:"hint-warn-inline",children:[i,e.releasesUrl?(0,n.jsxs)(n.Fragment,{children:[" ",(0,n.jsx)("a",{href:e.releasesUrl,target:"_blank",rel:"noopener",children:t("update.changelogViewOnGitHub")})]}):null]})}return e.changelog.length===0?(0,n.jsx)("p",{className:"empty",children:t("update.changelogEmpty")}):(0,n.jsx)("div",{className:"update-changelog",children:e.changelog.map(i=>{let d=i.name&&i.name!==`v${i.version}`?i.name:"",p=i.publishedAt?new Date(i.publishedAt).toLocaleDateString():"";return(0,n.jsxs)("details",{className:"update-release",open:!0,children:[(0,n.jsxs)("summary",{children:[(0,n.jsxs)("strong",{children:["v",i.version]})," ",d," ",(0,n.jsx)("small",{children:p})," ",(0,n.jsx)("a",{href:i.url,target:"_blank",rel:"noopener",children:"\u2197"})]}),(0,n.jsx)("pre",{className:"update-release-body",children:i.body||""})]},i.version)})})}function st(e){return ke(e,(0,n.jsx)(_e,{}))}export{Fe as CodexNotifierSettingsEditor,Ve as TimeZoneRow,st as renderSettingsPage};