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,393 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { Command } from 'commander';
3
+ import inquirer from 'inquirer';
4
+ import ora from 'ora';
5
+ import { BaseCommand } from './commands.js';
6
+ import { resolveProvider } from './router.js';
7
+ import { showModelPicker } from './model-picker.js';
8
+ import { ContextParser } from '../context/parser.js';
9
+ import { getCache } from '../context/cache.js';
10
+ import { getChatHistory } from '../context/history.js';
11
+ import { logger } from '../utils/logger.js';
12
+ import { Orchestrator } from '../agents/orchestrator.js';
13
+ import { printOrchestrationResult } from './execute.js';
14
+ /**
15
+ * Patterns that indicate a user wants to CREATE or MODIFY files on disk
16
+ * (as opposed to just asking a conversational question).
17
+ */
18
+ const CREATION_PATTERNS = [
19
+ /\b(?:create|write|make|build|generate|implement|scaffold)\b.*\b(?:file|program|script|app|function|class|module|component|page|route|api|endpoint|service|cli|tool|package|library|project)\b/i,
20
+ /\b(?:add|create|write|make)\b.*\b(?:new)\b.*\b(?:file|function|class|feature)\b/i,
21
+ /\b(?:set\s*up|scaffold|bootstrap|init|start)\b.*\b(?:project|app|module|package)\b/i,
22
+ /\b(?:create|write)\b.*\bpython|javascript|typescript|go|rust|java|ruby|bash|shell|node\b.*\b(?:program|script|file)\b/i,
23
+ /^\s*(?:create|write|make|build|generate)\s+(?:a|an|the)\s+/i,
24
+ ];
25
+ function hasCreationIntent(message) {
26
+ return CREATION_PATTERNS.some((pattern) => pattern.test(message));
27
+ }
28
+ /**
29
+ * Prompt the user whether they want to switch to developer mode.
30
+ */
31
+ async function promptDeveloperMode(message) {
32
+ console.log('');
33
+ logger.info('💡 I noticed you\'re asking me to create something!');
34
+ logger.info(' I can either:');
35
+ logger.info(' 1. 💬 Just show you the code as text (chat mode)');
36
+ logger.info(' 2. 🏗️ Actually create the files in your project (developer mode)');
37
+ console.log('');
38
+ const answer = await inquirer.prompt([
39
+ {
40
+ type: 'list',
41
+ name: 'choice',
42
+ message: 'How would you like me to handle this?',
43
+ prefix: '🔧',
44
+ choices: [
45
+ { name: '🏗️ Developer mode — Create the files in my project directory', value: 'dev' },
46
+ { name: '💬 Chat mode — Just show me the code as text', value: 'chat' },
47
+ ],
48
+ },
49
+ ]);
50
+ console.log('');
51
+ return answer.choice === 'dev';
52
+ }
53
+ /**
54
+ * Execute the multi-agent pipeline for a user's goal.
55
+ */
56
+ async function runDeveloperMode(goal, configManager, options) {
57
+ const spinner = ora({
58
+ text: '📋 Planning...',
59
+ spinner: 'dots',
60
+ }).start();
61
+ try {
62
+ const orchestrator = new Orchestrator(configManager);
63
+ const result = await orchestrator.execute(goal, {
64
+ provider: options?.provider,
65
+ model: options?.model,
66
+ verbose: true,
67
+ spinner: {
68
+ stop: () => spinner.stop(),
69
+ start: (text) => spinner.start(text),
70
+ },
71
+ });
72
+ spinner.stop();
73
+ console.log('');
74
+ printOrchestrationResult(result);
75
+ }
76
+ catch (err) {
77
+ spinner.fail('Developer mode execution failed');
78
+ logger.error(String(err));
79
+ }
80
+ }
81
+ // ─── ChatCommand ────────────────────────────────────────────────────────────
82
+ export class ChatCommand extends BaseCommand {
83
+ devModeAuto = false;
84
+ create() {
85
+ const command = new Command('chat')
86
+ .description('Start an interactive chat session with AI')
87
+ .argument('[prompt]', 'Optional initial prompt')
88
+ .option('-f, --file <path>', 'Include file content as context')
89
+ .option('-p, --provider <provider>', 'Inference provider')
90
+ .option('-m, --model <model>', 'Model to use (if omitted, an interactive picker will appear)')
91
+ .option('--no-cache', 'Disable response caching')
92
+ .option('-d, --dev', 'Skip the prompt and always use developer mode for creation requests', false)
93
+ .action(async (prompt, options) => {
94
+ await this.execute(prompt, options || {});
95
+ });
96
+ return command;
97
+ }
98
+ async execute(prompt, options) {
99
+ let { type, provider } = await this.getProvider(options || {});
100
+ let model = options?.model;
101
+ // In interactive mode (no prompt), show the model picker if no --model was specified
102
+ if (!model && !prompt) {
103
+ const picked = await this.showModelPicker();
104
+ if (!picked)
105
+ return;
106
+ if (picked.provider !== type) {
107
+ const resolved = resolveProvider(this.configManager, picked.provider);
108
+ type = resolved.type;
109
+ provider = resolved.provider;
110
+ }
111
+ model = picked.model;
112
+ }
113
+ const available = await provider.isAvailable();
114
+ if (!available) {
115
+ logger.error(`${provider.name} is not available. Check your configuration.`);
116
+ logger.info(`Run: agent-baba-d config --help`);
117
+ return;
118
+ }
119
+ const cacheEnabled = options?.cache !== false;
120
+ if (prompt) {
121
+ if (options?.dev || hasCreationIntent(prompt)) {
122
+ const proceed = options?.dev || await promptDeveloperMode(prompt);
123
+ if (proceed) {
124
+ await runDeveloperMode(prompt, this.configManager, { provider: type, model });
125
+ return;
126
+ }
127
+ }
128
+ const result = await this.generateWithContext(provider, prompt, type, { ...options, model }, cacheEnabled);
129
+ console.log('\n' + result);
130
+ return;
131
+ }
132
+ logger.highlight(`\n🧠 Buff Chat — ${provider.name}`);
133
+ if (model) {
134
+ logger.info(`Model: ${model}`);
135
+ }
136
+ logger.info(`Type your messages, or /help for commands, /exit to quit.`);
137
+ logger.info(`💡 Tip: Ask me to "create" something and I'll offer to switch to developer mode!\n`);
138
+ const history = [];
139
+ const effectiveModelForHistory = model || this.configManager.getProviderConfig(type).config.model || 'default';
140
+ this.devModeAuto = false;
141
+ while (true) {
142
+ const message = await this.readMultiLineInput('You:');
143
+ if (!message)
144
+ continue;
145
+ if (message.startsWith('/')) {
146
+ if (this.handleCommand(message, provider, model))
147
+ break;
148
+ continue;
149
+ }
150
+ if (hasCreationIntent(message) || this.devModeAuto) {
151
+ const proceed = this.devModeAuto || await promptDeveloperMode(message);
152
+ if (proceed) {
153
+ await runDeveloperMode(message, this.configManager, { provider: type, model });
154
+ const continueAnswer = await inquirer.prompt([
155
+ {
156
+ type: 'input',
157
+ name: 'cont',
158
+ message: 'Press Enter to continue chatting, or type /exit to quit:',
159
+ prefix: '',
160
+ },
161
+ ]);
162
+ if (continueAnswer.cont.trim().toLowerCase() === '/exit' || continueAnswer.cont.trim().toLowerCase() === '/quit') {
163
+ console.log('Goodbye!');
164
+ break;
165
+ }
166
+ continue;
167
+ }
168
+ }
169
+ history.push({ role: 'user', content: message });
170
+ const contextStr = history.map((h) => `${h.role}: ${h.content}`).join('\n');
171
+ const cache = getCache();
172
+ const effectiveModel = effectiveModelForHistory;
173
+ if (cacheEnabled) {
174
+ const cachedResult = await cache.get(message, effectiveModel, type);
175
+ if (cachedResult) {
176
+ console.log(`\n${cachedResult}\n`);
177
+ history.push({ role: 'assistant', content: cachedResult });
178
+ continue;
179
+ }
180
+ }
181
+ const context = new ContextParser().parseFromString(contextStr, 'chat');
182
+ const fullPrompt = ContextParser.formatContext(context);
183
+ if (typeof provider.generateStream === 'function') {
184
+ console.log();
185
+ try {
186
+ const result = await provider.generateStream(fullPrompt, { ...options, model: effectiveModel }, (token) => {
187
+ process.stdout.write(token);
188
+ });
189
+ console.log('\n');
190
+ if (cacheEnabled) {
191
+ await cache.set(message, result, effectiveModel, type);
192
+ }
193
+ history.push({ role: 'assistant', content: result });
194
+ }
195
+ catch (err) {
196
+ console.log();
197
+ logger.error(String(err));
198
+ }
199
+ }
200
+ else {
201
+ const spinner = ora('Thinking...').start();
202
+ try {
203
+ const result = await provider.generate(fullPrompt, { ...options, model: effectiveModel });
204
+ spinner.stop();
205
+ console.log(`\n${result}\n`);
206
+ if (cacheEnabled) {
207
+ await cache.set(message, result, effectiveModel, type);
208
+ }
209
+ history.push({ role: 'assistant', content: result });
210
+ }
211
+ catch (err) {
212
+ spinner.fail('Failed to generate response');
213
+ logger.error(String(err));
214
+ }
215
+ }
216
+ }
217
+ // Store chat session in history when exiting
218
+ if (history.length > 0) {
219
+ try {
220
+ const historyMessages = history.map((h) => ({
221
+ role: h.role,
222
+ content: h.content,
223
+ timestamp: Date.now(),
224
+ }));
225
+ const chatHistory = getChatHistory();
226
+ const sessionId = chatHistory.storeSession(historyMessages, type, effectiveModelForHistory);
227
+ logger.debug(`Chat session stored: ${sessionId}`);
228
+ }
229
+ catch (err) {
230
+ // Non-critical — history storage failure shouldn't affect user experience
231
+ logger.debug(`Failed to store chat session: ${err}`);
232
+ }
233
+ }
234
+ }
235
+ /**
236
+ * Show a categorized model picker that groups models by capability.
237
+ *
238
+ * Example output:
239
+ *
240
+ * 🎯 Available Models
241
+ *
242
+ * 💬 Chat (General conversation)
243
+ * 1. 🟢 llama-3.3-70b-versatile ⭐ Best all-rounder — strong at...
244
+ * 2. 🟢 gemma2-9b-it
245
+ *
246
+ * 💻 Code (Code generation, programming)
247
+ * 3. 🔷 gemini-2.0-flash-exp ⭐ Latest Gemini — fast, multimodal...
248
+ *
249
+ * Enter a number (0-8):
250
+ */
251
+ async showModelPicker() {
252
+ return showModelPicker(this.configManager);
253
+ }
254
+ /**
255
+ * Read multi-line input from stdin using readline.
256
+ *
257
+ * - First line prompt: "You: "
258
+ * - Continuation lines prompt: " > "
259
+ * - Pressing Enter with no text on the first line re-prompts
260
+ * - An empty line after non-empty input submits the message
261
+ * - This allows pasting multi-line text (each line collected), then Enter to submit
262
+ */
263
+ readMultiLineInput(prompt) {
264
+ return new Promise((resolve) => {
265
+ const rl = createInterface({
266
+ input: process.stdin,
267
+ output: process.stdout,
268
+ prompt: prompt + ' ',
269
+ });
270
+ const lines = [];
271
+ let isFirstLine = true;
272
+ rl.on('line', (line) => {
273
+ if (isFirstLine) {
274
+ isFirstLine = false;
275
+ if (line === '') {
276
+ // Just pressed Enter on first line with no text — re-prompt
277
+ rl.prompt();
278
+ isFirstLine = true;
279
+ return;
280
+ }
281
+ lines.push(line);
282
+ // Commands (starting with '/') should submit immediately — no continuation needed
283
+ if (line.startsWith('/')) {
284
+ rl.close();
285
+ return;
286
+ }
287
+ rl.setPrompt(' > ');
288
+ rl.prompt();
289
+ }
290
+ else {
291
+ if (line === '') {
292
+ // Empty line on continuation — submit the full message
293
+ rl.close();
294
+ }
295
+ else {
296
+ lines.push(line);
297
+ rl.prompt();
298
+ }
299
+ }
300
+ });
301
+ rl.on('close', () => {
302
+ resolve(lines.join('\n'));
303
+ });
304
+ rl.prompt();
305
+ });
306
+ }
307
+ handleCommand(cmd, provider, model) {
308
+ switch (cmd.toLowerCase()) {
309
+ case '/exit':
310
+ case '/quit':
311
+ console.log('Goodbye!');
312
+ return true;
313
+ case '/help':
314
+ console.log(`
315
+ Commands:
316
+ /exit, /quit Exit the chat
317
+ /clear Clear conversation history
318
+ /info Show provider & model info
319
+ /help Show this help
320
+ /dev Toggle developer mode (auto-create files)
321
+ /search <query> Search past conversations by keyword
322
+ `.trim());
323
+ break;
324
+ case '/clear':
325
+ console.log('Conversation history cleared.');
326
+ break;
327
+ case '/info':
328
+ console.log(`\n${provider.getInfo()}${model ? `\n Model: ${model}` : ''}\n`);
329
+ break;
330
+ case '/dev':
331
+ this.devModeAuto = !this.devModeAuto;
332
+ if (this.devModeAuto) {
333
+ logger.success('✅ Developer mode ACTIVATED — all messages will auto-create files.');
334
+ }
335
+ else {
336
+ logger.info('ℹ️ Developer mode DEACTIVATED — creation requests will ask for confirmation.');
337
+ }
338
+ break;
339
+ case '/search': {
340
+ const searchQuery = cmd.slice(8).trim();
341
+ if (!searchQuery) {
342
+ console.log('Usage: /search <query> — e.g., /search authentication');
343
+ break;
344
+ }
345
+ const history = getChatHistory();
346
+ const results = history.search(searchQuery, 5);
347
+ if (results.length === 0) {
348
+ logger.info(`No past conversations found matching "${searchQuery}".`);
349
+ }
350
+ else {
351
+ logger.highlight(`🔍 Past conversations matching "${searchQuery}":`);
352
+ console.log('');
353
+ for (const session of results) {
354
+ console.log(history.formatSessionSummary(session));
355
+ }
356
+ console.log('');
357
+ logger.info('Use `buff history show <session-id>` to view a full conversation.');
358
+ }
359
+ break;
360
+ }
361
+ default:
362
+ console.log(`Unknown command: ${cmd}. Type /help`);
363
+ }
364
+ return false;
365
+ }
366
+ async generateWithContext(provider, prompt, providerType, options, cacheEnabled = true) {
367
+ let fullPrompt = prompt;
368
+ if (options?.file) {
369
+ const parser = new ContextParser();
370
+ const context = parser.parseFromFiles([options.file]);
371
+ const contextStr = ContextParser.formatContext(context);
372
+ fullPrompt = `${contextStr}\n\n## User Query\n${prompt}`;
373
+ }
374
+ if (typeof provider.generateStream === 'function') {
375
+ const chunks = [];
376
+ await provider.generateStream(fullPrompt, options, (token) => {
377
+ chunks.push(token);
378
+ });
379
+ return chunks.join('');
380
+ }
381
+ const spinner = ora(`Generating with ${provider.name}...`).start();
382
+ try {
383
+ const result = await provider.generate(fullPrompt, options);
384
+ spinner.stop();
385
+ return result;
386
+ }
387
+ catch (err) {
388
+ spinner.fail('Generation failed');
389
+ throw err;
390
+ }
391
+ }
392
+ }
393
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Command } from 'commander';
2
+ import { ConfigManager } from '../config/manager.js';
3
+ /**
4
+ * Base class for all CLI commands
5
+ */
6
+ export declare abstract class BaseCommand {
7
+ protected configManager: ConfigManager;
8
+ constructor();
9
+ /**
10
+ * Create the Commander command
11
+ */
12
+ abstract create(): Command;
13
+ /**
14
+ * Get the provider from CLI options
15
+ */
16
+ protected getProvider(options: {
17
+ provider?: string;
18
+ model?: string;
19
+ }): Promise<{
20
+ type: string;
21
+ provider: import("../index.js").InferenceProvider;
22
+ }>;
23
+ }
24
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;GAEG;AACH,8BAAsB,WAAW;IAC/B,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;;IAMvC;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,OAAO;IAE1B;;OAEG;cACa,WAAW,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;CAI3E"}
@@ -0,0 +1,18 @@
1
+ import { ConfigManager } from '../config/manager.js';
2
+ /**
3
+ * Base class for all CLI commands
4
+ */
5
+ export class BaseCommand {
6
+ configManager;
7
+ constructor() {
8
+ this.configManager = new ConfigManager();
9
+ }
10
+ /**
11
+ * Get the provider from CLI options
12
+ */
13
+ async getProvider(options) {
14
+ const { resolveProvider } = await import('./router.js');
15
+ return resolveProvider(this.configManager, options.provider);
16
+ }
17
+ }
18
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAgB,WAAW;IACrB,aAAa,CAAgB;IAEvC;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAOD;;OAEG;IACO,KAAK,CAAC,WAAW,CAAC,OAA8C;QACxE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxD,OAAO,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { Command } from 'commander';
2
+ import { BaseCommand } from './commands.js';
3
+ /**
4
+ * Config command — manage buff configuration
5
+ * buff config [set|get|list]
6
+ */
7
+ export declare class ConfigCommand extends BaseCommand {
8
+ create(): Command;
9
+ private createSetCommand;
10
+ private createGetCommand;
11
+ private createListCommand;
12
+ private createInitCommand;
13
+ private displayConfig;
14
+ private getValue;
15
+ private setValue;
16
+ private listProviders;
17
+ private initConfig;
18
+ }
19
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C;;;GAGG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,MAAM,IAAI,OAAO;IAejB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,QAAQ;IAwChB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,UAAU;CAOnB"}
@@ -0,0 +1,162 @@
1
+ import { Command } from 'commander';
2
+ import { BaseCommand } from './commands.js';
3
+ import { logger } from '../utils/logger.js';
4
+ /**
5
+ * Config command — manage buff configuration
6
+ * buff config [set|get|list]
7
+ */
8
+ export class ConfigCommand extends BaseCommand {
9
+ create() {
10
+ const command = new Command('config')
11
+ .description('Manage Buff configuration')
12
+ .addCommand(this.createSetCommand())
13
+ .addCommand(this.createGetCommand())
14
+ .addCommand(this.createListCommand())
15
+ .addCommand(this.createInitCommand())
16
+ .action(() => {
17
+ // Show current config when no subcommand is given
18
+ this.displayConfig();
19
+ });
20
+ return command;
21
+ }
22
+ createSetCommand() {
23
+ return new Command('set')
24
+ .description('Set a configuration value')
25
+ .argument('<key>', 'Config key (e.g., defaultProvider, providers.nim.model)')
26
+ .argument('<value>', 'Config value')
27
+ .action((key, value) => {
28
+ this.setValue(key, value);
29
+ });
30
+ }
31
+ createGetCommand() {
32
+ return new Command('get')
33
+ .description('Get a configuration value')
34
+ .argument('[key]', 'Config key (e.g., defaultProvider)')
35
+ .action((key) => {
36
+ if (key) {
37
+ this.getValue(key);
38
+ }
39
+ else {
40
+ this.displayConfig();
41
+ }
42
+ });
43
+ }
44
+ createListCommand() {
45
+ return new Command('list')
46
+ .description('List all providers and their status')
47
+ .action(() => {
48
+ this.listProviders();
49
+ });
50
+ }
51
+ createInitCommand() {
52
+ return new Command('init')
53
+ .description('Initialize configuration interactively')
54
+ .action(() => {
55
+ this.initConfig();
56
+ });
57
+ }
58
+ displayConfig() {
59
+ const config = this.configManager.getAll();
60
+ logger.highlight('\nBuff Configuration\n');
61
+ logger.info(`Default Provider: ${config.defaultProvider}`);
62
+ console.log('');
63
+ for (const [provider, providerConfig] of Object.entries(config.providers)) {
64
+ logger.highlight(`${provider.toUpperCase()}:`);
65
+ for (const [key, value] of Object.entries(providerConfig)) {
66
+ if (key === 'apiKey' && value) {
67
+ const masked = String(value).slice(0, 8) + '...' + String(value).slice(-4);
68
+ console.log(` ${key}: ${masked}`);
69
+ }
70
+ else {
71
+ console.log(` ${key}: ${value || 'not set'}`);
72
+ }
73
+ }
74
+ console.log('');
75
+ }
76
+ }
77
+ getValue(key) {
78
+ const config = this.configManager.getAll();
79
+ const parts = key.split('.');
80
+ let value = config;
81
+ for (const part of parts) {
82
+ if (value && typeof value === 'object' && part in value) {
83
+ value = value[part];
84
+ }
85
+ else {
86
+ logger.error(`Key not found: ${key}`);
87
+ return;
88
+ }
89
+ }
90
+ if (key.includes('apiKey') && value) {
91
+ const masked = String(value).slice(0, 8) + '...' + String(value).slice(-4);
92
+ console.log(`${key}: ${masked}`);
93
+ }
94
+ else {
95
+ console.log(`${key}: ${value}`);
96
+ }
97
+ }
98
+ setValue(key, value) {
99
+ const config = this.configManager.getAll();
100
+ // Parse the key path to set the value
101
+ const parts = key.split('.');
102
+ if (parts.length === 1) {
103
+ // Top-level keys
104
+ if (key === 'defaultProvider') {
105
+ this.configManager.save({ defaultProvider: value });
106
+ }
107
+ else {
108
+ logger.error(`Unknown config key: ${key}. Use 'providers.<name>.<field>' format.`);
109
+ return;
110
+ }
111
+ }
112
+ else if (parts.length >= 3 && parts[0] === 'providers') {
113
+ const providerName = parts[1];
114
+ const field = parts[2];
115
+ const providerConfig = config.providers[providerName] || {};
116
+ // Coerce numeric values
117
+ let typedValue = value;
118
+ if (!isNaN(Number(value)) && value.trim() !== '') {
119
+ typedValue = Number(value);
120
+ }
121
+ this.configManager.save({
122
+ providers: {
123
+ [providerName]: {
124
+ ...providerConfig,
125
+ [field]: typedValue,
126
+ },
127
+ },
128
+ });
129
+ }
130
+ else {
131
+ logger.error(`Invalid config key format: ${key}. Expected formats:\n defaultProvider\n providers.<name>.<field>`);
132
+ return;
133
+ }
134
+ logger.success(`Set ${key} = ${value}`);
135
+ }
136
+ listProviders() {
137
+ const config = this.configManager.getAll();
138
+ logger.highlight('\nAvailable Providers:\n');
139
+ const providers = [
140
+ { name: 'NVIDIA NIM', type: 'nim', status: this.configManager.hasRequiredCredentials('nim') ? '✅' : '❌ No API key' },
141
+ { name: 'Google Gemini', type: 'gemini', status: this.configManager.hasRequiredCredentials('gemini') ? '✅' : '❌ No API key' },
142
+ { name: 'OpenRouter', type: 'openrouter', status: this.configManager.hasRequiredCredentials('openrouter') ? '✅' : '❌ No API key' },
143
+ { name: 'Groq', type: 'groq', status: this.configManager.hasRequiredCredentials('groq') ? '✅' : '❌ No API key' },
144
+ { name: 'Local', type: 'local', status: '✅ Always available' },
145
+ ];
146
+ for (const p of providers) {
147
+ const model = config.providers[p.type]?.model || 'default';
148
+ const isDefault = config.defaultProvider === p.type ? ' (default)' : '';
149
+ console.log(` ${p.status} ${p.name}${isDefault}`);
150
+ console.log(` Model: ${model}`);
151
+ console.log('');
152
+ }
153
+ }
154
+ initConfig() {
155
+ logger.info('Configuration already initialized with defaults.');
156
+ logger.info('Edit ~/.buff/buffconfig.json or use: buff config set <key> <value>');
157
+ logger.info('Set API keys via environment variables or the config file.');
158
+ console.log('');
159
+ this.displayConfig();
160
+ }
161
+ }
162
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}