@xopcai/xopcbot 0.1.5 → 0.2.1

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 (285) hide show
  1. package/README.md +6 -6
  2. package/README.zh-CN.md +6 -6
  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 +21 -20
  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 +17 -49
  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 +73 -58
  118. package/dist/cli/commands/onboard.js.map +1 -1
  119. package/dist/cli/commands/skills.js +6 -6
  120. package/dist/cli/commands/skills.js.map +1 -1
  121. package/dist/cli/index.js +0 -0
  122. package/dist/cli/templates.d.ts +2 -0
  123. package/dist/cli/templates.js +1 -1
  124. package/dist/cli/templates.js.map +1 -1
  125. package/dist/config/defaults.d.ts +19 -0
  126. package/dist/config/defaults.js +168 -0
  127. package/dist/config/defaults.js.map +1 -0
  128. package/dist/config/index.d.ts +5 -0
  129. package/dist/config/index.js +4 -0
  130. package/dist/config/index.js.map +1 -1
  131. package/dist/config/integration.d.ts +12 -0
  132. package/dist/config/integration.js +14 -0
  133. package/dist/config/integration.js.map +1 -0
  134. package/dist/config/models-json.d.ts +454 -0
  135. package/dist/config/models-json.js +323 -0
  136. package/dist/config/models-json.js.map +1 -0
  137. package/dist/config/paths.d.ts +2 -0
  138. package/dist/config/paths.js +4 -0
  139. package/dist/config/paths.js.map +1 -1
  140. package/dist/config/reload.d.ts +1 -1
  141. package/dist/config/reload.js +3 -3
  142. package/dist/config/reload.js.map +1 -1
  143. package/dist/config/resolve-config-value.d.ts +36 -0
  144. package/dist/config/resolve-config-value.js +218 -0
  145. package/dist/config/resolve-config-value.js.map +1 -0
  146. package/dist/config/rules.js +3 -2
  147. package/dist/config/rules.js.map +1 -1
  148. package/dist/config/schema.d.ts +17 -884
  149. package/dist/config/schema.js +36 -312
  150. package/dist/config/schema.js.map +1 -1
  151. package/dist/config/types.models.d.ts +54 -0
  152. package/dist/config/types.models.js +2 -0
  153. package/dist/config/types.models.js.map +1 -0
  154. package/dist/cron/validation.d.ts +4 -4
  155. package/dist/gateway/hono/app.js +230 -78
  156. package/dist/gateway/hono/app.js.map +1 -1
  157. package/dist/gateway/hono/oauth-async.d.ts +14 -0
  158. package/dist/gateway/hono/oauth-async.js +285 -0
  159. package/dist/gateway/hono/oauth-async.js.map +1 -0
  160. package/dist/gateway/hono/oauth.d.ts +9 -0
  161. package/dist/gateway/hono/oauth.js +157 -0
  162. package/dist/gateway/hono/oauth.js.map +1 -0
  163. package/dist/gateway/hono/sse.js +5 -2
  164. package/dist/gateway/hono/sse.js.map +1 -1
  165. package/dist/gateway/service.d.ts +6 -2
  166. package/dist/gateway/service.js +20 -6
  167. package/dist/gateway/service.js.map +1 -1
  168. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
  169. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
  170. package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
  171. package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
  172. package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
  173. package/dist/gateway/static/root/index.html +2 -2
  174. package/dist/plugins/index.d.ts +0 -2
  175. package/dist/plugins/index.js +0 -2
  176. package/dist/plugins/index.js.map +1 -1
  177. package/dist/plugins/types.d.ts +0 -2
  178. package/dist/plugins/types.js +0 -2
  179. package/dist/plugins/types.js.map +1 -1
  180. package/dist/providers/index.d.ts +50 -22
  181. package/dist/providers/index.js +276 -50
  182. package/dist/providers/index.js.map +1 -1
  183. package/dist/providers/model-registry.d.ts +84 -0
  184. package/dist/providers/model-registry.js +385 -0
  185. package/dist/providers/model-registry.js.map +1 -0
  186. package/dist/types/providers.d.ts +2 -63
  187. package/dist/types/providers.js +1 -1
  188. package/dist/utils/__tests__/frontmatter.test.js +4 -3
  189. package/dist/utils/__tests__/frontmatter.test.js.map +1 -1
  190. package/dist/utils/diagnostic-events.d.ts +230 -0
  191. package/dist/utils/diagnostic-events.js +189 -0
  192. package/dist/utils/diagnostic-events.js.map +1 -0
  193. package/dist/utils/frontmatter.d.ts +0 -1
  194. package/dist/utils/frontmatter.js +13 -77
  195. package/dist/utils/frontmatter.js.map +1 -1
  196. package/dist/utils/log-stream.d.ts +95 -0
  197. package/dist/utils/log-stream.js +229 -0
  198. package/dist/utils/log-stream.js.map +1 -0
  199. package/dist/utils/logger.d.ts +5 -0
  200. package/dist/utils/logger.js +25 -0
  201. package/dist/utils/logger.js.map +1 -1
  202. package/dist/utils/redact.d.ts +73 -0
  203. package/dist/utils/redact.js +245 -0
  204. package/dist/utils/redact.js.map +1 -0
  205. package/package.json +6 -4
  206. package/skills/find-skills/SKILL.md +0 -9
  207. package/dist/__tests__/core.test.d.ts +0 -1
  208. package/dist/__tests__/core.test.js +0 -72
  209. package/dist/__tests__/core.test.js.map +0 -1
  210. package/dist/agent/model-manager.js.map +0 -1
  211. package/dist/cli/commands/configure.d.ts +0 -1
  212. package/dist/cli/commands/configure.js +0 -171
  213. package/dist/cli/commands/configure.js.map +0 -1
  214. package/dist/cli/commands/gateway-daemon.d.ts +0 -1
  215. package/dist/cli/commands/gateway-daemon.js +0 -141
  216. package/dist/cli/commands/gateway-daemon.js.map +0 -1
  217. package/dist/config/__tests__/diff.test.d.ts +0 -1
  218. package/dist/config/__tests__/diff.test.js +0 -192
  219. package/dist/config/__tests__/diff.test.js.map +0 -1
  220. package/dist/config/__tests__/loader.test.d.ts +0 -1
  221. package/dist/config/__tests__/loader.test.js +0 -356
  222. package/dist/config/__tests__/loader.test.js.map +0 -1
  223. package/dist/config/__tests__/paths.test.d.ts +0 -1
  224. package/dist/config/__tests__/paths.test.js +0 -192
  225. package/dist/config/__tests__/paths.test.js.map +0 -1
  226. package/dist/config/__tests__/reload.test.d.ts +0 -1
  227. package/dist/config/__tests__/reload.test.js +0 -374
  228. package/dist/config/__tests__/reload.test.js.map +0 -1
  229. package/dist/config/__tests__/rules.test.d.ts +0 -1
  230. package/dist/config/__tests__/rules.test.js +0 -204
  231. package/dist/config/__tests__/rules.test.js.map +0 -1
  232. package/dist/config/__tests__/schema.test.d.ts +0 -1
  233. package/dist/config/__tests__/schema.test.js +0 -672
  234. package/dist/config/__tests__/schema.test.js.map +0 -1
  235. package/dist/daemon/background-start.d.ts +0 -33
  236. package/dist/daemon/background-start.js +0 -89
  237. package/dist/daemon/background-start.js.map +0 -1
  238. package/dist/daemon/gateway-manager.d.ts +0 -87
  239. package/dist/daemon/gateway-manager.js +0 -324
  240. package/dist/daemon/gateway-manager.js.map +0 -1
  241. package/dist/daemon/index.d.ts +0 -5
  242. package/dist/daemon/index.js +0 -6
  243. package/dist/daemon/index.js.map +0 -1
  244. package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
  245. package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
  246. package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
  247. package/dist/providers/__tests__/registry.test.d.ts +0 -1
  248. package/dist/providers/__tests__/registry.test.js +0 -110
  249. package/dist/providers/__tests__/registry.test.js.map +0 -1
  250. package/dist/providers/api-strategies.d.ts +0 -15
  251. package/dist/providers/api-strategies.js +0 -96
  252. package/dist/providers/api-strategies.js.map +0 -1
  253. package/dist/providers/auto-discovery.d.ts +0 -39
  254. package/dist/providers/auto-discovery.js +0 -189
  255. package/dist/providers/auto-discovery.js.map +0 -1
  256. package/dist/providers/config.d.ts +0 -25
  257. package/dist/providers/config.js +0 -42
  258. package/dist/providers/config.js.map +0 -1
  259. package/dist/providers/model-catalog.d.ts +0 -92
  260. package/dist/providers/model-catalog.js +0 -998
  261. package/dist/providers/model-catalog.js.map +0 -1
  262. package/dist/providers/models-dev-data.d.ts +0 -11
  263. package/dist/providers/models-dev-data.js +0 -1035
  264. package/dist/providers/models-dev-data.js.map +0 -1
  265. package/dist/providers/models-dev.d.ts +0 -34
  266. package/dist/providers/models-dev.js +0 -33
  267. package/dist/providers/models-dev.js.map +0 -1
  268. package/dist/providers/pi-ai.d.ts +0 -62
  269. package/dist/providers/pi-ai.js +0 -221
  270. package/dist/providers/pi-ai.js.map +0 -1
  271. package/dist/providers/provider-catalog.d.ts +0 -91
  272. package/dist/providers/provider-catalog.js +0 -791
  273. package/dist/providers/provider-catalog.js.map +0 -1
  274. package/dist/providers/registry.d.ts +0 -135
  275. package/dist/providers/registry.js +0 -475
  276. package/dist/providers/registry.js.map +0 -1
  277. package/dist/providers/types.d.ts +0 -95
  278. package/dist/providers/types.js +0 -7
  279. package/dist/providers/types.js.map +0 -1
  280. package/dist/session/chat-manager.d.ts +0 -49
  281. package/dist/session/chat-manager.js +0 -167
  282. package/dist/session/chat-manager.js.map +0 -1
  283. package/dist/session/chat-types.d.ts +0 -53
  284. package/dist/session/chat-types.js +0 -63
  285. package/dist/session/chat-types.js.map +0 -1
