@oxagen/cli 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/README.md +66 -3
  2. package/dist/agent/__tests__/code-graph.test.d.ts +2 -0
  3. package/dist/agent/__tests__/code-graph.test.d.ts.map +1 -0
  4. package/dist/agent/__tests__/code-graph.test.js +83 -0
  5. package/dist/agent/__tests__/code-graph.test.js.map +1 -0
  6. package/dist/agent/__tests__/evaluator.test.d.ts +2 -0
  7. package/dist/agent/__tests__/evaluator.test.d.ts.map +1 -0
  8. package/dist/agent/__tests__/evaluator.test.js +96 -0
  9. package/dist/agent/__tests__/evaluator.test.js.map +1 -0
  10. package/dist/agent/__tests__/fleet-memory.test.d.ts +2 -0
  11. package/dist/agent/__tests__/fleet-memory.test.d.ts.map +1 -0
  12. package/dist/agent/__tests__/fleet-memory.test.js +107 -0
  13. package/dist/agent/__tests__/fleet-memory.test.js.map +1 -0
  14. package/dist/agent/__tests__/fleet-store.test.d.ts +2 -0
  15. package/dist/agent/__tests__/fleet-store.test.d.ts.map +1 -0
  16. package/dist/agent/__tests__/fleet-store.test.js +93 -0
  17. package/dist/agent/__tests__/fleet-store.test.js.map +1 -0
  18. package/dist/agent/__tests__/git-isolation.test.d.ts +2 -0
  19. package/dist/agent/__tests__/git-isolation.test.d.ts.map +1 -0
  20. package/dist/agent/__tests__/git-isolation.test.js +119 -0
  21. package/dist/agent/__tests__/git-isolation.test.js.map +1 -0
  22. package/dist/agent/__tests__/judge.test.d.ts +2 -0
  23. package/dist/agent/__tests__/judge.test.d.ts.map +1 -0
  24. package/dist/agent/__tests__/judge.test.js +135 -0
  25. package/dist/agent/__tests__/judge.test.js.map +1 -0
  26. package/dist/agent/__tests__/loop-errors.test.d.ts +2 -0
  27. package/dist/agent/__tests__/loop-errors.test.d.ts.map +1 -0
  28. package/dist/agent/__tests__/loop-errors.test.js +44 -0
  29. package/dist/agent/__tests__/loop-errors.test.js.map +1 -0
  30. package/dist/agent/__tests__/model-router.test.d.ts +2 -0
  31. package/dist/agent/__tests__/model-router.test.d.ts.map +1 -0
  32. package/dist/agent/__tests__/model-router.test.js +122 -0
  33. package/dist/agent/__tests__/model-router.test.js.map +1 -0
  34. package/dist/agent/__tests__/orchestrator-isolation.test.d.ts +2 -0
  35. package/dist/agent/__tests__/orchestrator-isolation.test.d.ts.map +1 -0
  36. package/dist/agent/__tests__/orchestrator-isolation.test.js +134 -0
  37. package/dist/agent/__tests__/orchestrator-isolation.test.js.map +1 -0
  38. package/dist/agent/__tests__/orchestrator.test.d.ts +2 -0
  39. package/dist/agent/__tests__/orchestrator.test.d.ts.map +1 -0
  40. package/dist/agent/__tests__/orchestrator.test.js +201 -0
  41. package/dist/agent/__tests__/orchestrator.test.js.map +1 -0
  42. package/dist/agent/__tests__/pipeline.test.d.ts +2 -0
  43. package/dist/agent/__tests__/pipeline.test.d.ts.map +1 -0
  44. package/dist/agent/__tests__/pipeline.test.js +226 -0
  45. package/dist/agent/__tests__/pipeline.test.js.map +1 -0
  46. package/dist/agent/__tests__/planner.test.d.ts +2 -0
  47. package/dist/agent/__tests__/planner.test.d.ts.map +1 -0
  48. package/dist/agent/__tests__/planner.test.js +98 -0
  49. package/dist/agent/__tests__/planner.test.js.map +1 -0
  50. package/dist/agent/__tests__/prompt-enhancer.test.d.ts +2 -0
  51. package/dist/agent/__tests__/prompt-enhancer.test.d.ts.map +1 -0
  52. package/dist/agent/__tests__/prompt-enhancer.test.js +107 -0
  53. package/dist/agent/__tests__/prompt-enhancer.test.js.map +1 -0
  54. package/dist/agent/__tests__/trace-format.test.d.ts +2 -0
  55. package/dist/agent/__tests__/trace-format.test.d.ts.map +1 -0
  56. package/dist/agent/__tests__/trace-format.test.js +104 -0
  57. package/dist/agent/__tests__/trace-format.test.js.map +1 -0
  58. package/dist/agent/__tests__/trace-store.test.d.ts +2 -0
  59. package/dist/agent/__tests__/trace-store.test.d.ts.map +1 -0
  60. package/dist/agent/__tests__/trace-store.test.js +113 -0
  61. package/dist/agent/__tests__/trace-store.test.js.map +1 -0
  62. package/dist/agent/code-graph.d.ts +18 -0
  63. package/dist/agent/code-graph.d.ts.map +1 -0
  64. package/dist/agent/code-graph.js +119 -0
  65. package/dist/agent/code-graph.js.map +1 -0
  66. package/dist/agent/env.d.ts +11 -0
  67. package/dist/agent/env.d.ts.map +1 -0
  68. package/dist/agent/env.js +82 -0
  69. package/dist/agent/env.js.map +1 -0
  70. package/dist/agent/evaluator.d.ts +13 -0
  71. package/dist/agent/evaluator.d.ts.map +1 -0
  72. package/dist/agent/evaluator.js +146 -0
  73. package/dist/agent/evaluator.js.map +1 -0
  74. package/dist/agent/fleet/git-isolation.d.ts +142 -0
  75. package/dist/agent/fleet/git-isolation.d.ts.map +1 -0
  76. package/dist/agent/fleet/git-isolation.js +290 -0
  77. package/dist/agent/fleet/git-isolation.js.map +1 -0
  78. package/dist/agent/fleet/memory.d.ts +21 -0
  79. package/dist/agent/fleet/memory.d.ts.map +1 -0
  80. package/dist/agent/fleet/memory.js +129 -0
  81. package/dist/agent/fleet/memory.js.map +1 -0
  82. package/dist/agent/fleet/orchestrator.d.ts +103 -0
  83. package/dist/agent/fleet/orchestrator.d.ts.map +1 -0
  84. package/dist/agent/fleet/orchestrator.js +355 -0
  85. package/dist/agent/fleet/orchestrator.js.map +1 -0
  86. package/dist/agent/fleet/store.d.ts +13 -0
  87. package/dist/agent/fleet/store.d.ts.map +1 -0
  88. package/dist/agent/fleet/store.js +79 -0
  89. package/dist/agent/fleet/store.js.map +1 -0
  90. package/dist/agent/fleet/types.d.ts +105 -0
  91. package/dist/agent/fleet/types.d.ts.map +1 -0
  92. package/dist/agent/fleet/types.js +17 -0
  93. package/dist/agent/fleet/types.js.map +1 -0
  94. package/dist/agent/judge.d.ts +38 -0
  95. package/dist/agent/judge.d.ts.map +1 -0
  96. package/dist/agent/judge.js +170 -0
  97. package/dist/agent/judge.js.map +1 -0
  98. package/dist/agent/loop.d.ts +61 -0
  99. package/dist/agent/loop.d.ts.map +1 -0
  100. package/dist/agent/loop.js +134 -0
  101. package/dist/agent/loop.js.map +1 -0
  102. package/dist/agent/memory.d.ts +14 -0
  103. package/dist/agent/memory.d.ts.map +1 -0
  104. package/dist/agent/memory.js +118 -0
  105. package/dist/agent/memory.js.map +1 -0
  106. package/dist/agent/model-router.d.ts +79 -0
  107. package/dist/agent/model-router.d.ts.map +1 -0
  108. package/dist/agent/model-router.js +141 -0
  109. package/dist/agent/model-router.js.map +1 -0
  110. package/dist/agent/model.d.ts +9 -0
  111. package/dist/agent/model.d.ts.map +1 -0
  112. package/dist/agent/model.js +24 -0
  113. package/dist/agent/model.js.map +1 -0
  114. package/dist/agent/pipeline.d.ts +82 -0
  115. package/dist/agent/pipeline.d.ts.map +1 -0
  116. package/dist/agent/pipeline.js +320 -0
  117. package/dist/agent/pipeline.js.map +1 -0
  118. package/dist/agent/planner.d.ts +16 -0
  119. package/dist/agent/planner.d.ts.map +1 -0
  120. package/dist/agent/planner.js +126 -0
  121. package/dist/agent/planner.js.map +1 -0
  122. package/dist/agent/project-context.d.ts +13 -0
  123. package/dist/agent/project-context.d.ts.map +1 -0
  124. package/dist/agent/project-context.js +66 -0
  125. package/dist/agent/project-context.js.map +1 -0
  126. package/dist/agent/prompt-enhancer.d.ts +37 -0
  127. package/dist/agent/prompt-enhancer.d.ts.map +1 -0
  128. package/dist/agent/prompt-enhancer.js +115 -0
  129. package/dist/agent/prompt-enhancer.js.map +1 -0
  130. package/dist/agent/system-prompt.d.ts +9 -0
  131. package/dist/agent/system-prompt.d.ts.map +1 -0
  132. package/dist/agent/system-prompt.js +38 -0
  133. package/dist/agent/system-prompt.js.map +1 -0
  134. package/dist/agent/tools.d.ts +19 -0
  135. package/dist/agent/tools.d.ts.map +1 -0
  136. package/dist/agent/tools.js +323 -0
  137. package/dist/agent/tools.js.map +1 -0
  138. package/dist/agent/trace-format.d.ts +6 -0
  139. package/dist/agent/trace-format.d.ts.map +1 -0
  140. package/dist/agent/trace-format.js +74 -0
  141. package/dist/agent/trace-format.js.map +1 -0
  142. package/dist/agent/trace-store.d.ts +19 -0
  143. package/dist/agent/trace-store.d.ts.map +1 -0
  144. package/dist/agent/trace-store.js +82 -0
  145. package/dist/agent/trace-store.js.map +1 -0
  146. package/dist/agent/trace.d.ts +121 -0
  147. package/dist/agent/trace.d.ts.map +1 -0
  148. package/dist/agent/trace.js +2 -0
  149. package/dist/agent/trace.js.map +1 -0
  150. package/dist/commands/__tests__/replay.test.d.ts +2 -0
  151. package/dist/commands/__tests__/replay.test.d.ts.map +1 -0
  152. package/dist/commands/__tests__/replay.test.js +76 -0
  153. package/dist/commands/__tests__/replay.test.js.map +1 -0
  154. package/dist/commands/agent.skill.load.d.ts +3 -0
  155. package/dist/commands/agent.skill.load.d.ts.map +1 -0
  156. package/dist/commands/agent.skill.load.js +57 -0
  157. package/dist/commands/agent.skill.load.js.map +1 -0
  158. package/dist/commands/code.d.ts +14 -0
  159. package/dist/commands/code.d.ts.map +1 -0
  160. package/dist/commands/code.js +100 -0
  161. package/dist/commands/code.js.map +1 -0
  162. package/dist/commands/config.d.ts +2 -0
  163. package/dist/commands/config.d.ts.map +1 -0
  164. package/dist/commands/config.js +66 -0
  165. package/dist/commands/config.js.map +1 -0
  166. package/dist/commands/env.d.ts +19 -0
  167. package/dist/commands/env.d.ts.map +1 -0
  168. package/dist/commands/env.js +64 -0
  169. package/dist/commands/env.js.map +1 -0
  170. package/dist/commands/graph.search.d.ts +10 -0
  171. package/dist/commands/graph.search.d.ts.map +1 -0
  172. package/dist/commands/graph.search.js +25 -0
  173. package/dist/commands/graph.search.js.map +1 -0
  174. package/dist/commands/mcp.add.d.ts +13 -0
  175. package/dist/commands/mcp.add.d.ts.map +1 -0
  176. package/dist/commands/mcp.add.js +110 -0
  177. package/dist/commands/mcp.add.js.map +1 -0
  178. package/dist/commands/mcp.auth.d.ts +10 -0
  179. package/dist/commands/mcp.auth.d.ts.map +1 -0
  180. package/dist/commands/mcp.auth.js +132 -0
  181. package/dist/commands/mcp.auth.js.map +1 -0
  182. package/dist/commands/mcp.check.d.ts +10 -0
  183. package/dist/commands/mcp.check.d.ts.map +1 -0
  184. package/dist/commands/mcp.check.js +114 -0
  185. package/dist/commands/mcp.check.js.map +1 -0
  186. package/dist/commands/mcp.list.d.ts +9 -0
  187. package/dist/commands/mcp.list.d.ts.map +1 -0
  188. package/dist/commands/mcp.list.js +93 -0
  189. package/dist/commands/mcp.list.js.map +1 -0
  190. package/dist/commands/mcp.permit.d.ts +12 -0
  191. package/dist/commands/mcp.permit.d.ts.map +1 -0
  192. package/dist/commands/mcp.permit.js +117 -0
  193. package/dist/commands/mcp.permit.js.map +1 -0
  194. package/dist/commands/mcp.remove.d.ts +9 -0
  195. package/dist/commands/mcp.remove.d.ts.map +1 -0
  196. package/dist/commands/mcp.remove.js +65 -0
  197. package/dist/commands/mcp.remove.js.map +1 -0
  198. package/dist/commands/plugin.org.install_bulk.js +1 -1
  199. package/dist/commands/plugin.org.install_bulk.js.map +1 -1
  200. package/dist/commands/privacy.erase.test.js +7 -0
  201. package/dist/commands/privacy.erase.test.js.map +1 -1
  202. package/dist/commands/replay.d.ts +5 -0
  203. package/dist/commands/replay.d.ts.map +1 -0
  204. package/dist/commands/replay.js +28 -0
  205. package/dist/commands/replay.js.map +1 -0
  206. package/dist/commands/schema/schema.config.d.ts +3 -0
  207. package/dist/commands/schema/schema.config.d.ts.map +1 -0
  208. package/dist/commands/schema/schema.config.js +34 -0
  209. package/dist/commands/schema/schema.config.js.map +1 -0
  210. package/dist/commands/schema/schema.disable.d.ts +3 -0
  211. package/dist/commands/schema/schema.disable.d.ts.map +1 -0
  212. package/dist/commands/schema/schema.disable.js +22 -0
  213. package/dist/commands/schema/schema.disable.js.map +1 -0
  214. package/dist/commands/schema/schema.enable.d.ts +3 -0
  215. package/dist/commands/schema/schema.enable.d.ts.map +1 -0
  216. package/dist/commands/schema/schema.enable.js +22 -0
  217. package/dist/commands/schema/schema.enable.js.map +1 -0
  218. package/dist/commands/schema/schema.export.d.ts +3 -0
  219. package/dist/commands/schema/schema.export.d.ts.map +1 -0
  220. package/dist/commands/schema/schema.export.js +31 -0
  221. package/dist/commands/schema/schema.export.js.map +1 -0
  222. package/dist/commands/schema/schema.get.d.ts +3 -0
  223. package/dist/commands/schema/schema.get.d.ts.map +1 -0
  224. package/dist/commands/schema/schema.get.js +23 -0
  225. package/dist/commands/schema/schema.get.js.map +1 -0
  226. package/dist/commands/schema/schema.label.d.ts +5 -0
  227. package/dist/commands/schema/schema.label.d.ts.map +1 -0
  228. package/dist/commands/schema/schema.label.js +60 -0
  229. package/dist/commands/schema/schema.label.js.map +1 -0
  230. package/dist/commands/schema/schema.list.d.ts +3 -0
  231. package/dist/commands/schema/schema.list.d.ts.map +1 -0
  232. package/dist/commands/schema/schema.list.js +30 -0
  233. package/dist/commands/schema/schema.list.js.map +1 -0
  234. package/dist/commands/schema/schema.prop.d.ts +5 -0
  235. package/dist/commands/schema/schema.prop.d.ts.map +1 -0
  236. package/dist/commands/schema/schema.prop.js +72 -0
  237. package/dist/commands/schema/schema.prop.js.map +1 -0
  238. package/dist/commands/schema/schema.reconcile.d.ts +10 -0
  239. package/dist/commands/schema/schema.reconcile.d.ts.map +1 -0
  240. package/dist/commands/schema/schema.reconcile.js +65 -0
  241. package/dist/commands/schema/schema.reconcile.js.map +1 -0
  242. package/dist/commands/schema/schema.rel.d.ts +5 -0
  243. package/dist/commands/schema/schema.rel.d.ts.map +1 -0
  244. package/dist/commands/schema/schema.rel.js +65 -0
  245. package/dist/commands/schema/schema.rel.js.map +1 -0
  246. package/dist/commands/schema/schema.version.d.ts +7 -0
  247. package/dist/commands/schema/schema.version.d.ts.map +1 -0
  248. package/dist/commands/schema/schema.version.js +96 -0
  249. package/dist/commands/schema/schema.version.js.map +1 -0
  250. package/dist/commands/secret.d.ts +23 -0
  251. package/dist/commands/secret.d.ts.map +1 -0
  252. package/dist/commands/secret.js +90 -0
  253. package/dist/commands/secret.js.map +1 -0
  254. package/dist/commands/skill.create.d.ts +3 -0
  255. package/dist/commands/skill.create.d.ts.map +1 -0
  256. package/dist/commands/skill.create.js +52 -0
  257. package/dist/commands/skill.create.js.map +1 -0
  258. package/dist/commands/skill.enable.d.ts +3 -0
  259. package/dist/commands/skill.enable.d.ts.map +1 -0
  260. package/dist/commands/skill.enable.js +31 -0
  261. package/dist/commands/skill.enable.js.map +1 -0
  262. package/dist/commands.test.js +1291 -281
  263. package/dist/commands.test.js.map +1 -1
  264. package/dist/components/DevStatus.d.ts.map +1 -1
  265. package/dist/components/DevStatus.js +3 -2
  266. package/dist/components/DevStatus.js.map +1 -1
  267. package/dist/daemon/client.d.ts +30 -0
  268. package/dist/daemon/client.d.ts.map +1 -0
  269. package/dist/daemon/client.js +97 -0
  270. package/dist/daemon/client.js.map +1 -0
  271. package/dist/daemon/code-graph/builder.d.ts +6 -0
  272. package/dist/daemon/code-graph/builder.d.ts.map +1 -0
  273. package/dist/daemon/code-graph/builder.js +215 -0
  274. package/dist/daemon/code-graph/builder.js.map +1 -0
  275. package/dist/daemon/code-graph/query.d.ts +29 -0
  276. package/dist/daemon/code-graph/query.d.ts.map +1 -0
  277. package/dist/daemon/code-graph/query.js +98 -0
  278. package/dist/daemon/code-graph/query.js.map +1 -0
  279. package/dist/daemon/code-graph/types.d.ts +37 -0
  280. package/dist/daemon/code-graph/types.d.ts.map +1 -0
  281. package/dist/daemon/code-graph/types.js +5 -0
  282. package/dist/daemon/code-graph/types.js.map +1 -0
  283. package/dist/daemon/code-graph/watcher.d.ts +37 -0
  284. package/dist/daemon/code-graph/watcher.d.ts.map +1 -0
  285. package/dist/daemon/code-graph/watcher.js +79 -0
  286. package/dist/daemon/code-graph/watcher.js.map +1 -0
  287. package/dist/daemon/lifecycle.d.ts +6 -0
  288. package/dist/daemon/lifecycle.d.ts.map +1 -0
  289. package/dist/daemon/lifecycle.js +132 -0
  290. package/dist/daemon/lifecycle.js.map +1 -0
  291. package/dist/daemon/protocol.d.ts +113 -0
  292. package/dist/daemon/protocol.d.ts.map +1 -0
  293. package/dist/daemon/protocol.js +16 -0
  294. package/dist/daemon/protocol.js.map +1 -0
  295. package/dist/daemon/server.d.ts +26 -0
  296. package/dist/daemon/server.d.ts.map +1 -0
  297. package/dist/daemon/server.js +168 -0
  298. package/dist/daemon/server.js.map +1 -0
  299. package/dist/index.d.ts +1 -1
  300. package/dist/index.js +262 -356
  301. package/dist/index.js.map +1 -1
  302. package/dist/lib/api.d.ts +5 -0
  303. package/dist/lib/api.d.ts.map +1 -0
  304. package/dist/lib/api.js +52 -0
  305. package/dist/lib/api.js.map +1 -0
  306. package/dist/lib/config.d.ts +3 -0
  307. package/dist/lib/config.d.ts.map +1 -1
  308. package/dist/lib/config.js +8 -2
  309. package/dist/lib/config.js.map +1 -1
  310. package/dist/lib/differential-context.d.ts +46 -0
  311. package/dist/lib/differential-context.d.ts.map +1 -0
  312. package/dist/lib/differential-context.js +89 -0
  313. package/dist/lib/differential-context.js.map +1 -0
  314. package/dist/lib/resolve.d.ts +3 -0
  315. package/dist/lib/resolve.d.ts.map +1 -0
  316. package/dist/lib/resolve.js +29 -0
  317. package/dist/lib/resolve.js.map +1 -0
  318. package/dist/lib/structured-tool-io.d.ts +31 -0
  319. package/dist/lib/structured-tool-io.d.ts.map +1 -0
  320. package/dist/lib/structured-tool-io.js +56 -0
  321. package/dist/lib/structured-tool-io.js.map +1 -0
  322. package/dist/repl/__tests__/_queue_demo.test.d.ts +2 -0
  323. package/dist/repl/__tests__/_queue_demo.test.d.ts.map +1 -0
  324. package/dist/repl/__tests__/_queue_demo.test.js +40 -0
  325. package/dist/repl/__tests__/_queue_demo.test.js.map +1 -0
  326. package/dist/repl/__tests__/components.test.d.ts +2 -0
  327. package/dist/repl/__tests__/components.test.d.ts.map +1 -0
  328. package/dist/repl/__tests__/components.test.js +38 -0
  329. package/dist/repl/__tests__/components.test.js.map +1 -0
  330. package/dist/repl/__tests__/interactive.queue.test.d.ts +2 -0
  331. package/dist/repl/__tests__/interactive.queue.test.d.ts.map +1 -0
  332. package/dist/repl/__tests__/interactive.queue.test.js +124 -0
  333. package/dist/repl/__tests__/interactive.queue.test.js.map +1 -0
  334. package/dist/repl/components.d.ts +59 -0
  335. package/dist/repl/components.d.ts.map +1 -0
  336. package/dist/repl/components.js +152 -0
  337. package/dist/repl/components.js.map +1 -0
  338. package/dist/repl/interactive.d.ts +12 -0
  339. package/dist/repl/interactive.d.ts.map +1 -0
  340. package/dist/repl/interactive.js +326 -0
  341. package/dist/repl/interactive.js.map +1 -0
  342. package/dist/repl/one-shot.d.ts +9 -0
  343. package/dist/repl/one-shot.d.ts.map +1 -0
  344. package/dist/repl/one-shot.js +83 -0
  345. package/dist/repl/one-shot.js.map +1 -0
  346. package/dist/tui/__tests__/app.test.d.ts +2 -0
  347. package/dist/tui/__tests__/app.test.d.ts.map +1 -0
  348. package/dist/tui/__tests__/app.test.js +136 -0
  349. package/dist/tui/__tests__/app.test.js.map +1 -0
  350. package/dist/tui/__tests__/banner.test.d.ts +2 -0
  351. package/dist/tui/__tests__/banner.test.d.ts.map +1 -0
  352. package/dist/tui/__tests__/banner.test.js +15 -0
  353. package/dist/tui/__tests__/banner.test.js.map +1 -0
  354. package/dist/tui/__tests__/command-form.test.d.ts +2 -0
  355. package/dist/tui/__tests__/command-form.test.d.ts.map +1 -0
  356. package/dist/tui/__tests__/command-form.test.js +96 -0
  357. package/dist/tui/__tests__/command-form.test.js.map +1 -0
  358. package/dist/tui/__tests__/command-tree.test.d.ts +2 -0
  359. package/dist/tui/__tests__/command-tree.test.d.ts.map +1 -0
  360. package/dist/tui/__tests__/command-tree.test.js +55 -0
  361. package/dist/tui/__tests__/command-tree.test.js.map +1 -0
  362. package/dist/tui/__tests__/runner.test.d.ts +2 -0
  363. package/dist/tui/__tests__/runner.test.d.ts.map +1 -0
  364. package/dist/tui/__tests__/runner.test.js +38 -0
  365. package/dist/tui/__tests__/runner.test.js.map +1 -0
  366. package/dist/tui/__tests__/theme.test.d.ts +2 -0
  367. package/dist/tui/__tests__/theme.test.d.ts.map +1 -0
  368. package/dist/tui/__tests__/theme.test.js +11 -0
  369. package/dist/tui/__tests__/theme.test.js.map +1 -0
  370. package/dist/tui/agent-view/activity-feed.d.ts +3 -0
  371. package/dist/tui/agent-view/activity-feed.d.ts.map +1 -0
  372. package/dist/tui/agent-view/activity-feed.js +34 -0
  373. package/dist/tui/agent-view/activity-feed.js.map +1 -0
  374. package/dist/tui/agent-view/budget-bar.d.ts +3 -0
  375. package/dist/tui/agent-view/budget-bar.d.ts.map +1 -0
  376. package/dist/tui/agent-view/budget-bar.js +53 -0
  377. package/dist/tui/agent-view/budget-bar.js.map +1 -0
  378. package/dist/tui/agent-view/compile-panel.d.ts +3 -0
  379. package/dist/tui/agent-view/compile-panel.d.ts.map +1 -0
  380. package/dist/tui/agent-view/compile-panel.js +34 -0
  381. package/dist/tui/agent-view/compile-panel.js.map +1 -0
  382. package/dist/tui/agent-view/index.d.ts +4 -0
  383. package/dist/tui/agent-view/index.d.ts.map +1 -0
  384. package/dist/tui/agent-view/index.js +31 -0
  385. package/dist/tui/agent-view/index.js.map +1 -0
  386. package/dist/tui/agent-view/memory-panel.d.ts +3 -0
  387. package/dist/tui/agent-view/memory-panel.d.ts.map +1 -0
  388. package/dist/tui/agent-view/memory-panel.js +80 -0
  389. package/dist/tui/agent-view/memory-panel.js.map +1 -0
  390. package/dist/tui/agent-view/session-panel.d.ts +3 -0
  391. package/dist/tui/agent-view/session-panel.d.ts.map +1 -0
  392. package/dist/tui/agent-view/session-panel.js +44 -0
  393. package/dist/tui/agent-view/session-panel.js.map +1 -0
  394. package/dist/tui/agent-view/status-bar.d.ts +7 -0
  395. package/dist/tui/agent-view/status-bar.d.ts.map +1 -0
  396. package/dist/tui/agent-view/status-bar.js +22 -0
  397. package/dist/tui/agent-view/status-bar.js.map +1 -0
  398. package/dist/tui/app.d.ts +9 -0
  399. package/dist/tui/app.d.ts.map +1 -0
  400. package/dist/tui/app.js +115 -0
  401. package/dist/tui/app.js.map +1 -0
  402. package/dist/tui/banner.d.ts +5 -0
  403. package/dist/tui/banner.d.ts.map +1 -0
  404. package/dist/tui/banner.js +17 -0
  405. package/dist/tui/banner.js.map +1 -0
  406. package/dist/tui/command-form.d.ts +9 -0
  407. package/dist/tui/command-form.d.ts.map +1 -0
  408. package/dist/tui/command-form.js +76 -0
  409. package/dist/tui/command-form.js.map +1 -0
  410. package/dist/tui/command-tree.d.ts +30 -0
  411. package/dist/tui/command-tree.d.ts.map +1 -0
  412. package/dist/tui/command-tree.js +43 -0
  413. package/dist/tui/command-tree.js.map +1 -0
  414. package/dist/tui/fleet-view/agent-row.d.ts +10 -0
  415. package/dist/tui/fleet-view/agent-row.d.ts.map +1 -0
  416. package/dist/tui/fleet-view/agent-row.js +80 -0
  417. package/dist/tui/fleet-view/agent-row.js.map +1 -0
  418. package/dist/tui/fleet-view/dispatch-input.d.ts +5 -0
  419. package/dist/tui/fleet-view/dispatch-input.d.ts.map +1 -0
  420. package/dist/tui/fleet-view/dispatch-input.js +36 -0
  421. package/dist/tui/fleet-view/dispatch-input.js.map +1 -0
  422. package/dist/tui/fleet-view/fleet-app.d.ts +11 -0
  423. package/dist/tui/fleet-view/fleet-app.d.ts.map +1 -0
  424. package/dist/tui/fleet-view/fleet-app.js +95 -0
  425. package/dist/tui/fleet-view/fleet-app.js.map +1 -0
  426. package/dist/tui/fleet-view/fleet-summary.d.ts +6 -0
  427. package/dist/tui/fleet-view/fleet-summary.d.ts.map +1 -0
  428. package/dist/tui/fleet-view/fleet-summary.js +19 -0
  429. package/dist/tui/fleet-view/fleet-summary.js.map +1 -0
  430. package/dist/tui/fleet-view/index.d.ts +16 -0
  431. package/dist/tui/fleet-view/index.d.ts.map +1 -0
  432. package/dist/tui/fleet-view/index.js +61 -0
  433. package/dist/tui/fleet-view/index.js.map +1 -0
  434. package/dist/tui/runner.d.ts +7 -0
  435. package/dist/tui/runner.d.ts.map +1 -0
  436. package/dist/tui/runner.js +36 -0
  437. package/dist/tui/runner.js.map +1 -0
  438. package/dist/tui/theme.d.ts +8 -0
  439. package/dist/tui/theme.d.ts.map +1 -0
  440. package/dist/tui/theme.js +10 -0
  441. package/dist/tui/theme.js.map +1 -0
  442. package/package.json +12 -7
