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,188 +1,35 @@
1
- export const dashboardRoutes = [
2
- {
3
- id: 'legacy-workflow',
4
- routePrefix: '#/legacy-workflow',
5
- load: async () => {
6
- const mod = await import('./workflows.js');
7
- return root => mod.renderWorkflowsPage(root);
8
- },
9
- },
10
- {
11
- id: 'workflows',
12
- routePrefix: '#/workflows',
13
- rerenderOnUiChange: false,
14
- load: async () => {
15
- const mod = await import('./v3-page.js');
16
- return root => mod.renderV3RunsPage(root);
17
- },
18
- },
19
- {
20
- id: 'groups',
21
- routePrefix: '#/groups',
22
- // Groups is currently a render-once React scaffold around the existing
23
- // imperative matrix/dialog controller, so locale/theme changes full-remount
24
- // it until those controller-owned subtrees become React components.
25
- rerenderOnUiChange: true,
26
- load: async () => {
27
- const mod = await import('./groups-page.js');
28
- return root => mod.renderGroupsPage(root);
29
- },
30
- },
31
- {
32
- id: 'settings',
33
- routePrefix: '#/settings',
34
- rerenderOnUiChange: false,
35
- load: async () => {
36
- const mod = await import('./settings-page.js');
37
- return root => mod.renderSettingsPage(root);
38
- },
39
- },
40
- {
41
- id: 'bot-defaults',
42
- routePrefix: '#/bot-defaults',
43
- // Bot defaults is currently a render-once React scaffold around the
44
- // imperative settings controller, so ui changes still full-remount it to
45
- // refresh translations without partial React renders fighting innerHTML.
46
- rerenderOnUiChange: true,
47
- load: async () => {
48
- const mod = await import('./bot-defaults-page.js');
49
- return root => mod.renderBotDefaultsPage(root);
50
- },
51
- },
52
- {
53
- id: 'skills',
54
- routePrefix: '#/skills',
55
- rerenderOnUiChange: false,
56
- load: async () => {
57
- const mod = await import('./skills-page.js');
58
- return root => mod.renderSkillsPage(root);
59
- },
60
- },
61
- {
62
- id: 'connectors',
63
- routePrefix: '#/connectors',
64
- rerenderOnUiChange: false,
65
- load: async () => {
66
- const mod = await import('./connectors.js');
67
- return root => mod.renderConnectorsPage(root);
68
- },
69
- },
70
- {
71
- id: 'team-manage',
72
- routePrefix: '#/team/manage',
73
- // Team pages are render-once React scaffolds around the existing
74
- // federation controller, so ui changes full-remount translated subtrees.
75
- rerenderOnUiChange: true,
76
- load: async () => {
77
- const mod = await import('./team-federation-page.js');
78
- return root => mod.renderTeamManagePage(root);
79
- },
80
- },
81
- {
82
- id: 'team',
83
- routePrefix: '#/team',
84
- // Team pages are render-once React scaffolds around the existing
85
- // federation controller, so ui changes full-remount translated subtrees.
86
- rerenderOnUiChange: true,
87
- load: async () => {
88
- const mod = await import('./team-federation-page.js');
89
- return root => mod.renderTeamFederationPage(root);
90
- },
91
- },
92
- {
93
- id: 'roles-profile',
94
- routePrefix: '#/roles/profile',
95
- // Roles still uses a render-once React scaffold around the imperative
96
- // editor/profile controller, so ui changes full-remount it until the
97
- // controller-owned subtrees become reactive components.
98
- rerenderOnUiChange: true,
1
+ function pageRoute(id, routePrefix, importer, renderName, rerenderOnUiChange = false) {
2
+ return {
3
+ id,
4
+ routePrefix,
5
+ rerenderOnUiChange,
99
6
  load: async () => {
100
- const mod = await import('./roles-page.js');
101
- return root => mod.renderRoleProfilesPage(root);
7
+ const mod = await importer();
8
+ return mod[renderName];
102
9
  },
103
- },
104
- {
105
- id: 'roles',
106
- routePrefix: '#/roles',
107
- // Roles still uses a render-once React scaffold around the imperative
108
- // editor/profile controller, so ui changes full-remount it until the
109
- // controller-owned subtrees become reactive components.
110
- rerenderOnUiChange: true,
111
- load: async () => {
112
- const mod = await import('./roles-page.js');
113
- return root => mod.renderRolesPage(root);
114
- },
115
- },
116
- {
117
- id: 'schedules',
118
- routePrefix: '#/schedules',
119
- rerenderOnUiChange: false,
120
- load: async () => {
121
- const mod = await import('./schedules.js');
122
- return root => mod.renderSchedulesPage(root);
123
- },
124
- },
125
- {
126
- id: 'whiteboards',
127
- routePrefix: '#/whiteboards',
128
- rerenderOnUiChange: false,
129
- load: async () => {
130
- const mod = await import('./whiteboards-page.js');
131
- return root => mod.renderWhiteboardsPage(root);
132
- },
133
- },
134
- {
135
- id: 'monitoring',
136
- routePrefix: '#/monitoring',
137
- rerenderOnUiChange: false,
138
- load: async () => {
139
- const mod = await import('./monitoring-page.js');
140
- return root => mod.renderMonitoringPage(root);
141
- },
142
- },
143
- {
144
- id: 'sessions',
145
- routePrefix: '#/sessions',
146
- // Sessions is a render-once React scaffold around the legacy imperative
147
- // controller. Keep full remounts on locale/theme changes until the
148
- // controller is split into reactive components, so translated scaffold text
149
- // and command-owned DOM stay in sync without partial React re-renders.
150
- rerenderOnUiChange: true,
151
- load: async () => {
152
- const mod = await import('./sessions-page.js');
153
- return root => mod.renderSessionsPage(root);
154
- },
155
- },
156
- {
157
- id: 'monitor-room',
158
- routePrefix: '#/monitor-room',
159
- rerenderOnUiChange: true,
160
- load: async () => {
161
- const mod = await import('./monitor-room.js');
162
- return root => mod.renderMonitorRoomPage(root);
163
- },
164
- },
165
- {
166
- id: 'office',
167
- routePrefix: '#/office',
168
- rerenderOnUiChange: false,
169
- load: async () => {
170
- const mod = await import('./office-page.js');
171
- return root => mod.renderOfficePage(root);
172
- },
173
- },
174
- {
175
- id: 'insights',
176
- routePrefix: '#/insights',
177
- // Insights is a render-once React scaffold around a large imperative
178
- // workbench controller; remount on ui changes until that controller is
179
- // split into reactive components.
180
- rerenderOnUiChange: true,
181
- load: async () => {
182
- const mod = await import('./insights-page.js');
183
- return root => mod.renderInsightsPage(root);
184
- },
185
- },
10
+ };
11
+ }
12
+ export const dashboardRoutes = [
13
+ pageRoute('legacy-workflow', '#/legacy-workflow', () => import('./legacy-workflow-page.js'), 'renderLegacyWorkflowPage'),
14
+ pageRoute('workflows', '#/workflows', () => import('./v3-page.js'), 'renderV3RunsPage'),
15
+ pageRoute('groups', '#/groups', () => import('./groups-page.js'), 'renderGroupsPage'),
16
+ pageRoute('settings', '#/settings', () => import('./settings-page.js'), 'renderSettingsPage'),
17
+ pageRoute('bot-defaults', '#/bot-defaults', () => import('./bot-defaults-page.js'), 'renderBotDefaultsPage'),
18
+ pageRoute('skills', '#/skills', () => import('./skills-page.js'), 'renderSkillsPage'),
19
+ pageRoute('connectors-logs', '#/connectors/logs', () => import('./connectors-page.js'), 'renderConnectorsLogsPage'),
20
+ pageRoute('webhook-logs', '#/webhook-logs', () => import('./connectors-page.js'), 'renderConnectorsLogsPage'),
21
+ pageRoute('connectors', '#/connectors', () => import('./connectors-page.js'), 'renderConnectorsPage'),
22
+ pageRoute('team-manage', '#/team/manage', () => import('./team-federation-page.js'), 'renderTeamManagePage'),
23
+ pageRoute('team', '#/team', () => import('./team-federation-page.js'), 'renderTeamFederationPage'),
24
+ pageRoute('roles-profile', '#/roles/profile', () => import('./roles-page.js'), 'renderRoleProfilesPage'),
25
+ pageRoute('roles', '#/roles', () => import('./roles-page.js'), 'renderRolesPage'),
26
+ pageRoute('schedules', '#/schedules', () => import('./schedules-page.js'), 'renderSchedulesPage'),
27
+ pageRoute('whiteboards', '#/whiteboards', () => import('./whiteboards-page.js'), 'renderWhiteboardsPage'),
28
+ pageRoute('monitoring', '#/monitoring', () => import('./monitoring-page.js'), 'renderMonitoringPage'),
29
+ pageRoute('sessions', '#/sessions', () => import('./sessions-page.js'), 'renderSessionsPage'),
30
+ pageRoute('monitor-room', '#/monitor-room', () => import('./monitor-room.js'), 'renderMonitorRoomPage', true),
31
+ pageRoute('office', '#/office', () => import('./office-page.js'), 'renderOfficePage'),
32
+ pageRoute('insights', '#/insights', () => import('./insights-page.js'), 'renderInsightsPage'),
186
33
  ];
187
34
  export function findDashboardRoute(hash) {
188
35
  return dashboardRoutes.find(route => route.exact ? hash === route.routePrefix : hash.startsWith(route.routePrefix));
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-routes.js","sourceRoot":"","sources":["../../../src/dashboard/web/dashboard-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-routes.js","sourceRoot":"","sources":["../../../src/dashboard/web/dashboard-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initFloatingScrollbars(root: HTMLElement): void;
2
+ //# sourceMappingURL=floating-scrollbars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floating-scrollbars.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/floating-scrollbars.ts"],"names":[],"mappings":"AA0OA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAyC9D"}
@@ -0,0 +1,264 @@
1
+ const SCROLLABLE_OVERFLOW = new Set(['auto', 'scroll', 'overlay']);
2
+ const BAR_MIN = 28;
3
+ const BAR_INSET = 3;
4
+ const BAR_THICKNESS = 6;
5
+ let initialized = false;
6
+ let rootEl = null;
7
+ let layerByHost = new WeakMap();
8
+ let bars = new Map();
9
+ let resizeObserver = null;
10
+ let mutationObserver = null;
11
+ let frame = 0;
12
+ let mutationTimer = 0;
13
+ let hoveredTarget = null;
14
+ function hostFor(target) {
15
+ return target.closest('dialog[open]') ?? document.body;
16
+ }
17
+ function layerFor(host) {
18
+ const existing = layerByHost.get(host);
19
+ if (existing?.isConnected)
20
+ return existing;
21
+ const layer = document.createElement('div');
22
+ layer.className = 'floating-scrollbar-layer';
23
+ layer.setAttribute('aria-hidden', 'true');
24
+ host.appendChild(layer);
25
+ layerByHost.set(host, layer);
26
+ return layer;
27
+ }
28
+ function overflowAllowsScroll(value) {
29
+ return SCROLLABLE_OVERFLOW.has(value);
30
+ }
31
+ function canScroll(target, axis) {
32
+ const style = getComputedStyle(target);
33
+ const overflow = axis === 'y' ? style.overflowY : style.overflowX;
34
+ if (!overflowAllowsScroll(overflow))
35
+ return false;
36
+ if (axis === 'y')
37
+ return target.scrollHeight - target.clientHeight > 1;
38
+ return target.scrollWidth - target.clientWidth > 1;
39
+ }
40
+ function isVisible(target) {
41
+ if (!target.isConnected || target.closest('[hidden]'))
42
+ return false;
43
+ const rect = target.getBoundingClientRect();
44
+ return rect.width > 0 && rect.height > 0 && rect.bottom > 0 && rect.right > 0 && rect.top < window.innerHeight && rect.left < window.innerWidth;
45
+ }
46
+ function readTargets(root) {
47
+ const nodes = [root, ...Array.from(root.querySelectorAll('*'))];
48
+ return nodes.filter(node => isVisible(node) && (canScroll(node, 'x') || canScroll(node, 'y')));
49
+ }
50
+ function removeBar(bar) {
51
+ if (bar.hideTimer !== undefined)
52
+ window.clearTimeout(bar.hideTimer);
53
+ bar.track.remove();
54
+ }
55
+ function getBar(target, axis) {
56
+ let entry = bars.get(target);
57
+ if (!entry) {
58
+ entry = {};
59
+ bars.set(target, entry);
60
+ }
61
+ const current = entry[axis];
62
+ const host = hostFor(target);
63
+ const layer = layerFor(host);
64
+ if (current?.track.parentElement === layer)
65
+ return current;
66
+ if (current)
67
+ removeBar(current);
68
+ const track = document.createElement('div');
69
+ const thumb = document.createElement('div');
70
+ track.className = `floating-scrollbar floating-scrollbar-${axis}`;
71
+ thumb.className = 'floating-scrollbar-thumb';
72
+ track.appendChild(thumb);
73
+ layer.appendChild(track);
74
+ const bar = { target, axis, track, thumb, hideTimer: undefined };
75
+ entry[axis] = bar;
76
+ return bar;
77
+ }
78
+ function showBar(bar, sticky = false) {
79
+ bar.track.classList.add('is-visible');
80
+ if (bar.hideTimer !== undefined)
81
+ window.clearTimeout(bar.hideTimer);
82
+ bar.hideTimer = sticky
83
+ ? undefined
84
+ : window.setTimeout(() => {
85
+ bar.track.classList.remove('is-visible', 'is-active');
86
+ bar.hideTimer = undefined;
87
+ }, 900);
88
+ }
89
+ function updateBar(bar) {
90
+ const { target, axis, track, thumb } = bar;
91
+ const rect = target.getBoundingClientRect();
92
+ if (axis === 'y') {
93
+ const top = Math.max(0, rect.top + BAR_INSET);
94
+ const bottom = Math.min(window.innerHeight, rect.bottom - BAR_INSET);
95
+ const trackLength = Math.max(0, bottom - top);
96
+ if (trackLength < BAR_MIN || target.scrollHeight <= target.clientHeight) {
97
+ track.hidden = true;
98
+ return;
99
+ }
100
+ const thumbLength = Math.max(BAR_MIN, Math.round(trackLength * target.clientHeight / target.scrollHeight));
101
+ const maxOffset = Math.max(1, target.scrollHeight - target.clientHeight);
102
+ const thumbOffset = Math.round((trackLength - thumbLength) * target.scrollTop / maxOffset);
103
+ track.hidden = false;
104
+ track.style.left = `${Math.min(window.innerWidth - BAR_THICKNESS - BAR_INSET, Math.max(BAR_INSET, rect.right - BAR_THICKNESS - BAR_INSET))}px`;
105
+ track.style.top = `${top}px`;
106
+ track.style.width = `${BAR_THICKNESS}px`;
107
+ track.style.height = `${trackLength}px`;
108
+ thumb.style.width = '100%';
109
+ thumb.style.height = `${thumbLength}px`;
110
+ thumb.style.transform = `translate3d(0, ${thumbOffset}px, 0)`;
111
+ return;
112
+ }
113
+ const left = Math.max(0, rect.left + BAR_INSET);
114
+ const right = Math.min(window.innerWidth, rect.right - BAR_INSET);
115
+ const trackLength = Math.max(0, right - left);
116
+ if (trackLength < BAR_MIN || target.scrollWidth <= target.clientWidth) {
117
+ track.hidden = true;
118
+ return;
119
+ }
120
+ const thumbLength = Math.max(BAR_MIN, Math.round(trackLength * target.clientWidth / target.scrollWidth));
121
+ const maxOffset = Math.max(1, target.scrollWidth - target.clientWidth);
122
+ const thumbOffset = Math.round((trackLength - thumbLength) * target.scrollLeft / maxOffset);
123
+ track.hidden = false;
124
+ track.style.left = `${left}px`;
125
+ track.style.top = `${Math.min(window.innerHeight - BAR_THICKNESS - BAR_INSET, Math.max(BAR_INSET, rect.bottom - BAR_THICKNESS - BAR_INSET))}px`;
126
+ track.style.width = `${trackLength}px`;
127
+ track.style.height = `${BAR_THICKNESS}px`;
128
+ thumb.style.width = `${thumbLength}px`;
129
+ thumb.style.height = '100%';
130
+ thumb.style.transform = `translate3d(${thumbOffset}px, 0, 0)`;
131
+ }
132
+ function scheduleUpdate() {
133
+ if (frame)
134
+ return;
135
+ frame = window.requestAnimationFrame(() => {
136
+ frame = 0;
137
+ updateFloatingScrollbars();
138
+ });
139
+ }
140
+ // Structural churn (the React shell re-renders on every SSE tick) is coalesced on a short
141
+ // timer so the full-tree rescan in readTargets() runs at most ~once per 120ms instead of on
142
+ // every animation frame during activity. Scroll/resize stay on the immediate rAF path.
143
+ function scheduleRescan() {
144
+ if (mutationTimer)
145
+ return;
146
+ mutationTimer = window.setTimeout(() => {
147
+ mutationTimer = 0;
148
+ scheduleUpdate();
149
+ }, 120);
150
+ }
151
+ function updateFloatingScrollbars() {
152
+ const root = rootEl;
153
+ if (!root)
154
+ return;
155
+ const targets = new Set(readTargets(root));
156
+ for (const [target, entry] of bars) {
157
+ if (targets.has(target))
158
+ continue;
159
+ if (entry.x)
160
+ removeBar(entry.x);
161
+ if (entry.y)
162
+ removeBar(entry.y);
163
+ bars.delete(target);
164
+ }
165
+ for (const target of targets) {
166
+ const active = target === hoveredTarget;
167
+ for (const axis of ['x', 'y']) {
168
+ const entry = bars.get(target);
169
+ if (!canScroll(target, axis)) {
170
+ const bar = entry?.[axis];
171
+ if (bar) {
172
+ removeBar(bar);
173
+ delete entry?.[axis];
174
+ }
175
+ continue;
176
+ }
177
+ const bar = getBar(target, axis);
178
+ updateBar(bar);
179
+ if (active)
180
+ showBar(bar, true);
181
+ }
182
+ }
183
+ }
184
+ function markScrollTarget(target) {
185
+ if (!(target instanceof HTMLElement))
186
+ return;
187
+ const entry = bars.get(target);
188
+ if (!entry)
189
+ return;
190
+ for (const bar of Object.values(entry)) {
191
+ if (!bar)
192
+ continue;
193
+ bar.track.classList.add('is-active');
194
+ showBar(bar);
195
+ }
196
+ }
197
+ function scrollableAncestor(node) {
198
+ for (let current = node; current; current = current.parentElement) {
199
+ if (!(current instanceof HTMLElement))
200
+ continue;
201
+ if (bars.has(current))
202
+ return current;
203
+ }
204
+ return null;
205
+ }
206
+ function setHoveredTarget(next) {
207
+ if (hoveredTarget === next)
208
+ return;
209
+ const previous = hoveredTarget ? bars.get(hoveredTarget) : undefined;
210
+ hoveredTarget = next;
211
+ if (previous) {
212
+ for (const bar of Object.values(previous)) {
213
+ bar?.track.classList.remove('is-visible');
214
+ }
215
+ }
216
+ const current = next ? bars.get(next) : undefined;
217
+ if (current) {
218
+ for (const bar of Object.values(current)) {
219
+ if (bar)
220
+ showBar(bar, true);
221
+ }
222
+ }
223
+ }
224
+ export function initFloatingScrollbars(root) {
225
+ if (initialized)
226
+ return;
227
+ initialized = true;
228
+ rootEl = root;
229
+ document.documentElement.classList.add('floating-scrollbars-on');
230
+ resizeObserver = typeof ResizeObserver === 'undefined'
231
+ ? null
232
+ : new ResizeObserver(scheduleUpdate);
233
+ resizeObserver?.observe(root);
234
+ mutationObserver = new MutationObserver(records => {
235
+ // Skip mutations we cause ourselves (writing to the scrollbar layer/tracks); otherwise
236
+ // updateBar's style/class writes on a layer mounted inside an open <dialog> (which lives
237
+ // in the observed subtree) would re-trigger the observer → a self-sustaining rAF loop.
238
+ for (const record of records) {
239
+ const node = record.target;
240
+ if (node instanceof Element && node.closest('.floating-scrollbar-layer'))
241
+ continue;
242
+ scheduleRescan();
243
+ return;
244
+ }
245
+ });
246
+ mutationObserver.observe(root, {
247
+ attributes: true,
248
+ attributeFilter: ['class', 'style', 'hidden', 'open'],
249
+ childList: true,
250
+ subtree: true,
251
+ });
252
+ document.addEventListener('scroll', event => {
253
+ markScrollTarget(event.target);
254
+ scheduleUpdate();
255
+ }, true);
256
+ window.addEventListener('resize', scheduleUpdate);
257
+ window.addEventListener('hashchange', scheduleUpdate);
258
+ document.addEventListener('pointermove', event => {
259
+ setHoveredTarget(scrollableAncestor(document.elementFromPoint(event.clientX, event.clientY)));
260
+ });
261
+ document.addEventListener('pointerleave', () => setHoveredTarget(null));
262
+ scheduleUpdate();
263
+ }
264
+ //# sourceMappingURL=floating-scrollbars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floating-scrollbars.js","sourceRoot":"","sources":["../../../src/dashboard/web/floating-scrollbars.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface GroupBot {
2
+ larkAppId: string;
3
+ botName?: string;
4
+ botAvatarUrl?: string;
5
+ }
6
+ export interface GroupMemberBot extends GroupBot {
7
+ inChat: boolean;
8
+ hasRole?: boolean;
9
+ error?: unknown;
10
+ oncallChat?: {
11
+ workingDir?: string;
12
+ } | null;
13
+ }
14
+ export interface GroupChat {
15
+ chatId: string;
16
+ name?: string;
17
+ ownerId?: string | null;
18
+ avatar?: string;
19
+ memberBots: GroupMemberBot[];
20
+ }
21
+ export interface GroupsSnapshot {
22
+ chats: GroupChat[];
23
+ bots: GroupBot[];
24
+ }
25
+ export interface GroupFilters {
26
+ q: string;
27
+ missingOnly: boolean;
28
+ }
29
+ export interface FetchGroupsSnapshotOptions {
30
+ cacheMs?: number;
31
+ force?: boolean;
32
+ }
33
+ export declare const emptyGroupsSnapshot: GroupsSnapshot;
34
+ export declare function primeGroupsSnapshotCache(snapshot: GroupsSnapshot): void;
35
+ export declare function fetchGroupsSnapshot(options?: FetchGroupsSnapshotOptions): Promise<GroupsSnapshot>;
36
+ //# sourceMappingURL=groups-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups-api.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/groups-api.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAwC,CAAC;AAe3E,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAGvE;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,cAAc,CAAC,CAyB3G"}
@@ -0,0 +1,44 @@
1
+ export const emptyGroupsSnapshot = { chats: [], bots: [] };
2
+ let cachedSnapshot = emptyGroupsSnapshot;
3
+ let cachedAt = 0;
4
+ let inFlight = null;
5
+ let requestSeq = 0;
6
+ let latestRequestSeq = 0;
7
+ function normalizeGroupsSnapshot(body) {
8
+ return {
9
+ chats: Array.isArray(body?.chats) ? body.chats : [],
10
+ bots: Array.isArray(body?.bots) ? body.bots : [],
11
+ };
12
+ }
13
+ export function primeGroupsSnapshotCache(snapshot) {
14
+ cachedSnapshot = snapshot;
15
+ cachedAt = Date.now();
16
+ }
17
+ export async function fetchGroupsSnapshot(options = {}) {
18
+ const cacheMs = options.cacheMs ?? 3000;
19
+ const now = Date.now();
20
+ if (!options.force && cachedAt > 0 && now - cachedAt <= cacheMs)
21
+ return cachedSnapshot;
22
+ if (!options.force && inFlight)
23
+ return inFlight;
24
+ const seq = ++requestSeq;
25
+ latestRequestSeq = seq;
26
+ const request = (async () => {
27
+ const r = await fetch('/api/groups');
28
+ const body = await r.json().catch(() => ({}));
29
+ if (!r.ok)
30
+ throw new Error(`HTTP ${r.status}`);
31
+ const snapshot = normalizeGroupsSnapshot(body);
32
+ if (seq === latestRequestSeq)
33
+ primeGroupsSnapshotCache(snapshot);
34
+ return snapshot;
35
+ })();
36
+ if (!options.force) {
37
+ inFlight = request.finally(() => {
38
+ inFlight = null;
39
+ });
40
+ return inFlight;
41
+ }
42
+ return request;
43
+ }
44
+ //# sourceMappingURL=groups-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups-api.js","sourceRoot":"","sources":["../../../src/dashboard/web/groups-api.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,mBAAmB,GAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAE3E,IAAI,cAAc,GAAmB,mBAAmB,CAAC;AACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAI,QAAQ,GAAmC,IAAI,CAAC;AACpD,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,SAAS,uBAAuB,CAAC,IAAS;IACxC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAC,CAAC,EAAE;QAClE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC/D,cAAc,GAAG,QAAQ,CAAC;IAC1B,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAsC,EAAE;IAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO;QAAE,OAAO,cAAc,CAAC;IACvF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAEhD,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC;IACzB,gBAAgB,GAAG,GAAG,CAAC;IACvB,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,gBAAgB;YAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"groups-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/groups-page.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA8CrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAEhE"}
1
+ {"version":3,"file":"groups-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/groups-page.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAo5CrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAEhE"}