@@ -0,0 +1,385 @@
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 { getModels as getPiAiModels, getProviders as getPiAiProviders, } from '@mariozechner/pi-ai';
13
+ import { existsSync, readFileSync } from 'fs';
14
+ import { resolveConfigValue, resolveHeaders } from '../config/resolve-config-value.js';
15
+ import { getModelsJsonPath } from '../config/paths.js';
16
+ import { validateModelsConfig, getDefaultModelValues } from '../config/models-json.js';
17
+ import { createLogger } from '../utils/logger.js';
18
+ import { getApiKeyFromEnv } from './index.js';
19
+ const log = createLogger('ModelRegistry');
20
+ function emptyCustomModelsResult(error) {
21
+ return {
22
+ models: [],
23
+ overrides: new Map(),
24
+ modelOverrides: new Map(),
25
+ apiKeyConfigs: new Map(),
26
+ error,
27
+ };
28
+ }
29
+ /**
30
+ * Deep merge compat settings
31
+ */
32
+ function mergeCompat(baseCompat, overrideCompat) {
33
+ if (!overrideCompat)
34
+ return baseCompat;
35
+ const base = baseCompat;
36
+ const override = overrideCompat;
37
+ const merged = { ...base, ...override };
38
+ // Deep merge nested routing objects
39
+ const baseCompletions = base;
40
+ const overrideCompletions = override;
41
+ if (baseCompletions?.openRouterRouting || overrideCompletions?.openRouterRouting) {
42
+ merged.openRouterRouting = {
43
+ ...(baseCompletions?.openRouterRouting || {}),
44
+ ...(overrideCompletions?.openRouterRouting || {}),
45
+ };
46
+ }
47
+ if (baseCompletions?.vercelGatewayRouting || overrideCompletions?.vercelGatewayRouting) {
48
+ merged.vercelGatewayRouting = {
49
+ ...(baseCompletions?.vercelGatewayRouting || {}),
50
+ ...(overrideCompletions?.vercelGatewayRouting || {}),
51
+ };
52
+ }
53
+ return merged;
54
+ }
55
+ /**
56
+ * Apply a model override to a model
57
+ */
58
+ function applyModelOverride(model, override) {
59
+ const result = { ...model };
60
+ if (override.name !== undefined)
61
+ result.name = override.name;
62
+ if (override.reasoning !== undefined)
63
+ result.reasoning = override.reasoning;
64
+ if (override.input !== undefined)
65
+ result.input = override.input;
66
+ if (override.contextWindow !== undefined)
67
+ result.contextWindow = override.contextWindow;
68
+ if (override.maxTokens !== undefined)
69
+ result.maxTokens = override.maxTokens;
70
+ // Merge cost (partial override)
71
+ if (override.cost) {
72
+ result.cost = {
73
+ input: override.cost.input ?? model.cost.input,
74
+ output: override.cost.output ?? model.cost.output,
75
+ cacheRead: override.cost.cacheRead ?? model.cost.cacheRead,
76
+ cacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,
77
+ };
78
+ }
79
+ // Merge headers
80
+ if (override.headers) {
81
+ const resolvedHeaders = resolveHeaders(override.headers);
82
+ result.headers = resolvedHeaders ? { ...model.headers, ...resolvedHeaders } : model.headers;
83
+ }
84
+ // Deep merge compat
85
+ result.compat = mergeCompat(model.compat, override.compat);
86
+ return result;
87
+ }
88
+ /**
89
+ * Model Registry - manages all models (built-in + custom)
90
+ */
91
+ export class ModelRegistry {
92
+ modelsJsonPath;
93
+ models = [];
94
+ customProviderApiKeys = new Map();
95
+ loadError = undefined;
96
+ // Performance caches
97
+ _availableModelsCache;
98
+ _providersCache;
99
+ _authStatusCache = new Map();
100
+ constructor(modelsJsonPath = getModelsJsonPath()) {
101
+ this.modelsJsonPath = modelsJsonPath;
102
+ this.loadModels();
103
+ }
104
+ /**
105
+ * Reload models from disk (built-in + custom from models.json)
106
+ * Clears all caches
107
+ */
108
+ refresh() {
109
+ this.customProviderApiKeys.clear();
110
+ this.loadError = undefined;
111
+ this._availableModelsCache = undefined;
112
+ this._providersCache = undefined;
113
+ this._authStatusCache.clear();
114
+ this.loadModels();
115
+ log.info('Model registry refreshed');
116
+ }
117
+ /**
118
+ * Get any error from loading models.json (undefined if no error)
119
+ */
120
+ getError() {
121
+ return this.loadError;
122
+ }
123
+ /**
124
+ * Get all models (built-in + custom)
125
+ * Results are cached until refresh() is called
126
+ */
127
+ getAll() {
128
+ return this.models;
129
+ }
130
+ /**
131
+ * Get only models that have auth configured
132
+ * Results are cached on first call until refresh()
133
+ */
134
+ getAvailable() {
135
+ // Lazy initialization with caching
136
+ if (!this._availableModelsCache) {
137
+ this._availableModelsCache = this.models.filter((m) => this.hasAuth(m.provider));
138
+ }
139
+ return this._availableModelsCache;
140
+ }
141
+ /**
142
+ * Find a model by provider and ID
143
+ */
144
+ find(provider, modelId) {
145
+ return this.models.find((m) => m.provider === provider && m.id === modelId);
146
+ }
147
+ /**
148
+ * Resolve a model reference (provider/modelId or just modelId)
149
+ */
150
+ resolve(ref) {
151
+ // Handle provider/modelId format
152
+ if (ref.includes('/')) {
153
+ const [provider, modelId] = ref.split('/');
154
+ return this.find(provider, modelId);
155
+ }
156
+ // Try to find by model ID only (search all providers)
157
+ for (const model of this.models) {
158
+ if (model.id === ref) {
159
+ return model;
160
+ }
161
+ }
162
+ return undefined;
163
+ }
164
+ /**
165
+ * Get API key for a provider (for custom providers from models.json)
166
+ */
167
+ getApiKey(provider) {
168
+ // First check custom provider configs
169
+ const keyConfig = this.customProviderApiKeys.get(provider);
170
+ if (keyConfig) {
171
+ return resolveConfigValue(keyConfig);
172
+ }
173
+ return undefined;
174
+ }
175
+ /**
176
+ * Check if a provider has auth configured
177
+ * Results are cached until refresh() is called
178
+ */
179
+ hasAuth(provider) {
180
+ // Check cache first
181
+ if (this._authStatusCache.has(provider)) {
182
+ return this._authStatusCache.get(provider);
183
+ }
184
+ // Compute and cache
185
+ let result;
186
+ // Check custom provider configs from models.json first
187
+ if (this.customProviderApiKeys.has(provider)) {
188
+ const key = this.getApiKey(provider);
189
+ result = !!key;
190
+ }
191
+ else {
192
+ // Also check environment variables
193
+ const envKey = getApiKeyFromEnv(provider);
194
+ result = !!envKey;
195
+ }
196
+ this._authStatusCache.set(provider, result);
197
+ return result;
198
+ }
199
+ /**
200
+ * Load all models
201
+ * Clears caches to ensure fresh data
202
+ */
203
+ loadModels() {
204
+ // Clear caches before loading
205
+ this._availableModelsCache = undefined;
206
+ this._providersCache = undefined;
207
+ this._authStatusCache.clear();
208
+ // Load custom models and overrides from models.json
209
+ const { models: customModels, overrides, modelOverrides, apiKeyConfigs, error, } = this.loadCustomModels();
210
+ if (error) {
211
+ this.loadError = error;
212
+ log.warn({ error }, 'Failed to load models.json, using built-in models only');
213
+ }
214
+ // Store API key configs for fallback resolution
215
+ this.customProviderApiKeys = apiKeyConfigs;
216
+ // Load built-in models with overrides applied
217
+ const builtInModels = this.loadBuiltInModels(overrides, modelOverrides);
218
+ // Merge custom models
219
+ this.models = this.mergeCustomModels(builtInModels, customModels);
220
+ log.info({ builtIn: builtInModels.length, custom: customModels.length, total: this.models.length }, 'Models loaded');
221
+ }
222
+ /**
223
+ * Load built-in models and apply provider/model overrides
224
+ */
225
+ loadBuiltInModels(overrides, modelOverrides) {
226
+ return getPiAiProviders().flatMap((provider) => {
227
+ try {
228
+ const models = getPiAiModels(provider);
229
+ const providerOverride = overrides.get(provider);
230
+ const perModelOverrides = modelOverrides.get(provider);
231
+ return models.map((m) => {
232
+ let model = m;
233
+ // Apply provider-level baseUrl/headers override
234
+ if (providerOverride) {
235
+ const resolvedHeaders = resolveHeaders(providerOverride.headers);
236
+ model = {
237
+ ...model,
238
+ baseUrl: providerOverride.baseUrl ?? model.baseUrl,
239
+ headers: resolvedHeaders ? { ...model.headers, ...resolvedHeaders } : model.headers,
240
+ };
241
+ }
242
+ // Apply per-model override
243
+ const modelOverride = perModelOverrides?.get(m.id);
244
+ if (modelOverride) {
245
+ model = applyModelOverride(model, modelOverride);
246
+ }
247
+ return model;
248
+ });
249
+ }
250
+ catch (err) {
251
+ const errorMsg = err instanceof Error ? err.message : String(err);
252
+ log.error({ provider, error: errorMsg }, 'Failed to load built-in models for provider');
253
+ return [];
254
+ }
255
+ });
256
+ }
257
+ /**
258
+ * Merge custom models into built-in list (custom wins on conflicts)
259
+ */
260
+ mergeCustomModels(builtInModels, customModels) {
261
+ const merged = [...builtInModels];
262
+ for (const customModel of customModels) {
263
+ const existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);
264
+ if (existingIndex >= 0) {
265
+ merged[existingIndex] = customModel;
266
+ }
267
+ else {
268
+ merged.push(customModel);
269
+ }
270
+ }
271
+ return merged;
272
+ }
273
+ /**
274
+ * Load custom models from models.json
275
+ */
276
+ loadCustomModels() {
277
+ if (!existsSync(this.modelsJsonPath)) {
278
+ return emptyCustomModelsResult();
279
+ }
280
+ try {
281
+ const content = readFileSync(this.modelsJsonPath, 'utf-8');
282
+ const config = JSON.parse(content);
283
+ // Validate schema
284
+ const validation = validateModelsConfig(config);
285
+ if (!validation.valid) {
286
+ const errors = validation.errors
287
+ .map((e) => ` - ${e.path}: ${e.message}`)
288
+ .join('\n');
289
+ return emptyCustomModelsResult(`Invalid models.json schema:\n${errors}\n\nFile: ${this.modelsJsonPath}`);
290
+ }
291
+ const overrides = new Map();
292
+ const modelOverrides = new Map();
293
+ const apiKeyConfigs = new Map();
294
+ for (const [providerName, providerConfig] of Object.entries(config.providers)) {
295
+ // Apply provider-level baseUrl/headers/apiKey override
296
+ if (providerConfig.baseUrl || providerConfig.headers || providerConfig.apiKey) {
297
+ overrides.set(providerName, {
298
+ baseUrl: providerConfig.baseUrl,
299
+ headers: providerConfig.headers,
300
+ apiKey: providerConfig.apiKey,
301
+ });
302
+ }
303
+ // Store API key config for fallback resolver
304
+ if (providerConfig.apiKey) {
305
+ apiKeyConfigs.set(providerName, providerConfig.apiKey);
306
+ }
307
+ // Store model overrides
308
+ if (providerConfig.modelOverrides) {
309
+ modelOverrides.set(providerName, new Map(Object.entries(providerConfig.modelOverrides)));
310
+ }
311
+ }
312
+ return {
313
+ models: this.parseModels(config),
314
+ overrides,
315
+ modelOverrides,
316
+ apiKeyConfigs,
317
+ error: undefined,
318
+ };
319
+ }
320
+ catch (error) {
321
+ if (error instanceof SyntaxError) {
322
+ return emptyCustomModelsResult(`Failed to parse models.json: ${error.message}\n\nFile: ${this.modelsJsonPath}`);
323
+ }
324
+ return emptyCustomModelsResult(`Failed to load models.json: ${error instanceof Error ? error.message : error}\n\nFile: ${this.modelsJsonPath}`);
325
+ }
326
+ }
327
+ /**
328
+ * Parse custom models from config
329
+ */
330
+ parseModels(config) {
331
+ const models = [];
332
+ const defaults = getDefaultModelValues();
333
+ for (const [providerName, providerConfig] of Object.entries(config.providers)) {
334
+ const modelDefs = providerConfig.models ?? [];
335
+ if (modelDefs.length === 0)
336
+ continue;
337
+ for (const modelDef of modelDefs) {
338
+ const api = modelDef.api || providerConfig.api;
339
+ if (!api)
340
+ continue;
341
+ // Merge headers: provider headers are base, model headers override
342
+ // Resolve env vars and shell commands in header values
343
+ const providerHeaders = resolveHeaders(providerConfig.headers);
344
+ const modelHeaders = resolveHeaders(modelDef.headers);
345
+ let headers = providerHeaders || modelHeaders ? { ...providerHeaders, ...modelHeaders } : undefined;
346
+ // If authHeader is true, add Authorization header with resolved API key
347
+ if (providerConfig.authHeader && providerConfig.apiKey) {
348
+ const resolvedKey = resolveConfigValue(providerConfig.apiKey);
349
+ if (resolvedKey) {
350
+ headers = { ...headers, Authorization: `Bearer ${resolvedKey}` };
351
+ }
352
+ }
353
+ models.push({
354
+ id: modelDef.id,
355
+ name: modelDef.name ?? modelDef.id,
356
+ api: api,
357
+ provider: providerName,
358
+ baseUrl: providerConfig.baseUrl,
359
+ reasoning: modelDef.reasoning ?? false,
360
+ input: (modelDef.input ?? defaults.input),
361
+ cost: modelDef.cost ?? defaults.cost,
362
+ contextWindow: modelDef.contextWindow ?? defaults.contextWindow,
363
+ maxTokens: modelDef.maxTokens ?? defaults.maxTokens,
364
+ headers,
365
+ compat: modelDef.compat,
366
+ });
367
+ }
368
+ }
369
+ return models;
370
+ }
371
+ }
372
+ // ============================================
373
+ // Global Registry Instance
374
+ // ============================================
375
+ let globalRegistry;
376
+ export function getModelRegistry() {
377
+ if (!globalRegistry) {
378
+ globalRegistry = new ModelRegistry();
379
+ }
380
+ return globalRegistry;
381
+ }
382
+ export function resetModelRegistry() {
383
+ globalRegistry = undefined;
384
+ }
385
+ //# sourceMappingURL=model-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/providers/model-registry.ts"],"names":[],"mappings":"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"}
@@ -1,67 +1,6 @@
1
1
  /**
2
2
  * Provider Types
3
3
  *
4
- * Type definitions for LLM providers, models, and registry.
4
+ * Re-export pi-ai types for convenience
5
5
  */
