botmux 2.107.0 → 2.108.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 (515) hide show
  1. package/README.en.md +17 -14
  2. package/README.md +19 -14
  3. package/dist/adapters/backend/sandbox.d.ts +3 -1
  4. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  5. package/dist/adapters/backend/sandbox.js +19 -3
  6. package/dist/adapters/backend/sandbox.js.map +1 -1
  7. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/tmux-backend.js +16 -1
  9. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  10. package/dist/adapters/backend/tmux-pipe-backend.d.ts +24 -15
  11. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-pipe-backend.js +75 -43
  13. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  14. package/dist/adapters/cli/genius.d.ts.map +1 -1
  15. package/dist/adapters/cli/genius.js +9 -15
  16. package/dist/adapters/cli/genius.js.map +1 -1
  17. package/dist/adapters/cli/grok.d.ts +73 -0
  18. package/dist/adapters/cli/grok.d.ts.map +1 -0
  19. package/dist/adapters/cli/grok.js +298 -0
  20. package/dist/adapters/cli/grok.js.map +1 -0
  21. package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
  22. package/dist/adapters/cli/oh-my-pi.js +133 -12
  23. package/dist/adapters/cli/oh-my-pi.js.map +1 -1
  24. package/dist/adapters/cli/registry.d.ts +2 -1
  25. package/dist/adapters/cli/registry.d.ts.map +1 -1
  26. package/dist/adapters/cli/registry.js +3 -1
  27. package/dist/adapters/cli/registry.js.map +1 -1
  28. package/dist/adapters/cli/shared-hints.d.ts +8 -4
  29. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  30. package/dist/adapters/cli/shared-hints.js +8 -4
  31. package/dist/adapters/cli/shared-hints.js.map +1 -1
  32. package/dist/adapters/cli/types.d.ts +18 -16
  33. package/dist/adapters/cli/types.d.ts.map +1 -1
  34. package/dist/adapters/hook-installer.d.ts +5 -4
  35. package/dist/adapters/hook-installer.d.ts.map +1 -1
  36. package/dist/adapters/hook-installer.js +42 -0
  37. package/dist/adapters/hook-installer.js.map +1 -1
  38. package/dist/cli/send-dispatch.d.ts +21 -0
  39. package/dist/cli/send-dispatch.d.ts.map +1 -1
  40. package/dist/cli/send-dispatch.js +159 -0
  41. package/dist/cli/send-dispatch.js.map +1 -1
  42. package/dist/cli/session-list-liveness.d.ts +22 -0
  43. package/dist/cli/session-list-liveness.d.ts.map +1 -0
  44. package/dist/cli/session-list-liveness.js +22 -0
  45. package/dist/cli/session-list-liveness.js.map +1 -0
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +182 -33
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/ask-types.d.ts +4 -0
  50. package/dist/core/ask-types.d.ts.map +1 -1
  51. package/dist/core/ask-types.js +10 -0
  52. package/dist/core/ask-types.js.map +1 -1
  53. package/dist/core/cost-calculator.d.ts.map +1 -1
  54. package/dist/core/cost-calculator.js +35 -13
  55. package/dist/core/cost-calculator.js.map +1 -1
  56. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  57. package/dist/core/dashboard-ipc-server.js +89 -16
  58. package/dist/core/dashboard-ipc-server.js.map +1 -1
  59. package/dist/core/dashboard-rows.d.ts.map +1 -1
  60. package/dist/core/dashboard-rows.js +6 -2
  61. package/dist/core/dashboard-rows.js.map +1 -1
  62. package/dist/core/dashboard-url.d.ts +6 -5
  63. package/dist/core/dashboard-url.d.ts.map +1 -1
  64. package/dist/core/dashboard-url.js +11 -8
  65. package/dist/core/dashboard-url.js.map +1 -1
  66. package/dist/core/maintenance.d.ts +11 -8
  67. package/dist/core/maintenance.d.ts.map +1 -1
  68. package/dist/core/maintenance.js +45 -20
  69. package/dist/core/maintenance.js.map +1 -1
  70. package/dist/core/per-bot-env.d.ts.map +1 -1
  71. package/dist/core/per-bot-env.js +4 -0
  72. package/dist/core/per-bot-env.js.map +1 -1
  73. package/dist/core/session-discovery.d.ts.map +1 -1
  74. package/dist/core/session-discovery.js +4 -0
  75. package/dist/core/session-discovery.js.map +1 -1
  76. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  77. package/dist/core/skills/cli-admin-command.js +8 -2
  78. package/dist/core/skills/cli-admin-command.js.map +1 -1
  79. package/dist/core/skills/im-command.d.ts.map +1 -1
  80. package/dist/core/skills/im-command.js +3 -1
  81. package/dist/core/skills/im-command.js.map +1 -1
  82. package/dist/core/skills/sources.d.ts +33 -1
  83. package/dist/core/skills/sources.d.ts.map +1 -1
  84. package/dist/core/skills/sources.js +97 -0
  85. package/dist/core/skills/sources.js.map +1 -1
  86. package/dist/core/skills/types.d.ts +8 -0
  87. package/dist/core/skills/types.d.ts.map +1 -1
  88. package/dist/core/terminal-url.d.ts.map +1 -1
  89. package/dist/core/terminal-url.js +12 -2
  90. package/dist/core/terminal-url.js.map +1 -1
  91. package/dist/core/terminal-write-auth.d.ts +34 -0
  92. package/dist/core/terminal-write-auth.d.ts.map +1 -0
  93. package/dist/core/terminal-write-auth.js +76 -0
  94. package/dist/core/terminal-write-auth.js.map +1 -0
  95. package/dist/core/tmux-recovery.d.ts +11 -0
  96. package/dist/core/tmux-recovery.d.ts.map +1 -0
  97. package/dist/core/tmux-recovery.js +19 -0
  98. package/dist/core/tmux-recovery.js.map +1 -0
  99. package/dist/core/types.d.ts +10 -4
  100. package/dist/core/types.d.ts.map +1 -1
  101. package/dist/core/types.js.map +1 -1
  102. package/dist/core/update-check.d.ts +2 -2
  103. package/dist/core/update-check.js +2 -2
  104. package/dist/core/worker-pool.d.ts +3 -0
  105. package/dist/core/worker-pool.d.ts.map +1 -1
  106. package/dist/core/worker-pool.js +70 -3
  107. package/dist/core/worker-pool.js.map +1 -1
  108. package/dist/daemon.d.ts.map +1 -1
  109. package/dist/daemon.js +15 -8
  110. package/dist/daemon.js.map +1 -1
  111. package/dist/dashboard/auth.d.ts +1 -1
  112. package/dist/dashboard/auth.d.ts.map +1 -1
  113. package/dist/dashboard/auth.js +7 -2
  114. package/dist/dashboard/auth.js.map +1 -1
  115. package/dist/dashboard/bot-payload.d.ts +3 -0
  116. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  117. package/dist/dashboard/bot-payload.js +3 -0
  118. package/dist/dashboard/bot-payload.js.map +1 -1
  119. package/dist/dashboard/connector-api.d.ts.map +1 -1
  120. package/dist/dashboard/connector-api.js +39 -13
  121. package/dist/dashboard/connector-api.js.map +1 -1
  122. package/dist/dashboard/history-senders.d.ts +37 -0
  123. package/dist/dashboard/history-senders.d.ts.map +1 -0
  124. package/dist/dashboard/history-senders.js +60 -0
  125. package/dist/dashboard/history-senders.js.map +1 -0
  126. package/dist/dashboard/roles-batch.d.ts +31 -0
  127. package/dist/dashboard/roles-batch.d.ts.map +1 -0
  128. package/dist/dashboard/roles-batch.js +87 -0
  129. package/dist/dashboard/roles-batch.js.map +1 -0
  130. package/dist/dashboard/settings-card-model.d.ts +4 -2
  131. package/dist/dashboard/settings-card-model.d.ts.map +1 -1
  132. package/dist/dashboard/settings-card-model.js +13 -5
  133. package/dist/dashboard/settings-card-model.js.map +1 -1
  134. package/dist/dashboard/settings-write-applier.d.ts +4 -1
  135. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  136. package/dist/dashboard/settings-write-applier.js +6 -1
  137. package/dist/dashboard/settings-write-applier.js.map +1 -1
  138. package/dist/dashboard/skill-install-request.d.ts +4 -0
  139. package/dist/dashboard/skill-install-request.d.ts.map +1 -1
  140. package/dist/dashboard/skill-install-request.js +11 -1
  141. package/dist/dashboard/skill-install-request.js.map +1 -1
  142. package/dist/dashboard/trigger-api.d.ts +9 -1
  143. package/dist/dashboard/trigger-api.d.ts.map +1 -1
  144. package/dist/dashboard/trigger-api.js +48 -10
  145. package/dist/dashboard/trigger-api.js.map +1 -1
  146. package/dist/dashboard/web/app.d.ts.map +1 -1
  147. package/dist/dashboard/web/app.js +286 -271
  148. package/dist/dashboard/web/app.js.map +1 -1
  149. package/dist/dashboard/web/bot-defaults-page.d.ts +26 -0
  150. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  151. package/dist/dashboard/web/bot-defaults-page.js +1408 -12
  152. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  153. package/dist/dashboard/web/bot-defaults.d.ts +91 -4
  154. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  155. package/dist/dashboard/web/bot-defaults.js +43 -2141
  156. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  157. package/dist/dashboard/web/bot-onboarding.d.ts +6 -1
  158. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  159. package/dist/dashboard/web/bot-onboarding.js +261 -306
  160. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  161. package/dist/dashboard/web/connectors-page.d.ts +4 -0
  162. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  163. package/dist/dashboard/web/connectors-page.js +228 -48
  164. package/dist/dashboard/web/connectors-page.js.map +1 -1
  165. package/dist/dashboard/web/dashboard-api.d.ts +9 -0
  166. package/dist/dashboard/web/dashboard-api.d.ts.map +1 -0
  167. package/dist/dashboard/web/dashboard-api.js +18 -0
  168. package/dist/dashboard/web/dashboard-api.js.map +1 -0
  169. package/dist/dashboard/web/dashboard-components.d.ts +92 -0
  170. package/dist/dashboard/web/dashboard-components.d.ts.map +1 -0
  171. package/dist/dashboard/web/dashboard-components.js +250 -0
  172. package/dist/dashboard/web/dashboard-components.js.map +1 -0
  173. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  174. package/dist/dashboard/web/dashboard-routes.js +30 -183
  175. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  176. package/dist/dashboard/web/floating-scrollbars.d.ts +2 -0
  177. package/dist/dashboard/web/floating-scrollbars.d.ts.map +1 -0
  178. package/dist/dashboard/web/floating-scrollbars.js +264 -0
  179. package/dist/dashboard/web/floating-scrollbars.js.map +1 -0
  180. package/dist/dashboard/web/groups-api.d.ts +36 -0
  181. package/dist/dashboard/web/groups-api.d.ts.map +1 -0
  182. package/dist/dashboard/web/groups-api.js +44 -0
  183. package/dist/dashboard/web/groups-api.js.map +1 -0
  184. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  185. package/dist/dashboard/web/groups-page.js +746 -15
  186. package/dist/dashboard/web/groups-page.js.map +1 -1
  187. package/dist/dashboard/web/groups.d.ts +51 -18
  188. package/dist/dashboard/web/groups.d.ts.map +1 -1
  189. package/dist/dashboard/web/groups.js +145 -1096
  190. package/dist/dashboard/web/groups.js.map +1 -1
  191. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  192. package/dist/dashboard/web/i18n.js +545 -255
  193. package/dist/dashboard/web/i18n.js.map +1 -1
  194. package/dist/dashboard/web/insights-page.d.ts.map +1 -1
  195. package/dist/dashboard/web/insights-page.js +1047 -14
  196. package/dist/dashboard/web/insights-page.js.map +1 -1
  197. package/dist/dashboard/web/insights.d.ts +177 -7
  198. package/dist/dashboard/web/insights.d.ts.map +1 -1
  199. package/dist/dashboard/web/insights.js +187 -1926
  200. package/dist/dashboard/web/insights.js.map +1 -1
  201. package/dist/dashboard/web/legacy-workflow-page.d.ts +3 -0
  202. package/dist/dashboard/web/legacy-workflow-page.d.ts.map +1 -0
  203. package/dist/dashboard/web/legacy-workflow-page.js +717 -0
  204. package/dist/dashboard/web/legacy-workflow-page.js.map +1 -0
  205. package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
  206. package/dist/dashboard/web/monitor-room.js +10 -8
  207. package/dist/dashboard/web/monitor-room.js.map +1 -1
  208. package/dist/dashboard/web/monitoring-page.d.ts.map +1 -1
  209. package/dist/dashboard/web/monitoring-page.js +188 -14
  210. package/dist/dashboard/web/monitoring-page.js.map +1 -1
  211. package/dist/dashboard/web/office-page.d.ts.map +1 -1
  212. package/dist/dashboard/web/office-page.js +11 -23
  213. package/dist/dashboard/web/office-page.js.map +1 -1
  214. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  215. package/dist/dashboard/web/overview-page.js +141 -147
  216. package/dist/dashboard/web/overview-page.js.map +1 -1
  217. package/dist/dashboard/web/overview.d.ts +0 -1
  218. package/dist/dashboard/web/overview.d.ts.map +1 -1
  219. package/dist/dashboard/web/overview.js +3 -275
  220. package/dist/dashboard/web/overview.js.map +1 -1
  221. package/dist/dashboard/web/preferences.d.ts +1 -6
  222. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  223. package/dist/dashboard/web/preferences.js +0 -21
  224. package/dist/dashboard/web/preferences.js.map +1 -1
  225. package/dist/dashboard/web/role-batch.d.ts +9 -0
  226. package/dist/dashboard/web/role-batch.d.ts.map +1 -0
  227. package/dist/dashboard/web/role-batch.js +42 -0
  228. package/dist/dashboard/web/role-batch.js.map +1 -0
  229. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  230. package/dist/dashboard/web/roles-page.js +538 -13
  231. package/dist/dashboard/web/roles-page.js.map +1 -1
  232. package/dist/dashboard/web/roles.d.ts +98 -1
  233. package/dist/dashboard/web/roles.d.ts.map +1 -1
  234. package/dist/dashboard/web/roles.js +117 -903
  235. package/dist/dashboard/web/roles.js.map +1 -1
  236. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  237. package/dist/dashboard/web/schedules-page.js +82 -24
  238. package/dist/dashboard/web/schedules-page.js.map +1 -1
  239. package/dist/dashboard/web/sessions-kanban.d.ts +67 -0
  240. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -0
  241. package/dist/dashboard/web/sessions-kanban.js +481 -0
  242. package/dist/dashboard/web/sessions-kanban.js.map +1 -0
  243. package/dist/dashboard/web/sessions-page.d.ts +4 -0
  244. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  245. package/dist/dashboard/web/sessions-page.js +1633 -18
  246. package/dist/dashboard/web/sessions-page.js.map +1 -1
  247. package/dist/dashboard/web/sessions.d.ts +45 -4
  248. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  249. package/dist/dashboard/web/sessions.js +53 -2535
  250. package/dist/dashboard/web/sessions.js.map +1 -1
  251. package/dist/dashboard/web/settings-page.d.ts +0 -2
  252. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  253. package/dist/dashboard/web/settings-page.js +127 -117
  254. package/dist/dashboard/web/settings-page.js.map +1 -1
  255. package/dist/dashboard/web/skills-page.d.ts +10 -1
  256. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  257. package/dist/dashboard/web/skills-page.js +235 -93
  258. package/dist/dashboard/web/skills-page.js.map +1 -1
  259. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
  260. package/dist/dashboard/web/team-federation-page.js +446 -28
  261. package/dist/dashboard/web/team-federation-page.js.map +1 -1
  262. package/dist/dashboard/web/team-federation.d.ts +91 -2
  263. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  264. package/dist/dashboard/web/team-federation.js +87 -474
  265. package/dist/dashboard/web/team-federation.js.map +1 -1
  266. package/dist/dashboard/web/theme-menu.d.ts +1 -0
  267. package/dist/dashboard/web/theme-menu.d.ts.map +1 -1
  268. package/dist/dashboard/web/theme-menu.js +79 -20
  269. package/dist/dashboard/web/theme-menu.js.map +1 -1
  270. package/dist/dashboard/web/ui.d.ts +1 -2
  271. package/dist/dashboard/web/ui.d.ts.map +1 -1
  272. package/dist/dashboard/web/ui.js +8 -20
  273. package/dist/dashboard/web/ui.js.map +1 -1
  274. package/dist/dashboard/web/v3-api.d.ts +16 -0
  275. package/dist/dashboard/web/v3-api.d.ts.map +1 -0
  276. package/dist/dashboard/web/v3-api.js +21 -0
  277. package/dist/dashboard/web/v3-api.js.map +1 -0
  278. package/dist/dashboard/web/v3-components.d.ts +2 -0
  279. package/dist/dashboard/web/v3-components.d.ts.map +1 -0
  280. package/dist/dashboard/web/v3-components.js +290 -0
  281. package/dist/dashboard/web/v3-components.js.map +1 -0
  282. package/dist/dashboard/web/v3-model.d.ts +80 -0
  283. package/dist/dashboard/web/v3-model.d.ts.map +1 -0
  284. package/dist/dashboard/web/v3-model.js +240 -0
  285. package/dist/dashboard/web/v3-model.js.map +1 -0
  286. package/dist/dashboard/web/v3-page.d.ts.map +1 -1
  287. package/dist/dashboard/web/v3-page.js +2 -22
  288. package/dist/dashboard/web/v3-page.js.map +1 -1
  289. package/dist/dashboard/web/v3-terminal.d.ts +14 -0
  290. package/dist/dashboard/web/v3-terminal.d.ts.map +1 -1
  291. package/dist/dashboard/web/v3-terminal.js +31 -19
  292. package/dist/dashboard/web/v3-terminal.js.map +1 -1
  293. package/dist/dashboard/web/webhook-logs-page.d.ts +16 -0
  294. package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -0
  295. package/dist/dashboard/web/webhook-logs-page.js +195 -0
  296. package/dist/dashboard/web/webhook-logs-page.js.map +1 -0
  297. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
  298. package/dist/dashboard/web/whiteboards-page.js +18 -23
  299. package/dist/dashboard/web/whiteboards-page.js.map +1 -1
  300. package/dist/dashboard/web/workflow-version-switch.d.ts +8 -0
  301. package/dist/dashboard/web/workflow-version-switch.d.ts.map +1 -0
  302. package/dist/dashboard/web/workflow-version-switch.js +9 -0
  303. package/dist/dashboard/web/workflow-version-switch.js.map +1 -0
  304. package/dist/dashboard/web/workflows.d.ts +272 -1
  305. package/dist/dashboard/web/workflows.d.ts.map +1 -1
  306. package/dist/dashboard/web/workflows.js +211 -1397
  307. package/dist/dashboard/web/workflows.js.map +1 -1
  308. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  309. package/dist/dashboard/webhook-routes.js +92 -39
  310. package/dist/dashboard/webhook-routes.js.map +1 -1
  311. package/dist/dashboard-web/app.js +1 -65
  312. package/dist/dashboard-web/brand-logo.png +0 -0
  313. package/dist/dashboard-web/chunks/bot-defaults-page-HSQ6HR3R.js +1 -0
  314. package/dist/dashboard-web/chunks/chunk-6TPODDDC.js +1 -0
  315. package/dist/dashboard-web/chunks/chunk-73EJP2MO.js +1 -0
  316. package/dist/dashboard-web/chunks/chunk-BRTZFELS.js +1 -0
  317. package/dist/dashboard-web/chunks/chunk-EVK77ASG.js +1 -0
  318. package/dist/dashboard-web/chunks/chunk-R3FXBFQH.js +1 -0
  319. package/dist/dashboard-web/chunks/chunk-VRLL7SNU.js +1 -0
  320. package/dist/dashboard-web/chunks/chunk-XCPSHD3G.js +37 -0
  321. package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
  322. package/dist/dashboard-web/chunks/chunk-YVRWYGXR.js +1 -0
  323. package/dist/dashboard-web/chunks/chunk-ZJING6FY.js +66 -0
  324. package/dist/dashboard-web/chunks/connectors-page-ODUA5UCW.js +1 -0
  325. package/dist/dashboard-web/chunks/groups-page-OYX5M6NK.js +8 -0
  326. package/dist/dashboard-web/chunks/insights-page-YCQO6OCR.js +22 -0
  327. package/dist/dashboard-web/chunks/legacy-workflow-page-XJAUNONP.js +2 -0
  328. package/dist/dashboard-web/chunks/{monitor-room-RFX4HPS5.js → monitor-room-WTZNYAFV.js} +17 -15
  329. package/dist/dashboard-web/chunks/monitoring-page-R6LJUK7G.js +2 -0
  330. package/dist/dashboard-web/chunks/office-page-4OXK3GNR.js +1 -0
  331. package/dist/dashboard-web/chunks/overview-page-4MVEJY6U.js +1 -0
  332. package/dist/dashboard-web/chunks/roles-page-NQDW27VV.js +1 -0
  333. package/dist/dashboard-web/chunks/schedules-page-JRNKYHOX.js +1 -0
  334. package/dist/dashboard-web/chunks/sessions-page-LF7UVI7B.js +3 -0
  335. package/dist/dashboard-web/chunks/settings-page-WGW7KQQS.js +2 -0
  336. package/dist/dashboard-web/chunks/skills-page-AMD4XP3T.js +3 -0
  337. package/dist/dashboard-web/chunks/team-federation-page-SYG3K4GG.js +1 -0
  338. package/dist/dashboard-web/chunks/v3-page-6NFFWNUK.js +94 -0
  339. package/dist/dashboard-web/chunks/whiteboards-page-FBRUK2AS.js +1 -0
  340. package/dist/dashboard-web/favicon.png +0 -0
  341. package/dist/dashboard-web/index.html +5 -69
  342. package/dist/dashboard-web/style.css +18835 -7211
  343. package/dist/dashboard.js +150 -32
  344. package/dist/dashboard.js.map +1 -1
  345. package/dist/global-config.d.ts +2 -2
  346. package/dist/global-config.d.ts.map +1 -1
  347. package/dist/i18n/en.d.ts.map +1 -1
  348. package/dist/i18n/en.js +3 -0
  349. package/dist/i18n/en.js.map +1 -1
  350. package/dist/i18n/zh.d.ts.map +1 -1
  351. package/dist/i18n/zh.js +3 -0
  352. package/dist/i18n/zh.js.map +1 -1
  353. package/dist/im/lark/card-builder.d.ts +7 -5
  354. package/dist/im/lark/card-builder.d.ts.map +1 -1
  355. package/dist/im/lark/card-builder.js +10 -7
  356. package/dist/im/lark/card-builder.js.map +1 -1
  357. package/dist/im/lark/card-handler.d.ts.map +1 -1
  358. package/dist/im/lark/card-handler.js +25 -1
  359. package/dist/im/lark/card-handler.js.map +1 -1
  360. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  361. package/dist/im/lark/event-dispatcher.js +84 -0
  362. package/dist/im/lark/event-dispatcher.js.map +1 -1
  363. package/dist/platform/binding.d.ts +9 -0
  364. package/dist/platform/binding.d.ts.map +1 -1
  365. package/dist/platform/binding.js +14 -0
  366. package/dist/platform/binding.js.map +1 -1
  367. package/dist/platform/tunnel-client.d.ts.map +1 -1
  368. package/dist/platform/tunnel-client.js +9 -0
  369. package/dist/platform/tunnel-client.js.map +1 -1
  370. package/dist/services/bot-config-store.d.ts +1 -1
  371. package/dist/services/bot-config-store.d.ts.map +1 -1
  372. package/dist/services/bot-config-store.js +11 -5
  373. package/dist/services/bot-config-store.js.map +1 -1
  374. package/dist/services/file-bridge-path.d.ts +8 -0
  375. package/dist/services/file-bridge-path.d.ts.map +1 -0
  376. package/dist/services/file-bridge-path.js +75 -0
  377. package/dist/services/file-bridge-path.js.map +1 -0
  378. package/dist/services/grok-paths.d.ts +27 -0
  379. package/dist/services/grok-paths.d.ts.map +1 -0
  380. package/dist/services/grok-paths.js +106 -0
  381. package/dist/services/grok-paths.js.map +1 -0
  382. package/dist/services/grok-transcript.d.ts +67 -0
  383. package/dist/services/grok-transcript.d.ts.map +1 -0
  384. package/dist/services/grok-transcript.js +630 -0
  385. package/dist/services/grok-transcript.js.map +1 -0
  386. package/dist/services/hermes-session-filter.d.ts +28 -0
  387. package/dist/services/hermes-session-filter.d.ts.map +1 -0
  388. package/dist/services/hermes-session-filter.js +53 -0
  389. package/dist/services/hermes-session-filter.js.map +1 -0
  390. package/dist/services/hermes-transcript.d.ts +3 -0
  391. package/dist/services/hermes-transcript.d.ts.map +1 -1
  392. package/dist/services/hermes-transcript.js +20 -2
  393. package/dist/services/hermes-transcript.js.map +1 -1
  394. package/dist/services/resumable-session-discovery.d.ts +3 -0
  395. package/dist/services/resumable-session-discovery.d.ts.map +1 -1
  396. package/dist/services/resumable-session-discovery.js +6 -1
  397. package/dist/services/resumable-session-discovery.js.map +1 -1
  398. package/dist/services/skill-registry-store.d.ts +9 -0
  399. package/dist/services/skill-registry-store.d.ts.map +1 -1
  400. package/dist/services/skill-registry-store.js +304 -1
  401. package/dist/services/skill-registry-store.js.map +1 -1
  402. package/dist/services/structured-bridge-clis.d.ts +29 -0
  403. package/dist/services/structured-bridge-clis.d.ts.map +1 -0
  404. package/dist/services/structured-bridge-clis.js +76 -0
  405. package/dist/services/structured-bridge-clis.js.map +1 -0
  406. package/dist/services/trigger-log-store.d.ts +59 -0
  407. package/dist/services/trigger-log-store.d.ts.map +1 -1
  408. package/dist/services/trigger-log-store.js +81 -10
  409. package/dist/services/trigger-log-store.js.map +1 -1
  410. package/dist/services/usage-ledger.d.ts +4 -1
  411. package/dist/services/usage-ledger.d.ts.map +1 -1
  412. package/dist/services/usage-ledger.js +48 -10
  413. package/dist/services/usage-ledger.js.map +1 -1
  414. package/dist/services/webhook-audit.d.ts +10 -0
  415. package/dist/services/webhook-audit.d.ts.map +1 -0
  416. package/dist/services/webhook-audit.js +116 -0
  417. package/dist/services/webhook-audit.js.map +1 -0
  418. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  419. package/dist/setup/bot-config-editor.js +2 -0
  420. package/dist/setup/bot-config-editor.js.map +1 -1
  421. package/dist/setup/ensure-tmux.d.ts +26 -12
  422. package/dist/setup/ensure-tmux.d.ts.map +1 -1
  423. package/dist/setup/ensure-tmux.js +85 -18
  424. package/dist/setup/ensure-tmux.js.map +1 -1
  425. package/dist/skills/definitions.d.ts.map +1 -1
  426. package/dist/skills/definitions.js +14 -1
  427. package/dist/skills/definitions.js.map +1 -1
  428. package/dist/skills/injection-mode.d.ts +16 -0
  429. package/dist/skills/injection-mode.d.ts.map +1 -1
  430. package/dist/skills/injection-mode.js +25 -0
  431. package/dist/skills/injection-mode.js.map +1 -1
  432. package/dist/types.d.ts +9 -0
  433. package/dist/types.d.ts.map +1 -1
  434. package/dist/utils/global-install.d.ts +22 -0
  435. package/dist/utils/global-install.d.ts.map +1 -0
  436. package/dist/utils/global-install.js +106 -0
  437. package/dist/utils/global-install.js.map +1 -0
  438. package/dist/utils/install-diagnostics.d.ts +1 -1
  439. package/dist/utils/install-diagnostics.d.ts.map +1 -1
  440. package/dist/utils/install-diagnostics.js +6 -4
  441. package/dist/utils/install-diagnostics.js.map +1 -1
  442. package/dist/utils/install-info.d.ts +2 -0
  443. package/dist/utils/install-info.d.ts.map +1 -1
  444. package/dist/utils/install-info.js +10 -4
  445. package/dist/utils/install-info.js.map +1 -1
  446. package/dist/worker.js +293 -172
  447. package/dist/worker.js.map +1 -1
  448. package/dist/workflows/events/payloads.d.ts +10 -10
  449. package/dist/workflows/events/schema.d.ts +28 -28
  450. package/package.json +8 -7
  451. package/dist/dashboard/web/connectors.d.ts +0 -2
  452. package/dist/dashboard/web/connectors.d.ts.map +0 -1
  453. package/dist/dashboard/web/connectors.js +0 -2
  454. package/dist/dashboard/web/connectors.js.map +0 -1
  455. package/dist/dashboard/web/office.d.ts +0 -2
  456. package/dist/dashboard/web/office.d.ts.map +0 -1
  457. package/dist/dashboard/web/office.js +0 -2
  458. package/dist/dashboard/web/office.js.map +0 -1
  459. package/dist/dashboard/web/schedules.d.ts +0 -2
  460. package/dist/dashboard/web/schedules.d.ts.map +0 -1
  461. package/dist/dashboard/web/schedules.js +0 -2
  462. package/dist/dashboard/web/schedules.js.map +0 -1
  463. package/dist/dashboard/web/settings.d.ts +0 -2
  464. package/dist/dashboard/web/settings.d.ts.map +0 -1
  465. package/dist/dashboard/web/settings.js +0 -2
  466. package/dist/dashboard/web/settings.js.map +0 -1
  467. package/dist/dashboard/web/skills.d.ts +0 -2
  468. package/dist/dashboard/web/skills.d.ts.map +0 -1
  469. package/dist/dashboard/web/skills.js +0 -2
  470. package/dist/dashboard/web/skills.js.map +0 -1
  471. package/dist/dashboard/web/skin-intro.d.ts +0 -4
  472. package/dist/dashboard/web/skin-intro.d.ts.map +0 -1
  473. package/dist/dashboard/web/skin-intro.js +0 -49
  474. package/dist/dashboard/web/skin-intro.js.map +0 -1
  475. package/dist/dashboard/web/v3.d.ts +0 -3
  476. package/dist/dashboard/web/v3.d.ts.map +0 -1
  477. package/dist/dashboard/web/v3.js +0 -539
  478. package/dist/dashboard/web/v3.js.map +0 -1
  479. package/dist/dashboard/web/whiteboards.d.ts +0 -2
  480. package/dist/dashboard/web/whiteboards.d.ts.map +0 -1
  481. package/dist/dashboard/web/whiteboards.js +0 -2
  482. package/dist/dashboard/web/whiteboards.js.map +0 -1
  483. package/dist/dashboard-web/chunks/bot-defaults-page-OCIHPGEU.js +0 -438
  484. package/dist/dashboard-web/chunks/chunk-3N2PPQVD.js +0 -1
  485. package/dist/dashboard-web/chunks/chunk-3UJYRR2Q.js +0 -37
  486. package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +0 -1
  487. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
  488. package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +0 -54
  489. package/dist/dashboard-web/chunks/chunk-LXIK7OUJ.js +0 -1
  490. package/dist/dashboard-web/chunks/chunk-PE6W3C2C.js +0 -1
  491. package/dist/dashboard-web/chunks/chunk-QW54DWU3.js +0 -325
  492. package/dist/dashboard-web/chunks/connectors-IGETYWCP.js +0 -1
  493. package/dist/dashboard-web/chunks/groups-page-MYBS4ZYJ.js +0 -207
  494. package/dist/dashboard-web/chunks/insights-page-UPA32V2S.js +0 -309
  495. package/dist/dashboard-web/chunks/monitoring-page-7T3BESZ2.js +0 -1
  496. package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +0 -1
  497. package/dist/dashboard-web/chunks/overview-page-LJSBCQW4.js +0 -1
  498. package/dist/dashboard-web/chunks/roles-page-ESURTVQH.js +0 -98
  499. package/dist/dashboard-web/chunks/schedules-LML2ISOT.js +0 -1
  500. package/dist/dashboard-web/chunks/sessions-YB73XOTU.js +0 -1
  501. package/dist/dashboard-web/chunks/sessions-page-MCO5QR7Z.js +0 -1
  502. package/dist/dashboard-web/chunks/settings-page-OSDKNVS3.js +0 -2
  503. package/dist/dashboard-web/chunks/skills-page-PXBZJ6P6.js +0 -2
  504. package/dist/dashboard-web/chunks/team-federation-page-TTPVHFPX.js +0 -10
  505. package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +0 -149
  506. package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +0 -1
  507. package/dist/dashboard-web/chunks/workflows-FCPM4S4D.js +0 -184
  508. package/dist/dashboard-web/skins/bluearchive-hero.webp +0 -0
  509. package/dist/dashboard-web/skins/dragonball-goku.webp +0 -0
  510. package/dist/dashboard-web/skins/dragonball-wukong.webp +0 -0
  511. package/dist/dashboard-web/skins/genshin-breeze.webp +0 -0
  512. package/dist/dashboard-web/skins/ikun-hero.webp +0 -0
  513. package/dist/dashboard-web/skins/prts-priestess.webp +0 -0
  514. package/dist/dashboard-web/skins/zzz-hero.webp +0 -0
  515. package/dist/dashboard-web/skins/zzz-pattern.svg +0 -25
