@xopcai/xopcbot 0.1.3 → 0.2.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 (292) hide show
  1. package/README.md +57 -52
  2. package/README.zh-CN.md +56 -49
  3. package/dist/agent/__tests__/media-processing.test.d.ts +6 -0
  4. package/dist/agent/__tests__/media-processing.test.js +385 -0
  5. package/dist/agent/__tests__/media-processing.test.js.map +1 -0
  6. package/dist/agent/fallback/__tests__/index.test.js +16 -5
  7. package/dist/agent/fallback/__tests__/index.test.js.map +1 -1
  8. package/dist/agent/fallback/candidates.d.ts +2 -4
  9. package/dist/agent/fallback/candidates.js +19 -26
  10. package/dist/agent/fallback/candidates.js.map +1 -1
  11. package/dist/agent/helpers.d.ts +1 -0
  12. package/dist/agent/helpers.js.map +1 -1
  13. package/dist/agent/index.d.ts +6 -1
  14. package/dist/agent/index.js +10 -1
  15. package/dist/agent/index.js.map +1 -1
  16. package/dist/agent/models/compat.d.ts +35 -0
  17. package/dist/agent/models/compat.js +110 -0
  18. package/dist/agent/models/compat.js.map +1 -0
  19. package/dist/agent/models/fallback.d.ts +38 -0
  20. package/dist/agent/models/fallback.js +133 -0
  21. package/dist/agent/models/fallback.js.map +1 -0
  22. package/dist/agent/models/index.d.ts +10 -0
  23. package/dist/agent/models/index.js +11 -0
  24. package/dist/agent/models/index.js.map +1 -0
  25. package/dist/agent/{model-manager.d.ts → models/manager.d.ts} +2 -8
  26. package/dist/agent/{model-manager.js → models/manager.js} +38 -24
  27. package/dist/agent/models/manager.js.map +1 -0
  28. package/dist/agent/models/scan.d.ts +46 -0
  29. package/dist/agent/models/scan.js +177 -0
  30. package/dist/agent/models/scan.js.map +1 -0
  31. package/dist/agent/models/selection.d.ts +44 -0
  32. package/dist/agent/models/selection.js +141 -0
  33. package/dist/agent/models/selection.js.map +1 -0
  34. package/dist/agent/prompt/index.js +1 -1
  35. package/dist/agent/prompt/index.js.map +1 -1
  36. package/dist/agent/service.js +34 -16
  37. package/dist/agent/service.js.map +1 -1
  38. package/dist/agent/skills/__tests__/test-framework.test.js +15 -7
  39. package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -1
  40. package/dist/agent/skills/config.d.ts +1 -1
  41. package/dist/agent/skills/config.js +2 -2
  42. package/dist/agent/skills/config.js.map +1 -1
  43. package/dist/agent/skills/index.js +15 -28
  44. package/dist/agent/skills/index.js.map +1 -1
  45. package/dist/agent/skills/installer.d.ts +1 -1
  46. package/dist/agent/skills/installer.js +1 -1
  47. package/dist/agent/skills/scanner.d.ts +1 -1
  48. package/dist/agent/skills/scanner.js +1 -1
  49. package/dist/agent/skills/test-framework.js +24 -23
  50. package/dist/agent/skills/test-framework.js.map +1 -1
  51. package/dist/agent/skills/types.d.ts +3 -3
  52. package/dist/agent/skills/types.js +1 -1
  53. package/dist/agent/skills/watcher.d.ts +1 -1
  54. package/dist/agent/skills/watcher.js +1 -1
  55. package/dist/agent/system-prompt.d.ts +67 -0
  56. package/dist/agent/system-prompt.js +351 -0
  57. package/dist/agent/system-prompt.js.map +1 -0
  58. package/dist/agent/tools/__tests__/send-media.test.d.ts +6 -0
  59. package/dist/agent/tools/__tests__/send-media.test.js +251 -0
  60. package/dist/agent/tools/__tests__/send-media.test.js.map +1 -0
  61. package/dist/agent/types.agent-defaults.d.ts +48 -0
  62. package/dist/agent/types.agent-defaults.js +5 -0
  63. package/dist/agent/types.agent-defaults.js.map +1 -0
  64. package/dist/agent/types.d.ts +14 -6
  65. package/dist/agent/types.js +5 -0
  66. package/dist/agent/types.js.map +1 -1
  67. package/dist/agent/workspace.d.ts +94 -0
  68. package/dist/agent/workspace.js +625 -0
  69. package/dist/agent/workspace.js.map +1 -0
  70. package/dist/auth/index.js +1 -1
  71. package/dist/auth/index.js.map +1 -1
  72. package/dist/auth/oauth/index.d.ts +1 -0
  73. package/dist/auth/oauth/index.js +1 -0
  74. package/dist/auth/oauth/index.js.map +1 -1
  75. package/dist/auth/oauth/kimi.d.ts +2 -1
  76. package/dist/auth/oauth/kimi.js +51 -48
  77. package/dist/auth/oauth/kimi.js.map +1 -1
  78. package/dist/auth/oauth/minimax-cn.d.ts +12 -0
  79. package/dist/auth/oauth/minimax-cn.js +111 -0
  80. package/dist/auth/oauth/minimax-cn.js.map +1 -0
  81. package/dist/auth/oauth/qwen.d.ts +5 -0
  82. package/dist/auth/oauth/qwen.js +54 -84
  83. package/dist/auth/oauth/qwen.js.map +1 -1
  84. package/dist/auth/profiles/index.d.ts +0 -2
  85. package/dist/auth/profiles/index.js +0 -2
  86. package/dist/auth/profiles/index.js.map +1 -1
  87. package/dist/auth/storage.js +7 -1
  88. package/dist/auth/storage.js.map +1 -1
  89. package/dist/channels/__tests__/media-integration.test.d.ts +6 -0
  90. package/dist/channels/__tests__/media-integration.test.js +398 -0
  91. package/dist/channels/__tests__/media-integration.test.js.map +1 -0
  92. package/dist/channels/__tests__/media.test.d.ts +6 -0
  93. package/dist/channels/__tests__/media.test.js +251 -0
  94. package/dist/channels/__tests__/media.test.js.map +1 -0
  95. package/dist/channels/access-control.d.ts +1 -1
  96. package/dist/channels/access-control.js +1 -1
  97. package/dist/channels/draft-stream.d.ts +1 -1
  98. package/dist/channels/draft-stream.js +1 -1
  99. package/dist/channels/format.d.ts +1 -1
  100. package/dist/channels/format.js +1 -1
  101. package/dist/channels/telegram/command-handler.js +15 -48
  102. package/dist/channels/telegram/command-handler.js.map +1 -1
  103. package/dist/channels/telegram/plugin.js +3 -2
  104. package/dist/channels/telegram/plugin.js.map +1 -1
  105. package/dist/channels/telegram/webhook.d.ts +1 -1
  106. package/dist/channels/telegram/webhook.js +1 -1
  107. package/dist/channels/types.d.ts +1 -1
  108. package/dist/channels/types.js +1 -1
  109. package/dist/channels/update-offset-store.d.ts +1 -1
  110. package/dist/channels/update-offset-store.js +1 -1
  111. package/dist/cli/commands/auth.js +8 -23
  112. package/dist/cli/commands/auth.js.map +1 -1
  113. package/dist/cli/commands/gateway.js +9 -1
  114. package/dist/cli/commands/gateway.js.map +1 -1
  115. package/dist/cli/commands/models.js +35 -29
  116. package/dist/cli/commands/models.js.map +1 -1
  117. package/dist/cli/commands/onboard.js +166 -115
  118. package/dist/cli/commands/onboard.js.map +1 -1
  119. package/dist/cli/commands/setup.js +123 -0
  120. package/dist/cli/commands/setup.js.map +1 -0
  121. package/dist/cli/commands/skills.js +6 -6
  122. package/dist/cli/commands/skills.js.map +1 -1
  123. package/dist/cli/index.d.ts +1 -1
  124. package/dist/cli/index.js +1 -1
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/cli/templates.d.ts +2 -0
  127. package/dist/cli/templates.js +1 -1
  128. package/dist/cli/templates.js.map +1 -1
  129. package/dist/config/defaults.d.ts +19 -0
  130. package/dist/config/defaults.js +168 -0
  131. package/dist/config/defaults.js.map +1 -0
  132. package/dist/config/index.d.ts +5 -0
  133. package/dist/config/index.js +4 -0
  134. package/dist/config/index.js.map +1 -1
  135. package/dist/config/integration.d.ts +12 -0
  136. package/dist/config/integration.js +14 -0
  137. package/dist/config/integration.js.map +1 -0
  138. package/dist/config/models-json.d.ts +454 -0
  139. package/dist/config/models-json.js +323 -0
  140. package/dist/config/models-json.js.map +1 -0
  141. package/dist/config/paths.d.ts +2 -0
  142. package/dist/config/paths.js +4 -0
  143. package/dist/config/paths.js.map +1 -1
  144. package/dist/config/reload.d.ts +1 -1
  145. package/dist/config/reload.js +3 -3
  146. package/dist/config/reload.js.map +1 -1
  147. package/dist/config/resolve-config-value.d.ts +36 -0
  148. package/dist/config/resolve-config-value.js +218 -0
  149. package/dist/config/resolve-config-value.js.map +1 -0
  150. package/dist/config/rules.js +3 -2
  151. package/dist/config/rules.js.map +1 -1
  152. package/dist/config/schema.d.ts +17 -884
  153. package/dist/config/schema.js +36 -312
  154. package/dist/config/schema.js.map +1 -1
  155. package/dist/config/types.models.d.ts +54 -0
  156. package/dist/config/types.models.js +2 -0
  157. package/dist/config/types.models.js.map +1 -0
  158. package/dist/cron/validation.d.ts +4 -4
  159. package/dist/gateway/hono/app.js +232 -78
  160. package/dist/gateway/hono/app.js.map +1 -1
  161. package/dist/gateway/hono/oauth-async.d.ts +14 -0
  162. package/dist/gateway/hono/oauth-async.js +285 -0
  163. package/dist/gateway/hono/oauth-async.js.map +1 -0
  164. package/dist/gateway/hono/oauth.d.ts +9 -0
  165. package/dist/gateway/hono/oauth.js +157 -0
  166. package/dist/gateway/hono/oauth.js.map +1 -0
  167. package/dist/gateway/hono/sse.js +5 -2
  168. package/dist/gateway/hono/sse.js.map +1 -1
  169. package/dist/gateway/process-manager.js +12 -10
  170. package/dist/gateway/process-manager.js.map +1 -1
  171. package/dist/gateway/service.d.ts +6 -2
  172. package/dist/gateway/service.js +20 -6
  173. package/dist/gateway/service.js.map +1 -1
  174. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
  175. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
  176. package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
  177. package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
  178. package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
  179. package/dist/gateway/static/root/index.html +2 -2
  180. package/dist/plugins/index.d.ts +0 -2
  181. package/dist/plugins/index.js +0 -2
  182. package/dist/plugins/index.js.map +1 -1
  183. package/dist/plugins/types.d.ts +0 -2
  184. package/dist/plugins/types.js +0 -2
  185. package/dist/plugins/types.js.map +1 -1
  186. package/dist/providers/index.d.ts +50 -22
  187. package/dist/providers/index.js +276 -50
  188. package/dist/providers/index.js.map +1 -1
  189. package/dist/providers/model-registry.d.ts +84 -0
  190. package/dist/providers/model-registry.js +385 -0
  191. package/dist/providers/model-registry.js.map +1 -0
  192. package/dist/types/providers.d.ts +2 -63
  193. package/dist/types/providers.js +1 -1
  194. package/dist/utils/__tests__/frontmatter.test.d.ts +4 -0
  195. package/dist/utils/__tests__/frontmatter.test.js +150 -0
  196. package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
  197. package/dist/utils/diagnostic-events.d.ts +230 -0
  198. package/dist/utils/diagnostic-events.js +189 -0
  199. package/dist/utils/diagnostic-events.js.map +1 -0
  200. package/dist/utils/frontmatter.d.ts +0 -1
  201. package/dist/utils/frontmatter.js +15 -79
  202. package/dist/utils/frontmatter.js.map +1 -1
  203. package/dist/utils/log-stream.d.ts +95 -0
  204. package/dist/utils/log-stream.js +229 -0
  205. package/dist/utils/log-stream.js.map +1 -0
  206. package/dist/utils/logger.d.ts +5 -0
  207. package/dist/utils/logger.js +25 -0
  208. package/dist/utils/logger.js.map +1 -1
  209. package/dist/utils/redact.d.ts +73 -0
  210. package/dist/utils/redact.js +245 -0
  211. package/dist/utils/redact.js.map +1 -0
  212. package/package.json +6 -4
  213. package/skills/find-skills/SKILL.md +0 -9
  214. package/dist/__tests__/core.test.js +0 -72
  215. package/dist/__tests__/core.test.js.map +0 -1
  216. package/dist/agent/model-manager.js.map +0 -1
  217. package/dist/cli/commands/configure.d.ts +0 -1
  218. package/dist/cli/commands/configure.js +0 -173
  219. package/dist/cli/commands/configure.js.map +0 -1
  220. package/dist/cli/commands/gateway-daemon.d.ts +0 -1
  221. package/dist/cli/commands/gateway-daemon.js +0 -141
  222. package/dist/cli/commands/gateway-daemon.js.map +0 -1
  223. package/dist/config/__tests__/diff.test.d.ts +0 -1
  224. package/dist/config/__tests__/diff.test.js +0 -192
  225. package/dist/config/__tests__/diff.test.js.map +0 -1
  226. package/dist/config/__tests__/loader.test.d.ts +0 -1
  227. package/dist/config/__tests__/loader.test.js +0 -356
  228. package/dist/config/__tests__/loader.test.js.map +0 -1
  229. package/dist/config/__tests__/paths.test.d.ts +0 -1
  230. package/dist/config/__tests__/paths.test.js +0 -192
  231. package/dist/config/__tests__/paths.test.js.map +0 -1
  232. package/dist/config/__tests__/reload.test.d.ts +0 -1
  233. package/dist/config/__tests__/reload.test.js +0 -374
  234. package/dist/config/__tests__/reload.test.js.map +0 -1
  235. package/dist/config/__tests__/rules.test.d.ts +0 -1
  236. package/dist/config/__tests__/rules.test.js +0 -204
  237. package/dist/config/__tests__/rules.test.js.map +0 -1
  238. package/dist/config/__tests__/schema.test.d.ts +0 -1
  239. package/dist/config/__tests__/schema.test.js +0 -672
  240. package/dist/config/__tests__/schema.test.js.map +0 -1
  241. package/dist/daemon/background-start.d.ts +0 -33
  242. package/dist/daemon/background-start.js +0 -89
  243. package/dist/daemon/background-start.js.map +0 -1
  244. package/dist/daemon/gateway-manager.d.ts +0 -87
  245. package/dist/daemon/gateway-manager.js +0 -324
  246. package/dist/daemon/gateway-manager.js.map +0 -1
  247. package/dist/daemon/index.d.ts +0 -5
  248. package/dist/daemon/index.js +0 -6
  249. package/dist/daemon/index.js.map +0 -1
  250. package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
  251. package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
  252. package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
  253. package/dist/providers/__tests__/registry.test.d.ts +0 -1
  254. package/dist/providers/__tests__/registry.test.js +0 -110
  255. package/dist/providers/__tests__/registry.test.js.map +0 -1
  256. package/dist/providers/api-strategies.d.ts +0 -15
  257. package/dist/providers/api-strategies.js +0 -96
  258. package/dist/providers/api-strategies.js.map +0 -1
  259. package/dist/providers/auto-discovery.d.ts +0 -84
  260. package/dist/providers/auto-discovery.js +0 -236
  261. package/dist/providers/auto-discovery.js.map +0 -1
  262. package/dist/providers/config.d.ts +0 -25
  263. package/dist/providers/config.js +0 -42
  264. package/dist/providers/config.js.map +0 -1
  265. package/dist/providers/model-catalog.d.ts +0 -205
  266. package/dist/providers/model-catalog.js +0 -1071
  267. package/dist/providers/model-catalog.js.map +0 -1
  268. package/dist/providers/models-dev-data.d.ts +0 -11
  269. package/dist/providers/models-dev-data.js +0 -1035
  270. package/dist/providers/models-dev-data.js.map +0 -1
  271. package/dist/providers/models-dev.d.ts +0 -30
  272. package/dist/providers/models-dev.js +0 -42
  273. package/dist/providers/models-dev.js.map +0 -1
  274. package/dist/providers/pi-ai.d.ts +0 -62
  275. package/dist/providers/pi-ai.js +0 -221
  276. package/dist/providers/pi-ai.js.map +0 -1
  277. package/dist/providers/provider-catalog.d.ts +0 -173
  278. package/dist/providers/provider-catalog.js +0 -834
  279. package/dist/providers/provider-catalog.js.map +0 -1
  280. package/dist/providers/registry.d.ts +0 -155
  281. package/dist/providers/registry.js +0 -524
  282. package/dist/providers/registry.js.map +0 -1
  283. package/dist/providers/types.d.ts +0 -95
  284. package/dist/providers/types.js +0 -7
  285. package/dist/providers/types.js.map +0 -1
  286. package/dist/session/chat-manager.d.ts +0 -49
  287. package/dist/session/chat-manager.js +0 -167
  288. package/dist/session/chat-manager.js.map +0 -1
  289. package/dist/session/chat-types.d.ts +0 -53
  290. package/dist/session/chat-types.js +0 -63
  291. package/dist/session/chat-types.js.map +0 -1
  292. /package/dist/{__tests__/core.test.d.ts → cli/commands/setup.d.ts} +0 -0
