@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.
- package/README.md +57 -52
- package/README.zh-CN.md +56 -49
- package/dist/agent/__tests__/media-processing.test.d.ts +6 -0
- package/dist/agent/__tests__/media-processing.test.js +385 -0
- package/dist/agent/__tests__/media-processing.test.js.map +1 -0
- package/dist/agent/fallback/__tests__/index.test.js +16 -5
- package/dist/agent/fallback/__tests__/index.test.js.map +1 -1
- package/dist/agent/fallback/candidates.d.ts +2 -4
- package/dist/agent/fallback/candidates.js +19 -26
- package/dist/agent/fallback/candidates.js.map +1 -1
- package/dist/agent/helpers.d.ts +1 -0
- package/dist/agent/helpers.js.map +1 -1
- package/dist/agent/index.d.ts +6 -1
- package/dist/agent/index.js +10 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/models/compat.d.ts +35 -0
- package/dist/agent/models/compat.js +110 -0
- package/dist/agent/models/compat.js.map +1 -0
- package/dist/agent/models/fallback.d.ts +38 -0
- package/dist/agent/models/fallback.js +133 -0
- package/dist/agent/models/fallback.js.map +1 -0
- package/dist/agent/models/index.d.ts +10 -0
- package/dist/agent/models/index.js +11 -0
- package/dist/agent/models/index.js.map +1 -0
- package/dist/agent/{model-manager.d.ts → models/manager.d.ts} +2 -8
- package/dist/agent/{model-manager.js → models/manager.js} +38 -24
- package/dist/agent/models/manager.js.map +1 -0
- package/dist/agent/models/scan.d.ts +46 -0
- package/dist/agent/models/scan.js +177 -0
- package/dist/agent/models/scan.js.map +1 -0
- package/dist/agent/models/selection.d.ts +44 -0
- package/dist/agent/models/selection.js +141 -0
- package/dist/agent/models/selection.js.map +1 -0
- package/dist/agent/prompt/index.js +1 -1
- package/dist/agent/prompt/index.js.map +1 -1
- package/dist/agent/service.js +34 -16
- package/dist/agent/service.js.map +1 -1
- package/dist/agent/skills/__tests__/test-framework.test.js +15 -7
- package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -1
- package/dist/agent/skills/config.d.ts +1 -1
- package/dist/agent/skills/config.js +2 -2
- package/dist/agent/skills/config.js.map +1 -1
- package/dist/agent/skills/index.js +15 -28
- package/dist/agent/skills/index.js.map +1 -1
- package/dist/agent/skills/installer.d.ts +1 -1
- package/dist/agent/skills/installer.js +1 -1
- package/dist/agent/skills/scanner.d.ts +1 -1
- package/dist/agent/skills/scanner.js +1 -1
- package/dist/agent/skills/test-framework.js +24 -23
- package/dist/agent/skills/test-framework.js.map +1 -1
- package/dist/agent/skills/types.d.ts +3 -3
- package/dist/agent/skills/types.js +1 -1
- package/dist/agent/skills/watcher.d.ts +1 -1
- package/dist/agent/skills/watcher.js +1 -1
- package/dist/agent/system-prompt.d.ts +67 -0
- package/dist/agent/system-prompt.js +351 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/tools/__tests__/send-media.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/send-media.test.js +251 -0
- package/dist/agent/tools/__tests__/send-media.test.js.map +1 -0
- package/dist/agent/types.agent-defaults.d.ts +48 -0
- package/dist/agent/types.agent-defaults.js +5 -0
- package/dist/agent/types.agent-defaults.js.map +1 -0
- package/dist/agent/types.d.ts +14 -6
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -1
- package/dist/agent/workspace.d.ts +94 -0
- package/dist/agent/workspace.js +625 -0
- package/dist/agent/workspace.js.map +1 -0
- package/dist/auth/index.js +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oauth/index.d.ts +1 -0
- package/dist/auth/oauth/index.js +1 -0
- package/dist/auth/oauth/index.js.map +1 -1
- package/dist/auth/oauth/kimi.d.ts +2 -1
- package/dist/auth/oauth/kimi.js +51 -48
- package/dist/auth/oauth/kimi.js.map +1 -1
- package/dist/auth/oauth/minimax-cn.d.ts +12 -0
- package/dist/auth/oauth/minimax-cn.js +111 -0
- package/dist/auth/oauth/minimax-cn.js.map +1 -0
- package/dist/auth/oauth/qwen.d.ts +5 -0
- package/dist/auth/oauth/qwen.js +54 -84
- package/dist/auth/oauth/qwen.js.map +1 -1
- package/dist/auth/profiles/index.d.ts +0 -2
- package/dist/auth/profiles/index.js +0 -2
- package/dist/auth/profiles/index.js.map +1 -1
- package/dist/auth/storage.js +7 -1
- package/dist/auth/storage.js.map +1 -1
- package/dist/channels/__tests__/media-integration.test.d.ts +6 -0
- package/dist/channels/__tests__/media-integration.test.js +398 -0
- package/dist/channels/__tests__/media-integration.test.js.map +1 -0
- package/dist/channels/__tests__/media.test.d.ts +6 -0
- package/dist/channels/__tests__/media.test.js +251 -0
- package/dist/channels/__tests__/media.test.js.map +1 -0
- package/dist/channels/access-control.d.ts +1 -1
- package/dist/channels/access-control.js +1 -1
- package/dist/channels/draft-stream.d.ts +1 -1
- package/dist/channels/draft-stream.js +1 -1
- package/dist/channels/format.d.ts +1 -1
- package/dist/channels/format.js +1 -1
- package/dist/channels/telegram/command-handler.js +15 -48
- package/dist/channels/telegram/command-handler.js.map +1 -1
- package/dist/channels/telegram/plugin.js +3 -2
- package/dist/channels/telegram/plugin.js.map +1 -1
- package/dist/channels/telegram/webhook.d.ts +1 -1
- package/dist/channels/telegram/webhook.js +1 -1
- package/dist/channels/types.d.ts +1 -1
- package/dist/channels/types.js +1 -1
- package/dist/channels/update-offset-store.d.ts +1 -1
- package/dist/channels/update-offset-store.js +1 -1
- package/dist/cli/commands/auth.js +8 -23
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/gateway.js +9 -1
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/models.js +35 -29
- package/dist/cli/commands/models.js.map +1 -1
- package/dist/cli/commands/onboard.js +166 -115
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/setup.js +123 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/skills.js +6 -6
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates.d.ts +2 -0
- package/dist/cli/templates.js +1 -1
- package/dist/cli/templates.js.map +1 -1
- package/dist/config/defaults.d.ts +19 -0
- package/dist/config/defaults.js +168 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/integration.d.ts +12 -0
- package/dist/config/integration.js +14 -0
- package/dist/config/integration.js.map +1 -0
- package/dist/config/models-json.d.ts +454 -0
- package/dist/config/models-json.js +323 -0
- package/dist/config/models-json.js.map +1 -0
- package/dist/config/paths.d.ts +2 -0
- package/dist/config/paths.js +4 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/reload.d.ts +1 -1
- package/dist/config/reload.js +3 -3
- package/dist/config/reload.js.map +1 -1
- package/dist/config/resolve-config-value.d.ts +36 -0
- package/dist/config/resolve-config-value.js +218 -0
- package/dist/config/resolve-config-value.js.map +1 -0
- package/dist/config/rules.js +3 -2
- package/dist/config/rules.js.map +1 -1
- package/dist/config/schema.d.ts +17 -884
- package/dist/config/schema.js +36 -312
- package/dist/config/schema.js.map +1 -1
- package/dist/config/types.models.d.ts +54 -0
- package/dist/config/types.models.js +2 -0
- package/dist/config/types.models.js.map +1 -0
- package/dist/cron/validation.d.ts +4 -4
- package/dist/gateway/hono/app.js +232 -78
- package/dist/gateway/hono/app.js.map +1 -1
- package/dist/gateway/hono/oauth-async.d.ts +14 -0
- package/dist/gateway/hono/oauth-async.js +285 -0
- package/dist/gateway/hono/oauth-async.js.map +1 -0
- package/dist/gateway/hono/oauth.d.ts +9 -0
- package/dist/gateway/hono/oauth.js +157 -0
- package/dist/gateway/hono/oauth.js.map +1 -0
- package/dist/gateway/hono/sse.js +5 -2
- package/dist/gateway/hono/sse.js.map +1 -1
- package/dist/gateway/process-manager.js +12 -10
- package/dist/gateway/process-manager.js.map +1 -1
- package/dist/gateway/service.d.ts +6 -2
- package/dist/gateway/service.js +20 -6
- package/dist/gateway/service.js.map +1 -1
- package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
- package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
- package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
- package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
- package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/plugins/index.d.ts +0 -2
- package/dist/plugins/index.js +0 -2
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/types.d.ts +0 -2
- package/dist/plugins/types.js +0 -2
- package/dist/plugins/types.js.map +1 -1
- package/dist/providers/index.d.ts +50 -22
- package/dist/providers/index.js +276 -50
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/model-registry.d.ts +84 -0
- package/dist/providers/model-registry.js +385 -0
- package/dist/providers/model-registry.js.map +1 -0
- package/dist/types/providers.d.ts +2 -63
- package/dist/types/providers.js +1 -1
- package/dist/utils/__tests__/frontmatter.test.d.ts +4 -0
- package/dist/utils/__tests__/frontmatter.test.js +150 -0
- package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
- package/dist/utils/diagnostic-events.d.ts +230 -0
- package/dist/utils/diagnostic-events.js +189 -0
- package/dist/utils/diagnostic-events.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +0 -1
- package/dist/utils/frontmatter.js +15 -79
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/log-stream.d.ts +95 -0
- package/dist/utils/log-stream.js +229 -0
- package/dist/utils/log-stream.js.map +1 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/redact.d.ts +73 -0
- package/dist/utils/redact.js +245 -0
- package/dist/utils/redact.js.map +1 -0
- package/package.json +6 -4
- package/skills/find-skills/SKILL.md +0 -9
- package/dist/__tests__/core.test.js +0 -72
- package/dist/__tests__/core.test.js.map +0 -1
- package/dist/agent/model-manager.js.map +0 -1
- package/dist/cli/commands/configure.d.ts +0 -1
- package/dist/cli/commands/configure.js +0 -173
- package/dist/cli/commands/configure.js.map +0 -1
- package/dist/cli/commands/gateway-daemon.d.ts +0 -1
- package/dist/cli/commands/gateway-daemon.js +0 -141
- package/dist/cli/commands/gateway-daemon.js.map +0 -1
- package/dist/config/__tests__/diff.test.d.ts +0 -1
- package/dist/config/__tests__/diff.test.js +0 -192
- package/dist/config/__tests__/diff.test.js.map +0 -1
- package/dist/config/__tests__/loader.test.d.ts +0 -1
- package/dist/config/__tests__/loader.test.js +0 -356
- package/dist/config/__tests__/loader.test.js.map +0 -1
- package/dist/config/__tests__/paths.test.d.ts +0 -1
- package/dist/config/__tests__/paths.test.js +0 -192
- package/dist/config/__tests__/paths.test.js.map +0 -1
- package/dist/config/__tests__/reload.test.d.ts +0 -1
- package/dist/config/__tests__/reload.test.js +0 -374
- package/dist/config/__tests__/reload.test.js.map +0 -1
- package/dist/config/__tests__/rules.test.d.ts +0 -1
- package/dist/config/__tests__/rules.test.js +0 -204
- package/dist/config/__tests__/rules.test.js.map +0 -1
- package/dist/config/__tests__/schema.test.d.ts +0 -1
- package/dist/config/__tests__/schema.test.js +0 -672
- package/dist/config/__tests__/schema.test.js.map +0 -1
- package/dist/daemon/background-start.d.ts +0 -33
- package/dist/daemon/background-start.js +0 -89
- package/dist/daemon/background-start.js.map +0 -1
- package/dist/daemon/gateway-manager.d.ts +0 -87
- package/dist/daemon/gateway-manager.js +0 -324
- package/dist/daemon/gateway-manager.js.map +0 -1
- package/dist/daemon/index.d.ts +0 -5
- package/dist/daemon/index.js +0 -6
- package/dist/daemon/index.js.map +0 -1
- package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
- package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
- package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
- package/dist/providers/__tests__/registry.test.d.ts +0 -1
- package/dist/providers/__tests__/registry.test.js +0 -110
- package/dist/providers/__tests__/registry.test.js.map +0 -1
- package/dist/providers/api-strategies.d.ts +0 -15
- package/dist/providers/api-strategies.js +0 -96
- package/dist/providers/api-strategies.js.map +0 -1
- package/dist/providers/auto-discovery.d.ts +0 -84
- package/dist/providers/auto-discovery.js +0 -236
- package/dist/providers/auto-discovery.js.map +0 -1
- package/dist/providers/config.d.ts +0 -25
- package/dist/providers/config.js +0 -42
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/model-catalog.d.ts +0 -205
- package/dist/providers/model-catalog.js +0 -1071
- package/dist/providers/model-catalog.js.map +0 -1
- package/dist/providers/models-dev-data.d.ts +0 -11
- package/dist/providers/models-dev-data.js +0 -1035
- package/dist/providers/models-dev-data.js.map +0 -1
- package/dist/providers/models-dev.d.ts +0 -30
- package/dist/providers/models-dev.js +0 -42
- package/dist/providers/models-dev.js.map +0 -1
- package/dist/providers/pi-ai.d.ts +0 -62
- package/dist/providers/pi-ai.js +0 -221
- package/dist/providers/pi-ai.js.map +0 -1
- package/dist/providers/provider-catalog.d.ts +0 -173
- package/dist/providers/provider-catalog.js +0 -834
- package/dist/providers/provider-catalog.js.map +0 -1
- package/dist/providers/registry.d.ts +0 -155
- package/dist/providers/registry.js +0 -524
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/types.d.ts +0 -95
- package/dist/providers/types.js +0 -7
- package/dist/providers/types.js.map +0 -1
- package/dist/session/chat-manager.d.ts +0 -49
- package/dist/session/chat-manager.js +0 -167
- package/dist/session/chat-manager.js.map +0 -1
- package/dist/session/chat-types.d.ts +0 -53
- package/dist/session/chat-types.js +0 -63
- package/dist/session/chat-types.js.map +0 -1
- /package/dist/{__tests__/core.test.d.ts → cli/commands/setup.d.ts} +0 -0
package/dist/providers/index.js
CHANGED
|
@@ -1,55 +1,281 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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
|
-
|
|
18
|
-
|
|
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
|
-
//
|
|
7
|
+
// Provider Environment Variable Mappings
|
|
43
8
|
// ============================================
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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;
|