botmux 3.2.1 → 3.4.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 (277) hide show
  1. package/dist/adapters/backend/sandbox.d.ts +47 -0
  2. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  3. package/dist/adapters/backend/sandbox.js +137 -0
  4. package/dist/adapters/backend/sandbox.js.map +1 -1
  5. package/dist/adapters/cli/pi.d.ts.map +1 -1
  6. package/dist/adapters/cli/pi.js +4 -0
  7. package/dist/adapters/cli/pi.js.map +1 -1
  8. package/dist/adapters/cli/read-isolation.d.ts +72 -3
  9. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  10. package/dist/adapters/cli/read-isolation.js +143 -6
  11. package/dist/adapters/cli/read-isolation.js.map +1 -1
  12. package/dist/adapters/cli/registry.d.ts.map +1 -1
  13. package/dist/adapters/cli/registry.js +8 -2
  14. package/dist/adapters/cli/registry.js.map +1 -1
  15. package/dist/adapters/cli/types.d.ts +8 -1
  16. package/dist/adapters/cli/types.d.ts.map +1 -1
  17. package/dist/cli/deferred-topic-send.d.ts +37 -0
  18. package/dist/cli/deferred-topic-send.d.ts.map +1 -0
  19. package/dist/cli/deferred-topic-send.js +69 -0
  20. package/dist/cli/deferred-topic-send.js.map +1 -0
  21. package/dist/cli/pm2-command.d.ts.map +1 -1
  22. package/dist/cli/pm2-command.js +6 -0
  23. package/dist/cli/pm2-command.js.map +1 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +173 -34
  26. package/dist/cli.js.map +1 -1
  27. package/dist/core/command-handler.d.ts.map +1 -1
  28. package/dist/core/command-handler.js +17 -12
  29. package/dist/core/command-handler.js.map +1 -1
  30. package/dist/core/dashboard-ipc-server.d.ts +4 -1
  31. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  32. package/dist/core/dashboard-ipc-server.js +99 -8
  33. package/dist/core/dashboard-ipc-server.js.map +1 -1
  34. package/dist/core/deferred-schedule-settlement.d.ts +20 -0
  35. package/dist/core/deferred-schedule-settlement.d.ts.map +1 -0
  36. package/dist/core/deferred-schedule-settlement.js +18 -0
  37. package/dist/core/deferred-schedule-settlement.js.map +1 -0
  38. package/dist/core/deferred-topic-binding.d.ts +19 -0
  39. package/dist/core/deferred-topic-binding.d.ts.map +1 -0
  40. package/dist/core/deferred-topic-binding.js +55 -0
  41. package/dist/core/deferred-topic-binding.js.map +1 -0
  42. package/dist/core/device-isolation-activation.d.ts +56 -0
  43. package/dist/core/device-isolation-activation.d.ts.map +1 -0
  44. package/dist/core/device-isolation-activation.js +110 -0
  45. package/dist/core/device-isolation-activation.js.map +1 -0
  46. package/dist/core/device-isolation-daemon.d.ts +84 -0
  47. package/dist/core/device-isolation-daemon.d.ts.map +1 -0
  48. package/dist/core/device-isolation-daemon.js +591 -0
  49. package/dist/core/device-isolation-daemon.js.map +1 -0
  50. package/dist/core/scheduler.d.ts +26 -20
  51. package/dist/core/scheduler.d.ts.map +1 -1
  52. package/dist/core/scheduler.js +114 -56
  53. package/dist/core/scheduler.js.map +1 -1
  54. package/dist/core/session-discovery.d.ts.map +1 -1
  55. package/dist/core/session-discovery.js +47 -15
  56. package/dist/core/session-discovery.js.map +1 -1
  57. package/dist/core/session-manager.d.ts +17 -1
  58. package/dist/core/session-manager.d.ts.map +1 -1
  59. package/dist/core/session-manager.js +178 -84
  60. package/dist/core/session-manager.js.map +1 -1
  61. package/dist/core/types.d.ts +13 -0
  62. package/dist/core/types.d.ts.map +1 -1
  63. package/dist/core/types.js +10 -0
  64. package/dist/core/types.js.map +1 -1
  65. package/dist/core/worker-pool.d.ts +7 -0
  66. package/dist/core/worker-pool.d.ts.map +1 -1
  67. package/dist/core/worker-pool.js +86 -1
  68. package/dist/core/worker-pool.js.map +1 -1
  69. package/dist/daemon.d.ts.map +1 -1
  70. package/dist/daemon.js +95 -5
  71. package/dist/daemon.js.map +1 -1
  72. package/dist/dashboard/schedule-card-model.d.ts +12 -3
  73. package/dist/dashboard/schedule-card-model.d.ts.map +1 -1
  74. package/dist/dashboard/schedule-card-model.js +32 -8
  75. package/dist/dashboard/schedule-card-model.js.map +1 -1
  76. package/dist/dashboard/web/dashboard-components.d.ts +7 -0
  77. package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
  78. package/dist/dashboard/web/dashboard-components.js +11 -2
  79. package/dist/dashboard/web/dashboard-components.js.map +1 -1
  80. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  81. package/dist/dashboard/web/i18n.js +30 -6
  82. package/dist/dashboard/web/i18n.js.map +1 -1
  83. package/dist/dashboard/web/schedules-page.d.ts +2 -0
  84. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  85. package/dist/dashboard/web/schedules-page.js +74 -27
  86. package/dist/dashboard/web/schedules-page.js.map +1 -1
  87. package/dist/dashboard-web/app.js +1 -1
  88. package/dist/dashboard-web/chunks/{bot-defaults-page-O37SAQD5.js → bot-defaults-page-B5AY4B2J.js} +1 -1
  89. package/dist/dashboard-web/chunks/{chunk-6QHMLMIM.js → chunk-CUV65BIQ.js} +3 -3
  90. package/dist/dashboard-web/chunks/{chunk-O2DPQL7C.js → chunk-JNRSPKLS.js} +1 -1
  91. package/dist/dashboard-web/chunks/{chunk-FYALHCPG.js → chunk-P6GO5KT4.js} +1 -1
  92. package/dist/dashboard-web/chunks/chunk-QFMH6ITB.js +1 -0
  93. package/dist/dashboard-web/chunks/{chunk-B42PCL5P.js → chunk-UBOLHQCK.js} +1 -1
  94. package/dist/dashboard-web/chunks/{connectors-page-DZBQ42MH.js → connectors-page-KTC2QWNW.js} +1 -1
  95. package/dist/dashboard-web/chunks/{groups-page-3IEGRZKQ.js → groups-page-B3EKGOLY.js} +1 -1
  96. package/dist/dashboard-web/chunks/{insights-page-X3ADRON3.js → insights-page-X6RXNCWX.js} +1 -1
  97. package/dist/dashboard-web/chunks/{monitor-room-IV36RGQY.js → monitor-room-LLRA5LQW.js} +1 -1
  98. package/dist/dashboard-web/chunks/{monitoring-page-ADFKVON4.js → monitoring-page-7MT5FEOS.js} +1 -1
  99. package/dist/dashboard-web/chunks/{office-page-CALAOWNS.js → office-page-KD46D5TD.js} +1 -1
  100. package/dist/dashboard-web/chunks/{overview-page-SLMGLK3M.js → overview-page-JUWNH32O.js} +1 -1
  101. package/dist/dashboard-web/chunks/{roles-page-L7JJ4FFV.js → roles-page-P6F7NLOI.js} +1 -1
  102. package/dist/dashboard-web/chunks/schedules-page-XIHWZST4.js +1 -0
  103. package/dist/dashboard-web/chunks/{sessions-page-OKJ5YWUZ.js → sessions-page-2VECQ27T.js} +1 -1
  104. package/dist/dashboard-web/chunks/{settings-page-P6MI2ZUE.js → settings-page-HMIUE2JA.js} +1 -1
  105. package/dist/dashboard-web/chunks/{skills-page-FT7BVZ6X.js → skills-page-A46KVWBL.js} +1 -1
  106. package/dist/dashboard-web/chunks/{team-federation-page-DEYCPUFB.js → team-federation-page-SDUC56DF.js} +1 -1
  107. package/dist/dashboard-web/chunks/{v3-page-4IOWREZG.js → v3-page-J5JOTUSQ.js} +1 -1
  108. package/dist/dashboard-web/chunks/{whiteboards-page-2VMBETZH.js → whiteboards-page-U7LSOAWI.js} +1 -1
  109. package/dist/dashboard-web/style.css +34 -4
  110. package/dist/dashboard.js +16 -1
  111. package/dist/dashboard.js.map +1 -1
  112. package/dist/desktop/main/auto-start.d.ts +2 -0
  113. package/dist/desktop/main/auto-start.d.ts.map +1 -1
  114. package/dist/desktop/main/auto-start.js +10 -6
  115. package/dist/desktop/main/auto-start.js.map +1 -1
  116. package/dist/desktop/main/bundled-runtime.d.ts +12 -0
  117. package/dist/desktop/main/bundled-runtime.d.ts.map +1 -0
  118. package/dist/desktop/main/bundled-runtime.js +30 -0
  119. package/dist/desktop/main/bundled-runtime.js.map +1 -0
  120. package/dist/desktop/main/device-status.d.ts +15 -0
  121. package/dist/desktop/main/device-status.d.ts.map +1 -0
  122. package/dist/desktop/main/device-status.js +94 -0
  123. package/dist/desktop/main/device-status.js.map +1 -0
  124. package/dist/desktop/main/external-runtime.d.ts +9 -0
  125. package/dist/desktop/main/external-runtime.d.ts.map +1 -1
  126. package/dist/desktop/main/external-runtime.js +88 -18
  127. package/dist/desktop/main/external-runtime.js.map +1 -1
  128. package/dist/desktop/main/ipc.d.ts.map +1 -1
  129. package/dist/desktop/main/ipc.js +1 -0
  130. package/dist/desktop/main/ipc.js.map +1 -1
  131. package/dist/desktop/main/node-command.d.ts +21 -0
  132. package/dist/desktop/main/node-command.d.ts.map +1 -1
  133. package/dist/desktop/main/node-command.js +41 -0
  134. package/dist/desktop/main/node-command.js.map +1 -1
  135. package/dist/desktop/main/pm2-apps.d.ts +4 -2
  136. package/dist/desktop/main/pm2-apps.d.ts.map +1 -1
  137. package/dist/desktop/main/pm2-apps.js +11 -3
  138. package/dist/desktop/main/pm2-apps.js.map +1 -1
  139. package/dist/desktop/main/runtime-service.d.ts +21 -5
  140. package/dist/desktop/main/runtime-service.d.ts.map +1 -1
  141. package/dist/desktop/main/runtime-service.js +94 -10
  142. package/dist/desktop/main/runtime-service.js.map +1 -1
  143. package/dist/desktop/main/runtime-source.d.ts +2 -0
  144. package/dist/desktop/main/runtime-source.d.ts.map +1 -1
  145. package/dist/desktop/main/runtime-source.js +12 -6
  146. package/dist/desktop/main/runtime-source.js.map +1 -1
  147. package/dist/desktop/main/tray.d.ts +1 -0
  148. package/dist/desktop/main/tray.d.ts.map +1 -1
  149. package/dist/desktop/main/tray.js +3 -3
  150. package/dist/desktop/main/tray.js.map +1 -1
  151. package/dist/desktop/main.js +28 -8
  152. package/dist/desktop/main.js.map +1 -1
  153. package/dist/desktop/preload.js +3 -0
  154. package/dist/desktop/preload.js.map +1 -1
  155. package/dist/desktop/renderer/app.d.ts +2 -1
  156. package/dist/desktop/renderer/app.d.ts.map +1 -1
  157. package/dist/desktop/renderer/app.js +6 -1
  158. package/dist/desktop/renderer/app.js.map +1 -1
  159. package/dist/desktop/renderer/runtime-state.d.ts.map +1 -1
  160. package/dist/desktop/renderer/runtime-state.js +2 -0
  161. package/dist/desktop/renderer/runtime-state.js.map +1 -1
  162. package/dist/desktop/shared/shell-path-probes.d.ts +24 -0
  163. package/dist/desktop/shared/shell-path-probes.d.ts.map +1 -0
  164. package/dist/desktop/shared/shell-path-probes.js +38 -0
  165. package/dist/desktop/shared/shell-path-probes.js.map +1 -0
  166. package/dist/desktop/shared/types.d.ts +21 -1
  167. package/dist/desktop/shared/types.d.ts.map +1 -1
  168. package/dist/desktop/smoke.d.ts +1 -0
  169. package/dist/desktop/smoke.d.ts.map +1 -1
  170. package/dist/desktop/smoke.js +20 -5
  171. package/dist/desktop/smoke.js.map +1 -1
  172. package/dist/i18n/en.d.ts.map +1 -1
  173. package/dist/i18n/en.js +16 -7
  174. package/dist/i18n/en.js.map +1 -1
  175. package/dist/i18n/zh.d.ts.map +1 -1
  176. package/dist/i18n/zh.js +16 -7
  177. package/dist/i18n/zh.js.map +1 -1
  178. package/dist/im/lark/card-handler.d.ts.map +1 -1
  179. package/dist/im/lark/card-handler.js +3 -0
  180. package/dist/im/lark/card-handler.js.map +1 -1
  181. package/dist/im/lark/event-dispatcher.d.ts +1 -0
  182. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  183. package/dist/im/lark/event-dispatcher.js +1 -1
  184. package/dist/im/lark/event-dispatcher.js.map +1 -1
  185. package/dist/im/lark/schedules-card.d.ts +2 -2
  186. package/dist/im/lark/schedules-card.d.ts.map +1 -1
  187. package/dist/im/lark/schedules-card.js +50 -34
  188. package/dist/im/lark/schedules-card.js.map +1 -1
  189. package/dist/index-daemon.js +13 -1
  190. package/dist/index-daemon.js.map +1 -1
  191. package/dist/platform/bind.d.ts +4 -1
  192. package/dist/platform/bind.d.ts.map +1 -1
  193. package/dist/platform/bind.js +10 -1
  194. package/dist/platform/bind.js.map +1 -1
  195. package/dist/platform/binding.d.ts.map +1 -1
  196. package/dist/platform/binding.js +15 -9
  197. package/dist/platform/binding.js.map +1 -1
  198. package/dist/platform/device-command.d.ts +35 -0
  199. package/dist/platform/device-command.d.ts.map +1 -0
  200. package/dist/platform/device-command.js +187 -0
  201. package/dist/platform/device-command.js.map +1 -0
  202. package/dist/platform/device-enroll.d.ts +156 -0
  203. package/dist/platform/device-enroll.d.ts.map +1 -0
  204. package/dist/platform/device-enroll.js +781 -0
  205. package/dist/platform/device-enroll.js.map +1 -0
  206. package/dist/platform/device-isolation-activation-client.d.ts +28 -0
  207. package/dist/platform/device-isolation-activation-client.d.ts.map +1 -0
  208. package/dist/platform/device-isolation-activation-client.js +279 -0
  209. package/dist/platform/device-isolation-activation-client.js.map +1 -0
  210. package/dist/platform/device-isolation.d.ts +35 -0
  211. package/dist/platform/device-isolation.d.ts.map +1 -0
  212. package/dist/platform/device-isolation.js +90 -0
  213. package/dist/platform/device-isolation.js.map +1 -0
  214. package/dist/platform/device-paths.d.ts +9 -0
  215. package/dist/platform/device-paths.d.ts.map +1 -0
  216. package/dist/platform/device-paths.js +14 -0
  217. package/dist/platform/device-paths.js.map +1 -0
  218. package/dist/platform/device.d.ts +77 -0
  219. package/dist/platform/device.d.ts.map +1 -0
  220. package/dist/platform/device.js +212 -0
  221. package/dist/platform/device.js.map +1 -0
  222. package/dist/platform/host-command-context.d.ts +15 -0
  223. package/dist/platform/host-command-context.d.ts.map +1 -0
  224. package/dist/platform/host-command-context.js +26 -0
  225. package/dist/platform/host-command-context.js.map +1 -0
  226. package/dist/platform/secure-host-file.d.ts +12 -0
  227. package/dist/platform/secure-host-file.d.ts.map +1 -0
  228. package/dist/platform/secure-host-file.js +182 -0
  229. package/dist/platform/secure-host-file.js.map +1 -0
  230. package/dist/services/schedule-store.d.ts +6 -2
  231. package/dist/services/schedule-store.d.ts.map +1 -1
  232. package/dist/services/schedule-store.js +19 -4
  233. package/dist/services/schedule-store.js.map +1 -1
  234. package/dist/skills/definitions.d.ts.map +1 -1
  235. package/dist/skills/definitions.js +4 -5
  236. package/dist/skills/definitions.js.map +1 -1
  237. package/dist/types.d.ts +45 -8
  238. package/dist/types.d.ts.map +1 -1
  239. package/dist/utils/atomic-write.d.ts +13 -0
  240. package/dist/utils/atomic-write.d.ts.map +1 -1
  241. package/dist/utils/atomic-write.js +89 -9
  242. package/dist/utils/atomic-write.js.map +1 -1
  243. package/dist/utils/child-env.d.ts +40 -1
  244. package/dist/utils/child-env.d.ts.map +1 -1
  245. package/dist/utils/child-env.js +45 -0
  246. package/dist/utils/child-env.js.map +1 -1
  247. package/dist/utils/pending-input-queue.d.ts +10 -0
  248. package/dist/utils/pending-input-queue.d.ts.map +1 -1
  249. package/dist/utils/pending-input-queue.js +15 -0
  250. package/dist/utils/pending-input-queue.js.map +1 -1
  251. package/dist/worker.js +391 -28
  252. package/dist/worker.js.map +1 -1
  253. package/dist/workflows/events/payloads.d.ts +4 -4
  254. package/dist/workflows/events/schema.d.ts +16 -16
  255. package/dist/workflows/hostExecutors/botmux-schedule.d.ts +3 -1
  256. package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
  257. package/dist/workflows/hostExecutors/botmux-schedule.js +14 -3
  258. package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
  259. package/dist/workflows/v3/architect.js +1 -1
  260. package/dist/workflows/v3/architect.js.map +1 -1
  261. package/dist/workflows/v3/contract.d.ts +8 -0
  262. package/dist/workflows/v3/contract.d.ts.map +1 -1
  263. package/dist/workflows/v3/contract.js.map +1 -1
  264. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  265. package/dist/workflows/v3/daemon-run.js +2 -0
  266. package/dist/workflows/v3/daemon-run.js.map +1 -1
  267. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  268. package/dist/workflows/v3/ephemeral-pool.js +10 -2
  269. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  270. package/dist/workflows/v3/run-envelope.d.ts +24 -24
  271. package/dist/workflows/v3/runtime.d.ts +5 -0
  272. package/dist/workflows/v3/runtime.d.ts.map +1 -1
  273. package/dist/workflows/v3/runtime.js +1 -0
  274. package/dist/workflows/v3/runtime.js.map +1 -1
  275. package/package.json +6 -3
  276. package/dist/dashboard-web/chunks/chunk-I35DXGM4.js +0 -1
  277. package/dist/dashboard-web/chunks/schedules-page-Z3672POL.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { spawn as spawnProcess } from 'node:child_process';
