@polderlabs/bizar-omp 0.6.2 → 0.6.4

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 (372) 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/docs/releases/0.6.4.md +25 -0
  372. package/package.json +1 -1
@@ -0,0 +1,362 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { execFileSync } from "node:child_process";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import extension from "../src/extension.js";
7
+ import { loadOmbSettings } from "../src/omp/omb-settings.js";
8
+ import { result } from "../src/tools/result.js";
9
+ import { admitDispatch } from "../src/omp/dispatch-admission.js";
10
+ import { reconcileResult } from "../src/omp/result-reconciliation.js";
11
+ import { createRun, addWorkItem } from "../src/core/transitions.js";
12
+ import { classifyRoute } from "../src/core/policies.js";
13
+ function gitProject() { const root = mkdtempSync(join(tmpdir(), "bizar-omp-project-")); execFileSync("git", ["init", "-q", root]); execFileSync("git", ["-C", root, "config", "user.email", "test@example.invalid"]); execFileSync("git", ["-C", root, "config", "user.name", "Bizar Test"]); execFileSync("git", ["-C", root, "commit", "--allow-empty", "-qm", "init"]); return root; }
14
+ function fakeSchema(kind, value) { return { kind, value, optional: () => fakeSchema(kind, value) }; }
15
+ function fakeZod() {
16
+ return {
17
+ string: () => fakeSchema("string"), boolean: () => fakeSchema("boolean"), array: (item) => fakeSchema("array", item), enum: (items) => fakeSchema("enum", items), union: (items) => fakeSchema("union", items), object: (shape) => fakeSchema("object", shape),
18
+ };
19
+ }
20
+ function extensionHost(tools, handlers, commands = [], commandDefinitions = new Map(), extras = {}) {
21
+ return { zod: fakeZod(), registerTool: (tool) => tools.push(tool), registerCommand: (name, definition) => { commands.push(name); commandDefinitions.set(name, definition); }, on: (name, handler) => handlers.set(name, handler), ...extras };
22
+ }
23
+ /** The extension reads OMP settings from process.env, so keep that I/O in a scratch config root. */
24
+ function isolatedConfigHome() {
25
+ const root = mkdtempSync(join(tmpdir(), "bizar-omp-config-"));
26
+ vi.stubEnv("XDG_CONFIG_HOME", root);
27
+ return root;
28
+ }
29
+ describe("OMP contracts", () => {
30
+ afterEach(() => { vi.unstubAllEnvs(); });
31
+ it("registers workflow and inspectable feature tools without runtime side effects", () => {
32
+ const tools = [];
33
+ const commands = [];
34
+ const events = new Map();
35
+ extension(extensionHost(tools, events, commands));
36
+ expect(tools.map(tool => tool.name)).toEqual(["bizar_workflow", "bizar_verify", "bizar_evidence", "bizar_integrate", "bizar_recipe_preview", "bizar_inspect", "bizar_capabilities", "bizar_apply_model_roles"]);
37
+ expect(commands).toEqual(["bizar", "bizar-dashboard", "bizar-models"]);
38
+ expect(events.has("session_start")).toBe(true);
39
+ expect(events.has("before_agent_start")).toBe(true);
40
+ const workflow = tools.find(tool => tool.name === "bizar_workflow");
41
+ expect(workflow.parameters.value.action.value).toContain("complete");
42
+ expect(workflow.parameters.value.action.value).toContain("accept-work");
43
+ expect(workflow.parameters.value.requiredChecks.kind).toBe("array");
44
+ });
45
+ it("dispatches the dashboard command through the host exec capability", async () => {
46
+ const root = mkdtempSync(join(tmpdir(), "bizar-dashboard-cli-"));
47
+ const bin = join(root, "omb");
48
+ writeFileSync(bin, "#!/bin/sh\nexit 0\n", { mode: 0o755 });
49
+ const previousPath = process.env.PATH;
50
+ process.env.PATH = root;
51
+ try {
52
+ const tools = [];
53
+ const events = new Map();
54
+ const commands = [];
55
+ const definitions = new Map();
56
+ const calls = [];
57
+ const exec = async (command, args) => {
58
+ calls.push({ command, args });
59
+ return args[1] === "stop"
60
+ ? { code: 0, stdout: "dashboard stopped (daemon stopped)\n" }
61
+ : { code: 0, stdout: JSON.stringify({ url: "http://127.0.0.1:44047/dash?oc=abc", port: 44047, pid: 42, code: "abc" }) };
62
+ };
63
+ extension(extensionHost(tools, events, commands, definitions, { exec }));
64
+ const notices = [];
65
+ const ctx = { cwd: process.cwd(), ui: { notify: (message, level) => notices.push({ message, level }) } };
66
+ await definitions.get("bizar-dashboard").handler("", ctx);
67
+ expect(calls.at(-1)?.args).toEqual(["dashboard", "--json"]);
68
+ expect(notices.at(-1)?.message).toContain("http://127.0.0.1:44047/dash?oc=abc");
69
+ await definitions.get("bizar-dashboard").handler("open", ctx);
70
+ expect(calls.at(-1)?.args).toEqual(["dashboard", "--open", "--json"]);
71
+ await definitions.get("bizar-dashboard").handler("stop", ctx);
72
+ expect(calls.at(-1)?.args).toEqual(["dashboard", "stop"]);
73
+ expect(notices.at(-1)?.message).toBe("dashboard stopped (daemon stopped)");
74
+ await definitions.get("bizar-dashboard").handler("nonsense", ctx);
75
+ expect(notices.at(-1)?.level).toBe("error");
76
+ expect(calls.at(-1)?.args).toEqual(["dashboard", "stop"]);
77
+ }
78
+ finally {
79
+ if (previousPath === undefined)
80
+ delete process.env.PATH;
81
+ else
82
+ process.env.PATH = previousPath;
83
+ rmSync(root, { recursive: true, force: true });
84
+ }
85
+ });
86
+ it("admits isolated managed dispatch with apply and merge disabled", () => {
87
+ let run = createRun("p", { objective: "implement", nonGoals: [], constraints: [], acceptanceCriteria: ["done"], verificationPlan: [], stopConditions: [], userRestrictions: [] });
88
+ run = addWorkItem(run, { title: "write", role: "bizar-implementer", scope: ["src"], dependencies: [], acceptanceCriteria: ["done"], verificationPlan: [] });
89
+ const intent = admitDispatch(run, run.workItems[0], classifyRoute({ text: "write", role: "bizar-implementer", files: ["src/a.ts"] }), "restricted-managed", "parent");
90
+ expect(intent).toMatchObject({ isolation: "required", apply: false, merge: false, status: "admitted" });
91
+ expect(reconcileResult(intent, { dispatchId: intent.id, sourceEvent: "ack", sequence: 1, status: "running", artifactRefs: [], observedAt: "now" }).status).toBe("acknowledged");
92
+ });
93
+ it("binds lifecycle handlers to a temporary Git project", async () => {
94
+ const root = gitProject();
95
+ try {
96
+ const tools = [];
97
+ const handlers = new Map();
98
+ extension(extensionHost(tools, handlers));
99
+ await handlers.get("session_start")({}, { cwd: root, sessionManager: { getSessionFile: () => "session-1" } });
100
+ const workflow = tools.find(tool => tool.name === "bizar_workflow");
101
+ const output = await workflow.execute("call-1", { action: "start", objective: "build a feature" }, new AbortController().signal, undefined, { cwd: root, sessionManager: { getSessionFile: () => "session-1" } });
102
+ expect(output.details.run.phase).toBe("created");
103
+ expect(output.details.run.nativeSessionId).toBe("session-1");
104
+ }
105
+ finally {
106
+ rmSync(root, { recursive: true, force: true });
107
+ }
108
+ });
109
+ it("uses local state when the session starts outside Git or before its first commit", async () => {
110
+ const root = mkdtempSync(join(tmpdir(), "bizar-omp-no-git-"));
111
+ const unbornRoot = mkdtempSync(join(tmpdir(), "bizar-omp-unborn-"));
112
+ try {
113
+ const tools = [];
114
+ const handlers = new Map();
115
+ extension(extensionHost(tools, handlers));
116
+ await expect(handlers.get("session_start")({}, { cwd: root, sessionManager: { getSessionFile: () => "session-no-git" } })).resolves.toBeUndefined();
117
+ const workflow = tools.find(tool => tool.name === "bizar_workflow");
118
+ const output = await workflow.execute("call-1", { action: "start", objective: "work" }, undefined, undefined, { cwd: root, sessionManager: { getSessionFile: () => "session-no-git" } });
119
+ expect(output.isError).toBeUndefined();
120
+ expect(output.details.run.nativeSessionId).toBe("session-no-git");
121
+ execFileSync("git", ["init", "-q", unbornRoot]);
122
+ await expect(handlers.get("session_start")({}, { cwd: unbornRoot, sessionManager: { getSessionFile: () => "session-unborn" } })).resolves.toBeUndefined();
123
+ }
124
+ finally {
125
+ rmSync(root, { recursive: true, force: true });
126
+ rmSync(unbornRoot, { recursive: true, force: true });
127
+ }
128
+ });
129
+ it("does not prevent OMP startup when settings mutation fails", async () => {
130
+ const tools = [];
131
+ const handlers = new Map();
132
+ const notifications = [];
133
+ const settings = { modelRoles: {}, modelTags: {}, cycleOrder: [] };
134
+ extension(extensionHost(tools, handlers, [], new Map(), { pi: { settings: { get: (path) => settings[path], set: () => { throw new Error("settings are read-only"); } } } }));
135
+ await expect(handlers.get("session_start")({}, { ui: { notify: (message, level) => notifications.push({ message, level }) } })).resolves.toBeUndefined();
136
+ expect(notifications).toEqual([{ message: expect.stringContaining("continuing without the failed setting update"), level: "warning" }]);
137
+ });
138
+ it("never takes terminal ownership from a direct OMP session", async () => {
139
+ const tools = [];
140
+ const handlers = new Map();
141
+ let shutdownCalled = false;
142
+ extension(extensionHost(tools, handlers));
143
+ await handlers.get("session_start")({}, { shutdown: () => { shutdownCalled = true; } });
144
+ expect(shutdownCalled).toBe(false);
145
+ });
146
+ it("rebinds tools after a session switch instead of reusing the prior session", async () => {
147
+ const firstRoot = gitProject();
148
+ const secondRoot = gitProject();
149
+ try {
150
+ const tools = [];
151
+ const handlers = new Map();
152
+ extension(extensionHost(tools, handlers));
153
+ await handlers.get("session_start")({}, { cwd: firstRoot, sessionManager: { getSessionFile: () => "session-a" } });
154
+ const workflow = tools.find(tool => tool.name === "bizar_workflow");
155
+ const first = await workflow.execute("call-a", { action: "start", objective: "first" }, undefined, undefined, { cwd: firstRoot, sessionManager: { getSessionFile: () => "session-a" } });
156
+ await handlers.get("session_before_switch")({}, { cwd: firstRoot, sessionManager: { getSessionFile: () => "session-a" } });
157
+ const second = await workflow.execute("call-b", { action: "start", objective: "second" }, undefined, undefined, { cwd: secondRoot, sessionManager: { getSessionFile: () => "session-b" } });
158
+ expect(first.details.run.nativeSessionId).toBe("session-a");
159
+ expect(second.details.run.nativeSessionId).toBe("session-b");
160
+ }
161
+ finally {
162
+ rmSync(firstRoot, { recursive: true, force: true });
163
+ rmSync(secondRoot, { recursive: true, force: true });
164
+ }
165
+ });
166
+ it("injects autonomous guidance into the native system prompt and marks tool failures", () => {
167
+ const tools = [];
168
+ const handlers = new Map();
169
+ extension(extensionHost(tools, handlers));
170
+ const injected = handlers.get("before_agent_start")({ systemPrompt: ["base"] }, {});
171
+ expect(injected.systemPrompt).toEqual(expect.arrayContaining(["base"]));
172
+ expect(injected.systemPrompt.at(-1)).toContain("explicitly requests a goal");
173
+ expect(result({ error: "failed" }, true).isError).toBe(true);
174
+ });
175
+ it("reports configured Bizar model roles healthy and ignores unrelated roles", async () => {
176
+ const tools = [];
177
+ const handlers = new Map();
178
+ const commands = new Map();
179
+ const notifications = [];
180
+ const settings = { modelRoles: { bizar_review: "openai/strong", bizar_research: "anthropic/fast", operator_role: "@default" } };
181
+ extension(extensionHost(tools, handlers, [], commands, { pi: { settings: { get: (path) => settings[path] } } }));
182
+ await commands.get("bizar").handler("model-roles health", { models: { resolve: (selector) => selector === "openai/strong" || selector === "anthropic/fast" ? { id: selector } : undefined }, ui: { notify: (message, level) => notifications.push({ message, level }) } });
183
+ expect(notifications).toEqual([{ message: "Bizar model-role health: 2 configured roles are healthy.", level: "info" }]);
184
+ });
185
+ it("reports each unresolved configured Bizar model role", async () => {
186
+ const tools = [];
187
+ const handlers = new Map();
188
+ const commands = new Map();
189
+ const notifications = [];
190
+ const settings = { modelRoles: { bizar_review: "openai/missing", operator_role: "unrelated/missing", bizar_research: "anthropic/missing" } };
191
+ extension(extensionHost(tools, handlers, [], commands, { pi: { settings: { get: (path) => settings[path] } } }));
192
+ await commands.get("bizar").handler("model-roles health", { models: { resolve: () => undefined }, ui: { notify: (message, level) => notifications.push({ message, level }) } });
193
+ expect(notifications).toEqual([{ message: "OMP could not resolve configured Bizar model roles: bizar_review=openai/missing, bizar_research=anthropic/missing", level: "error" }]);
194
+ });
195
+ it("reports malformed Bizar selectors while ignoring malformed unrelated roles", async () => {
196
+ const tools = [];
197
+ const handlers = new Map();
198
+ const commands = new Map();
199
+ const notifications = [];
200
+ const settings = { modelRoles: { bizar_review: 42, operator_role: false } };
201
+ extension(extensionHost(tools, handlers, [], commands, { pi: { settings: { get: (path) => settings[path] } } }));
202
+ await commands.get("bizar").handler("model-roles health", { models: { resolve: () => undefined }, ui: { notify: (message, level) => notifications.push({ message, level }) } });
203
+ expect(notifications).toEqual([{ message: "Configured Bizar model role has a malformed selector: bizar_review=42", level: "error" }]);
204
+ });
205
+ it("reports an actionable error when OMP has no model resolver", async () => {
206
+ const tools = [];
207
+ const handlers = new Map();
208
+ const commands = new Map();
209
+ const notifications = [];
210
+ const settings = { modelRoles: { bizar_review: "openai/strong" } };
211
+ extension(extensionHost(tools, handlers, [], commands, { pi: { settings: { get: (path) => settings[path] } } }));
212
+ await commands.get("bizar").handler("model-roles health", { models: {}, ui: { notify: (message, level) => notifications.push({ message, level }) } });
213
+ expect(notifications).toEqual([{ message: "OMP model resolver is unavailable; cannot verify configured Bizar model roles", level: "error" }]);
214
+ });
215
+ it("registers visible Bizar roles and keeps a compact compatibility fallback", async () => {
216
+ const tools = [];
217
+ const handlers = new Map();
218
+ const commands = new Map();
219
+ const notifications = [];
220
+ const messages = [];
221
+ const settings = { modelRoleStorage: "global", modelRoles: { operator_role: "@default" }, modelTags: {}, cycleOrder: ["smol", "default", "slow"] };
222
+ extension(extensionHost(tools, handlers, [], commands, { pi: { settings: { get: (path) => settings[path], set: (path, value) => { settings[path] = value; } } }, sendUserMessage: (message) => messages.push(message) }));
223
+ await handlers.get("session_start")({}, {});
224
+ await commands.get("bizar").handler("model-roles", { ui: { notify: (message) => notifications.push(message) } });
225
+ await commands.get("bizar-models").handler("", { ui: { notify: (message) => notifications.push(message) } });
226
+ expect(settings.modelRoles.operator_role).toBe("@default");
227
+ expect(settings.modelRoles.bizar_review).toBe("@slow");
228
+ expect(settings.modelTags.bizar_research.name).toBe("Bizar Research");
229
+ expect(settings.cycleOrder).toContain("bizar_research");
230
+ expect(settings["async.enabled"]).toBe(true);
231
+ expect(settings["advisor.enabled"]).toBe(true);
232
+ expect(settings.hideThinkingBlock).toBe(true);
233
+ expect(settings["display.hideToolActivity"]).toBe(true);
234
+ expect(settings["display.pinnedAgents"]).toBe("full");
235
+ expect(settings["task.batch"]).toBe(true);
236
+ expect(settings["collab.autoStart"]).toBe("control");
237
+ expect(settings.modelRoles.bizar_orchestrator).toBe("@default");
238
+ expect(settings.modelRoles.bizar_advisor).toBe("@advisor");
239
+ expect(messages[0]).toContain("current available model catalog");
240
+ expect(messages[0]).not.toContain("never call .map");
241
+ expect(notifications[0]).toContain("compact mapping");
242
+ expect(notifications[1]).toContain("compact mapping");
243
+ });
244
+ it("hands the live catalog to the agent and persists only the distribution the agent approves", async () => {
245
+ const configRoot = isolatedConfigHome();
246
+ const tools = [];
247
+ const handlers = new Map();
248
+ const commands = new Map();
249
+ const notifications = [];
250
+ const messages = [];
251
+ const settings = { modelRoles: { operator_role: "@default", bizar_orchestrator: "test/stale" } };
252
+ const model = { provider: "test", id: "balanced", contextWindow: 256_000, maxTokens: 32_000, reasoning: true, thinking: ["low", "high"], input: ["text"], cost: { input: 0, output: 0 } };
253
+ extension(extensionHost(tools, handlers, [], commands, {
254
+ pi: { settings: { get: (path) => settings[path], set: (path, value) => { settings[path] = value; } } },
255
+ sendUserMessage: (message) => messages.push(message),
256
+ }));
257
+ const ctx = {
258
+ models: { list: () => [model], family: () => "test", resolve: (selector) => selector === "test/balanced" ? model : undefined },
259
+ ui: { notify: (message) => notifications.push(message) },
260
+ };
261
+ await commands.get("bizar-models").handler("", ctx);
262
+ // The command decides nothing by itself: it hands the live catalog to the agent.
263
+ expect(settings.modelRoles).toEqual({ operator_role: "@default", bizar_orchestrator: "test/stale" });
264
+ expect(messages).toHaveLength(1);
265
+ expect(messages[0]).toContain("AVAILABLE MODELS (1)");
266
+ expect(messages[0]).toContain("test/balanced");
267
+ // Existing assignments are re-evaluated rather than trusted.
268
+ expect(messages[0]).toContain("bizar_orchestrator = test/stale");
269
+ expect(messages[0]).toContain("bizar_apply_model_roles");
270
+ expect(notifications[0]).toContain("Re-evaluated 13 Bizar roles against 1 live models");
271
+ const apply = tools.find(tool => tool.name === "bizar_apply_model_roles");
272
+ const refused = await apply.execute("call-1", { assignment: [{ role: "bizar_orchestrator", selector: "test/missing" }] }, undefined, undefined, ctx);
273
+ expect(refused.details).toMatchObject({ applied: false });
274
+ expect(settings.modelRoles).toEqual({ operator_role: "@default", bizar_orchestrator: "test/stale" });
275
+ const applied = await apply.execute("call-2", { assignment: [{ role: "bizar_orchestrator", selector: "test/balanced" }] }, undefined, undefined, ctx);
276
+ expect(applied.details).toMatchObject({ applied: true });
277
+ expect(settings.modelRoles).toEqual({ operator_role: "@default", bizar_orchestrator: "test/balanced" });
278
+ // The catalog was recorded when it was observed, so the next run reports movement
279
+ // even for runs whose distribution was never applied.
280
+ expect(loadOmbSettings({ XDG_CONFIG_HOME: configRoot }).modelCatalog?.models.map(record => record.selector)).toEqual(["test/balanced"]);
281
+ messages.length = 0;
282
+ notifications.length = 0;
283
+ await commands.get("bizar-models").handler("", ctx);
284
+ expect(notifications[0]).toContain("0 added, 0 removed, 0 changed, 1 unchanged");
285
+ ctx.models.list = () => [model, { ...model, id: "fresh" }];
286
+ messages.length = 0;
287
+ notifications.length = 0;
288
+ await commands.get("bizar-models").handler("", ctx);
289
+ expect(notifications[0]).toContain("1 added");
290
+ expect(messages[0]).toContain("test/fresh");
291
+ });
292
+ it("keeps an applied distribution live when only the catalog observation cannot be recorded", async () => {
293
+ const configRoot = isolatedConfigHome();
294
+ // An unreadable settings file: writing bookkeeping must never clobber it, and
295
+ // the role mapping the agent approved must still be reported as applied.
296
+ const settingsPath = join(configRoot, "bizar-omp", "omb.json");
297
+ mkdirSync(join(configRoot, "bizar-omp"), { recursive: true });
298
+ writeFileSync(settingsPath, '{"mouseScrolling": fal');
299
+ const tools = [];
300
+ const handlers = new Map();
301
+ const commands = new Map();
302
+ const settings = { modelRoles: { operator_role: "@default" } };
303
+ const model = { provider: "test", id: "balanced", contextWindow: 256_000, maxTokens: 32_000, reasoning: true, thinking: ["low", "high"], input: ["text"], cost: { input: 0, output: 0 } };
304
+ extension(extensionHost(tools, handlers, [], commands, {
305
+ pi: { settings: { get: (path) => settings[path], set: (path, value) => { settings[path] = value; } } },
306
+ sendUserMessage: () => undefined,
307
+ }));
308
+ const ctx = { models: { list: () => [model], family: () => "test", resolve: (selector) => selector === "test/balanced" ? model : undefined }, ui: { notify: () => undefined } };
309
+ const apply = tools.find(tool => tool.name === "bizar_apply_model_roles");
310
+ const outcome = await apply.execute("call-1", { assignment: [{ role: "bizar_orchestrator", selector: "test/balanced" }] }, undefined, undefined, ctx);
311
+ expect(outcome.isError).not.toBe(true);
312
+ expect(outcome.details).toMatchObject({ applied: true, note: expect.stringContaining("not readable JSON") });
313
+ expect(settings.modelRoles).toEqual({ operator_role: "@default", bizar_orchestrator: "test/balanced" });
314
+ expect(readFileSync(settingsPath, "utf8")).toBe('{"mouseScrolling": fal');
315
+ });
316
+ it("previews the deterministic distribution without messaging an agent or writing settings", async () => {
317
+ isolatedConfigHome();
318
+ const tools = [];
319
+ const handlers = new Map();
320
+ const commands = new Map();
321
+ const notifications = [];
322
+ const messages = [];
323
+ const settings = { modelRoles: { operator_role: "@default" } };
324
+ const model = { provider: "test", id: "balanced", contextWindow: 256_000, maxTokens: 32_000, reasoning: true, thinking: ["low", "high"], input: ["text"], cost: { input: 0, output: 0 } };
325
+ extension(extensionHost(tools, handlers, [], commands, {
326
+ pi: { settings: { get: (path) => settings[path], set: (path, value) => { settings[path] = value; } } },
327
+ sendUserMessage: (message) => messages.push(message),
328
+ }));
329
+ await commands.get("bizar-models").handler("preview", {
330
+ models: { list: () => [model], family: () => "test", resolve: (selector) => selector === "test/balanced" ? model : undefined },
331
+ ui: { notify: (message) => notifications.push(message) },
332
+ });
333
+ expect(notifications[0]).toContain("bizar_orchestrator -> test/balanced");
334
+ expect(notifications[0]).toContain("Preview only: no agent was messaged and no settings were written.");
335
+ expect(messages).toEqual([]);
336
+ expect(settings.modelRoles).toEqual({ operator_role: "@default" });
337
+ await commands.get("bizar-models").handler("preview", { models: { list: () => [] }, ui: { notify: (message) => notifications.push(message) } });
338
+ expect(notifications.at(-1)).toContain("model catalog is unavailable or empty");
339
+ });
340
+ it("falls back to the local planner when the host has no agent messaging", async () => {
341
+ isolatedConfigHome();
342
+ const tools = [];
343
+ const handlers = new Map();
344
+ const commands = new Map();
345
+ const notifications = [];
346
+ const settings = { modelRoles: { operator_role: "@default" } };
347
+ const model = { provider: "test", id: "balanced", contextWindow: 256_000, maxTokens: 32_000, reasoning: true, thinking: ["low", "high"], input: ["text"], cost: { input: 0, output: 0 } };
348
+ extension(extensionHost(tools, handlers, [], commands, {
349
+ pi: { settings: { get: (path) => settings[path], set: (path, value) => { settings[path] = value; } } },
350
+ }));
351
+ await commands.get("bizar-models").handler("", {
352
+ models: { list: () => [model], family: () => "test", resolve: (selector) => selector === "test/balanced" ? model : undefined },
353
+ ui: { notify: (message) => notifications.push(message) },
354
+ });
355
+ const roles = settings.modelRoles;
356
+ expect(Object.keys(roles).filter(role => role.startsWith("bizar_"))).toHaveLength(13);
357
+ expect(roles.bizar_orchestrator).toBe("test/balanced");
358
+ expect(roles.bizar_security).toBe("test/balanced");
359
+ expect(notifications[0]).toContain("Assigned 13/13 Bizar roles from 1 available OMP models");
360
+ });
361
+ });
362
+ //# sourceMappingURL=omp-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp-contract.test.js","sourceRoot":"","sources":["../../tests/omp-contract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { runNpm } from "../src/cli/process.js";
3
+ describe("runNpm", () => {
4
+ it("executes npm and returns its output on Windows-style shim hosts", () => {
5
+ const output = runNpm(["--version"], { encoding: "utf8" });
6
+ expect(output.trim()).toMatch(/^\d+\.\d+\.\d+/);
7
+ });
8
+ it("propagates npm failures instead of hiding them", () => {
9
+ expect(() => runNpm(["not-a-real-subcommand"], { stdio: "pipe" })).toThrow();
10
+ });
11
+ });
12
+ //# sourceMappingURL=process.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.test.js","sourceRoot":"","sources":["../../tests/process.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAW,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,105 @@
1
+ import { afterAll, describe, expect, it } from "vitest";
2
+ import { spawn } from "node:child_process";
3
+ import { mkdtempSync, rmSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { listOmbSessions, resolveMultiplexerBin } from "../src/omp/omb-sessions.js";
7
+ import { deleteOmbSession, ombSessionName, renameOmbSession, setOmbSessionMouse, shouldLaunchOmbInTmux, } from "../src/omp/tmux.js";
8
+ /**
9
+ * Exercises the real tmux-compatible multiplexer (psmux on Windows, tmux
10
+ * elsewhere) end to end: create a Bizar-owned session, list it, rename it,
11
+ * toggle mouse, and kill it. Skipped when no multiplexer binary is available.
12
+ */
13
+ const multiplexerAvailable = await new Promise(resolve => {
14
+ const child = spawn(resolveMultiplexerBin(), ["-V"], { stdio: "ignore" });
15
+ child.once("error", () => resolve(false));
16
+ child.once("close", code => resolve(code === 0));
17
+ });
18
+ const liveMultiplexer = multiplexerAvailable ? describe : describe.skip;
19
+ const scratch = mkdtempSync(join(tmpdir(), "bizar-psmux-live-"));
20
+ const heldSessions = [];
21
+ afterAll(async () => {
22
+ for (const session of heldSessions)
23
+ await deleteOmbSession(session, scratch);
24
+ // kill-session resolves before Windows releases the pane's conhost handles,
25
+ // so poll for the lock to clear instead of guessing a fixed delay; a locked
26
+ // %TEMP% scratch dir is disposable and must not fail the suite.
27
+ for (let attempt = 0; attempt < 10; attempt += 1) {
28
+ try {
29
+ rmSync(scratch, { recursive: true, force: true });
30
+ return;
31
+ }
32
+ catch {
33
+ await new Promise(resolve => setImmediate(resolve));
34
+ }
35
+ }
36
+ });
37
+ function runMultiplexer(args, env, cwd) {
38
+ return new Promise(resolve => {
39
+ const child = spawn(resolveMultiplexerBin(env), args, { cwd, env, stdio: "ignore" });
40
+ child.once("error", () => resolve(1));
41
+ child.once("close", code => resolve(code ?? 1));
42
+ });
43
+ }
44
+ /**
45
+ * The hosted pane must outlive its creator on every platform the suite runs
46
+ * on: Windows parks on `cmd.exe /c pause`, POSIX has no cmd.exe and parks on a
47
+ * long sleep instead.
48
+ */
49
+ const paneKeepAliveCommand = process.platform === "win32" ? ["cmd.exe", "/c", "pause"] : ["sleep", "600"];
50
+ describe("multiplexer resolution", () => {
51
+ it("prefers psmux on Windows and tmux elsewhere unless overridden", () => {
52
+ expect(resolveMultiplexerBin({})).toBe(process.platform === "win32" ? "psmux" : "tmux");
53
+ expect(resolveMultiplexerBin({ BIZAR_TMUX_BIN: "/custom/tmux" })).toBe("/custom/tmux");
54
+ });
55
+ it("keeps interactive TTY hosts eligible for the multiplexer boundary on Windows", () => {
56
+ if (process.platform !== "win32")
57
+ return;
58
+ expect(shouldLaunchOmbInTmux({ env: {}, stdinIsTTY: true, stdoutIsTTY: true, args: [] })).toBe(true);
59
+ expect(shouldLaunchOmbInTmux({ env: {}, stdinIsTTY: false, stdoutIsTTY: true, args: [] })).toBe(false);
60
+ expect(shouldLaunchOmbInTmux({ env: { BIZAR_OMP_NO_TMUX: "1" }, stdinIsTTY: true, stdoutIsTTY: true, args: [] })).toBe(false);
61
+ expect(shouldLaunchOmbInTmux({ env: { TMUX: "/tmp/tmux" }, stdinIsTTY: true, stdoutIsTTY: true, args: [] })).toBe(false);
62
+ expect(shouldLaunchOmbInTmux({ env: {}, stdinIsTTY: true, stdoutIsTTY: true, args: ["--print"] })).toBe(false);
63
+ expect(shouldLaunchOmbInTmux({ env: {}, stdinIsTTY: true, stdoutIsTTY: true, args: ["--mode", "rpc"] })).toBe(false);
64
+ });
65
+ });
66
+ liveMultiplexer("live multiplexer session lifecycle", () => {
67
+ it("creates, lists, renames, and kills a Bizar-owned session", { timeout: 30000 }, async () => {
68
+ const session = ombSessionName(scratch, "psmux-live");
69
+ heldSessions.push(session);
70
+ const env = { ...process.env, BIZAR_OMP_NO_TMUX: "1" };
71
+ // listOmbSessions must tolerate a warm server that already hosts other
72
+ // Bizar sessions and one with zero sessions (psmux exits 0 with empty
73
+ // output where tmux exits 1).
74
+ const before = await listOmbSessions(scratch, env);
75
+ expect(before.find(item => item.name === session)).toBeUndefined();
76
+ // A pane that outlives its command: `pause` blocks until input, mirroring
77
+ // a durable host. A command that exits immediately would tear down the
78
+ // session and the whole server before the first assertion.
79
+ expect(await runMultiplexer(["new-session", "-d", "-s", session, "-c", scratch, ...paneKeepAliveCommand], env, scratch)).toBe(0);
80
+ const listed = await listOmbSessions(scratch, env);
81
+ const mine = listed.find(item => item.name === session);
82
+ expect(mine).toBeTruthy();
83
+ // Hub vocabulary (issue #30): live, no attached client, nothing in flight.
84
+ expect(mine?.state).toBe("disconnected");
85
+ await expect(setOmbSessionMouse(session, false, scratch, env)).resolves.toBe(0);
86
+ const renamed = `${session}-x`;
87
+ await expect(renameOmbSession(session, renamed, scratch, env)).resolves.toBe(0);
88
+ heldSessions.splice(heldSessions.indexOf(session), 1, renamed);
89
+ await expect(deleteOmbSession(renamed, scratch, env)).resolves.toBe(0);
90
+ heldSessions.splice(heldSessions.indexOf(renamed), 1);
91
+ const remaining = await listOmbSessions(scratch, env);
92
+ expect(remaining.find(item => item.name === renamed)).toBeUndefined();
93
+ });
94
+ it("hosts a long-lived process in a session that outlives its creator", { timeout: 30000 }, async () => {
95
+ const session = ombSessionName(scratch, "psmux-persist");
96
+ heldSessions.push(session);
97
+ const env = { ...process.env, BIZAR_OMP_NO_TMUX: "1" };
98
+ expect(await runMultiplexer(["new-session", "-d", "-s", session, "-c", scratch, ...paneKeepAliveCommand], env, scratch)).toBe(0);
99
+ // The spawning test process keeps running, mirroring the launcher flow:
100
+ // the session must stay visible for the agents hub while alive.
101
+ const listed = await listOmbSessions(scratch, env);
102
+ expect(listed.find(item => item.name === session)?.state).toBe("disconnected");
103
+ });
104
+ });
105
+ //# sourceMappingURL=psmux-windows.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psmux-windows.test.js","sourceRoot":"","sources":["../../tests/psmux-windows.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { classifyGitOutcome, recoveryInstruction } from "../src/omp/integration-recovery.js";
3
+ import { admitIsolation } from "../src/omp/isolation-policy.js";
4
+ describe("recovery and trust contracts", () => {
5
+ it("recognizes a partial merge instead of treating a failed command as no-op", () => expect(classifyGitOutcome({ exitCode: 1, headChanged: true, indexChanged: true, dirty: true })).toBe("partial-merge"));
6
+ it("gives actionable recovery instructions", () => expect(recoveryInstruction("conflict")).toMatch(/repair assignment/));
7
+ it("requires native isolation for managed writes", () => expect(() => admitIsolation({ editing: true, preset: "restricted-managed", isolated: false, apply: false, merge: false })).toThrow(/isolation/));
8
+ });
9
+ //# sourceMappingURL=recovery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.test.js","sourceRoot":"","sources":["../../tests/recovery.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5M,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACzH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5M,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};