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.
Files changed (308) hide show
  1. package/dist/adapters/backend/herdr-backend.d.ts +9 -7
  2. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  3. package/dist/adapters/backend/herdr-backend.js +63 -53
  4. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  5. package/dist/adapters/backend/riff-backend.d.ts +21 -1
  6. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  7. package/dist/adapters/backend/riff-backend.js +16 -5
  8. package/dist/adapters/backend/riff-backend.js.map +1 -1
  9. package/dist/adapters/backend/sandbox.d.ts +20 -16
  10. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  11. package/dist/adapters/backend/sandbox.js +192 -65
  12. package/dist/adapters/backend/sandbox.js.map +1 -1
  13. package/dist/adapters/backend/tmux-backend.d.ts +39 -2
  14. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  15. package/dist/adapters/backend/tmux-backend.js +55 -5
  16. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  17. package/dist/adapters/backend/tmux-pipe-backend.js +2 -2
  18. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  19. package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
  20. package/dist/adapters/backend/zellij-backend.js +9 -3
  21. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  22. package/dist/adapters/cli/claude-code.d.ts +25 -0
  23. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/cli/claude-code.js +79 -9
  25. package/dist/adapters/cli/claude-code.js.map +1 -1
  26. package/dist/adapters/cli/read-isolation.d.ts +2 -1
  27. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  28. package/dist/adapters/cli/read-isolation.js.map +1 -1
  29. package/dist/adapters/cli/types.d.ts +2 -2
  30. package/dist/adapters/hook-installer.d.ts +11 -0
  31. package/dist/adapters/hook-installer.d.ts.map +1 -1
  32. package/dist/adapters/hook-installer.js +72 -11
  33. package/dist/adapters/hook-installer.js.map +1 -1
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/cli.js +15 -4
  36. package/dist/cli.js.map +1 -1
  37. package/dist/config.d.ts +6 -0
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +18 -0
  40. package/dist/config.js.map +1 -1
  41. package/dist/core/command-handler.d.ts.map +1 -1
  42. package/dist/core/command-handler.js +211 -57
  43. package/dist/core/command-handler.js.map +1 -1
  44. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  45. package/dist/core/dashboard-ipc-server.js +13 -6
  46. package/dist/core/dashboard-ipc-server.js.map +1 -1
  47. package/dist/core/dashboard-rows.d.ts +5 -0
  48. package/dist/core/dashboard-rows.d.ts.map +1 -1
  49. package/dist/core/dashboard-rows.js +2 -0
  50. package/dist/core/dashboard-rows.js.map +1 -1
  51. package/dist/core/doc-comment-prompt.d.ts +2 -0
  52. package/dist/core/doc-comment-prompt.d.ts.map +1 -1
  53. package/dist/core/doc-comment-prompt.js +30 -0
  54. package/dist/core/doc-comment-prompt.js.map +1 -1
  55. package/dist/core/github-auth.d.ts +8 -0
  56. package/dist/core/github-auth.d.ts.map +1 -0
  57. package/dist/core/github-auth.js +44 -0
  58. package/dist/core/github-auth.js.map +1 -0
  59. package/dist/core/managed-origin-capability.d.ts +7 -0
  60. package/dist/core/managed-origin-capability.d.ts.map +1 -1
  61. package/dist/core/managed-origin-capability.js +12 -0
  62. package/dist/core/managed-origin-capability.js.map +1 -1
  63. package/dist/core/passthrough-commands.d.ts.map +1 -1
  64. package/dist/core/passthrough-commands.js +1 -1
  65. package/dist/core/passthrough-commands.js.map +1 -1
  66. package/dist/core/restart-report.d.ts +7 -1
  67. package/dist/core/restart-report.d.ts.map +1 -1
  68. package/dist/core/restart-report.js +19 -5
  69. package/dist/core/restart-report.js.map +1 -1
  70. package/dist/core/session-activity.d.ts +8 -0
  71. package/dist/core/session-activity.d.ts.map +1 -1
  72. package/dist/core/session-activity.js +16 -0
  73. package/dist/core/session-activity.js.map +1 -1
  74. package/dist/core/session-discovery.d.ts.map +1 -1
  75. package/dist/core/session-discovery.js +4 -2
  76. package/dist/core/session-discovery.js.map +1 -1
  77. package/dist/core/update-check.d.ts +11 -0
  78. package/dist/core/update-check.d.ts.map +1 -1
  79. package/dist/core/update-check.js +6 -1
  80. package/dist/core/update-check.js.map +1 -1
  81. package/dist/core/vc-meeting-prepare-command.d.ts +22 -0
  82. package/dist/core/vc-meeting-prepare-command.d.ts.map +1 -0
  83. package/dist/core/vc-meeting-prepare-command.js +50 -0
  84. package/dist/core/vc-meeting-prepare-command.js.map +1 -0
  85. package/dist/core/worker-pool.d.ts.map +1 -1
  86. package/dist/core/worker-pool.js +11 -2
  87. package/dist/core/worker-pool.js.map +1 -1
  88. package/dist/daemon.d.ts +15 -5
  89. package/dist/daemon.d.ts.map +1 -1
  90. package/dist/daemon.js +555 -41
  91. package/dist/daemon.js.map +1 -1
  92. package/dist/dashboard/compat.d.ts +19 -0
  93. package/dist/dashboard/compat.d.ts.map +1 -0
  94. package/dist/dashboard/compat.js +38 -0
  95. package/dist/dashboard/compat.js.map +1 -0
  96. package/dist/dashboard/stale-chunk-module.d.ts +3 -0
  97. package/dist/dashboard/stale-chunk-module.d.ts.map +1 -0
  98. package/dist/dashboard/stale-chunk-module.js +55 -0
  99. package/dist/dashboard/stale-chunk-module.js.map +1 -0
  100. package/dist/dashboard/web/app.d.ts.map +1 -1
  101. package/dist/dashboard/web/app.js +64 -2
  102. package/dist/dashboard/web/app.js.map +1 -1
  103. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  104. package/dist/dashboard/web/bot-defaults-page.js +14 -7
  105. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  106. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  107. package/dist/dashboard/web/i18n.js +44 -10
  108. package/dist/dashboard/web/i18n.js.map +1 -1
  109. package/dist/dashboard/web/preferences.d.ts +1 -1
  110. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  111. package/dist/dashboard/web/preferences.js +1 -1
  112. package/dist/dashboard/web/preferences.js.map +1 -1
  113. package/dist/dashboard/web/sessions-page.d.ts +19 -0
  114. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  115. package/dist/dashboard/web/sessions-page.js +68 -9
  116. package/dist/dashboard/web/sessions-page.js.map +1 -1
  117. package/dist/dashboard/web/sessions.d.ts +31 -0
  118. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  119. package/dist/dashboard/web/sessions.js +82 -0
  120. package/dist/dashboard/web/sessions.js.map +1 -1
  121. package/dist/dashboard/web/stale-chunk-reload.d.ts +16 -0
  122. package/dist/dashboard/web/stale-chunk-reload.d.ts.map +1 -0
  123. package/dist/dashboard/web/stale-chunk-reload.js +51 -0
  124. package/dist/dashboard/web/stale-chunk-reload.js.map +1 -0
  125. package/dist/dashboard-web/app.js +1 -1
  126. package/dist/dashboard-web/chunks/{bot-defaults-page-SRCBF7Z3.js → bot-defaults-page-KLDCZNLP.js} +5 -5
  127. package/dist/dashboard-web/chunks/{chunk-NGRUZCXP.js → chunk-EZAW2EPM.js} +1 -1
  128. package/dist/dashboard-web/chunks/{chunk-D2I5F4MY.js → chunk-FMJNOATE.js} +1 -1
  129. package/dist/dashboard-web/chunks/{chunk-3H6MVXXU.js → chunk-KEAOTUL3.js} +7 -7
  130. package/dist/dashboard-web/chunks/{chunk-77KD4TK2.js → chunk-MLNI5BKE.js} +1 -1
  131. package/dist/dashboard-web/chunks/{connectors-page-RM3BJVMV.js → connectors-page-O32LFAL5.js} +1 -1
  132. package/dist/dashboard-web/chunks/{groups-page-3D4YSYLA.js → groups-page-PSAFIZ6M.js} +1 -1
  133. package/dist/dashboard-web/chunks/{insights-page-CRFJKA54.js → insights-page-V23LLATX.js} +1 -1
  134. package/dist/dashboard-web/chunks/{monitor-room-HLK3XDT2.js → monitor-room-7X5AKYOF.js} +1 -1
  135. package/dist/dashboard-web/chunks/{monitoring-page-E3SNZFFN.js → monitoring-page-CBA3CQYL.js} +1 -1
  136. package/dist/dashboard-web/chunks/{office-page-MKQ2TENK.js → office-page-RL6QSEM7.js} +1 -1
  137. package/dist/dashboard-web/chunks/{overview-page-ICFKKRLV.js → overview-page-XQIPO6KH.js} +1 -1
  138. package/dist/dashboard-web/chunks/{roles-page-2DFJ7YRU.js → roles-page-ACIWV7QS.js} +1 -1
  139. package/dist/dashboard-web/chunks/{schedules-page-S4WDIXH5.js → schedules-page-KJDUKOJV.js} +1 -1
  140. package/dist/dashboard-web/chunks/sessions-page-2WDWHSP4.js +3 -0
  141. package/dist/dashboard-web/chunks/{settings-page-OBTE4LYP.js → settings-page-6VX4OUGG.js} +1 -1
  142. package/dist/dashboard-web/chunks/{skills-page-CTRQJR47.js → skills-page-WXE3UYLT.js} +1 -1
  143. package/dist/dashboard-web/chunks/{team-federation-page-GICLDKJP.js → team-federation-page-PYTF4FLM.js} +1 -1
  144. package/dist/dashboard-web/chunks/{v3-page-DI55IRL5.js → v3-page-G6CD6O3I.js} +1 -1
  145. package/dist/dashboard-web/chunks/{whiteboards-page-7KFWMILV.js → whiteboards-page-6SG33GP4.js} +1 -1
  146. package/dist/dashboard-web/style.css +167 -2
  147. package/dist/dashboard.js +26 -0
  148. package/dist/dashboard.js.map +1 -1
  149. package/dist/desktop/main/auto-start.d.ts +17 -0
  150. package/dist/desktop/main/auto-start.d.ts.map +1 -0
  151. package/dist/desktop/main/auto-start.js +37 -0
  152. package/dist/desktop/main/auto-start.js.map +1 -0
  153. package/dist/desktop/main/dashboard-compat.d.ts +25 -0
  154. package/dist/desktop/main/dashboard-compat.d.ts.map +1 -0
  155. package/dist/desktop/main/dashboard-compat.js +117 -0
  156. package/dist/desktop/main/dashboard-compat.js.map +1 -0
  157. package/dist/desktop/main/external-runtime.d.ts +29 -0
  158. package/dist/desktop/main/external-runtime.d.ts.map +1 -0
  159. package/dist/desktop/main/external-runtime.js +202 -0
  160. package/dist/desktop/main/external-runtime.js.map +1 -0
  161. package/dist/desktop/main/ipc.d.ts +20 -0
  162. package/dist/desktop/main/ipc.d.ts.map +1 -0
  163. package/dist/desktop/main/ipc.js +241 -0
  164. package/dist/desktop/main/ipc.js.map +1 -0
  165. package/dist/desktop/main/log-service.d.ts +4 -0
  166. package/dist/desktop/main/log-service.d.ts.map +1 -0
  167. package/dist/desktop/main/log-service.js +53 -0
  168. package/dist/desktop/main/log-service.js.map +1 -0
  169. package/dist/desktop/main/login-item.d.ts +10 -0
  170. package/dist/desktop/main/login-item.d.ts.map +1 -0
  171. package/dist/desktop/main/login-item.js +11 -0
  172. package/dist/desktop/main/login-item.js.map +1 -0
  173. package/dist/desktop/main/node-command.d.ts +22 -0
  174. package/dist/desktop/main/node-command.d.ts.map +1 -0
  175. package/dist/desktop/main/node-command.js +56 -0
  176. package/dist/desktop/main/node-command.js.map +1 -0
  177. package/dist/desktop/main/paths.d.ts +11 -0
  178. package/dist/desktop/main/paths.d.ts.map +1 -0
  179. package/dist/desktop/main/paths.js +13 -0
  180. package/dist/desktop/main/paths.js.map +1 -0
  181. package/dist/desktop/main/pm2-apps.d.ts +15 -0
  182. package/dist/desktop/main/pm2-apps.d.ts.map +1 -0
  183. package/dist/desktop/main/pm2-apps.js +97 -0
  184. package/dist/desktop/main/pm2-apps.js.map +1 -0
  185. package/dist/desktop/main/runtime-service.d.ts +49 -0
  186. package/dist/desktop/main/runtime-service.d.ts.map +1 -0
  187. package/dist/desktop/main/runtime-service.js +297 -0
  188. package/dist/desktop/main/runtime-service.js.map +1 -0
  189. package/dist/desktop/main/runtime-source.d.ts +17 -0
  190. package/dist/desktop/main/runtime-source.d.ts.map +1 -0
  191. package/dist/desktop/main/runtime-source.js +61 -0
  192. package/dist/desktop/main/runtime-source.js.map +1 -0
  193. package/dist/desktop/main/tray.d.ts +10 -0
  194. package/dist/desktop/main/tray.d.ts.map +1 -0
  195. package/dist/desktop/main/tray.js +27 -0
  196. package/dist/desktop/main/tray.js.map +1 -0
  197. package/dist/desktop/main/window.d.ts +16 -0
  198. package/dist/desktop/main/window.d.ts.map +1 -0
  199. package/dist/desktop/main/window.js +113 -0
  200. package/dist/desktop/main/window.js.map +1 -0
  201. package/dist/desktop/main.d.ts +2 -0
  202. package/dist/desktop/main.d.ts.map +1 -0
  203. package/dist/desktop/main.js +175 -0
  204. package/dist/desktop/main.js.map +1 -0
  205. package/dist/desktop/preload.d.ts +2 -0
  206. package/dist/desktop/preload.d.ts.map +1 -0
  207. package/dist/desktop/preload.js +24 -0
  208. package/dist/desktop/preload.js.map +1 -0
  209. package/dist/desktop/renderer/app.d.ts +35 -0
  210. package/dist/desktop/renderer/app.d.ts.map +1 -0
  211. package/dist/desktop/renderer/app.js +945 -0
  212. package/dist/desktop/renderer/app.js.map +1 -0
  213. package/dist/desktop/renderer/dashboard-url.d.ts +13 -0
  214. package/dist/desktop/renderer/dashboard-url.d.ts.map +1 -0
  215. package/dist/desktop/renderer/dashboard-url.js +98 -0
  216. package/dist/desktop/renderer/dashboard-url.js.map +1 -0
  217. package/dist/desktop/renderer/runtime-state.d.ts +8 -0
  218. package/dist/desktop/renderer/runtime-state.d.ts.map +1 -0
  219. package/dist/desktop/renderer/runtime-state.js +67 -0
  220. package/dist/desktop/renderer/runtime-state.js.map +1 -0
  221. package/dist/desktop/shared/types.d.ts +48 -0
  222. package/dist/desktop/shared/types.d.ts.map +1 -0
  223. package/dist/desktop/shared/types.js +2 -0
  224. package/dist/desktop/shared/types.js.map +1 -0
  225. package/dist/desktop/smoke.d.ts +28 -0
  226. package/dist/desktop/smoke.d.ts.map +1 -0
  227. package/dist/desktop/smoke.js +258 -0
  228. package/dist/desktop/smoke.js.map +1 -0
  229. package/dist/i18n/en.d.ts.map +1 -1
  230. package/dist/i18n/en.js +18 -3
  231. package/dist/i18n/en.js.map +1 -1
  232. package/dist/i18n/zh.d.ts.map +1 -1
  233. package/dist/i18n/zh.js +18 -3
  234. package/dist/i18n/zh.js.map +1 -1
  235. package/dist/im/lark/card-builder.d.ts.map +1 -1
  236. package/dist/im/lark/card-builder.js +11 -2
  237. package/dist/im/lark/card-builder.js.map +1 -1
  238. package/dist/im/lark/event-dispatcher.d.ts +4 -0
  239. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  240. package/dist/im/lark/event-dispatcher.js +249 -5
  241. package/dist/im/lark/event-dispatcher.js.map +1 -1
  242. package/dist/im/lark/forward-followup-buffer.d.ts +26 -0
  243. package/dist/im/lark/forward-followup-buffer.d.ts.map +1 -0
  244. package/dist/im/lark/forward-followup-buffer.js +48 -0
  245. package/dist/im/lark/forward-followup-buffer.js.map +1 -0
  246. package/dist/im/lark/forward-followup-content.d.ts +6 -0
  247. package/dist/im/lark/forward-followup-content.d.ts.map +1 -0
  248. package/dist/im/lark/forward-followup-content.js +46 -0
  249. package/dist/im/lark/forward-followup-content.js.map +1 -0
  250. package/dist/im/lark/forward-followup-store.d.ts +9 -0
  251. package/dist/im/lark/forward-followup-store.d.ts.map +1 -0
  252. package/dist/im/lark/forward-followup-store.js +48 -0
  253. package/dist/im/lark/forward-followup-store.js.map +1 -0
  254. package/dist/im/lark/message-parser.d.ts +1 -1
  255. package/dist/im/lark/message-parser.d.ts.map +1 -1
  256. package/dist/im/lark/message-parser.js +1 -2
  257. package/dist/im/lark/message-parser.js.map +1 -1
  258. package/dist/platform/tunnel-client.js +3 -3
  259. package/dist/platform/tunnel-client.js.map +1 -1
  260. package/dist/services/local-cli-opener.d.ts +7 -0
  261. package/dist/services/local-cli-opener.d.ts.map +1 -1
  262. package/dist/services/local-cli-opener.js +111 -3
  263. package/dist/services/local-cli-opener.js.map +1 -1
  264. package/dist/services/skill-registry-store.d.ts.map +1 -1
  265. package/dist/services/skill-registry-store.js +15 -2
  266. package/dist/services/skill-registry-store.js.map +1 -1
  267. package/dist/services/vc-meeting-consumer-isolation.d.ts +7 -5
  268. package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -1
  269. package/dist/services/vc-meeting-consumer-isolation.js +7 -5
  270. package/dist/services/vc-meeting-consumer-isolation.js.map +1 -1
  271. package/dist/services/vc-meeting-preparations-store.d.ts +22 -0
  272. package/dist/services/vc-meeting-preparations-store.d.ts.map +1 -0
  273. package/dist/services/vc-meeting-preparations-store.js +131 -0
  274. package/dist/services/vc-meeting-preparations-store.js.map +1 -0
  275. package/dist/services/vc-meeting-runtime-store.d.ts +9 -0
  276. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
  277. package/dist/services/vc-meeting-runtime-store.js +16 -0
  278. package/dist/services/vc-meeting-runtime-store.js.map +1 -1
  279. package/dist/setup/ensure-tmux.d.ts.map +1 -1
  280. package/dist/setup/ensure-tmux.js +9 -11
  281. package/dist/setup/ensure-tmux.js.map +1 -1
  282. package/dist/utils/child-env.d.ts +16 -8
  283. package/dist/utils/child-env.d.ts.map +1 -1
  284. package/dist/utils/child-env.js +30 -8
  285. package/dist/utils/child-env.js.map +1 -1
  286. package/dist/utils/daemon-discovery.d.ts +8 -0
  287. package/dist/utils/daemon-discovery.d.ts.map +1 -1
  288. package/dist/utils/daemon-discovery.js +19 -0
  289. package/dist/utils/daemon-discovery.js.map +1 -1
  290. package/dist/utils/ready-gate.d.ts +9 -3
  291. package/dist/utils/ready-gate.d.ts.map +1 -1
  292. package/dist/utils/ready-gate.js +12 -4
  293. package/dist/utils/ready-gate.js.map +1 -1
  294. package/dist/utils/version-info.d.ts +25 -0
  295. package/dist/utils/version-info.d.ts.map +1 -0
  296. package/dist/utils/version-info.js +48 -0
  297. package/dist/utils/version-info.js.map +1 -0
  298. package/dist/worker.js +131 -28
  299. package/dist/worker.js.map +1 -1
  300. package/dist/workflows/ops-projection.d.ts.map +1 -1
  301. package/dist/workflows/ops-projection.js +27 -5
  302. package/dist/workflows/ops-projection.js.map +1 -1
  303. package/dist/workflows/v3/distillation-runner.d.ts +4 -0
  304. package/dist/workflows/v3/distillation-runner.d.ts.map +1 -1
  305. package/dist/workflows/v3/distillation-runner.js +4 -2
  306. package/dist/workflows/v3/distillation-runner.js.map +1 -1
  307. package/package.json +9 -1
  308. 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"}