@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,115 @@
1
+ /**
2
+ * Automatic prompt enhancement.
3
+ *
4
+ * Before a prompt is handed to the agent (or split into a plan), this enriches it
5
+ * with the context the CLI already has about the repository: the code graph (a
6
+ * local symbol + import index — where things are defined, what imports them) and
7
+ * the fleet's recorded lessons. The user types "fix the login bug"; the agent
8
+ * receives that plus the exact files and symbols involved and the gotchas it
9
+ * learned last time. That is what makes the agent both faster (less blind
10
+ * grepping) and cheaper (fewer exploratory tool calls before it acts).
11
+ *
12
+ * The code graph is the knowledge graph the CLI carries offline; when the
13
+ * platform knowledge graph is reachable it can augment this, but enhancement
14
+ * never depends on the network and degrades to a no-op if the graph can't build.
15
+ */
16
+ import { queryCodeGraph } from "./code-graph.js";
17
+ import { formatLessons } from "./fleet/memory.js";
18
+ const CODEY_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|json|md|mdx|css|scss|sql|py|go|rs|sh|yml|yaml|toml)$/;
19
+ /**
20
+ * Pull likely code references out of a natural-language prompt: backticked spans,
21
+ * file paths, and identifier-shaped tokens (CamelCase / snake_case / dotted).
22
+ */
23
+ export function extractCandidates(prompt) {
24
+ const symbols = new Set();
25
+ const paths = new Set();
26
+ // Backticked spans are the strongest signal — the user is quoting code.
27
+ for (const m of prompt.matchAll(/`([^`]+)`/g)) {
28
+ const inner = (m[1] ?? "").trim();
29
+ if (!inner)
30
+ continue;
31
+ if (inner.includes("/") || CODEY_EXT.test(inner))
32
+ paths.add(inner);
33
+ else if (/^[\w.$]+$/.test(inner))
34
+ symbols.add(inner);
35
+ }
36
+ // Bare file paths and identifiers in the surrounding prose.
37
+ for (const m of prompt.matchAll(/[A-Za-z0-9_./-]+/g)) {
38
+ const tok = m[0];
39
+ if (CODEY_EXT.test(tok) || (tok.includes("/") && tok.length > 3)) {
40
+ paths.add(tok.replace(/^\.\//, ""));
41
+ }
42
+ else if (/^[A-Z][A-Za-z0-9]{2,}$/.test(tok) || /^[a-z]+_[a-z0-9_]+$/.test(tok)) {
43
+ // CamelCase (Foo, GraphNode) or snake_case (build_tools) — likely symbols.
44
+ symbols.add(tok);
45
+ }
46
+ }
47
+ return { symbols: [...symbols], paths: [...paths] };
48
+ }
49
+ /** True when a code-graph result string represents a real hit (not a "No …" miss). */
50
+ function isHit(result) {
51
+ return result.length > 0 && !/^No (symbols?|file) /.test(result) && !/^Nothing imports/.test(result);
52
+ }
53
+ export async function enhancePrompt(opts) {
54
+ const { prompt, cwd } = opts;
55
+ const max = opts.maxSymbols ?? 6;
56
+ // Lessons first — they need no code graph and must surface even if it fails.
57
+ const lessons = opts.memory?.recall(prompt, { limit: 4 }) ?? [];
58
+ const sections = [];
59
+ const resolved = [];
60
+ try {
61
+ const { symbols, paths } = extractCandidates(prompt);
62
+ // Evaluator-supplied hints are authoritative — the model explicitly named them
63
+ // — so classify each directly (like a backticked span) rather than mining it
64
+ // from prose. They sharpen retrieval without polluting the visible prompt text.
65
+ const symSet = new Set(symbols);
66
+ const pathSet = new Set(paths);
67
+ for (const q of opts.extraQueries ?? []) {
68
+ const t = q.trim();
69
+ if (!t)
70
+ continue;
71
+ if (t.includes("/") || CODEY_EXT.test(t))
72
+ pathSet.add(t.replace(/^\.\//, ""));
73
+ else if (/^[\w.$]+$/.test(t))
74
+ symSet.add(t);
75
+ // Multi-word topics that aren't identifiers are skipped — they won't resolve.
76
+ }
77
+ // Symbol definitions — "where is X defined".
78
+ for (const sym of [...symSet].slice(0, max)) {
79
+ const res = await queryCodeGraph(cwd, "search", sym, 4);
80
+ if (isHit(res)) {
81
+ sections.push(`Definitions of \`${sym}\`:\n${res}`);
82
+ resolved.push(sym);
83
+ }
84
+ }
85
+ // File context — symbols a referenced file defines, plus its dependents
86
+ // (what a change to it could break). This is the impact-analysis the agent
87
+ // would otherwise have to discover by hand.
88
+ for (const p of [...pathSet].slice(0, max)) {
89
+ const syms = await queryCodeGraph(cwd, "file_symbols", p, 12);
90
+ if (isHit(syms)) {
91
+ sections.push(`Symbols in ${p}:\n${syms}`);
92
+ resolved.push(p);
93
+ const deps = await queryCodeGraph(cwd, "dependents", p, 8);
94
+ if (isHit(deps))
95
+ sections.push(deps);
96
+ }
97
+ }
98
+ }
99
+ catch {
100
+ /* code graph unavailable (e.g. unreadable cwd) — enhancement is optional */
101
+ }
102
+ const parts = [];
103
+ if (sections.length > 0) {
104
+ parts.push("## Relevant code context (auto-retrieved from the code graph)\n" +
105
+ "Use this to skip exploration and go straight to the right files.\n\n" +
106
+ sections.join("\n\n"));
107
+ }
108
+ if (lessons.length > 0) {
109
+ parts.push("## Lessons from past work on this repo (recalled memory)\n" + formatLessons(lessons));
110
+ }
111
+ const context = parts.join("\n\n");
112
+ const enhanced = context ? `${prompt}\n\n${context}` : prompt;
113
+ return { prompt: enhanced, context, resolved, lessons };
114
+ }
115
+ //# sourceMappingURL=prompt-enhancer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-enhancer.js","sourceRoot":"","sources":["../../src/agent/prompt-enhancer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ProjectContext } from "./project-context.js";
2
+ export interface SystemPromptOptions {
3
+ cwd: string;
4
+ projectContext?: ProjectContext;
5
+ /** When true, the agent must not mutate the filesystem or run commands. */
6
+ readOnly?: boolean;
7
+ }
8
+ export declare function buildSystemPrompt(opts: SystemPromptOptions): string;
9
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA0CnE"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * System prompt for the local agentic coding loop.
3
+ *
4
+ * Intentionally compact and stable: a stable prefix keeps the provider prompt
5
+ * cache warm across turns (cache-aware layout — see CONTEXT_ENGINE_SPEC).
6
+ * Project rules are loaded once per session and included here (stable). Per-turn
7
+ * recalled memory is injected by the loop as a separate section, not here.
8
+ */
9
+ import { platform, release } from "node:os";
10
+ export function buildSystemPrompt(opts) {
11
+ const { cwd, projectContext, readOnly } = opts;
12
+ const lines = [
13
+ "You are oxagen, an agentic coding assistant running locally in the user's terminal,",
14
+ "backed by Oxagen's knowledge-graph context engine.",
15
+ "You operate directly on the user's working directory using the provided tools.",
16
+ "",
17
+ "Operating rules:",
18
+ "- Act, don't narrate intentions at length. Read before you edit, and edit precisely.",
19
+ "- Prefer `edit_file` for surgical changes; only `write_file` for new files or full rewrites.",
20
+ "- Before editing a file you have not read this session, `read_file` it first.",
21
+ "- Use `grep` and `glob` to locate code instead of guessing paths.",
22
+ "- Use `code_graph` for structural questions — `search` to find where a symbol is",
23
+ " defined, `dependents` to see what imports a file before you change it. It is a",
24
+ " precomputed symbol/import index, more precise than grep for those questions.",
25
+ "- Use `bash` for builds, tests, git, and anything the dedicated tools don't cover.",
26
+ "- Keep changes minimal and consistent with the surrounding code's style and conventions.",
27
+ "- When the task is done, give a short summary of what changed. Do not pad the response.",
28
+ ];
29
+ if (readOnly) {
30
+ lines.push("", "READ-ONLY MODE: you may read, search, and explain, but you MUST NOT modify files or run commands.", "The write_file, edit_file, and bash tools are disabled. Explain the change instead of making it.");
31
+ }
32
+ lines.push("", `Environment: ${platform()} ${release()} · cwd: ${cwd}`);
33
+ if (projectContext && projectContext.text) {
34
+ lines.push("", `## Project rules (from ${projectContext.sources.join(", ")})`, "Follow these as binding instructions for this repository:", "", projectContext.text);
35
+ }
36
+ return lines.join("\n");
37
+ }
38
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAU5C,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE/C,MAAM,KAAK,GAAG;QACZ,qFAAqF;QACrF,oDAAoD;QACpD,gFAAgF;QAChF,EAAE;QACF,kBAAkB;QAClB,sFAAsF;QACtF,8FAA8F;QAC9F,+EAA+E;QAC/E,mEAAmE;QACnE,kFAAkF;QAClF,kFAAkF;QAClF,gFAAgF;QAChF,oFAAoF;QACpF,0FAA0F;QAC1F,yFAAyF;KAC1F,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CACR,EAAE,EACF,mGAAmG,EACnG,kGAAkG,CACnG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,QAAQ,EAAE,IAAI,OAAO,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;IAExE,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CACR,EAAE,EACF,0BAA0B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC9D,2DAA2D,EAC3D,EAAE,EACF,cAAc,CAAC,IAAI,CACpB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Local coding tools for the agent loop.
3
+ *
4
+ * These are the host-filesystem / shell primitives that Claude Code-style
5
+ * agentic coding needs and that the Oxagen platform deliberately does NOT expose
6
+ * (the platform only has a sandboxed `agent.code.execute`, not host-fs tools).
7
+ * Each is an AI SDK `tool()` whose `execute` operates on the local working
8
+ * directory and returns a string the model can read.
9
+ *
10
+ * Safety note (v1): tools execute without an interactive permission prompt. The
11
+ * user invoked `oxagen` against their own repo, so this mirrors a developer
12
+ * running commands. Per-tool approval gating is a planned enhancement (it maps
13
+ * onto the same approval flow the platform already has for risky capabilities).
14
+ */
15
+ import { type ToolSet } from "ai";
16
+ export declare function buildTools(cwd: string, opts?: {
17
+ readOnly?: boolean;
18
+ }): ToolSet;
19
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agent/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAkFxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAqOT"}
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Local coding tools for the agent loop.
3
+ *
4
+ * These are the host-filesystem / shell primitives that Claude Code-style
5
+ * agentic coding needs and that the Oxagen platform deliberately does NOT expose
6
+ * (the platform only has a sandboxed `agent.code.execute`, not host-fs tools).
7
+ * Each is an AI SDK `tool()` whose `execute` operates on the local working
8
+ * directory and returns a string the model can read.
9
+ *
10
+ * Safety note (v1): tools execute without an interactive permission prompt. The
11
+ * user invoked `oxagen` against their own repo, so this mirrors a developer
12
+ * running commands. Per-tool approval gating is a planned enhancement (it maps
13
+ * onto the same approval flow the platform already has for risky capabilities).
14
+ */
15
+ import { tool } from "ai";
16
+ import { z } from "zod";
17
+ import { promises as fs } from "node:fs";
18
+ import { exec } from "node:child_process";
19
+ import { promisify } from "node:util";
20
+ import { resolve, relative, join, isAbsolute } from "node:path";
21
+ import { queryCodeGraph } from "./code-graph.js";
22
+ const execAsync = promisify(exec);
23
+ const MAX_OUTPUT = 30_000; // chars; keep tool output from blowing the context window
24
+ const IGNORE_DIRS = new Set([
25
+ "node_modules",
26
+ ".git",
27
+ ".next",
28
+ "dist",
29
+ "build",
30
+ "coverage",
31
+ ".turbo",
32
+ ".vercel",
33
+ ]);
34
+ function clip(text) {
35
+ if (text.length <= MAX_OUTPUT)
36
+ return text;
37
+ return (text.slice(0, MAX_OUTPUT) +
38
+ `\n… [truncated ${text.length - MAX_OUTPUT} chars]`);
39
+ }
40
+ /** Resolve a user-supplied path against cwd; absolute paths are honored as-is. */
41
+ function resolvePath(cwd, p) {
42
+ return isAbsolute(p) ? p : resolve(cwd, p);
43
+ }
44
+ function globToRegExp(pattern) {
45
+ // Minimal glob → regex: ** matches across dirs, * within a segment, ? one char.
46
+ let re = "";
47
+ for (let i = 0; i < pattern.length; i++) {
48
+ const c = pattern[i];
49
+ if (c === "*") {
50
+ if (pattern[i + 1] === "*") {
51
+ re += ".*";
52
+ i++;
53
+ if (pattern[i + 1] === "/")
54
+ i++; // consume the slash after **
55
+ }
56
+ else {
57
+ re += "[^/]*";
58
+ }
59
+ }
60
+ else if (c === "?") {
61
+ re += "[^/]";
62
+ }
63
+ else if (".+^${}()|[]\\".includes(c)) {
64
+ re += "\\" + c;
65
+ }
66
+ else {
67
+ re += c;
68
+ }
69
+ }
70
+ return new RegExp("^" + re + "$");
71
+ }
72
+ async function* walk(dir, cwd) {
73
+ let entries;
74
+ try {
75
+ const dirents = await fs.readdir(dir, { withFileTypes: true });
76
+ entries = dirents.map((d) => ({ name: d.name, isDir: d.isDirectory() }));
77
+ }
78
+ catch {
79
+ return;
80
+ }
81
+ for (const entry of entries) {
82
+ if (entry.isDir && IGNORE_DIRS.has(entry.name))
83
+ continue;
84
+ const abs = join(dir, entry.name);
85
+ const rel = relative(cwd, abs);
86
+ if (entry.isDir) {
87
+ yield* walk(abs, cwd);
88
+ }
89
+ else {
90
+ yield { abs, rel };
91
+ }
92
+ }
93
+ }
94
+ export function buildTools(cwd, opts = {}) {
95
+ const tools = {
96
+ read_file: tool({
97
+ description: "Read a file from the working directory. Returns the file contents (optionally a line range).",
98
+ inputSchema: z.object({
99
+ path: z.string().describe("File path, relative to cwd or absolute."),
100
+ offset: z
101
+ .number()
102
+ .int()
103
+ .optional()
104
+ .describe("1-based start line (optional)."),
105
+ limit: z
106
+ .number()
107
+ .int()
108
+ .optional()
109
+ .describe("Max number of lines to return (optional)."),
110
+ }),
111
+ execute: async ({ path, offset, limit }) => {
112
+ try {
113
+ const text = await fs.readFile(resolvePath(cwd, path), "utf8");
114
+ if (offset == null && limit == null)
115
+ return clip(text);
116
+ const lines = text.split("\n");
117
+ const start = offset ? offset - 1 : 0;
118
+ const end = limit ? start + limit : lines.length;
119
+ return clip(lines.slice(start, end).join("\n"));
120
+ }
121
+ catch (err) {
122
+ return `Error reading ${path}: ${err instanceof Error ? err.message : String(err)}`;
123
+ }
124
+ },
125
+ }),
126
+ write_file: tool({
127
+ description: "Write (create or overwrite) a file with the given content. Creates parent directories as needed.",
128
+ inputSchema: z.object({
129
+ path: z.string(),
130
+ content: z.string(),
131
+ }),
132
+ execute: async ({ path, content }) => {
133
+ try {
134
+ const abs = resolvePath(cwd, path);
135
+ await fs.mkdir(resolve(abs, ".."), { recursive: true });
136
+ await fs.writeFile(abs, content, "utf8");
137
+ return `Wrote ${content.length} bytes to ${path}`;
138
+ }
139
+ catch (err) {
140
+ return `Error writing ${path}: ${err instanceof Error ? err.message : String(err)}`;
141
+ }
142
+ },
143
+ }),
144
+ edit_file: tool({
145
+ description: "Replace an exact substring in a file. old_string must appear exactly once. Use for surgical edits.",
146
+ inputSchema: z.object({
147
+ path: z.string(),
148
+ old_string: z.string().describe("Exact text to replace (must be unique)."),
149
+ new_string: z.string().describe("Replacement text."),
150
+ }),
151
+ execute: async ({ path, old_string, new_string }) => {
152
+ try {
153
+ const abs = resolvePath(cwd, path);
154
+ const text = await fs.readFile(abs, "utf8");
155
+ const count = text.split(old_string).length - 1;
156
+ if (count === 0)
157
+ return `Error: old_string not found in ${path}.`;
158
+ if (count > 1)
159
+ return `Error: old_string appears ${count} times in ${path}; make it unique.`;
160
+ await fs.writeFile(abs, text.replace(old_string, new_string), "utf8");
161
+ return `Edited ${path}`;
162
+ }
163
+ catch (err) {
164
+ return `Error editing ${path}: ${err instanceof Error ? err.message : String(err)}`;
165
+ }
166
+ },
167
+ }),
168
+ list_dir: tool({
169
+ description: "List the entries of a directory (non-recursive).",
170
+ inputSchema: z.object({
171
+ path: z.string().optional().describe("Directory (default: cwd)."),
172
+ }),
173
+ execute: async ({ path }) => {
174
+ try {
175
+ const abs = resolvePath(cwd, path ?? ".");
176
+ const dirents = await fs.readdir(abs, { withFileTypes: true });
177
+ const lines = dirents
178
+ .map((d) => (d.isDirectory() ? `${d.name}/` : d.name))
179
+ .sort();
180
+ return clip(lines.join("\n") || "(empty)");
181
+ }
182
+ catch (err) {
183
+ return `Error listing ${path ?? "."}: ${err instanceof Error ? err.message : String(err)}`;
184
+ }
185
+ },
186
+ }),
187
+ glob: tool({
188
+ description: "Find files matching a glob pattern (e.g. 'src/**/*.ts'). Skips node_modules/.git/dist.",
189
+ inputSchema: z.object({
190
+ pattern: z.string(),
191
+ }),
192
+ execute: async ({ pattern }) => {
193
+ const re = globToRegExp(pattern);
194
+ const matches = [];
195
+ for await (const { rel } of walk(cwd, cwd)) {
196
+ if (re.test(rel))
197
+ matches.push(rel);
198
+ if (matches.length >= 500)
199
+ break;
200
+ }
201
+ return clip(matches.sort().join("\n") || "(no matches)");
202
+ },
203
+ }),
204
+ grep: tool({
205
+ description: "Search file contents with a regular expression. Returns matching file:line:text. Skips node_modules/.git/dist.",
206
+ inputSchema: z.object({
207
+ pattern: z.string().describe("JavaScript regular expression."),
208
+ path: z
209
+ .string()
210
+ .optional()
211
+ .describe("Subdirectory to search (default: cwd)."),
212
+ glob: z
213
+ .string()
214
+ .optional()
215
+ .describe("Restrict to files matching this glob (e.g. '*.ts')."),
216
+ }),
217
+ execute: async ({ pattern, path, glob }) => {
218
+ let re;
219
+ try {
220
+ re = new RegExp(pattern);
221
+ }
222
+ catch (err) {
223
+ return `Invalid regex: ${err instanceof Error ? err.message : String(err)}`;
224
+ }
225
+ const fileRe = glob ? globToRegExp(glob.includes("/") ? glob : `**/${glob}`) : null;
226
+ const root = resolvePath(cwd, path ?? ".");
227
+ const hits = [];
228
+ for await (const { abs, rel } of walk(root, cwd)) {
229
+ if (fileRe && !fileRe.test(rel))
230
+ continue;
231
+ let text;
232
+ try {
233
+ text = await fs.readFile(abs, "utf8");
234
+ }
235
+ catch {
236
+ continue; // binary / unreadable
237
+ }
238
+ const lines = text.split("\n");
239
+ for (let i = 0; i < lines.length; i++) {
240
+ if (re.test(lines[i])) {
241
+ hits.push(`${rel}:${i + 1}:${lines[i].slice(0, 200)}`);
242
+ if (hits.length >= 200)
243
+ break;
244
+ }
245
+ }
246
+ if (hits.length >= 200)
247
+ break;
248
+ }
249
+ return clip(hits.join("\n") || "(no matches)");
250
+ },
251
+ }),
252
+ code_graph: tool({
253
+ description: "Query the repository's code graph — a precomputed index of symbols and " +
254
+ "import relationships — for STRUCTURAL answers, instead of guessing paths " +
255
+ "or grepping. Prefer this over `grep` for \"where is X defined\" and for " +
256
+ "impact analysis before a change. Operations: 'search' finds where a " +
257
+ "symbol (function/class/type/interface) is defined by name; 'file_symbols' " +
258
+ "lists the top-level symbols a file defines; 'dependents' lists the files " +
259
+ "that import a given file (what a change could break); 'imports' lists the " +
260
+ "local files a given file imports.",
261
+ inputSchema: z.object({
262
+ operation: z.enum(["search", "file_symbols", "dependents", "imports"]),
263
+ query: z
264
+ .string()
265
+ .describe("A symbol name for 'search'; a file path (relative to cwd, or a suffix " +
266
+ "like 'agent/loop.ts') for 'file_symbols' / 'dependents' / 'imports'."),
267
+ limit: z
268
+ .number()
269
+ .int()
270
+ .optional()
271
+ .describe("Max results to return (default 25)."),
272
+ }),
273
+ execute: async ({ operation, query, limit }) => {
274
+ try {
275
+ return clip(await queryCodeGraph(cwd, operation, query, limit));
276
+ }
277
+ catch (err) {
278
+ return `code_graph error: ${err instanceof Error ? err.message : String(err)}`;
279
+ }
280
+ },
281
+ }),
282
+ bash: tool({
283
+ description: "Run a shell command in the working directory. Use for builds, tests, git, package managers. Has a timeout.",
284
+ inputSchema: z.object({
285
+ command: z.string(),
286
+ timeout_ms: z
287
+ .number()
288
+ .int()
289
+ .optional()
290
+ .describe("Timeout in milliseconds (default 120000, max 600000)."),
291
+ }),
292
+ execute: async ({ command, timeout_ms }) => {
293
+ const timeout = Math.min(timeout_ms ?? 120_000, 600_000);
294
+ try {
295
+ const { stdout, stderr } = await execAsync(command, {
296
+ cwd,
297
+ timeout,
298
+ maxBuffer: 10 * 1024 * 1024,
299
+ shell: "/bin/bash",
300
+ });
301
+ const out = [stdout, stderr].filter(Boolean).join("\n").trim();
302
+ return clip(out || "(no output)");
303
+ }
304
+ catch (err) {
305
+ const e = err;
306
+ if (e.killed)
307
+ return `Command timed out after ${timeout}ms.`;
308
+ const out = [e.stdout, e.stderr, e.message].filter(Boolean).join("\n").trim();
309
+ return clip(`Command failed:\n${out}`);
310
+ }
311
+ },
312
+ }),
313
+ };
314
+ // Read-only mode: withhold every mutating tool so the model literally cannot
315
+ // change the filesystem or run commands.
316
+ if (opts.readOnly) {
317
+ delete tools["write_file"];
318
+ delete tools["edit_file"];
319
+ delete tools["bash"];
320
+ }
321
+ return tools;
322
+ }
323
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/agent/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TurnTrace } from "./trace.js";
2
+ /** Render one trace as a human-readable, plain-text report. */
3
+ export declare function formatTraceText(trace: TurnTrace): string;
4
+ /** Render a recent-turns list (newest first) as plain text. */
5
+ export declare function formatTraceList(traces: TurnTrace[]): string;
6
+ //# sourceMappingURL=trace-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-format.d.ts","sourceRoot":"","sources":["../../src/agent/trace-format.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA+DxD;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAU3D"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Plain-text rendering of a turn trace.
3
+ *
4
+ * The REPL renders a trace with Ink ({@link TraceView}); this module produces the
5
+ * same information as plain text for the non-interactive `oxagen replay` command,
6
+ * so the full chain of thought is inspectable in a pipe, a log, or CI. Kept pure
7
+ * (no Ink, no AI SDK) so it is trivially testable.
8
+ */
9
+ import { formatUsd } from "./model-router.js";
10
+ function bar(score) {
11
+ const filled = Math.round((Math.max(0, Math.min(100, score)) / 100) * 10);
12
+ return "█".repeat(filled) + "░".repeat(10 - filled);
13
+ }
14
+ function bullets(items, glyph = "-") {
15
+ return items.map((i) => ` ${glyph} ${i}`).join("\n");
16
+ }
17
+ /** Render one trace as a human-readable, plain-text report. */
18
+ export function formatTraceText(trace) {
19
+ const { evaluation: ev, enhancement: en } = trace;
20
+ const lines = [];
21
+ lines.push(`↻ replay ${trace.id} · ${Math.round(trace.durationMs / 100) / 10}s · ` +
22
+ `${formatUsd(trace.usage.costUsd)} · ${trace.finalComplete ? "complete" : "gaps remain"}`);
23
+ lines.push("", "1 · Original prompt", ` ${trace.originalPrompt}`);
24
+ lines.push("", `2 · Evaluation${ev.fallback ? " (heuristic)" : ` · ${ev.model.split("/").pop()}`}`, ` completeness ${bar(ev.completeness)} ${ev.completeness}/100`, ` complexity ${bar(ev.complexity)} ${ev.complexity}/100`);
25
+ if (ev.missing.length)
26
+ lines.push(" missing from prompt:", bullets(ev.missing, "?"));
27
+ if (ev.removed.length)
28
+ lines.push(" pruned as low-value:", bullets(ev.removed, "−"));
29
+ if (ev.reasoning)
30
+ lines.push(` ${ev.reasoning}`);
31
+ if (ev.refinedPrompt !== trace.originalPrompt) {
32
+ lines.push("", "3 · Refined prompt (noise removed)", ` ${ev.refinedPrompt}`);
33
+ }
34
+ lines.push("", `4 · Injected context · ${en.source}`);
35
+ lines.push(en.resolved.length
36
+ ? ` code refs: ${en.resolved.join(", ")}`
37
+ : " no code-graph references resolved");
38
+ lines.push(` recalled lessons: ${en.lessonCount}`);
39
+ lines.push("", "5 · Model selected", ` ${trace.selectedModel.split("/").pop()} (${trace.selectedTier}) — ${trace.selectionRationale}`);
40
+ lines.push("", "6 · Completeness review (advisor)");
41
+ if (trace.judgeRounds.length === 0) {
42
+ lines.push(" not judged (bare mode)");
43
+ }
44
+ else {
45
+ for (let i = 0; i < trace.judgeRounds.length; i++) {
46
+ const v = trace.judgeRounds[i];
47
+ if (!v)
48
+ continue;
49
+ lines.push(` round ${i + 1}: ${v.complete ? "COMPLETE" : "INCOMPLETE"} · ` +
50
+ `${v.confidence}% confident · advisor ${v.model.split("/").pop()}` +
51
+ (v.fallback ? " (heuristic)" : ""));
52
+ if (v.findings.length)
53
+ lines.push(bullets(v.findings, "✗"));
54
+ if (v.reasoning)
55
+ lines.push(` ${v.reasoning}`);
56
+ }
57
+ }
58
+ lines.push("", `${trace.steps} steps · ${trace.filesTouched.length} file(s) touched` +
59
+ (trace.filesTouched.length ? `: ${trace.filesTouched.slice(0, 5).join(", ")}` : ""));
60
+ return lines.join("\n");
61
+ }
62
+ /** Render a recent-turns list (newest first) as plain text. */
63
+ export function formatTraceList(traces) {
64
+ if (traces.length === 0)
65
+ return "No turns recorded yet.";
66
+ return traces
67
+ .map((t, i) => {
68
+ const mark = t.finalComplete ? "✓" : "✗";
69
+ const prompt = t.originalPrompt.length > 56 ? t.originalPrompt.slice(0, 56) + "…" : t.originalPrompt;
70
+ return `${i + 1}. ${mark} ${prompt} [${t.selectedModel.split("/").pop()} · ${formatUsd(t.usage.costUsd)}]`;
71
+ })
72
+ .join("\n");
73
+ }
74
+ //# sourceMappingURL=trace-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-format.js","sourceRoot":"","sources":["../../src/agent/trace-format.ts"],"names":[],"mappings":"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"}