@deepseekdev/coder 1.0.74

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 (711) hide show
  1. package/LICENSE +21 -0
  2. package/agents/agi-code.rules.json +159 -0
  3. package/agents/general.rules.json +181 -0
  4. package/dist/bin/cliMode.d.ts +8 -0
  5. package/dist/bin/cliMode.d.ts.map +1 -0
  6. package/dist/bin/cliMode.js +20 -0
  7. package/dist/bin/cliMode.js.map +1 -0
  8. package/dist/bin/deepseek.d.ts +3 -0
  9. package/dist/bin/deepseek.d.ts.map +1 -0
  10. package/dist/bin/deepseek.js +137 -0
  11. package/dist/bin/deepseek.js.map +1 -0
  12. package/dist/bin/erosolar.d.ts +7 -0
  13. package/dist/bin/erosolar.d.ts.map +1 -0
  14. package/dist/bin/erosolar.js +7 -0
  15. package/dist/bin/erosolar.js.map +1 -0
  16. package/dist/bin/lean.d.ts +9 -0
  17. package/dist/bin/lean.d.ts.map +1 -0
  18. package/dist/bin/lean.js +333 -0
  19. package/dist/bin/lean.js.map +1 -0
  20. package/dist/bin/selfTest.d.ts +14 -0
  21. package/dist/bin/selfTest.d.ts.map +1 -0
  22. package/dist/bin/selfTest.js +298 -0
  23. package/dist/bin/selfTest.js.map +1 -0
  24. package/dist/capabilities/baseCapability.d.ts +72 -0
  25. package/dist/capabilities/baseCapability.d.ts.map +1 -0
  26. package/dist/capabilities/baseCapability.js +183 -0
  27. package/dist/capabilities/baseCapability.js.map +1 -0
  28. package/dist/capabilities/bashCapability.d.ts +13 -0
  29. package/dist/capabilities/bashCapability.d.ts.map +1 -0
  30. package/dist/capabilities/bashCapability.js +24 -0
  31. package/dist/capabilities/bashCapability.js.map +1 -0
  32. package/dist/capabilities/editCapability.d.ts +17 -0
  33. package/dist/capabilities/editCapability.d.ts.map +1 -0
  34. package/dist/capabilities/editCapability.js +27 -0
  35. package/dist/capabilities/editCapability.js.map +1 -0
  36. package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
  37. package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
  38. package/dist/capabilities/enhancedGitCapability.js +220 -0
  39. package/dist/capabilities/enhancedGitCapability.js.map +1 -0
  40. package/dist/capabilities/filesystemCapability.d.ts +13 -0
  41. package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
  42. package/dist/capabilities/filesystemCapability.js +24 -0
  43. package/dist/capabilities/filesystemCapability.js.map +1 -0
  44. package/dist/capabilities/gitHistoryCapability.d.ts +6 -0
  45. package/dist/capabilities/gitHistoryCapability.d.ts.map +1 -0
  46. package/dist/capabilities/gitHistoryCapability.js +160 -0
  47. package/dist/capabilities/gitHistoryCapability.js.map +1 -0
  48. package/dist/capabilities/hitlCapability.d.ts +18 -0
  49. package/dist/capabilities/hitlCapability.d.ts.map +1 -0
  50. package/dist/capabilities/hitlCapability.js +29 -0
  51. package/dist/capabilities/hitlCapability.js.map +1 -0
  52. package/dist/capabilities/index.d.ts +11 -0
  53. package/dist/capabilities/index.d.ts.map +1 -0
  54. package/dist/capabilities/index.js +13 -0
  55. package/dist/capabilities/index.js.map +1 -0
  56. package/dist/capabilities/searchCapability.d.ts +19 -0
  57. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  58. package/dist/capabilities/searchCapability.js +29 -0
  59. package/dist/capabilities/searchCapability.js.map +1 -0
  60. package/dist/capabilities/toolManifest.d.ts +3 -0
  61. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  62. package/dist/capabilities/toolManifest.js +163 -0
  63. package/dist/capabilities/toolManifest.js.map +1 -0
  64. package/dist/capabilities/toolRegistry.d.ts +25 -0
  65. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  66. package/dist/capabilities/toolRegistry.js +150 -0
  67. package/dist/capabilities/toolRegistry.js.map +1 -0
  68. package/dist/capabilities/unifiedCodingCapability.d.ts +48 -0
  69. package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
  70. package/dist/capabilities/unifiedCodingCapability.js +631 -0
  71. package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
  72. package/dist/capabilities/webCapability.d.ts +23 -0
  73. package/dist/capabilities/webCapability.d.ts.map +1 -0
  74. package/dist/capabilities/webCapability.js +33 -0
  75. package/dist/capabilities/webCapability.js.map +1 -0
  76. package/dist/config.d.ts +25 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.js +155 -0
  79. package/dist/config.js.map +1 -0
  80. package/dist/contracts/agent-profiles.schema.json +43 -0
  81. package/dist/contracts/agent-schemas.json +480 -0
  82. package/dist/contracts/models.schema.json +9 -0
  83. package/dist/contracts/module-schema.json +430 -0
  84. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  85. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  86. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  87. package/dist/contracts/schemas/agent.schema.json +90 -0
  88. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  89. package/dist/contracts/tools.schema.json +82 -0
  90. package/dist/contracts/unified-schema.json +757 -0
  91. package/dist/contracts/v1/agent.d.ts +187 -0
  92. package/dist/contracts/v1/agent.d.ts.map +1 -0
  93. package/dist/contracts/v1/agent.js +8 -0
  94. package/dist/contracts/v1/agent.js.map +1 -0
  95. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  96. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  97. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  98. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  99. package/dist/contracts/v1/agentRules.d.ts +60 -0
  100. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  101. package/dist/contracts/v1/agentRules.js +10 -0
  102. package/dist/contracts/v1/agentRules.js.map +1 -0
  103. package/dist/contracts/v1/provider.d.ts +149 -0
  104. package/dist/contracts/v1/provider.d.ts.map +1 -0
  105. package/dist/contracts/v1/provider.js +7 -0
  106. package/dist/contracts/v1/provider.js.map +1 -0
  107. package/dist/contracts/v1/tool.d.ts +136 -0
  108. package/dist/contracts/v1/tool.d.ts.map +1 -0
  109. package/dist/contracts/v1/tool.js +7 -0
  110. package/dist/contracts/v1/tool.js.map +1 -0
  111. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  112. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  113. package/dist/contracts/v1/toolAccess.js +9 -0
  114. package/dist/contracts/v1/toolAccess.js.map +1 -0
  115. package/dist/core/agent.d.ts +320 -0
  116. package/dist/core/agent.d.ts.map +1 -0
  117. package/dist/core/agent.js +1627 -0
  118. package/dist/core/agent.js.map +1 -0
  119. package/dist/core/agentProfileManifest.d.ts +3 -0
  120. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  121. package/dist/core/agentProfileManifest.js +188 -0
  122. package/dist/core/agentProfileManifest.js.map +1 -0
  123. package/dist/core/agentProfiles.d.ts +22 -0
  124. package/dist/core/agentProfiles.d.ts.map +1 -0
  125. package/dist/core/agentProfiles.js +35 -0
  126. package/dist/core/agentProfiles.js.map +1 -0
  127. package/dist/core/agentRulebook.d.ts +11 -0
  128. package/dist/core/agentRulebook.d.ts.map +1 -0
  129. package/dist/core/agentRulebook.js +136 -0
  130. package/dist/core/agentRulebook.js.map +1 -0
  131. package/dist/core/agentSchemaLoader.d.ts +131 -0
  132. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  133. package/dist/core/agentSchemaLoader.js +235 -0
  134. package/dist/core/agentSchemaLoader.js.map +1 -0
  135. package/dist/core/agiCore.d.ts +312 -0
  136. package/dist/core/agiCore.d.ts.map +1 -0
  137. package/dist/core/agiCore.js +1585 -0
  138. package/dist/core/agiCore.js.map +1 -0
  139. package/dist/core/aiErrorFixer.d.ts +57 -0
  140. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  141. package/dist/core/aiErrorFixer.js +214 -0
  142. package/dist/core/aiErrorFixer.js.map +1 -0
  143. package/dist/core/bashCommandGuidance.d.ts +16 -0
  144. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  145. package/dist/core/bashCommandGuidance.js +40 -0
  146. package/dist/core/bashCommandGuidance.js.map +1 -0
  147. package/dist/core/constants.d.ts +31 -0
  148. package/dist/core/constants.d.ts.map +1 -0
  149. package/dist/core/constants.js +62 -0
  150. package/dist/core/constants.js.map +1 -0
  151. package/dist/core/contextManager.d.ts +271 -0
  152. package/dist/core/contextManager.d.ts.map +1 -0
  153. package/dist/core/contextManager.js +1073 -0
  154. package/dist/core/contextManager.js.map +1 -0
  155. package/dist/core/contextWindow.d.ts +42 -0
  156. package/dist/core/contextWindow.d.ts.map +1 -0
  157. package/dist/core/contextWindow.js +123 -0
  158. package/dist/core/contextWindow.js.map +1 -0
  159. package/dist/core/customCommands.d.ts +19 -0
  160. package/dist/core/customCommands.d.ts.map +1 -0
  161. package/dist/core/customCommands.js +85 -0
  162. package/dist/core/customCommands.js.map +1 -0
  163. package/dist/core/deepBugAnalyzer.d.ts +25 -0
  164. package/dist/core/deepBugAnalyzer.d.ts.map +1 -0
  165. package/dist/core/deepBugAnalyzer.js +44 -0
  166. package/dist/core/deepBugAnalyzer.js.map +1 -0
  167. package/dist/core/dynamicGuardrails.d.ts +207 -0
  168. package/dist/core/dynamicGuardrails.d.ts.map +1 -0
  169. package/dist/core/dynamicGuardrails.js +455 -0
  170. package/dist/core/dynamicGuardrails.js.map +1 -0
  171. package/dist/core/embeddingProviders.d.ts +80 -0
  172. package/dist/core/embeddingProviders.d.ts.map +1 -0
  173. package/dist/core/embeddingProviders.js +241 -0
  174. package/dist/core/embeddingProviders.js.map +1 -0
  175. package/dist/core/episodicMemory.d.ts +259 -0
  176. package/dist/core/episodicMemory.d.ts.map +1 -0
  177. package/dist/core/episodicMemory.js +834 -0
  178. package/dist/core/episodicMemory.js.map +1 -0
  179. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  180. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  181. package/dist/core/errors/apiKeyErrors.js +159 -0
  182. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  183. package/dist/core/errors/errorTypes.d.ts +111 -0
  184. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  185. package/dist/core/errors/errorTypes.js +345 -0
  186. package/dist/core/errors/errorTypes.js.map +1 -0
  187. package/dist/core/errors/index.d.ts +50 -0
  188. package/dist/core/errors/index.d.ts.map +1 -0
  189. package/dist/core/errors/index.js +156 -0
  190. package/dist/core/errors/index.js.map +1 -0
  191. package/dist/core/errors/networkErrors.d.ts +14 -0
  192. package/dist/core/errors/networkErrors.d.ts.map +1 -0
  193. package/dist/core/errors/networkErrors.js +53 -0
  194. package/dist/core/errors/networkErrors.js.map +1 -0
  195. package/dist/core/errors/safetyValidator.d.ts +109 -0
  196. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  197. package/dist/core/errors/safetyValidator.js +271 -0
  198. package/dist/core/errors/safetyValidator.js.map +1 -0
  199. package/dist/core/errors.d.ts +4 -0
  200. package/dist/core/errors.d.ts.map +1 -0
  201. package/dist/core/errors.js +33 -0
  202. package/dist/core/errors.js.map +1 -0
  203. package/dist/core/finalResponseFormatter.d.ts +10 -0
  204. package/dist/core/finalResponseFormatter.d.ts.map +1 -0
  205. package/dist/core/finalResponseFormatter.js +14 -0
  206. package/dist/core/finalResponseFormatter.js.map +1 -0
  207. package/dist/core/flowProtection.d.ts +154 -0
  208. package/dist/core/flowProtection.d.ts.map +1 -0
  209. package/dist/core/flowProtection.js +439 -0
  210. package/dist/core/flowProtection.js.map +1 -0
  211. package/dist/core/gitWorktreeManager.d.ts +126 -0
  212. package/dist/core/gitWorktreeManager.d.ts.map +1 -0
  213. package/dist/core/gitWorktreeManager.js +403 -0
  214. package/dist/core/gitWorktreeManager.js.map +1 -0
  215. package/dist/core/global-macbook-access.d.ts +59 -0
  216. package/dist/core/global-macbook-access.d.ts.map +1 -0
  217. package/dist/core/global-macbook-access.js +101 -0
  218. package/dist/core/global-macbook-access.js.map +1 -0
  219. package/dist/core/guardrails.d.ts +146 -0
  220. package/dist/core/guardrails.d.ts.map +1 -0
  221. package/dist/core/guardrails.js +361 -0
  222. package/dist/core/guardrails.js.map +1 -0
  223. package/dist/core/hallucinationGuard.d.ts +57 -0
  224. package/dist/core/hallucinationGuard.d.ts.map +1 -0
  225. package/dist/core/hallucinationGuard.js +237 -0
  226. package/dist/core/hallucinationGuard.js.map +1 -0
  227. package/dist/core/hitl.d.ts +109 -0
  228. package/dist/core/hitl.d.ts.map +1 -0
  229. package/dist/core/hitl.js +371 -0
  230. package/dist/core/hitl.js.map +1 -0
  231. package/dist/core/hooks.d.ts +113 -0
  232. package/dist/core/hooks.d.ts.map +1 -0
  233. package/dist/core/hooks.js +364 -0
  234. package/dist/core/hooks.js.map +1 -0
  235. package/dist/core/hotReload.d.ts +154 -0
  236. package/dist/core/hotReload.d.ts.map +1 -0
  237. package/dist/core/hotReload.js +451 -0
  238. package/dist/core/hotReload.js.map +1 -0
  239. package/dist/core/hypothesisEngine.d.ts +27 -0
  240. package/dist/core/hypothesisEngine.d.ts.map +1 -0
  241. package/dist/core/hypothesisEngine.js +58 -0
  242. package/dist/core/hypothesisEngine.js.map +1 -0
  243. package/dist/core/index.d.ts +18 -0
  244. package/dist/core/index.d.ts.map +1 -0
  245. package/dist/core/index.js +40 -0
  246. package/dist/core/index.js.map +1 -0
  247. package/dist/core/initialExplorer.d.ts +53 -0
  248. package/dist/core/initialExplorer.d.ts.map +1 -0
  249. package/dist/core/initialExplorer.js +423 -0
  250. package/dist/core/initialExplorer.js.map +1 -0
  251. package/dist/core/inputProtection.d.ts +122 -0
  252. package/dist/core/inputProtection.d.ts.map +1 -0
  253. package/dist/core/inputProtection.js +422 -0
  254. package/dist/core/inputProtection.js.map +1 -0
  255. package/dist/core/liveGCPVerification.d.ts +41 -0
  256. package/dist/core/liveGCPVerification.d.ts.map +1 -0
  257. package/dist/core/liveGCPVerification.js +745 -0
  258. package/dist/core/liveGCPVerification.js.map +1 -0
  259. package/dist/core/modelDiscovery.d.ts +105 -0
  260. package/dist/core/modelDiscovery.d.ts.map +1 -0
  261. package/dist/core/modelDiscovery.js +768 -0
  262. package/dist/core/modelDiscovery.js.map +1 -0
  263. package/dist/core/multilinePasteHandler.d.ts +35 -0
  264. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  265. package/dist/core/multilinePasteHandler.js +81 -0
  266. package/dist/core/multilinePasteHandler.js.map +1 -0
  267. package/dist/core/parallelExecutor.d.ts +215 -0
  268. package/dist/core/parallelExecutor.d.ts.map +1 -0
  269. package/dist/core/parallelExecutor.js +584 -0
  270. package/dist/core/parallelExecutor.js.map +1 -0
  271. package/dist/core/preferences.d.ts +71 -0
  272. package/dist/core/preferences.d.ts.map +1 -0
  273. package/dist/core/preferences.js +341 -0
  274. package/dist/core/preferences.js.map +1 -0
  275. package/dist/core/productTestHarness.d.ts +46 -0
  276. package/dist/core/productTestHarness.d.ts.map +1 -0
  277. package/dist/core/productTestHarness.js +128 -0
  278. package/dist/core/productTestHarness.js.map +1 -0
  279. package/dist/core/providerKeys.d.ts +20 -0
  280. package/dist/core/providerKeys.d.ts.map +1 -0
  281. package/dist/core/providerKeys.js +40 -0
  282. package/dist/core/providerKeys.js.map +1 -0
  283. package/dist/core/resultVerification.d.ts +47 -0
  284. package/dist/core/resultVerification.d.ts.map +1 -0
  285. package/dist/core/resultVerification.js +126 -0
  286. package/dist/core/resultVerification.js.map +1 -0
  287. package/dist/core/revenueEnvValidator.d.ts +30 -0
  288. package/dist/core/revenueEnvValidator.d.ts.map +1 -0
  289. package/dist/core/revenueEnvValidator.js +244 -0
  290. package/dist/core/revenueEnvValidator.js.map +1 -0
  291. package/dist/core/schemaValidator.d.ts +49 -0
  292. package/dist/core/schemaValidator.d.ts.map +1 -0
  293. package/dist/core/schemaValidator.js +234 -0
  294. package/dist/core/schemaValidator.js.map +1 -0
  295. package/dist/core/secretStore.d.ts +48 -0
  296. package/dist/core/secretStore.d.ts.map +1 -0
  297. package/dist/core/secretStore.js +295 -0
  298. package/dist/core/secretStore.js.map +1 -0
  299. package/dist/core/selfUpgrade.d.ts +79 -0
  300. package/dist/core/selfUpgrade.d.ts.map +1 -0
  301. package/dist/core/selfUpgrade.js +92 -0
  302. package/dist/core/selfUpgrade.js.map +1 -0
  303. package/dist/core/sessionStorage.d.ts +10 -0
  304. package/dist/core/sessionStorage.d.ts.map +1 -0
  305. package/dist/core/sessionStorage.js +46 -0
  306. package/dist/core/sessionStorage.js.map +1 -0
  307. package/dist/core/sessionStore.d.ts +35 -0
  308. package/dist/core/sessionStore.d.ts.map +1 -0
  309. package/dist/core/sessionStore.js +191 -0
  310. package/dist/core/sessionStore.js.map +1 -0
  311. package/dist/core/shutdown.d.ts +34 -0
  312. package/dist/core/shutdown.d.ts.map +1 -0
  313. package/dist/core/shutdown.js +173 -0
  314. package/dist/core/shutdown.js.map +1 -0
  315. package/dist/core/sudoPasswordManager.d.ts +52 -0
  316. package/dist/core/sudoPasswordManager.d.ts.map +1 -0
  317. package/dist/core/sudoPasswordManager.js +115 -0
  318. package/dist/core/sudoPasswordManager.js.map +1 -0
  319. package/dist/core/taskCompletionDetector.d.ts +112 -0
  320. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  321. package/dist/core/taskCompletionDetector.js +469 -0
  322. package/dist/core/taskCompletionDetector.js.map +1 -0
  323. package/dist/core/testFailureMonitor.d.ts +67 -0
  324. package/dist/core/testFailureMonitor.d.ts.map +1 -0
  325. package/dist/core/testFailureMonitor.js +262 -0
  326. package/dist/core/testFailureMonitor.js.map +1 -0
  327. package/dist/core/toolPreconditions.d.ts +34 -0
  328. package/dist/core/toolPreconditions.d.ts.map +1 -0
  329. package/dist/core/toolPreconditions.js +242 -0
  330. package/dist/core/toolPreconditions.js.map +1 -0
  331. package/dist/core/toolRuntime.d.ts +185 -0
  332. package/dist/core/toolRuntime.d.ts.map +1 -0
  333. package/dist/core/toolRuntime.js +412 -0
  334. package/dist/core/toolRuntime.js.map +1 -0
  335. package/dist/core/types/utilityTypes.d.ts +183 -0
  336. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  337. package/dist/core/types/utilityTypes.js +273 -0
  338. package/dist/core/types/utilityTypes.js.map +1 -0
  339. package/dist/core/types.d.ts +334 -0
  340. package/dist/core/types.d.ts.map +1 -0
  341. package/dist/core/types.js +76 -0
  342. package/dist/core/types.js.map +1 -0
  343. package/dist/core/unifiedOrchestrator.d.ts +47 -0
  344. package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
  345. package/dist/core/unifiedOrchestrator.js +103 -0
  346. package/dist/core/unifiedOrchestrator.js.map +1 -0
  347. package/dist/core/unrestricted-mode.d.ts +42 -0
  348. package/dist/core/unrestricted-mode.d.ts.map +1 -0
  349. package/dist/core/unrestricted-mode.js +88 -0
  350. package/dist/core/unrestricted-mode.js.map +1 -0
  351. package/dist/core/updateChecker.d.ts +148 -0
  352. package/dist/core/updateChecker.d.ts.map +1 -0
  353. package/dist/core/updateChecker.js +593 -0
  354. package/dist/core/updateChecker.js.map +1 -0
  355. package/dist/headless/interactiveShell.d.ts +22 -0
  356. package/dist/headless/interactiveShell.d.ts.map +1 -0
  357. package/dist/headless/interactiveShell.js +4045 -0
  358. package/dist/headless/interactiveShell.js.map +1 -0
  359. package/dist/headless/quickMode.d.ts +26 -0
  360. package/dist/headless/quickMode.d.ts.map +1 -0
  361. package/dist/headless/quickMode.js +236 -0
  362. package/dist/headless/quickMode.js.map +1 -0
  363. package/dist/leanAgent.d.ts +73 -0
  364. package/dist/leanAgent.d.ts.map +1 -0
  365. package/dist/leanAgent.js +175 -0
  366. package/dist/leanAgent.js.map +1 -0
  367. package/dist/orchestration/index.d.ts +14 -0
  368. package/dist/orchestration/index.d.ts.map +1 -0
  369. package/dist/orchestration/index.js +12 -0
  370. package/dist/orchestration/index.js.map +1 -0
  371. package/dist/plugins/index.d.ts +49 -0
  372. package/dist/plugins/index.d.ts.map +1 -0
  373. package/dist/plugins/index.js +104 -0
  374. package/dist/plugins/index.js.map +1 -0
  375. package/dist/plugins/providers/anthropic/index.d.ts +9 -0
  376. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -0
  377. package/dist/plugins/providers/anthropic/index.js +48 -0
  378. package/dist/plugins/providers/anthropic/index.js.map +1 -0
  379. package/dist/plugins/providers/deepseek/index.d.ts +11 -0
  380. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  381. package/dist/plugins/providers/deepseek/index.js +54 -0
  382. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  383. package/dist/plugins/providers/index.d.ts +2 -0
  384. package/dist/plugins/providers/index.d.ts.map +1 -0
  385. package/dist/plugins/providers/index.js +17 -0
  386. package/dist/plugins/providers/index.js.map +1 -0
  387. package/dist/plugins/providers/openai/index.d.ts +10 -0
  388. package/dist/plugins/providers/openai/index.d.ts.map +1 -0
  389. package/dist/plugins/providers/openai/index.js +47 -0
  390. package/dist/plugins/providers/openai/index.js.map +1 -0
  391. package/dist/plugins/providers/xai/index.d.ts +10 -0
  392. package/dist/plugins/providers/xai/index.d.ts.map +1 -0
  393. package/dist/plugins/providers/xai/index.js +47 -0
  394. package/dist/plugins/providers/xai/index.js.map +1 -0
  395. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +10 -0
  396. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
  397. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +110 -0
  398. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
  399. package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
  400. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
  401. package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
  402. package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
  403. package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
  404. package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
  405. package/dist/plugins/tools/edit/editPlugin.js +15 -0
  406. package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
  407. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
  408. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
  409. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
  410. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
  411. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
  412. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
  413. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
  414. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
  415. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +3 -0
  416. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +1 -0
  417. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +9 -0
  418. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +1 -0
  419. package/dist/plugins/tools/index.d.ts +3 -0
  420. package/dist/plugins/tools/index.d.ts.map +1 -0
  421. package/dist/plugins/tools/index.js +3 -0
  422. package/dist/plugins/tools/index.js.map +1 -0
  423. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +3 -0
  424. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +1 -0
  425. package/dist/plugins/tools/integrity/integrityPlugin.js +31 -0
  426. package/dist/plugins/tools/integrity/integrityPlugin.js.map +1 -0
  427. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
  428. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
  429. package/dist/plugins/tools/mcp/mcpPlugin.js +27 -0
  430. package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
  431. package/dist/plugins/tools/nodeDefaults.d.ts +13 -0
  432. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
  433. package/dist/plugins/tools/nodeDefaults.js +31 -0
  434. package/dist/plugins/tools/nodeDefaults.js.map +1 -0
  435. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +3 -0
  436. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
  437. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +340 -0
  438. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
  439. package/dist/plugins/tools/registry.d.ts +22 -0
  440. package/dist/plugins/tools/registry.d.ts.map +1 -0
  441. package/dist/plugins/tools/registry.js +58 -0
  442. package/dist/plugins/tools/registry.js.map +1 -0
  443. package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
  444. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
  445. package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
  446. package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
  447. package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
  448. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
  449. package/dist/plugins/tools/skills/skillPlugin.js +27 -0
  450. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
  451. package/dist/providers/baseProvider.d.ts +148 -0
  452. package/dist/providers/baseProvider.d.ts.map +1 -0
  453. package/dist/providers/baseProvider.js +284 -0
  454. package/dist/providers/baseProvider.js.map +1 -0
  455. package/dist/providers/openaiChatCompletionsProvider.d.ts +64 -0
  456. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  457. package/dist/providers/openaiChatCompletionsProvider.js +1003 -0
  458. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  459. package/dist/providers/providerFactory.d.ts +22 -0
  460. package/dist/providers/providerFactory.d.ts.map +1 -0
  461. package/dist/providers/providerFactory.js +25 -0
  462. package/dist/providers/providerFactory.js.map +1 -0
  463. package/dist/providers/resilientProvider.d.ts +103 -0
  464. package/dist/providers/resilientProvider.d.ts.map +1 -0
  465. package/dist/providers/resilientProvider.js +462 -0
  466. package/dist/providers/resilientProvider.js.map +1 -0
  467. package/dist/runtime/agentController.d.ts +114 -0
  468. package/dist/runtime/agentController.d.ts.map +1 -0
  469. package/dist/runtime/agentController.js +707 -0
  470. package/dist/runtime/agentController.js.map +1 -0
  471. package/dist/runtime/agentHost.d.ts +61 -0
  472. package/dist/runtime/agentHost.d.ts.map +1 -0
  473. package/dist/runtime/agentHost.js +157 -0
  474. package/dist/runtime/agentHost.js.map +1 -0
  475. package/dist/runtime/agentSession.d.ts +45 -0
  476. package/dist/runtime/agentSession.d.ts.map +1 -0
  477. package/dist/runtime/agentSession.js +210 -0
  478. package/dist/runtime/agentSession.js.map +1 -0
  479. package/dist/runtime/agentWorkerPool.d.ts +167 -0
  480. package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
  481. package/dist/runtime/agentWorkerPool.js +435 -0
  482. package/dist/runtime/agentWorkerPool.js.map +1 -0
  483. package/dist/runtime/node.d.ts +7 -0
  484. package/dist/runtime/node.d.ts.map +1 -0
  485. package/dist/runtime/node.js +25 -0
  486. package/dist/runtime/node.js.map +1 -0
  487. package/dist/runtime/universal.d.ts +18 -0
  488. package/dist/runtime/universal.d.ts.map +1 -0
  489. package/dist/runtime/universal.js +21 -0
  490. package/dist/runtime/universal.js.map +1 -0
  491. package/dist/shell/autoExecutor.d.ts +70 -0
  492. package/dist/shell/autoExecutor.d.ts.map +1 -0
  493. package/dist/shell/autoExecutor.js +320 -0
  494. package/dist/shell/autoExecutor.js.map +1 -0
  495. package/dist/shell/commandRegistry.d.ts +122 -0
  496. package/dist/shell/commandRegistry.d.ts.map +1 -0
  497. package/dist/shell/commandRegistry.js +398 -0
  498. package/dist/shell/commandRegistry.js.map +1 -0
  499. package/dist/shell/composableMessage.d.ts +178 -0
  500. package/dist/shell/composableMessage.d.ts.map +1 -0
  501. package/dist/shell/composableMessage.js +384 -0
  502. package/dist/shell/composableMessage.js.map +1 -0
  503. package/dist/shell/liveStatus.d.ts +27 -0
  504. package/dist/shell/liveStatus.d.ts.map +1 -0
  505. package/dist/shell/liveStatus.js +53 -0
  506. package/dist/shell/liveStatus.js.map +1 -0
  507. package/dist/shell/systemPrompt.d.ts +12 -0
  508. package/dist/shell/systemPrompt.d.ts.map +1 -0
  509. package/dist/shell/systemPrompt.js +16 -0
  510. package/dist/shell/systemPrompt.js.map +1 -0
  511. package/dist/shell/vimMode.d.ts +66 -0
  512. package/dist/shell/vimMode.d.ts.map +1 -0
  513. package/dist/shell/vimMode.js +435 -0
  514. package/dist/shell/vimMode.js.map +1 -0
  515. package/dist/tools/bashTools.d.ts +7 -0
  516. package/dist/tools/bashTools.d.ts.map +1 -0
  517. package/dist/tools/bashTools.js +773 -0
  518. package/dist/tools/bashTools.js.map +1 -0
  519. package/dist/tools/diffUtils.d.ts +43 -0
  520. package/dist/tools/diffUtils.d.ts.map +1 -0
  521. package/dist/tools/diffUtils.js +607 -0
  522. package/dist/tools/diffUtils.js.map +1 -0
  523. package/dist/tools/editTools.d.ts +29 -0
  524. package/dist/tools/editTools.d.ts.map +1 -0
  525. package/dist/tools/editTools.js +673 -0
  526. package/dist/tools/editTools.js.map +1 -0
  527. package/dist/tools/emailTools.d.ts +140 -0
  528. package/dist/tools/emailTools.d.ts.map +1 -0
  529. package/dist/tools/emailTools.js +793 -0
  530. package/dist/tools/emailTools.js.map +1 -0
  531. package/dist/tools/fileChangeTracker.d.ts +47 -0
  532. package/dist/tools/fileChangeTracker.d.ts.map +1 -0
  533. package/dist/tools/fileChangeTracker.js +154 -0
  534. package/dist/tools/fileChangeTracker.js.map +1 -0
  535. package/dist/tools/fileReadTracker.d.ts +69 -0
  536. package/dist/tools/fileReadTracker.d.ts.map +1 -0
  537. package/dist/tools/fileReadTracker.js +213 -0
  538. package/dist/tools/fileReadTracker.js.map +1 -0
  539. package/dist/tools/fileTools.d.ts +3 -0
  540. package/dist/tools/fileTools.d.ts.map +1 -0
  541. package/dist/tools/fileTools.js +333 -0
  542. package/dist/tools/fileTools.js.map +1 -0
  543. package/dist/tools/grepTools.d.ts +3 -0
  544. package/dist/tools/grepTools.d.ts.map +1 -0
  545. package/dist/tools/grepTools.js +128 -0
  546. package/dist/tools/grepTools.js.map +1 -0
  547. package/dist/tools/hitlTools.d.ts +7 -0
  548. package/dist/tools/hitlTools.d.ts.map +1 -0
  549. package/dist/tools/hitlTools.js +189 -0
  550. package/dist/tools/hitlTools.js.map +1 -0
  551. package/dist/tools/humanOpsTools.d.ts +3 -0
  552. package/dist/tools/humanOpsTools.d.ts.map +1 -0
  553. package/dist/tools/humanOpsTools.js +86 -0
  554. package/dist/tools/humanOpsTools.js.map +1 -0
  555. package/dist/tools/localExplore.d.ts +38 -0
  556. package/dist/tools/localExplore.d.ts.map +1 -0
  557. package/dist/tools/localExplore.js +30 -0
  558. package/dist/tools/localExplore.js.map +1 -0
  559. package/dist/tools/metaTools.d.ts +3 -0
  560. package/dist/tools/metaTools.d.ts.map +1 -0
  561. package/dist/tools/metaTools.js +148 -0
  562. package/dist/tools/metaTools.js.map +1 -0
  563. package/dist/tools/planningTools.d.ts +81 -0
  564. package/dist/tools/planningTools.d.ts.map +1 -0
  565. package/dist/tools/planningTools.js +370 -0
  566. package/dist/tools/planningTools.js.map +1 -0
  567. package/dist/tools/searchTools.d.ts +12 -0
  568. package/dist/tools/searchTools.d.ts.map +1 -0
  569. package/dist/tools/searchTools.js +363 -0
  570. package/dist/tools/searchTools.js.map +1 -0
  571. package/dist/tools/telemetryTools.d.ts +10 -0
  572. package/dist/tools/telemetryTools.d.ts.map +1 -0
  573. package/dist/tools/telemetryTools.js +9 -0
  574. package/dist/tools/telemetryTools.js.map +1 -0
  575. package/dist/tools/unifiedOps.d.ts +3 -0
  576. package/dist/tools/unifiedOps.d.ts.map +1 -0
  577. package/dist/tools/unifiedOps.js +57 -0
  578. package/dist/tools/unifiedOps.js.map +1 -0
  579. package/dist/tools/webTools.d.ts +26 -0
  580. package/dist/tools/webTools.d.ts.map +1 -0
  581. package/dist/tools/webTools.js +227 -0
  582. package/dist/tools/webTools.js.map +1 -0
  583. package/dist/ui/PromptController.d.ts +193 -0
  584. package/dist/ui/PromptController.d.ts.map +1 -0
  585. package/dist/ui/PromptController.js +394 -0
  586. package/dist/ui/PromptController.js.map +1 -0
  587. package/dist/ui/UnifiedUIRenderer.d.ts +843 -0
  588. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -0
  589. package/dist/ui/UnifiedUIRenderer.js +5711 -0
  590. package/dist/ui/UnifiedUIRenderer.js.map +1 -0
  591. package/dist/ui/animatedStatus.d.ts +140 -0
  592. package/dist/ui/animatedStatus.d.ts.map +1 -0
  593. package/dist/ui/animatedStatus.js +480 -0
  594. package/dist/ui/animatedStatus.js.map +1 -0
  595. package/dist/ui/animation/AnimationScheduler.d.ts +197 -0
  596. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  597. package/dist/ui/animation/AnimationScheduler.js +440 -0
  598. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  599. package/dist/ui/codeHighlighter.d.ts +6 -0
  600. package/dist/ui/codeHighlighter.d.ts.map +1 -0
  601. package/dist/ui/codeHighlighter.js +855 -0
  602. package/dist/ui/codeHighlighter.js.map +1 -0
  603. package/dist/ui/designSystem.d.ts +26 -0
  604. package/dist/ui/designSystem.d.ts.map +1 -0
  605. package/dist/ui/designSystem.js +114 -0
  606. package/dist/ui/designSystem.js.map +1 -0
  607. package/dist/ui/errorFormatter.d.ts +64 -0
  608. package/dist/ui/errorFormatter.d.ts.map +1 -0
  609. package/dist/ui/errorFormatter.js +316 -0
  610. package/dist/ui/errorFormatter.js.map +1 -0
  611. package/dist/ui/globalWriteLock.d.ts +63 -0
  612. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  613. package/dist/ui/globalWriteLock.js +173 -0
  614. package/dist/ui/globalWriteLock.js.map +1 -0
  615. package/dist/ui/index.d.ts +32 -0
  616. package/dist/ui/index.d.ts.map +1 -0
  617. package/dist/ui/index.js +54 -0
  618. package/dist/ui/index.js.map +1 -0
  619. package/dist/ui/interrupts/InterruptManager.d.ts +157 -0
  620. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  621. package/dist/ui/interrupts/InterruptManager.js +501 -0
  622. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  623. package/dist/ui/layout.d.ts +27 -0
  624. package/dist/ui/layout.d.ts.map +1 -0
  625. package/dist/ui/layout.js +184 -0
  626. package/dist/ui/layout.js.map +1 -0
  627. package/dist/ui/outputMode.d.ts +44 -0
  628. package/dist/ui/outputMode.d.ts.map +1 -0
  629. package/dist/ui/outputMode.js +123 -0
  630. package/dist/ui/outputMode.js.map +1 -0
  631. package/dist/ui/overlay/OverlayManager.d.ts +105 -0
  632. package/dist/ui/overlay/OverlayManager.d.ts.map +1 -0
  633. package/dist/ui/overlay/OverlayManager.js +304 -0
  634. package/dist/ui/overlay/OverlayManager.js.map +1 -0
  635. package/dist/ui/premiumComponents.d.ts +54 -0
  636. package/dist/ui/premiumComponents.d.ts.map +1 -0
  637. package/dist/ui/premiumComponents.js +241 -0
  638. package/dist/ui/premiumComponents.js.map +1 -0
  639. package/dist/ui/richText.d.ts +13 -0
  640. package/dist/ui/richText.d.ts.map +1 -0
  641. package/dist/ui/richText.js +444 -0
  642. package/dist/ui/richText.js.map +1 -0
  643. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  644. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  645. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  646. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  647. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  648. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  649. package/dist/ui/telemetry/UITelemetry.js +446 -0
  650. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  651. package/dist/ui/textHighlighter.d.ts +83 -0
  652. package/dist/ui/textHighlighter.d.ts.map +1 -0
  653. package/dist/ui/textHighlighter.js +267 -0
  654. package/dist/ui/textHighlighter.js.map +1 -0
  655. package/dist/ui/theme.d.ts +364 -0
  656. package/dist/ui/theme.d.ts.map +1 -0
  657. package/dist/ui/theme.js +471 -0
  658. package/dist/ui/theme.js.map +1 -0
  659. package/dist/ui/toolDisplay.d.ts +221 -0
  660. package/dist/ui/toolDisplay.d.ts.map +1 -0
  661. package/dist/ui/toolDisplay.js +1654 -0
  662. package/dist/ui/toolDisplay.js.map +1 -0
  663. package/dist/ui/uiConstants.d.ts +288 -0
  664. package/dist/ui/uiConstants.d.ts.map +1 -0
  665. package/dist/ui/uiConstants.js +472 -0
  666. package/dist/ui/uiConstants.js.map +1 -0
  667. package/dist/utils/askUserPrompt.d.ts +21 -0
  668. package/dist/utils/askUserPrompt.d.ts.map +1 -0
  669. package/dist/utils/askUserPrompt.js +87 -0
  670. package/dist/utils/askUserPrompt.js.map +1 -0
  671. package/dist/utils/asyncUtils.d.ts +95 -0
  672. package/dist/utils/asyncUtils.d.ts.map +1 -0
  673. package/dist/utils/asyncUtils.js +286 -0
  674. package/dist/utils/asyncUtils.js.map +1 -0
  675. package/dist/utils/debugLogger.d.ts +6 -0
  676. package/dist/utils/debugLogger.d.ts.map +1 -0
  677. package/dist/utils/debugLogger.js +39 -0
  678. package/dist/utils/debugLogger.js.map +1 -0
  679. package/dist/utils/errorUtils.d.ts +12 -0
  680. package/dist/utils/errorUtils.d.ts.map +1 -0
  681. package/dist/utils/errorUtils.js +83 -0
  682. package/dist/utils/errorUtils.js.map +1 -0
  683. package/dist/utils/frontmatter.d.ts +10 -0
  684. package/dist/utils/frontmatter.d.ts.map +1 -0
  685. package/dist/utils/frontmatter.js +78 -0
  686. package/dist/utils/frontmatter.js.map +1 -0
  687. package/dist/utils/packageInfo.d.ts +14 -0
  688. package/dist/utils/packageInfo.d.ts.map +1 -0
  689. package/dist/utils/packageInfo.js +45 -0
  690. package/dist/utils/packageInfo.js.map +1 -0
  691. package/dist/utils/planFormatter.d.ts +34 -0
  692. package/dist/utils/planFormatter.d.ts.map +1 -0
  693. package/dist/utils/planFormatter.js +141 -0
  694. package/dist/utils/planFormatter.js.map +1 -0
  695. package/dist/utils/securityUtils.d.ts +132 -0
  696. package/dist/utils/securityUtils.d.ts.map +1 -0
  697. package/dist/utils/securityUtils.js +324 -0
  698. package/dist/utils/securityUtils.js.map +1 -0
  699. package/dist/utils/statusReporter.d.ts +6 -0
  700. package/dist/utils/statusReporter.d.ts.map +1 -0
  701. package/dist/utils/statusReporter.js +26 -0
  702. package/dist/utils/statusReporter.js.map +1 -0
  703. package/dist/workspace.d.ts +8 -0
  704. package/dist/workspace.d.ts.map +1 -0
  705. package/dist/workspace.js +135 -0
  706. package/dist/workspace.js.map +1 -0
  707. package/dist/workspace.validator.d.ts +49 -0
  708. package/dist/workspace.validator.d.ts.map +1 -0
  709. package/dist/workspace.validator.js +215 -0
  710. package/dist/workspace.validator.js.map +1 -0
  711. package/package.json +121 -0
