botmux 2.9.1 → 2.9.2

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 (330) hide show
  1. package/README.en.md +140 -76
  2. package/README.md +134 -75
  3. package/dist/adapters/backend/pty-backend.d.ts +6 -0
  4. package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
  5. package/dist/adapters/backend/pty-backend.js +10 -0
  6. package/dist/adapters/backend/pty-backend.js.map +1 -1
  7. package/dist/adapters/backend/session-backend-selector.d.ts +11 -0
  8. package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -0
  9. package/dist/adapters/backend/session-backend-selector.js +26 -0
  10. package/dist/adapters/backend/session-backend-selector.js.map +1 -0
  11. package/dist/adapters/backend/tmux-backend.d.ts +80 -3
  12. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  13. package/dist/adapters/backend/tmux-backend.js +301 -49
  14. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  15. package/dist/adapters/backend/tmux-pipe-backend.d.ts +100 -0
  16. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -0
  17. package/dist/adapters/backend/tmux-pipe-backend.js +473 -0
  18. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -0
  19. package/dist/adapters/cli/aiden.d.ts.map +1 -1
  20. package/dist/adapters/cli/aiden.js +5 -0
  21. package/dist/adapters/cli/aiden.js.map +1 -1
  22. package/dist/adapters/cli/claude-code.d.ts +40 -1
  23. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/cli/claude-code.js +470 -49
  25. package/dist/adapters/cli/claude-code.js.map +1 -1
  26. package/dist/adapters/cli/coco.d.ts.map +1 -1
  27. package/dist/adapters/cli/coco.js +191 -9
  28. package/dist/adapters/cli/coco.js.map +1 -1
  29. package/dist/adapters/cli/codex.d.ts.map +1 -1
  30. package/dist/adapters/cli/codex.js +94 -17
  31. package/dist/adapters/cli/codex.js.map +1 -1
  32. package/dist/adapters/cli/shared-hints.d.ts +2 -2
  33. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  34. package/dist/adapters/cli/shared-hints.js +7 -5
  35. package/dist/adapters/cli/shared-hints.js.map +1 -1
  36. package/dist/adapters/cli/types.d.ts +38 -1
  37. package/dist/adapters/cli/types.d.ts.map +1 -1
  38. package/dist/autostart.d.ts +14 -0
  39. package/dist/autostart.d.ts.map +1 -0
  40. package/dist/autostart.js +357 -0
  41. package/dist/autostart.js.map +1 -0
  42. package/dist/bot-registry.d.ts +29 -3
  43. package/dist/bot-registry.d.ts.map +1 -1
  44. package/dist/bot-registry.js +91 -12
  45. package/dist/bot-registry.js.map +1 -1
  46. package/dist/cli/arg-utils.d.ts +11 -0
  47. package/dist/cli/arg-utils.d.ts.map +1 -0
  48. package/dist/cli/arg-utils.js +25 -0
  49. package/dist/cli/arg-utils.js.map +1 -0
  50. package/dist/cli/create-group-resolver.d.ts +32 -0
  51. package/dist/cli/create-group-resolver.d.ts.map +1 -0
  52. package/dist/cli/create-group-resolver.js +70 -0
  53. package/dist/cli/create-group-resolver.js.map +1 -0
  54. package/dist/cli/quoted-render.d.ts +30 -0
  55. package/dist/cli/quoted-render.d.ts.map +1 -0
  56. package/dist/cli/quoted-render.js +29 -0
  57. package/dist/cli/quoted-render.js.map +1 -0
  58. package/dist/cli.js +916 -272
  59. package/dist/cli.js.map +1 -1
  60. package/dist/config.d.ts +6 -0
  61. package/dist/config.d.ts.map +1 -1
  62. package/dist/config.js +18 -8
  63. package/dist/config.js.map +1 -1
  64. package/dist/core/command-handler.d.ts +43 -0
  65. package/dist/core/command-handler.d.ts.map +1 -1
  66. package/dist/core/command-handler.js +167 -64
  67. package/dist/core/command-handler.js.map +1 -1
  68. package/dist/core/dashboard-events.d.ts +57 -0
  69. package/dist/core/dashboard-events.d.ts.map +1 -0
  70. package/dist/core/dashboard-events.js +23 -0
  71. package/dist/core/dashboard-events.js.map +1 -0
  72. package/dist/core/dashboard-ipc-server.d.ts +43 -0
  73. package/dist/core/dashboard-ipc-server.d.ts.map +1 -0
  74. package/dist/core/dashboard-ipc-server.js +481 -0
  75. package/dist/core/dashboard-ipc-server.js.map +1 -0
  76. package/dist/core/dashboard-locate.d.ts +20 -0
  77. package/dist/core/dashboard-locate.d.ts.map +1 -0
  78. package/dist/core/dashboard-locate.js +26 -0
  79. package/dist/core/dashboard-locate.js.map +1 -0
  80. package/dist/core/dashboard-rows.d.ts +31 -0
  81. package/dist/core/dashboard-rows.d.ts.map +1 -0
  82. package/dist/core/dashboard-rows.js +65 -0
  83. package/dist/core/dashboard-rows.js.map +1 -0
  84. package/dist/core/inherit-peer.d.ts +14 -0
  85. package/dist/core/inherit-peer.d.ts.map +1 -0
  86. package/dist/core/inherit-peer.js +32 -0
  87. package/dist/core/inherit-peer.js.map +1 -0
  88. package/dist/core/scheduler.d.ts +24 -0
  89. package/dist/core/scheduler.d.ts.map +1 -1
  90. package/dist/core/scheduler.js +93 -2
  91. package/dist/core/scheduler.js.map +1 -1
  92. package/dist/core/session-activity.d.ts +3 -0
  93. package/dist/core/session-activity.d.ts.map +1 -0
  94. package/dist/core/session-activity.js +20 -0
  95. package/dist/core/session-activity.js.map +1 -0
  96. package/dist/core/session-discovery.d.ts +39 -0
  97. package/dist/core/session-discovery.d.ts.map +1 -1
  98. package/dist/core/session-discovery.js +114 -21
  99. package/dist/core/session-discovery.js.map +1 -1
  100. package/dist/core/session-manager.d.ts +72 -0
  101. package/dist/core/session-manager.d.ts.map +1 -1
  102. package/dist/core/session-manager.js +396 -106
  103. package/dist/core/session-manager.js.map +1 -1
  104. package/dist/core/types.d.ts +27 -2
  105. package/dist/core/types.d.ts.map +1 -1
  106. package/dist/core/types.js +14 -3
  107. package/dist/core/types.js.map +1 -1
  108. package/dist/core/worker-pool.d.ts +72 -3
  109. package/dist/core/worker-pool.d.ts.map +1 -1
  110. package/dist/core/worker-pool.js +459 -38
  111. package/dist/core/worker-pool.js.map +1 -1
  112. package/dist/daemon.d.ts.map +1 -1
  113. package/dist/daemon.js +601 -309
  114. package/dist/daemon.js.map +1 -1
  115. package/dist/dashboard/aggregator.d.ts +41 -0
  116. package/dist/dashboard/aggregator.d.ts.map +1 -0
  117. package/dist/dashboard/aggregator.js +125 -0
  118. package/dist/dashboard/aggregator.js.map +1 -0
  119. package/dist/dashboard/auth.d.ts +23 -0
  120. package/dist/dashboard/auth.d.ts.map +1 -0
  121. package/dist/dashboard/auth.js +66 -0
  122. package/dist/dashboard/auth.js.map +1 -0
  123. package/dist/dashboard/operator-selector.d.ts +20 -0
  124. package/dist/dashboard/operator-selector.d.ts.map +1 -0
  125. package/dist/dashboard/operator-selector.js +39 -0
  126. package/dist/dashboard/operator-selector.js.map +1 -0
  127. package/dist/dashboard/registry.d.ts +35 -0
  128. package/dist/dashboard/registry.d.ts.map +1 -0
  129. package/dist/dashboard/registry.js +74 -0
  130. package/dist/dashboard/registry.js.map +1 -0
  131. package/dist/dashboard/web/app.d.ts +2 -0
  132. package/dist/dashboard/web/app.d.ts.map +1 -0
  133. package/dist/dashboard/web/app.js +45 -0
  134. package/dist/dashboard/web/app.js.map +1 -0
  135. package/dist/dashboard/web/bot-defaults.d.ts +2 -0
  136. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -0
  137. package/dist/dashboard/web/bot-defaults.js +201 -0
  138. package/dist/dashboard/web/bot-defaults.js.map +1 -0
  139. package/dist/dashboard/web/groups.d.ts +16 -0
  140. package/dist/dashboard/web/groups.d.ts.map +1 -0
  141. package/dist/dashboard/web/groups.js +584 -0
  142. package/dist/dashboard/web/groups.js.map +1 -0
  143. package/dist/dashboard/web/schedules.d.ts +2 -0
  144. package/dist/dashboard/web/schedules.d.ts.map +1 -0
  145. package/dist/dashboard/web/schedules.js +105 -0
  146. package/dist/dashboard/web/schedules.js.map +1 -0
  147. package/dist/dashboard/web/sessions.d.ts +2 -0
  148. package/dist/dashboard/web/sessions.d.ts.map +1 -0
  149. package/dist/dashboard/web/sessions.js +374 -0
  150. package/dist/dashboard/web/sessions.js.map +1 -0
  151. package/dist/dashboard/web/store.d.ts +23 -0
  152. package/dist/dashboard/web/store.d.ts.map +1 -0
  153. package/dist/dashboard/web/store.js +82 -0
  154. package/dist/dashboard/web/store.js.map +1 -0
  155. package/dist/dashboard-web/app.js +263 -0
  156. package/dist/dashboard-web/index.html +23 -0
  157. package/dist/dashboard-web/style.css +93 -0
  158. package/dist/dashboard.d.ts +2 -0
  159. package/dist/dashboard.d.ts.map +1 -0
  160. package/dist/dashboard.js +639 -0
  161. package/dist/dashboard.js.map +1 -0
  162. package/dist/im/lark/card-builder.d.ts +18 -1
  163. package/dist/im/lark/card-builder.d.ts.map +1 -1
  164. package/dist/im/lark/card-builder.js +70 -9
  165. package/dist/im/lark/card-builder.js.map +1 -1
  166. package/dist/im/lark/card-handler.d.ts.map +1 -1
  167. package/dist/im/lark/card-handler.js +123 -109
  168. package/dist/im/lark/card-handler.js.map +1 -1
  169. package/dist/im/lark/client.d.ts +35 -0
  170. package/dist/im/lark/client.d.ts.map +1 -1
  171. package/dist/im/lark/client.js +114 -11
  172. package/dist/im/lark/client.js.map +1 -1
  173. package/dist/im/lark/event-dispatcher.d.ts +88 -6
  174. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  175. package/dist/im/lark/event-dispatcher.js +398 -62
  176. package/dist/im/lark/event-dispatcher.js.map +1 -1
  177. package/dist/im/lark/forwarded-renderer.d.ts +23 -0
  178. package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
  179. package/dist/im/lark/forwarded-renderer.js +105 -0
  180. package/dist/im/lark/forwarded-renderer.js.map +1 -0
  181. package/dist/im/lark/md-card.d.ts +73 -0
  182. package/dist/im/lark/md-card.d.ts.map +1 -0
  183. package/dist/im/lark/md-card.js +332 -0
  184. package/dist/im/lark/md-card.js.map +1 -0
  185. package/dist/im/lark/merge-forward.d.ts +32 -0
  186. package/dist/im/lark/merge-forward.d.ts.map +1 -0
  187. package/dist/im/lark/merge-forward.js +110 -0
  188. package/dist/im/lark/merge-forward.js.map +1 -0
  189. package/dist/im/lark/message-parser.d.ts +9 -3
  190. package/dist/im/lark/message-parser.d.ts.map +1 -1
  191. package/dist/im/lark/message-parser.js +48 -13
  192. package/dist/im/lark/message-parser.js.map +1 -1
  193. package/dist/im/lark/quote-hint.d.ts +18 -0
  194. package/dist/im/lark/quote-hint.d.ts.map +1 -0
  195. package/dist/im/lark/quote-hint.js +23 -0
  196. package/dist/im/lark/quote-hint.js.map +1 -0
  197. package/dist/services/bridge-fallback-gate.d.ts +42 -0
  198. package/dist/services/bridge-fallback-gate.d.ts.map +1 -0
  199. package/dist/services/bridge-fallback-gate.js +12 -0
  200. package/dist/services/bridge-fallback-gate.js.map +1 -0
  201. package/dist/services/bridge-rotation-policy.d.ts +139 -0
  202. package/dist/services/bridge-rotation-policy.d.ts.map +1 -0
  203. package/dist/services/bridge-rotation-policy.js +125 -0
  204. package/dist/services/bridge-rotation-policy.js.map +1 -0
  205. package/dist/services/bridge-turn-queue.d.ts +154 -0
  206. package/dist/services/bridge-turn-queue.d.ts.map +1 -0
  207. package/dist/services/bridge-turn-queue.js +316 -0
  208. package/dist/services/bridge-turn-queue.js.map +1 -0
  209. package/dist/services/chat-first-seen-store.d.ts +27 -0
  210. package/dist/services/chat-first-seen-store.d.ts.map +1 -0
  211. package/dist/services/chat-first-seen-store.js +114 -0
  212. package/dist/services/chat-first-seen-store.js.map +1 -0
  213. package/dist/services/claude-transcript.d.ts +268 -0
  214. package/dist/services/claude-transcript.d.ts.map +1 -0
  215. package/dist/services/claude-transcript.js +798 -0
  216. package/dist/services/claude-transcript.js.map +1 -0
  217. package/dist/services/coco-transcript.d.ts +35 -0
  218. package/dist/services/coco-transcript.d.ts.map +1 -0
  219. package/dist/services/coco-transcript.js +192 -0
  220. package/dist/services/coco-transcript.js.map +1 -0
  221. package/dist/services/codex-bridge-queue.d.ts +56 -0
  222. package/dist/services/codex-bridge-queue.d.ts.map +1 -0
  223. package/dist/services/codex-bridge-queue.js +150 -0
  224. package/dist/services/codex-bridge-queue.js.map +1 -0
  225. package/dist/services/codex-transcript.d.ts +84 -0
  226. package/dist/services/codex-transcript.d.ts.map +1 -0
  227. package/dist/services/codex-transcript.js +298 -0
  228. package/dist/services/codex-transcript.js.map +1 -0
  229. package/dist/services/group-creator.d.ts +23 -0
  230. package/dist/services/group-creator.d.ts.map +1 -0
  231. package/dist/services/group-creator.js +75 -0
  232. package/dist/services/group-creator.js.map +1 -0
  233. package/dist/services/groups-store.d.ts +98 -0
  234. package/dist/services/groups-store.d.ts.map +1 -0
  235. package/dist/services/groups-store.js +213 -0
  236. package/dist/services/groups-store.js.map +1 -0
  237. package/dist/services/oncall-store.d.ts +80 -8
  238. package/dist/services/oncall-store.d.ts.map +1 -1
  239. package/dist/services/oncall-store.js +265 -55
  240. package/dist/services/oncall-store.js.map +1 -1
  241. package/dist/services/project-scanner.d.ts +1 -2
  242. package/dist/services/project-scanner.d.ts.map +1 -1
  243. package/dist/services/project-scanner.js +118 -68
  244. package/dist/services/project-scanner.js.map +1 -1
  245. package/dist/services/schedule-store.d.ts +5 -0
  246. package/dist/services/schedule-store.d.ts.map +1 -1
  247. package/dist/services/schedule-store.js +77 -1
  248. package/dist/services/schedule-store.js.map +1 -1
  249. package/dist/services/session-store.d.ts +22 -0
  250. package/dist/services/session-store.d.ts.map +1 -1
  251. package/dist/services/session-store.js +62 -4
  252. package/dist/services/session-store.js.map +1 -1
  253. package/dist/setup/bots-store.d.ts +3 -0
  254. package/dist/setup/bots-store.d.ts.map +1 -0
  255. package/dist/setup/bots-store.js +24 -0
  256. package/dist/setup/bots-store.js.map +1 -0
  257. package/dist/setup/detect-platform.d.ts +14 -0
  258. package/dist/setup/detect-platform.d.ts.map +1 -0
  259. package/dist/setup/detect-platform.js +139 -0
  260. package/dist/setup/detect-platform.js.map +1 -0
  261. package/dist/setup/ensure-fonts.d.ts +13 -0
  262. package/dist/setup/ensure-fonts.d.ts.map +1 -0
  263. package/dist/setup/ensure-fonts.js +225 -0
  264. package/dist/setup/ensure-fonts.js.map +1 -0
  265. package/dist/setup/ensure-tmux.d.ts +60 -0
  266. package/dist/setup/ensure-tmux.d.ts.map +1 -0
  267. package/dist/setup/ensure-tmux.js +236 -0
  268. package/dist/setup/ensure-tmux.js.map +1 -0
  269. package/dist/setup/index.d.ts +9 -0
  270. package/dist/setup/index.d.ts.map +1 -0
  271. package/dist/setup/index.js +46 -0
  272. package/dist/setup/index.js.map +1 -0
  273. package/dist/setup/lark-scopes.json +301 -0
  274. package/dist/setup/register-app.d.ts +52 -0
  275. package/dist/setup/register-app.d.ts.map +1 -0
  276. package/dist/setup/register-app.js +91 -0
  277. package/dist/setup/register-app.js.map +1 -0
  278. package/dist/setup/verify-permissions.d.ts +115 -0
  279. package/dist/setup/verify-permissions.d.ts.map +1 -0
  280. package/dist/setup/verify-permissions.js +207 -0
  281. package/dist/setup/verify-permissions.js.map +1 -0
  282. package/dist/skills/definitions.d.ts +4 -0
  283. package/dist/skills/definitions.d.ts.map +1 -1
  284. package/dist/skills/definitions.js +133 -19
  285. package/dist/skills/definitions.js.map +1 -1
  286. package/dist/skills/installer.d.ts +3 -1
  287. package/dist/skills/installer.d.ts.map +1 -1
  288. package/dist/skills/installer.js +18 -3
  289. package/dist/skills/installer.js.map +1 -1
  290. package/dist/types.d.ts +44 -0
  291. package/dist/types.d.ts.map +1 -1
  292. package/dist/utils/bot-routing.d.ts +6 -0
  293. package/dist/utils/bot-routing.d.ts.map +1 -0
  294. package/dist/utils/bot-routing.js +50 -0
  295. package/dist/utils/bot-routing.js.map +1 -0
  296. package/dist/utils/file-lock.d.ts +2 -0
  297. package/dist/utils/file-lock.d.ts.map +1 -0
  298. package/dist/utils/file-lock.js +114 -0
  299. package/dist/utils/file-lock.js.map +1 -0
  300. package/dist/utils/font-installer.js +1 -1
  301. package/dist/utils/font-installer.js.map +1 -1
  302. package/dist/utils/idle-detector.d.ts +6 -0
  303. package/dist/utils/idle-detector.d.ts.map +1 -1
  304. package/dist/utils/idle-detector.js +25 -4
  305. package/dist/utils/idle-detector.js.map +1 -1
  306. package/dist/utils/logger.d.ts +10 -0
  307. package/dist/utils/logger.d.ts.map +1 -1
  308. package/dist/utils/logger.js +60 -8
  309. package/dist/utils/logger.js.map +1 -1
  310. package/dist/utils/render-dimensions.d.ts +48 -0
  311. package/dist/utils/render-dimensions.d.ts.map +1 -0
  312. package/dist/utils/render-dimensions.js +55 -0
  313. package/dist/utils/render-dimensions.js.map +1 -0
  314. package/dist/utils/screen-analyzer.d.ts.map +1 -1
  315. package/dist/utils/screen-analyzer.js +24 -0
  316. package/dist/utils/screen-analyzer.js.map +1 -1
  317. package/dist/utils/screenshot-renderer.d.ts.map +1 -1
  318. package/dist/utils/screenshot-renderer.js +67 -23
  319. package/dist/utils/screenshot-renderer.js.map +1 -1
  320. package/dist/utils/terminal-renderer.d.ts +16 -0
  321. package/dist/utils/terminal-renderer.d.ts.map +1 -1
  322. package/dist/utils/terminal-renderer.js +40 -23
  323. package/dist/utils/terminal-renderer.js.map +1 -1
  324. package/dist/utils/transient-snapshot.d.ts +28 -0
  325. package/dist/utils/transient-snapshot.d.ts.map +1 -0
  326. package/dist/utils/transient-snapshot.js +96 -0
  327. package/dist/utils/transient-snapshot.js.map +1 -0
  328. package/dist/worker.js +2220 -83
  329. package/dist/worker.js.map +1 -1
  330. package/package.json +12 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/dashboard/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/app.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ // Dashboard SPA entry: hash router + bootstrap + online indicator.