@@ -1,55 +1,281 @@
1
1
  /**
2
- * Provider Module
3
- *
4
- * LLM provider implementations.
5
- *
6
- * New Architecture (ModelRegistry):
7
- * - registry.ts: Model registration and management
8
- * - pi-ai.ts: Unified provider adapter with strict types
9
- * - api-strategies.ts: Provider-specific API option builders
10
- * - config.ts: Centralized provider configuration
11
- * - provider-catalog.ts: Unified provider definitions
12
- * - model-catalog.ts: Model capabilities system
13
- *
14
- * Auth Profiles:
15
- * - auth/profiles/: Advanced credential management with OAuth support
2
+ * Model provider module - integrates built-in models with custom models from models.json
16
3
  */
17
- // Core exports
18
- export { LLMProviderImpl, createProvider, getAvailableModels, listAllModels } from './pi-ai.js';
19
- // ModelRegistry exports
20
- export { ModelRegistry, resolveConfigValue, PROVIDER_INFO, registerOAuthRefresh, } from './registry.js';
21
- // API strategies
22
- export { getApiStrategy, buildProviderOptions } from './api-strategies.js';
23
- // Configuration
24
- export { createProviderConfig, loadProviderConfigFromEnv, DEFAULT_PROVIDER_CONFIG, } from './config.js';
25
- // ============================================
26
- // Provider Catalog
27
- // ============================================
28
- export {
29
- // Core
30
- PROVIDER_CATALOG, getProvider, getAllProviders,
31
- // Detection & Configuration
32
- detectProviderByModel, isProviderConfigured, getConfiguredProviders, getProviderApiKey,
33
- // Display
34
- getProviderDisplayInfo, getAllProviderDisplayInfo,
35
- // Model reference parsing
36
- parseModelRef, registerCustomProvider, createCustomProviderFromConfig, } from './provider-catalog.js';
37
- // ============================================
38
- // Auto Discovery
39
- // ============================================
40
- export { scanProviders, recommendDefaultModel, generateAutoConfig, generateConfigTemplate, quickSetup, isModelAvailable, getBestAvailableModel, printDiagnostic, getConfigSummary, } from './auto-discovery.js';
4
+ import { getModel as getPiAiModel, getModels as getPiAiModels, getProviders as getPiAiProviders, } from '@mariozechner/pi-ai';
5
+ import { getModelRegistry } from './model-registry.js';
41
6
  // ============================================