2
2
  import type { DesktopPaths } from '../shared/types.js';
3
- import type { ExternalRuntimeCandidate } from './runtime-service.js';
3
+ import type { RuntimeLaunchTarget } from './runtime-service.js';
4
4
  import { type Pm2AppSummary } from './runtime-source.js';
5
5
  interface Pm2ListDeps {
6
6
  existsSync?: (path: string) => boolean;
@@ -8,8 +8,10 @@ interface Pm2ListDeps {
8
8
  execPath?: string;
9
9
  env?: NodeJS.ProcessEnv;
10
10
  timeoutMs?: number;
11
+ /** Probed user shell PATH for bundled runtimes (see probeShellPathEnv). */
12
+ pathEnv?: string;
11
13
  }
12
14
  export declare const defaultPm2ListTimeoutMs = 25000;
13
- export declare function listPm2Apps(paths: DesktopPaths, runtime: ExternalRuntimeCandidate, deps?: Pm2ListDeps): Promise<Pm2AppSummary[]>;
15
+ export declare function listPm2Apps(paths: DesktopPaths, runtime: RuntimeLaunchTarget, deps?: Pm2ListDeps): Promise<Pm2AppSummary[]>;
14
16
  export {};
15
17
  //# sourceMappingURL=pm2-apps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pm2-apps.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/pm2-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,YAAY,EAAuC,MAAM,oBAAoB,CAAC;AAGhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,UAAU,WAAW;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,wBAAwB,EACjC,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkE1B"}
1
+ {"version":3,"file":"pm2-apps.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/pm2-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,YAAY,EAAuC,MAAM,oBAAoB,CAAC;AAGhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,UAAU,WAAW;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAyE1B"}
@@ -1,6 +1,7 @@
1
1
  import { spawn as spawnProcess } from 'node:child_process';
2
2
  import { existsSync as pathExistsSync } from 'node:fs';
3
3
  import { delimiter, dirname, join } from 'node:path';
4
+ import { buildBundledPath } from './node-command.js';
4
5
  import { parsePm2Apps } from './runtime-source.js';
5
6
  export const defaultPm2ListTimeoutMs = 25_000;
6
7
  export function listPm2Apps(paths, runtime, deps = {}) {
@@ -10,14 +11,21 @@ export function listPm2Apps(paths, runtime, deps = {}) {
10
11
  if (!existsSync(pm2Bin)) {
11
12
  return Promise.reject(new Error(`PM2 binary not found: ${pm2Bin}`));
12
13
  }
13
- const command = pm2Bin;
14
- const args = ['jlist'];
14
+ const command = runtime.kind === 'bundled' ? runtime.nodePath : pm2Bin;
15
+ const args = runtime.kind === 'bundled' ? [pm2Bin, 'jlist'] : ['jlist'];
15
16
  const baseEnv = deps.env ?? process.env;
16
17
  const env = {
17
18
  ...baseEnv,
18
19
  // External PM2 bins use /usr/bin/env node; Finder-launched apps need a
19
20
  // repaired PATH so discovery does not depend on the user's shell startup.
20
- PATH: withRuntimePath(baseEnv.PATH, runtime.binPath, runtime.pathEnv),
21
+ // jlist may be the first pm2 contact and thus start the pm2 daemon, whose
22
+ // env sticks and propagates into resurrected apps — so the bundled branch
23
+ // carries the probed shell PATH with the SAME ordering as the daemon-start
24
+ // spawn (buildBundledPath); pm2 itself is launched via the absolute
25
+ // nodePath and never resolves node through this PATH.
26
+ PATH: runtime.kind === 'bundled'
27
+ ? buildBundledPath(baseEnv.PATH, runtime.nodePath, deps.pathEnv)
28
+ : withRuntimePath(baseEnv.PATH, runtime.binPath, runtime.pathEnv),
21
29
  PM2_HOME: paths.pm2Home,
22
30
  SESSION_DATA_DIR: paths.dataDir,
23
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pm2-apps.js","sourceRoot":"","sources":["../../../src/desktop/main/pm2-apps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pm2-apps.js","sourceRoot":"","sources":["../../../src/desktop/main/pm2-apps.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type DashboardResult } from '../../cli/dashboard-endpoint.js';
2
- import type { DesktopPaths, DesktopRuntimeState, RuntimeSource } from '../shared/types.js';
2
+ import type { DesktopPaths, DesktopRuntimeState } from '../shared/types.js';
3
3
  import { type BotmuxCommand } from './node-command.js';
4
4
  import { type Pm2AppSummary } from './runtime-source.js';
5
5
  export interface RunResult {
@@ -8,7 +8,11 @@ export interface RunResult {
8
8
  stderr: string;
9
9
  signal?: NodeJS.Signals | null;
10
10
  }
11
- type RunCommand = (cmd: BotmuxCommand) => Promise<RunResult>;
11
+ interface RunCommandOptions {
12
+ timeoutMs?: number;
13
+ maxOutputBytes?: number;
14
+ }
15
+ type RunCommand = (cmd: BotmuxCommand, options?: RunCommandOptions) => Promise<RunResult>;
12
16
  type DashboardEndpointCaller = (path: '/__cli/current') => Promise<DashboardResult>;
13
17
  export interface ExternalRuntimeCandidate {
14
18
  kind: 'external';
@@ -17,9 +21,17 @@ export interface ExternalRuntimeCandidate {
17
21
  binPath: string;
18
22
  pathEnv?: string;
19
23
  version: string;
20
- runtimeSource?: Exclude<RuntimeSource, 'none'>;
24
+ runtimeSource?: 'global-cli';
25
+ }
26
+ export interface BundledRuntimeCandidate {
27
+ kind: 'bundled';
28
+ root: string;
29
+ cliPath: string;
30
+ nodePath: string;
31
+ version: string;
32
+ runtimeSource: 'bundled';
21
33
  }
22
- export type RuntimeLaunchTarget = ExternalRuntimeCandidate;
34
+ export type RuntimeLaunchTarget = ExternalRuntimeCandidate | BundledRuntimeCandidate;
23
35
  export interface RuntimeServiceDeps {
24
36
  paths: DesktopPaths;
25
37
  appVersion: string;
@@ -34,7 +46,10 @@ export interface RuntimeServiceDeps {
34
46
  commandTimeoutMs?: number;
35
47
  externalRuntime?: ExternalRuntimeCandidate | null;
36
48
  discoverExternalRuntime?: () => ExternalRuntimeCandidate | null;
37
- pm2Apps?: (runtime: ExternalRuntimeCandidate) => Promise<Pm2AppSummary[]>;
49
+ bundledRuntime?: BundledRuntimeCandidate;
50
+ /** Probed user shell PATH for bundled-runtime spawns (see probeShellPathEnv). */
51
+ shellPathEnv?: () => string | undefined;
52
+ pm2Apps?: (runtime: RuntimeLaunchTarget) => Promise<Pm2AppSummary[]>;
38
53
  }
39
54
  export declare function createRuntimeService(deps: RuntimeServiceDeps): {
40
55
  getState(): Promise<DesktopRuntimeState>;
@@ -44,6 +59,7 @@ export declare function createRuntimeService(deps: RuntimeServiceDeps): {
44
59
  takeover(): Promise<RunResult>;
45
60
  dashboard(): Promise<RunResult>;
46
61
  currentDashboard(): Promise<RunResult>;
62
+ getDeviceStatus(): Promise<import("../shared/types.js").DesktopDeviceStatusResult>;
47
63
  };
48
64
  export {};
49
65
  //# sourceMappingURL=runtime-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-service.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/runtime-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAsD,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7G,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAC7D,KAAK,uBAAuB,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAGpF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AA6D3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,EAAE,EAAE;QACF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC;KAC9D,CAAC;IACF,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAClD,uBAAuB,CAAC,EAAE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IAChE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC3E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB;gBAuL7C,OAAO,CAAC,mBAAmB,CAAC;aAUzB,OAAO,CAAC,SAAS,CAAC;YAGnB,OAAO,CAAC,SAAS,CAAC;eAGf,OAAO,CAAC,SAAS,CAAC;gBAGjB,OAAO,CAAC,SAAS,CAAC;iBAajB,OAAO,CAAC,SAAS,CAAC;wBAKX,OAAO,CAAC,SAAS,CAAC;EAkB/C"}
1
+ {"version":3,"file":"runtime-service.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/runtime-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAiB,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAyD,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAsD,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG7G,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAC1F,KAAK,uBAAuB,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAKpF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,GAAG,uBAAuB,CAAC;AA2FrF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,EAAE,EAAE;QACF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC;KAC9D,CAAC;IACF,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAClD,uBAAuB,CAAC,EAAE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IAChE,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB;gBA4N7C,OAAO,CAAC,mBAAmB,CAAC;aAUzB,OAAO,CAAC,SAAS,CAAC;YAGnB,OAAO,CAAC,SAAS,CAAC;eAGf,OAAO,CAAC,SAAS,CAAC;gBAGjB,OAAO,CAAC,SAAS,CAAC;iBAkBjB,OAAO,CAAC,SAAS,CAAC;wBAKX,OAAO,CAAC,SAAS,CAAC;;EA6B/C"}
@@ -1,15 +1,20 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { join } from 'node:path';
3
3
  import { callDashboard } from '../../cli/dashboard-endpoint.js';
4
- import { buildExternalBotmuxCommand } from './node-command.js';
4
+ import { buildBundledBotmuxCommand, buildExternalBotmuxCommand } from './node-command.js';
5
5
  import { classifyRuntimeSource, countActiveBotmuxDaemonApps } from './runtime-source.js';
6
+ import { sanitizeDeviceStatusCommandResult } from './device-status.js';
6
7
  const defaultCommandTimeoutMs = 30_000;
7
- function defaultRun(cmd, timeoutMs = defaultCommandTimeoutMs) {
8
+ const defaultCommandOutputLimitBytes = 1024 * 1024;
9
+ const deviceStatusOutputLimitBytes = 4 * 1024;
10
+ function defaultRun(cmd, timeoutMs = defaultCommandTimeoutMs, maxOutputBytes = defaultCommandOutputLimitBytes) {
8
11
  return new Promise(resolve => {
9
12
  const child = spawn(cmd.command, cmd.args, { env: cmd.env, stdio: ['ignore', 'pipe', 'pipe'] });
10
13
  let stdout = '';
11
14
  let stderr = '';
15
+ let outputBytes = 0;
12
16
  let settled = false;
17
+ let forceKillTimer;
13
18
  const timer = setTimeout(() => {
14
19
  if (settled)
15
20
  return;
@@ -17,6 +22,11 @@ function defaultRun(cmd, timeoutMs = defaultCommandTimeoutMs) {
17
22
  // Timeout is surfaced as an ordinary failed action so renderer controls
18
23
  // can recover and show the last error without waiting for child close.
19
24
  child.kill();
25
+ forceKillTimer = setTimeout(() => {
26
+ if (child.exitCode === null && child.signalCode === null)
27
+ child.kill('SIGKILL');
28
+ }, 1_000);
29
+ forceKillTimer.unref?.();
20
30
  resolve({
21
31
  code: 1,
22
32
  stdout,
@@ -31,16 +41,39 @@ function defaultRun(cmd, timeoutMs = defaultCommandTimeoutMs) {
31
41
  clearTimeout(timer);
32
42
  resolve(result);
33
43
  };
44
+ const appendOutput = (target, chunk) => {
45
+ if (settled)
46
+ return;
47
+ const text = String(chunk);
48
+ const bytes = Buffer.byteLength(text);
49
+ if (outputBytes + bytes > maxOutputBytes) {
50
+ child.kill('SIGKILL');
51
+ finish({
52
+ code: 1,
53
+ stdout,
54
+ stderr: `Command output exceeded ${maxOutputBytes} bytes`,
55
+ signal: null,
56
+ });
57
+ return;
58
+ }
59
+ outputBytes += bytes;
60
+ if (target === 'stdout')
61
+ stdout += text;
62
+ else
63
+ stderr += text;
64
+ };
34
65
  child.stdout.on('data', chunk => {
35
- stdout += String(chunk);
66
+ appendOutput('stdout', chunk);
36
67
  });
37
68
  child.stderr.on('data', chunk => {
38
- stderr += String(chunk);
69
+ appendOutput('stderr', chunk);
39
70
  });
40
71
  child.on('error', error => {
41
72
  finish({ code: 1, stdout, stderr: stderr || error.message, signal: null });
42
73
  });
43
74
  child.on('close', (code, signal) => {
75
+ if (forceKillTimer)
76
+ clearTimeout(forceKillTimer);
44
77
  // Signal-only exits still represent a failed desktop action to the UI.
45
78
  finish({
46
79
  code: code ?? 1,
@@ -62,10 +95,22 @@ function dashboardEndpointResultToRunResult(result) {
62
95
  return { code: 1, stdout: '', stderr: `${result.reason}${detail}`, signal: null };
63
96
  }
64
97
  export function createRuntimeService(deps) {
65
- const run = deps.run ?? ((cmd) => defaultRun(cmd, deps.commandTimeoutMs));
98
+ const run = deps.run ?? ((cmd, options) => defaultRun(cmd, options?.timeoutMs ?? deps.commandTimeoutMs, options?.maxOutputBytes ?? defaultCommandOutputLimitBytes));
66
99
  const botsPath = join(deps.paths.botmuxHome, 'bots.json');
67
- const installCliMessage = 'Install the global botmux CLI with `npm install -g botmux`, then reopen Botmux Desktop.';
100
+ const installCliMessage = deps.bundledRuntime
101
+ ? 'The bundled botmux runtime is unavailable. Reinstall Botmux Desktop.'
102
+ : 'Install the global botmux CLI with `npm install -g botmux`, then reopen Botmux Desktop.';
68
103
  function command(runtime, args) {
104
+ if (runtime.kind === 'bundled') {
105
+ return buildBundledBotmuxCommand({
106
+ nodePath: runtime.nodePath,
107
+ cliPath: runtime.cliPath,
108
+ botmuxHome: deps.paths.botmuxHome,
109
+ args,
110
+ baseEnv: deps.env,
111
+ pathEnv: deps.shellPathEnv?.(),
112
+ });
113
+ }
69
114
  return buildExternalBotmuxCommand({
70
115
  binPath: runtime.binPath,
71
116
  botmuxHome: deps.paths.botmuxHome,
@@ -78,7 +123,7 @@ export function createRuntimeService(deps) {
78
123
  return deps.discoverExternalRuntime ? deps.discoverExternalRuntime() : deps.externalRuntime ?? null;
79
124
  }
80
125
  function activeRuntime() {
81
- return currentExternalRuntime();
126
+ return deps.bundledRuntime ?? currentExternalRuntime();
82
127
  }
83
128
  function rejectedCliRequired() {
84
129
  return {
@@ -106,6 +151,12 @@ export function createRuntimeService(deps) {
106
151
  function externalSource(runtime) {
107
152
  return runtime.runtimeSource ?? 'global-cli';
108
153
  }
154
+ function isRuntimeOwned(runtime, sourcePath, sourceVersion) {
155
+ if (runtime.kind !== 'bundled')
156
+ return true;
157
+ const ownedPath = Boolean(sourcePath && (sourcePath === runtime.cliPath || sourcePath.startsWith(`${runtime.root}/`)));
158
+ return ownedPath && (!sourceVersion || sourceVersion === runtime.version);
159
+ }
109
160
  function readBotConfig() {
110
161
  if (!deps.fs.existsSync(botsPath))
111
162
  return { status: 'not_configured', count: 0 };
@@ -135,7 +186,7 @@ export function createRuntimeService(deps) {
135
186
  let stateInFlight = null;
136
187
  async function computeState() {
137
188
  const config = readBotConfig();
138
- const active = currentExternalRuntime();
189
+ const active = activeRuntime();
139
190
  const selectedSource = active ? externalSource(active) : 'none';
140
191
  if (config.status === 'invalid') {
141
192
  // A malformed bots.json is actionable user state, not an empty setup.
@@ -189,6 +240,21 @@ export function createRuntimeService(deps) {
189
240
  const source = classifyRuntimeSource({ pm2Apps });
190
241
  const onlineDaemonCount = countActiveBotmuxDaemonApps(pm2Apps);
191
242
  if (source.running) {
243
+ if (!isRuntimeOwned(active, source.sourcePath, source.sourceVersion)) {
244
+ return {
245
+ status: 'degraded',
246
+ appVersion: deps.appVersion,
247
+ runtimeVersion: active.version,
248
+ runtimeSource: 'global-cli',
249
+ runtimeManaged: false,
250
+ runtimePath: source.sourcePath,
251
+ botCount: config.count,
252
+ onlineDaemonCount,
253
+ attentionCount: 1,
254
+ dashboardUrl: null,
255
+ message: '检测到由外置 botmux 启动的运行时,Desktop 正在切换到内置运行时。',
256
+ };
257
+ }
192
258
  return {
193
259
  status: 'running',
194
260
  appVersion: deps.appVersion,
@@ -257,8 +323,14 @@ export function createRuntimeService(deps) {
257
323
  },
258
324
  async takeover() {
259
325
  const state = await this.getState();
260
- // Compatibility shim for the old IPC name: "takeover" now means adopt
261
- // the selected global CLI runtime. It never stops or replaces a runtime.
326
+ const runtime = activeRuntime();
327
+ if (!runtime)
328
+ return rejectedCliRequired();
329
+ if (runtime.kind === 'bundled') {
330
+ // Replace core processes only. The generated ecosystem pins their
331
+ // interpreter to bundled Node, while unrelated plugin services survive.
332
+ return run(command(runtime, ['restart']));
333
+ }
262
334
  return {
263
335
  code: state.runtimeManaged ? 0 : 1,
264
336
  stdout: '',
@@ -291,6 +363,18 @@ export function createRuntimeService(deps) {
291
363
  });
292
364
  return dashboardEndpointResultToRunResult(result);
293
365
  },
366
+ async getDeviceStatus() {
367
+ const runtime = activeRuntime();
368
+ if (!runtime)
369
+ return { ok: false, reason: 'cli_unavailable' };
370
+ // Device credentials stay inside the host CLI. Electron receives only the
371
+ // command's public status JSON, then reconstructs an allow-listed DTO
372
+ // before anything can cross the renderer IPC boundary.
373
+ const result = await run(command(runtime, ['device', 'status', '--json']), {
374
+ maxOutputBytes: deviceStatusOutputLimitBytes,
375
+ });
376
+ return sanitizeDeviceStatusCommandResult(result);
377
+ },
294
378
  };
295
379
  return service;
296
380
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-service.js","sourceRoot":"","sources":["../../../src/desktop/main/runtime-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-service.js","sourceRoot":"","sources":["../../../src/desktop/main/runtime-service.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export interface Pm2AppSummary {
2
2
  name: string;
3
3
  script?: string;
4
4
  status?: string;
5
+ version?: string;
5
6
  }
6
7
  export interface RuntimeSourceInput {
7
8
  pm2Apps: Pm2AppSummary[];
@@ -10,6 +11,7 @@ export interface RuntimeSourceInput {
10
11
  export interface RuntimeSource {
11
12
  running: boolean;
12
13
  sourcePath: string | null;
14
+ sourceVersion: string | null;
13
15
  }
14
16
  export declare function classifyRuntimeSource(input: RuntimeSourceInput): RuntimeSource;
15
17
  export declare function countActiveBotmuxDaemonApps(pm2Apps: Pm2AppSummary[]): number;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-source.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/runtime-source.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAa9E;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAE5E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAmB5D"}
1
+ {"version":3,"file":"runtime-source.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/runtime-source.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAc9E;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAE5E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAoB5D"}
@@ -1,16 +1,17 @@
1
1
  import { resolve } from 'node:path';
2
2
  export function classifyRuntimeSource(input) {
3
- // CLI-first Desktop only needs to know whether a botmux PM2 process exists;
4
- // ownership comes from the selected global CLI, not from a bundled path.
3
+ // The source path decides whether Desktop already owns the fleet or must
4
+ // replace an older/global installation with its bundled runtime.
5
5
  const botmuxApps = activeBotmuxApps(input.pm2Apps);
6
6
  if (botmuxApps.length === 0)
7
- return { running: false, sourcePath: null };
7
+ return { running: false, sourcePath: null, sourceVersion: null };
8
8
  const sourcePaths = botmuxApps
9
9
  .map(app => app.script ? normalizeRuntimePath(app.script, input.normalizePath) : null)
10
10
  .filter((path) => path !== null);
11
11
  return {
12
12
  running: true,
13
13
  sourcePath: sourcePaths[0] ?? null,
14
+ sourceVersion: botmuxApps.find(app => app.version)?.version ?? null,
14
15
  };
15
16
  }
16
17
  export function countActiveBotmuxDaemonApps(pm2Apps) {
@@ -33,7 +34,8 @@ export function parsePm2Apps(stdout) {
33
34
  ? record.pm2_env.pm_exec_path
34
35
  : undefined;
35
36
  const status = typeof record.pm2_env?.status === 'string' ? record.pm2_env.status : undefined;
36
- return [{ name: record.name, script, status }];
37
+ const version = typeof record.pm2_env?.version === 'string' ? record.pm2_env.version : undefined;
38
+ return [{ name: record.name, script, status, version }];
37
39
  });
38
40
  }
39
41
  catch {
@@ -44,10 +46,14 @@ function activeBotmuxApps(pm2Apps) {
44
46
  return pm2Apps.filter(isBotmuxApp).filter(isActivePm2App);
45
47
  }
46
48
  function isBotmuxApp(app) {
47
- return app.name === 'botmux-dashboard' || app.name === 'botmux' || app.name.startsWith('botmux-');
49
+ return app.name === 'botmux-dashboard'
50
+ || app.name === 'botmux'
51
+ || (app.name.startsWith('botmux-') && !app.name.startsWith('botmux-plugin-'));
48
52
  }
49
53
  function isBotmuxDaemonApp(app) {
50
- return app.name !== 'botmux-dashboard' && (app.name === 'botmux' || app.name.startsWith('botmux-'));
54
+ return app.name !== 'botmux-dashboard'
55
+ && !app.name.startsWith('botmux-plugin-')
56
+ && (app.name === 'botmux' || app.name.startsWith('botmux-'));
51
57
  }
52
58
  function isActivePm2App(app) {
53
59
  // PM2 keeps stopped processes in jlist, so only live-ish statuses should hold
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-source.js","sourceRoot":"","sources":["../../../src/desktop/main/runtime-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-source.js","sourceRoot":"","sources":["../../../src/desktop/main/runtime-source.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Tray, type BrowserWindow } from 'electron';
2
2
  export declare function createDesktopTray(args: {
3
+ iconPath: string;
3
4
  window: BrowserWindow;
4
5
  onStart: () => void;
5
6
  onStop: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,IAAI,EAAe,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,GAAG,IAAI,CA0BP"}
1
+ {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../../../src/desktop/main/tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,IAAI,EAAe,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,GAAG,IAAI,CA0BP"}
@@ -1,8 +1,8 @@
1
1
  import { Menu, Tray, nativeImage } from 'electron';
2
2
  export function createDesktopTray(args) {
3
- // Keep the menu-bar lifecycle functional even before a branded tray icon
4
- // asset exists.
5
- const tray = new Tray(nativeImage.createEmpty());
3
+ const icon = nativeImage.createFromPath(args.iconPath);
4
+ icon.setTemplateImage(true);
5
+ const tray = new Tray(icon);
6
6
  const showWindow = () => {
7
7
  args.window.show();
8
8
  args.window.focus();
@@ -1 +1 @@
1
- {"version":3,"file":"tray.js","sourceRoot":"","sources":["../../../src/desktop/main/tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAsB,MAAM,UAAU,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAAC,IAOjC;IACC,yEAAyE;IACzE,gBAAgB;IAChB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE;QAC5C,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;QAC5C,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;QAClD,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;QAC9C,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;QACrD,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE7B,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../../../src/desktop/main/tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAsB,MAAM,UAAU,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAAC,IAQjC;IACC,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE;QAC5C,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;QAC5C,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;QAClD,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;QAC9C,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;QACrD,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE7B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -2,10 +2,11 @@ import { app, session, shell } from 'electron';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
4
  import { join } from 'node:path';
5
- import { autoStartCliRuntimeOnLaunch } from './main/auto-start.js';
6
- import { discoverExternalRuntimeCandidate } from './main/external-runtime.js';
5
+ import { autoStartCliRuntimeOnLaunch, shouldTakeOverExternalRuntime } from './main/auto-start.js';
7
6
  import { createRuntimeStateMonitor, registerDesktopIpc } from './main/ipc.js';
8
7
  import { resolveDesktopPaths } from './main/paths.js';
8
+ import { resolveBundledRuntimeCandidate } from './main/bundled-runtime.js';
9
+ import { probeShellPathEnv } from './main/external-runtime.js';
9
10
  import { listPm2Apps } from './main/pm2-apps.js';
10
11
  import { createRuntimeService } from './main/runtime-service.js';
11
12
  import { createDesktopTray } from './main/tray.js';
@@ -56,33 +57,51 @@ async function bootstrap() {
56
57
  devRepoRoot: process.cwd(),
57
58
  });
58
59
  const appVersion = resolveDesktopAppVersion(app.getVersion());
60
+ const bundledRuntime = resolveBundledRuntimeCandidate({
61
+ resourcesPath: process.resourcesPath,
62
+ repoRoot: process.cwd(),
63
+ isPackaged: app.isPackaged,
64
+ arch: process.arch,
65
+ appVersion,
66
+ env: process.env,
67
+ });
59
68
  const runtime = createRuntimeService({
60
69
  paths,
61
70
  appVersion,
62
71
  execPath: process.execPath,
63
72
  env: process.env,
64
73
  fs: { existsSync, readFileSync },
65
- // Re-scan the user's global CLI on every status/action path so an in-place
66
- // `botmux upgrade` is detected without requiring the desktop app to restart.
67
- discoverExternalRuntime: () => discoverExternalRuntimeCandidate(paths),
68
- pm2Apps: async (selectedRuntime) => listPm2Apps(paths, selectedRuntime),
74
+ bundledRuntime,
75
+ // Finder-launched apps inherit launchd's minimal PATH; the daemon needs the
76
+ // user's real shell PATH (zsh/bash, profile+rc) to find per-bot CLIs.
77
+ shellPathEnv: () => probeShellPathEnv(),
78
+ pm2Apps: async (selectedRuntime) => listPm2Apps(paths, selectedRuntime, { pathEnv: probeShellPathEnv() }),
69
79
  });
70
80
  const win = createMainWindow(join(desktopDir, 'preload.cjs'), join(desktopDir, 'renderer'));
71
81
  mainWindow = win;
82
+ let ownershipRepair = null;
72
83
  const monitor = createRuntimeStateMonitor({
73
84
  runtime,
74
85
  sendState: state => {
75
86
  if (!win.isDestroyed())
76
87
  win.webContents.send('desktop:state-changed', state);
88
+ // A user may invoke an older/global `botmux restart` after Desktop has
89
+ // launched. Reclaim the fleet instead of allowing the external runtime
90
+ // to remain connected to the same bots.
91
+ if (shouldTakeOverExternalRuntime(state) && !ownershipRepair) {
92
+ ownershipRepair = runtime.takeover()
93
+ .then(() => monitor.refresh())
94
+ .catch(error => console.warn('[desktop] bundled runtime ownership repair failed', error))
95
+ .finally(() => { ownershipRepair = null; });
96
+ }
77
97
  },
78
98
  });
79
99
  registerDesktopIpc({ paths, runtime, monitor });
80
- monitor.start();
81
100
  void autoStartCliRuntimeOnLaunch({
82
101
  runtime,
83
102
  monitor,
84
103
  warn: message => console.warn(`[desktop] ${message}`),
85
- });
104
+ }).finally(() => monitor.start());
86
105
  win.on('close', event => {
87
106
  // Closing the window should not stop the supervised daemon; explicit Quit
88
107
  // exits the shell, explicit Stop controls the runtime.
@@ -92,6 +111,7 @@ async function bootstrap() {
92
111
  }
93
112
  });
94
113
  tray = createDesktopTray({
114
+ iconPath: join(desktopDir, 'assets', 'trayTemplate.png'),
95
115
  window: win,
96
116
  onStart: () => {
97
117
  void runtime.start();