6
- export type ProviderType = 'openai-completions' | 'anthropic-messages' | 'google-generative-ai' | 'bedrock-converse-stream';
7
- export interface ProviderInfo {
8
- name: string;
9
- type: ProviderType;
10
- baseUrl: string;
11
- authType: 'api-key' | 'oauth' | 'token' | 'aws-sdk' | 'none';
12
- envKey?: string;
13
- models: ModelInfo[];
14
- }
15
- export interface ModelInfo {
16
- id: string;
17
- name: string;
18
- provider: string;
19
- contextWindow: number;
20
- maxTokens: number;
21
- reasoning: boolean;
22
- input: ('text' | 'image')[];
23
- cost: CostInfo;
24
- api: ProviderType;
25
- }
26
- export interface CostInfo {
27
- input: number;
28
- output: number;
29
- cacheRead: number;
30
- cacheWrite: number;
31
- }
32
- export interface ModelRegistryOptions {
33
- configPath?: string;
34
- enableDiscovery?: boolean;
35
- }
36
- export interface ModelSearchOptions {
37
- provider?: string;
38
- reasoning?: boolean;
39
- input?: ('text' | 'image')[];
40
- minContextWindow?: number;
41
- }
42
- export interface ChatOptions {
43
- maxTokens?: number;
44
- temperature?: number;
45
- thinkingEnabled?: boolean;
46
- thinkingBudgetTokens?: number;
47
- }
48
- export interface ChatResult {
49
- content: string | null;
50
- tool_calls: ToolCall[];
51
- finish_reason: string;
52
- usage?: TokenUsage;
53
- error?: string;
54
- }
55
- export interface ToolCall {
56
- id: string;
57
- type: 'function';
58
- function: {
59
- name: string;
60
- arguments: string;
61
- };
62
- }
63
- export interface TokenUsage {
64
- prompt_tokens: number;
65
- completion_tokens: number;
66
- total_tokens: number;
67
- }
6
+ export type { Model, Api, Tool, Context, AssistantMessage, Usage } from '@mariozechner/pi-ai';
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Provider Types
3
3
  *