@@ -1,207 +0,0 @@
1
- import{a as pe,b as ue}from"./chunk-5E3MJJL4.js";import{b as de}from"./chunk-PE6W3C2C.js";import"./chunk-LXIK7OUJ.js";import{o as e,p as i,s as se,y as ie}from"./chunk-3UJYRR2Q.js";import{a as Me,b as le,c as ce}from"./chunk-JTSE5VP6.js";import{c as X}from"./chunk-7SZRL6FY.js";var W=X(Me(),1);var S={chats:[],bots:[]},Te=/^[A-Za-z0-9._-]{1,64}$/,he=(d,a)=>`${d}\0${a}`,J=[],Y=new Map,ee=new Map,fe=!1;function ve(d){return Te.test(d)&&d!=="."&&d!==".."}function me(d){let a=String(d??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return ve(a)?a:"profile"}async function O(){S=await(await fetch("/api/groups")).json()}async function Ce(){return(await fetch("/api/groups")).json()}async function Ae(){let a=await(await fetch("/api/role-profiles")).json().catch(()=>({})),b=Array.isArray(a.profiles)?a.profiles:[],I=await Promise.all(b.map(async E=>{try{let A=await(await fetch(`/api/role-profiles/${encodeURIComponent(E.profileId)}`)).json().catch(()=>({}));return[E.profileId,Array.isArray(A.entries)?A.entries:[]]}catch{return[E.profileId,[]]}})),T=new Map,j=new Set;await Promise.all((S.chats??[]).flatMap(E=>(E.memberBots??[]).filter(k=>k?.inChat&&k?.larkAppId).map(async k=>{let A=he(k.larkAppId,E.chatId);if(!j.has(A)){j.add(A);try{let l=await(await fetch(`/api/roles/${encodeURIComponent(k.larkAppId)}/${encodeURIComponent(E.chatId)}`)).json().catch(()=>({})),F=l?.hasEffectiveRole??l?.hasRole,z="effectiveContent"in l?l.effectiveContent:l.content;T.set(A,{content:F?String(z??""):null,source:l?.effectiveSource??(l?.hasRole?"chat":"none")})}catch{T.set(A,null)}}}))),J=b,Y=new Map(I),ee=T}async function He(){let a=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(a.profiles)?a.profiles:[]}function Be(d,a){if(a.size===0)return!0;let b=d?.memberBots??[];for(let I of a)if(!b.some(T=>T.larkAppId===I&&T.inChat))return!1;return!0}function ge(d,a){return d.filter(b=>!a||!a.has(b.larkAppId)).map(b=>`
2
- <label class="checkbox-row">
3
- <input type="checkbox" name="bot" value="${i(b.larkAppId)}">
4
- ${i(b.botName??b.larkAppId)} <small>(${i(b.larkAppId)})</small>
5
- </label>
6
- `).join("")}function Re(d,a,b){let I=String(d??"").trim();if(!I)return"";if(b)return`<p class="hint-warn">${i(e("groups.roleProfileBootstrapFailed",{name:I,reason:String(b)}))}</p>`;let T=typeof a=="string"&&a.trim()?a.trim():"";return T?`<p class="hint-ok">${i(e("groups.roleProfileBootstrapSent",{name:I,messageId:T}))}</p>`:`<p class="hint-ok">${i(e("groups.roleProfileBootstrapDone",{name:I}))}</p>`}function xe(d){let a=Array.isArray(d)?d:[];if(!a.length)return'<p class="hint-warn">\u6CA1\u6709\u8FD4\u56DE\u6DFB\u52A0\u7ED3\u679C\u3002</p>';let b=a.filter(E=>!!E?.ok).length,I=a.length-b,T=I?"hint-warn":"hint-ok",j=a.map(E=>{let k=String(E?.id??"?");return E?.ok?`<li><code>${i(k)}</code>: OK</li>`:`<li><code>${i(k)}</code>: failed (${i(String(E?.error??"unknown"))})</li>`}).join("");return`<div class="${T}">
7
- <strong>\u6DFB\u52A0\u7ED3\u679C\uFF1A\u6210\u529F ${b}/${a.length}${I?`\uFF0C\u5931\u8D25 ${I}`:""}</strong>
8
- <ul>${j}</ul>
9
- </div>`}function ye(d){let a=!1,b=new Set,I=new Map,T=(t,s)=>{let f=window.setTimeout(()=>{b.delete(f),a||t()},s);return b.add(f),f},j=t=>new Promise(s=>{let f=window.setTimeout(()=>{b.delete(f),I.delete(f),s()},t);b.add(f),I.set(f,s)}),E=d.querySelector("#g-head"),k=d.querySelector("#g-body"),A=d.querySelector("#g-filters"),U=d.querySelector("#g-refresh"),l=d.querySelector("#g-drawer");U.onclick=async()=>{U.disabled=!0;try{if(await O(),a)return;B(),x()}finally{a||(U.disabled=!1)}};let F=d.querySelector("#g-create");F.onclick=()=>{$e()};let z=d.querySelector("#g-loading"),be=d.querySelector("#g-table-wrap");(async()=>{try{await O()}finally{if(a)return;z.remove(),be.hidden=!1,B(),x()}})();async function x(){try{await Ae()}catch{J=[],Y=new Map,ee=new Map}finally{if(a)return;fe=!0,B()}}function H(t,s){t.innerHTML=s}function N(t,s){return`<p class="hint-warn"><strong>${i(t)}</strong><br><small>${i(String(s??"unknown"))}</small></p>`}function V(t,s){t&&(t.disabled=!1,t.textContent=s)}async function $e(){let t=S.bots;if(t.length===0){alert(e("groups.noBotsOnline"));return}let s=[];try{s=(await(await fetch("/api/role-profiles")).json()).profiles??[]}catch{}if(a)return;l.innerHTML=`
10
- <article>
11
- <header><h3>${e("groups.createTitle")}</h3></header>
12
- <p>${e("groups.createHelp")}</p>
13
- <form id="g-createform">
14
- <label class="form-row">
15
- <span>${e("groups.name")}</span>
16
- <input type="text" name="name" placeholder="${e("groups.namePlaceholder")}" maxlength="60">
17
- </label>
18
- <label class="form-row">
19
- <span>${e("groups.bindDir")}</span>
20
- <input type="text" name="bindWorkingDir" placeholder="e.g. ~/projects/botmux">
21
- <small>${e("groups.bindDirHelp")}</small>
22
- </label>
23
- <label class="form-row">
24
- <span>${e("groups.roleProfile")}</span>
25
- <select name="roleProfileId">
26
- <option value="">${e("groups.roleProfileNone")}</option>
27
- ${s.map(o=>`<option value="${i(o.profileId)}">${i(o.profileId)}</option>`).join("")}
28
- </select>
29
- <small>${e("groups.roleProfileHelp")}</small>
30
- </label>
31
- <fieldset>
32
- <legend>${e("groups.botPicker")}</legend>
33
- ${ge(t)}
34
- </fieldset>
35
- <div data-create-status aria-live="polite"></div>
36
- <div class="actions">
37
- <button type="submit" class="primary">${e("groups.createSubmit")}</button>
38
- <button type="button" id="g-create-cancel">${e("groups.cancel")}</button>
39
- </div>
40
- </form>
41
- </article>`,l.showModal(),l.querySelector("#g-create-cancel").onclick=()=>l.close(),l.querySelector("#g-createform").onsubmit=async o=>{o.preventDefault();let r=new FormData(o.target),m=(r.get("name")??"").trim(),c=(r.get("bindWorkingDir")??"").trim(),p=(r.get("roleProfileId")??"").trim(),h=r.getAll("bot"),y=l.querySelector("[data-create-status]");if(h.length===0){H(y,N("\u8BF7\u9009\u62E9 bot","\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u521B\u5EFA\u7FA4\u804A\u3002"));return}let u=o.target.querySelector("button[type=submit]");u&&(u.disabled=!0,u.textContent="Creating..."),H(y,"");try{let w=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:m||void 0,larkAppIds:h,bindWorkingDir:c||void 0,roleProfileId:p||void 0})}),g=await w.json().catch(()=>({ok:!1,error:`HTTP ${w.status}`}));if(a)return;if(g.ok&&g.chatId){we(g);let L=Array.isArray(g.invalidBotIds)?g.invalidBotIds:[],C=h.filter(D=>!L.includes(D)),q=new Set(C);typeof g.creator=="string"&&g.creator&&q.add(g.creator),f(g.chatId,m||g.chatId,C,g.creator),B(),x(),n(g.chatId,q).catch(()=>{})}else H(y,N("\u521B\u5EFA\u5931\u8D25",g.error??`HTTP ${w.status}`)),V(u,e("groups.createSubmit"))}catch(w){H(y,N("\u7F51\u7EDC\u9519\u8BEF",w)),V(u,e("groups.createSubmit"))}};function f(o,r,m,c){let p=new Set(m);c&&p.add(c);let h=S.bots.map(u=>({larkAppId:u.larkAppId,botName:u.botName,inChat:p.has(u.larkAppId),oncallChat:null})),y={chatId:o,name:r,ownerId:c??null,memberBots:h};S.chats=[y,...S.chats.filter(u=>u.chatId!==o)]}async function n(o,r){let m=[600,1200,1200,1200,1200,1200];for(let c of m){if(await j(c),a)return;let p;try{p=await Ce()}catch{continue}if(a)return;let h=(p.chats??[]).find(y=>y.chatId===o);if(h&&Be(h,r)){S=p,B(),x();return}}}}function we(t){let s=String(t.chatId),f=typeof t.shareLink=="string"&&t.shareLink?t.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(s)}`,n=t.invalidBotIds??[],o=t.invalidUserIds??[],r=t.autoInvitedOpenId,m=!!t.autoInviteRejected,c=t.ownerTransferredTo,p=t.transferError,h=t.notifyMessageId,y=t.notifyError,u=Array.isArray(t.oncallBindings)?t.oncallBindings:[],w=u.filter(M=>M?.ok).length,g=u.filter(M=>!M?.ok),L=u.length>0?g.length===0?`<p class="hint-ok">\u5DF2\u7ED1\u5B9A\u76EE\u5F55\uFF1A<code>${i(t.bindResolvedPath??"")}</code>\uFF08${w}/${u.length} bots\uFF09</p>`:`<p class="hint-warn">\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ${w}/${u.length}\u3002${g.map(M=>`<br><code>${i(M.larkAppId??"?")}</code>: ${i(M.error??"unknown")}`).join("")}</p>`:"",C;if(r){let M=c?"<br><small>\u7FA4\u4E3B\u5DF2\u4ECE\u673A\u5668\u4EBA\u8F6C\u8BA9\u7ED9\u4F60\u3002</small>":p?`<br><small class="hint-warn-inline">\u26A0 \u81EA\u52A8\u8F6C\u8BA9\u7FA4\u4E3B\u5931\u8D25\uFF08${i(p)}\uFF09\uFF0C\u4F60\u73B0\u5728\u662F\u6210\u5458\u4F46\u7FA4\u4E3B\u4ECD\u662F\u673A\u5668\u4EBA\u3002</small>`:"",K=h?`<br><small>\u673A\u5668\u4EBA\u5DF2\u5728\u7FA4\u91CC @ \u4E86\u4F60\uFF08\u6D88\u606F id <code>${i(h)}</code>\uFF09\uFF0C\u770B\u98DE\u4E66\u901A\u77E5\u5C31\u80FD\u8FDB\u7FA4\u3002</small>`:y?`<br><small class="hint-warn-inline">\u26A0 \u81EA\u52A8 @ \u901A\u77E5\u5931\u8D25\uFF08${i(y)}\uFF09\uFF0C\u65B0\u7FA4\u53EF\u80FD\u4E0D\u4F1A\u4E3B\u52A8\u51FA\u73B0\u5728\u4F60\u4FA7\u8FB9\u680F\uFF0C\u5EFA\u8BAE\u4ECE\u4E0B\u9762\u6309\u94AE\u8DF3\u8FDB\u53BB\u3002</small>`:"";C=`<p class="hint-ok">\u5DF2\u81EA\u52A8\u9080\u8BF7\u4F60\uFF08<code>${i(r)}</code>\uFF09\u4F5C\u4E3A\u6210\u5458\u3002${M}${K}</p>`}else m?C='<p class="hint-warn">\u98DE\u4E66\u62D2\u7EDD\u4E86\u81EA\u52A8\u9080\u8BF7\uFF08\u4F60\u7684 open_id \u5728\u521B\u5EFA\u8005 bot \u7684 scope \u4E0B\u4E0D\u53EF\u7528\uFF09\u3002<strong>\u4F60\u76EE\u524D\u4E0D\u662F\u65B0\u7FA4\u6210\u5458</strong>\uFF0C\u9700\u8981\u8BA9\u7FA4\u91CC\u7684\u67D0\u4E2A\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u6765\u3002</p>':C='<p class="hint-warn">\u6CA1\u5728 dashboard \u7F13\u5B58\u91CC\u627E\u5230 ownerOpenId\uFF0C<strong>\u6CA1\u6709\u81EA\u52A8\u9080\u8BF7\u4F60</strong>\u3002\u70B9\u5F00\u4E0B\u9762\u94FE\u63A5\u524D\uFF0C\u5148\u8BA9\u7FA4\u91CC\u4EFB\u4E00\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u53BB\u3002</p>';let q=[n.length?`<li>\u65E0\u6548 bot id: <code>${n.map(i).join(", ")}</code></li>`:"",o.length?`<li>\u65E0\u6548\u7528\u6237 open_id: <code>${o.map(i).join(", ")}</code></li>`:""].filter(Boolean).join(""),D=Re(typeof t.roleProfileId=="string"?t.roleProfileId:"",t.roleProfileBootstrapMessageId,t.roleProfileBootstrapError);l.innerHTML=`
42
- <article>
43
- <header><h3>${e("groups.successTitle")}</h3></header>
44
- <p><b>chatId:</b> <code>${i(s)}</code> <button type="button" data-copy="${i(s)}">${e("sessions.copy")}</button></p>
45
- <p><b>\u521B\u5EFA\u8005:</b> <code>${i(t.creator??"?")}</code></p>
46
- ${C}
47
- ${L}
48
- ${D}
49
- ${q?`<ul>${q}</ul>`:""}
50
- <div class="actions">
51
- <a class="btn-link primary" href="${f}" target="_blank" rel="noopener">${e("groups.openGroup")}</a>
52
- <button type="button" id="g-create-close">${e("sessions.dismiss")}</button>
53
- </div>
54
- </article>`,l.querySelectorAll("[data-copy]").forEach(M=>{M.onclick=()=>{navigator.clipboard.writeText(M.dataset.copy??""),M.textContent=e("sessions.copied"),T(()=>{M.textContent=e("sessions.copy")},800)}}),l.querySelector("#g-create-close").onclick=()=>l.close()}function ke(t){if(!J.length||!fe)return"";let s=new Map;for(let r of t.memberBots??[])r?.inChat&&s.set(r.larkAppId,ee.get(he(r.larkAppId,t.chatId))??null);if(!pe(s))return"";let n=ue(t.memberBots??[],J,Y,s)[0];if(!n)return`<div class="g-profile-status muted">${e("groups.profileStatusUnmatched")}</div>`;let o=n.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return`<div class="g-profile-status ${n.kind}">
55
- ${i(e(o,{name:n.profileId,matched:n.matched,total:n.total,chat:n.chatMatched}))}
56
- </div>`}function Ie(){E.innerHTML=`<tr>
57
- <th>${e("groups.chat")}</th>
58
- ${S.bots.map(t=>`<th>${i(t.botName??t.larkAppId)}</th>`).join("")}
59
- <th>${e("groups.actions")}</th>
60
- </tr>`}function B(){Ie();let t=new FormData(A),s=(t.get("q")??"").toLowerCase(),f=!!t.get("missing"),n=S.chats.filter(o=>!s||(o.name??"").toLowerCase().includes(s)||o.chatId.toLowerCase().includes(s)||(o.ownerId??"").toLowerCase().includes(s)).filter(o=>!f||o.memberBots.some(r=>!r.inChat));if(n.length===0){k.innerHTML=`<tr><td colspan="${S.bots.length+2}" class="empty">${e("groups.empty")}</td></tr>`;return}k.innerHTML=n.map(o=>`<tr data-chat="${i(o.chatId)}">
61
- <td>
62
- <div class="g-chat-cell">
63
- ${se({chatId:o.chatId,name:o.name,avatarUrl:o.avatar,size:"sm"})}
64
- <div class="g-chat-meta">
65
- <strong>${i(o.name??o.chatId)}</strong><br>
66
- <small><code>${i(o.chatId)}</code></small>
67
- ${ke(o)}
68
- </div>
69
- </div>
70
- </td>
71
- ${S.bots.map(r=>{let m=o.memberBots.find(h=>h.larkAppId===r.larkAppId),c=m?m.error?"!":m.inChat?"\u2713":"\u2717":"?";return`<td class="${m?m.error?"cell-error":m.inChat?"cell-in":"cell-out":"cell-unknown"}" title="${i(m?.error??"")}">${c}</td>`}).join("")}
72
- <td>
73
- <button class="add-bots" type="button">${e("groups.addBots")}</button>
74
- <button class="save-profile" type="button">${e("groups.saveAsProfile")}</button>
75
- <button class="manage-chat" type="button">${e("groups.manage")}</button>
76
- </td>
77
- </tr>`).join("")}let te=async t=>{let s=t.target.closest("button.add-bots");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(c=>c.chatId===n);if(!o)return;let r=new Set(o.memberBots.filter(c=>c.inChat).map(c=>c.larkAppId));if(!S.bots.filter(c=>!r.has(c.larkAppId)).length){alert("All configured bots are already in this chat.");return}l.innerHTML=`
78
- <article>
79
- <header><h3>${e("groups.addBots")} \xB7 ${i(o.name??o.chatId)}</h3></header>
80
- <p>${e("groups.createHelp")}</p>
81
- <form id="g-addform">
82
- ${ge(S.bots,r)}
83
- <div data-add-status aria-live="polite"></div>
84
- <div class="actions">
85
- <button type="submit" class="primary">${e("groups.addBots")}</button>
86
- <button type="button" id="g-cancel">${e("groups.cancel")}</button>
87
- </div>
88
- </form>
89
- </article>`,l.showModal(),l.querySelector("#g-cancel").onclick=()=>l.close(),l.querySelector("#g-addform").onsubmit=async c=>{c.preventDefault();let h=new FormData(c.target).getAll("bot"),y=l.querySelector("[data-add-status]");if(h.length===0){H(y,N("\u8BF7\u9009\u62E9 bot","\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"));return}let u=c.target.querySelector("button[type=submit]");u&&(u.disabled=!0,u.textContent="Adding..."),H(y,"");try{let g=await(await fetch(`/api/groups/${encodeURIComponent(n)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:h})})).json();if(a)return;if(g.error==="no_proxy_bot")H(y,N("\u65E0\u6CD5\u6DFB\u52A0 bot","\u5F53\u524D\u7FA4\u91CC\u6CA1\u6709\u53EF\u4EE3\u7406\u64CD\u4F5C\u7684 bot\u3002\u8BF7\u5148\u5728\u98DE\u4E66\u91CC\u624B\u52A8\u62C9\u5165\u4E00\u4E2A bot\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"));else if(g.result){let L=xe(g.result);H(y,L);try{if(await O(),a)return;B(),x()}catch(C){a||H(y,`${L}${N("\u5237\u65B0\u5931\u8D25",`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${C}`)}`)}}else H(y,N("\u54CD\u5E94\u5F02\u5E38",JSON.stringify(g)))}catch(w){H(y,N("\u7F51\u7EDC\u9519\u8BEF",w))}finally{a||V(u,e("groups.addBots"))}}};k.addEventListener("click",te);let oe=async t=>{let s=t.target.closest("button.save-profile");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(r=>r.chatId===n);o&&await Pe(o,s)};k.addEventListener("click",oe);async function Pe(t,s){let f=me(t.name??""),n=f==="profile"?me(t.chatId):f;s.disabled=!0;let o=s.textContent;s.textContent=e("groups.saveProfileSaving");try{let[r,m]=await Promise.all([Se(t),He()]);if(a)return;Ee(t,n,r,m)}finally{a||(s.disabled=!1,s.textContent=o)}}async function Se(t){let s=(t.memberBots??[]).filter(n=>n?.inChat&&n?.larkAppId);return await Promise.all(s.map(async n=>{try{let r=await(await fetch(`/api/roles/${encodeURIComponent(n.larkAppId)}/${encodeURIComponent(t.chatId)}`)).json().catch(()=>({})),m=r?.hasEffectiveRole??r?.hasRole,c="effectiveContent"in r?r.effectiveContent:r.content,p=m?String(c??"").trim():"",h=r?.effectiveSource==="chat"||r?.effectiveSource==="team"?r.effectiveSource:null;return{larkAppId:n.larkAppId,botName:n.botName,content:p,status:p?h??"chat":"empty"}}catch{return{larkAppId:n.larkAppId,botName:n.botName,content:"",status:"error"}}}))}function Ee(t,s,f,n){let o=[...n].sort((v,P)=>v.profileId.localeCompare(P.profileId)),r=o.map((v,P)=>`
90
- <button type="button"
91
- class="g-save-profile-pick ${P===0?"selected":""}"
92
- data-profile-id="${i(v.profileId)}"
93
- aria-pressed="${P===0?"true":"false"}">
94
- <span>${i(v.profileId)}</span>
95
- <small>${i(e("groups.saveProfileExistingMeta",{count:v.entryCount??0}))}</small>
96
- </button>`).join(""),m=o.length>0,c=f.filter(v=>v.status==="empty").length,p=f.filter(v=>v.status==="error").length,h=f.length>0&&p===0,y=f.map(v=>`
97
- <div class="g-save-profile-entry ${v.status==="error"?"error":""}">
98
- <div>
99
- <strong>${i(v.botName??v.larkAppId)}</strong>
100
- <code>${i(v.larkAppId)}</code>
101
- </div>
102
- <span class="g-save-profile-entry-status ${v.status==="error"?"error":"ok"}">
103
- ${e(v.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")}
104
- </span>
105
- </div>`).join("");l.innerHTML=`
106
- <article class="g-save-profile-dialog">
107
- <header>
108
- <h3>${e("groups.saveProfileTitle")}</h3>
109
- <p>${i(e("groups.saveProfileIntro",{name:t.name??t.chatId,count:f.length}))}</p>
110
- </header>
111
- <form id="g-save-profile-form">
112
- <section class="g-save-profile-panel">
113
- <div class="g-save-profile-section-head">
114
- <span>${e("groups.saveProfileScope")}</span>
115
- <small>${e("groups.saveProfileScopeHelp")}</small>
116
- </div>
117
- <div class="g-save-profile-stats">
118
- <span>${e("groups.saveProfileBotCount")} <strong>${f.length}</strong></span>
119
- ${p?`<span class="warn">${e("groups.saveProfileLoadFailed")} <strong>${p}</strong></span>`:""}
120
- </div>
121
- <div class="g-save-profile-entry-list">
122
- ${y||`<div class="g-save-profile-empty">${e("groups.saveProfileNoRoles")}</div>`}
123
- </div>
124
- </section>
125
-
126
- <div class="form-row">
127
- <span>${e("groups.saveProfileMode")}</span>
128
- <div class="g-save-profile-switch" role="tablist" aria-label="${e("groups.saveProfileMode")}">
129
- <button type="button" class="active" data-save-profile-mode="new">${e("groups.saveProfileNew")}</button>
130
- <button type="button" data-save-profile-mode="overwrite" ${m?"":"disabled"}>${e("groups.saveProfileOverwrite")}</button>
131
- </div>
132
- </div>
133
- <label class="form-row" data-profile-mode-row="new">
134
- <span>${e("groups.saveProfileIdLabel")}</span>
135
- <input type="text" name="profileId" value="${i(s)}" maxlength="64" autocomplete="off">
136
- <small>${e("groups.saveProfileInvalid")}</small>
137
- </label>
138
- <div class="form-row" data-profile-mode-row="overwrite" hidden>
139
- <span>${e("groups.saveProfileExistingLabel")}</span>
140
- ${m?`<div class="g-save-profile-picker">${r}</div>`:`<div class="g-save-profile-summary warn">${e("groups.saveProfileExistingEmpty")}</div>`}
141
- <small>${e("groups.saveProfileOverwriteHelp")}</small>
142
- </div>
143
- <div class="g-save-profile-target">
144
- <span>${e("groups.saveProfileTarget")}</span>
145
- <code data-save-profile-target>${i(s)}</code>
146
- <small data-save-profile-target-mode>${e("groups.saveProfileTargetNew")}</small>
147
- </div>
148
- <div class="g-save-profile-summary ${h?"":"warn"}">
149
- ${p?i(e("groups.saveProfileFailedLoadSummary",{count:p})):f.length?i(c?e("groups.saveProfileEntrySummaryWithEmpty",{count:f.length,emptyCount:c}):e("groups.saveProfileEntrySummary",{count:f.length})):i(e("groups.saveProfileNoRoles"))}
150
- </div>
151
- <div class="g-save-profile-status" data-save-profile-status></div>
152
- <div class="actions">
153
- <button type="submit" class="primary" ${h?"":"disabled"}>${e("groups.saveProfileSubmit")}</button>
154
- <button type="button" id="g-save-profile-cancel">${e("groups.cancel")}</button>
155
- </div>
156
- </form>
157
- </article>`,l.showModal();let u=l.querySelector("#g-save-profile-form"),w=[...l.querySelectorAll("[data-profile-mode-row]")],g=l.querySelector("[data-save-profile-status]"),L=u.querySelector("button[type=submit]"),C=[...u.querySelectorAll("[data-save-profile-mode]")],q=[...u.querySelectorAll("[data-profile-id]")],D=u.querySelector("input[name=profileId]"),M=u.querySelector("[data-save-profile-target]"),K=u.querySelector("[data-save-profile-target-mode]"),R="new",G=o[0]?.profileId??"";function re(){return R==="overwrite"?G:D.value.trim()}function _(){for(let v of w)v.hidden=v.dataset.profileModeRow!==R;for(let v of C){let P=v.dataset.saveProfileMode===R;v.classList.toggle("active",P),v.setAttribute("aria-pressed",String(P))}for(let v of q){let P=v.dataset.profileId===G;v.classList.toggle("selected",P),v.setAttribute("aria-pressed",String(P))}L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit"),L.disabled=!h||R==="overwrite"&&!G,M.textContent=re()||"-",K.textContent=R==="overwrite"?e("groups.saveProfileTargetOverwrite"):e("groups.saveProfileTargetNew"),g.textContent="",g.className="g-save-profile-status"}C.forEach(v=>{v.addEventListener("click",()=>{let P=v.dataset.saveProfileMode==="overwrite"?"overwrite":"new";P==="overwrite"&&!m||(R=P,_())})}),q.forEach(v=>{v.addEventListener("click",()=>{G=v.dataset.profileId??"",R="overwrite",_()})}),D.addEventListener("input",_),_(),l.querySelector("#g-save-profile-cancel").onclick=()=>l.close(),u.onsubmit=async v=>{if(v.preventDefault(),!h)return;let P=re();if(!ve(P)){g.textContent=e("groups.saveProfileInvalid"),g.className="g-save-profile-status error";return}L.disabled=!0,L.textContent=e("groups.saveProfileSaving"),g.textContent=e("groups.saveProfileSaving"),g.className="g-save-profile-status";try{let Z=await Promise.all(f.map(async ae=>(await fetch(`/api/role-profiles/${encodeURIComponent(P)}/${encodeURIComponent(ae.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:ae.content,allowEmpty:!0})})).ok));if(a)return;let Q=Z.filter(Boolean).length;if(Q!==f.length){g.textContent=e("groups.saveProfileFailed",{saved:Q,total:f.length}),g.className="g-save-profile-status error",L.disabled=!1,L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit");return}if(g.textContent=e("groups.saveProfileDone",{name:P,count:Q}),g.className="g-save-profile-status ok",await x(),a)return;T(()=>l.close(),700)}catch(Z){g.textContent=String(Z),g.className="g-save-profile-status error",L.disabled=!1,L.textContent=R==="overwrite"?e("groups.saveProfileOverwriteSubmit"):e("groups.saveProfileSubmit")}}}let ne=async t=>{let s=t.target.closest("button.manage-chat");if(!s)return;let n=s.closest("tr[data-chat]").dataset.chat,o=S.chats.find(r=>r.chatId===n);o&&Le(o)};k.addEventListener("click",ne);function Le(t){let s=t.memberBots.filter(n=>n.inChat),f=typeof t.ownerId=="string"?t.ownerId:"";l.innerHTML=`
158
- <article>
159
- <header><h3>${e("groups.manageTitle",{name:t.name??t.chatId})}</h3></header>
160
- <p><b>chatId:</b> <code>${i(t.chatId)}</code></p>
161
- <p><b>${e("groups.owner")}:</b> <code>${i(t.ownerId??e("common.unknown"))}</code></p>
162
-
163
- <fieldset>
164
- <legend>${e("groups.oncall")}</legend>
165
- <p><small>${e("groups.oncallHelp")}</small></p>
166
- ${s.length===0?'<p class="empty">\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC</p>':s.map(n=>{let o=!!n.oncallChat,r=n.oncallChat?.workingDir??"";return`
167
- <div class="oncall-row" data-bot="${i(n.larkAppId)}">
168
- <label class="checkbox-row">
169
- <input type="checkbox" data-action="toggle" ${o?"checked":""}>
170
- <strong>${i(n.botName??n.larkAppId)}</strong>
171
- <small>(${i(n.larkAppId)})</small>
172
- </label>
173
- <div class="oncall-row-body">
174
- <input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
175
- value="${i(r)}" ${o?"":"disabled"}>
176
- <button type="button" data-action="save">${e("groups.save")}</button>
177
- <span class="oncall-status" data-status></span>
178
- </div>
179
- </div>
180
- `}).join("")}
181
- </fieldset>
182
-
183
- <fieldset>
184
- <legend>${e("groups.leaveTitle")}</legend>
185
- ${s.length===0?'<p class="empty">\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC</p>':s.map(n=>`
186
- <label class="checkbox-row">
187
- <input type="checkbox" name="leave-bot" value="${i(n.larkAppId)}">
188
- ${i(n.botName??n.larkAppId)}
189
- <small>${n.larkAppId===f?"\xB7 \u7FA4\u4E3B":""}</small>
190
- </label>
191
- `).join("")}
192
- </fieldset>
193
-
194
- <div class="actions">
195
- <button id="g-leave-btn" type="button" ${s.length===0?"disabled":""}>${e("groups.leaveSelected")}</button>
196
- <button id="g-disband-btn" type="button" class="contrast" ${s.length===0?"disabled":""}>${e("groups.disband")}</button>
197
- </div>
198
- <p class="hint-warn"><small>${e("groups.dangerHint")}</small></p>
199
- <form method="dialog"><button>${e("sessions.dismiss")}</button></form>
200
- </article>`,l.showModal(),l.querySelectorAll(".oncall-row").forEach(n=>{let o=n.dataset.bot,r=n.querySelector("input[data-action=toggle]"),m=n.querySelector("input[data-input=workingDir]"),c=n.querySelector("button[data-action=save]"),p=n.querySelector("[data-status]");r.addEventListener("change",()=>{m.disabled=!r.checked,r.checked&&m.focus()}),c.addEventListener("click",async()=>{p.textContent="",p.className="oncall-status";let h=r.checked,y=m.value.trim();if(h&&!y){p.textContent=e("groups.needWorkingDir"),p.classList.add("hint-warn-inline");return}c.disabled=!0;try{let u=`/api/groups/${encodeURIComponent(t.chatId)}/oncall/${encodeURIComponent(o)}`,w=h?await fetch(u,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:y})}):await fetch(u,{method:"DELETE"}),g=await w.json().catch(()=>({}));if(a)return;if(w.ok&&g.ok){p.textContent=h?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${g.resolvedPath??y}`:"\u2713 \u5DF2\u89E3\u7ED1",p.classList.add("hint-ok");try{if(await O(),a)return;B(),x()}catch{}}else p.textContent=`\u2717 ${g.error??w.status}`,p.classList.add("hint-warn-inline")}catch(u){p.textContent=`\u2717 ${u?.message??u}`,p.classList.add("hint-warn-inline")}finally{c.disabled=!1}})}),l.querySelector("#g-leave-btn").onclick=async()=>{let n=[...l.querySelectorAll("input[name=leave-bot]:checked")].map(o=>o.value);if(n.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${n.length} \u4E2A\u673A\u5668\u4EBA\u9000\u51FA\u7FA4\u804A\uFF1F\u8BE5 bot \u5728\u6B64\u7FA4\u7684\u4F1A\u8BDD\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))try{let r=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:n})})).json();if(a)return;let m=(r.result??[]).map(c=>{if(!c.ok)return`${c.larkAppId}: \u5931\u8D25 (${c.error??"unknown"})`;let p=c.closedSessions??[],h=p.filter(w=>!w.ok).length,y=p.length-h,u=p.length===0?"":h===0?`\uFF08\u5173\u95ED ${y} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${y} \u4E2A\uFF0C${h} \u4E2A\u5931\u8D25\uFF09`;return`${c.larkAppId}: OK${u}`}).join(`
201
- `);if(alert(m||`Unexpected: ${JSON.stringify(r)}`),await O(),a)return;B(),x()}catch(o){alert("Network error: "+o)}finally{a||l.close()}},l.querySelector("#g-disband-btn").onclick=async()=>{if(s.length===0||!confirm(`\u786E\u5B9A\u89E3\u6563\u7FA4\u804A\u300C${t.name??t.chatId}\u300D\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF0C\u672C\u7FA4\u6240\u6709\u673A\u5668\u4EBA\u4F1A\u8BDD\u4E5F\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))return;let n=[...s].sort((r,m)=>(m.larkAppId===f?1:0)-(r.larkAppId===f?1:0)),o=[];for(let r of n)try{let m=await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/disband`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppId:r.larkAppId})}),c=await m.json();if(a)return;if(c.ok){let p=c.closedSessions??[],h=p.filter(w=>!w.ok).length,y=p.length-h,u=p.length===0?"":h===0?`
202
- \u5173\u95ED\u4E86 ${y} \u4E2A\u4F1A\u8BDD\u3002`:`
203
- \u5173\u95ED\u4E86 ${y} \u4E2A\u4F1A\u8BDD\uFF0C${h} \u4E2A\u4F1A\u8BDD\u5173\u95ED\u5931\u8D25\u3002`;if(alert(`\u5DF2\u89E3\u6563\uFF08\u7531 ${r.botName??r.larkAppId} \u6267\u884C\uFF09${u}`),await O(),a)return;B(),x(),l.close();return}o.push(`${r.botName??r.larkAppId}: ${c.error??m.status}`)}catch(m){o.push(`${r.botName??r.larkAppId}: ${m}`)}alert(`\u6240\u6709\u5728\u7FA4\u673A\u5668\u4EBA\u5747\u65E0\u6CD5\u89E3\u6563\uFF1A
204
- ${o.join(`
205
- `)}
206
-
207
- \u5EFA\u8BAE\u6539\u7528\u300C\u9000\u51FA\u7FA4\u804A\u300D\u3002`)}}return A.addEventListener("input",B),()=>{a=!0;for(let t of b)window.clearTimeout(t);b.clear();for(let t of I.values())t();I.clear(),U.onclick=null,F.onclick=null,A.removeEventListener("input",B),k.removeEventListener("click",te),k.removeEventListener("click",oe),k.removeEventListener("click",ne),l.open&&l.close(),l.replaceChildren()}}var $=X(ce(),1);function Ne(d){return(0,$.jsx)("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:d.html}})}function qe(){let d=de(),a=(0,W.useRef)(null);return(0,W.useEffect)(()=>{if(a.current)return ye(a.current)},[]),(0,$.jsxs)("section",{className:"page",ref:a,children:[(0,$.jsx)("div",{className:"page-heading",children:(0,$.jsxs)("div",{children:[(0,$.jsx)("p",{className:"eyebrow",children:d("nav.groups")}),(0,$.jsx)("h1",{children:d("groups.title")}),(0,$.jsx)("p",{children:d("groups.subtitle")})]})}),(0,$.jsxs)("form",{id:"g-filters",className:"filters",children:[(0,$.jsx)("input",{type:"search",name:"q",placeholder:d("groups.search")}),(0,$.jsxs)("label",{children:[(0,$.jsx)("input",{type:"checkbox",name:"missing"})," ",d("groups.missingOnly")]}),(0,$.jsx)("button",{type:"button",id:"g-refresh",children:d("groups.refresh")}),(0,$.jsx)("button",{type:"button",id:"g-create",className:"primary",children:d("groups.create")})]}),(0,$.jsx)("div",{id:"g-loading",children:(0,$.jsx)(Ne,{html:ie()})}),(0,$.jsx)("div",{className:"table-scroll matrix-scroll",id:"g-table-wrap",hidden:!0,children:(0,$.jsxs)("table",{children:[(0,$.jsx)("thead",{id:"g-head"}),(0,$.jsx)("tbody",{id:"g-body"})]})}),(0,$.jsx)("dialog",{id:"g-drawer"})]})}function We(d){return le(d,(0,$.jsx)(qe,{}))}export{We as renderGroupsPage};