botmux 2.114.0 → 3.1.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.
- package/dist/adapters/backend/herdr-backend.d.ts +9 -7
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +63 -53
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +21 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +16 -5
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +20 -16
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +192 -65
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +39 -2
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +55 -5
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +2 -2
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +9 -3
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts +25 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +79 -9
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +2 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +2 -2
- package/dist/adapters/hook-installer.d.ts +11 -0
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +72 -11
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -4
- 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 -0
- package/dist/config.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +211 -57
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +13 -6
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +5 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +2 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/doc-comment-prompt.d.ts +2 -0
- package/dist/core/doc-comment-prompt.d.ts.map +1 -1
- package/dist/core/doc-comment-prompt.js +30 -0
- package/dist/core/doc-comment-prompt.js.map +1 -1
- package/dist/core/github-auth.d.ts +8 -0
- package/dist/core/github-auth.d.ts.map +1 -0
- package/dist/core/github-auth.js +44 -0
- package/dist/core/github-auth.js.map +1 -0
- package/dist/core/managed-origin-capability.d.ts +7 -0
- package/dist/core/managed-origin-capability.d.ts.map +1 -1
- package/dist/core/managed-origin-capability.js +12 -0
- package/dist/core/managed-origin-capability.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/restart-report.d.ts +7 -1
- package/dist/core/restart-report.d.ts.map +1 -1
- package/dist/core/restart-report.js +19 -5
- package/dist/core/restart-report.js.map +1 -1
- package/dist/core/session-activity.d.ts +8 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +16 -0
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +4 -2
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/update-check.d.ts +11 -0
- package/dist/core/update-check.d.ts.map +1 -1
- package/dist/core/update-check.js +6 -1
- package/dist/core/update-check.js.map +1 -1
- package/dist/core/vc-meeting-prepare-command.d.ts +22 -0
- package/dist/core/vc-meeting-prepare-command.d.ts.map +1 -0
- package/dist/core/vc-meeting-prepare-command.js +50 -0
- package/dist/core/vc-meeting-prepare-command.js.map +1 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +11 -2
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +15 -5
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +555 -41
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/compat.d.ts +19 -0
- package/dist/dashboard/compat.d.ts.map +1 -0
- package/dist/dashboard/compat.js +38 -0
- package/dist/dashboard/compat.js.map +1 -0
- package/dist/dashboard/stale-chunk-module.d.ts +3 -0
- package/dist/dashboard/stale-chunk-module.d.ts.map +1 -0
- package/dist/dashboard/stale-chunk-module.js +55 -0
- package/dist/dashboard/stale-chunk-module.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +64 -2
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +14 -7
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +44 -10
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +1 -1
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +1 -1
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts +19 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +68 -9
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +31 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +82 -0
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/stale-chunk-reload.d.ts +16 -0
- package/dist/dashboard/web/stale-chunk-reload.d.ts.map +1 -0
- package/dist/dashboard/web/stale-chunk-reload.js +51 -0
- package/dist/dashboard/web/stale-chunk-reload.js.map +1 -0
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-SRCBF7Z3.js → bot-defaults-page-KLDCZNLP.js} +5 -5
- package/dist/dashboard-web/chunks/{chunk-NGRUZCXP.js → chunk-EZAW2EPM.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-D2I5F4MY.js → chunk-FMJNOATE.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-3H6MVXXU.js → chunk-KEAOTUL3.js} +7 -7
- package/dist/dashboard-web/chunks/{chunk-77KD4TK2.js → chunk-MLNI5BKE.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-RM3BJVMV.js → connectors-page-O32LFAL5.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-3D4YSYLA.js → groups-page-PSAFIZ6M.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-CRFJKA54.js → insights-page-V23LLATX.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-HLK3XDT2.js → monitor-room-7X5AKYOF.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-E3SNZFFN.js → monitoring-page-CBA3CQYL.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-MKQ2TENK.js → office-page-RL6QSEM7.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-ICFKKRLV.js → overview-page-XQIPO6KH.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-2DFJ7YRU.js → roles-page-ACIWV7QS.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-S4WDIXH5.js → schedules-page-KJDUKOJV.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-2WDWHSP4.js +3 -0
- package/dist/dashboard-web/chunks/{settings-page-OBTE4LYP.js → settings-page-6VX4OUGG.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-CTRQJR47.js → skills-page-WXE3UYLT.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-GICLDKJP.js → team-federation-page-PYTF4FLM.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-DI55IRL5.js → v3-page-G6CD6O3I.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-7KFWMILV.js → whiteboards-page-6SG33GP4.js} +1 -1
- package/dist/dashboard-web/style.css +167 -2
- package/dist/dashboard.js +26 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/main/auto-start.d.ts +17 -0
- package/dist/desktop/main/auto-start.d.ts.map +1 -0
- package/dist/desktop/main/auto-start.js +37 -0
- package/dist/desktop/main/auto-start.js.map +1 -0
- package/dist/desktop/main/dashboard-compat.d.ts +25 -0
- package/dist/desktop/main/dashboard-compat.d.ts.map +1 -0
- package/dist/desktop/main/dashboard-compat.js +117 -0
- package/dist/desktop/main/dashboard-compat.js.map +1 -0
- package/dist/desktop/main/external-runtime.d.ts +29 -0
- package/dist/desktop/main/external-runtime.d.ts.map +1 -0
- package/dist/desktop/main/external-runtime.js +202 -0
- package/dist/desktop/main/external-runtime.js.map +1 -0
- package/dist/desktop/main/ipc.d.ts +20 -0
- package/dist/desktop/main/ipc.d.ts.map +1 -0
- package/dist/desktop/main/ipc.js +241 -0
- package/dist/desktop/main/ipc.js.map +1 -0
- package/dist/desktop/main/log-service.d.ts +4 -0
- package/dist/desktop/main/log-service.d.ts.map +1 -0
- package/dist/desktop/main/log-service.js +53 -0
- package/dist/desktop/main/log-service.js.map +1 -0
- package/dist/desktop/main/login-item.d.ts +10 -0
- package/dist/desktop/main/login-item.d.ts.map +1 -0
- package/dist/desktop/main/login-item.js +11 -0
- package/dist/desktop/main/login-item.js.map +1 -0
- package/dist/desktop/main/node-command.d.ts +22 -0
- package/dist/desktop/main/node-command.d.ts.map +1 -0
- package/dist/desktop/main/node-command.js +56 -0
- package/dist/desktop/main/node-command.js.map +1 -0
- package/dist/desktop/main/paths.d.ts +11 -0
- package/dist/desktop/main/paths.d.ts.map +1 -0
- package/dist/desktop/main/paths.js +13 -0
- package/dist/desktop/main/paths.js.map +1 -0
- package/dist/desktop/main/pm2-apps.d.ts +15 -0
- package/dist/desktop/main/pm2-apps.d.ts.map +1 -0
- package/dist/desktop/main/pm2-apps.js +97 -0
- package/dist/desktop/main/pm2-apps.js.map +1 -0
- package/dist/desktop/main/runtime-service.d.ts +49 -0
- package/dist/desktop/main/runtime-service.d.ts.map +1 -0
- package/dist/desktop/main/runtime-service.js +297 -0
- package/dist/desktop/main/runtime-service.js.map +1 -0
- package/dist/desktop/main/runtime-source.d.ts +17 -0
- package/dist/desktop/main/runtime-source.d.ts.map +1 -0
- package/dist/desktop/main/runtime-source.js +61 -0
- package/dist/desktop/main/runtime-source.js.map +1 -0
- package/dist/desktop/main/tray.d.ts +10 -0
- package/dist/desktop/main/tray.d.ts.map +1 -0
- package/dist/desktop/main/tray.js +27 -0
- package/dist/desktop/main/tray.js.map +1 -0
- package/dist/desktop/main/window.d.ts +16 -0
- package/dist/desktop/main/window.d.ts.map +1 -0
- package/dist/desktop/main/window.js +113 -0
- package/dist/desktop/main/window.js.map +1 -0
- package/dist/desktop/main.d.ts +2 -0
- package/dist/desktop/main.d.ts.map +1 -0
- package/dist/desktop/main.js +175 -0
- package/dist/desktop/main.js.map +1 -0
- package/dist/desktop/preload.d.ts +2 -0
- package/dist/desktop/preload.d.ts.map +1 -0
- package/dist/desktop/preload.js +24 -0
- package/dist/desktop/preload.js.map +1 -0
- package/dist/desktop/renderer/app.d.ts +35 -0
- package/dist/desktop/renderer/app.d.ts.map +1 -0
- package/dist/desktop/renderer/app.js +945 -0
- package/dist/desktop/renderer/app.js.map +1 -0
- package/dist/desktop/renderer/dashboard-url.d.ts +13 -0
- package/dist/desktop/renderer/dashboard-url.d.ts.map +1 -0
- package/dist/desktop/renderer/dashboard-url.js +98 -0
- package/dist/desktop/renderer/dashboard-url.js.map +1 -0
- package/dist/desktop/renderer/runtime-state.d.ts +8 -0
- package/dist/desktop/renderer/runtime-state.d.ts.map +1 -0
- package/dist/desktop/renderer/runtime-state.js +67 -0
- package/dist/desktop/renderer/runtime-state.js.map +1 -0
- package/dist/desktop/shared/types.d.ts +48 -0
- package/dist/desktop/shared/types.d.ts.map +1 -0
- package/dist/desktop/shared/types.js +2 -0
- package/dist/desktop/shared/types.js.map +1 -0
- package/dist/desktop/smoke.d.ts +28 -0
- package/dist/desktop/smoke.d.ts.map +1 -0
- package/dist/desktop/smoke.js +258 -0
- package/dist/desktop/smoke.js.map +1 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +18 -3
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +18 -3
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +11 -2
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +4 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +249 -5
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/forward-followup-buffer.d.ts +26 -0
- package/dist/im/lark/forward-followup-buffer.d.ts.map +1 -0
- package/dist/im/lark/forward-followup-buffer.js +48 -0
- package/dist/im/lark/forward-followup-buffer.js.map +1 -0
- package/dist/im/lark/forward-followup-content.d.ts +6 -0
- package/dist/im/lark/forward-followup-content.d.ts.map +1 -0
- package/dist/im/lark/forward-followup-content.js +46 -0
- package/dist/im/lark/forward-followup-content.js.map +1 -0
- package/dist/im/lark/forward-followup-store.d.ts +9 -0
- package/dist/im/lark/forward-followup-store.d.ts.map +1 -0
- package/dist/im/lark/forward-followup-store.js +48 -0
- package/dist/im/lark/forward-followup-store.js.map +1 -0
- package/dist/im/lark/message-parser.d.ts +1 -1
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +1 -2
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/platform/tunnel-client.js +3 -3
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts +7 -0
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +111 -3
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +15 -2
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/vc-meeting-consumer-isolation.d.ts +7 -5
- package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-isolation.js +7 -5
- package/dist/services/vc-meeting-consumer-isolation.js.map +1 -1
- package/dist/services/vc-meeting-preparations-store.d.ts +22 -0
- package/dist/services/vc-meeting-preparations-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-preparations-store.js +131 -0
- package/dist/services/vc-meeting-preparations-store.js.map +1 -0
- package/dist/services/vc-meeting-runtime-store.d.ts +9 -0
- package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-runtime-store.js +16 -0
- package/dist/services/vc-meeting-runtime-store.js.map +1 -1
- package/dist/setup/ensure-tmux.d.ts.map +1 -1
- package/dist/setup/ensure-tmux.js +9 -11
- package/dist/setup/ensure-tmux.js.map +1 -1
- package/dist/utils/child-env.d.ts +16 -8
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +30 -8
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/daemon-discovery.d.ts +8 -0
- package/dist/utils/daemon-discovery.d.ts.map +1 -1
- package/dist/utils/daemon-discovery.js +19 -0
- package/dist/utils/daemon-discovery.js.map +1 -1
- package/dist/utils/ready-gate.d.ts +9 -3
- package/dist/utils/ready-gate.d.ts.map +1 -1
- package/dist/utils/ready-gate.js +12 -4
- package/dist/utils/ready-gate.js.map +1 -1
- package/dist/utils/version-info.d.ts +25 -0
- package/dist/utils/version-info.d.ts.map +1 -0
- package/dist/utils/version-info.js +48 -0
- package/dist/utils/version-info.js.map +1 -0
- package/dist/worker.js +131 -28
- package/dist/worker.js.map +1 -1
- package/dist/workflows/ops-projection.d.ts.map +1 -1
- package/dist/workflows/ops-projection.js +27 -5
- package/dist/workflows/ops-projection.js.map +1 -1
- package/dist/workflows/v3/distillation-runner.d.ts +4 -0
- package/dist/workflows/v3/distillation-runner.d.ts.map +1 -1
- package/dist/workflows/v3/distillation-runner.js +4 -2
- package/dist/workflows/v3/distillation-runner.js.map +1 -1
- package/package.json +9 -1
- package/dist/dashboard-web/chunks/sessions-page-4XWGUGB5.js +0 -3
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DesktopRuntimeState } from '../shared/types.js';
|
|
2
|
+
import type { RunResult } from './runtime-service.js';
|
|
3
|
+
export type AutoStartLaunchResult = 'started' | 'skipped' | 'failed';
|
|
4
|
+
export interface AutoStartRuntime {
|
|
5
|
+
getState(): Promise<DesktopRuntimeState>;
|
|
6
|
+
start(): Promise<RunResult>;
|
|
7
|
+
}
|
|
8
|
+
export interface AutoStartMonitor {
|
|
9
|
+
refresh(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function shouldAutoStartCliRuntime(state: DesktopRuntimeState): boolean;
|
|
12
|
+
export declare function autoStartCliRuntimeOnLaunch(args: {
|
|
13
|
+
runtime: AutoStartRuntime;
|
|
14
|
+
monitor?: AutoStartMonitor;
|
|
15
|
+
warn?: (message: string) => void;
|
|
16
|
+
}): Promise<AutoStartLaunchResult>;
|
|
17
|
+
//# sourceMappingURL=auto-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-start.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/auto-start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAK7E;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgBjC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function shouldAutoStartCliRuntime(state) {
|
|
2
|
+
// Only a stopped, selected CLI runtime is safe to start automatically.
|
|
3
|
+
// Setup, degraded, and handoff states need user-visible recovery instead.
|
|
4
|
+
const cliSource = state.runtimeSource === 'global-cli';
|
|
5
|
+
return state.status === 'stopped' && state.runtimeManaged && cliSource;
|
|
6
|
+
}
|
|
7
|
+
export async function autoStartCliRuntimeOnLaunch(args) {
|
|
8
|
+
try {
|
|
9
|
+
const state = await args.runtime.getState();
|
|
10
|
+
if (!shouldAutoStartCliRuntime(state))
|
|
11
|
+
return 'skipped';
|
|
12
|
+
const result = await args.runtime.start();
|
|
13
|
+
await refreshAfterLaunchAction(args.monitor, args.warn);
|
|
14
|
+
if (result.code !== 0) {
|
|
15
|
+
args.warn?.(`CLI auto-start failed: ${formatRunResult(result)}`);
|
|
16
|
+
return 'failed';
|
|
17
|
+
}
|
|
18
|
+
return 'started';
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
args.warn?.(`CLI auto-start failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
22
|
+
return 'failed';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function refreshAfterLaunchAction(monitor, warn) {
|
|
26
|
+
try {
|
|
27
|
+
await monitor?.refresh();
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
warn?.(`CLI state refresh after auto-start failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function formatRunResult(result) {
|
|
34
|
+
const message = result.stderr.trim() || result.stdout.trim();
|
|
35
|
+
return message || `exit code ${result.code}`;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=auto-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-start.js","sourceRoot":"","sources":["../../../src/desktop/main/auto-start.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB,CAAC,KAA0B;IAClE,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,KAAK,YAAY,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,IAAI,SAAS,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAIjD;IACC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,OAAqC,EACrC,IAA6C;IAE7C,IAAI,CAAC;QACH,MAAM,OAAO,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,EAAE,CAAC,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7D,OAAO,OAAO,IAAI,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DashboardLocateResult } from '../shared/types.js';
|
|
2
|
+
type DashboardCompatFailureReason = Extract<DashboardLocateResult, {
|
|
3
|
+
ok: false;
|
|
4
|
+
}>['reason'];
|
|
5
|
+
export type DashboardCompatResult = {
|
|
6
|
+
ok: true;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
reason: DashboardCompatFailureReason;
|
|
10
|
+
message: string;
|
|
11
|
+
};
|
|
12
|
+
export type DashboardCompatFetch = (input: string, init?: {
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
}) => Promise<{
|
|
15
|
+
ok: boolean;
|
|
16
|
+
status: number;
|
|
17
|
+
json(): Promise<unknown>;
|
|
18
|
+
}>;
|
|
19
|
+
export interface ValidateDashboardCompatOptions {
|
|
20
|
+
fetch?: DashboardCompatFetch;
|
|
21
|
+
timeoutMs?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function validateDashboardCompat(dashboardUrl: string, options?: ValidateDashboardCompatOptions): Promise<DashboardCompatResult>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=dashboard-compat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-compat.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/dashboard-compat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAMhE,KAAK,4BAA4B,GAAG,OAAO,CAAC,qBAAqB,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC5B,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,WAAW,8BAA8B;IAC7C,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,qBAAqB,CAAC,CAiEhC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const supportedDashboardProtocolVersion = 1;
|
|
2
|
+
const defaultCompatTimeoutMs = 3000;
|
|
3
|
+
const cliUpgradeHint = '请升级或切换全局 botmux CLI 后重启运行时;源码开发可执行 pnpm switch:here && botmux restart。也可以先在外部浏览器打开控制台。';
|
|
4
|
+
export async function validateDashboardCompat(dashboardUrl, options = {}) {
|
|
5
|
+
let compatUrl;
|
|
6
|
+
try {
|
|
7
|
+
const parsed = new URL(dashboardUrl);
|
|
8
|
+
// Preserve auth query params from dashboard URLs. Platform tunnel links use
|
|
9
|
+
// `?t=...` before the hash; dropping it makes the compat probe look like an
|
|
10
|
+
// old/incompatible CLI even when the local dashboard is current.
|
|
11
|
+
parsed.pathname = '/__desktop/compat';
|
|
12
|
+
parsed.hash = '';
|
|
13
|
+
compatUrl = parsed.toString();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {
|
|
17
|
+
ok: false,
|
|
18
|
+
reason: 'unreachable',
|
|
19
|
+
message: 'Dashboard URL 无效,无法校验 Desktop 兼容协议。',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const fetchCompat = options.fetch ?? globalThis.fetch?.bind(globalThis);
|
|
23
|
+
if (!fetchCompat) {
|
|
24
|
+
return {
|
|
25
|
+
ok: false,
|
|
26
|
+
reason: 'unreachable',
|
|
27
|
+
message: '当前运行环境无法请求 Dashboard 兼容协议。',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const controller = new AbortController();
|
|
31
|
+
const timeoutMs = options.timeoutMs ?? defaultCompatTimeoutMs;
|
|
32
|
+
const timeout = setTimeout(() => {
|
|
33
|
+
controller.abort();
|
|
34
|
+
}, timeoutMs);
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetchCompat(compatUrl, { signal: controller.signal });
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
return {
|
|
39
|
+
ok: false,
|
|
40
|
+
reason: 'incompatible',
|
|
41
|
+
message: `当前 CLI 未提供 Desktop 兼容协议 ${new URL(compatUrl).pathname}(HTTP ${response.status}),${cliUpgradeHint}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
let manifest;
|
|
45
|
+
try {
|
|
46
|
+
manifest = await response.json();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
reason: 'incompatible',
|
|
52
|
+
message: `当前 CLI 返回的 Desktop 兼容信息格式不正确,${cliUpgradeHint}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return validateCompatManifest(manifest);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
reason: 'unreachable',
|
|
61
|
+
message: error instanceof Error
|
|
62
|
+
? `Dashboard 兼容协议请求失败:${error.message}`
|
|
63
|
+
: 'Dashboard 兼容协议请求失败。',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
clearTimeout(timeout);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function validateCompatManifest(manifest) {
|
|
71
|
+
if (!isCompatManifestShape(manifest)) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
reason: 'incompatible',
|
|
75
|
+
message: `当前 CLI 返回的 Desktop 兼容信息格式不正确,${cliUpgradeHint}`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (manifest.dashboardProtocolVersion > supportedDashboardProtocolVersion) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
reason: 'incompatible',
|
|
82
|
+
message: `当前 CLI dashboard 协议 v${manifest.dashboardProtocolVersion} 高于 Desktop 支持的 v${supportedDashboardProtocolVersion},${cliUpgradeHint}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (!manifest.desktopShell.supported) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
reason: 'incompatible',
|
|
89
|
+
message: `当前 CLI dashboard 不支持 Desktop shell,${cliUpgradeHint}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { ok: true };
|
|
93
|
+
}
|
|
94
|
+
function isCompatManifestShape(manifest) {
|
|
95
|
+
if (!manifest || typeof manifest !== 'object')
|
|
96
|
+
return false;
|
|
97
|
+
const record = manifest;
|
|
98
|
+
const desktopShell = record.desktopShell;
|
|
99
|
+
// Keep the shape check strict enough to catch old/malformed runtimes before
|
|
100
|
+
// the renderer embeds a dashboard that may not understand desktop shell mode.
|
|
101
|
+
return record.schemaVersion === 1
|
|
102
|
+
&& record.product === 'botmux'
|
|
103
|
+
&& typeof record.runtimeVersion === 'string'
|
|
104
|
+
&& record.runtimeVersion.trim().length > 0
|
|
105
|
+
&& typeof record.dashboardProtocolVersion === 'number'
|
|
106
|
+
&& Number.isInteger(record.dashboardProtocolVersion)
|
|
107
|
+
&& record.dashboardProtocolVersion >= 1
|
|
108
|
+
&& Boolean(desktopShell)
|
|
109
|
+
&& typeof desktopShell === 'object'
|
|
110
|
+
&& typeof desktopShell.supported === 'boolean'
|
|
111
|
+
&& isStringArray(record.features)
|
|
112
|
+
&& isStringArray(record.routes);
|
|
113
|
+
}
|
|
114
|
+
function isStringArray(value) {
|
|
115
|
+
return Array.isArray(value) && value.every(item => typeof item === 'string');
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=dashboard-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-compat.js","sourceRoot":"","sources":["../../../src/desktop/main/dashboard-compat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DesktopPaths } from '../shared/types.js';
|
|
2
|
+
import type { ExternalRuntimeCandidate } from './runtime-service.js';
|
|
3
|
+
type ReadTextFile = (path: string, encoding: BufferEncoding) => string;
|
|
4
|
+
type StatFile = (path: string) => {
|
|
5
|
+
size: number;
|
|
6
|
+
};
|
|
7
|
+
type ExecFile = (file: string, args: string[], options: {
|
|
8
|
+
encoding: BufferEncoding;
|
|
9
|
+
timeout: number;
|
|
10
|
+
stdio: ['ignore', 'pipe', 'ignore'];
|
|
11
|
+
}) => string;
|
|
12
|
+
interface InstallEntry {
|
|
13
|
+
binPath: string;
|
|
14
|
+
root: string;
|
|
15
|
+
pathEnv?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ExternalRuntimeDiscoveryDeps {
|
|
18
|
+
binPaths?: string[];
|
|
19
|
+
platform?: NodeJS.Platform;
|
|
20
|
+
execFileSync?: ExecFile;
|
|
21
|
+
existsSync?: (path: string) => boolean;
|
|
22
|
+
readFileSync?: ReadTextFile;
|
|
23
|
+
realpathSync?: (path: string) => string;
|
|
24
|
+
statSync?: StatFile;
|
|
25
|
+
}
|
|
26
|
+
export declare function discoverExternalRuntimeCandidate(paths: DesktopPaths, deps?: ExternalRuntimeDiscoveryDeps): ExternalRuntimeCandidate | null;
|
|
27
|
+
export declare function selectExternalRuntimeCandidate(entries: InstallEntry[], _paths: DesktopPaths, deps?: ExternalRuntimeDiscoveryDeps): ExternalRuntimeCandidate | null;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=external-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-runtime.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/external-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAKrE,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,MAAM,CAAC;AACvE,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,KAAK,QAAQ,GAAG,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;CAAE,KACxF,MAAM,CAAC;AAEZ,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAID,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE,4BAAiC,GACtC,wBAAwB,GAAG,IAAI,CAKjC;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,4BAAiC,GACtC,wBAAwB,GAAG,IAAI,CAyBjC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { execFileSync as defaultExecFileSync } from 'node:child_process';
|
|
2
|
+
import { existsSync as defaultExistsSync, readFileSync as defaultReadFileSync, realpathSync as defaultRealpathSync, statSync as defaultStatSync } from 'node:fs';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { resolveEffectiveBotmuxVersion } from '../../utils/version-info.js';
|
|
5
|
+
const MAX_SHIM_BYTES = 4096;
|
|
6
|
+
const LOGIN_SHELL_PATH_MARKER = '__BOTMUX_PATH__';
|
|
7
|
+
export function discoverExternalRuntimeCandidate(paths, deps = {}) {
|
|
8
|
+
const probeDeps = createInstallProbeDeps(deps);
|
|
9
|
+
const binPaths = deps.binPaths?.map(binPath => ({ binPath })) ?? listBotmuxBins(paths, deps);
|
|
10
|
+
const entries = analyzeBotmuxBins(binPaths, probeDeps);
|
|
11
|
+
return selectExternalRuntimeCandidate(entries, paths, deps);
|
|
12
|
+
}
|
|
13
|
+
export function selectExternalRuntimeCandidate(entries, _paths, deps = {}) {
|
|
14
|
+
const exists = deps.existsSync ?? defaultExistsSync;
|
|
15
|
+
const readFile = deps.readFileSync ?? defaultReadFileSync;
|
|
16
|
+
const realpath = deps.realpathSync ?? defaultRealpathSync;
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const root = normalizePath(entry.root, realpath);
|
|
19
|
+
const cliPath = join(root, 'dist', 'cli.js');
|
|
20
|
+
const version = readPackageVersion(root, exists, readFile, deps.execFileSync);
|
|
21
|
+
if (!exists(cliPath) || !version || !isSemverVersion(version))
|
|
22
|
+
continue;
|
|
23
|
+
return {
|
|
24
|
+
kind: 'external',
|
|
25
|
+
root,
|
|
26
|
+
cliPath,
|
|
27
|
+
binPath: entry.binPath,
|
|
28
|
+
...(entry.pathEnv ? { pathEnv: entry.pathEnv } : {}),
|
|
29
|
+
version,
|
|
30
|
+
// Desktop only binds the user's global `botmux` command. A pnpm-linked
|
|
31
|
+
// development checkout is still the global CLI contract from App's view.
|
|
32
|
+
runtimeSource: 'global-cli',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function createInstallProbeDeps(deps) {
|
|
38
|
+
const exists = deps.existsSync ?? defaultExistsSync;
|
|
39
|
+
const readFile = deps.readFileSync ?? defaultReadFileSync;
|
|
40
|
+
const realpath = deps.realpathSync ?? defaultRealpathSync;
|
|
41
|
+
const stat = deps.statSync ?? defaultStatSync;
|
|
42
|
+
return {
|
|
43
|
+
readFile: path => {
|
|
44
|
+
try {
|
|
45
|
+
// Only tiny shims are worth scanning; a real compiled cli.js is much
|
|
46
|
+
// larger and can be resolved through realpath instead.
|
|
47
|
+
if (stat(path).size >= MAX_SHIM_BYTES)
|
|
48
|
+
return null;
|
|
49
|
+
return readFile(path, 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
realpath: path => {
|
|
56
|
+
try {
|
|
57
|
+
return realpath(path);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function analyzeBotmuxBins(binPaths, deps) {
|
|
66
|
+
const seenBin = new Set();
|
|
67
|
+
const seenRoot = new Set();
|
|
68
|
+
const entries = [];
|
|
69
|
+
for (const raw of binPaths) {
|
|
70
|
+
const binPath = raw.binPath.trim();
|
|
71
|
+
if (!binPath || seenBin.has(binPath))
|
|
72
|
+
continue;
|
|
73
|
+
seenBin.add(binPath);
|
|
74
|
+
const resolved = resolveBotmuxBin(binPath, deps);
|
|
75
|
+
const root = resolved?.root ?? binPath;
|
|
76
|
+
if (seenRoot.has(root))
|
|
77
|
+
continue;
|
|
78
|
+
seenRoot.add(root);
|
|
79
|
+
entries.push({ binPath, root, pathEnv: raw.pathEnv });
|
|
80
|
+
}
|
|
81
|
+
return entries;
|
|
82
|
+
}
|
|
83
|
+
function resolveBotmuxBin(binPath, deps) {
|
|
84
|
+
let cliPath = null;
|
|
85
|
+
const content = deps.readFile(binPath);
|
|
86
|
+
if (content) {
|
|
87
|
+
// Global package managers commonly expose botmux through tiny wrappers that
|
|
88
|
+
// exec the built CLI. Matching the quoted target keeps this probe cheap.
|
|
89
|
+
const match = content.match(/"([^"]*[/\\]cli\.js)"/);
|
|
90
|
+
if (match)
|
|
91
|
+
cliPath = match[1];
|
|
92
|
+
}
|
|
93
|
+
if (!cliPath) {
|
|
94
|
+
const real = deps.realpath(binPath);
|
|
95
|
+
if (real && /cli\.js$/i.test(real))
|
|
96
|
+
cliPath = real;
|
|
97
|
+
}
|
|
98
|
+
if (!cliPath)
|
|
99
|
+
return null;
|
|
100
|
+
return {
|
|
101
|
+
root: /[/\\]dist[/\\]cli\.js$/i.test(cliPath)
|
|
102
|
+
? cliPath.replace(/[/\\]dist[/\\]cli\.js$/i, '')
|
|
103
|
+
: dirname(dirname(cliPath)),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function listBotmuxBins(paths, deps) {
|
|
107
|
+
const execFile = deps.execFileSync ?? defaultExecFileSync;
|
|
108
|
+
const platform = deps.platform ?? process.platform;
|
|
109
|
+
const bins = [
|
|
110
|
+
...runWhich(execFile, platform).map(binPath => ({ binPath })),
|
|
111
|
+
// macOS GUI apps often miss the user's login shell PATH, so ask zsh too.
|
|
112
|
+
...(platform === 'darwin' ? runLoginShellWhich(execFile) : []),
|
|
113
|
+
// User-owned wrappers are useful fallbacks, but should not override the CLI
|
|
114
|
+
// that the user's shell actually resolves for `botmux`.
|
|
115
|
+
{ binPath: join(paths.botmuxHome, 'bin', 'botmux') },
|
|
116
|
+
{ binPath: '/opt/homebrew/bin/botmux' },
|
|
117
|
+
{ binPath: '/usr/local/bin/botmux' },
|
|
118
|
+
];
|
|
119
|
+
const byBin = new Map();
|
|
120
|
+
for (const bin of bins) {
|
|
121
|
+
const trimmed = bin.binPath.trim();
|
|
122
|
+
if (!trimmed)
|
|
123
|
+
continue;
|
|
124
|
+
const existing = byBin.get(trimmed);
|
|
125
|
+
if (existing) {
|
|
126
|
+
if (!existing.pathEnv && bin.pathEnv)
|
|
127
|
+
existing.pathEnv = bin.pathEnv;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
byBin.set(trimmed, { ...bin, binPath: trimmed });
|
|
131
|
+
}
|
|
132
|
+
return [...byBin.values()];
|
|
133
|
+
}
|
|
134
|
+
function runWhich(execFile, platform) {
|
|
135
|
+
try {
|
|
136
|
+
const win = platform === 'win32';
|
|
137
|
+
const out = execFile(win ? 'where' : 'which', win ? ['botmux'] : ['-a', 'botmux'], {
|
|
138
|
+
encoding: 'utf-8',
|
|
139
|
+
timeout: 3_000,
|
|
140
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
141
|
+
});
|
|
142
|
+
return splitCommandOutput(out);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function runLoginShellWhich(execFile) {
|
|
149
|
+
try {
|
|
150
|
+
const out = execFile('/bin/zsh', ['-lc', `printf '${LOGIN_SHELL_PATH_MARKER}%s\\n' "$PATH"; which -a botmux`], {
|
|
151
|
+
encoding: 'utf-8',
|
|
152
|
+
timeout: 3_000,
|
|
153
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
154
|
+
});
|
|
155
|
+
return splitLoginShellWhichOutput(out);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function readPackageVersion(root, exists, readFile, execFile) {
|
|
162
|
+
const packagePath = join(root, 'package.json');
|
|
163
|
+
if (!exists(packagePath))
|
|
164
|
+
return null;
|
|
165
|
+
try {
|
|
166
|
+
const pkg = JSON.parse(readFile(packagePath, 'utf-8'));
|
|
167
|
+
if (typeof pkg.name === 'string' && pkg.name !== 'botmux')
|
|
168
|
+
return null;
|
|
169
|
+
return resolveEffectiveBotmuxVersion({
|
|
170
|
+
rawVersion: typeof pkg.version === 'string' ? pkg.version : null,
|
|
171
|
+
rootDir: root,
|
|
172
|
+
execFileSync: execFile,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function splitCommandOutput(out) {
|
|
180
|
+
return out.split(/\r?\n/).map(line => line.trim()).filter(Boolean);
|
|
181
|
+
}
|
|
182
|
+
function splitLoginShellWhichOutput(out) {
|
|
183
|
+
const lines = splitCommandOutput(out);
|
|
184
|
+
const markerIndex = lines.findIndex(line => line.startsWith(LOGIN_SHELL_PATH_MARKER));
|
|
185
|
+
const pathEnv = markerIndex >= 0
|
|
186
|
+
? lines[markerIndex].slice(LOGIN_SHELL_PATH_MARKER.length).trim() || undefined
|
|
187
|
+
: undefined;
|
|
188
|
+
const binLines = markerIndex >= 0 ? lines.slice(markerIndex + 1) : lines;
|
|
189
|
+
return binLines.map(binPath => ({ binPath, ...(pathEnv ? { pathEnv } : {}) }));
|
|
190
|
+
}
|
|
191
|
+
function isSemverVersion(version) {
|
|
192
|
+
return /^v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version.trim());
|
|
193
|
+
}
|
|
194
|
+
function normalizePath(path, realpath) {
|
|
195
|
+
try {
|
|
196
|
+
return realpath(path);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return resolve(path);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=external-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-runtime.js","sourceRoot":"","sources":["../../../src/desktop/main/external-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DesktopPaths, DesktopRuntimeState } from '../shared/types.js';
|
|
2
|
+
import type { createRuntimeService } from './runtime-service.js';
|
|
3
|
+
type RuntimeService = ReturnType<typeof createRuntimeService>;
|
|
4
|
+
export interface RuntimeStateMonitor {
|
|
5
|
+
start(): void;
|
|
6
|
+
stop(): void;
|
|
7
|
+
refresh(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function registerDesktopIpc(args: {
|
|
10
|
+
paths: DesktopPaths;
|
|
11
|
+
runtime: RuntimeService;
|
|
12
|
+
monitor?: Pick<RuntimeStateMonitor, 'refresh'>;
|
|
13
|
+
}): void;
|
|
14
|
+
export declare function createRuntimeStateMonitor(args: {
|
|
15
|
+
runtime: Pick<RuntimeService, 'getState'>;
|
|
16
|
+
sendState: (state: DesktopRuntimeState) => void;
|
|
17
|
+
intervalMs?: number;
|
|
18
|
+
}): RuntimeStateMonitor;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ipc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/ipc.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAInG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAG9D,MAAM,WAAW,mBAAmB;IAClC,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;CAChD,GAAG,IAAI,CAwCP;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,mBAAmB,CAqCtB"}
|