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,49 @@
1
+ /**
2
+ * A model descriptor returned by listModels()
3
+ */
4
+ export interface ModelDescriptor {
5
+ id: string;
6
+ name: string;
7
+ provider: string;
8
+ owner?: string;
9
+ description?: string;
10
+ /**
11
+ * Category tags indicating what this model is good for.
12
+ * Examples: 'chat', 'code', 'fast', 'reasoning', 'vision'
13
+ * Populated by the model-catalog utility when listing models.
14
+ */
15
+ tags?: string[];
16
+ }
17
+ import { InferenceOptions } from '../config/types.js';
18
+ /**
19
+ * Unified inference provider interface.
20
+ * All adapters (local, nim, gemini, openrouter) implement this.
21
+ */
22
+ export interface InferenceProvider {
23
+ /** Display name for the provider */
24
+ readonly name: string;
25
+ /**
26
+ * Generate a completion for the given prompt.
27
+ * Returns the generated text content.
28
+ */
29
+ generate(prompt: string, options?: InferenceOptions): Promise<string>;
30
+ /**
31
+ * Generate a streaming completion for the given prompt.
32
+ * Tokens are delivered to onToken as they arrive.
33
+ * Returns the full generated text content.
34
+ */
35
+ generateStream?(prompt: string, options: InferenceOptions | undefined, onToken: (token: string) => void): Promise<string>;
36
+ /**
37
+ * Check if the provider is properly configured and available
38
+ */
39
+ isAvailable(): Promise<boolean>;
40
+ /**
41
+ * Get a description of the current provider configuration
42
+ */
43
+ getInfo(): string;
44
+ /**
45
+ * List available models from this provider
46
+ */
47
+ listModels(): Promise<ModelDescriptor[]>;
48
+ }
49
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/inference/interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE;;;;OAIG;IACH,cAAc,CAAC,CACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/inference/interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { InferenceProvider, ModelDescriptor } from './interface.js';
2
+ import { InferenceOptions, ProviderConfig } from '../config/types.js';
3
+ /**
4
+ * Local Model Adapter
5
+ * Supports Ollama, Hugging Face Transformers, and GGML models
6
+ */
7
+ export declare class LocalAdapter implements InferenceProvider {
8
+ readonly name = "Local";
9
+ private config;
10
+ constructor(config: ProviderConfig);
11
+ generate(prompt: string, options?: InferenceOptions): Promise<string>; /**
12
+ * Generate using Ollama HTTP API
13
+ */
14
+ private generateOllama;
15
+ /**
16
+ * Stream tokens from Ollama's HTTP API using newline-delimited JSON.
17
+ * Ollama's streaming format returns one JSON object per line with a `response` field.
18
+ */
19
+ private generateOllamaStream;
20
+ /**
21
+ * Generate using Hugging Face Transformers (via Python)
22
+ * Requires transformers Python package to be installed
23
+ */
24
+ private generateHuggingFace;
25
+ /**
26
+ * Generate using a GGML model binary
27
+ * Expects a path to a GGML-compatible model file or the llama.cpp binary
28
+ */
29
+ private generateGGML;
30
+ generateStream(prompt: string, options: InferenceOptions | undefined, onToken: (token: string) => void): Promise<string>;
31
+ isAvailable(): Promise<boolean>;
32
+ getInfo(): string;
33
+ listModels(): Promise<ModelDescriptor[]>;
34
+ }
35
+ //# sourceMappingURL=local-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-adapter.d.ts","sourceRoot":"","sources":["../../src/inference/local-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AActE;;;GAGG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IAI5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,EAa1E;;KAEA;YACa,cAAc;IAsC5B;;;OAGG;YACW,oBAAoB;IA+ElC;;;OAGG;YACW,mBAAmB;IA8EjC;;;OAGG;YACW,YAAY;IA0DpB,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC;IAiBZ,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC,OAAO,IAAI,MAAM;IAKX,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;CAqB/C"}
@@ -0,0 +1,311 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { spawn } from 'node:child_process';
3
+ import { existsSync } from 'node:fs';
4
+ import { getModelTags } from './model-catalog.js';
5
+ import { getCostTracker } from '../learning/cost-tracker.js';
6
+ const OLLAMA_API_BASE = 'http://localhost:11434';
7
+ /**
8
+ * Local Model Adapter
9
+ * Supports Ollama, Hugging Face Transformers, and GGML models
10
+ */
11
+ export class LocalAdapter {
12
+ name = 'Local';
13
+ config;
14
+ constructor(config) {
15
+ this.config = config;
16
+ }
17
+ async generate(prompt, options) {
18
+ const runner = this.config.runner || 'ollama';
19
+ switch (runner) {
20
+ case 'ollama':
21
+ return this.generateOllama(prompt, options);
22
+ case 'huggingface':
23
+ return this.generateHuggingFace(prompt, options);
24
+ case 'ggml':
25
+ return this.generateGGML(prompt, options);
26
+ default:
27
+ throw new Error(`Unknown local runner: ${runner}. Supported: ollama, huggingface, ggml`);
28
+ }
29
+ } /**
30
+ * Generate using Ollama HTTP API
31
+ */
32
+ async generateOllama(prompt, options) {
33
+ const model = options?.model || this.config.model || 'llama2';
34
+ const temperature = options?.temperature ?? this.config.temperature ?? 0.7;
35
+ logger.debug(`Ollama: Generating with model=${model}, temperature=${temperature}`);
36
+ const response = await fetch(`${OLLAMA_API_BASE}/api/generate`, {
37
+ method: 'POST',
38
+ headers: { 'Content-Type': 'application/json' },
39
+ body: JSON.stringify({
40
+ model,
41
+ prompt,
42
+ stream: false,
43
+ options: {
44
+ temperature,
45
+ },
46
+ }),
47
+ });
48
+ if (!response.ok) {
49
+ const errorBody = await response.text();
50
+ throw new Error(`Ollama API error (${response.status}): ${errorBody}\n` +
51
+ `Ensure Ollama is running: ollama serve`);
52
+ }
53
+ const data = (await response.json());
54
+ const content = data.response || '';
55
+ // Track cost (local models are free, but we still track usage)
56
+ try {
57
+ getCostTracker().recordCallEstimated('local', model, prompt, content);
58
+ }
59
+ catch { /* Non-critical */ }
60
+ return content;
61
+ }
62
+ /**
63
+ * Stream tokens from Ollama's HTTP API using newline-delimited JSON.
64
+ * Ollama's streaming format returns one JSON object per line with a `response` field.
65
+ */
66
+ async generateOllamaStream(prompt, model, temperature, onToken) {
67
+ const response = await fetch(`${OLLAMA_API_BASE}/api/generate`, {
68
+ method: 'POST',
69
+ headers: { 'Content-Type': 'application/json' },
70
+ body: JSON.stringify({
71
+ model,
72
+ prompt,
73
+ stream: true,
74
+ options: { temperature },
75
+ }),
76
+ });
77
+ if (!response.ok) {
78
+ const errorBody = await response.text();
79
+ throw new Error(`Ollama streaming API error (${response.status}): ${errorBody}\n` +
80
+ `Ensure Ollama is running: ollama serve`);
81
+ }
82
+ const reader = response.body?.getReader();
83
+ if (!reader) {
84
+ throw new Error('Ollama response body is not readable');
85
+ }
86
+ const decoder = new TextDecoder();
87
+ const fullContent = [];
88
+ let buffer = '';
89
+ try {
90
+ while (true) {
91
+ const { done, value } = await reader.read();
92
+ if (done)
93
+ break;
94
+ buffer += decoder.decode(value, { stream: true });
95
+ // Ollama sends newline-delimited JSON: one object per line
96
+ const lines = buffer.split('\n');
97
+ buffer = lines.pop() || ''; // Keep incomplete line in buffer
98
+ for (const line of lines) {
99
+ const trimmed = line.trim();
100
+ if (!trimmed)
101
+ continue;
102
+ try {
103
+ const parsed = JSON.parse(trimmed);
104
+ // Each chunk has a `response` field with the token text
105
+ if (parsed.response) {
106
+ fullContent.push(parsed.response);
107
+ onToken(parsed.response);
108
+ }
109
+ // `done: true` signals the end of the stream
110
+ if (parsed.done) {
111
+ break;
112
+ }
113
+ }
114
+ catch {
115
+ // Skip malformed JSON lines
116
+ }
117
+ }
118
+ }
119
+ }
120
+ finally {
121
+ reader.releaseLock();
122
+ }
123
+ const content = fullContent.join('');
124
+ // Track cost for streaming (local models are free, tracks usage)
125
+ try {
126
+ getCostTracker().recordCallEstimated('local', model, prompt, content);
127
+ }
128
+ catch { /* Non-critical */ }
129
+ return content;
130
+ }
131
+ /**
132
+ * Generate using Hugging Face Transformers (via Python)
133
+ * Requires transformers Python package to be installed
134
+ */
135
+ async generateHuggingFace(prompt, options) {
136
+ const model = options?.model || this.config.model || 'microsoft/phi-2';
137
+ const maxTokens = options?.maxTokens ?? this.config.maxTokens ?? 512;
138
+ logger.debug(`HuggingFace: Generating with model=${model}, maxTokens=${maxTokens}`);
139
+ // Use a Python script for reliability
140
+ const pythonScript = `
141
+ import sys, json
142
+ try:
143
+ from transformers import AutoModelForCausalLM, AutoTokenizer
144
+ import torch
145
+
146
+ model_name = ${JSON.stringify(model)}
147
+ prompt = ${JSON.stringify(prompt)}
148
+
149
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
150
+ model = AutoModelForCausalLM.from_pretrained(model_name)
151
+
152
+ inputs = tokenizer(prompt, return_tensors="pt")
153
+ with torch.no_grad():
154
+ outputs = model.generate(**inputs, max_new_tokens=${maxTokens})
155
+ result = tokenizer.decode(outputs[0], skip_special_tokens=True)
156
+ # Strip the input prompt from the output
157
+ if result.startswith(prompt):
158
+ result = result[len(prompt):].strip()
159
+ print(json.dumps({"response": result}))
160
+ except ImportError:
161
+ print(json.dumps({"error": "transformers package not installed. Run: pip install transformers torch"}))
162
+ sys.exit(1)
163
+ except Exception as e:
164
+ print(json.dumps({"error": str(e)}))
165
+ sys.exit(1)
166
+ `;
167
+ return new Promise((resolve, reject) => {
168
+ const python = spawn('python3', ['-c', pythonScript], {
169
+ stdio: ['pipe', 'pipe', 'pipe'],
170
+ });
171
+ let output = '';
172
+ let errorOutput = '';
173
+ python.stdout?.on('data', (chunk) => {
174
+ output += chunk.toString();
175
+ });
176
+ python.stderr?.on('data', (chunk) => {
177
+ errorOutput += chunk.toString();
178
+ });
179
+ python.on('error', (err) => {
180
+ if (err.code === 'ENOENT') {
181
+ reject(new Error('Python 3 is not installed. Install it from https://python.org'));
182
+ }
183
+ else {
184
+ reject(new Error(`Failed to run Python: ${err.message}`));
185
+ }
186
+ });
187
+ python.on('close', (exitCode) => {
188
+ if (exitCode === 0) {
189
+ try {
190
+ const parsed = JSON.parse(output);
191
+ if (parsed.error) {
192
+ reject(new Error(parsed.error));
193
+ }
194
+ else {
195
+ resolve(parsed.response || '');
196
+ }
197
+ }
198
+ catch (parseErr) {
199
+ reject(new Error(`Failed to parse HuggingFace output: ${output}`));
200
+ }
201
+ }
202
+ else {
203
+ reject(new Error(`Hugging Face inference failed: ${errorOutput || output}`));
204
+ }
205
+ });
206
+ });
207
+ }
208
+ /**
209
+ * Generate using a GGML model binary
210
+ * Expects a path to a GGML-compatible model file or the llama.cpp binary
211
+ */
212
+ async generateGGML(prompt, options) {
213
+ const model = options?.model || this.config.model || './models/llama-2-7b.gguf';
214
+ const maxTokens = options?.maxTokens ?? this.config.maxTokens ?? 512;
215
+ logger.debug(`GGML: Generating with model=${model}, maxTokens=${maxTokens}`);
216
+ // Check if the model file exists
217
+ if (!existsSync(model)) {
218
+ throw new Error(`GGML model not found at: ${model}\n` +
219
+ `Download a model or update the path in your config.\n` +
220
+ `You can download models from: https://huggingface.co/TheBloke`);
221
+ }
222
+ return new Promise((resolve, reject) => {
223
+ const llamaCpp = spawn('llama-cli', [
224
+ '-m', model,
225
+ '-p', prompt,
226
+ '-n', String(maxTokens),
227
+ '--no-display-prompt',
228
+ ], {
229
+ stdio: ['pipe', 'pipe', 'pipe'],
230
+ });
231
+ let output = '';
232
+ let errorOutput = '';
233
+ llamaCpp.stdout?.on('data', (data) => {
234
+ output += data.toString();
235
+ });
236
+ llamaCpp.stderr?.on('data', (data) => {
237
+ errorOutput += data.toString();
238
+ });
239
+ llamaCpp.on('error', (err) => {
240
+ if (err.code === 'ENOENT') {
241
+ reject(new Error('llama-cli not found. Install llama.cpp:\n' +
242
+ ' brew install llama.cpp\n' +
243
+ ' # or build from: https://github.com/ggerganov/llama.cpp'));
244
+ }
245
+ else {
246
+ reject(new Error(`Failed to run GGML model: ${err.message}`));
247
+ }
248
+ });
249
+ llamaCpp.on('close', (code) => {
250
+ if (code === 0) {
251
+ resolve(output.trim().replace(prompt, '').trim());
252
+ }
253
+ else {
254
+ reject(new Error(`GGML inference exited with code ${code}: ${errorOutput}`));
255
+ }
256
+ });
257
+ });
258
+ }
259
+ async generateStream(prompt, options, onToken) {
260
+ const runner = this.config.runner || 'ollama';
261
+ if (runner !== 'ollama') {
262
+ // Only Ollama supports streaming for now; HuggingFace and GGML fall back to non-streaming
263
+ logger.debug(`Local: Streaming not supported for runner '${runner}', falling back to non-streaming`);
264
+ return this.generate(prompt, options);
265
+ }
266
+ const model = options?.model || this.config.model || 'llama2';
267
+ const temperature = options?.temperature ?? this.config.temperature ?? 0.7;
268
+ logger.debug(`Ollama: Streaming with model=${model}, temperature=${temperature}`);
269
+ return this.generateOllamaStream(prompt, model, temperature, onToken);
270
+ }
271
+ async isAvailable() {
272
+ const runner = this.config.runner || 'ollama';
273
+ if (runner === 'ollama') {
274
+ try {
275
+ const response = await fetch(`${OLLAMA_API_BASE}/api/tags`);
276
+ return response.ok;
277
+ }
278
+ catch {
279
+ return false;
280
+ }
281
+ }
282
+ // For huggingface/ggml, check at generation time
283
+ return true;
284
+ }
285
+ getInfo() {
286
+ const runner = this.config.runner || 'ollama';
287
+ return `Provider: Local (${runner})\nModel: ${this.config.model || 'default'}\nStatus: ✅ Always available`;
288
+ }
289
+ async listModels() {
290
+ const runner = this.config.runner || 'ollama';
291
+ if (runner === 'ollama') {
292
+ try {
293
+ const response = await fetch(`${OLLAMA_API_BASE}/api/tags`);
294
+ if (!response.ok)
295
+ return [];
296
+ const data = (await response.json());
297
+ return (data.models || []).map((m) => ({
298
+ id: m.name,
299
+ name: m.name,
300
+ provider: 'local',
301
+ tags: getModelTags(m.name),
302
+ }));
303
+ }
304
+ catch {
305
+ return [];
306
+ }
307
+ }
308
+ return [];
309
+ }
310
+ }
311
+ //# sourceMappingURL=local-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-adapter.js","sourceRoot":"","sources":["../../src/inference/local-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Model Catalog — Categorizes AI models by capability so users can pick
3
+ * the right model for their task.
4
+ *
5
+ * Each model is tagged with one or more categories based on its ID pattern.
6
+ * The model picker uses these categories to group models with icons,
7
+ * descriptions, and recommendation badges.
8
+ */
9
+ /** Category identifier used internally */
10
+ export type ModelCategory = 'chat' | 'code' | 'reasoning' | 'fast' | 'creative' | 'vision' | 'instruct' | 'agentic' | 'preview' | 'speech' | 'other';
11
+ /** Display metadata for each category */
12
+ export interface CategoryInfo {
13
+ /** Icon shown next to the category header */
14
+ icon: string;
15
+ /** Short human-readable label */
16
+ label: string;
17
+ /** Explanation of what this category is good for */
18
+ description: string;
19
+ }
20
+ /**
21
+ * Display info for every category.
22
+ * Ordered roughly by popularity / usefulness.
23
+ */
24
+ export declare const CATEGORY_INFO: Record<ModelCategory, CategoryInfo>;
25
+ /**
26
+ * Determine the category for a given model ID.
27
+ * Uses pattern matching against known model naming conventions.
28
+ *
29
+ * @param modelId The model identifier (e.g., "llama-3.3-70b-versatile")
30
+ * @param owner Optional owner/organization hint (e.g., "meta", "google")
31
+ * @returns The best-matching category, defaulting to 'other'
32
+ */
33
+ export declare function categorizeModel(modelId: string, _owner?: string): ModelCategory;
34
+ /**
35
+ * Get ALL applicable category tags for a model.
36
+ * This returns multiple categories so a model can be shown in multiple groups.
37
+ *
38
+ * Example: "llama-3.1-8b-instant" → ['chat', 'fast', 'instruct']
39
+ */
40
+ export declare function getModelTags(modelId: string, _owner?: string): string[];
41
+ /**
42
+ * Returns a human-friendly label for a model ID, stripping provider prefixes
43
+ * and formatting nicely.
44
+ *
45
+ * Example: "meta-llama/llama-3.3-70b-instruct" → "Llama 3.3 70B Instruct"
46
+ */
47
+ export declare function formatModelName(modelId: string): string;
48
+ /**
49
+ * Get a recommendation badge / description for a model.
50
+ * Some well-known models get a short blurb about what they excel at.
51
+ */
52
+ export declare function getModelBadge(modelId: string): string | undefined;
53
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/inference/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAyD7D,CAAC;AAkIF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAuB/E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsBvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyCjE"}