@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,320 @@
1
+ import { runAgent } from "./loop.js";
2
+ import { ensureGatewayKey, MissingGatewayKeyError } from "./env.js";
3
+ import { evaluatePrompt } from "./evaluator.js";
4
+ import { judgeCompleteness, buildRevisionPrompt } from "./judge.js";
5
+ import { enhancePrompt } from "./prompt-enhancer.js";
6
+ import { classifyTier, modelForTier, tierForSlug, tierLabel, accumulateUsage, } from "./model-router.js";
7
+ import { emptyUsage } from "./fleet/types.js";
8
+ export { MissingGatewayKeyError };
9
+ const TIER_RANK = { fast: 0, balanced: 1, precise: 2 };
10
+ function maxTier(a, b) {
11
+ return TIER_RANK[a] >= TIER_RANK[b] ? a : b;
12
+ }
13
+ /** Cap stored free-text so a single trace file can't grow without bound. */
14
+ function truncate(s, max) {
15
+ return s.length > max ? s.slice(0, max) + "…" : s;
16
+ }
17
+ let traceCounter = 0;
18
+ function newTraceId() {
19
+ traceCounter = (traceCounter + 1) % 1_000_000;
20
+ return `turn_${Date.now().toString(36)}_${traceCounter.toString(36)}`;
21
+ }
22
+ /** Pull the file path from a write/edit tool call, or a command from bash. */
23
+ function collectActivity(name, input, files, commands) {
24
+ const obj = (input ?? {});
25
+ if ((name === "write_file" || name === "edit_file") && typeof obj.path === "string") {
26
+ files.add(obj.path);
27
+ }
28
+ if (name === "bash") {
29
+ const cmd = obj.command ?? obj.cmd;
30
+ if (typeof cmd === "string")
31
+ commands.push(truncate(cmd, 120));
32
+ }
33
+ }
34
+ /**
35
+ * Run one prompt through the full pipeline. Throws {@link MissingGatewayKeyError}
36
+ * if no gateway credential can be resolved; otherwise always produces a trace.
37
+ */
38
+ export async function runTurn(opts) {
39
+ const cwd = opts.cwd ?? process.cwd();
40
+ if (!ensureGatewayKey(cwd))
41
+ throw new MissingGatewayKeyError();
42
+ const startedAt = Date.now();
43
+ const filesTouched = new Set();
44
+ const commandsRun = [];
45
+ const onToolCall = (name, input) => {
46
+ collectActivity(name, input, filesTouched, commandsRun);
47
+ opts.onToolCall?.(name, input);
48
+ };
49
+ // ── Bare mode: skip the pipeline, run the agent directly. ──
50
+ if (opts.bare) {
51
+ return runBare(opts, cwd, startedAt, filesTouched, commandsRun, onToolCall);
52
+ }
53
+ let usage = emptyUsage();
54
+ // ── 1. EVALUATE ──
55
+ const evaluation = await evaluatePrompt({ prompt: opts.prompt, signal: opts.signal });
56
+ usage = mergeUsage(usage, evaluation.usage);
57
+ opts.onStage?.({
58
+ kind: "evaluate",
59
+ label: `evaluated · completeness ${evaluation.completeness}/100 · complexity ${evaluation.complexity}/100`,
60
+ detail: evaluation.fallback ? "heuristic" : evaluation.model.split("/").pop(),
61
+ });
62
+ // ── 2. ENHANCE ──
63
+ const enhanced = await enhancePrompt({
64
+ prompt: evaluation.refinedPrompt,
65
+ cwd,
66
+ memory: opts.fleetMemory ?? null,
67
+ extraQueries: evaluation.contextQueries,
68
+ });
69
+ const enhancement = {
70
+ prompt: enhanced.prompt,
71
+ context: enhanced.context,
72
+ resolved: enhanced.resolved,
73
+ lessonCount: enhanced.lessons.length,
74
+ source: enhancementSource(enhanced.resolved.length, enhanced.lessons.length),
75
+ };
76
+ opts.onStage?.({
77
+ kind: "enhance",
78
+ label: enhanced.resolved.length || enhanced.lessons.length
79
+ ? `enhanced · ${enhanced.resolved.length} code refs · ${enhanced.lessons.length} lessons`
80
+ : "enhanced · no extra context found",
81
+ });
82
+ // ── 3. ROUTE ──
83
+ const routed = selectModel(opts.model, evaluation);
84
+ opts.onStage?.({
85
+ kind: "route",
86
+ label: `model · ${tierLabel(routed.tier)} (${routed.model.split("/").pop()})`,
87
+ detail: routed.rationale,
88
+ });
89
+ // ── 4. EXECUTE (+ 5. JUDGE / 6. REVISE loop) ──
90
+ const maxRounds = Math.max(0, opts.maxReviseRounds ?? 1);
91
+ const judgeRounds = [];
92
+ let history = opts.history ?? [];
93
+ let prompt = enhanced.prompt;
94
+ let lastText = "";
95
+ let totalSteps = 0;
96
+ for (let round = 0;; round++) {
97
+ if (round > 0) {
98
+ opts.onStage?.({ kind: "revise", label: `revising · round ${round} (incomplete work)` });
99
+ }
100
+ opts.onStage?.({
101
+ kind: "execute",
102
+ label: round === 0 ? "executing" : `executing · revision ${round}`,
103
+ });
104
+ const result = await runAgent({
105
+ prompt,
106
+ history,
107
+ cwd,
108
+ model: routed.model,
109
+ maxSteps: opts.maxSteps,
110
+ projectContext: opts.projectContext,
111
+ readOnly: opts.readOnly,
112
+ memory: opts.memory,
113
+ signal: opts.signal,
114
+ onText: opts.onText,
115
+ onToolCall,
116
+ });
117
+ usage = accumulateUsage(usage, routed.model, result.usage);
118
+ history = result.messages;
119
+ lastText = result.text;
120
+ totalSteps += result.steps;
121
+ // ── 5. JUDGE ──
122
+ const verdict = await judgeCompleteness({
123
+ request: opts.prompt,
124
+ response: result.text,
125
+ filesTouched: [...filesTouched],
126
+ commandsRun,
127
+ steps: result.steps,
128
+ executorModel: routed.model,
129
+ signal: opts.signal,
130
+ });
131
+ usage = mergeUsage(usage, verdict.usage);
132
+ judgeRounds.push(verdict);
133
+ opts.onStage?.({
134
+ kind: "judge",
135
+ label: verdict.complete
136
+ ? `judged complete · ${verdict.confidence}% confident`
137
+ : `judged INCOMPLETE · ${verdict.findings.length} gap(s)`,
138
+ detail: `advisor: ${verdict.model.split("/").pop()}${verdict.fallback ? " (heuristic)" : ""}`,
139
+ });
140
+ const canRevise = !verdict.complete &&
141
+ round < maxRounds &&
142
+ !opts.readOnly &&
143
+ !opts.signal?.aborted;
144
+ if (!canRevise)
145
+ break;
146
+ prompt = buildRevisionPrompt(verdict);
147
+ }
148
+ const finalComplete = judgeRounds[judgeRounds.length - 1]?.complete ?? true;
149
+ opts.onStage?.({
150
+ kind: "complete",
151
+ label: finalComplete ? "turn complete" : "turn finished (gaps remain)",
152
+ });
153
+ const trace = assembleTrace({
154
+ cwd,
155
+ originalPrompt: opts.prompt,
156
+ evaluation,
157
+ enhancement,
158
+ routed,
159
+ response: lastText,
160
+ filesTouched: [...filesTouched],
161
+ commandsRun,
162
+ judgeRounds,
163
+ finalComplete,
164
+ steps: totalSteps,
165
+ usage,
166
+ startedAt,
167
+ });
168
+ recordLesson(opts.fleetMemory, trace);
169
+ return {
170
+ text: lastText,
171
+ steps: totalSteps,
172
+ messages: history,
173
+ usage: { inputTokens: usage.inputTokens, outputTokens: usage.outputTokens },
174
+ trace,
175
+ };
176
+ }
177
+ // ── helpers ──────────────────────────────────────────────────────────────────
178
+ function mergeUsage(a, b) {
179
+ return {
180
+ inputTokens: a.inputTokens + b.inputTokens,
181
+ outputTokens: a.outputTokens + b.outputTokens,
182
+ costUsd: a.costUsd + b.costUsd,
183
+ };
184
+ }
185
+ function enhancementSource(resolved, lessons) {
186
+ if (resolved && lessons)
187
+ return "code-graph+memory";
188
+ if (resolved)
189
+ return "code-graph";
190
+ if (lessons)
191
+ return "memory";
192
+ return "none";
193
+ }
194
+ /** Pick the executor model: a manual pin wins; else evaluator ⟂ router (never under-spend). */
195
+ function selectModel(override, evaluation) {
196
+ if (override) {
197
+ return { model: override, tier: tierForSlug(override), rationale: "pinned model" };
198
+ }
199
+ const routed = classifyTier({ text: evaluation.refinedPrompt });
200
+ const tier = maxTier(evaluation.recommendedTier, routed.tier);
201
+ // The deterministic router only ever escalates above the evaluator on high-stakes
202
+ // signals; when it does, its rationale is the honest reason we spent more.
203
+ const routerEscalated = TIER_RANK[routed.tier] > TIER_RANK[evaluation.recommendedTier];
204
+ const rationale = routerEscalated
205
+ ? `router escalated — ${routed.rationale}`
206
+ : `evaluator recommended (complexity ${evaluation.complexity}/100)`;
207
+ return { model: modelForTier(tier), tier, rationale };
208
+ }
209
+ function assembleTrace(a) {
210
+ return {
211
+ id: newTraceId(),
212
+ createdAt: a.startedAt,
213
+ cwd: a.cwd,
214
+ originalPrompt: a.originalPrompt,
215
+ evaluation: { ...a.evaluation, refinedPrompt: truncate(a.evaluation.refinedPrompt, 4000) },
216
+ enhancement: {
217
+ ...a.enhancement,
218
+ prompt: truncate(a.enhancement.prompt, 8000),
219
+ context: truncate(a.enhancement.context, 8000),
220
+ },
221
+ selectedModel: a.routed.model,
222
+ selectedTier: a.routed.tier,
223
+ selectionRationale: a.routed.rationale,
224
+ response: truncate(a.response, 4000),
225
+ filesTouched: a.filesTouched,
226
+ commandsRun: a.commandsRun,
227
+ judgeRounds: a.judgeRounds.map((v) => ({ ...v, reasoning: truncate(v.reasoning, 2000) })),
228
+ finalComplete: a.finalComplete,
229
+ steps: a.steps,
230
+ usage: a.usage,
231
+ durationMs: Date.now() - a.startedAt,
232
+ };
233
+ }
234
+ /**
235
+ * Record a weighted lesson when a turn revealed something worth remembering:
236
+ * the judge had to send the agent back (a gotcha) or it touched files (a routine
237
+ * change). Best-effort and silent — memory must never break a turn.
238
+ */
239
+ function recordLesson(memory, trace) {
240
+ if (!memory)
241
+ return;
242
+ const needsRevision = trace.judgeRounds.length > 1;
243
+ if (!needsRevision && trace.filesTouched.length === 0)
244
+ return;
245
+ const firstVerdict = trace.judgeRounds[0];
246
+ if (needsRevision && firstVerdict && firstVerdict.findings.length > 0) {
247
+ memory.record({
248
+ kind: "gotcha",
249
+ weight: "high",
250
+ lesson: `Work for "${truncate(trace.originalPrompt, 80)}" was first judged incomplete: ` +
251
+ truncate(firstVerdict.findings.join("; "), 200),
252
+ files: trace.filesTouched.slice(0, 5),
253
+ outcome: trace.finalComplete ? "success" : "failure",
254
+ });
255
+ }
256
+ else if (trace.filesTouched.length > 0) {
257
+ memory.record({
258
+ kind: "routine-change",
259
+ weight: "low",
260
+ lesson: `Changed ${trace.filesTouched.slice(0, 5).join(", ")} for "${truncate(trace.originalPrompt, 80)}".`,
261
+ files: trace.filesTouched.slice(0, 5),
262
+ outcome: trace.finalComplete ? "success" : "failure",
263
+ });
264
+ }
265
+ }
266
+ /** Bare execution path: no eval/enhance/judge, but still traced for `/replay`. */
267
+ async function runBare(opts, cwd, startedAt, filesTouched, commandsRun, onToolCall) {
268
+ const model = opts.model ?? modelForTier("balanced");
269
+ opts.onStage?.({ kind: "execute", label: "executing (pipeline off)" });
270
+ const result = await runAgent({
271
+ prompt: opts.prompt,
272
+ history: opts.history,
273
+ cwd,
274
+ model: opts.model,
275
+ maxSteps: opts.maxSteps,
276
+ projectContext: opts.projectContext,
277
+ readOnly: opts.readOnly,
278
+ memory: opts.memory,
279
+ signal: opts.signal,
280
+ onText: opts.onText,
281
+ onToolCall,
282
+ });
283
+ const usage = accumulateUsage(emptyUsage(), model, result.usage);
284
+ const evaluation = {
285
+ completeness: 0,
286
+ complexity: 0,
287
+ recommendedTier: tierForSlug(model),
288
+ missing: [],
289
+ contextQueries: [],
290
+ refinedPrompt: opts.prompt,
291
+ removed: [],
292
+ reasoning: "Pipeline disabled (bare mode).",
293
+ fallback: true,
294
+ model,
295
+ usage: emptyUsage(),
296
+ };
297
+ const trace = assembleTrace({
298
+ cwd,
299
+ originalPrompt: opts.prompt,
300
+ evaluation,
301
+ enhancement: { prompt: opts.prompt, context: "", resolved: [], lessonCount: 0, source: "none" },
302
+ routed: { model, tier: tierForSlug(model), rationale: "bare mode (no routing)" },
303
+ response: result.text,
304
+ filesTouched: [...filesTouched],
305
+ commandsRun,
306
+ judgeRounds: [],
307
+ finalComplete: true,
308
+ steps: result.steps,
309
+ usage,
310
+ startedAt,
311
+ });
312
+ return {
313
+ text: result.text,
314
+ steps: result.steps,
315
+ messages: result.messages,
316
+ usage: { inputTokens: result.usage.inputTokens, outputTokens: result.usage.outputTokens },
317
+ trace,
318
+ };
319
+ }
320
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/agent/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Plan } from "./fleet/types.js";
2
+ import type { FleetMemory } from "./fleet/memory.js";
3
+ export interface PlanOptions {
4
+ goal: string;
5
+ cwd: string;
6
+ /** Override the planning model slug (otherwise a balanced-tier model). */
7
+ model?: string;
8
+ memory?: FleetMemory | null;
9
+ signal?: AbortSignal;
10
+ }
11
+ /**
12
+ * Produce an executable {@link Plan} from a goal. Throws
13
+ * {@link MissingGatewayKeyError} if no gateway key is configured.
14
+ */
15
+ export declare function planTasks(opts: PlanOptions): Promise<Plan>;
16
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/agent/planner.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA8B,KAAK,IAAI,EAAa,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyCrD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAuBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhE"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Task planner — turn a goal into an executable plan.
3
+ *
4
+ * Decomposes a high-level goal ("add rate limiting to the API and document it")
5
+ * into a small set of concrete, dependency-ordered tasks the fleet can run in
6
+ * parallel. Uses one structured-output model call; the goal is prompt-enhanced
7
+ * first so the planner sees the actual files/symbols involved and produces tasks
8
+ * that name real paths instead of guesses.
9
+ *
10
+ * Each task's tier is reconciled with the cost router: the model proposes a tier,
11
+ * but a task the router flags as high-stakes (auth/billing/security/migration) is
12
+ * always escalated, never under-spent.
13
+ */
14
+ import { generateObject } from "ai";
15
+ import { z } from "zod";
16
+ import { enhancePrompt } from "./prompt-enhancer.js";
17
+ import { classifyTier, modelForTier } from "./model-router.js";
18
+ import { ensureGatewayKey, MissingGatewayKeyError } from "./env.js";
19
+ import { emptyUsage } from "./fleet/types.js";
20
+ const TIER_RANK = { fast: 0, balanced: 1, precise: 2 };
21
+ /** The more capable of two tiers (never under-spend on a risky task). */
22
+ function maxTier(a, b) {
23
+ return TIER_RANK[a] >= TIER_RANK[b] ? a : b;
24
+ }
25
+ const planSchema = z.object({
26
+ tasks: z
27
+ .array(z.object({
28
+ id: z
29
+ .string()
30
+ .describe("Short kebab-case id, unique within the plan (e.g. 'add-route')."),
31
+ title: z.string().describe("Imperative one-line title."),
32
+ description: z
33
+ .string()
34
+ .describe("Self-contained instructions for an agent that has the repo but not this plan: " +
35
+ "what to change, in which files, and how to verify."),
36
+ dependsOn: z
37
+ .array(z.string())
38
+ .describe("ids of tasks that must finish first (empty if independent)."),
39
+ files: z
40
+ .array(z.string())
41
+ .describe("Relative paths this task will create or edit, as best you can predict."),
42
+ tier: z
43
+ .enum(["fast", "balanced", "precise"])
44
+ .describe("Model tier: 'fast' for mechanical/single-file, 'balanced' for normal feature work, " +
45
+ "'precise' for auth/billing/security/migrations/architecture."),
46
+ }))
47
+ .min(1)
48
+ .max(20),
49
+ });
50
+ let planCounter = 0;
51
+ function newPlanId() {
52
+ planCounter = (planCounter + 1) % 1_000_000;
53
+ return `plan_${Date.now().toString(36)}_${planCounter.toString(36)}`;
54
+ }
55
+ const PLANNER_SYSTEM = [
56
+ "You are the planning stage of an agentic coding system. Decompose the user's goal",
57
+ "into the SMALLEST set of concrete, independently-runnable tasks that fully achieve it.",
58
+ "",
59
+ "Rules:",
60
+ "- Prefer few, substantial tasks over many trivial ones. A one-file change is one task.",
61
+ "- Make tasks parallel where possible; only add a dependency when one task's output is",
62
+ " genuinely required by another (e.g. a contract must exist before a route uses it).",
63
+ "- Predict the files each task touches; tasks that edit the same file should depend in",
64
+ " sequence rather than run concurrently.",
65
+ "- Assign the cheapest sufficient tier per task; reserve 'precise' for auth, billing,",
66
+ " security, migrations, schema, or architectural changes.",
67
+ "- Every task description must stand alone — the executing agent sees only its own task.",
68
+ ].join("\n");
69
+ /**
70
+ * Produce an executable {@link Plan} from a goal. Throws
71
+ * {@link MissingGatewayKeyError} if no gateway key is configured.
72
+ */
73
+ export async function planTasks(opts) {
74
+ const cwd = opts.cwd;
75
+ if (!ensureGatewayKey(cwd))
76
+ throw new MissingGatewayKeyError();
77
+ // Enhance the goal so the planner sees the real code involved.
78
+ const enhanced = await enhancePrompt({ prompt: opts.goal, cwd, memory: opts.memory });
79
+ const model = opts.model ?? modelForTier("balanced");
80
+ const { object } = await generateObject({
81
+ model,
82
+ schema: planSchema,
83
+ system: PLANNER_SYSTEM,
84
+ prompt: `Goal:\n${enhanced.prompt}`,
85
+ abortSignal: opts.signal,
86
+ });
87
+ const now = Date.now();
88
+ const seen = new Set();
89
+ const tasks = object.tasks.map((t, i) => {
90
+ // Guarantee unique, non-empty ids even if the model repeats or omits them.
91
+ let id = (t.id || `task-${i + 1}`).trim();
92
+ if (seen.has(id))
93
+ id = `${id}-${i + 1}`;
94
+ seen.add(id);
95
+ // Reconcile the proposed tier with the router's read of the description.
96
+ const routed = classifyTier({
97
+ text: `${t.title} ${t.description}`,
98
+ fileCount: t.files.length,
99
+ }).tier;
100
+ const tier = maxTier(t.tier, routed);
101
+ return {
102
+ id,
103
+ title: t.title,
104
+ description: t.description,
105
+ status: "queued",
106
+ dependsOn: t.dependsOn ?? [],
107
+ files: t.files ?? [],
108
+ tier,
109
+ model: modelForTier(tier),
110
+ createdAt: now,
111
+ usage: emptyUsage(),
112
+ };
113
+ });
114
+ // Drop dependencies that point at ids no task actually has (model hallucination).
115
+ const ids = new Set(tasks.map((t) => t.id));
116
+ for (const t of tasks)
117
+ t.dependsOn = t.dependsOn.filter((d) => ids.has(d) && d !== t.id);
118
+ return {
119
+ id: newPlanId(),
120
+ goal: opts.goal,
121
+ createdAt: now,
122
+ tasks,
123
+ status: "draft",
124
+ };
125
+ }
126
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/agent/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,UAAU,EAAwC,MAAM,kBAAkB,CAAC;AAGpF,MAAM,SAAS,GAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAElF,yEAAyE;AACzE,SAAS,OAAO,CAAC,CAAY,EAAE,CAAY;IACzC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC;aACF,MAAM,EAAE;aACR,QAAQ,CAAC,iEAAiE,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACxD,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,gFAAgF;YAC9E,oDAAoD,CACvD;QACH,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,wEAAwE,CAAC;QACrF,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;aACrC,QAAQ,CACP,qFAAqF;YACnF,8DAA8D,CACjE;KACJ,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;CACX,CAAC,CAAC;AAWH,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,SAAS,SAAS;IAChB,WAAW,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,cAAc,GAAG;IACrB,mFAAmF;IACnF,wFAAwF;IACxF,EAAE;IACF,QAAQ;IACR,wFAAwF;IACxF,uFAAuF;IACvF,sFAAsF;IACtF,uFAAuF;IACvF,0CAA0C;IAC1C,sFAAsF;IACtF,2DAA2D;IAC3D,yFAAyF;CAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAiB;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,sBAAsB,EAAE,CAAC;IAE/D,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC;QACtC,KAAK;QACL,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,UAAU,QAAQ,CAAC,MAAM,EAAE;QACnC,WAAW,EAAE,IAAI,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9C,2EAA2E;QAC3E,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,yEAAyE;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;SAC1B,CAAC,CAAC,IAAI,CAAC;QACR,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAiB,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO;YACL,EAAE;YACF,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI;YACJ,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;YACzB,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,UAAU,EAAE;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,kFAAkF;IAClF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzF,OAAO;QACL,EAAE,EAAE,SAAS,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,GAAG;QACd,KAAK;QACL,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface ProjectContext {
2
+ /** Concatenated rule text, ready to drop into the system prompt. */
3
+ text: string;
4
+ /** Source files that contributed, relative to cwd. */
5
+ sources: string[];
6
+ }
7
+ /**
8
+ * Collect project rules by walking up from `cwd`. Nearest directory wins on
9
+ * ordering (its rules appear first), repo-root rules appear last. Total size is
10
+ * capped; once the cap is hit, remaining files are skipped.
11
+ */
12
+ export declare function loadProjectContext(cwd: string): ProjectContext;
13
+ //# sourceMappingURL=project-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/agent/project-context.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAmC9D"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Project rules / instructions loading.
3
+ *
4
+ * Parity with Claude Code's `CLAUDE.md`: on session start we collect the
5
+ * project's standing instructions from well-known files, walking up from the
6
+ * working directory so nested rules and repo-root rules both apply. The result
7
+ * is injected once into the (stable) system prompt — it does not change per
8
+ * turn, which keeps the provider prompt cache warm.
9
+ */
10
+ import { readFileSync, existsSync } from "node:fs";
11
+ import { dirname, join, parse as parsePath, relative } from "node:path";
12
+ /** Files we treat as project instructions, in priority order within a directory. */
13
+ const RULE_FILES = [
14
+ "CLAUDE.md",
15
+ "AGENTS.md",
16
+ ".oxagen/rules.md",
17
+ ".cursorrules",
18
+ ".github/copilot-instructions.md",
19
+ ];
20
+ const MAX_TOTAL = 16_000; // chars; keep rules from dominating the context window
21
+ const MAX_DEPTH = 8; // directories to walk up
22
+ /**
23
+ * Collect project rules by walking up from `cwd`. Nearest directory wins on
24
+ * ordering (its rules appear first), repo-root rules appear last. Total size is
25
+ * capped; once the cap is hit, remaining files are skipped.
26
+ */
27
+ export function loadProjectContext(cwd) {
28
+ const chunks = [];
29
+ const sources = [];
30
+ let total = 0;
31
+ let dir = cwd;
32
+ const { root } = parsePath(cwd);
33
+ for (let depth = 0; depth < MAX_DEPTH; depth++) {
34
+ for (const rel of RULE_FILES) {
35
+ const full = join(dir, rel);
36
+ if (!existsSync(full))
37
+ continue;
38
+ let text;
39
+ try {
40
+ text = readFileSync(full, "utf8").trim();
41
+ }
42
+ catch {
43
+ continue;
44
+ }
45
+ if (!text)
46
+ continue;
47
+ const remaining = MAX_TOTAL - total;
48
+ if (remaining <= 0)
49
+ break;
50
+ const clipped = text.length > remaining
51
+ ? text.slice(0, remaining) + "\n… [rules truncated]"
52
+ : text;
53
+ const source = relative(cwd, full) || rel;
54
+ chunks.push(`### ${source}\n${clipped}`);
55
+ sources.push(source);
56
+ total += clipped.length;
57
+ }
58
+ if (total >= MAX_TOTAL)
59
+ break;
60
+ if (dir === root)
61
+ break;
62
+ dir = dirname(dir);
63
+ }
64
+ return { text: chunks.join("\n\n"), sources };
65
+ }
66
+ //# sourceMappingURL=project-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/agent/project-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExE,oFAAoF;AACpF,MAAM,UAAU,GAAG;IACjB,WAAW;IACX,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,iCAAiC;CAClC,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,uDAAuD;AACjF,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,yBAAyB;AAS9C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAChC,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;YACpC,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAM;YAC1B,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,GAAG,SAAS;gBACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,uBAAuB;gBACpD,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,IAAI,SAAS;YAAE,MAAM;QAC9B,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QACxB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type FleetMemory } from "./fleet/memory.js";
2
+ import type { MemoryRecord } from "./fleet/types.js";
3
+ export interface EnhanceOptions {
4
+ prompt: string;
5
+ cwd: string;
6
+ /** Fleet memory to recall past lessons from (optional). */
7
+ memory?: FleetMemory | null;
8
+ /** Max distinct symbols/paths to look up (default 6). */
9
+ maxSymbols?: number;
10
+ /**
11
+ * Extra retrieval hints (e.g. the evaluator's `contextQueries`): symbol names,
12
+ * file paths, or topics. They are mined for candidates and looked up in the code
13
+ * graph, but never appended to the visible prompt text — only what they resolve
14
+ * to is injected.
15
+ */
16
+ extraQueries?: string[];
17
+ }
18
+ export interface EnhanceResult {
19
+ /** The original prompt with the retrieved context appended. */
20
+ prompt: string;
21
+ /** The retrieved context block alone (empty if nothing was found). */
22
+ context: string;
23
+ /** Symbol/path tokens that resolved to something in the code graph. */
24
+ resolved: string[];
25
+ /** Lessons recalled from fleet memory. */
26
+ lessons: MemoryRecord[];
27
+ }
28
+ /**
29
+ * Pull likely code references out of a natural-language prompt: backticked spans,
30
+ * file paths, and identifier-shaped tokens (CamelCase / snake_case / dotted).
31
+ */
32
+ export declare function extractCandidates(prompt: string): {
33
+ symbols: string[];
34
+ paths: string[];
35
+ };
36
+ export declare function enhancePrompt(opts: EnhanceOptions): Promise<EnhanceResult>;
37
+ //# sourceMappingURL=prompt-enhancer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-enhancer.d.ts","sourceRoot":"","sources":["../../src/agent/prompt-enhancer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAKD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBxF;AAOD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoEhF"}