4
- * Type definitions for LLM providers, models, and registry.
4
+ * Re-export pi-ai types for convenience
5
5
  */
6
6
  export {};
7
7
  //# sourceMappingURL=providers.js.map
@@ -76,8 +76,8 @@ tags: [test, example, demo]
76
76
  # Content
77
77
  `;
78
78
  const result = parseFrontmatter(content);
79
- // Simple YAML parser treats arrays as strings (JSON.parse handles them)
80
- expect(result.frontmatter.tags).toBe('[test, example, demo]');
79
+ // YAML parser correctly handles arrays
80
+ expect(result.frontmatter.tags).toEqual(['test', 'example', 'demo']);
81
81
  });
82
82
  it('should parse boolean values', () => {
83
83
  const content = `---
@@ -135,7 +135,8 @@ describe('serializeFrontmatter', () => {
135
135
  metadata: { version: 1 },
136
136
  };
137
137
  const result = serializeFrontmatter(frontmatter);
138
- expect(result).toContain('metadata: {"version":1}');
138
+ // Serializes objects as YAML (not JSON)
139
+ expect(result).toContain('version: 1');
139
140
  });
140
141
  it('should escape quotes in strings', () => {
141
142
  const frontmatter = {
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/frontmatter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontmatter.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/frontmatter.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG;;;;;;;;CAQnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,OAAO,GAAG,qHAAqH,CAAC;QAEtI,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG;;;;;CAKnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG;;;CAGnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG;;;;;;;;;CASnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,OAAO,GAAG;;;;;;CAMnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG;;;;;;;CAOnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG;;;;;;;CAOnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG;;;;;;CAMnB,CAAC;QAEE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,cAAc;SAC5B,CAAC;QAEF,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACzB,CAAC;QAEF,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEjD,wCAAwC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,wBAAwB;SACtC,CAAC;QAEF,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEjD,wEAAwE;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}