@polderlabs/bizar-omp 0.6.2 → 0.6.3

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 (371) hide show
  1. package/README.md +54 -0
  2. package/dist/cli/agents.d.ts +1 -0
  3. package/dist/cli/agents.d.ts.map +1 -1
  4. package/dist/cli/agents.js +11 -0
  5. package/dist/cli/agents.js.map +1 -1
  6. package/dist/cli/omb-commands.d.ts +30 -0
  7. package/dist/cli/omb-commands.d.ts.map +1 -0
  8. package/dist/cli/omb-commands.js +109 -0
  9. package/dist/cli/omb-commands.js.map +1 -0
  10. package/dist/cli/omb-daemon.d.ts +1 -0
  11. package/dist/cli/omb-daemon.d.ts.map +1 -1
  12. package/dist/cli/omb-daemon.js +15 -1
  13. package/dist/cli/omb-daemon.js.map +1 -1
  14. package/dist/cli/omb-dashboard.d.ts +1 -1
  15. package/dist/cli/omb-dashboard.d.ts.map +1 -1
  16. package/dist/cli/omb-dashboard.js +2 -1
  17. package/dist/cli/omb-dashboard.js.map +1 -1
  18. package/dist/cli/omb-runtime.d.ts +42 -0
  19. package/dist/cli/omb-runtime.d.ts.map +1 -0
  20. package/dist/cli/omb-runtime.js +507 -0
  21. package/dist/cli/omb-runtime.js.map +1 -0
  22. package/dist/cli/omb-tray.d.ts +3 -0
  23. package/dist/cli/omb-tray.d.ts.map +1 -0
  24. package/dist/cli/omb-tray.js +44 -0
  25. package/dist/cli/omb-tray.js.map +1 -0
  26. package/dist/cli/omb.js +8 -33
  27. package/dist/cli/omb.js.map +1 -1
  28. package/dist/omp/daemon.d.ts +1 -0
  29. package/dist/omp/daemon.d.ts.map +1 -1
  30. package/dist/omp/daemon.js +1 -1
  31. package/dist/omp/daemon.js.map +1 -1
  32. package/dist/omp/omb-sessions.d.ts +24 -0
  33. package/dist/omp/omb-sessions.d.ts.map +1 -1
  34. package/dist/omp/omb-sessions.js +30 -12
  35. package/dist/omp/omb-sessions.js.map +1 -1
  36. package/dist/omp/tmux.d.ts +18 -0
  37. package/dist/omp/tmux.d.ts.map +1 -1
  38. package/dist/omp/tmux.js +131 -4
  39. package/dist/omp/tmux.js.map +1 -1
  40. package/dist/omp/tray.d.ts +2 -0
  41. package/dist/omp/tray.d.ts.map +1 -1
  42. package/dist/omp/tray.js +30 -4
  43. package/dist/omp/tray.js.map +1 -1
  44. package/dist/src/cli/agents-ink.d.ts +25 -0
  45. package/dist/src/cli/agents-ink.js +517 -0
  46. package/dist/src/cli/agents-ink.js.map +1 -0
  47. package/dist/src/cli/agents.d.ts +14 -0
  48. package/dist/src/cli/agents.js +197 -0
  49. package/dist/src/cli/agents.js.map +1 -0
  50. package/dist/src/cli/directory-selector.d.ts +60 -0
  51. package/dist/src/cli/directory-selector.js +208 -0
  52. package/dist/src/cli/directory-selector.js.map +1 -0
  53. package/dist/src/cli/doctor.d.ts +41 -0
  54. package/dist/src/cli/doctor.js +31 -0
  55. package/dist/src/cli/doctor.js.map +1 -0
  56. package/dist/src/cli/install.d.ts +129 -0
  57. package/dist/src/cli/install.js +164 -0
  58. package/dist/src/cli/install.js.map +1 -0
  59. package/dist/src/cli/main.d.ts +2 -0
  60. package/dist/src/cli/main.js +117 -0
  61. package/dist/src/cli/main.js.map +1 -0
  62. package/dist/src/cli/migrate.d.ts +18 -0
  63. package/dist/src/cli/migrate.js +14 -0
  64. package/dist/src/cli/migrate.js.map +1 -0
  65. package/dist/src/cli/omb-commands.d.ts +29 -0
  66. package/dist/src/cli/omb-commands.js +107 -0
  67. package/dist/src/cli/omb-commands.js.map +1 -0
  68. package/dist/src/cli/omb-daemon.d.ts +2 -0
  69. package/dist/src/cli/omb-daemon.js +135 -0
  70. package/dist/src/cli/omb-daemon.js.map +1 -0
  71. package/dist/src/cli/omb-dashboard.d.ts +12 -0
  72. package/dist/src/cli/omb-dashboard.js +113 -0
  73. package/dist/src/cli/omb-dashboard.js.map +1 -0
  74. package/dist/src/cli/omb-invocation.d.ts +8 -0
  75. package/dist/src/cli/omb-invocation.js +41 -0
  76. package/dist/src/cli/omb-invocation.js.map +1 -0
  77. package/dist/src/cli/omb-runtime.d.ts +41 -0
  78. package/dist/src/cli/omb-runtime.js +371 -0
  79. package/dist/src/cli/omb-runtime.js.map +1 -0
  80. package/dist/src/cli/omb-tray.d.ts +2 -0
  81. package/dist/src/cli/omb-tray.js +38 -0
  82. package/dist/src/cli/omb-tray.js.map +1 -0
  83. package/dist/src/cli/omb.d.ts +2 -0
  84. package/dist/src/cli/omb.js +31 -0
  85. package/dist/src/cli/omb.js.map +1 -0
  86. package/dist/src/cli/omp-theme.d.ts +17 -0
  87. package/dist/src/cli/omp-theme.js +22 -0
  88. package/dist/src/cli/omp-theme.js.map +1 -0
  89. package/dist/src/cli/process.d.ts +6 -0
  90. package/dist/src/cli/process.js +54 -0
  91. package/dist/src/cli/process.js.map +1 -0
  92. package/dist/src/cli/run.d.ts +2 -0
  93. package/dist/src/cli/run.js +5 -0
  94. package/dist/src/cli/run.js.map +1 -0
  95. package/dist/src/cli/setup-ui.d.ts +37 -0
  96. package/dist/src/cli/setup-ui.js +90 -0
  97. package/dist/src/cli/setup-ui.js.map +1 -0
  98. package/dist/src/core/acceptance.d.ts +32 -0
  99. package/dist/src/core/acceptance.js +87 -0
  100. package/dist/src/core/acceptance.js.map +1 -0
  101. package/dist/src/core/errors.d.ts +20 -0
  102. package/dist/src/core/errors.js +30 -0
  103. package/dist/src/core/errors.js.map +1 -0
  104. package/dist/src/core/evidence.d.ts +10 -0
  105. package/dist/src/core/evidence.js +35 -0
  106. package/dist/src/core/evidence.js.map +1 -0
  107. package/dist/src/core/policies.d.ts +10 -0
  108. package/dist/src/core/policies.js +60 -0
  109. package/dist/src/core/policies.js.map +1 -0
  110. package/dist/src/core/recovery.d.ts +6 -0
  111. package/dist/src/core/recovery.js +56 -0
  112. package/dist/src/core/recovery.js.map +1 -0
  113. package/dist/src/core/transitions.d.ts +13 -0
  114. package/dist/src/core/transitions.js +59 -0
  115. package/dist/src/core/transitions.js.map +1 -0
  116. package/dist/src/core/types.d.ts +256 -0
  117. package/dist/src/core/types.js +2 -0
  118. package/dist/src/core/types.js.map +1 -0
  119. package/dist/src/extension.d.ts +60 -0
  120. package/dist/src/extension.js +538 -0
  121. package/dist/src/extension.js.map +1 -0
  122. package/dist/src/index.d.ts +29 -0
  123. package/dist/src/index.js +30 -0
  124. package/dist/src/index.js.map +1 -0
  125. package/dist/src/omp/autonomous-settings.d.ts +14 -0
  126. package/dist/src/omp/autonomous-settings.js +65 -0
  127. package/dist/src/omp/autonomous-settings.js.map +1 -0
  128. package/dist/src/omp/capabilities.d.ts +23 -0
  129. package/dist/src/omp/capabilities.js +6 -0
  130. package/dist/src/omp/capabilities.js.map +1 -0
  131. package/dist/src/omp/compatibility.d.ts +30 -0
  132. package/dist/src/omp/compatibility.js +34 -0
  133. package/dist/src/omp/compatibility.js.map +1 -0
  134. package/dist/src/omp/completion.d.ts +7 -0
  135. package/dist/src/omp/completion.js +10 -0
  136. package/dist/src/omp/completion.js.map +1 -0
  137. package/dist/src/omp/config.d.ts +10 -0
  138. package/dist/src/omp/config.js +14 -0
  139. package/dist/src/omp/config.js.map +1 -0
  140. package/dist/src/omp/context.d.ts +15 -0
  141. package/dist/src/omp/context.js +3 -0
  142. package/dist/src/omp/context.js.map +1 -0
  143. package/dist/src/omp/daemon-service.d.ts +25 -0
  144. package/dist/src/omp/daemon-service.js +483 -0
  145. package/dist/src/omp/daemon-service.js.map +1 -0
  146. package/dist/src/omp/daemon.d.ts +48 -0
  147. package/dist/src/omp/daemon.js +194 -0
  148. package/dist/src/omp/daemon.js.map +1 -0
  149. package/dist/src/omp/dashboard-html.d.ts +3 -0
  150. package/dist/src/omp/dashboard-html.js +419 -0
  151. package/dist/src/omp/dashboard-html.js.map +1 -0
  152. package/dist/src/omp/dispatch-admission.d.ts +2 -0
  153. package/dist/src/omp/dispatch-admission.js +12 -0
  154. package/dist/src/omp/dispatch-admission.js.map +1 -0
  155. package/dist/src/omp/integration-recovery.d.ts +10 -0
  156. package/dist/src/omp/integration-recovery.js +18 -0
  157. package/dist/src/omp/integration-recovery.js.map +1 -0
  158. package/dist/src/omp/isolation-policy.d.ts +14 -0
  159. package/dist/src/omp/isolation-policy.js +9 -0
  160. package/dist/src/omp/isolation-policy.js.map +1 -0
  161. package/dist/src/omp/lifecycle.d.ts +14 -0
  162. package/dist/src/omp/lifecycle.js +14 -0
  163. package/dist/src/omp/lifecycle.js.map +1 -0
  164. package/dist/src/omp/memory.d.ts +16 -0
  165. package/dist/src/omp/memory.js +4 -0
  166. package/dist/src/omp/memory.js.map +1 -0
  167. package/dist/src/omp/model-role-assignment.d.ts +296 -0
  168. package/dist/src/omp/model-role-assignment.js +559 -0
  169. package/dist/src/omp/model-role-assignment.js.map +1 -0
  170. package/dist/src/omp/model-roles.d.ts +19 -0
  171. package/dist/src/omp/model-roles.js +6 -0
  172. package/dist/src/omp/model-roles.js.map +1 -0
  173. package/dist/src/omp/omb-sessions.d.ts +122 -0
  174. package/dist/src/omp/omb-sessions.js +512 -0
  175. package/dist/src/omp/omb-sessions.js.map +1 -0
  176. package/dist/src/omp/omb-settings.d.ts +35 -0
  177. package/dist/src/omp/omb-settings.js +104 -0
  178. package/dist/src/omp/omb-settings.js.map +1 -0
  179. package/dist/src/omp/result-reconciliation.d.ts +2 -0
  180. package/dist/src/omp/result-reconciliation.js +9 -0
  181. package/dist/src/omp/result-reconciliation.js.map +1 -0
  182. package/dist/src/omp/rpc.d.ts +67 -0
  183. package/dist/src/omp/rpc.js +4 -0
  184. package/dist/src/omp/rpc.js.map +1 -0
  185. package/dist/src/omp/run-log.d.ts +25 -0
  186. package/dist/src/omp/run-log.js +24 -0
  187. package/dist/src/omp/run-log.js.map +1 -0
  188. package/dist/src/omp/session-activity.d.ts +70 -0
  189. package/dist/src/omp/session-activity.js +361 -0
  190. package/dist/src/omp/session-activity.js.map +1 -0
  191. package/dist/src/omp/session-controls.d.ts +17 -0
  192. package/dist/src/omp/session-controls.js +14 -0
  193. package/dist/src/omp/session-controls.js.map +1 -0
  194. package/dist/src/omp/tmux.d.ts +89 -0
  195. package/dist/src/omp/tmux.js +445 -0
  196. package/dist/src/omp/tmux.js.map +1 -0
  197. package/dist/src/omp/tray-icons.d.ts +5 -0
  198. package/dist/src/omp/tray-icons.js +78 -0
  199. package/dist/src/omp/tray-icons.js.map +1 -0
  200. package/dist/src/omp/tray.d.ts +23 -0
  201. package/dist/src/omp/tray.js +167 -0
  202. package/dist/src/omp/tray.js.map +1 -0
  203. package/dist/src/services/budget.d.ts +19 -0
  204. package/dist/src/services/budget.js +10 -0
  205. package/dist/src/services/budget.js.map +1 -0
  206. package/dist/src/services/candidate-local.d.ts +13 -0
  207. package/dist/src/services/candidate-local.js +15 -0
  208. package/dist/src/services/candidate-local.js.map +1 -0
  209. package/dist/src/services/candidates.d.ts +20 -0
  210. package/dist/src/services/candidates.js +100 -0
  211. package/dist/src/services/candidates.js.map +1 -0
  212. package/dist/src/services/evidence-bundle.d.ts +17 -0
  213. package/dist/src/services/evidence-bundle.js +21 -0
  214. package/dist/src/services/evidence-bundle.js.map +1 -0
  215. package/dist/src/services/inspector.d.ts +11 -0
  216. package/dist/src/services/inspector.js +6 -0
  217. package/dist/src/services/inspector.js.map +1 -0
  218. package/dist/src/services/lessons.d.ts +13 -0
  219. package/dist/src/services/lessons.js +11 -0
  220. package/dist/src/services/lessons.js.map +1 -0
  221. package/dist/src/services/projection.d.ts +21 -0
  222. package/dist/src/services/projection.js +10 -0
  223. package/dist/src/services/projection.js.map +1 -0
  224. package/dist/src/services/readiness.d.ts +4 -0
  225. package/dist/src/services/readiness.js +35 -0
  226. package/dist/src/services/readiness.js.map +1 -0
  227. package/dist/src/services/recipes.d.ts +15 -0
  228. package/dist/src/services/recipes.js +42 -0
  229. package/dist/src/services/recipes.js.map +1 -0
  230. package/dist/src/services/recovery.d.ts +19 -0
  231. package/dist/src/services/recovery.js +9 -0
  232. package/dist/src/services/recovery.js.map +1 -0
  233. package/dist/src/services/review.d.ts +15 -0
  234. package/dist/src/services/review.js +9 -0
  235. package/dist/src/services/review.js.map +1 -0
  236. package/dist/src/storage/journal-recovery.d.ts +10 -0
  237. package/dist/src/storage/journal-recovery.js +33 -0
  238. package/dist/src/storage/journal-recovery.js.map +1 -0
  239. package/dist/src/storage/journal.d.ts +12 -0
  240. package/dist/src/storage/journal.js +82 -0
  241. package/dist/src/storage/journal.js.map +1 -0
  242. package/dist/src/storage/migrations.d.ts +22 -0
  243. package/dist/src/storage/migrations.js +107 -0
  244. package/dist/src/storage/migrations.js.map +1 -0
  245. package/dist/src/storage/repository-identity.d.ts +11 -0
  246. package/dist/src/storage/repository-identity.js +67 -0
  247. package/dist/src/storage/repository-identity.js.map +1 -0
  248. package/dist/src/storage/resources.d.ts +66 -0
  249. package/dist/src/storage/resources.js +148 -0
  250. package/dist/src/storage/resources.js.map +1 -0
  251. package/dist/src/tools/evidence.d.ts +8 -0
  252. package/dist/src/tools/evidence.js +9 -0
  253. package/dist/src/tools/evidence.js.map +1 -0
  254. package/dist/src/tools/integrate.d.ts +13 -0
  255. package/dist/src/tools/integrate.js +90 -0
  256. package/dist/src/tools/integrate.js.map +1 -0
  257. package/dist/src/tools/result.d.ts +9 -0
  258. package/dist/src/tools/result.js +2 -0
  259. package/dist/src/tools/result.js.map +1 -0
  260. package/dist/src/tools/verify.d.ts +13 -0
  261. package/dist/src/tools/verify.js +61 -0
  262. package/dist/src/tools/verify.js.map +1 -0
  263. package/dist/src/tools/workflow.d.ts +8 -0
  264. package/dist/src/tools/workflow.js +65 -0
  265. package/dist/src/tools/workflow.js.map +1 -0
  266. package/dist/src/workflows/direct.d.ts +9 -0
  267. package/dist/src/workflows/direct.js +2 -0
  268. package/dist/src/workflows/direct.js.map +1 -0
  269. package/dist/src/workflows/implement.d.ts +2 -0
  270. package/dist/src/workflows/implement.js +4 -0
  271. package/dist/src/workflows/implement.js.map +1 -0
  272. package/dist/src/workflows/plan.d.ts +17 -0
  273. package/dist/src/workflows/plan.js +6 -0
  274. package/dist/src/workflows/plan.js.map +1 -0
  275. package/dist/src/workflows/research.d.ts +15 -0
  276. package/dist/src/workflows/research.js +2 -0
  277. package/dist/src/workflows/research.js.map +1 -0
  278. package/dist/src/workflows/review.d.ts +15 -0
  279. package/dist/src/workflows/review.js +2 -0
  280. package/dist/src/workflows/review.js.map +1 -0
  281. package/dist/src/workflows/verify.d.ts +9 -0
  282. package/dist/src/workflows/verify.js +2 -0
  283. package/dist/src/workflows/verify.js.map +1 -0
  284. package/dist/tests/acceptance.test.d.ts +1 -0
  285. package/dist/tests/acceptance.test.js +27 -0
  286. package/dist/tests/acceptance.test.js.map +1 -0
  287. package/dist/tests/agents.test.d.ts +1 -0
  288. package/dist/tests/agents.test.js +369 -0
  289. package/dist/tests/agents.test.js.map +1 -0
  290. package/dist/tests/candidates.test.d.ts +1 -0
  291. package/dist/tests/candidates.test.js +60 -0
  292. package/dist/tests/candidates.test.js.map +1 -0
  293. package/dist/tests/core.test.d.ts +1 -0
  294. package/dist/tests/core.test.js +39 -0
  295. package/dist/tests/core.test.js.map +1 -0
  296. package/dist/tests/daemon.test.d.ts +1 -0
  297. package/dist/tests/daemon.test.js +157 -0
  298. package/dist/tests/daemon.test.js.map +1 -0
  299. package/dist/tests/dashboard.test.d.ts +1 -0
  300. package/dist/tests/dashboard.test.js +414 -0
  301. package/dist/tests/dashboard.test.js.map +1 -0
  302. package/dist/tests/directory-selector.test.d.ts +1 -0
  303. package/dist/tests/directory-selector.test.js +93 -0
  304. package/dist/tests/directory-selector.test.js.map +1 -0
  305. package/dist/tests/doctor.test.d.ts +1 -0
  306. package/dist/tests/doctor.test.js +32 -0
  307. package/dist/tests/doctor.test.js.map +1 -0
  308. package/dist/tests/install.test.d.ts +1 -0
  309. package/dist/tests/install.test.js +101 -0
  310. package/dist/tests/install.test.js.map +1 -0
  311. package/dist/tests/integration.test.d.ts +1 -0
  312. package/dist/tests/integration.test.js +49 -0
  313. package/dist/tests/integration.test.js.map +1 -0
  314. package/dist/tests/journal.test.d.ts +1 -0
  315. package/dist/tests/journal.test.js +50 -0
  316. package/dist/tests/journal.test.js.map +1 -0
  317. package/dist/tests/model-role-assignment.test.d.ts +1 -0
  318. package/dist/tests/model-role-assignment.test.js +294 -0
  319. package/dist/tests/model-role-assignment.test.js.map +1 -0
  320. package/dist/tests/omb-runtime.test.d.ts +1 -0
  321. package/dist/tests/omb-runtime.test.js +554 -0
  322. package/dist/tests/omb-runtime.test.js.map +1 -0
  323. package/dist/tests/omb-session-actions.test.d.ts +1 -0
  324. package/dist/tests/omb-session-actions.test.js +191 -0
  325. package/dist/tests/omb-session-actions.test.js.map +1 -0
  326. package/dist/tests/omb-settings.test.d.ts +1 -0
  327. package/dist/tests/omb-settings.test.js +82 -0
  328. package/dist/tests/omb-settings.test.js.map +1 -0
  329. package/dist/tests/omp-contract.test.d.ts +1 -0
  330. package/dist/tests/omp-contract.test.js +362 -0
  331. package/dist/tests/omp-contract.test.js.map +1 -0
  332. package/dist/tests/process.test.d.ts +1 -0
  333. package/dist/tests/process.test.js +12 -0
  334. package/dist/tests/process.test.js.map +1 -0
  335. package/dist/tests/psmux-windows.test.d.ts +1 -0
  336. package/dist/tests/psmux-windows.test.js +105 -0
  337. package/dist/tests/psmux-windows.test.js.map +1 -0
  338. package/dist/tests/recovery.test.d.ts +1 -0
  339. package/dist/tests/recovery.test.js +9 -0
  340. package/dist/tests/recovery.test.js.map +1 -0
  341. package/dist/tests/resources.test.d.ts +1 -0
  342. package/dist/tests/resources.test.js +55 -0
  343. package/dist/tests/resources.test.js.map +1 -0
  344. package/dist/tests/session-activity.test.d.ts +1 -0
  345. package/dist/tests/session-activity.test.js +159 -0
  346. package/dist/tests/session-activity.test.js.map +1 -0
  347. package/dist/tests/setup-ui.test.d.ts +1 -0
  348. package/dist/tests/setup-ui.test.js +37 -0
  349. package/dist/tests/setup-ui.test.js.map +1 -0
  350. package/dist/tests/storage-integrity.test.d.ts +1 -0
  351. package/dist/tests/storage-integrity.test.js +88 -0
  352. package/dist/tests/storage-integrity.test.js.map +1 -0
  353. package/dist/tests/tmux.test.d.ts +1 -0
  354. package/dist/tests/tmux.test.js +239 -0
  355. package/dist/tests/tmux.test.js.map +1 -0
  356. package/dist/tests/tray.test.d.ts +1 -0
  357. package/dist/tests/tray.test.js +37 -0
  358. package/dist/tests/tray.test.js.map +1 -0
  359. package/dist/tests/verification.test.d.ts +1 -0
  360. package/dist/tests/verification.test.js +61 -0
  361. package/dist/tests/verification.test.js.map +1 -0
  362. package/dist/tests/workflow-features.test.d.ts +1 -0
  363. package/dist/tests/workflow-features.test.js +82 -0
  364. package/dist/tests/workflow-features.test.js.map +1 -0
  365. package/dist/tests/workflow-safety.test.d.ts +1 -0
  366. package/dist/tests/workflow-safety.test.js +57 -0
  367. package/dist/tests/workflow-safety.test.js.map +1 -0
  368. package/docs/compatibility/baseline.json +1 -1
  369. package/docs/releases/0.6.2.md +2 -2
  370. package/docs/releases/0.6.3.md +27 -0
  371. package/package.json +1 -1
