agent-nuvira 1.14.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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +891 -0
  3. package/dist/agent-sdk/src/agent.d.ts +118 -0
  4. package/dist/agent-sdk/src/agent.d.ts.map +1 -0
  5. package/dist/agent-sdk/src/agent.js +88 -0
  6. package/dist/agent-sdk/src/agent.js.map +1 -0
  7. package/dist/agent-sdk/src/index.d.ts +33 -0
  8. package/dist/agent-sdk/src/index.d.ts.map +1 -0
  9. package/dist/agent-sdk/src/index.js +32 -0
  10. package/dist/agent-sdk/src/index.js.map +1 -0
  11. package/dist/agent-sdk/src/register.d.ts +70 -0
  12. package/dist/agent-sdk/src/register.d.ts.map +1 -0
  13. package/dist/agent-sdk/src/register.js +181 -0
  14. package/dist/agent-sdk/src/register.js.map +1 -0
  15. package/dist/agent-sdk/src/scaffold.d.ts +50 -0
  16. package/dist/agent-sdk/src/scaffold.d.ts.map +1 -0
  17. package/dist/agent-sdk/src/scaffold.js +291 -0
  18. package/dist/agent-sdk/src/scaffold.js.map +1 -0
  19. package/dist/agent-sdk/src/testing.d.ts +187 -0
  20. package/dist/agent-sdk/src/testing.d.ts.map +1 -0
  21. package/dist/agent-sdk/src/testing.js +243 -0
  22. package/dist/agent-sdk/src/testing.js.map +1 -0
  23. package/dist/agent-sdk/src/types.d.ts +202 -0
  24. package/dist/agent-sdk/src/types.d.ts.map +1 -0
  25. package/dist/agent-sdk/src/types.js +11 -0
  26. package/dist/agent-sdk/src/types.js.map +1 -0
  27. package/dist/agents/agent.d.ts +132 -0
  28. package/dist/agents/agent.d.ts.map +1 -0
  29. package/dist/agents/agent.js +19 -0
  30. package/dist/agents/agent.js.map +1 -0
  31. package/dist/agents/agents/context-gatherer.d.ts +42 -0
  32. package/dist/agents/agents/context-gatherer.d.ts.map +1 -0
  33. package/dist/agents/agents/context-gatherer.js +366 -0
  34. package/dist/agents/agents/context-gatherer.js.map +1 -0
  35. package/dist/agents/agents/debugger.d.ts +58 -0
  36. package/dist/agents/agents/debugger.d.ts.map +1 -0
  37. package/dist/agents/agents/debugger.js +257 -0
  38. package/dist/agents/agents/debugger.js.map +1 -0
  39. package/dist/agents/agents/git-agent.d.ts +34 -0
  40. package/dist/agents/agents/git-agent.d.ts.map +1 -0
  41. package/dist/agents/agents/git-agent.js +200 -0
  42. package/dist/agents/agents/git-agent.js.map +1 -0
  43. package/dist/agents/agents/github-release-agent.d.ts +65 -0
  44. package/dist/agents/agents/github-release-agent.d.ts.map +1 -0
  45. package/dist/agents/agents/github-release-agent.js +439 -0
  46. package/dist/agents/agents/github-release-agent.js.map +1 -0
  47. package/dist/agents/agents/package-agent.d.ts +33 -0
  48. package/dist/agents/agents/package-agent.d.ts.map +1 -0
  49. package/dist/agents/agents/package-agent.js +233 -0
  50. package/dist/agents/agents/package-agent.js.map +1 -0
  51. package/dist/agents/agents/planner.d.ts +26 -0
  52. package/dist/agents/agents/planner.d.ts.map +1 -0
  53. package/dist/agents/agents/planner.js +222 -0
  54. package/dist/agents/agents/planner.js.map +1 -0
  55. package/dist/agents/agents/reviewer.d.ts +34 -0
  56. package/dist/agents/agents/reviewer.d.ts.map +1 -0
  57. package/dist/agents/agents/reviewer.js +159 -0
  58. package/dist/agents/agents/reviewer.js.map +1 -0
  59. package/dist/agents/agents/runner.d.ts +73 -0
  60. package/dist/agents/agents/runner.d.ts.map +1 -0
  61. package/dist/agents/agents/runner.js +299 -0
  62. package/dist/agents/agents/runner.js.map +1 -0
  63. package/dist/agents/agents/security-agent.d.ts +33 -0
  64. package/dist/agents/agents/security-agent.d.ts.map +1 -0
  65. package/dist/agents/agents/security-agent.js +184 -0
  66. package/dist/agents/agents/security-agent.js.map +1 -0
  67. package/dist/agents/agents/tester.d.ts +96 -0
  68. package/dist/agents/agents/tester.d.ts.map +1 -0
  69. package/dist/agents/agents/tester.js +410 -0
  70. package/dist/agents/agents/tester.js.map +1 -0
  71. package/dist/agents/agents/writer.d.ts +51 -0
  72. package/dist/agents/agents/writer.d.ts.map +1 -0
  73. package/dist/agents/agents/writer.js +384 -0
  74. package/dist/agents/agents/writer.js.map +1 -0
  75. package/dist/agents/context-vault.d.ts +49 -0
  76. package/dist/agents/context-vault.d.ts.map +1 -0
  77. package/dist/agents/context-vault.js +134 -0
  78. package/dist/agents/context-vault.js.map +1 -0
  79. package/dist/agents/orchestrator.d.ts +97 -0
  80. package/dist/agents/orchestrator.d.ts.map +1 -0
  81. package/dist/agents/orchestrator.js +696 -0
  82. package/dist/agents/orchestrator.js.map +1 -0
  83. package/dist/agents/utils/file-tree.d.ts +28 -0
  84. package/dist/agents/utils/file-tree.d.ts.map +1 -0
  85. package/dist/agents/utils/file-tree.js +93 -0
  86. package/dist/agents/utils/file-tree.js.map +1 -0
  87. package/dist/cli/agent.d.ts +25 -0
  88. package/dist/cli/agent.d.ts.map +1 -0
  89. package/dist/cli/agent.js +374 -0
  90. package/dist/cli/agent.js.map +1 -0
  91. package/dist/cli/benchmark.d.ts +24 -0
  92. package/dist/cli/benchmark.d.ts.map +1 -0
  93. package/dist/cli/benchmark.js +235 -0
  94. package/dist/cli/benchmark.js.map +1 -0
  95. package/dist/cli/cache.d.ts +12 -0
  96. package/dist/cli/cache.d.ts.map +1 -0
  97. package/dist/cli/cache.js +58 -0
  98. package/dist/cli/cache.js.map +1 -0
  99. package/dist/cli/chat.d.ts +37 -0
  100. package/dist/cli/chat.d.ts.map +1 -0
  101. package/dist/cli/chat.js +393 -0
  102. package/dist/cli/chat.js.map +1 -0
  103. package/dist/cli/commands.d.ts +24 -0
  104. package/dist/cli/commands.d.ts.map +1 -0
  105. package/dist/cli/commands.js +18 -0
  106. package/dist/cli/commands.js.map +1 -0
  107. package/dist/cli/config.d.ts +19 -0
  108. package/dist/cli/config.d.ts.map +1 -0
  109. package/dist/cli/config.js +162 -0
  110. package/dist/cli/config.js.map +1 -0
  111. package/dist/cli/dashboard.d.ts +34 -0
  112. package/dist/cli/dashboard.d.ts.map +1 -0
  113. package/dist/cli/dashboard.js +126 -0
  114. package/dist/cli/dashboard.js.map +1 -0
  115. package/dist/cli/doctor.d.ts +68 -0
  116. package/dist/cli/doctor.d.ts.map +1 -0
  117. package/dist/cli/doctor.js +585 -0
  118. package/dist/cli/doctor.js.map +1 -0
  119. package/dist/cli/edit.d.ts +11 -0
  120. package/dist/cli/edit.d.ts.map +1 -0
  121. package/dist/cli/edit.js +86 -0
  122. package/dist/cli/edit.js.map +1 -0
  123. package/dist/cli/execute.d.ts +25 -0
  124. package/dist/cli/execute.d.ts.map +1 -0
  125. package/dist/cli/execute.js +186 -0
  126. package/dist/cli/execute.js.map +1 -0
  127. package/dist/cli/federation.d.ts +31 -0
  128. package/dist/cli/federation.d.ts.map +1 -0
  129. package/dist/cli/federation.js +387 -0
  130. package/dist/cli/federation.js.map +1 -0
  131. package/dist/cli/history.d.ts +22 -0
  132. package/dist/cli/history.d.ts.map +1 -0
  133. package/dist/cli/history.js +140 -0
  134. package/dist/cli/history.js.map +1 -0
  135. package/dist/cli/init.d.ts +49 -0
  136. package/dist/cli/init.d.ts.map +1 -0
  137. package/dist/cli/init.js +423 -0
  138. package/dist/cli/init.js.map +1 -0
  139. package/dist/cli/learn.d.ts +31 -0
  140. package/dist/cli/learn.d.ts.map +1 -0
  141. package/dist/cli/learn.js +320 -0
  142. package/dist/cli/learn.js.map +1 -0
  143. package/dist/cli/memory.d.ts +38 -0
  144. package/dist/cli/memory.d.ts.map +1 -0
  145. package/dist/cli/memory.js +295 -0
  146. package/dist/cli/memory.js.map +1 -0
  147. package/dist/cli/model-picker.d.ts +18 -0
  148. package/dist/cli/model-picker.d.ts.map +1 -0
  149. package/dist/cli/model-picker.js +225 -0
  150. package/dist/cli/model-picker.js.map +1 -0
  151. package/dist/cli/models.d.ts +11 -0
  152. package/dist/cli/models.d.ts.map +1 -0
  153. package/dist/cli/models.js +132 -0
  154. package/dist/cli/models.js.map +1 -0
  155. package/dist/cli/plan.d.ts +11 -0
  156. package/dist/cli/plan.d.ts.map +1 -0
  157. package/dist/cli/plan.js +94 -0
  158. package/dist/cli/plan.js.map +1 -0
  159. package/dist/cli/plugins.d.ts +15 -0
  160. package/dist/cli/plugins.d.ts.map +1 -0
  161. package/dist/cli/plugins.js +123 -0
  162. package/dist/cli/plugins.js.map +1 -0
  163. package/dist/cli/router.d.ts +20 -0
  164. package/dist/cli/router.d.ts.map +1 -0
  165. package/dist/cli/router.js +142 -0
  166. package/dist/cli/router.js.map +1 -0
  167. package/dist/cli/run.d.ts +22 -0
  168. package/dist/cli/run.d.ts.map +1 -0
  169. package/dist/cli/run.js +110 -0
  170. package/dist/cli/run.js.map +1 -0
  171. package/dist/cli/sandbox.d.ts +27 -0
  172. package/dist/cli/sandbox.d.ts.map +1 -0
  173. package/dist/cli/sandbox.js +264 -0
  174. package/dist/cli/sandbox.js.map +1 -0
  175. package/dist/cli/sdk.d.ts +27 -0
  176. package/dist/cli/sdk.d.ts.map +1 -0
  177. package/dist/cli/sdk.js +204 -0
  178. package/dist/cli/sdk.js.map +1 -0
  179. package/dist/cli/stats.d.ts +18 -0
  180. package/dist/cli/stats.d.ts.map +1 -0
  181. package/dist/cli/stats.js +78 -0
  182. package/dist/cli/stats.js.map +1 -0
  183. package/dist/cli/team.d.ts +42 -0
  184. package/dist/cli/team.d.ts.map +1 -0
  185. package/dist/cli/team.js +473 -0
  186. package/dist/cli/team.js.map +1 -0
  187. package/dist/cli/workflow.d.ts +27 -0
  188. package/dist/cli/workflow.d.ts.map +1 -0
  189. package/dist/cli/workflow.js +347 -0
  190. package/dist/cli/workflow.js.map +1 -0
  191. package/dist/config/manager.d.ts +37 -0
  192. package/dist/config/manager.d.ts.map +1 -0
  193. package/dist/config/manager.js +147 -0
  194. package/dist/config/manager.js.map +1 -0
  195. package/dist/config/types.d.ts +53 -0
  196. package/dist/config/types.d.ts.map +1 -0
  197. package/dist/config/types.js +2 -0
  198. package/dist/config/types.js.map +1 -0
  199. package/dist/context/cache.d.ts +27 -0
  200. package/dist/context/cache.d.ts.map +1 -0
  201. package/dist/context/cache.js +116 -0
  202. package/dist/context/cache.js.map +1 -0
  203. package/dist/context/history.d.ts +87 -0
  204. package/dist/context/history.d.ts.map +1 -0
  205. package/dist/context/history.js +249 -0
  206. package/dist/context/history.js.map +1 -0
  207. package/dist/context/parser.d.ts +61 -0
  208. package/dist/context/parser.d.ts.map +1 -0
  209. package/dist/context/parser.js +194 -0
  210. package/dist/context/parser.js.map +1 -0
  211. package/dist/federation/client.d.ts +49 -0
  212. package/dist/federation/client.d.ts.map +1 -0
  213. package/dist/federation/client.js +239 -0
  214. package/dist/federation/client.js.map +1 -0
  215. package/dist/federation/protocol.d.ts +155 -0
  216. package/dist/federation/protocol.d.ts.map +1 -0
  217. package/dist/federation/protocol.js +57 -0
  218. package/dist/federation/protocol.js.map +1 -0
  219. package/dist/federation/server.d.ts +25 -0
  220. package/dist/federation/server.d.ts.map +1 -0
  221. package/dist/federation/server.js +401 -0
  222. package/dist/federation/server.js.map +1 -0
  223. package/dist/index.d.ts +67 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +93 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/inference/factory.d.ts +20 -0
  228. package/dist/inference/factory.d.ts.map +1 -0
  229. package/dist/inference/factory.js +46 -0
  230. package/dist/inference/factory.js.map +1 -0
  231. package/dist/inference/gemini-adapter.d.ts +17 -0
  232. package/dist/inference/gemini-adapter.d.ts.map +1 -0
  233. package/dist/inference/gemini-adapter.js +176 -0
  234. package/dist/inference/gemini-adapter.js.map +1 -0
  235. package/dist/inference/groq-adapter.d.ts +17 -0
  236. package/dist/inference/groq-adapter.d.ts.map +1 -0
  237. package/dist/inference/groq-adapter.js +103 -0
  238. package/dist/inference/groq-adapter.js.map +1 -0
  239. package/dist/inference/interface.d.ts +49 -0
  240. package/dist/inference/interface.d.ts.map +1 -0
  241. package/dist/inference/interface.js +2 -0
  242. package/dist/inference/interface.js.map +1 -0
  243. package/dist/inference/local-adapter.d.ts +35 -0
  244. package/dist/inference/local-adapter.d.ts.map +1 -0
  245. package/dist/inference/local-adapter.js +311 -0
  246. package/dist/inference/local-adapter.js.map +1 -0
  247. package/dist/inference/model-catalog.d.ts +53 -0
  248. package/dist/inference/model-catalog.d.ts.map +1 -0
  249. package/dist/inference/model-catalog.js +306 -0
  250. package/dist/inference/model-catalog.js.map +1 -0
  251. package/dist/inference/nim-adapter.d.ts +17 -0
  252. package/dist/inference/nim-adapter.d.ts.map +1 -0
  253. package/dist/inference/nim-adapter.js +103 -0
  254. package/dist/inference/nim-adapter.js.map +1 -0
  255. package/dist/inference/openrouter-adapter.d.ts +17 -0
  256. package/dist/inference/openrouter-adapter.d.ts.map +1 -0
  257. package/dist/inference/openrouter-adapter.js +105 -0
  258. package/dist/inference/openrouter-adapter.js.map +1 -0
  259. package/dist/inference/sse.d.ts +20 -0
  260. package/dist/inference/sse.d.ts.map +1 -0
  261. package/dist/inference/sse.js +91 -0
  262. package/dist/inference/sse.js.map +1 -0
  263. package/dist/learning/agent-stats.d.ts +109 -0
  264. package/dist/learning/agent-stats.d.ts.map +1 -0
  265. package/dist/learning/agent-stats.js +240 -0
  266. package/dist/learning/agent-stats.js.map +1 -0
  267. package/dist/learning/benchmark.d.ts +161 -0
  268. package/dist/learning/benchmark.d.ts.map +1 -0
  269. package/dist/learning/benchmark.js +589 -0
  270. package/dist/learning/benchmark.js.map +1 -0
  271. package/dist/learning/cost-tracker.d.ts +101 -0
  272. package/dist/learning/cost-tracker.d.ts.map +1 -0
  273. package/dist/learning/cost-tracker.js +224 -0
  274. package/dist/learning/cost-tracker.js.map +1 -0
  275. package/dist/learning/feedback.d.ts +88 -0
  276. package/dist/learning/feedback.d.ts.map +1 -0
  277. package/dist/learning/feedback.js +169 -0
  278. package/dist/learning/feedback.js.map +1 -0
  279. package/dist/learning/hybrid-router.d.ts +201 -0
  280. package/dist/learning/hybrid-router.d.ts.map +1 -0
  281. package/dist/learning/hybrid-router.js +450 -0
  282. package/dist/learning/hybrid-router.js.map +1 -0
  283. package/dist/learning/model-compare.d.ts +76 -0
  284. package/dist/learning/model-compare.d.ts.map +1 -0
  285. package/dist/learning/model-compare.js +252 -0
  286. package/dist/learning/model-compare.js.map +1 -0
  287. package/dist/learning/model-router.d.ts +68 -0
  288. package/dist/learning/model-router.d.ts.map +1 -0
  289. package/dist/learning/model-router.js +140 -0
  290. package/dist/learning/model-router.js.map +1 -0
  291. package/dist/learning/pattern-extractor.d.ts +99 -0
  292. package/dist/learning/pattern-extractor.d.ts.map +1 -0
  293. package/dist/learning/pattern-extractor.js +310 -0
  294. package/dist/learning/pattern-extractor.js.map +1 -0
  295. package/dist/learning/scorer.d.ts +51 -0
  296. package/dist/learning/scorer.d.ts.map +1 -0
  297. package/dist/learning/scorer.js +64 -0
  298. package/dist/learning/scorer.js.map +1 -0
  299. package/dist/learning/self-improver.d.ts +48 -0
  300. package/dist/learning/self-improver.d.ts.map +1 -0
  301. package/dist/learning/self-improver.js +161 -0
  302. package/dist/learning/self-improver.js.map +1 -0
  303. package/dist/memory/embedder.d.ts +65 -0
  304. package/dist/memory/embedder.d.ts.map +1 -0
  305. package/dist/memory/embedder.js +424 -0
  306. package/dist/memory/embedder.js.map +1 -0
  307. package/dist/memory/memory-integration.d.ts +56 -0
  308. package/dist/memory/memory-integration.d.ts.map +1 -0
  309. package/dist/memory/memory-integration.js +95 -0
  310. package/dist/memory/memory-integration.js.map +1 -0
  311. package/dist/memory/trajectory-store.d.ts +149 -0
  312. package/dist/memory/trajectory-store.d.ts.map +1 -0
  313. package/dist/memory/trajectory-store.js +476 -0
  314. package/dist/memory/trajectory-store.js.map +1 -0
  315. package/dist/memory/vector-store.d.ts +78 -0
  316. package/dist/memory/vector-store.d.ts.map +1 -0
  317. package/dist/memory/vector-store.js +186 -0
  318. package/dist/memory/vector-store.js.map +1 -0
  319. package/dist/plugins/agent-plugin.d.ts +73 -0
  320. package/dist/plugins/agent-plugin.d.ts.map +1 -0
  321. package/dist/plugins/agent-plugin.js +199 -0
  322. package/dist/plugins/agent-plugin.js.map +1 -0
  323. package/dist/plugins/registry.d.ts +61 -0
  324. package/dist/plugins/registry.d.ts.map +1 -0
  325. package/dist/plugins/registry.js +67 -0
  326. package/dist/plugins/registry.js.map +1 -0
  327. package/dist/sandbox/images.d.ts +31 -0
  328. package/dist/sandbox/images.d.ts.map +1 -0
  329. package/dist/sandbox/images.js +129 -0
  330. package/dist/sandbox/images.js.map +1 -0
  331. package/dist/sandbox/manager.d.ts +134 -0
  332. package/dist/sandbox/manager.d.ts.map +1 -0
  333. package/dist/sandbox/manager.js +470 -0
  334. package/dist/sandbox/manager.js.map +1 -0
  335. package/dist/sandbox/types.d.ts +113 -0
  336. package/dist/sandbox/types.d.ts.map +1 -0
  337. package/dist/sandbox/types.js +107 -0
  338. package/dist/sandbox/types.js.map +1 -0
  339. package/dist/security/scanner.d.ts +53 -0
  340. package/dist/security/scanner.d.ts.map +1 -0
  341. package/dist/security/scanner.js +271 -0
  342. package/dist/security/scanner.js.map +1 -0
  343. package/dist/team/config.d.ts +50 -0
  344. package/dist/team/config.d.ts.map +1 -0
  345. package/dist/team/config.js +108 -0
  346. package/dist/team/config.js.map +1 -0
  347. package/dist/team/memory.d.ts +63 -0
  348. package/dist/team/memory.d.ts.map +1 -0
  349. package/dist/team/memory.js +282 -0
  350. package/dist/team/memory.js.map +1 -0
  351. package/dist/team/review.d.ts +123 -0
  352. package/dist/team/review.d.ts.map +1 -0
  353. package/dist/team/review.js +293 -0
  354. package/dist/team/review.js.map +1 -0
  355. package/dist/utils/env.d.ts +19 -0
  356. package/dist/utils/env.d.ts.map +1 -0
  357. package/dist/utils/env.js +250 -0
  358. package/dist/utils/env.js.map +1 -0
  359. package/dist/utils/logger.d.ts +11 -0
  360. package/dist/utils/logger.d.ts.map +1 -0
  361. package/dist/utils/logger.js +45 -0
  362. package/dist/utils/logger.js.map +1 -0
  363. package/dist/web-dashboard/server.d.ts +59 -0
  364. package/dist/web-dashboard/server.d.ts.map +1 -0
  365. package/dist/web-dashboard/server.js +418 -0
  366. package/dist/web-dashboard/server.js.map +1 -0
  367. package/dist/workflow/registry.d.ts +127 -0
  368. package/dist/workflow/registry.d.ts.map +1 -0
  369. package/dist/workflow/registry.js +482 -0
  370. package/dist/workflow/registry.js.map +1 -0
  371. package/dist/workflow/templates.d.ts +93 -0
  372. package/dist/workflow/templates.d.ts.map +1 -0
  373. package/dist/workflow/templates.js +481 -0
  374. package/dist/workflow/templates.js.map +1 -0
  375. package/package.json +78 -0
  376. package/src/web-dashboard/public/assets/index-B08nDkSB.css +1 -0
  377. package/src/web-dashboard/public/assets/index-BKL8YOFD.js +135 -0
  378. package/src/web-dashboard/public/assets/index-BKL8YOFD.js.map +1 -0
  379. package/src/web-dashboard/public/index.html +13 -0
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Memory command — Manage agent memory store with compression and pruning.
3
+ *
4
+ * Usage:
5
+ * buff memory — Show memory usage statistics
6
+ * buff memory stats — Show detailed memory store statistics
7
+ * buff memory optimize — Run automatic compression + pruning
8
+ * buff memory optimize --dry-run — Show what would be done without doing it
9
+ * buff memory optimize --aggressive — More aggressive compression (14d retention, 0.2 min score)
10
+ * buff memory prune — Prune old/low-quality trajectories
11
+ * buff memory prune --max-age 30 — Remove trajectories older than 30 days
12
+ * buff memory prune --min-score 0.2 — Remove trajectories with score below 0.2
13
+ * buff memory prune --max-count 200 — Keep at most 200 trajectories
14
+ * buff memory summarize — Summarize old trajectories by project fingerprint
15
+ * buff memory summarize --retention 14 — Keep originals newer than 14 days
16
+ * buff memory clear — Clear all stored trajectories
17
+ * buff memory info — Show detailed compression analysis
18
+ *
19
+ * The memory optimization system provides:
20
+ * - Configurable retention policy (age-based, score-based, count-based)
21
+ * - Automatic trajectory summarization (merges similar old trajectories)
22
+ * - Dry-run mode to preview changes before applying
23
+ * - Aggressive mode for maximum space savings
24
+ * - Detailed memory usage statistics
25
+ */
26
+ import { Command } from 'commander';
27
+ import { BaseCommand } from './commands.js';
28
+ import { getTrajectoryStore } from '../memory/trajectory-store.js';
29
+ import { getMemoryStats, clearMemory } from '../memory/memory-integration.js';
30
+ import { getPatternStore } from '../learning/pattern-extractor.js';
31
+ import { getVectorStore } from '../memory/vector-store.js';
32
+ import { getFeedbackStore } from '../learning/feedback.js';
33
+ import { logger } from '../utils/logger.js';
34
+ export class MemoryCommand extends BaseCommand {
35
+ create() {
36
+ const command = new Command('memory')
37
+ .description('Manage agent memory store — compression, pruning, and optimization');
38
+ // ── stats (default) ──────────────────────────────────────────────────
39
+ command
40
+ .command('stats')
41
+ .description('Show memory store statistics')
42
+ .action(async () => {
43
+ await this.showStats();
44
+ });
45
+ // ── optimize ─────────────────────────────────────────────────────────
46
+ const optimizeCmd = new Command('optimize')
47
+ .description('Run automatic memory compression and pruning')
48
+ .option('--dry-run', 'Show what would be done without making changes', false)
49
+ .option('--aggressive', 'Use aggressive optimization settings', false)
50
+ .action(async (options) => {
51
+ await this.optimize(options || {});
52
+ });
53
+ command.addCommand(optimizeCmd);
54
+ // ── prune ────────────────────────────────────────────────────────────
55
+ const pruneCmd = new Command('prune')
56
+ .description('Prune old or low-quality trajectories')
57
+ .option('--max-age <days>', 'Remove trajectories older than N days', parseInt)
58
+ .option('--min-score <score>', 'Remove trajectories with score below N', parseFloat)
59
+ .option('--max-count <count>', 'Keep at most N trajectories', parseInt)
60
+ .option('--verbose', 'Show details of what was removed', false)
61
+ .action(async (options) => {
62
+ await this.prune(options || {});
63
+ });
64
+ command.addCommand(pruneCmd);
65
+ // ── summarize ────────────────────────────────────────────────────────
66
+ const summarizeCmd = new Command('summarize')
67
+ .description('Summarize old trajectories by merging similar ones')
68
+ .option('--retention <days>', 'Keep original trajectories newer than N days', parseInt)
69
+ .option('--verbose', 'Show details of summarization', false)
70
+ .action(async (options) => {
71
+ await this.summarize(options || {});
72
+ });
73
+ command.addCommand(summarizeCmd);
74
+ // ── info ─────────────────────────────────────────────────────────────
75
+ command
76
+ .command('info')
77
+ .description('Show detailed compression analysis')
78
+ .action(async () => {
79
+ await this.showInfo();
80
+ });
81
+ // ── clear ────────────────────────────────────────────────────────────
82
+ command
83
+ .command('clear')
84
+ .description('Clear all stored trajectories and reset memory')
85
+ .option('-f, --force', 'Skip confirmation')
86
+ .action(async (options) => {
87
+ await this.clearMemory(options || {});
88
+ });
89
+ // Default: show stats
90
+ command.action(async () => {
91
+ await this.showStats();
92
+ });
93
+ return command;
94
+ }
95
+ // ── Action Handlers ──────────────────────────────────────────────────────
96
+ async showStats() {
97
+ try {
98
+ const stats = await getMemoryStats();
99
+ logger.highlight('═'.repeat(60));
100
+ logger.highlight(' 💾 Agent Memory Store');
101
+ logger.highlight('═'.repeat(60));
102
+ console.log(`\n 📊 Trajectories:`);
103
+ console.log(` Total: ${stats.total}`);
104
+ console.log(` Avg quality score: ${(stats.avgScore * 100).toFixed(1)}%`);
105
+ if (Object.keys(stats.byProjectFingerprint).length > 0) {
106
+ console.log(`\n 📂 By Project Type:`);
107
+ for (const [fp, count] of Object.entries(stats.byProjectFingerprint).sort(([, a], [, b]) => b - a)) {
108
+ console.log(` ${fp.padEnd(20)} ${count} trajectory(ies)`);
109
+ }
110
+ }
111
+ // Vector store stats
112
+ const vs = getVectorStore();
113
+ const vsStats = vs.stats();
114
+ console.log(`\n 🔍 Vector Index:`);
115
+ console.log(` Entries: ${vsStats.totalEntries}`);
116
+ console.log(` Dimensions: ${vsStats.dimensions}`);
117
+ // Pattern store stats
118
+ const patternStore = getPatternStore();
119
+ const patterns = patternStore.getAll();
120
+ console.log(`\n 📝 Coding Patterns:`);
121
+ console.log(` Total: ${patterns.length}`);
122
+ // Trajectory compression stats
123
+ const trajStore = getTrajectoryStore();
124
+ const compressionStats = trajStore.getCompressionStats();
125
+ console.log(`\n 📦 Compression Analysis:`);
126
+ console.log(` Estimated size: ${this.formatBytes(compressionStats.totalSizeBytes)}`);
127
+ console.log(` Old (>30 days): ${compressionStats.oldTrajectories}`);
128
+ console.log(` Low score (<0.3): ${compressionStats.lowScoreTrajectories}`);
129
+ console.log(` Mergeable groups: ${compressionStats.mergeableGroups}`);
130
+ console.log(` ${compressionStats.estimatedOptimization}`);
131
+ // Feedback stats
132
+ const feedbackStore = getFeedbackStore();
133
+ const feedbackStats = feedbackStore.getStats();
134
+ if (feedbackStats.totalRatings > 0) {
135
+ console.log(`\n 👍 User Feedback:`);
136
+ console.log(` Total ratings: ${feedbackStats.totalRatings}`);
137
+ console.log(` Positive: ${(feedbackStats.positiveRatio * 100).toFixed(0)}%`);
138
+ console.log(` Trend: ${feedbackStats.recentTrend}`);
139
+ }
140
+ console.log('');
141
+ logger.info('Run `buff memory optimize` to compress and prune old data.');
142
+ console.log('');
143
+ }
144
+ catch (err) {
145
+ logger.error(`Failed to get memory stats: ${err instanceof Error ? err.message : String(err)}`);
146
+ }
147
+ }
148
+ async optimize(options) {
149
+ const trajStore = getTrajectoryStore();
150
+ const baseline = trajStore.getCompressionStats();
151
+ logger.highlight('═'.repeat(60));
152
+ logger.highlight(options.dryRun ? ' 🔍 Memory Optimization (Dry Run)' : ' 🔄 Running Memory Optimization');
153
+ logger.highlight('═'.repeat(60));
154
+ console.log(`\n 📊 Before: ${baseline.totalTrajectories} trajectories, ${this.formatBytes(baseline.totalSizeBytes)}`);
155
+ if (options.dryRun) {
156
+ console.log(` Old (>30d): ${baseline.oldTrajectories} candidates for pruning`);
157
+ console.log(` Low score (<0.3): ${baseline.lowScoreTrajectories} candidates for pruning`);
158
+ console.log(` Mergeable groups: ${baseline.mergeableGroups} groups for summarization`);
159
+ console.log(` ${baseline.estimatedOptimization}`);
160
+ console.log('');
161
+ logger.info('Run without --dry-run to apply these optimizations.');
162
+ console.log('');
163
+ return;
164
+ }
165
+ // Phase 1: Prune by policy
166
+ const maxAgeDays = options.aggressive ? 14 : 90;
167
+ const minScore = options.aggressive ? 0.2 : 0.1;
168
+ const maxCount = options.aggressive ? 200 : 500;
169
+ logger.info(`\n Phase 1: Pruning (maxAge=${maxAgeDays}d, minScore=${minScore}, maxCount=${maxCount})...`);
170
+ const pruned = trajStore.pruneByPolicy(maxAgeDays, minScore, maxCount, false);
171
+ logger.success(` Removed ${pruned} trajectory(ies)`);
172
+ // Phase 2: Summarize old trajectories
173
+ const retentionDays = options.aggressive ? 7 : 30;
174
+ logger.info(`\n Phase 2: Summarizing (retention=${retentionDays}d)...`);
175
+ const { summarized, merged } = await trajStore.summarize(retentionDays, false);
176
+ logger.success(` Summarized ${summarized} group(s), merged ${merged} trajectory(ies)`);
177
+ // Phase 3: Garbage collect patterns
178
+ logger.info('\n Phase 3: Cleaning up coding patterns...');
179
+ const patternStore = getPatternStore();
180
+ const patternsRemoved = patternStore.garbageCollect();
181
+ if (patternsRemoved > 0) {
182
+ logger.success(` Removed ${patternsRemoved} low-quality pattern(s)`);
183
+ }
184
+ else {
185
+ logger.info(' No patterns needed cleanup');
186
+ }
187
+ // Results
188
+ const after = trajStore.getCompressionStats();
189
+ const saved = baseline.totalTrajectories - after.totalTrajectories;
190
+ console.log('\n ── Results ──');
191
+ console.log(` Before: ${baseline.totalTrajectories} trajectories`);
192
+ console.log(` After: ${after.totalTrajectories} trajectories`);
193
+ console.log(` Saved: ${saved} trajectories (${baseline.totalTrajectories > 0 ? Math.round((saved / baseline.totalTrajectories) * 100) : 0}% reduction)`);
194
+ console.log(` Size: ${this.formatBytes(baseline.totalSizeBytes)} → ${this.formatBytes(after.totalSizeBytes)}`);
195
+ console.log('');
196
+ logger.success('Memory optimization complete!');
197
+ console.log('');
198
+ }
199
+ async prune(options) {
200
+ const trajStore = getTrajectoryStore();
201
+ const maxAge = options.maxAge ?? 90;
202
+ const minScore = options.minScore ?? 0.1;
203
+ const maxCount = options.maxCount ?? 500;
204
+ const verbose = options.verbose ?? false;
205
+ logger.highlight('═'.repeat(60));
206
+ logger.highlight(' 🗑️ Pruning Trajectories');
207
+ logger.highlight('═'.repeat(60));
208
+ console.log(`\n Max age: ${maxAge} days`);
209
+ console.log(` Min score: ${minScore}`);
210
+ console.log(` Max count: ${maxCount}`);
211
+ const removed = trajStore.pruneByPolicy(maxAge, minScore, maxCount, verbose);
212
+ if (removed > 0) {
213
+ logger.success(`\n Removed ${removed} trajectory(ies).`);
214
+ }
215
+ else {
216
+ logger.info('\n No trajectories needed pruning.');
217
+ }
218
+ const stats = await getMemoryStats();
219
+ console.log(` Remaining: ${stats.total} trajectory(ies)`);
220
+ console.log('');
221
+ }
222
+ async summarize(options) {
223
+ const trajStore = getTrajectoryStore();
224
+ const retention = options.retention ?? 7;
225
+ const verbose = options.verbose ?? false;
226
+ logger.highlight('═'.repeat(60));
227
+ logger.highlight(' 📝 Summarizing Old Trajectories');
228
+ logger.highlight('═'.repeat(60));
229
+ console.log(`\n Retention: ${retention} days (trajectories newer than this kept intact)`);
230
+ const { summarized, merged } = await trajStore.summarize(retention, verbose);
231
+ if (merged > 0) {
232
+ logger.success(`\n Summarized ${summarized} group(s) — merged ${merged} trajectory(ies).`);
233
+ }
234
+ else {
235
+ logger.info('\n No trajectories needed summarization.');
236
+ }
237
+ console.log('');
238
+ }
239
+ async showInfo() {
240
+ const trajStore = getTrajectoryStore();
241
+ const compressionStats = trajStore.getCompressionStats();
242
+ const stats = await getMemoryStats();
243
+ logger.highlight('═'.repeat(60));
244
+ logger.highlight(' 📋 Memory Compression Analysis');
245
+ logger.highlight('═'.repeat(60));
246
+ console.log('\n ── Current Usage ──');
247
+ console.log(` Trajectories: ${compressionStats.totalTrajectories}`);
248
+ console.log(` Estimated size: ${this.formatBytes(compressionStats.totalSizeBytes)}`);
249
+ console.log(` Average quality score: ${(stats.avgScore * 100).toFixed(1)}%`);
250
+ console.log('\n ── Optimization Candidates ──');
251
+ console.log(` 🕐 Old trajectories (>30 days): ${compressionStats.oldTrajectories}`);
252
+ console.log(` Run: buff memory prune --max-age 30`);
253
+ console.log(`\n ⭐ Low-quality trajectories (<0.3): ${compressionStats.lowScoreTrajectories}`);
254
+ console.log(` Run: buff memory prune --min-score 0.3`);
255
+ console.log(`\n 🔗 Mergeable groups: ${compressionStats.mergeableGroups}`);
256
+ console.log(` Run: buff memory summarize --retention 7`);
257
+ console.log(`\n ${compressionStats.estimatedOptimization}`);
258
+ console.log(` Run: buff memory optimize --dry-run # to preview`);
259
+ console.log(` Run: buff memory optimize # to apply`);
260
+ console.log('\n ── All Data Stores ──');
261
+ const vs = getVectorStore();
262
+ const vsStats = vs.stats();
263
+ const patterns = getPatternStore().getAll();
264
+ const feedbackStore = getFeedbackStore();
265
+ const feedbackStats = feedbackStore.getStats();
266
+ console.log(` 🧠 Vector index: ${vsStats.totalEntries} entries (${vsStats.dimensions}-dim)`);
267
+ console.log(` 📝 Coding patterns: ${patterns.length}`);
268
+ console.log(` 👍 User feedback: ${feedbackStats.totalRatings} ratings`);
269
+ console.log('');
270
+ logger.info('To clear everything: buff memory clear --force');
271
+ console.log('');
272
+ }
273
+ async clearMemory(options) {
274
+ if (!options.force) {
275
+ logger.warn('This will delete ALL stored trajectories and reset the vector index.');
276
+ logger.warn('Use --force to confirm.');
277
+ return;
278
+ }
279
+ logger.info('Clearing all memory data...');
280
+ await clearMemory();
281
+ // Also clear patterns and feedback
282
+ getPatternStore().clear();
283
+ getFeedbackStore().clear();
284
+ logger.success('All memory data cleared (trajectories, patterns, feedback, vector index).');
285
+ }
286
+ // ── Helpers ──────────────────────────────────────────────────────────────
287
+ formatBytes(bytes) {
288
+ if (bytes < 1024)
289
+ return `${bytes} B`;
290
+ if (bytes < 1024 * 1024)
291
+ return `${(bytes / 1024).toFixed(1)} KB`;
292
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
293
+ }
294
+ }
295
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/cli/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared Model Picker — standalone categorized model picker for CLI and orchestrator.
3
+ *
4
+ * Extracted from chat.ts so the orchestrator's rate-limit "switch model" flow
5
+ * shows the same nice categorized picker instead of asking the user to type a
6
+ * raw model name.
7
+ */
8
+ import { ConfigManager } from '../config/manager.js';
9
+ export interface PickerResult {
10
+ provider: string;
11
+ model: string;
12
+ }
13
+ /**
14
+ * Show a categorized model picker that groups models by capability.
15
+ * Returns the selected provider and model, or null if cancelled.
16
+ */
17
+ export declare function showModelPicker(configManager: ConfigManager): Promise<PickerResult | null>;
18
+ //# sourceMappingURL=model-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/cli/model-picker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiDrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;GAGG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqOhG"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Shared Model Picker — standalone categorized model picker for CLI and orchestrator.
3
+ *
4
+ * Extracted from chat.ts so the orchestrator's rate-limit "switch model" flow
5
+ * shows the same nice categorized picker instead of asking the user to type a
6
+ * raw model name.
7
+ */
8
+ import inquirer from 'inquirer';
9
+ import ora from 'ora';
10
+ import { resolveProvider } from './router.js';
11
+ import { CATEGORY_INFO, categorizeModel, getModelBadge, formatModelName, } from '../inference/model-catalog.js';
12
+ import { logger } from '../utils/logger.js';
13
+ // ─── Category Display Order ─────────────────────────────────────────────────
14
+ const CATEGORY_ORDER = {
15
+ chat: 0,
16
+ code: 1,
17
+ reasoning: 2,
18
+ fast: 3,
19
+ creative: 4,
20
+ vision: 5,
21
+ instruct: 6,
22
+ agentic: 7,
23
+ preview: 8,
24
+ other: 9,
25
+ speech: 10,
26
+ };
27
+ // ─── Provider Metadata ──────────────────────────────────────────────────────
28
+ const PROVIDER_ICONS = {
29
+ local: '💻',
30
+ nim: '🔶',
31
+ gemini: '🔷',
32
+ openrouter: '🟣',
33
+ groq: '🟢',
34
+ };
35
+ const PROVIDER_ELIGIBILITY = {
36
+ local: 'Works offline — no API key needed',
37
+ nim: 'NVIDIA NIM cloud service — set NVIDIA_NIM_API_KEY',
38
+ gemini: 'Google Gemini cloud service — set GEMINI_API_KEY',
39
+ openrouter: 'OpenRouter unified API service — set OPENROUTER_API_KEY',
40
+ groq: 'Groq LPU cloud inference — set GROQ_API_KEY',
41
+ };
42
+ // ─── Shared picker ──────────────────────────────────────────────────────────
43
+ /**
44
+ * Show a categorized model picker that groups models by capability.
45
+ * Returns the selected provider and model, or null if cancelled.
46
+ */
47
+ export async function showModelPicker(configManager) {
48
+ logger.highlight('\n🔍 Checking available providers...\n');
49
+ const providerTypes = ['local', 'nim', 'gemini', 'openrouter', 'groq'];
50
+ const checkResults = await Promise.all(providerTypes.map(async (pt) => {
51
+ const resolved = resolveProvider(configManager, pt);
52
+ const available = await resolved.provider.isAvailable();
53
+ return { pt, resolved, available };
54
+ }));
55
+ const availableProviders = [];
56
+ for (const { pt, resolved, available } of checkResults) {
57
+ const icon = PROVIDER_ICONS[pt] || '🔹';
58
+ const eligibility = PROVIDER_ELIGIBILITY[pt] || '';
59
+ if (available) {
60
+ availableProviders.push({ type: pt, provider: resolved.provider, name: resolved.provider.name });
61
+ logger.success(` ${icon} ${resolved.provider.name} — ${pt === 'local' ? '✅ Running' : '✅ API key configured'}`);
62
+ }
63
+ else {
64
+ logger.info(` ${icon} ${resolved.provider.name} — ⛔ Not available (${eligibility})`);
65
+ }
66
+ }
67
+ if (availableProviders.length === 0) {
68
+ logger.error('\n⚠️ No providers available.');
69
+ logger.info('\nOptions to get started:');
70
+ logger.info(' 1. Install Ollama: brew install ollama && ollama pull deepseek-coder');
71
+ logger.info(' 2. Set Groq key: set GROQ_API_KEY=gsk_... https://console.groq.com');
72
+ logger.info(' 3. Set NIM key: set NVIDIA_NIM_API_KEY=... https://build.nvidia.com');
73
+ logger.info(' 4. Set Gemini key: set GEMINI_API_KEY=... https://aistudio.google.com/apikey');
74
+ logger.info(' 5. Set OpenRouter: set OPENROUTER_API_KEY=... https://openrouter.ai/keys');
75
+ return null;
76
+ }
77
+ logger.highlight('\n📡 Fetching available models...');
78
+ console.log('');
79
+ const loadingSpinner = ora(' Loading models...').start();
80
+ // Collect ALL models from all providers
81
+ const allModels = [];
82
+ const modelResults = await Promise.all(availableProviders.map(async ({ type, provider: prov, name }) => {
83
+ try {
84
+ const models = await prov.listModels();
85
+ return { type, name, models, error: null };
86
+ }
87
+ catch (err) {
88
+ return { type, name, models: null, error: err };
89
+ }
90
+ }));
91
+ loadingSpinner.stop();
92
+ for (const { type, name, models, error } of modelResults) {
93
+ if (error) {
94
+ logger.warn(` ⚠️ Failed to load models from ${name}`);
95
+ continue;
96
+ }
97
+ if (!models || models.length === 0) {
98
+ logger.warn(` ⚠️ No models found for ${name}`);
99
+ continue;
100
+ }
101
+ logger.success(` ✅ ${name}: ${models.length} model${models.length !== 1 ? 's' : ''} available`);
102
+ const MAX_MODELS_PER_PROVIDER = 20;
103
+ const modelsToShow = models.slice(0, MAX_MODELS_PER_PROVIDER).map((m) => ({
104
+ ...m,
105
+ _providerType: type,
106
+ }));
107
+ allModels.push(...modelsToShow);
108
+ if (models.length > MAX_MODELS_PER_PROVIDER) {
109
+ logger.info(` 📋 ... and ${models.length - MAX_MODELS_PER_PROVIDER} more (use: buff models --provider ${type})`);
110
+ }
111
+ }
112
+ if (allModels.length === 0) {
113
+ logger.error('\n⚠️ No models found from any available provider.');
114
+ return null;
115
+ }
116
+ // ── Categorize & group models ──────────────────────────────────────────
117
+ const modelProviderMap = new Map();
118
+ for (const m of allModels) {
119
+ modelProviderMap.set(m.id, m._providerType || m.provider);
120
+ }
121
+ // Build categorized array and group by category
122
+ const grouped = new Map();
123
+ for (const m of allModels) {
124
+ const category = categorizeModel(m.id, m.owner);
125
+ const badge = getModelBadge(m.id);
126
+ const providerType = modelProviderMap.get(m.id) || m.provider;
127
+ const providerIcon = PROVIDER_ICONS[providerType] || '🔹';
128
+ const entry = {
129
+ model: m.id,
130
+ provider: providerType,
131
+ name: m.name,
132
+ category,
133
+ tags: m.tags || [],
134
+ badge,
135
+ providerIcon,
136
+ };
137
+ if (!grouped.has(category))
138
+ grouped.set(category, []);
139
+ grouped.get(category).push(entry);
140
+ }
141
+ // Sort categories by display order
142
+ const sortedCategories = Array.from(grouped.keys()).sort((a, b) => (CATEGORY_ORDER[a] ?? 99) - (CATEGORY_ORDER[b] ?? 99));
143
+ // Build the display list in render order (category-grouped) so selection indices match
144
+ const displayList = [];
145
+ // ── Render the picker ──────────────────────────────────────────────────
146
+ console.log();
147
+ logger.highlight('🎯 Available Models');
148
+ console.log('');
149
+ for (const cat of sortedCategories) {
150
+ const models = grouped.get(cat);
151
+ const info = CATEGORY_INFO[cat];
152
+ // Category header
153
+ console.log(` ${info.icon} ${info.label} — ${info.description}`);
154
+ for (const choice of models) {
155
+ displayList.push({
156
+ model: choice.model,
157
+ provider: choice.provider,
158
+ category: choice.category,
159
+ badge: choice.badge,
160
+ });
161
+ const num = String(displayList.length).padStart(2, ' ');
162
+ const modelId = choice.model;
163
+ const readableName = formatModelName(modelId);
164
+ // Show secondary category tags (except the primary one)
165
+ const secondaryTags = (choice.tags || [])
166
+ .filter((t) => t !== choice.category)
167
+ .slice(0, 2)
168
+ .map((t) => {
169
+ const ci = CATEGORY_INFO[t];
170
+ return ci ? ci.icon : t;
171
+ })
172
+ .join(' ');
173
+ const tagsStr = secondaryTags ? ` ${secondaryTags}` : '';
174
+ const readableStr = readableName !== modelId ? ` (${readableName})` : '';
175
+ // Show badge inline if available
176
+ const badgeStr = choice.badge ? ` ⭐ ${choice.badge}` : '';
177
+ console.log(` ${num}. ${choice.providerIcon} ${modelId}${readableStr}${tagsStr}${badgeStr}`);
178
+ }
179
+ console.log('');
180
+ }
181
+ console.log(` 0. ❌ Cancel`);
182
+ console.log();
183
+ const selectableTotal = displayList.length;
184
+ const answer = await inquirer.prompt([
185
+ {
186
+ type: 'input',
187
+ name: 'selected',
188
+ message: `Enter a number (0-${selectableTotal}):`,
189
+ prefix: '🔢',
190
+ validate: (input) => {
191
+ const trimmed = input.trim();
192
+ if (trimmed === '')
193
+ return 'Please enter a number';
194
+ const num = Number(trimmed);
195
+ if (isNaN(num) || !Number.isInteger(num))
196
+ return 'Please enter a valid whole number';
197
+ if (num < 0 || num > selectableTotal)
198
+ return `Please enter a number between 0 and ${selectableTotal}`;
199
+ return true;
200
+ },
201
+ },
202
+ ]);
203
+ const selectedIndex = parseInt(answer.selected.trim(), 10);
204
+ if (selectedIndex === 0) {
205
+ logger.info('\nModel selection cancelled.');
206
+ return null;
207
+ }
208
+ const selected = displayList[selectedIndex - 1];
209
+ console.log('\n'.repeat(2));
210
+ const providerName = availableProviders.find(p => p.type === selected.provider)?.name || selected.provider;
211
+ logger.success(`🎯 Selected: ${selected.model}`);
212
+ logger.info(` Provider: ${providerName}`);
213
+ logger.info(` Category: ${CATEGORY_INFO[selected.category].icon} ${CATEGORY_INFO[selected.category].label}`);
214
+ if (selected.badge) {
215
+ logger.info(` ${selected.badge}`);
216
+ }
217
+ // Warn if user selected a speech/audio model that doesn't support chat
218
+ if (selected.category === 'speech') {
219
+ logger.warn('\n ⚠️ This is a speech/audio model — it does NOT support text chat.');
220
+ logger.info(' Use it for TTS, STT, or voice tasks via the appropriate API.');
221
+ }
222
+ console.log('');
223
+ return { provider: selected.provider, model: selected.model };
224
+ }
225
+ //# sourceMappingURL=model-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/cli/model-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ import { BaseCommand } from './commands.js';
3
+ /**
4
+ * Models command — list available models from providers
5
+ * agent-baba-d models [--provider nim]
6
+ */
7
+ export declare class ModelsCommand extends BaseCommand {
8
+ create(): Command;
9
+ private execute;
10
+ }
11
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/cli/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C;;;GAGG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,MAAM,IAAI,OAAO;YAcH,OAAO;CAyHtB"}