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,347 @@
1
+ /**
2
+ * Workflow command — Lists, runs, and manages workflow templates.
3
+ *
4
+ * Usage:
5
+ * buff workflow list — Show available workflow templates
6
+ * buff workflow run quick-fix "goal" — Run the quick-fix workflow
7
+ * buff workflow search <query> — Search the GitHub workflow registry
8
+ * buff workflow install <template> — Install template from the registry
9
+ * buff workflow publish <template-id> — Prepare a local template for publishing
10
+ * buff workflow info <template> — Show registry template details
11
+ */
12
+ import { Command } from 'commander';
13
+ import ora from 'ora';
14
+ import { BaseCommand } from './commands.js';
15
+ import { Orchestrator } from '../agents/orchestrator.js';
16
+ import { getWorkflowTemplates, getWorkflowTemplate, buildTaskPlanFromTemplate, buildWorkflowOptions } from '../workflow/templates.js';
17
+ import { searchRegistry, installTemplate, getRegistryEntry, getInstalledTemplates, validateForPublish, prepareForPublish, getPublishUrl, clearRegistryCache, checkForUpgrades, } from '../workflow/registry.js';
18
+ import { logger } from '../utils/logger.js';
19
+ import { printOrchestrationResult } from './execute.js';
20
+ /**
21
+ * Workflow command for listing, running, and managing workflow templates.
22
+ */
23
+ export class WorkflowCommand extends BaseCommand {
24
+ create() {
25
+ const command = new Command('workflow')
26
+ .description('Run, manage, and share workflow templates');
27
+ // ── list ──────────────────────────────────────────────────────────────
28
+ command
29
+ .command('list')
30
+ .description('Show available workflow templates (built-in + installed)')
31
+ .action(() => {
32
+ this.listWorkflows();
33
+ });
34
+ // ── run ───────────────────────────────────────────────────────────────
35
+ command
36
+ .command('run')
37
+ .description('Run a workflow template')
38
+ .argument('<template>', 'Template name')
39
+ .argument('<goal>', 'The goal to accomplish')
40
+ .option('-p, --provider <provider>', 'Inference provider override')
41
+ .option('-m, --model <model>', 'Model override')
42
+ .option('--dry-run', 'Preview changes without writing to disk', false)
43
+ .option('-v, --verbose', 'Show detailed agent output', false)
44
+ .action(async (template, goal, options) => {
45
+ await this.runWorkflow(template, goal, options);
46
+ });
47
+ // ── search ────────────────────────────────────────────────────────────
48
+ command
49
+ .command('search')
50
+ .description('Search the GitHub workflow template registry')
51
+ .argument('<query>', 'Search query (e.g., "security", "test", "react")')
52
+ .option('--refresh', 'Force refresh the registry cache')
53
+ .action(async (query, options) => {
54
+ await this.searchRegistry(query, options);
55
+ });
56
+ // ── install ──────────────────────────────────────────────────────────
57
+ command
58
+ .command('install')
59
+ .description('Install a workflow template from the GitHub registry')
60
+ .argument('<template>', 'Template name from the registry (use `buff workflow search` to find templates)')
61
+ .action(async (template) => {
62
+ await this.installTemplate(template);
63
+ });
64
+ // ── publish ──────────────────────────────────────────────────────────
65
+ command
66
+ .command('publish')
67
+ .description('Prepare a local workflow template for publishing to the registry')
68
+ .argument('<template-id>', 'The ID of the local template to publish (must exist in ~/.buff/workflows/)')
69
+ .action(async (templateId) => {
70
+ await this.preparePublish(templateId);
71
+ });
72
+ // ── info ──────────────────────────────────────────────────────────────
73
+ command
74
+ .command('info')
75
+ .description('Show detailed information about a registry template')
76
+ .argument('<template>', 'Template name from the registry')
77
+ .action(async (template) => {
78
+ await this.showInfo(template);
79
+ });
80
+ // ── upgrade ────────────────────────────────────────────────────────────
81
+ command
82
+ .command('upgrade')
83
+ .description('Check for and apply template upgrades from the registry')
84
+ .action(async () => {
85
+ await this.checkUpgrades();
86
+ });
87
+ return command;
88
+ }
89
+ // ─── Action Handlers ──────────────────────────────────────────────────
90
+ listWorkflows() {
91
+ const builtin = getWorkflowTemplates();
92
+ const installed = getInstalledTemplates();
93
+ logger.highlight(`${'═'.repeat(60)}`);
94
+ logger.highlight(' 📋 Available Workflow Templates');
95
+ logger.highlight(`${'═'.repeat(60)}`);
96
+ // Built-in templates
97
+ console.log(`\n 📦 Built-in (${builtin.length}):`);
98
+ for (const t of builtin) {
99
+ const tags = t.tags ? ` [${t.tags.join(', ')}]` : '';
100
+ console.log(` ${t.id.padEnd(22)} ${t.description.slice(0, 50)}...${tags}`);
101
+ console.log(` ${' '.repeat(24)} Steps: ${t.steps.length}${t.useMemory ? ' 🧠 memory' : ''}`);
102
+ }
103
+ // Installed registry templates
104
+ if (installed.length > 0) {
105
+ console.log(`\n 🌐 Installed from registry (${installed.length}):`);
106
+ for (const t of installed) {
107
+ const ver = t.version ? ` v${t.version}` : '';
108
+ const author = t.author ? ` by ${t.author}` : '';
109
+ console.log(` ${t.id.padEnd(22)} ${t.description.slice(0, 50)}...${ver}${author}`);
110
+ }
111
+ }
112
+ console.log(`\n 💡 Use 'buff workflow search <query>' to find templates in the registry.`);
113
+ console.log(` Use 'buff workflow install <name>' to install from the registry.`);
114
+ console.log('');
115
+ }
116
+ async runWorkflow(templateId, goal, options) {
117
+ // Check built-in templates first
118
+ let template = getWorkflowTemplate(templateId);
119
+ // If not found, check installed registry templates
120
+ if (!template) {
121
+ const installed = getInstalledTemplates();
122
+ template = installed.find((t) => t.id === templateId);
123
+ }
124
+ // If still not found, offer to install from registry
125
+ if (!template) {
126
+ logger.error(`Unknown workflow template: '${templateId}'`);
127
+ console.log(`\n 💡 Search the registry: buff workflow search ${templateId}`);
128
+ console.log(` Install from registry: buff workflow install ${templateId}`);
129
+ console.log(` Available built-in: ${getWorkflowTemplates().map((t) => t.id).join(', ')}`);
130
+ return;
131
+ }
132
+ // Build the task plan from the template
133
+ const taskPlan = buildTaskPlanFromTemplate(template, goal);
134
+ const workflowOptions = buildWorkflowOptions(template, options);
135
+ if (options.verbose) {
136
+ logger.info(`Workflow: ${template.name}`);
137
+ logger.info(`Template: ${template.id}`);
138
+ logger.info(`Steps: ${taskPlan.length}`);
139
+ if (template.recommendedModels) {
140
+ logger.info('Recommended models:');
141
+ for (const [agent, model] of Object.entries(template.recommendedModels)) {
142
+ logger.info(` ${agent}: ${model}`);
143
+ }
144
+ }
145
+ console.log('');
146
+ }
147
+ // Execute via orchestrator with the pre-built plan
148
+ const spinner = ora({
149
+ text: `Running workflow '${template.id}'...`,
150
+ spinner: 'dots',
151
+ }).start();
152
+ try {
153
+ const orchestrator = new Orchestrator(this.configManager);
154
+ const result = await orchestrator.execute(goal, {
155
+ ...workflowOptions,
156
+ provider: options.provider,
157
+ model: options.model,
158
+ dryRun: options.dryRun,
159
+ verbose: options.verbose,
160
+ prefillPlan: taskPlan, // Skip the planner, use the pre-built plan
161
+ });
162
+ spinner.stop();
163
+ console.log('');
164
+ printOrchestrationResult(result);
165
+ }
166
+ catch (err) {
167
+ spinner.fail(`Workflow '${template.id}' failed`);
168
+ logger.error(String(err));
169
+ }
170
+ }
171
+ async searchRegistry(query, options) {
172
+ if (options?.refresh) {
173
+ clearRegistryCache();
174
+ }
175
+ const spinner = ora('Searching workflow registry...').start();
176
+ try {
177
+ const results = await searchRegistry(query);
178
+ spinner.stop();
179
+ if (results.length === 0) {
180
+ logger.info(`No templates found matching "${query}".`);
181
+ console.log(' The registry is at: https://github.com/agent-baba-d/workflows');
182
+ console.log(' You can submit your own templates there!');
183
+ return;
184
+ }
185
+ logger.highlight(`${'═'.repeat(60)}`);
186
+ logger.highlight(` 🔍 Registry Results: "${query}" (${results.length} found)`);
187
+ logger.highlight(`${'═'.repeat(60)}`);
188
+ for (const entry of results) {
189
+ const tags = entry.tags.length > 0 ? ` [${entry.tags.join(', ')}]` : '';
190
+ console.log(`\n ${entry.id.padEnd(22)} v${entry.version} by ${entry.author}`);
191
+ console.log(` ${' '.repeat(24)} ${entry.description.slice(0, 80)}`);
192
+ console.log(` ${' '.repeat(24)} ${entry.stepCount} steps | Updated: ${entry.updatedAt.slice(0, 10)}${tags}`);
193
+ if (entry.sourceUrl) {
194
+ console.log(` ${' '.repeat(24)} ${entry.sourceUrl}`);
195
+ }
196
+ }
197
+ console.log(`\n Install: buff workflow install <template-id>`);
198
+ console.log('');
199
+ }
200
+ catch (err) {
201
+ spinner.fail('Registry search failed');
202
+ logger.error(String(err));
203
+ }
204
+ }
205
+ async installTemplate(templateId) {
206
+ const spinner = ora(`Installing '${templateId}'...`).start();
207
+ try {
208
+ const template = await installTemplate(templateId);
209
+ spinner.stop();
210
+ if (template) {
211
+ const stepCount = template.steps.length;
212
+ logger.success(`Successfully installed '${template.id}'`);
213
+ console.log(` Name: ${template.name}`);
214
+ console.log(` Steps: ${stepCount}`);
215
+ console.log(` Location: ~/.buff/workflows/registry/${template.id}.json`);
216
+ console.log(`\n Run it: buff workflow run ${template.id} "your goal"`);
217
+ }
218
+ }
219
+ catch (err) {
220
+ spinner.fail('Installation failed');
221
+ logger.error(String(err));
222
+ }
223
+ }
224
+ async preparePublish(templateId) {
225
+ console.log('');
226
+ logger.highlight(` 📤 Preparing '${templateId}' for publishing`);
227
+ console.log('');
228
+ // Validate
229
+ const validation = validateForPublish(templateId);
230
+ if (!validation.valid) {
231
+ logger.error('Validation failed:');
232
+ for (const err of validation.errors) {
233
+ console.log(` ❌ ${err}`);
234
+ }
235
+ return;
236
+ }
237
+ if (validation.warnings.length > 0) {
238
+ logger.info('Warnings:');
239
+ for (const w of validation.warnings) {
240
+ console.log(` ⚠️ ${w}`);
241
+ }
242
+ console.log('');
243
+ }
244
+ // Generate the publish-ready JSON
245
+ const publishData = prepareForPublish(templateId);
246
+ if (!publishData)
247
+ return;
248
+ logger.success('Template validated successfully!');
249
+ console.log('');
250
+ // Display the publish data and instructions
251
+ console.log(' 📄 Template data ready for publishing:');
252
+ console.log('');
253
+ // Show a preview (first 500 chars)
254
+ const preview = publishData.length > 500 ? publishData.slice(0, 500) + '\n ...' : publishData;
255
+ for (const line of preview.split('\n')) {
256
+ console.log(` ${line}`);
257
+ }
258
+ console.log('');
259
+ logger.highlight(`${'═'.repeat(60)}`);
260
+ console.log('');
261
+ console.log(' To publish this template:');
262
+ console.log(' 1. Create a pull request at:');
263
+ console.log(` ${getPublishUrl()}`);
264
+ console.log(' 2. Include the template JSON shown above');
265
+ console.log(' 3. The template will be reviewed and added to the registry');
266
+ console.log('');
267
+ console.log(' Or visit the registry repo:');
268
+ console.log(' https://github.com/agent-baba-d/workflows');
269
+ console.log('');
270
+ }
271
+ async checkUpgrades() {
272
+ const spinner = ora('Checking for template upgrades...').start();
273
+ try {
274
+ const upgrades = await checkForUpgrades();
275
+ spinner.stop();
276
+ if (upgrades.length === 0) {
277
+ logger.success('All installed templates are up to date.');
278
+ return;
279
+ }
280
+ logger.highlight(`${'═'.repeat(60)}`);
281
+ logger.highlight(` ⬆️ Template Upgrades Available (${upgrades.length})`);
282
+ logger.highlight(`${'═'.repeat(60)}`);
283
+ for (const upgrade of upgrades) {
284
+ console.log(`\n ${upgrade.id}`);
285
+ console.log(` Current: v${upgrade.currentVersion}`);
286
+ console.log(` Latest: v${upgrade.latestVersion}`);
287
+ }
288
+ console.log(`\n To upgrade a template: buff workflow install <template-id>`);
289
+ console.log(' (This will overwrite the local version with the latest from the registry)');
290
+ console.log('');
291
+ }
292
+ catch (err) {
293
+ spinner.fail('Upgrade check failed');
294
+ logger.error(String(err));
295
+ }
296
+ }
297
+ async showInfo(templateId) {
298
+ const spinner = ora('Fetching template info...').start();
299
+ try {
300
+ const entry = await getRegistryEntry(templateId);
301
+ spinner.stop();
302
+ if (!entry) {
303
+ // Check if it's a built-in template
304
+ const builtin = getWorkflowTemplate(templateId);
305
+ if (builtin) {
306
+ logger.highlight(` 📋 ${builtin.name} (built-in)`);
307
+ console.log('');
308
+ console.log(` ID: ${builtin.id}`);
309
+ console.log(` Description: ${builtin.description}`);
310
+ console.log(` Steps: ${builtin.steps.length}`);
311
+ for (const step of builtin.steps) {
312
+ console.log(` ▶ [${step.agentType}] ${step.description}`);
313
+ }
314
+ if (builtin.recommendedModels) {
315
+ console.log(`\n Recommended models:`);
316
+ for (const [agent, model] of Object.entries(builtin.recommendedModels)) {
317
+ console.log(` ${agent}: ${model}`);
318
+ }
319
+ }
320
+ console.log('');
321
+ return;
322
+ }
323
+ logger.error(`Template '${templateId}' not found in registry or built-in templates.`);
324
+ logger.info(`Search: buff workflow search ${templateId}`);
325
+ return;
326
+ }
327
+ logger.highlight(` 📋 ${entry.name} (registry)`);
328
+ console.log('');
329
+ console.log(` ID: ${entry.id}`);
330
+ console.log(` Version: ${entry.version}`);
331
+ console.log(` Author: ${entry.author}`);
332
+ console.log(` Description: ${entry.description}`);
333
+ console.log(` Steps: ${entry.stepCount}`);
334
+ if (entry.tags.length > 0) {
335
+ console.log(` Tags: ${entry.tags.join(', ')}`);
336
+ }
337
+ console.log(` Updated: ${entry.updatedAt}`);
338
+ console.log(` \n Install: buff workflow install ${entry.id}`);
339
+ console.log('');
340
+ }
341
+ catch (err) {
342
+ spinner.fail('Failed to fetch template info');
343
+ logger.error(String(err));
344
+ }
345
+ }
346
+ }
347
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { BuffConfig, ProviderType, ProviderConfig } from './types.js';
2
+ export declare class ConfigManager {
3
+ private config;
4
+ private env;
5
+ private configDir;
6
+ private configPath;
7
+ constructor(configDir?: string);
8
+ /**
9
+ * Load config from disk, merging with defaults and env vars
10
+ */
11
+ private loadConfig;
12
+ /**
13
+ * Override API keys from environment variables
14
+ * Environment variables take priority over the config file.
15
+ */
16
+ private overrideFromEnv;
17
+ /**
18
+ * Get configuration for a specific provider
19
+ */
20
+ getProviderConfig(provider?: ProviderType): {
21
+ type: ProviderType;
22
+ config: ProviderConfig;
23
+ };
24
+ /**
25
+ * Get the full config
26
+ */
27
+ getAll(): BuffConfig;
28
+ /**
29
+ * Save current configuration to disk
30
+ */
31
+ save(config: Partial<BuffConfig>): void;
32
+ /**
33
+ * Check if a provider has the required API key
34
+ */
35
+ hasRequiredCredentials(provider: ProviderType): boolean;
36
+ }
37
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAetE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,GAAG,CAAqC;IAChD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,SAAS,CAAC,EAAE,MAAM;IAO9B;;OAEG;IACH,OAAO,CAAC,UAAU;IA4ClB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,iBAAiB,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE;IAW1F;;OAEG;IACH,MAAM,IAAI,UAAU;IAIpB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAuBvC;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;CAIxD"}
@@ -0,0 +1,147 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { loadEnv } from '../utils/env.js';
5
+ import { logger } from '../utils/logger.js';
6
+ const DEFAULT_CONFIG = {
7
+ defaultProvider: 'local',
8
+ providers: {
9
+ nim: { model: 'meta/llama-3.1-8b-instruct', temperature: 0.7, maxTokens: 4096 },
10
+ gemini: { model: 'gemini-2.0-flash-exp', temperature: 0.7, maxTokens: 8192 },
11
+ openrouter: { model: 'mistralai/mistral-7b-instruct', temperature: 0.7, maxTokens: 4096 },
12
+ groq: { model: 'llama-3.3-70b-versatile', temperature: 0.7, maxTokens: 4096 },
13
+ local: { runner: 'ollama', model: 'llama2', temperature: 0.7, maxTokens: 4096 },
14
+ },
15
+ };
16
+ export class ConfigManager {
17
+ config;
18
+ env;
19
+ configDir;
20
+ configPath;
21
+ constructor(configDir) {
22
+ this.env = loadEnv();
23
+ this.configDir = configDir || join(homedir(), '.buff');
24
+ this.configPath = join(this.configDir, 'buffconfig.json');
25
+ this.config = this.loadConfig();
26
+ }
27
+ /**
28
+ * Load config from disk, merging with defaults and env vars
29
+ */
30
+ loadConfig() {
31
+ // Deep clone DEFAULT_CONFIG to avoid mutating the module-level constant
32
+ const config = {
33
+ ...DEFAULT_CONFIG,
34
+ providers: {
35
+ ...DEFAULT_CONFIG.providers,
36
+ },
37
+ };
38
+ // Deep merge providers defaults
39
+ for (const key of Object.keys(config.providers)) {
40
+ config.providers[key] = { ...config.providers[key] };
41
+ }
42
+ if (existsSync(this.configPath)) {
43
+ try {
44
+ const raw = readFileSync(this.configPath, 'utf-8');
45
+ const userConfig = JSON.parse(raw);
46
+ if (userConfig.defaultProvider) {
47
+ config.defaultProvider = userConfig.defaultProvider;
48
+ }
49
+ if (userConfig.providers) {
50
+ for (const [key, value] of Object.entries(userConfig.providers)) {
51
+ const provider = key;
52
+ if (config.providers[provider]) {
53
+ config.providers[provider] = { ...config.providers[provider], ...value };
54
+ }
55
+ else {
56
+ config.providers[provider] = value;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // If config is corrupted, fall back to defaults
63
+ }
64
+ }
65
+ // Override API keys from environment variables
66
+ this.overrideFromEnv(config);
67
+ return config;
68
+ }
69
+ /**
70
+ * Override API keys from environment variables
71
+ * Environment variables take priority over the config file.
72
+ */
73
+ overrideFromEnv(config) {
74
+ // Debug logging to help troubleshoot env var detection
75
+ const envVarsChecked = [];
76
+ if (this.env.NVIDIA_NIM_API_KEY) {
77
+ config.providers.nim.apiKey = this.env.NVIDIA_NIM_API_KEY;
78
+ envVarsChecked.push('NVIDIA_NIM_API_KEY');
79
+ }
80
+ if (this.env.GEMINI_API_KEY) {
81
+ config.providers.gemini.apiKey = this.env.GEMINI_API_KEY;
82
+ envVarsChecked.push('GEMINI_API_KEY');
83
+ }
84
+ if (this.env.OPENROUTER_API_KEY) {
85
+ config.providers.openrouter.apiKey = this.env.OPENROUTER_API_KEY;
86
+ envVarsChecked.push('OPENROUTER_API_KEY');
87
+ }
88
+ if (this.env.GROQ_API_KEY) {
89
+ config.providers.groq.apiKey = this.env.GROQ_API_KEY;
90
+ envVarsChecked.push('GROQ_API_KEY');
91
+ }
92
+ if (envVarsChecked.length > 0) {
93
+ logger.debug(`Config: Loaded API keys from env vars: ${envVarsChecked.join(', ')}`);
94
+ }
95
+ else {
96
+ logger.debug('Config: No API keys found in environment variables. Use --debug to see more.');
97
+ }
98
+ }
99
+ /**
100
+ * Get configuration for a specific provider
101
+ */
102
+ getProviderConfig(provider) {
103
+ const type = provider || this.config.defaultProvider;
104
+ const config = this.config.providers[type];
105
+ if (!config) {
106
+ throw new Error(`No configuration found for provider '${type}'`);
107
+ }
108
+ return { type, config };
109
+ }
110
+ /**
111
+ * Get the full config
112
+ */
113
+ getAll() {
114
+ return { ...this.config };
115
+ }
116
+ /**
117
+ * Save current configuration to disk
118
+ */
119
+ save(config) {
120
+ if (!existsSync(this.configDir)) {
121
+ mkdirSync(this.configDir, { recursive: true });
122
+ }
123
+ // Merge with existing
124
+ if (config.defaultProvider) {
125
+ this.config.defaultProvider = config.defaultProvider;
126
+ }
127
+ if (config.providers) {
128
+ for (const [key, value] of Object.entries(config.providers)) {
129
+ const provider = key;
130
+ this.config.providers[provider] = {
131
+ ...this.config.providers[provider],
132
+ ...value,
133
+ };
134
+ }
135
+ }
136
+ writeFileSync(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
137
+ }
138
+ /**
139
+ * Check if a provider has the required API key
140
+ */
141
+ hasRequiredCredentials(provider) {
142
+ if (provider === 'local')
143
+ return true; // Local doesn't need API key
144
+ return !!this.config.providers[provider]?.apiKey;
145
+ }
146
+ }
147
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Supported inference provider identifiers
3
+ */
4
+ export type ProviderType = 'nim' | 'gemini' | 'openrouter' | 'groq' | 'local';
5
+ /**
6
+ * Local model runner options
7
+ */
8
+ export type LocalRunner = 'ollama' | 'huggingface' | 'ggml';
9
+ /**
10
+ * Provider-specific configuration
11
+ */
12
+ export interface ProviderConfig {
13
+ apiKey?: string;
14
+ model?: string;
15
+ runner?: LocalRunner;
16
+ baseUrl?: string;
17
+ temperature?: number;
18
+ maxTokens?: number;
19
+ }
20
+ /** Team collaboration settings */
21
+ export interface TeamConfig {
22
+ /** Git URL for the team's shared memory/templates repo */
23
+ repository?: string;
24
+ /** Local path to the team data directory */
25
+ localPath?: string;
26
+ /** Branch to sync with */
27
+ branch?: string;
28
+ /** Auto-sync interval in minutes (0 = disabled) */
29
+ autoSyncMinutes?: number;
30
+ /** Whether to share trajectories with the team */
31
+ shareTrajectories?: boolean;
32
+ }
33
+ /**
34
+ * Full configuration schema for .buffconfig.json
35
+ */
36
+ export interface BuffConfig {
37
+ defaultProvider: ProviderType;
38
+ providers: Record<ProviderType, ProviderConfig>;
39
+ /** Team collaboration config */
40
+ team?: TeamConfig;
41
+ }
42
+ /**
43
+ * Inference options passed to each generation call
44
+ * Note: provider is string to allow plugin-based providers
45
+ */
46
+ export interface InferenceOptions {
47
+ model?: string;
48
+ temperature?: number;
49
+ maxTokens?: number;
50
+ provider?: string;
51
+ stream?: boolean;
52
+ }
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAChD,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}