botmux 2.9.0 → 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.
- package/README.en.md +140 -76
- package/README.md +134 -75
- package/dist/adapters/backend/pty-backend.d.ts +6 -0
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +10 -0
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +11 -0
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -0
- package/dist/adapters/backend/session-backend-selector.js +26 -0
- package/dist/adapters/backend/session-backend-selector.js.map +1 -0
- package/dist/adapters/backend/tmux-backend.d.ts +80 -3
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +301 -49
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +100 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -0
- package/dist/adapters/backend/tmux-pipe-backend.js +473 -0
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -0
- package/dist/adapters/cli/aiden.d.ts.map +1 -1
- package/dist/adapters/cli/aiden.js +5 -0
- package/dist/adapters/cli/aiden.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts +40 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +470 -49
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +191 -9
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +94 -17
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +2 -2
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +7 -5
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +38 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/autostart.d.ts +14 -0
- package/dist/autostart.d.ts.map +1 -0
- package/dist/autostart.js +357 -0
- package/dist/autostart.js.map +1 -0
- package/dist/bot-registry.d.ts +29 -3
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +91 -12
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/arg-utils.d.ts +11 -0
- package/dist/cli/arg-utils.d.ts.map +1 -0
- package/dist/cli/arg-utils.js +25 -0
- package/dist/cli/arg-utils.js.map +1 -0
- package/dist/cli/create-group-resolver.d.ts +32 -0
- package/dist/cli/create-group-resolver.d.ts.map +1 -0
- package/dist/cli/create-group-resolver.js +70 -0
- package/dist/cli/create-group-resolver.js.map +1 -0
- package/dist/cli/quoted-render.d.ts +30 -0
- package/dist/cli/quoted-render.d.ts.map +1 -0
- package/dist/cli/quoted-render.js +29 -0
- package/dist/cli/quoted-render.js.map +1 -0
- package/dist/cli.js +916 -272
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -8
- package/dist/config.js.map +1 -1
- package/dist/core/command-handler.d.ts +43 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +167 -64
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-events.d.ts +57 -0
- package/dist/core/dashboard-events.d.ts.map +1 -0
- package/dist/core/dashboard-events.js +23 -0
- package/dist/core/dashboard-events.js.map +1 -0
- package/dist/core/dashboard-ipc-server.d.ts +43 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -0
- package/dist/core/dashboard-ipc-server.js +481 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -0
- package/dist/core/dashboard-locate.d.ts +20 -0
- package/dist/core/dashboard-locate.d.ts.map +1 -0
- package/dist/core/dashboard-locate.js +26 -0
- package/dist/core/dashboard-locate.js.map +1 -0
- package/dist/core/dashboard-rows.d.ts +31 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -0
- package/dist/core/dashboard-rows.js +65 -0
- package/dist/core/dashboard-rows.js.map +1 -0
- package/dist/core/inherit-peer.d.ts +14 -0
- package/dist/core/inherit-peer.d.ts.map +1 -0
- package/dist/core/inherit-peer.js +32 -0
- package/dist/core/inherit-peer.js.map +1 -0
- package/dist/core/scheduler.d.ts +24 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +93 -2
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/session-activity.d.ts +3 -0
- package/dist/core/session-activity.d.ts.map +1 -0
- package/dist/core/session-activity.js +20 -0
- package/dist/core/session-activity.js.map +1 -0
- package/dist/core/session-discovery.d.ts +39 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +114 -21
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts +72 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +396 -106
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +27 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +72 -3
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +459 -38
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +601 -309
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +41 -0
- package/dist/dashboard/aggregator.d.ts.map +1 -0
- package/dist/dashboard/aggregator.js +125 -0
- package/dist/dashboard/aggregator.js.map +1 -0
- package/dist/dashboard/auth.d.ts +23 -0
- package/dist/dashboard/auth.d.ts.map +1 -0
- package/dist/dashboard/auth.js +66 -0
- package/dist/dashboard/auth.js.map +1 -0
- package/dist/dashboard/operator-selector.d.ts +20 -0
- package/dist/dashboard/operator-selector.d.ts.map +1 -0
- package/dist/dashboard/operator-selector.js +39 -0
- package/dist/dashboard/operator-selector.js.map +1 -0
- package/dist/dashboard/registry.d.ts +35 -0
- package/dist/dashboard/registry.d.ts.map +1 -0
- package/dist/dashboard/registry.js +74 -0
- package/dist/dashboard/registry.js.map +1 -0
- package/dist/dashboard/web/app.d.ts +2 -0
- package/dist/dashboard/web/app.d.ts.map +1 -0
- package/dist/dashboard/web/app.js +45 -0
- package/dist/dashboard/web/app.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts +2 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -0
- package/dist/dashboard/web/bot-defaults.js +201 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -0
- package/dist/dashboard/web/groups.d.ts +16 -0
- package/dist/dashboard/web/groups.d.ts.map +1 -0
- package/dist/dashboard/web/groups.js +584 -0
- package/dist/dashboard/web/groups.js.map +1 -0
- package/dist/dashboard/web/schedules.d.ts +2 -0
- package/dist/dashboard/web/schedules.d.ts.map +1 -0
- package/dist/dashboard/web/schedules.js +105 -0
- package/dist/dashboard/web/schedules.js.map +1 -0
- package/dist/dashboard/web/sessions.d.ts +2 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -0
- package/dist/dashboard/web/sessions.js +374 -0
- package/dist/dashboard/web/sessions.js.map +1 -0
- package/dist/dashboard/web/store.d.ts +23 -0
- package/dist/dashboard/web/store.d.ts.map +1 -0
- package/dist/dashboard/web/store.js +82 -0
- package/dist/dashboard/web/store.js.map +1 -0
- package/dist/dashboard-web/app.js +263 -0
- package/dist/dashboard-web/index.html +23 -0
- package/dist/dashboard-web/style.css +93 -0
- package/dist/dashboard.d.ts +2 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +639 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +18 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +70 -9
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +123 -109
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +36 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +119 -13
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +92 -8
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +410 -89
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/forwarded-renderer.d.ts +23 -0
- package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
- package/dist/im/lark/forwarded-renderer.js +105 -0
- package/dist/im/lark/forwarded-renderer.js.map +1 -0
- package/dist/im/lark/md-card.d.ts +73 -0
- package/dist/im/lark/md-card.d.ts.map +1 -0
- package/dist/im/lark/md-card.js +332 -0
- package/dist/im/lark/md-card.js.map +1 -0
- package/dist/im/lark/merge-forward.d.ts +32 -0
- package/dist/im/lark/merge-forward.d.ts.map +1 -0
- package/dist/im/lark/merge-forward.js +110 -0
- package/dist/im/lark/merge-forward.js.map +1 -0
- package/dist/im/lark/message-parser.d.ts +9 -3
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +48 -13
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/quote-hint.d.ts +18 -0
- package/dist/im/lark/quote-hint.d.ts.map +1 -0
- package/dist/im/lark/quote-hint.js +23 -0
- package/dist/im/lark/quote-hint.js.map +1 -0
- package/dist/services/bridge-fallback-gate.d.ts +42 -0
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -0
- package/dist/services/bridge-fallback-gate.js +12 -0
- package/dist/services/bridge-fallback-gate.js.map +1 -0
- package/dist/services/bridge-rotation-policy.d.ts +139 -0
- package/dist/services/bridge-rotation-policy.d.ts.map +1 -0
- package/dist/services/bridge-rotation-policy.js +125 -0
- package/dist/services/bridge-rotation-policy.js.map +1 -0
- package/dist/services/bridge-turn-queue.d.ts +154 -0
- package/dist/services/bridge-turn-queue.d.ts.map +1 -0
- package/dist/services/bridge-turn-queue.js +316 -0
- package/dist/services/bridge-turn-queue.js.map +1 -0
- package/dist/services/chat-first-seen-store.d.ts +27 -0
- package/dist/services/chat-first-seen-store.d.ts.map +1 -0
- package/dist/services/chat-first-seen-store.js +114 -0
- package/dist/services/chat-first-seen-store.js.map +1 -0
- package/dist/services/claude-transcript.d.ts +268 -0
- package/dist/services/claude-transcript.d.ts.map +1 -0
- package/dist/services/claude-transcript.js +798 -0
- package/dist/services/claude-transcript.js.map +1 -0
- package/dist/services/coco-transcript.d.ts +35 -0
- package/dist/services/coco-transcript.d.ts.map +1 -0
- package/dist/services/coco-transcript.js +192 -0
- package/dist/services/coco-transcript.js.map +1 -0
- package/dist/services/codex-bridge-queue.d.ts +56 -0
- package/dist/services/codex-bridge-queue.d.ts.map +1 -0
- package/dist/services/codex-bridge-queue.js +150 -0
- package/dist/services/codex-bridge-queue.js.map +1 -0
- package/dist/services/codex-transcript.d.ts +84 -0
- package/dist/services/codex-transcript.d.ts.map +1 -0
- package/dist/services/codex-transcript.js +298 -0
- package/dist/services/codex-transcript.js.map +1 -0
- package/dist/services/group-creator.d.ts +23 -0
- package/dist/services/group-creator.d.ts.map +1 -0
- package/dist/services/group-creator.js +75 -0
- package/dist/services/group-creator.js.map +1 -0
- package/dist/services/groups-store.d.ts +98 -0
- package/dist/services/groups-store.d.ts.map +1 -0
- package/dist/services/groups-store.js +213 -0
- package/dist/services/groups-store.js.map +1 -0
- package/dist/services/oncall-store.d.ts +80 -8
- package/dist/services/oncall-store.d.ts.map +1 -1
- package/dist/services/oncall-store.js +265 -55
- package/dist/services/oncall-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts +1 -2
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +118 -68
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/schedule-store.d.ts +5 -0
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +77 -1
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/services/session-store.d.ts +22 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +62 -4
- package/dist/services/session-store.js.map +1 -1
- package/dist/setup/bots-store.d.ts +3 -0
- package/dist/setup/bots-store.d.ts.map +1 -0
- package/dist/setup/bots-store.js +24 -0
- package/dist/setup/bots-store.js.map +1 -0
- package/dist/setup/detect-platform.d.ts +14 -0
- package/dist/setup/detect-platform.d.ts.map +1 -0
- package/dist/setup/detect-platform.js +139 -0
- package/dist/setup/detect-platform.js.map +1 -0
- package/dist/setup/ensure-fonts.d.ts +13 -0
- package/dist/setup/ensure-fonts.d.ts.map +1 -0
- package/dist/setup/ensure-fonts.js +225 -0
- package/dist/setup/ensure-fonts.js.map +1 -0
- package/dist/setup/ensure-tmux.d.ts +60 -0
- package/dist/setup/ensure-tmux.d.ts.map +1 -0
- package/dist/setup/ensure-tmux.js +236 -0
- package/dist/setup/ensure-tmux.js.map +1 -0
- package/dist/setup/index.d.ts +9 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +46 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/lark-scopes.json +301 -0
- package/dist/setup/register-app.d.ts +52 -0
- package/dist/setup/register-app.d.ts.map +1 -0
- package/dist/setup/register-app.js +91 -0
- package/dist/setup/register-app.js.map +1 -0
- package/dist/setup/verify-permissions.d.ts +115 -0
- package/dist/setup/verify-permissions.d.ts.map +1 -0
- package/dist/setup/verify-permissions.js +207 -0
- package/dist/setup/verify-permissions.js.map +1 -0
- package/dist/skills/definitions.d.ts +4 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +133 -19
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +3 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +18 -3
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +6 -0
- package/dist/utils/bot-routing.d.ts.map +1 -0
- package/dist/utils/bot-routing.js +50 -0
- package/dist/utils/bot-routing.js.map +1 -0
- package/dist/utils/file-lock.d.ts +2 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +114 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/font-installer.js +1 -1
- package/dist/utils/font-installer.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +6 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +25 -4
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +60 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/render-dimensions.d.ts +48 -0
- package/dist/utils/render-dimensions.d.ts.map +1 -0
- package/dist/utils/render-dimensions.js +55 -0
- package/dist/utils/render-dimensions.js.map +1 -0
- package/dist/utils/screen-analyzer.d.ts.map +1 -1
- package/dist/utils/screen-analyzer.js +24 -0
- package/dist/utils/screen-analyzer.js.map +1 -1
- package/dist/utils/screenshot-renderer.d.ts.map +1 -1
- package/dist/utils/screenshot-renderer.js +67 -23
- package/dist/utils/screenshot-renderer.js.map +1 -1
- package/dist/utils/terminal-renderer.d.ts +16 -0
- package/dist/utils/terminal-renderer.d.ts.map +1 -1
- package/dist/utils/terminal-renderer.js +40 -23
- package/dist/utils/terminal-renderer.js.map +1 -1
- package/dist/utils/transient-snapshot.d.ts +28 -0
- package/dist/utils/transient-snapshot.d.ts.map +1 -0
- package/dist/utils/transient-snapshot.js +96 -0
- package/dist/utils/transient-snapshot.js.map +1 -0
- package/dist/worker.js +2220 -83
- package/dist/worker.js.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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 & Bots 里已经手动绑过的群不动;通过 <code>/oncall unbind</code> 解过绑的群永远不再被自动覆盖。
|
|
16
|
+
</p>
|
|
17
|
+
<div id="bd-list"></div>
|
|
18
|
+
`;
|
|
19
|
+
function escapeHtml(s) {
|
|
20
|
+
return s.replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[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"}
|