@@ -0,0 +1,768 @@
1
+ /**
2
+ * Model discovery system for auto-detecting new models from providers.
3
+ *
4
+ * This module queries provider APIs to discover available models and caches
5
+ * them for use alongside the static model schema. It never modifies the
6
+ * static schema - discoveries are stored separately and merged at runtime.
7
+ */
8
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
9
+ import { mkdir } from 'node:fs/promises';
10
+ import { join } from 'node:path';
11
+ import { homedir } from 'node:os';
12
+ import { safeErrorMessage } from './secretStore.js';
13
+ import { logDebug } from '../utils/debugLogger.js';
14
+ /**
15
+ * Discovered model cache file location
16
+ */
17
+ const CACHE_DIR = join(homedir(), '.agi');
18
+ const CACHE_FILE = join(CACHE_DIR, 'discovered-models.json');
19
+ /**
20
+ * Cache expiration time (24 hours)
21
+ */
22
+ const CACHE_EXPIRATION_MS = 24 * 60 * 60 * 1000;
23
+ const MODEL_PROVIDER_HINTS = [
24
+ { provider: 'openai', patterns: [/^gpt/i, /^o1/i, /^text-embedding/i] },
25
+ { provider: 'anthropic', patterns: [/^claude/i] },
26
+ { provider: 'google', patterns: [/^gemini/i] },
27
+ { provider: 'deepseek', patterns: [/^deepseek/i] },
28
+ { provider: 'ollama', patterns: [/^llama/i, /^mistral/i, /^gemma/i, /^phi/i, /^vicuna/i] },
29
+ { provider: 'xai', patterns: [/^grok/i] },
30
+ ];
31
+ /**
32
+ * Infer provider from a model identifier.
33
+ */
34
+ export function inferProviderFromModelId(modelId) {
35
+ if (!modelId)
36
+ return null;
37
+ const normalized = modelId.trim().toLowerCase();
38
+ for (const hint of MODEL_PROVIDER_HINTS) {
39
+ if (hint.patterns.some((pattern) => pattern.test(normalized))) {
40
+ return hint.provider;
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Get cached discovered models
47
+ */
48
+ export function getCachedDiscoveredModels() {
49
+ try {
50
+ if (!existsSync(CACHE_FILE)) {
51
+ return [];
52
+ }
53
+ const raw = readFileSync(CACHE_FILE, 'utf-8');
54
+ const cache = JSON.parse(raw);
55
+ // Check if cache is expired
56
+ const lastUpdated = new Date(cache.lastUpdated).getTime();
57
+ const now = Date.now();
58
+ if (now - lastUpdated > CACHE_EXPIRATION_MS) {
59
+ return [];
60
+ }
61
+ return cache.models;
62
+ }
63
+ catch (error) {
64
+ logDebug('Failed to read discovered models cache:', safeErrorMessage(error));
65
+ return [];
66
+ }
67
+ }
68
+ /**
69
+ * Save discovered models to cache
70
+ */
71
+ async function saveDiscoveredModels(models) {
72
+ try {
73
+ await mkdir(CACHE_DIR, { recursive: true });
74
+ const cache = {
75
+ version: '1.0.0',
76
+ lastUpdated: new Date().toISOString(),
77
+ models,
78
+ };
79
+ writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2), 'utf-8');
80
+ }
81
+ catch (error) {
82
+ logDebug('Failed to save discovered models cache:', safeErrorMessage(error));
83
+ }
84
+ }
85
+ /**
86
+ * Discover models from OpenAI
87
+ */
88
+ async function discoverOpenAIModels(apiKey) {
89
+ const provider = 'openai';
90
+ try {
91
+ const response = await fetch('https://api.openai.com/v1/models', {
92
+ headers: {
93
+ 'Authorization': `Bearer ${apiKey}`,
94
+ },
95
+ });
96
+ if (!response.ok) {
97
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
98
+ }
99
+ const data = await response.json();
100
+ // Filter for GPT models only and create ModelConfig objects
101
+ const models = data.data
102
+ .filter(model => {
103
+ // Allow both dash and non-dash variants for newer reasoning SKUs (o1/o3)
104
+ return (model.id.startsWith('gpt-') ||
105
+ model.id.startsWith('o1') ||
106
+ model.id.startsWith('o3') ||
107
+ model.id.startsWith('codex-'));
108
+ })
109
+ .map(model => ({
110
+ id: model.id,
111
+ label: model.id,
112
+ provider,
113
+ description: `OpenAI ${model.id} (auto-discovered)`,
114
+ capabilities: ['chat', 'tools', 'streaming'],
115
+ }));
116
+ return {
117
+ provider,
118
+ success: true,
119
+ models,
120
+ };
121
+ }
122
+ catch (error) {
123
+ return {
124
+ provider,
125
+ success: false,
126
+ models: [],
127
+ error: error instanceof Error ? error.message : String(error),
128
+ };
129
+ }
130
+ }
131
+ /**
132
+ * Discover models from Anthropic
133
+ */
134
+ async function discoverAnthropicModels(apiKey) {
135
+ const provider = 'anthropic';
136
+ try {
137
+ const response = await fetch('https://api.anthropic.com/v1/models', {
138
+ headers: {
139
+ 'x-api-key': apiKey,
140
+ 'anthropic-version': '2023-06-01',
141
+ },
142
+ });
143
+ if (!response.ok) {
144
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
145
+ }
146
+ const data = await response.json();
147
+ const models = data.data
148
+ .filter(model => model.type === 'model')
149
+ .map(model => ({
150
+ id: model.id,
151
+ label: model.display_name || model.id,
152
+ provider,
153
+ description: `Anthropic ${model.display_name || model.id} (auto-discovered)`,
154
+ capabilities: ['chat', 'reasoning', 'tools', 'streaming'],
155
+ }));
156
+ return {
157
+ provider,
158
+ success: true,
159
+ models,
160
+ };
161
+ }
162
+ catch (error) {
163
+ return {
164
+ provider,
165
+ success: false,
166
+ models: [],
167
+ error: error instanceof Error ? error.message : String(error),
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Discover models from Google Gemini
173
+ * Note: Google's models API often requires special permissions.
174
+ * Falls back to known models if API access fails.
175
+ */
176
+ async function discoverGoogleModels(apiKey) {
177
+ const provider = 'google';
178
+ // Known Google Gemini models (fallback if API doesn't work) - Updated Dec 2025
179
+ const knownModels = [
180
+ { id: 'gemini-3.0-pro', label: 'Gemini 3.0 Pro', provider, description: 'Latest Gemini with best reasoning and coding', capabilities: ['chat', 'reasoning', 'tools', 'streaming', 'multimodal'] },
181
+ { id: 'gemini-3.0-flash', label: 'Gemini 3.0 Flash', provider, description: 'Fast Gemini 3.0 model', capabilities: ['chat', 'reasoning', 'tools', 'streaming', 'multimodal'] },
182
+ { id: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', provider, description: 'Capable Gemini model with advanced reasoning', capabilities: ['chat', 'reasoning', 'tools', 'streaming', 'multimodal'] },
183
+ { id: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', provider, description: 'Fast Gemini 2.5 with reasoning', capabilities: ['chat', 'reasoning', 'tools', 'streaming', 'multimodal'] },
184
+ { id: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash', provider, description: 'Gemini 2.0 with native tool use', capabilities: ['chat', 'tools', 'streaming', 'multimodal'] },
185
+ ];
186
+ try {
187
+ // SECURITY: Use x-goog-api-key header instead of URL query parameter
188
+ // to prevent API key leakage in logs, error messages, and browser history
189
+ const response = await fetch('https://generativelanguage.googleapis.com/v1beta/models', {
190
+ headers: {
191
+ 'x-goog-api-key': apiKey,
192
+ },
193
+ signal: AbortSignal.timeout(24 * 60 * 60 * 1000),
194
+ });
195
+ if (!response.ok) {
196
+ // API access restricted - return known models with warning
197
+ return {
198
+ provider,
199
+ success: true, // Consider it success with fallback
200
+ models: knownModels,
201
+ };
202
+ }
203
+ const data = await response.json();
204
+ const models = data.models
205
+ .filter(model => model.name.includes('gemini') &&
206
+ model.supportedGenerationMethods?.includes('generateContent'))
207
+ .map(model => {
208
+ const id = model.name.replace('models/', '');
209
+ return {
210
+ id,
211
+ label: id,
212
+ provider,
213
+ description: `${model.displayName} (auto-discovered)`,
214
+ capabilities: ['chat', 'reasoning', 'tools', 'streaming', 'multimodal'],
215
+ };
216
+ });
217
+ return {
218
+ provider,
219
+ success: true,
220
+ models: models.length > 0 ? models : knownModels,
221
+ };
222
+ }
223
+ catch {
224
+ // Network error or timeout - return known models
225
+ return {
226
+ provider,
227
+ success: true,
228
+ models: knownModels,
229
+ };
230
+ }
231
+ }
232
+ /**
233
+ * Discover models from DeepSeek (OpenAI-compatible)
234
+ */
235
+ async function discoverDeepSeekModels(apiKey) {
236
+ const provider = 'deepseek';
237
+ try {
238
+ const response = await fetch('https://api.deepseek.com/v1/models', {
239
+ headers: {
240
+ 'Authorization': `Bearer ${apiKey}`,
241
+ },
242
+ });
243
+ if (!response.ok) {
244
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
245
+ }
246
+ const data = await response.json();
247
+ const models = data.data.map(model => ({
248
+ id: model.id,
249
+ label: model.id,
250
+ provider,
251
+ description: `DeepSeek ${model.id} (auto-discovered)`,
252
+ capabilities: ['chat', 'reasoning', 'tools', 'streaming'],
253
+ }));
254
+ return {
255
+ provider,
256
+ success: true,
257
+ models,
258
+ };
259
+ }
260
+ catch (error) {
261
+ return {
262
+ provider,
263
+ success: false,
264
+ models: [],
265
+ error: error instanceof Error ? error.message : String(error),
266
+ };
267
+ }
268
+ }
269
+ /**
270
+ * Discover models from xAI (OpenAI-compatible)
271
+ */
272
+ async function discoverXAIModels(apiKey) {
273
+ const provider = 'xai';
274
+ try {
275
+ const response = await fetch('https://api.x.ai/v1/models', {
276
+ headers: {
277
+ 'Authorization': `Bearer ${apiKey}`,
278
+ },
279
+ });
280
+ if (!response.ok) {
281
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
282
+ }
283
+ const data = await response.json();
284
+ const models = data.data.map(model => ({
285
+ id: model.id,
286
+ label: model.id,
287
+ provider,
288
+ description: `xAI ${model.id} (auto-discovered)`,
289
+ capabilities: ['chat', 'reasoning', 'tools', 'streaming'],
290
+ }));
291
+ return {
292
+ provider,
293
+ success: true,
294
+ models,
295
+ };
296
+ }
297
+ catch (error) {
298
+ return {
299
+ provider,
300
+ success: false,
301
+ models: [],
302
+ error: error instanceof Error ? error.message : String(error),
303
+ };
304
+ }
305
+ }
306
+ /**
307
+ * Discover models from Ollama (local)
308
+ */
309
+ async function discoverOllamaModels() {
310
+ const provider = 'ollama';
311
+ const baseURL = process.env['OLLAMA_BASE_URL'] || 'http://localhost:11434';
312
+ try {
313
+ const response = await fetch(`${baseURL}/api/tags`, {
314
+ signal: AbortSignal.timeout(24 * 60 * 60 * 1000), // 24 hour timeout
315
+ });
316
+ if (!response.ok) {
317
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
318
+ }
319
+ const data = await response.json();
320
+ const models = (data.models || []).map(model => ({
321
+ id: model.name,
322
+ label: model.name,
323
+ provider,
324
+ description: `Local Ollama model: ${model.name} (auto-discovered)`,
325
+ capabilities: ['chat', 'tools', 'streaming'],
326
+ }));
327
+ return {
328
+ provider,
329
+ success: true,
330
+ models,
331
+ };
332
+ }
333
+ catch (error) {
334
+ return {
335
+ provider,
336
+ success: false,
337
+ models: [],
338
+ error: error instanceof Error ? error.message : String(error),
339
+ };
340
+ }
341
+ }
342
+ /**
343
+ * Discover models from Qwen (Alibaba Cloud DashScope - OpenAI-compatible)
344
+ */
345
+ async function discoverQwenModels(apiKey) {
346
+ const provider = 'qwen';
347
+ try {
348
+ // DashScope uses OpenAI-compatible API
349
+ const response = await fetch('https://dashscope.aliyuncs.com/compatible-mode/v1/models', {
350
+ headers: {
351
+ 'Authorization': `Bearer ${apiKey}`,
352
+ },
353
+ });
354
+ if (!response.ok) {
355
+ throw new Error(`API returned ${response.status}: ${response.statusText}`);
356
+ }
357
+ const data = await response.json();
358
+ // Filter for Qwen models and prioritize latest versions
359
+ const qwenModels = data.data
360
+ .filter(model => model.id.toLowerCase().includes('qwen'))
361
+ .map(model => ({
362
+ id: model.id,
363
+ label: model.id,
364
+ provider,
365
+ description: `Alibaba Qwen ${model.id} (auto-discovered)`,
366
+ capabilities: ['chat', 'reasoning', 'tools', 'streaming'],
367
+ }));
368
+ return {
369
+ provider,
370
+ success: true,
371
+ models: qwenModels,
372
+ };
373
+ }
374
+ catch (error) {
375
+ // Fallback to known models if API fails
376
+ const fallbackModels = [
377
+ { id: 'qwen-max', label: 'Qwen Max', provider, description: 'Qwen Max - most capable', capabilities: ['chat', 'reasoning', 'tools', 'streaming'] },
378
+ { id: 'qwen-plus', label: 'Qwen Plus', provider, description: 'Qwen Plus - balanced', capabilities: ['chat', 'reasoning', 'tools', 'streaming'] },
379
+ { id: 'qwen-turbo', label: 'Qwen Turbo', provider, description: 'Qwen Turbo - fast', capabilities: ['chat', 'tools', 'streaming'] },
380
+ ];
381
+ return {
382
+ provider,
383
+ success: false,
384
+ models: fallbackModels,
385
+ error: error instanceof Error ? error.message : String(error),
386
+ };
387
+ }
388
+ }
389
+ /**
390
+ * Discover models from all configured providers
391
+ *
392
+ * PERF: Uses Promise.allSettled for parallel discovery - all providers queried
393
+ * simultaneously. No single slow/failed provider blocks the others.
394
+ */
395
+ export async function discoverAllModels() {
396
+ const errors = [];
397
+ let totalModelsDiscovered = 0;
398
+ // Discover from each provider if API key is available
399
+ const providers = [
400
+ { id: 'deepseek', envVar: 'DEEPSEEK_API_KEY', discover: discoverDeepSeekModels },
401
+ ];
402
+ // PERF: Build discovery promises in parallel
403
+ const discoveryPromises = providers.map(async (provider) => {
404
+ const apiKey = process.env[provider.envVar];
405
+ if (!apiKey) {
406
+ return {
407
+ provider: provider.id,
408
+ success: false,
409
+ models: [],
410
+ error: `API key not configured (${provider.envVar})`,
411
+ };
412
+ }
413
+ try {
414
+ return await provider.discover(apiKey);
415
+ }
416
+ catch (error) {
417
+ const errorMessage = error instanceof Error ? error.message : String(error);
418
+ return {
419
+ provider: provider.id,
420
+ success: false,
421
+ models: [],
422
+ error: errorMessage,
423
+ };
424
+ }
425
+ });
426
+ // PERF: Execute ALL provider discoveries in parallel using Promise.allSettled
427
+ // This ensures one slow/failed provider doesn't block others
428
+ const settledResults = await Promise.allSettled(discoveryPromises);
429
+ // Process results
430
+ const results = settledResults.map((settled, index) => {
431
+ if (settled.status === 'fulfilled') {
432
+ return settled.value;
433
+ }
434
+ // Promise rejected (shouldn't happen with our error handling, but be safe)
435
+ const providerId = index < providers.length
436
+ ? providers[index].id
437
+ : 'ollama';
438
+ return {
439
+ provider: providerId,
440
+ success: false,
441
+ models: [],
442
+ error: settled.reason instanceof Error ? settled.reason.message : String(settled.reason),
443
+ };
444
+ });
445
+ // Collect errors and count models
446
+ for (const result of results) {
447
+ if (result.success) {
448
+ totalModelsDiscovered += result.models.length;
449
+ }
450
+ else if (result.error) {
451
+ // Don't add Ollama connection errors (it's often not running)
452
+ if (result.provider === 'ollama' &&
453
+ (result.error.includes('ECONNREFUSED') ||
454
+ result.error.includes('fetch failed') ||
455
+ result.error.includes('Connection failed'))) {
456
+ continue;
457
+ }
458
+ errors.push(`${result.provider}: ${result.error}`);
459
+ }
460
+ }
461
+ // Collect all discovered models
462
+ const allModels = results
463
+ .filter(r => r.success)
464
+ .flatMap(r => r.models);
465
+ // Save to cache
466
+ if (allModels.length > 0) {
467
+ await saveDiscoveredModels(allModels);
468
+ }
469
+ return {
470
+ success: errors.length === 0,
471
+ timestamp: new Date().toISOString(),
472
+ results,
473
+ totalModelsDiscovered,
474
+ errors,
475
+ };
476
+ }
477
+ /**
478
+ * Clear the discovered models cache
479
+ */
480
+ export function clearDiscoveredModelsCache() {
481
+ try {
482
+ if (existsSync(CACHE_FILE)) {
483
+ writeFileSync(CACHE_FILE, JSON.stringify({ version: '1.0.0', lastUpdated: new Date().toISOString(), models: [] }, null, 2), 'utf-8');
484
+ }
485
+ }
486
+ catch (error) {
487
+ logDebug('Failed to clear discovered models cache:', safeErrorMessage(error));
488
+ }
489
+ }
490
+ /**
491
+ * Supported providers with their environment variable requirements
492
+ */
493
+ const PROVIDER_CONFIGS = [
494
+ {
495
+ id: 'deepseek',
496
+ name: 'DeepSeek',
497
+ envVar: 'DEEPSEEK_API_KEY',
498
+ defaultLatestModel: 'deepseek-reasoner',
499
+ fallbackModels: ['deepseek-chat']
500
+ },
501
+ ];
502
+ /**
503
+ * Model priority rankings for selecting the "best" model
504
+ */
505
+ const MODEL_PRIORITIES = {
506
+ deepseek: {
507
+ 'deepseek-reasoner': 100,
508
+ 'deepseek-chat': 90,
509
+ 'deepseek-coder': 85,
510
+ },
511
+ openai: {
512
+ 'gpt-5.2-pro': 110,
513
+ 'gpt-5.2-codex': 105,
514
+ 'gpt-5.2-codex-mini': 100,
515
+ 'gpt-5': 95,
516
+ 'gpt-4': 90,
517
+ 'o3': 85,
518
+ 'o1': 80,
519
+ },
520
+ anthropic: {
521
+ 'claude-opus-4-5': 110,
522
+ 'claude-sonnet-4-5': 105,
523
+ 'claude-haiku-4-5': 100,
524
+ 'claude-3': 90,
525
+ },
526
+ xai: {
527
+ 'grok-4-1-fast-reasoning': 100,
528
+ 'grok-4': 90,
529
+ },
530
+ google: {
531
+ 'gemini-3.0-pro': 100,
532
+ 'gemini-2.5-flash': 90,
533
+ },
534
+ };
535
+ /**
536
+ * Get model priority for sorting
537
+ */
538
+ function getModelPriority(provider, modelId) {
539
+ const priorities = MODEL_PRIORITIES[provider];
540
+ if (!priorities)
541
+ return 0;
542
+ // Check for exact match first
543
+ if (priorities[modelId] !== undefined) {
544
+ return priorities[modelId];
545
+ }
546
+ // Check for prefix match
547
+ for (const [prefix, priority] of Object.entries(priorities)) {
548
+ if (modelId.startsWith(prefix)) {
549
+ return priority;
550
+ }
551
+ }
552
+ return 0;
553
+ }
554
+ /**
555
+ * Sort models by priority (best first)
556
+ */
557
+ export function sortModelsByPriority(provider, models) {
558
+ return [...models].sort((a, b) => {
559
+ const priorityA = getModelPriority(provider, a);
560
+ const priorityB = getModelPriority(provider, b);
561
+ return priorityB - priorityA;
562
+ });
563
+ }
564
+ /**
565
+ * Get the best/latest model for a provider
566
+ */
567
+ export function getBestModel(provider, models) {
568
+ if (models.length === 0) {
569
+ const config = PROVIDER_CONFIGS.find(p => p.id === provider);
570
+ return config?.defaultLatestModel || '';
571
+ }
572
+ const sorted = sortModelsByPriority(provider, models);
573
+ return sorted[0] ?? models[0] ?? '';
574
+ }
575
+ /**
576
+ * Check if a provider is configured (has API key or is accessible)
577
+ */
578
+ export function isProviderConfigured(providerId) {
579
+ const config = PROVIDER_CONFIGS.find(p => p.id === providerId);
580
+ if (!config)
581
+ return false;
582
+ // Ollama is special - it's available if the server is running (no API key needed)
583
+ if (providerId === 'ollama') {
584
+ // We'll check this via actual connection, return true for now
585
+ // The actual check happens in getConfiguredProviders
586
+ return true;
587
+ }
588
+ // Check main env var
589
+ if (process.env[config.envVar]) {
590
+ return true;
591
+ }
592
+ // Check alternative env vars
593
+ if (config.altEnvVars) {
594
+ for (const altVar of config.altEnvVars) {
595
+ if (process.env[altVar]) {
596
+ return true;
597
+ }
598
+ }
599
+ }
600
+ return false;
601
+ }
602
+ /**
603
+ * Get all providers with their configuration status
604
+ */
605
+ export function getProvidersStatus() {
606
+ return PROVIDER_CONFIGS.map(config => {
607
+ let configured = false;
608
+ if (config.id === 'ollama') {
609
+ // For Ollama, we can't check synchronously if it's running
610
+ // Mark as potentially available
611
+ configured = !!process.env['OLLAMA_BASE_URL'] || true; // Always show Ollama as option
612
+ }
613
+ else {
614
+ configured = !!process.env[config.envVar];
615
+ if (!configured && config.altEnvVars) {
616
+ configured = config.altEnvVars.some(v => !!process.env[v]);
617
+ }
618
+ }
619
+ return {
620
+ id: config.id,
621
+ name: config.name,
622
+ envVar: config.envVar,
623
+ configured,
624
+ latestModel: config.defaultLatestModel,
625
+ };
626
+ });
627
+ }
628
+ /**
629
+ * Get list of configured providers (with valid API keys)
630
+ */
631
+ export function getConfiguredProviders() {
632
+ return getProvidersStatus().filter(p => p.configured);
633
+ }
634
+ /**
635
+ * Get list of unconfigured providers
636
+ */
637
+ export function getUnconfiguredProviders() {
638
+ return getProvidersStatus().filter(p => !p.configured);
639
+ }
640
+ /**
641
+ * Get the first available provider (for auto-selection)
642
+ */
643
+ export function getFirstAvailableProvider() {
644
+ const configured = getConfiguredProviders();
645
+ // DeepSeek is the only supported provider
646
+ const preferenceOrder = ['deepseek'];
647
+ for (const providerId of preferenceOrder) {
648
+ const provider = configured.find(p => p.id === providerId);
649
+ if (provider) {
650
+ return provider;
651
+ }
652
+ }
653
+ return null;
654
+ }
655
+ /**
656
+ * Get latest model for a provider from cache or defaults
657
+ */
658
+ export function getLatestModelForProvider(providerId) {
659
+ // Check cache first
660
+ const cached = getCachedDiscoveredModels();
661
+ const providerModels = cached.filter(m => m.provider === providerId);
662
+ if (providerModels.length > 0) {
663
+ const modelIds = providerModels.map(m => m.id);
664
+ return getBestModel(providerId, modelIds);
665
+ }
666
+ // Fall back to default
667
+ const config = PROVIDER_CONFIGS.find(p => p.id === providerId);
668
+ return config?.defaultLatestModel || '';
669
+ }
670
+ /**
671
+ * Quick API check for a single provider - returns best model or null
672
+ */
673
+ async function quickFetchProviderModels(providerId, apiKey, timeoutMs = 24 * 60 * 60 * 1000) {
674
+ try {
675
+ if (providerId === 'deepseek') {
676
+ const response = await fetch('https://api.deepseek.com/v1/models', {
677
+ headers: { 'Authorization': `Bearer ${apiKey}` },
678
+ signal: AbortSignal.timeout(timeoutMs),
679
+ });
680
+ if (!response.ok)
681
+ return [];
682
+ const data = await response.json();
683
+ return data.data.map(m => m.id);
684
+ }
685
+ return [];
686
+ }
687
+ catch {
688
+ return [];
689
+ }
690
+ }
691
+ /**
692
+ * Quickly check if providers are available by querying their APIs
693
+ * Returns actual latest models from each provider
694
+ */
695
+ export async function quickCheckProviders() {
696
+ const checks = [];
697
+ for (const config of PROVIDER_CONFIGS) {
698
+ // Handle Ollama separately (no API key needed)
699
+ if (config.id === 'ollama') {
700
+ checks.push((async () => {
701
+ try {
702
+ const baseURL = process.env['OLLAMA_BASE_URL'] || 'http://localhost:11434';
703
+ const response = await fetch(`${baseURL}/api/tags`, {
704
+ signal: AbortSignal.timeout(24 * 60 * 60 * 1000),
705
+ });
706
+ if (response.ok) {
707
+ const data = await response.json();
708
+ const models = data.models?.map(m => m.name) || [];
709
+ return {
710
+ provider: 'ollama',
711
+ available: models.length > 0,
712
+ latestModel: models[0] || config.defaultLatestModel,
713
+ };
714
+ }
715
+ }
716
+ catch { /* ignore */ }
717
+ return {
718
+ provider: 'ollama',
719
+ available: false,
720
+ latestModel: config.defaultLatestModel,
721
+ error: 'Not running',
722
+ };
723
+ })());
724
+ continue;
725
+ }
726
+ // Check for API key
727
+ let apiKey = process.env[config.envVar];
728
+ if (!apiKey && config.altEnvVars) {
729
+ for (const altVar of config.altEnvVars) {
730
+ if (process.env[altVar]) {
731
+ apiKey = process.env[altVar];
732
+ break;
733
+ }
734
+ }
735
+ }
736
+ if (!apiKey) {
737
+ checks.push(Promise.resolve({
738
+ provider: config.id,
739
+ available: false,
740
+ latestModel: config.defaultLatestModel,
741
+ error: `${config.envVar} not set`,
742
+ }));
743
+ continue;
744
+ }
745
+ // Query the API for actual models
746
+ checks.push((async () => {
747
+ const models = await quickFetchProviderModels(config.id, apiKey, 3000);
748
+ if (models.length > 0) {
749
+ const bestModel = getBestModel(config.id, models);
750
+ return {
751
+ provider: config.id,
752
+ available: true,
753
+ latestModel: bestModel,
754
+ };
755
+ }
756
+ // API call failed or returned no models - still mark available if key exists
757
+ return {
758
+ provider: config.id,
759
+ available: true,
760
+ latestModel: config.defaultLatestModel,
761
+ error: 'Could not fetch models',
762
+ };
763
+ })());
764
+ }
765
+ // Run all checks in parallel for speed
766
+ return Promise.all(checks);
767
+ }
768
+ //# sourceMappingURL=modelDiscovery.js.map