@@ -0,0 +1,326 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Interactive REPL — the default `oxagen` experience.
4
+ *
5
+ * Full-screen Ink TUI with:
6
+ * - Scrollable conversation history (user prompts + assistant responses)
7
+ * - A thinking indicator (spinner + elapsed time + live token estimate) and a
8
+ * session token counter in the status bar
9
+ * - Multi-turn history, project rules, and Oxagen context-engine memory
10
+ * - Slash commands (/help, /model, /clear, /exit), prompt queue, Esc/Ctrl-C cancel
11
+ *
12
+ * Presentational pieces live in ./components; this file is the container.
13
+ */
14
+ import { Box, Text, useApp, useInput } from "ink";
15
+ import React, { useState, useCallback, useRef, useEffect } from "react";
16
+ import { theme } from "../tui/theme.js";
17
+ import { runTurn } from "../agent/pipeline.js";
18
+ import { resolveModelId } from "../agent/model.js";
19
+ import { loadProjectContext } from "../agent/project-context.js";
20
+ import { openSessionMemory } from "../agent/memory.js";
21
+ import { openFleetMemory } from "../agent/fleet/memory.js";
22
+ import { openTraceStore } from "../agent/trace-store.js";
23
+ import { HELP, MessageView, PromptInput, StatusLine, ThinkingIndicator, summarizeTrace, } from "./components.js";
24
+ import pkg from "../../package.json" with { type: "json" };
25
+ // ── Main App ──────────────────────────────────────────────────────────────────
26
+ function summarizeInput(input) {
27
+ if (input == null)
28
+ return "";
29
+ const text = typeof input === "object" ? JSON.stringify(input) : String(input);
30
+ return text.length > 100 ? text.slice(0, 100) + "…" : text;
31
+ }
32
+ export function ReplApp({ options, }) {
33
+ const { exit } = useApp();
34
+ const [messages, setMessages] = useState([]);
35
+ const [isStreaming, setIsStreaming] = useState(false);
36
+ const [model, setModel] = useState(resolveModelId(options.model));
37
+ const [turns, setTurns] = useState(0);
38
+ // Cumulative session token usage (exact, from the model's reported usage).
39
+ const [usage, setUsage] = useState({
40
+ input: 0,
41
+ output: 0,
42
+ });
43
+ // When the active turn began (drives the thinking indicator); null when idle.
44
+ const [turnStartedAt, setTurnStartedAt] = useState(null);
45
+ // Output chars streamed this turn, for the live token estimate in the indicator.
46
+ const streamCharsRef = useRef(0);
47
+ // Prompts submitted while a turn is in flight wait here and run FIFO when the
48
+ // current turn finishes (Claude Code-style prompt queue). `queued` drives the
49
+ // visible list; `queueRef` is the synchronous source of truth the pump reads.
50
+ const [queued, setQueued] = useState([]);
51
+ const queueRef = useRef([]);
52
+ const pumpingRef = useRef(false);
53
+ // Whether the eval→enhance→judge pipeline is active (vs. the bare agent).
54
+ const [pipelineOn, setPipelineOn] = useState(!options.bare);
55
+ const bareRef = useRef(options.bare ?? false);
56
+ const cwd = process.cwd();
57
+ // Project rules (CLAUDE.md/AGENTS.md) loaded once for the session.
58
+ const projectContextRef = useRef(loadProjectContext(cwd));
59
+ // Oxagen context-engine memory, opened asynchronously on mount.
60
+ const memoryRef = useRef(null);
61
+ // Fleet memory (weighted lessons) and the per-turn trace store, both synchronous.
62
+ const fleetMemoryRef = useRef(openFleetMemory(cwd));
63
+ const traceStoreRef = useRef(openTraceStore(cwd));
64
+ // Source-of-truth message list (the state mirror), so streaming updates can be
65
+ // computed synchronously without racing React's batched setState.
66
+ const allRef = useRef([]);
67
+ // Multi-turn conversation history fed back to the model each turn.
68
+ const historyRef = useRef([]);
69
+ const abortRef = useRef(null);
70
+ const streamingRef = useRef(false);
71
+ const modelRef = useRef(model);
72
+ modelRef.current = model;
73
+ useEffect(() => {
74
+ let mem = null;
75
+ void openSessionMemory(cwd, `repl-${Date.now()}`).then((m) => {
76
+ mem = m;
77
+ memoryRef.current = m;
78
+ });
79
+ return () => {
80
+ void mem?.close();
81
+ };
82
+ }, [cwd]);
83
+ const commit = useCallback((next) => {
84
+ allRef.current = next;
85
+ setMessages(next);
86
+ }, []);
87
+ const pushAssistant = useCallback((content) => {
88
+ commit([
89
+ ...allRef.current,
90
+ { role: "assistant", content, timestamp: Date.now() },
91
+ ]);
92
+ }, [commit]);
93
+ const cancelTurn = useCallback(() => {
94
+ // Cancel the in-flight turn and drop anything queued behind it.
95
+ queueRef.current = [];
96
+ setQueued([]);
97
+ abortRef.current?.abort();
98
+ }, []);
99
+ useInput((input, key) => {
100
+ if (key.escape) {
101
+ if (streamingRef.current)
102
+ cancelTurn();
103
+ return;
104
+ }
105
+ if (key.ctrl && input === "c") {
106
+ if (streamingRef.current && abortRef.current) {
107
+ cancelTurn();
108
+ }
109
+ else {
110
+ void memoryRef.current?.close();
111
+ exit();
112
+ }
113
+ }
114
+ });
115
+ const handleSubmit = useCallback(async (text) => {
116
+ // ── Slash commands ──
117
+ if (text === "/help") {
118
+ pushAssistant(HELP);
119
+ return;
120
+ }
121
+ if (text === "/clear") {
122
+ allRef.current = [];
123
+ historyRef.current = [];
124
+ setMessages([]);
125
+ return;
126
+ }
127
+ if (text.startsWith("/model")) {
128
+ const slug = text.slice("/model".length).trim();
129
+ if (slug) {
130
+ setModel(slug);
131
+ pushAssistant(`Model set to ${slug}.`);
132
+ }
133
+ else {
134
+ pushAssistant(`Current model: ${modelRef.current}`);
135
+ }
136
+ return;
137
+ }
138
+ if (text.startsWith("/replay")) {
139
+ const arg = text.slice("/replay".length).trim();
140
+ const trace = traceStoreRef.current.resolve(arg);
141
+ if (!trace) {
142
+ pushAssistant(arg
143
+ ? `No turn matches "${arg}". Try /traces to list recent turns.`
144
+ : "No turns recorded yet. Run a prompt first.");
145
+ }
146
+ else {
147
+ commit([
148
+ ...allRef.current,
149
+ { role: "assistant", content: "", trace, timestamp: Date.now() },
150
+ ]);
151
+ }
152
+ return;
153
+ }
154
+ if (text === "/traces") {
155
+ const traces = traceStoreRef.current.list();
156
+ pushAssistant(traces.length === 0
157
+ ? "No turns recorded yet."
158
+ : "Recent turns (use /replay <n>):\n" +
159
+ traces.slice(0, 10).map((t, i) => summarizeTrace(t, i)).join("\n"));
160
+ return;
161
+ }
162
+ if (text.startsWith("/pipeline")) {
163
+ const arg = text.slice("/pipeline".length).trim().toLowerCase();
164
+ if (arg === "off") {
165
+ bareRef.current = true;
166
+ setPipelineOn(false);
167
+ pushAssistant("Pipeline OFF — running the bare agent (no eval/enhance/judge).");
168
+ }
169
+ else if (arg === "on") {
170
+ bareRef.current = false;
171
+ setPipelineOn(true);
172
+ pushAssistant("Pipeline ON — prompts are evaluated, enhanced, and judged for completeness.");
173
+ }
174
+ else {
175
+ pushAssistant(`Pipeline is ${bareRef.current ? "OFF" : "ON"}. Use /pipeline on|off.`);
176
+ }
177
+ return;
178
+ }
179
+ if (text === "/exit" || text === "/quit") {
180
+ void memoryRef.current?.close();
181
+ exit();
182
+ return;
183
+ }
184
+ const userMsg = {
185
+ role: "user",
186
+ content: text,
187
+ timestamp: Date.now(),
188
+ };
189
+ const base = [...allRef.current, userMsg];
190
+ commit(base);
191
+ setIsStreaming(true);
192
+ streamingRef.current = true;
193
+ setTurnStartedAt(Date.now());
194
+ streamCharsRef.current = 0;
195
+ const controller = new AbortController();
196
+ abortRef.current = controller;
197
+ // This turn's streamed messages (tool annotations + assistant text).
198
+ const turn = [];
199
+ let assistantOpen = false;
200
+ const render = () => commit([...base, ...turn]);
201
+ try {
202
+ const result = await runTurn({
203
+ prompt: text,
204
+ history: historyRef.current,
205
+ cwd,
206
+ model: modelRef.current,
207
+ readOnly: options.readOnly,
208
+ bare: bareRef.current,
209
+ projectContext: projectContextRef.current,
210
+ memory: memoryRef.current,
211
+ fleetMemory: fleetMemoryRef.current,
212
+ signal: controller.signal,
213
+ onStage: (stage) => {
214
+ turn.push({
215
+ role: "stage",
216
+ stage,
217
+ content: stage.label,
218
+ timestamp: Date.now(),
219
+ });
220
+ assistantOpen = false;
221
+ render();
222
+ },
223
+ onToolCall: (name, input) => {
224
+ turn.push({
225
+ role: "tool",
226
+ toolName: name,
227
+ content: summarizeInput(input),
228
+ timestamp: Date.now(),
229
+ });
230
+ assistantOpen = false;
231
+ render();
232
+ },
233
+ onText: (delta) => {
234
+ streamCharsRef.current += delta.length;
235
+ if (!assistantOpen) {
236
+ turn.push({
237
+ role: "assistant",
238
+ content: "",
239
+ streaming: true,
240
+ timestamp: Date.now(),
241
+ });
242
+ assistantOpen = true;
243
+ }
244
+ const last = turn[turn.length - 1];
245
+ turn[turn.length - 1] = { ...last, content: last.content + delta };
246
+ render();
247
+ },
248
+ });
249
+ if (assistantOpen) {
250
+ const last = turn[turn.length - 1];
251
+ turn[turn.length - 1] = { ...last, streaming: false };
252
+ }
253
+ else {
254
+ turn.push({
255
+ role: "assistant",
256
+ content: result.text || "(done)",
257
+ timestamp: Date.now(),
258
+ });
259
+ }
260
+ render();
261
+ historyRef.current = result.messages;
262
+ // Persist the turn trace so /replay can show how it was handled.
263
+ traceStoreRef.current.record(result.trace);
264
+ setTurns((n) => n + 1);
265
+ setUsage((u) => ({
266
+ input: u.input + (result.usage.inputTokens ?? 0),
267
+ output: u.output + (result.usage.outputTokens ?? 0),
268
+ }));
269
+ }
270
+ catch (err) {
271
+ const cancelled = controller.signal.aborted;
272
+ turn.push({
273
+ role: "assistant",
274
+ content: cancelled
275
+ ? "(cancelled)"
276
+ : `Error: ${err instanceof Error ? err.message : String(err)}`,
277
+ timestamp: Date.now(),
278
+ });
279
+ render();
280
+ }
281
+ finally {
282
+ abortRef.current = null;
283
+ streamingRef.current = false;
284
+ setIsStreaming(false);
285
+ setTurnStartedAt(null);
286
+ }
287
+ }, []);
288
+ // The pump reads the latest handleSubmit via a ref so it never closes over a
289
+ // stale version, while staying a stable callback itself.
290
+ const handleSubmitRef = useRef(handleSubmit);
291
+ handleSubmitRef.current = handleSubmit;
292
+ // Single sequential consumer: drains the queue one prompt at a time, awaiting
293
+ // each turn before starting the next. Re-entrancy is guarded so submissions
294
+ // that arrive mid-drain just extend the queue the running pump is reading.
295
+ const pump = useCallback(async () => {
296
+ if (pumpingRef.current)
297
+ return;
298
+ pumpingRef.current = true;
299
+ try {
300
+ while (queueRef.current.length > 0) {
301
+ const next = queueRef.current[0];
302
+ queueRef.current = queueRef.current.slice(1);
303
+ setQueued(queueRef.current);
304
+ await handleSubmitRef.current(next);
305
+ }
306
+ }
307
+ finally {
308
+ pumpingRef.current = false;
309
+ }
310
+ }, []);
311
+ // Every submission goes through the queue. When idle, the pump picks it up
312
+ // immediately; when a turn is in flight, it waits its turn (FIFO).
313
+ const enqueue = useCallback((text) => {
314
+ queueRef.current = [...queueRef.current, text];
315
+ setQueued(queueRef.current);
316
+ void pump();
317
+ }, [pump]);
318
+ return (_jsxs(Box, { flexDirection: "column", height: "100%", children: [_jsxs(Box, { paddingX: 1, marginBottom: 1, children: [_jsxs(Text, { color: theme.cyan, bold: true, children: [theme.ring, " "] }), _jsx(Text, { color: theme.violet, bold: true, children: "oxagen" }), _jsx(Text, { dimColor: true, children: " \u00B7 agentic coding \u00B7 " }), _jsxs(Text, { dimColor: true, children: ["v", pkg.version] })] }), _jsx(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: messages.length === 0 ? (_jsxs(Box, { paddingX: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Ready. Type a prompt to start coding." }), _jsx(Text, { dimColor: true, children: "Backed by Oxagen's knowledge-graph context engine. Type /help for commands." }), projectContextRef.current.sources.length > 0 && (_jsxs(Text, { dimColor: true, children: ["Loaded rules: ", projectContextRef.current.sources.join(", ")] }))] })) : (messages.map((msg, i) => _jsx(MessageView, { msg: msg }, i))) }), queued.length > 0 && (_jsx(Box, { flexDirection: "column", paddingX: 1, children: queued.map((q, i) => (_jsxs(Box, { children: [_jsx(Text, { color: "#FBBF24", children: "⧗ queued: " }), _jsx(Text, { dimColor: true, wrap: "truncate", children: q })] }, i))) })), isStreaming && turnStartedAt !== null && (_jsx(ThinkingIndicator, { startedAt: turnStartedAt, getTokens: () => Math.round(streamCharsRef.current / 4) })), _jsx(StatusLine, { model: model, readOnly: options.readOnly ?? false, turns: turns, inputTokens: usage.input, outputTokens: usage.output, pipelineOn: pipelineOn }), _jsx(PromptInput, { onSubmit: enqueue, busy: isStreaming })] }));
319
+ }
320
+ // ── Launch ────────────────────────────────────────────────────────────────────
321
+ export async function launchRepl(options = {}) {
322
+ const { render: renderInk } = await import("ink");
323
+ const { waitUntilExit } = renderInk(_jsx(ReplApp, { options: options }));
324
+ await waitUntilExit();
325
+ }
326
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/repl/interactive.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface OneShotOptions {
2
+ readOnly?: boolean;
3
+ model?: string;
4
+ /** Skip the eval/enhance/judge pipeline and run the bare agent. */
5
+ bare?: boolean;
6
+ }
7
+ export declare function runOneShot(prompt: string, options?: OneShotOptions): Promise<void>;
8
+ export declare function runFromStdin(options?: OneShotOptions): Promise<void>;
9
+ //# sourceMappingURL=one-shot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one-shot.d.ts","sourceRoot":"","sources":["../../src/repl/one-shot.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * One-shot mode — run a single prompt through the local agent loop, stream the
3
+ * response to stdout, exit.
4
+ *
5
+ * Usage:
6
+ * oxagen "fix the login bug"
7
+ * oxagen --readonly "explain how auth works"
8
+ * echo "explain this code" | oxagen
9
+ *
10
+ * The agent operates on the current working directory using local coding tools,
11
+ * loads project rules (CLAUDE.md/AGENTS.md), and records the turn into Oxagen's
12
+ * context engine. Model calls go through the Vercel AI Gateway.
13
+ */
14
+ import { runTurn, MissingGatewayKeyError } from "../agent/pipeline.js";
15
+ import { loadProjectContext } from "../agent/project-context.js";
16
+ import { openSessionMemory } from "../agent/memory.js";
17
+ import { openFleetMemory } from "../agent/fleet/memory.js";
18
+ import { openTraceStore } from "../agent/trace-store.js";
19
+ export async function runOneShot(prompt, options = {}) {
20
+ const cwd = process.cwd();
21
+ const projectContext = loadProjectContext(cwd);
22
+ const memory = await openSessionMemory(cwd, `one-shot-${Date.now()}`);
23
+ const fleetMemory = openFleetMemory(cwd);
24
+ const traceStore = openTraceStore(cwd);
25
+ try {
26
+ let streamed = false;
27
+ const result = await runTurn({
28
+ prompt,
29
+ cwd,
30
+ projectContext,
31
+ readOnly: options.readOnly,
32
+ model: options.model,
33
+ bare: options.bare,
34
+ memory,
35
+ fleetMemory,
36
+ // Pipeline stage progress goes to stderr so stdout stays the clean answer.
37
+ onStage: (stage) => {
38
+ process.stderr.write(` ${stage.label}${stage.detail ? ` · ${stage.detail}` : ""}\n`);
39
+ },
40
+ onText: (delta) => {
41
+ streamed = true;
42
+ process.stdout.write(delta);
43
+ },
44
+ // Tool activity goes to stderr so stdout stays the clean final answer
45
+ // (pipeable). e.g. `oxagen "..." > out.md` captures only the answer.
46
+ onToolCall: (name, input) => {
47
+ const summary = typeof input === "object" && input !== null
48
+ ? JSON.stringify(input).slice(0, 120)
49
+ : String(input);
50
+ process.stderr.write(` · ${name} ${summary}\n`);
51
+ },
52
+ });
53
+ traceStore.record(result.trace);
54
+ if (streamed)
55
+ process.stdout.write("\n");
56
+ }
57
+ catch (err) {
58
+ if (err instanceof MissingGatewayKeyError) {
59
+ process.stderr.write(`Error: ${err.message}\n`);
60
+ }
61
+ else {
62
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
63
+ }
64
+ process.exitCode = 1;
65
+ }
66
+ finally {
67
+ await memory?.close();
68
+ }
69
+ }
70
+ export async function runFromStdin(options = {}) {
71
+ const chunks = [];
72
+ for await (const chunk of process.stdin) {
73
+ chunks.push(chunk);
74
+ }
75
+ const prompt = Buffer.concat(chunks).toString("utf8").trim();
76
+ if (!prompt) {
77
+ process.stderr.write("Error: No input received on stdin.\n");
78
+ process.exitCode = 1;
79
+ return;
80
+ }
81
+ await runOneShot(prompt, options);
82
+ }
83
+ //# sourceMappingURL=one-shot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one-shot.js","sourceRoot":"","sources":["../../src/repl/one-shot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AASzD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,UAA0B,EAAE;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM;YACN,GAAG;YACH,cAAc;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,WAAW;YACX,2EAA2E;YAC3E,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAChE,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,sEAAsE;YACtE,qEAAqE;YACrE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBACzC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACrC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC;YACnD,CAAC;SACF,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA0B,EAAE;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.test.d.ts","sourceRoot":"","sources":["../../../src/tui/__tests__/app.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,136 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // apps/cli/src/tui/__tests__/app.test.tsx
3
+ import { afterEach, describe, expect, it, vi } from "vitest";
4
+ import { render } from "ink-testing-library";
5
+ import React from "react";
6
+ import { Command } from "commander";
7
+ import { App } from "../app.js";
8
+ // M4: mock runCommand so form→result works without spawning a real child process.
9
+ // assembleArgv is kept real (not mocked) since it is a pure function with no
10
+ // side effects — only runCommand spawns a child process.
11
+ vi.mock("../runner.js", async () => {
12
+ // Import the real module to re-export assembleArgv unchanged.
13
+ const real = await vi.importActual("../runner.js");
14
+ return {
15
+ ...real,
16
+ runCommand: vi.fn(() => Promise.resolve({ code: 0 })),
17
+ };
18
+ });
19
+ function program() {
20
+ const p = new Command("oxagen").description("Oxagen developer CLI");
21
+ const auth = p.command("auth").description("Authentication");
22
+ auth.command("login").description("Authenticate").option("--email <e>", "Email").action(() => { });
23
+ auth.command("logout").description("Sign out").action(() => { });
24
+ p.command("chat").description("Chat & messaging");
25
+ return p;
26
+ }
27
+ // ink 7 keyboard constants.
28
+ // Note: React state updates from useInput flush asynchronously — await a
29
+ // Promise.resolve() (or setImmediate in real-timer tests) after each write
30
+ // to let the scheduler flush before asserting lastFrame().
31
+ const ENTER = "\r";
32
+ // ESC has a ~20ms debounce in ink 7: a bare \x1b is parked until the timer
33
+ // fires to confirm it is not the start of a longer escape sequence.
34
+ // Use vi.useFakeTimers() + vi.advanceTimersByTime(25) to flush it.
35
+ const ESC = "\x1b";
36
+ describe("App", () => {
37
+ afterEach(() => {
38
+ vi.useRealTimers();
39
+ });
40
+ it("renders banner + top-level groups", () => {
41
+ const { lastFrame } = render(_jsx(App, { program: program(), version: "0.4.0" }));
42
+ const frame = lastFrame() ?? "";
43
+ expect(frame.toLowerCase()).toContain("oxagen");
44
+ expect(frame).toContain("auth");
45
+ expect(frame).toContain("chat");
46
+ });
47
+ it("drills into a group and back out", async () => {
48
+ const { lastFrame, stdin } = render(_jsx(App, { program: program(), version: "0.4.0" }));
49
+ // ENTER drills into "auth" (first item). useInput state update is async —
50
+ // await Promise.resolve() to let the scheduler flush before asserting.
51
+ stdin.write(ENTER);
52
+ await Promise.resolve();
53
+ expect(lastFrame()).toContain("login");
54
+ expect(lastFrame()).toContain("logout");
55
+ // ESC goes back to groups. ink 7 debounces bare ESC for 20ms.
56
+ // Switch to fake timers, write ESC, advance past debounce, then flush
57
+ // the React state update with Promise.resolve().
58
+ vi.useFakeTimers();
59
+ stdin.write(ESC);
60
+ vi.advanceTimersByTime(25);
61
+ await Promise.resolve();
62
+ expect(lastFrame()).toContain("chat");
63
+ });
64
+ it("filters the current list as you type", async () => {
65
+ const { lastFrame, stdin } = render(_jsx(App, { program: program(), version: "0.4.0" }));
66
+ stdin.write("ch");
67
+ // Two characters → two sequential state updates. Await twice to let both
68
+ // schedule and flush through the React scheduler.
69
+ await Promise.resolve();
70
+ await Promise.resolve();
71
+ const frame = lastFrame() ?? "";
72
+ expect(frame).toContain("chat");
73
+ expect(frame).not.toContain("auth");
74
+ });
75
+ // M3: 'q' with an empty filter quits; 'q' typed while a filter is active
76
+ // appends to the filter string instead of quitting.
77
+ it("q quits when filter is empty but appends to filter when active", async () => {
78
+ const onExit = vi.fn();
79
+ // Case A: empty filter → q should call onExit.
80
+ const { stdin: stdinA } = render(_jsx(App, { program: program(), version: "0.4.0", onExit: onExit }));
81
+ stdinA.write("q");
82
+ await Promise.resolve();
83
+ expect(onExit).toHaveBeenCalledTimes(1);
84
+ });
85
+ it("q appends to filter when filter is active and does not quit", async () => {
86
+ const onExit = vi.fn();
87
+ const { lastFrame, stdin } = render(_jsx(App, { program: program(), version: "0.4.0", onExit: onExit }));
88
+ // Type "c" to activate a filter, then "q" — should append, not quit.
89
+ stdin.write("c");
90
+ await Promise.resolve();
91
+ stdin.write("q");
92
+ await Promise.resolve();
93
+ // The frame should show the filter is active and onExit is not called.
94
+ // "cq" matches nothing in our tree, so "no matches" should render.
95
+ const frame = lastFrame() ?? "";
96
+ expect(frame).toContain("cq");
97
+ expect(onExit).not.toHaveBeenCalled();
98
+ });
99
+ // M4: form → result flow. Selects a runnable leaf (auth → login), submits the
100
+ // form with Enter on the only required field, then asserts the result screen.
101
+ // runCommand is mocked at the module level above to resolve { code: 0 }.
102
+ it("form → result: submitting a leaf command renders the result screen", async () => {
103
+ const { lastFrame, stdin } = render(_jsx(App, { program: program(), version: "0.4.0" }));
104
+ // Navigate into the "auth" group (first item, cursor=0).
105
+ stdin.write(ENTER);
106
+ await Promise.resolve();
107
+ expect(lastFrame()).toContain("login");
108
+ // Select "login" (first item under auth, cursor=0).
109
+ stdin.write(ENTER);
110
+ // Flush state updates AND effects (useEffect runs after commit, not in microtasks).
111
+ // setImmediate yields to the macrotask queue where effects are flushed in ink's
112
+ // test environment (using fake-DOM / Node event loop).
113
+ await new Promise((r) => setImmediate(r));
114
+ // Now on the form screen for "login"; its useInput handler is now registered.
115
+ // Verify we're on the form (sanity check before submitting).
116
+ expect(lastFrame()).toContain("--email");
117
+ // Submit the form — login has an --email option but no required args,
118
+ // so Enter on the form submits immediately (active=0 = last field).
119
+ stdin.write(ENTER);
120
+ // runCommand is async; flush the microtask chain then yield to the scheduler:
121
+ // 1) trySubmit() → onSubmit() → awaits runCommand mock (microtask)
122
+ // 2) runCommand resolves → setStack called (microtask continuation)
123
+ // 3) React schedules re-render (in legacy mode, async setState from Promise
124
+ // callbacks may be scheduled via a macro-task rather than a microtask)
125
+ // 4) setImmediate yields past any pending macro-task scheduler ticks
126
+ for (let i = 0; i < 5; i++)
127
+ await Promise.resolve();
128
+ await new Promise((r) => setImmediate(r));
129
+ for (let i = 0; i < 3; i++)
130
+ await Promise.resolve();
131
+ const frame = lastFrame() ?? "";
132
+ // Result screen renders "✓ completed" for code 0.
133
+ expect(frame).toContain("completed");
134
+ });
135
+ });
136
+ //# sourceMappingURL=app.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../../src/tui/__tests__/app.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=banner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.test.d.ts","sourceRoot":"","sources":["../../../src/tui/__tests__/banner.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, it, expect } from "vitest";
3
+ import { render } from "ink-testing-library";
4
+ import React from "react";
5
+ import { Banner } from "../banner.js";
6
+ describe("Banner", () => {
7
+ it("renders the Oxagen wordmark, ring glyph, and version", () => {
8
+ const { lastFrame } = render(_jsx(Banner, { version: "0.4.0" }));
9
+ const frame = lastFrame() ?? "";
10
+ expect(frame).toContain("◯");
11
+ expect(frame.toLowerCase()).toContain("oxagen");
12
+ expect(frame).toContain("0.4.0");
13
+ });
14
+ });
15
+ //# sourceMappingURL=banner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.test.js","sourceRoot":"","sources":["../../../src/tui/__tests__/banner.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,GAAG,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=command-form.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-form.test.d.ts","sourceRoot":"","sources":["../../../src/tui/__tests__/command-form.test.tsx"],"names":[],"mappings":""}