42
- // Model Catalog
7
+ // Provider Environment Variable Mappings
43
8
  // ============================================
44
- export {
45
- // Core
46
- MODEL_CATALOG, getAllModels, findModel, findModelByProvider, findModelByRef, getModelsByProvider,
47
- // Recommendations
48
- getRecommendedModels, getModelsForTask,
49
- // Capabilities
50
- getModelsByCapability, getModelsByModality, getVisionModels, getFunctionCallingModels, modelSupportsModality, modelSupportsFeature,
51
- // Pricing & Performance
52
- estimateCost, getModelComparisonInfo,
53
- // Utilities
54
- getFullModelRef, parseModelReference, registerCustomModel, } from './model-catalog.js';
9
+ // Unified mapping of provider -> environment variable names
10
+ // This is the single source of truth for API key resolution
11
+ export const PROVIDER_ENV_MAP = {
12
+ openai: ['OPENAI_API_KEY'],
13
+ anthropic: ['ANTHROPIC_API_KEY'],
14
+ google: ['GEMINI_API_KEY', 'GOOGLE_API_KEY'],
15
+ 'google-vertex': ['GOOGLE_CLOUD_PROJECT', 'GOOGLE_CLOUD_LOCATION'],
16
+ groq: ['GROQ_API_KEY'],
17
+ deepseek: ['DEEPSEEK_API_KEY'],
18
+ xai: ['XAI_API_KEY'],
19
+ cerebras: ['CEREBRAS_API_KEY'],
20
+ mistral: ['MISTRAL_API_KEY'],
21
+ openrouter: ['OPENROUTER_API_KEY'],
22
+ 'azure-openai-responses': ['AZURE_OPENAI_API_KEY', 'AZURE_OPENAI_BASE_URL'],
23
+ 'amazon-bedrock': ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_REGION'],
24
+ minimax: ['MINIMAX_API_KEY'],
25
+ 'minimax-cn': ['MINIMAX_API_KEY'],
26
+ 'kimi-coding': ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],
27
+ huggingface: ['HF_TOKEN', 'HUGGINGFACE_TOKEN'],
28
+ opencode: ['OPENCODE_API_KEY'],
29
+ zai: ['ZAI_API_KEY'],
30
+ zhipu: ['ZHIPU_API_KEY'],
31
+ qwen: ['QWEN_API_KEY', 'DASHSCOPE_API_KEY'],
32
+ kimi: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],
33
+ 'google-gemini-cli': ['GEMINI_CLI_TOKEN', 'GOOGLE_TOKEN'],
34
+ 'google-antigravity': ['ANTIGRAVITY_API_KEY'],
35
+ vercel: ['VERCEL_TOKEN'],
36
+ 'vercel-ai-gateway': ['VERCEL_AI_GATEWAY_API_KEY'],
37
+ 'github-copilot': ['GITHUB_TOKEN', 'GITHUB_COPILOT_TOKEN'],
38
+ };
39
+ /**
40
+ * Get API key from environment variables for a provider
41
+ */
42
+ export function getApiKeyFromEnv(provider) {
43
+ // Standard format: PROVIDER_API_KEY
44
+ const envVar = provider.toUpperCase().replace(/-/g, '_') + '_API_KEY';
45
+ const envKey = process.env[envVar];
46
+ if (envKey)
47
+ return envKey;
48
+ // Provider-specific env var mappings
49
+ const keys = PROVIDER_ENV_MAP[provider] || [];
50
+ for (const key of keys) {
51
+ if (process.env[key])
52
+ return process.env[key];
53
+ }
54
+ return undefined;
55
+ }
56
+ /**
57
+ * Resolve model reference. Supports:
58
+ * - "provider/modelId" format
59
+ * - "modelId" auto-detection via pi-ai or custom models
60
+ * @throws if model not found
61
+ */
62
+ export function resolveModel(ref) {
63
+ // First try ModelRegistry (includes custom models)
64
+ const registry = getModelRegistry();
65
+ const customModel = registry.resolve(ref);
66
+ if (customModel) {
67
+ return customModel;
68
+ }
69
+ // Fall back to built-in models
70
+ if (ref.includes('/')) {
71
+ const [provider, modelId] = ref.split('/');
72
+ const model = getPiAiModel(provider, modelId);
73
+ if (!model)
74
+ throw new Error(`Model not found: ${ref}`);
75
+ return model;
76
+ }
77
+ for (const provider of getPiAiProviders()) {
78
+ try {
79
+ const models = getPiAiModels(provider);
80
+ const found = models.find(m => m.id === ref);
81
+ if (found)
82
+ return found;
83
+ }
84
+ catch {
85
+ continue;
86
+ }
87
+ }
88
+ throw new Error(`Model not found: ${ref}. Use format: provider/model-id`);
89
+ }
90
+ export function getModelsByProvider(provider) {
91
+ // Get from registry (includes custom models)
92
+ const registry = getModelRegistry();
93
+ return registry.getAll().filter(m => m.provider === provider);
94
+ }
95
+ export function getAllProviders() {
96
+ const registry = getModelRegistry();
97
+ const providers = new Set();
98
+ // Add built-in providers
99
+ for (const p of getPiAiProviders()) {
100
+ providers.add(p);
101
+ }
102
+ // Add custom providers from registry
103
+ for (const m of registry.getAll()) {
104
+ providers.add(m.provider);
105
+ }
106
+ return Array.from(providers);
107
+ }
108
+ export function getApiKey(config, provider) {
109
+ // Check config.providers first (simple string format only)
110
+ const configKey = config?.providers?.[provider];
111
+ if (configKey) {
112
+ return configKey;
113
+ }
114
+ // Check registry for custom providers (from models.json)
115
+ const registry = getModelRegistry();
116
+ const registryKey = registry.getApiKey(provider);
117
+ if (registryKey) {
118
+ return registryKey;
119
+ }
120
+ // Check environment variables
121
+ return getApiKeyFromEnv(provider);
122
+ }
123
+ export function isProviderConfigured(config, provider) {
124
+ return !!getApiKey(config, provider);
125
+ }
126
+ export function getConfiguredProviders(config) {
127
+ return getAllProviders().filter(p => isProviderConfigured(config, p));
128
+ }
129
+ export function getAllModels() {
130
+ const registry = getModelRegistry();
131
+ return registry.getAll();
132
+ }
133
+ export function getAvailableModels(config) {
134
+ const registry = getModelRegistry();
135
+ const allModels = registry.getAll();
136
+ // Filter models by checking if provider has auth configured
137
+ // Check in order: config.providers -> registry.getApiKey() -> environment variables
138
+ return allModels.filter(model => {
139
+ // Check config.providers first
140
+ if (config?.providers?.[model.provider]) {
141
+ return true;
142
+ }
143
+ // Check registry (models.json custom providers)
144
+ if (registry.getApiKey(model.provider)) {
145
+ return true;
146
+ }
147
+ // Check environment variables
148
+ if (getApiKeyFromEnv(model.provider)) {
149
+ return true;
150
+ }
151
+ return false;
152
+ });
153
+ }
154
+ /**
155
+ * Get the first available model with a valid API key.
156
+ * Useful when the configured model doesn't have valid credentials.
157
+ *
158
+ * Priority:
159
+ * 1. Use defaultModel from config if available and has API key
160
+ * 2. Use first available model with valid API key
161
+ * 3. Return undefined if no models are available
162
+ */
163
+ export function getFirstAvailableModel(config) {
164
+ const availableModels = getAvailableModels(config);
165
+ if (availableModels.length === 0) {
166
+ return undefined;
167
+ }
168
+ // Try to find configured default model first
169
+ const defaultModel = config?.agents?.defaults?.model;
170
+ if (defaultModel) {
171
+ const modelRef = typeof defaultModel === 'string' ? defaultModel : defaultModel.primary;
172
+ if (modelRef) {
173
+ // Check if the configured model has valid API key
174
+ const configured = availableModels.find(m => `${m.provider}/${m.id}` === modelRef ||
175
+ m.id === modelRef);
176
+ if (configured) {
177
+ return configured;
178
+ }
179
+ }
180
+ }
181
+ // Return first available model
182
+ return availableModels[0];
183
+ }
184
+ export const PROVIDER_META = {
185
+ 'openai': { name: 'OpenAI (GPT-4, o1, o3)', category: 'common', supportsApiKey: true },
186
+ 'anthropic': { name: 'Anthropic Claude', category: 'common', supportsApiKey: true, supportsOAuth: true },
187
+ 'google': { name: 'Google Gemini', category: 'common', supportsApiKey: true },
188
+ 'groq': { name: 'Groq (Fast Inference)', category: 'common', supportsApiKey: true },
189
+ 'deepseek': { name: 'DeepSeek', category: 'common', supportsApiKey: true },
190
+ 'minimax': { name: 'MiniMax', category: 'common', supportsApiKey: true },
191
+ 'minimax-cn': { name: 'MiniMax CN', category: 'common', supportsApiKey: true },
192
+ 'kimi-coding': { name: 'Kimi For Coding', category: 'common', supportsApiKey: true },
193
+ 'xai': { name: 'xAI (Grok)', category: 'specialty', supportsApiKey: true },
194
+ 'mistral': { name: 'Mistral AI', category: 'specialty', supportsApiKey: true },
195
+ 'cerebras': { name: 'Cerebras', category: 'specialty', supportsApiKey: true },
196
+ 'openrouter': { name: 'OpenRouter (Multi-provider)', category: 'specialty', supportsApiKey: true },
197
+ 'huggingface': { name: 'Hugging Face', category: 'specialty', supportsApiKey: true },
198
+ 'opencode': { name: 'OpenCode', category: 'specialty', supportsApiKey: true },
199
+ 'zai': { name: 'z.ai', category: 'specialty', supportsApiKey: true },
200
+ 'amazon-bedrock': { name: 'Amazon Bedrock', category: 'enterprise', supportsApiKey: true },
201
+ 'azure-openai-responses': { name: 'Azure OpenAI', category: 'enterprise', supportsApiKey: true },
202
+ 'google-vertex': { name: 'Google Vertex AI', category: 'enterprise', supportsApiKey: true },
203
+ 'vercel-ai-gateway': { name: 'Vercel AI Gateway', category: 'enterprise', supportsApiKey: true },
204
+ 'github-copilot': { name: 'GitHub Copilot (OAuth)', category: 'oauth', supportsOAuth: true },
205
+ 'openai-codex': { name: 'OpenAI Codex (OAuth)', category: 'oauth', supportsOAuth: true },
206
+ 'google-gemini-cli': { name: 'Google Gemini CLI (OAuth)', category: 'oauth', supportsOAuth: true },
207
+ 'google-antigravity': { name: 'Google Antigravity (OAuth)', category: 'oauth', supportsOAuth: true },
208
+ };
209
+ export function getSortedProviders() {
210
+ const all = getAllProviders();
211
+ const catOrder = { common: 0, specialty: 1, enterprise: 2, oauth: 3 };
212
+ return [...all].sort((a, b) => {
213
+ const catA = PROVIDER_META[a]?.category ?? 'specialty';
214
+ const catB = PROVIDER_META[b]?.category ?? 'specialty';
215
+ if (catOrder[catA] !== catOrder[catB]) {
216
+ return catOrder[catA] - catOrder[catB];
217
+ }
218
+ return a.localeCompare(b);
219
+ });
220
+ }
221
+ export function getProviderDisplayName(provider) {
222
+ return PROVIDER_META[provider]?.name || provider;
223
+ }
224
+ export function providerSupportsOAuth(provider) {
225
+ return PROVIDER_META[provider]?.supportsOAuth ?? false;
226
+ }
227
+ export function providerSupportsApiKey(provider) {
228
+ return PROVIDER_META[provider]?.supportsApiKey ?? true;
229
+ }
230
+ export const DEFAULT_MODEL = 'anthropic/claude-sonnet-4-5';
231
+ export const RECOMMENDED_MODELS = [
232
+ 'anthropic/claude-sonnet-4-5',
233
+ 'openai/gpt-4o',
234
+ 'google/gemini-2.5-flash',
235
+ 'groq/llama-3.3-70b',
236
+ 'deepseek/deepseek-chat',
237
+ ];
238
+ export const PROVIDER_PREFIX_PATTERNS = {
239
+ openai: ['gpt-', 'o1', 'o3', 'o4', 'chatgpt-'],
240
+ anthropic: ['claude-'],
241
+ google: ['gemini-', 'gemma-'],
242
+ xai: ['grok-'],
243
+ groq: ['llama-', 'mixtral-', 'gemma-'],
244
+ deepseek: ['deepseek-', 'r1'],
245
+ mistral: ['mistral-'],
246
+ cerebras: ['llama-'],
247
+ openrouter: [],
248
+ };
249
+ export function detectProvider(modelId) {
250
+ const lowerId = modelId.toLowerCase();
251
+ // Check custom models first
252
+ const registry = getModelRegistry();
253
+ for (const model of registry.getAll()) {
254
+ if (model.id === modelId) {
255
+ return model.provider;
256
+ }
257
+ }
258
+ for (const [provider, prefixes] of Object.entries(PROVIDER_PREFIX_PATTERNS)) {
259
+ if (prefixes.some(p => lowerId.startsWith(p))) {
260
+ return provider;
261
+ }
262
+ }
263
+ for (const provider of getPiAiProviders()) {
264
+ try {
265
+ const models = getPiAiModels(provider);
266
+ if (models.some(m => m.id === modelId)) {
267
+ return provider;
268
+ }
269
+ }
270
+ catch {
271
+ continue;
272
+ }
273
+ }
274
+ return undefined;
275
+ }
276
+ export function getProviderEnvVars(provider) {
277
+ return PROVIDER_ENV_MAP[provider] || [`${provider.toUpperCase().replace(/-/g, '_')}_API_KEY`];
278
+ }
279
+ // Re-export ModelRegistry for advanced use cases
280
+ export { ModelRegistry, getModelRegistry, resetModelRegistry } from './model-registry.js';
55
281
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhG,wBAAwB;AACxB,OAAO,EACN,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GAGpB,MAAM,eAAe,CAAC;AAiBvB,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,gBAAgB;AAChB,OAAO,EACN,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,GAEvB,MAAM,aAAa,CAAC;AAErB,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAC/C,OAAO;AACN,OAAO;AACP,gBAAgB,EAChB,WAAW,EACX,eAAe;AAEf,4BAA4B;AAC5B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB;AAEjB,UAAU;AACV,sBAAsB,EACtB,yBAAyB;AAEzB,0BAA0B;AAC1B,aAAa,EACb,sBAAsB,EACtB,8BAA8B,GAW9B,MAAM,uBAAuB,CAAC;AAE/B,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAC/C,OAAO,EACN,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GAIhB,MAAM,qBAAqB,CAAC;AAE7B,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAC/C,OAAO;AACN,OAAO;AACP,aAAa,EACb,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,mBAAmB;AAEnB,kBAAkB;AAClB,oBAAoB,EACpB,gBAAgB;AAEhB,eAAe;AACf,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB;AAEpB,wBAAwB;AACxB,YAAY,EACZ,sBAAsB;AAEtB,YAAY;AACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GAWnB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Model Registry - manages built-in and custom models from models.json
3
+ *
4
+ * Features:
5
+ * - Loads built-in models from @mariozechner/pi-ai
6
+ * - Loads custom models from ~/.xopcbot/models.json
7
+ * - Supports provider baseUrl/headers overrides
8
+ * - Supports per-model overrides (modelOverrides)
9
+ * - API key resolution with shell commands, env vars, and literals
10
+ * - Hot reload support
11
+ */
12
+ import { type Api, type Model } from '@mariozechner/pi-ai';
13
+ /**
14
+ * Model Registry - manages all models (built-in + custom)
15
+ */
16
+ export declare class ModelRegistry {
17
+ private modelsJsonPath;
18
+ private models;
19
+ private customProviderApiKeys;
20
+ private loadError;
21
+ private _availableModelsCache;
22
+ private _providersCache;
23
+ private _authStatusCache;
24
+ constructor(modelsJsonPath?: string);
25
+ /**
26
+ * Reload models from disk (built-in + custom from models.json)
27
+ * Clears all caches
28
+ */
29
+ refresh(): void;
30
+ /**
31
+ * Get any error from loading models.json (undefined if no error)
32
+ */
33
+ getError(): string | undefined;
34
+ /**
35
+ * Get all models (built-in + custom)
36
+ * Results are cached until refresh() is called
37
+ */
38
+ getAll(): readonly Model<Api>[];
39
+ /**
40
+ * Get only models that have auth configured
41
+ * Results are cached on first call until refresh()
42
+ */
43
+ getAvailable(): readonly Model<Api>[];
44
+ /**
45
+ * Find a model by provider and ID
46
+ */
47
+ find(provider: string, modelId: string): Model<Api> | undefined;
48
+ /**
49
+ * Resolve a model reference (provider/modelId or just modelId)
50
+ */
51
+ resolve(ref: string): Model<Api> | undefined;
52
+ /**
53
+ * Get API key for a provider (for custom providers from models.json)
54
+ */
55
+ getApiKey(provider: string): string | undefined;
56
+ /**
57
+ * Check if a provider has auth configured
58
+ * Results are cached until refresh() is called
59
+ */
60
+ private hasAuth;
61
+ /**
62
+ * Load all models
63
+ * Clears caches to ensure fresh data
64
+ */
65
+ private loadModels;
66
+ /**
67
+ * Load built-in models and apply provider/model overrides
68
+ */
69
+ private loadBuiltInModels;
70
+ /**
71
+ * Merge custom models into built-in list (custom wins on conflicts)
72
+ */
73
+ private mergeCustomModels;
74
+ /**
75
+ * Load custom models from models.json
76
+ */
77
+ private loadCustomModels;
78
+ /**
79
+ * Parse custom models from config
80
+ */
81
+ private parseModels;
82
+ }
83
+ export declare function getModelRegistry(): ModelRegistry;
84
+ export declare function resetModelRegistry(): void;