@@ -0,0 +1,507 @@
1
+ import { readDaemonStatus, startDaemon, stopDaemon } from "../omp/daemon.js";
2
+ import { loadOmbSettings } from "../omp/omb-settings.js";
3
+ import { BIZAR_SESSION_PREFIX, currentOmbHostSession, isOmbSessionName, listOmbSessions } from "../omp/omb-sessions.js";
4
+ import { readTrayStatus, startTray, stopTray } from "../omp/tray.js";
5
+ import { deleteOmbSession, listTmuxSessions, ombSessionLiveness } from "../omp/tmux.js";
6
+ import { openDashboard } from "./omb-dashboard.js";
7
+ export const runtimeServices = {
8
+ readDaemonStatus,
9
+ startDaemon,
10
+ stopDaemon,
11
+ readTrayStatus,
12
+ startTray,
13
+ stopTray,
14
+ openDashboard,
15
+ };
16
+ export const STOP_USAGE = `omb stop [--all | --sessions | --session NAME | --daemon | --dashboard | --tray]
17
+ [--idle] [--force] [--dry-run] [--json]
18
+
19
+ Stops the Bizar runtime: every Bizar-owned tmux session and the optional
20
+ services around them. With no target flag, sessions, the daemon, and the tray
21
+ are all stopped.
22
+
23
+ --all sessions and services (the default)
24
+ --sessions only Bizar-owned tmux sessions
25
+ --session N one session by Bizar name, session id, or the digest its name
26
+ carries; repeatable, and naming any session narrows --all to
27
+ just the named sessions
28
+ --daemon only the daemon
29
+ --dashboard only the daemon, which serves the dashboard
30
+ --tray only the tray
31
+ --idle only sessions with no client attached and no work in flight
32
+ --force also stop sessions that have a client attached
33
+ --dry-run report what would stop without stopping it
34
+ --json print { command, dryRun, stopped, started, skipped, planned,
35
+ failed, resources }
36
+
37
+ Only Bizar-owned sessions are ever touched, the session hosting this command
38
+ is never stopped, and "nothing was running" is a success.`;
39
+ export const RESTART_USAGE = `omb restart [--force] [--dry-run] [--json]
40
+
41
+ Stops the whole runtime like "omb stop", then starts the daemon and the tray
42
+ again and prints a fresh dashboard access code. Agent sessions are not
43
+ relaunched: their journals are kept, so "omb" in a project or the hub brings
44
+ a session back.
45
+
46
+ The daemon and tray are started even when a stop failed, so the runtime is
47
+ left usable; the failed stop stays in the report and the exit code is
48
+ nonzero. Nothing is reported as started that did not start.
49
+
50
+ Each resource is reported once, with the state it was in when the command
51
+ ran and what the restart did with it, so the report reads as the resulting
52
+ state of the runtime. A stop that failed makes that resource's row a failure
53
+ even when the resource was started again.
54
+
55
+ --force also stop sessions that have a client attached
56
+ --dry-run report the plan without stopping or starting anything
57
+ --json print { command, dryRun, stopped, started, skipped, planned,
58
+ failed, resources, url }, where url is null when no
59
+ access link was minted`;
60
+ /**
61
+ * A session reference that is not a tmux name: the digest segment of a name,
62
+ * the native OMP session id, or the short id a row reports. What any of them
63
+ * resolves to is decided against the discovered sessions, because a short id is
64
+ * only unique among them.
65
+ */
66
+ const SESSION_REFERENCE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
67
+ function parseTargetFlags(args) {
68
+ const flags = {
69
+ all: false,
70
+ sessions: false,
71
+ daemon: false,
72
+ tray: false,
73
+ idle: false,
74
+ force: false,
75
+ dryRun: false,
76
+ json: false,
77
+ };
78
+ const names = [];
79
+ for (let index = 0; index < args.length; index += 1) {
80
+ const arg = args[index];
81
+ if (arg === "--all")
82
+ flags.all = true;
83
+ else if (arg === "--sessions")
84
+ flags.sessions = true;
85
+ else if (arg === "--idle")
86
+ flags.idle = true;
87
+ else if (arg === "--force")
88
+ flags.force = true;
89
+ else if (arg === "--dry-run")
90
+ flags.dryRun = true;
91
+ else if (arg === "--json")
92
+ flags.json = true;
93
+ else if (arg === "--daemon" || arg === "--dashboard")
94
+ flags.daemon = true;
95
+ else if (arg === "--tray")
96
+ flags.tray = true;
97
+ else if (arg === "--session") {
98
+ const value = args[++index];
99
+ if (!value || value.startsWith("--"))
100
+ return { error: "--session requires a session name or id" };
101
+ // A Bizar-prefixed value must be a whole Bizar name, so a mistyped name
102
+ // fails here instead of resolving into a stop. Anything else is read as a
103
+ // session id, which only the discovered sessions can resolve or reject.
104
+ const prefixed = value.startsWith(BIZAR_SESSION_PREFIX);
105
+ if ((prefixed && !isOmbSessionName(value)) || (!prefixed && !SESSION_REFERENCE.test(value))) {
106
+ return { error: `"${value}" is neither a Bizar-owned session name nor a session id` };
107
+ }
108
+ names.push(value);
109
+ }
110
+ else
111
+ return { error: `unknown argument "${arg}"` };
112
+ }
113
+ return { flags, names };
114
+ }
115
+ /** Resolve target flags into what the command stops. Targets are additive. */
116
+ function resolveTargets(flags, names) {
117
+ const services = flags.daemon || flags.tray;
118
+ const explicitSessions = names.length > 0 || flags.sessions;
119
+ const anyTarget = services || explicitSessions || flags.all;
120
+ const sessions = flags.all || explicitSessions || !anyTarget;
121
+ return {
122
+ sessions,
123
+ daemon: flags.daemon || flags.all || !anyTarget,
124
+ tray: flags.tray || flags.all || !anyTarget,
125
+ names,
126
+ idle: flags.idle,
127
+ force: flags.force,
128
+ dryRun: flags.dryRun,
129
+ json: flags.json,
130
+ };
131
+ }
132
+ /** The digest segment a Bizar session name carries, when it has one. */
133
+ function sessionDigest(name) {
134
+ return name.match(/-([a-f0-9]{10})(?:-|$)/)?.[1];
135
+ }
136
+ function sessionResources(sessions, names) {
137
+ const rows = [];
138
+ if (names.length === 0)
139
+ return { selected: sessions.filter(session => session.state !== "stopped"), rows };
140
+ const selected = [];
141
+ // A repeated name is one session: acting on it twice would report one
142
+ // removal as two and signal a session that is already gone.
143
+ const requested = new Set();
144
+ for (const name of names) {
145
+ if (requested.has(name))
146
+ continue;
147
+ requested.add(name);
148
+ // The tmux name wins over an id, so an id can never redirect a request away
149
+ // from the session the user named. A digest is the part of the name that
150
+ // makes it unique, and two sessions may report the same short id.
151
+ const byName = sessions.find(session => session.name === name);
152
+ const candidates = byName
153
+ ? [byName]
154
+ : sessions.filter(session => session.id === name || session.nativeId === name || sessionDigest(session.name) === name);
155
+ if (candidates.length === 1)
156
+ selected.push(candidates[0]);
157
+ else if (isOmbSessionName(name)) {
158
+ // A Bizar name that is not running is an address for a session that is
159
+ // already gone, which is not a failure: the same call twice is a success.
160
+ rows.push({ target: "session", name, state: "unknown", action: "skipped", reason: "not found" });
161
+ }
162
+ else if (candidates.length === 0) {
163
+ // Nothing was acted on yet, so an address that resolves to nothing stops
164
+ // the whole command instead of half of it: a script's typo must not look
165
+ // like a successful stop.
166
+ return { error: `"${name}" is neither a Bizar-owned session name nor a session this host knows` };
167
+ }
168
+ else {
169
+ return { error: `"${name}" matches ${candidates.length} sessions: ${candidates.map(candidate => candidate.name).join(", ")}` };
170
+ }
171
+ }
172
+ return { selected, rows };
173
+ }
174
+ /** Decide one session's fate, then act on it unless this is a dry run. */
175
+ async function stopSession(session, options) {
176
+ const { targets, host, cwd, env } = options;
177
+ const base = { target: "session", name: session.name, state: session.state };
178
+ const skip = (reason) => ({ ...base, action: "skipped", reason });
179
+ if (session.state === "stopped")
180
+ return skip("already stopped");
181
+ if (session.hosted === false)
182
+ return skip("no tmux host; remove it from the hub if it is stale");
183
+ if (host.kind === "unknown")
184
+ return skip("cannot identify the session hosting this command");
185
+ if (host.kind === "bizar" && session.name === host.name)
186
+ return skip("hosts this command");
187
+ if (targets.idle && session.state !== "disconnected")
188
+ return skip(`state ${session.state} is not idle`);
189
+ if (session.attached && !targets.force)
190
+ return skip("client attached; use --force");
191
+ if (targets.dryRun)
192
+ return { ...base, action: "planned" };
193
+ const code = await deleteOmbSession(session.name, cwd, env);
194
+ return code === 0
195
+ ? { ...base, action: "stopped", code }
196
+ : { ...base, action: "failed", code, reason: `kill-session exited ${code}` };
197
+ }
198
+ async function stopDaemonResource(targets, env, services) {
199
+ const status = services.readDaemonStatus(env);
200
+ const base = {
201
+ target: "daemon",
202
+ name: status.daemon ? `127.0.0.1:${status.daemon.port}` : "daemon",
203
+ state: status.state,
204
+ };
205
+ if (status.state !== "running")
206
+ return { ...base, action: "skipped", reason: "not running" };
207
+ if (targets.dryRun)
208
+ return { ...base, action: "planned" };
209
+ try {
210
+ const result = await services.stopDaemon(env);
211
+ return result === "stopped"
212
+ ? { ...base, action: "stopped" }
213
+ : { ...base, action: "skipped", reason: "not running" };
214
+ }
215
+ catch (error) {
216
+ return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
217
+ }
218
+ }
219
+ async function stopTrayResource(targets, env, services) {
220
+ const status = services.readTrayStatus(env);
221
+ const base = { target: "tray", name: "tray", state: status.state };
222
+ if (status.state !== "running") {
223
+ return {
224
+ ...base,
225
+ action: "skipped",
226
+ reason: status.state === "unsupported"
227
+ ? "unsupported on this host"
228
+ : status.state === "stale"
229
+ ? "the recorded process is gone or is not the tray"
230
+ : "not running",
231
+ };
232
+ }
233
+ if (targets.dryRun)
234
+ return { ...base, action: "planned" };
235
+ try {
236
+ return (await services.stopTray(env))
237
+ ? { ...base, action: "stopped" }
238
+ : { ...base, action: "skipped", reason: "not running" };
239
+ }
240
+ catch (error) {
241
+ return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
242
+ }
243
+ }
244
+ async function stopRuntime(cwd, env, targets, services) {
245
+ const rows = [];
246
+ if (targets.sessions) {
247
+ const sessions = await listOmbSessions(cwd, env);
248
+ const resolution = sessionResources(sessions, targets.names);
249
+ // Nothing has been acted on yet, so an address that cannot name exactly one
250
+ // session stops the command while it is still free to do so.
251
+ if ("error" in resolution)
252
+ return resolution;
253
+ const { selected, rows: unmatched } = resolution;
254
+ rows.push(...unmatched);
255
+ const host = await currentOmbHostSession(cwd, env);
256
+ for (const session of selected) {
257
+ rows.push(await stopSession(session, { targets, host, cwd, env }));
258
+ }
259
+ }
260
+ if (targets.daemon)
261
+ rows.push(await stopDaemonResource(targets, env, services));
262
+ if (targets.tray)
263
+ rows.push(await stopTrayResource(targets, env, services));
264
+ return { rows: await verifyStoppedSessions(rows, cwd, env) };
265
+ }
266
+ /** List the hosted sessions, and say whether the multiplexer answered at all. */
267
+ async function hostedSessions(probe, cwd, env) {
268
+ // A multiplexer that cannot be run reports no sessions, and that empty
269
+ // report is indistinguishable from an empty server. Absence is only proved
270
+ // by a listing that happened, so the multiplexer is asked one question it
271
+ // must answer before its silence is read as "not hosted".
272
+ if (await ombSessionLiveness(probe, cwd, env) === "unknown")
273
+ return { readable: false, hosted: new Set() };
274
+ const sessions = await listTmuxSessions(cwd, env);
275
+ return { readable: true, hosted: new Set(sessions.map(session => session.name)) };
276
+ }
277
+ /**
278
+ * Confirm every attempted kill against the multiplexer, which is the only
279
+ * authority on whether a session is still there.
280
+ *
281
+ * `deleteOmbSession` also tombstones a session's journal, and a session can
282
+ * vanish between the listing and the kill, so neither its exit code nor the
283
+ * hub listing can answer "is it gone?" for this caller. One listing of the
284
+ * multiplexer answers it for every attempted kill at once: a session that is
285
+ * still there was not stopped, whatever the kill reported.
286
+ */
287
+ async function verifyStoppedSessions(rows, cwd, env) {
288
+ const attempted = rows.filter(row => row.target === "session" && (row.action === "stopped" || row.action === "failed"));
289
+ if (!attempted.length)
290
+ return rows;
291
+ const { readable, hosted } = await hostedSessions(attempted[0].name, cwd, env);
292
+ return rows.map(row => {
293
+ if (row.target !== "session" || (row.action !== "stopped" && row.action !== "failed"))
294
+ return row;
295
+ if (!readable)
296
+ return { ...row, action: "failed", code: row.code || 1, reason: "could not confirm the session stopped" };
297
+ return hosted.has(row.name)
298
+ ? { ...row, action: "failed", code: row.code || 1, reason: "still live after kill-session" }
299
+ : { ...row, action: "stopped", code: 0 };
300
+ });
301
+ }
302
+ function count(rows, action) {
303
+ return rows.filter(row => row.action === action).length;
304
+ }
305
+ function renderRows(rows) {
306
+ const width = Math.max(0, ...rows.map(row => row.target.length));
307
+ return rows
308
+ .map(row => {
309
+ const detail = row.reason ? ` — ${row.reason}` : row.code ? ` (exit ${row.code})` : "";
310
+ return `${row.action.padEnd(7)} ${row.target.padEnd(width)} ${row.name}${detail}`;
311
+ })
312
+ .join("\n");
313
+ }
314
+ function renderSummary(command, rows, dryRun) {
315
+ const parts = [`${count(rows, "stopped")} stopped`];
316
+ if (count(rows, "started") > 0)
317
+ parts.push(`${count(rows, "started")} started`);
318
+ parts.push(`${count(rows, "skipped")} skipped`);
319
+ if (count(rows, "planned") > 0)
320
+ parts.push(`${count(rows, "planned")} planned`);
321
+ const failed = count(rows, "failed");
322
+ if (failed)
323
+ parts.push(`${failed} failed`);
324
+ return `omb ${command}${dryRun ? " (dry run)" : ""}: ${parts.join(", ")}`;
325
+ }
326
+ function exitCodeFor(rows) {
327
+ return count(rows, "failed") > 0 ? 1 : 0;
328
+ }
329
+ /**
330
+ * The counts the summary prints, as data.
331
+ *
332
+ * Every action a row can carry is counted here, so a `--json` reader learns
333
+ * the same thing the human summary says: a dry run's `planned` rows and a
334
+ * restart's `started` rows are otherwise invisible in the payload.
335
+ */
336
+ function payload(command, rows, dryRun, extra = {}) {
337
+ return {
338
+ command,
339
+ dryRun,
340
+ stopped: count(rows, "stopped"),
341
+ started: count(rows, "started"),
342
+ skipped: count(rows, "skipped"),
343
+ planned: count(rows, "planned"),
344
+ failed: count(rows, "failed"),
345
+ ...extra,
346
+ };
347
+ }
348
+ function emit(summary, rows, human, json) {
349
+ if (json) {
350
+ // `stopped` is stated on every row as well as in the counts, so a reader
351
+ // that asks only "is this resource stopped?" does not have to know the
352
+ // action vocabulary to answer it.
353
+ const resources = rows.map(row => ({ ...row, stopped: row.action === "stopped" }));
354
+ process.stdout.write(`${JSON.stringify({ ...summary, resources }, null, 2)}\n`);
355
+ }
356
+ else
357
+ process.stdout.write(`${human}\n${renderRows(rows)}\n`);
358
+ }
359
+ export async function runStopCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
360
+ if (args.includes("--help") || args.includes("-h")) {
361
+ process.stdout.write(`${STOP_USAGE}\n`);
362
+ return 0;
363
+ }
364
+ const parsed = parseTargetFlags(args);
365
+ if ("error" in parsed) {
366
+ process.stderr.write(`omb stop: ${parsed.error}\n\n${STOP_USAGE}\n`);
367
+ return 2;
368
+ }
369
+ const targets = resolveTargets(parsed.flags, parsed.names);
370
+ const result = await stopRuntime(cwd, env, targets, services);
371
+ if ("error" in result) {
372
+ process.stderr.write(`omb stop: ${result.error}\n\n${STOP_USAGE}\n`);
373
+ return 2;
374
+ }
375
+ const { rows } = result;
376
+ emit(payload("stop", rows, targets.dryRun), rows, renderSummary("stop", rows, targets.dryRun), targets.json);
377
+ return exitCodeFor(rows);
378
+ }
379
+ export async function runRestartCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
380
+ if (args.includes("--help") || args.includes("-h")) {
381
+ process.stdout.write(`${RESTART_USAGE}\n`);
382
+ return 0;
383
+ }
384
+ const parsed = parseTargetFlags(args);
385
+ if ("error" in parsed) {
386
+ process.stderr.write(`omb restart: ${parsed.error}\n\n${RESTART_USAGE}\n`);
387
+ return 2;
388
+ }
389
+ if (parsed.flags.all || parsed.flags.sessions || parsed.flags.daemon || parsed.flags.tray || parsed.flags.idle || parsed.names.length) {
390
+ process.stderr.write(`omb restart: restart always stops the whole runtime; use "omb stop" for one target\n\n${RESTART_USAGE}\n`);
391
+ return 2;
392
+ }
393
+ const targets = resolveTargets({ ...parsed.flags, all: true }, []);
394
+ const stopped = await stopRuntime(cwd, env, targets, services);
395
+ // Restart never names a session, so the stop phase cannot fail on an
396
+ // address. If it ever did, starting services over an unresolved stop would
397
+ // report a runtime that was never reconciled, so it is reported as a failure.
398
+ if ("error" in stopped) {
399
+ process.stderr.write(`omb restart: ${stopped.error}\n\n${RESTART_USAGE}\n`);
400
+ return 2;
401
+ }
402
+ const stopRows = stopped.rows;
403
+ const trayEnabled = loadOmbSettings(env).trayEnabled;
404
+ // The state a resource was observed in before the command ran. The stop phase
405
+ // recorded it, and the dashboard is served by the daemon.
406
+ const observedState = (target) => stopRows.find(row => row.target === (target === "dashboard" ? "daemon" : target))?.state ?? "stopped";
407
+ // The stop phase reports its half of a restart as its own rows. The restart
408
+ // reports one row per resource, so those rows are folded into what the
409
+ // restart did with the resource overall; a failure of either half survives
410
+ // the folding.
411
+ const foldStop = (row) => {
412
+ const stopRow = stopRows.find(candidate => candidate.target === row.target);
413
+ if (stopRow?.action === "failed") {
414
+ return {
415
+ ...row,
416
+ action: "failed",
417
+ code: stopRow.code || row.code || 1,
418
+ reason: `could not stop the previous ${row.target} (${stopRow.reason ?? `exit ${stopRow.code ?? 1}`}); ${row.reason ?? "it was started again"}`,
419
+ };
420
+ }
421
+ // A resource the stop phase stopped and the start phase left alone, such as
422
+ // a tray that settings no longer run, is left stopped.
423
+ if (row.action === "skipped" && stopRow?.action === "stopped")
424
+ return { ...stopRow, reason: row.reason };
425
+ return row.action === "started" && stopRow?.action === "stopped" ? { ...row, reason: "stopped, then started" } : row;
426
+ };
427
+ const rows = stopRows.filter(row => row.target === "session");
428
+ if (targets.dryRun) {
429
+ // `stopRuntime` already planned the session stops. Its daemon and tray
430
+ // rows would duplicate the restart plan below with a different meaning
431
+ // (a stop that is immediately undone), so the restart reports one row per
432
+ // resource: what happens to it overall.
433
+ const plan = [...rows];
434
+ const daemonState = services.readDaemonStatus(env).state === "running" ? "running" : "stopped";
435
+ plan.push({ target: "daemon", name: "daemon", state: daemonState, action: "planned", reason: "stop, then start" });
436
+ const trayState = services.readTrayStatus(env).state === "running" ? "running" : "stopped";
437
+ plan.push(trayEnabled
438
+ ? { target: "tray", name: "tray", state: trayState, action: "planned", reason: "stop, then start" }
439
+ : { target: "tray", name: "tray", state: trayState, action: "skipped", reason: "disabled in settings" });
440
+ plan.push({ target: "dashboard", name: "dashboard", state: daemonState, action: "planned", reason: "stop, then start" });
441
+ emit(payload("restart", plan, true, { url: null }), plan, renderSummary("restart", plan, true), targets.json);
442
+ return 0;
443
+ }
444
+ let url;
445
+ let daemonStarted = false;
446
+ try {
447
+ const daemon = await services.startDaemon(env);
448
+ daemonStarted = true;
449
+ rows.push(foldStop({ target: "daemon", name: `127.0.0.1:${daemon.port}`, state: observedState("daemon"), action: "started" }));
450
+ }
451
+ catch (error) {
452
+ rows.push(foldStop({
453
+ target: "daemon",
454
+ name: "daemon",
455
+ state: observedState("daemon"),
456
+ action: "failed",
457
+ code: 1,
458
+ reason: error instanceof Error ? error.message : String(error),
459
+ }));
460
+ }
461
+ if (daemonStarted) {
462
+ if (trayEnabled) {
463
+ try {
464
+ const tray = await services.startTray(env);
465
+ rows.push(foldStop(tray
466
+ ? { target: "tray", name: "tray", state: observedState("tray"), action: "started" }
467
+ : { target: "tray", name: "tray", state: "unsupported", action: "skipped", reason: "unavailable on this host" }));
468
+ }
469
+ catch (error) {
470
+ rows.push(foldStop({ target: "tray", name: "tray", state: observedState("tray"), action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) }));
471
+ }
472
+ }
473
+ else {
474
+ rows.push(foldStop({ target: "tray", name: "tray", state: observedState("tray"), action: "skipped", reason: "disabled in settings" }));
475
+ }
476
+ try {
477
+ const link = await services.openDashboard(env);
478
+ url = link.url;
479
+ rows.push(foldStop({ target: "dashboard", name: `127.0.0.1:${link.port}`, state: observedState("dashboard"), action: "started", reason: "access code expires in five minutes" }));
480
+ }
481
+ catch (error) {
482
+ rows.push(foldStop({ target: "dashboard", name: "dashboard", state: observedState("dashboard"), action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) }));
483
+ }
484
+ }
485
+ else {
486
+ // The tray and the dashboard are reported either way, so a resource that
487
+ // was stopped and not started again is not left out of the report.
488
+ rows.push(foldStop({
489
+ target: "tray",
490
+ name: "tray",
491
+ state: observedState("tray"),
492
+ action: "skipped",
493
+ reason: trayEnabled ? "daemon did not start" : "disabled in settings",
494
+ }));
495
+ rows.push({
496
+ target: "dashboard",
497
+ name: "dashboard",
498
+ state: observedState("dashboard"),
499
+ action: "skipped",
500
+ reason: "daemon did not start",
501
+ });
502
+ }
503
+ const human = `${renderSummary("restart", rows, false)}${url ? `\ndashboard ${url}` : ""}`;
504
+ emit(payload("restart", rows, false, { url: url ?? null }), rows, human, targets.json);
505
+ return exitCodeFor(rows);
506
+ }
507
+ //# sourceMappingURL=omb-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omb-runtime.js","sourceRoot":"","sources":["../../src/cli/omb-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TRAY_USAGE = "omb tray [start|stop|status]\n\n Controls the optional native tray icon for background Bizar sessions.\n\n start start the tray when the host supports it (default)\n stop stop a running tray\n status print the tray state and pid\n run run the tray in this process (used by the detached launcher)\n\n The tray is available on supported Linux, macOS, and Windows hosts; an\n unsupported desktop environment keeps the hub, dashboard, and daemon.";
2
+ export declare function runTrayCommand(args: string[], env?: NodeJS.ProcessEnv): Promise<number>;
3
+ //# sourceMappingURL=omb-tray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omb-tray.d.ts","sourceRoot":"","sources":["../../src/cli/omb-tray.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,odAUiD,CAAC;AAEzE,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B1G"}
@@ -0,0 +1,44 @@
1
+ import { readTrayStatus, runTrayForeground, startTray, stopTray } from "../omp/tray.js";
2
+ export const TRAY_USAGE = `omb tray [start|stop|status]
3
+
4
+ Controls the optional native tray icon for background Bizar sessions.
5
+
6
+ start start the tray when the host supports it (default)
7
+ stop stop a running tray
8
+ status print the tray state and pid
9
+ run run the tray in this process (used by the detached launcher)
10
+
11
+ The tray is available on supported Linux, macOS, and Windows hosts; an
12
+ unsupported desktop environment keeps the hub, dashboard, and daemon.`;
13
+ export async function runTrayCommand(args, env = process.env) {
14
+ if (args.includes("--help") || args.includes("-h")) {
15
+ process.stdout.write(`${TRAY_USAGE}\n`);
16
+ return 0;
17
+ }
18
+ const sub = args[0] ?? "start";
19
+ if (sub === "run")
20
+ return runTrayForeground(env);
21
+ if (sub === "start") {
22
+ const info = await startTray(env);
23
+ process.stdout.write(info ? `omb tray started — pid ${info.pid}\n` : "omb tray is unavailable on this host\n");
24
+ return 0;
25
+ }
26
+ if (sub === "stop") {
27
+ const status = readTrayStatus(env);
28
+ const stopped = await stopTray(env);
29
+ process.stdout.write(stopped
30
+ ? "omb tray stopped\n"
31
+ : status.state === "stale"
32
+ ? "omb tray is not running: the recorded process is gone or is not the tray\n"
33
+ : "omb tray is not running\n");
34
+ return 0;
35
+ }
36
+ if (sub === "status") {
37
+ const status = readTrayStatus(env);
38
+ process.stdout.write(`omb tray ${status.state}${status.tray ? ` — pid ${status.tray.pid}` : ""}\n`);
39
+ return 0;
40
+ }
41
+ process.stderr.write(`omb tray: unknown subcommand "${sub}" (use start, stop, status)\n\n${TRAY_USAGE}\n`);
42
+ return 2;
43
+ }
44
+ //# sourceMappingURL=omb-tray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omb-tray.js","sourceRoot":"","sources":["../../src/cli/omb-tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;wEAU8C,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG;IACvF,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC/B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC;QAC/G,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;YAC1B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;gBACxB,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,kCAAkC,UAAU,IAAI,CAAC,CAAC;IAC3G,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/cli/omb.js CHANGED
@@ -1,43 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { runAgentsHub } from "./agents.js";
3
+ import { findOmbCommand } from "./omb-commands.js";
3
4
  import { parseOmbCommand } from "./omb-invocation.js";