2
+ import { bootstrap, store } from './store.js';
3
+ import { renderSessionsPage } from './sessions.js';
4
+ import { renderSchedulesPage } from './schedules.js';
5
+ import { renderGroupsPage } from './groups.js';
6
+ import { renderBotDefaultsPage } from './bot-defaults.js';
7
+ const root = document.getElementById('root');
8
+ function route() {
9
+ const hash = location.hash || '#/';
10
+ if (hash.startsWith('#/groups'))
11
+ renderGroupsPage(root);
12
+ else if (hash.startsWith('#/bot-defaults'))
13
+ renderBotDefaultsPage(root);
14
+ else if (hash.startsWith('#/schedules'))
15
+ renderSchedulesPage(root);
16
+ else
17
+ renderSessionsPage(root);
18
+ // active nav highlighting
19
+ for (const a of document.querySelectorAll('header nav a')) {
20
+ a.classList.toggle('active', a.getAttribute('href') === (hash || '#/') ||
21
+ (hash === '#/' && a.dataset.route === 'sessions'));
22
+ }
23
+ }
24
+ const statusEl = document.getElementById('status');
25
+ function paintStatus() {
26
+ if (!statusEl)
27
+ return;
28
+ statusEl.textContent = store.online ? '● live' : '● disconnected';
29
+ statusEl.className = 'status ' + (store.online ? 'online' : 'offline');
30
+ }
31
+ store.on(paintStatus);
32
+ paintStatus();
33
+ // esbuild's IIFE bundle does not support top-level await — use an async IIFE.
34
+ void (async () => {
35
+ try {
36
+ await bootstrap();
37
+ }
38
+ catch (err) {
39
+ console.error('botmux dashboard bootstrap failed', err);
40
+ store.setOnline(false);
41
+ }
42
+ window.addEventListener('hashchange', route);
43
+ route();
44
+ })();
45
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/dashboard/web/app.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC;AAE9C,SAAS,KAAK;IACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;SACnD,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACnE,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;;QAC9D,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE9B,0BAA0B;IAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAoB,cAAc,CAAC,EAAE,CAAC;QAC7E,CAAC,CAAC,SAAS,CAAC,MAAM,CAChB,QAAQ,EACR,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC;YACvC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CACpD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACnD,SAAS,WAAW;IAClB,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,QAAQ,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACzE,CAAC;AACD,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AACtB,WAAW,EAAE,CAAC;AAEd,8EAA8E;AAC9E,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,IAAI,CAAC;QACH,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACxD,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,KAAK,EAAE,CAAC;AACV,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function renderBotDefaultsPage(root: HTMLElement): Promise<void>;
2
+ //# sourceMappingURL=bot-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-defaults.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"AA4DA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,iBA4I5D"}
@@ -0,0 +1,201 @@
1
+ // Bot Defaults page: per-bot configuration for "default oncall mode on new
2
+ // chats". Strictly per-bot (no chat × bot matrix here — that lives in the
3
+ // Groups & Bots tab). Saving here only affects NEW group chats first observed
4
+ // after the save; existing chats are left alone, and chats already auto-bound
5
+ // once stay user-controlled.
6
+ let cache = { bots: [] };
7
+ let loadError = null;
8
+ const PAGE_HTML = `
9
+ <form id="bd-filters" class="filters">
10
+ <input type="search" name="q" placeholder="search bot name / app id" />
11
+ <button type="button" id="bd-refresh">Refresh</button>
12
+ </form>
13
+ <p class="hint-warn" style="max-width:760px">
14
+ 开关 ON 后,<strong>所有没有 oncall binding 的群</strong>(包括老群)下一次开新话题会自动绑到下面填的目录;
15
+ Groups &amp; Bots 里已经手动绑过的群不动;通过 <code>/oncall unbind</code> 解过绑的群永远不再被自动覆盖。
16
+ </p>
17
+ <div id="bd-list"></div>
18
+ `;
19
+ function escapeHtml(s) {
20
+ return s.replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c]));
21
+ }
22
+ async function loadBots() {
23
+ try {
24
+ const r = await fetch('/api/bots');
25
+ const body = await r.json().catch(() => ({}));
26
+ if (!r.ok) {
27
+ // Common case: backend was upgraded on disk but the dashboard process
28
+ // hasn't been restarted, so /api/bots isn't registered yet. Surface
29
+ // that instead of throwing — the empty list area is what the user
30
+ // sees as "blank page".
31
+ loadError = body?.error
32
+ ? `HTTP ${r.status}: ${body.error}${body.path ? ` (${body.path})` : ''}`
33
+ : `HTTP ${r.status}`;
34
+ cache = { bots: [] };
35
+ return;
36
+ }
37
+ if (!body || !Array.isArray(body.bots)) {
38
+ loadError = 'unexpected response shape (no `bots` array)';
39
+ cache = { bots: [] };
40
+ return;
41
+ }
42
+ loadError = null;
43
+ cache = body;
44
+ }
45
+ catch (e) {
46
+ loadError = e?.message ?? String(e);
47
+ cache = { bots: [] };
48
+ }
49
+ }
50
+ function fmtSince(since) {
51
+ if (!since)
52
+ return '—';
53
+ const d = new Date(since);
54
+ if (Number.isNaN(d.getTime()))
55
+ return '—';
56
+ return d.toLocaleString();
57
+ }
58
+ export async function renderBotDefaultsPage(root) {
59
+ root.innerHTML = PAGE_HTML;
60
+ const listEl = root.querySelector('#bd-list');
61
+ const form = root.querySelector('#bd-filters');
62
+ const refreshBtn = root.querySelector('#bd-refresh');
63
+ refreshBtn.onclick = async () => {
64
+ refreshBtn.disabled = true;
65
+ try {
66
+ await loadBots();
67
+ rerender();
68
+ }
69
+ finally {
70
+ refreshBtn.disabled = false;
71
+ }
72
+ };
73
+ await loadBots();
74
+ function rerender() {
75
+ const f = new FormData(form);
76
+ const q = (f.get('q') ?? '').toLowerCase();
77
+ const filtered = cache.bots.filter((b) => !q ||
78
+ (b.botName ?? '').toLowerCase().includes(q) ||
79
+ (b.larkAppId ?? '').toLowerCase().includes(q));
80
+ if (loadError) {
81
+ listEl.innerHTML = `<p class="hint-warn">无法加载 bot 列表:${escapeHtml(loadError)}<br>` +
82
+ `常见原因:dashboard / daemon 进程还在跑旧代码,执行 <code>botmux restart</code> 后刷新。</p>`;
83
+ return;
84
+ }
85
+ if (filtered.length === 0) {
86
+ listEl.innerHTML = `<p class="empty">没有在线的 bot。先 \`botmux restart\` 让 daemon 上线。</p>`;
87
+ return;
88
+ }
89
+ listEl.innerHTML = filtered.map(renderBotCard).join('');
90
+ wireCardHandlers();
91
+ }
92
+ function renderBotCard(b) {
93
+ if (b.error) {
94
+ return `<article class="bd-card" data-appid="${escapeHtml(b.larkAppId)}">
95
+ <header><strong>${escapeHtml(b.botName ?? b.larkAppId)}</strong>
96
+ <small>${escapeHtml(b.larkAppId)}</small></header>
97
+ <p class="hint-warn-inline">查询失败:${escapeHtml(b.error)}</p>
98
+ </article>`;
99
+ }
100
+ const def = b.defaultOncall ?? { enabled: false, workingDir: '', since: 0 };
101
+ const enabled = !!def.enabled;
102
+ return `<article class="bd-card" data-appid="${escapeHtml(b.larkAppId)}">
103
+ <header>
104
+ <strong>${escapeHtml(b.botName ?? b.larkAppId)}</strong>
105
+ <small>${escapeHtml(b.larkAppId)}</small>
106
+ </header>
107
+ <div class="bd-body">
108
+ <label class="checkbox-row">
109
+ <input type="checkbox" data-action="toggle" ${enabled ? 'checked' : ''}>
110
+ <strong>默认进 oncall 模式</strong>
111
+ <small>(所有未绑定的群下次开话题自动绑)</small>
112
+ </label>
113
+ <div class="bd-row">
114
+ <label>
115
+ <span>默认工作目录</span>
116
+ <input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
117
+ value="${escapeHtml(def.workingDir ?? '')}" ${enabled ? '' : 'disabled'}>
118
+ </label>
119
+ </div>
120
+ <div class="bd-meta">
121
+ <small>上次启用时间:${escapeHtml(fmtSince(def.since ?? 0))}</small>
122
+ <small>已自动绑定 ${b.autoboundChatCount ?? 0} 个群</small>
123
+ </div>
124
+ <div class="actions">
125
+ <button type="button" data-action="save">Save</button>
126
+ <span class="oncall-status" data-status></span>
127
+ </div>
128
+ </div>
129
+ </article>`;
130
+ }
131
+ function wireCardHandlers() {
132
+ listEl.querySelectorAll('.bd-card').forEach(card => {
133
+ const appId = card.dataset.appid;
134
+ const toggle = card.querySelector('input[data-action=toggle]');
135
+ const input = card.querySelector('input[data-input=workingDir]');
136
+ const saveBtn = card.querySelector('button[data-action=save]');
137
+ const statusEl = card.querySelector('[data-status]');
138
+ if (!toggle || !input || !saveBtn || !statusEl)
139
+ return; // error card
140
+ toggle.addEventListener('change', () => {
141
+ input.disabled = !toggle.checked;
142
+ if (toggle.checked)
143
+ input.focus();
144
+ });
145
+ saveBtn.addEventListener('click', async () => {
146
+ statusEl.textContent = '';
147
+ statusEl.className = 'oncall-status';
148
+ const enabled = toggle.checked;
149
+ const workingDir = input.value.trim();
150
+ if (enabled && !workingDir) {
151
+ statusEl.textContent = '开启时必须填工作目录';
152
+ statusEl.classList.add('hint-warn-inline');
153
+ return;
154
+ }
155
+ saveBtn.disabled = true;
156
+ try {
157
+ const r = await fetch(`/api/bots/${encodeURIComponent(appId)}/default-oncall`, {
158
+ method: 'PUT',
159
+ headers: { 'content-type': 'application/json' },
160
+ body: JSON.stringify({ enabled, workingDir }),
161
+ });
162
+ const body = await r.json().catch(() => ({}));
163
+ if (r.ok && body.ok) {
164
+ const resolvedNote = body.resolvedPath ? ` → ${body.resolvedPath}` : '';
165
+ statusEl.textContent = enabled
166
+ ? `✓ 已开启${resolvedNote}(未绑定的群下次开话题自动 oncall)`
167
+ : '✓ 已关闭(已绑定的群不动)';
168
+ statusEl.classList.add('hint-ok');
169
+ // Patch in-cache snapshot so the next manual Refresh / filter
170
+ // rerender shows the new since/workingDir. We deliberately don't
171
+ // call rerender() here — that would rebuild the card and wipe the
172
+ // success toast the user just saw.
173
+ const cached = cache.bots.find((b) => b.larkAppId === appId);
174
+ if (cached && body.defaultOncall)
175
+ cached.defaultOncall = body.defaultOncall;
176
+ // Update the visible "上次启用时间" line in-place so the user
177
+ // sees the timestamp jump without losing the toast.
178
+ const metaEl = card.querySelector('.bd-meta small:first-child');
179
+ if (metaEl && body.defaultOncall?.since != null) {
180
+ metaEl.textContent = `上次启用时间:${fmtSince(body.defaultOncall.since)}`;
181
+ }
182
+ }
183
+ else {
184
+ statusEl.textContent = `✗ ${body.error ?? r.status}`;
185
+ statusEl.classList.add('hint-warn-inline');
186
+ }
187
+ }
188
+ catch (e) {
189
+ statusEl.textContent = `✗ ${e?.message ?? e}`;
190
+ statusEl.classList.add('hint-warn-inline');
191
+ }
192
+ finally {
193
+ saveBtn.disabled = false;
194
+ }
195
+ });
196
+ });
197
+ }
198
+ rerender();
199
+ form.addEventListener('input', rerender);
200
+ }
201
+ //# sourceMappingURL=bot-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-defaults.js","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** True iff every expected bot id appears in the row's memberBots with
2
+ * inChat:true. Used by refreshUntilSeen to defer committing a canonical
3
+ * snapshot until all invited bots have caught up Lark-side. Exported so
4
+ * tests can exercise the predicate without spinning up jsdom. */
5
+ export declare function allExpectedInChat(row: any, expectedBotIds: Set<string>): boolean;
6
+ /** Render the bot-picker checkboxes shared by "Create new group" and
7
+ * "Add bots". Always iterates `bots` in its given order (the aggregator
8
+ * hands cache.bots back sorted by botIndex), so both modals show the
9
+ * same order. `excludeIds` removes bots that are already in the chat
10
+ * for the Add-bots flow. Exported for tests. */
11
+ export declare function renderBotCheckboxes(bots: Array<{
12
+ larkAppId: string;
13
+ botName?: string;
14
+ }>, excludeIds?: Set<string>): string;
15
+ export declare function renderGroupsPage(root: HTMLElement): Promise<void>;
16
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/groups.ts"],"names":[],"mappings":"AAqCA;;;kEAGkE;AAClE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAOhF;AAED;;;;iDAIiD;AACjD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACpD,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,MAAM,CASR;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,WAAW,iBAyfvD"}