4
- import { runDashboardCommand } from "./omb-dashboard.js";
5
- import { runDaemonCommand } from "./omb-daemon.js";
6
5
  import { launchOmb, shouldLaunchOmbInTmux } from "../omp/tmux.js";
7
- import { readTrayStatus, runTrayForeground, startTray, stopTray } from "../omp/tray.js";
8
6
  try {
9
- const args = process.argv.slice(2);
10
- if (args[0] === "agents" || args[0] === "hub") {
11
- process.exitCode = await runAgentsHub(process.cwd(), args.slice(1), process.env);
12
- }
13
- else if (args[0] === "daemon") {
14
- process.exitCode = await runDaemonCommand(args.slice(1), process.env);
15
- }
16
- else if (args[0] === "dashboard") {
17
- process.exitCode = await runDashboardCommand(args.slice(1), process.env);
18
- }
19
- else if (args[0] === "tray") {
20
- const sub = args[1] ?? "start";
21
- if (sub === "run")
22
- process.exitCode = await runTrayForeground(process.env);
23
- else if (sub === "start") {
24
- const info = await startTray(process.env);
25
- process.stdout.write(info ? `omb tray started — pid ${info.pid}\n` : "omb tray is unavailable on this host\n");
26
- }
27
- else if (sub === "stop") {
28
- process.stdout.write((await stopTray(process.env)) ? "omb tray stopped\n" : "omb tray is not running\n");
29
- }
30
- else if (sub === "status") {
31
- const status = readTrayStatus(process.env);
32
- process.stdout.write(`omb tray ${status.state}${status.tray ? ` — pid ${status.tray.pid}` : ""}\n`);
33
- }
34
- else {
35
- process.stderr.write("omb tray: unknown subcommand (use start, stop, status)\n");
36
- process.exitCode = 2;
37
- }
7
+ const [token = "", ...args] = process.argv.slice(2);
8
+ const command = findOmbCommand(token);
9
+ if (command) {
10
+ process.exitCode = await command.run(args, process.env);
38
11
  }
39
12
  else {
40
- const invocation = parseOmbCommand(args);
13
+ // Anything omb does not own is an OMP invocation: run or attach it, then
14
+ // return to the hub when the launch took over an opaque terminal.
15
+ const invocation = parseOmbCommand(process.argv.slice(2));
41
16
  const returnToHub = shouldLaunchOmbInTmux({
42
17
  args: invocation.ompArgs,
43
18
  env: process.env,