coder-link 0.0.9 → 0.1.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 +31 -13
- package/dist/cli.js +214 -76
- package/dist/cli.js.map +1 -1
- package/dist/lib/claude-code-manager.d.ts +8 -1
- package/dist/lib/claude-code-manager.d.ts.map +1 -1
- package/dist/lib/claude-code-manager.js +84 -118
- package/dist/lib/claude-code-manager.js.map +1 -1
- package/dist/lib/codex-manager.d.ts +34 -0
- package/dist/lib/codex-manager.d.ts.map +1 -0
- package/dist/lib/codex-manager.js +223 -0
- package/dist/lib/codex-manager.js.map +1 -0
- package/dist/lib/config-io.d.ts +5 -0
- package/dist/lib/config-io.d.ts.map +1 -0
- package/dist/lib/config-io.js +50 -0
- package/dist/lib/config-io.js.map +1 -0
- package/dist/lib/crush-manager.d.ts +1 -2
- package/dist/lib/crush-manager.d.ts.map +1 -1
- package/dist/lib/crush-manager.js +20 -58
- package/dist/lib/crush-manager.js.map +1 -1
- package/dist/lib/factory-droid-manager.d.ts +8 -2
- package/dist/lib/factory-droid-manager.d.ts.map +1 -1
- package/dist/lib/factory-droid-manager.js +193 -260
- package/dist/lib/factory-droid-manager.js.map +1 -1
- package/dist/lib/kimi-manager.d.ts.map +1 -1
- package/dist/lib/kimi-manager.js +19 -30
- package/dist/lib/kimi-manager.js.map +1 -1
- package/dist/lib/opencode-manager.d.ts +1 -1
- package/dist/lib/opencode-manager.d.ts.map +1 -1
- package/dist/lib/opencode-manager.js +187 -63
- package/dist/lib/opencode-manager.js.map +1 -1
- package/dist/lib/pi-manager.d.ts +0 -1
- package/dist/lib/pi-manager.d.ts.map +1 -1
- package/dist/lib/pi-manager.js +18 -41
- package/dist/lib/pi-manager.js.map +1 -1
- package/dist/lib/provider-registry.d.ts +200 -0
- package/dist/lib/provider-registry.d.ts.map +1 -0
- package/dist/lib/provider-registry.js +581 -0
- package/dist/lib/provider-registry.js.map +1 -0
- package/dist/lib/tool-manager.d.ts +42 -3
- package/dist/lib/tool-manager.d.ts.map +1 -1
- package/dist/lib/tool-manager.js +155 -34
- package/dist/lib/tool-manager.js.map +1 -1
- package/dist/mcp-services.d.ts.map +1 -1
- package/dist/mcp-services.js +57 -3
- package/dist/mcp-services.js.map +1 -1
- package/dist/{menu.d.ts → menu/main-menu.d.ts} +1 -1
- package/dist/menu/main-menu.d.ts.map +1 -0
- package/dist/menu/main-menu.js +90 -0
- package/dist/menu/main-menu.js.map +1 -0
- package/dist/menu/mcp-menu.d.ts +2 -0
- package/dist/menu/mcp-menu.d.ts.map +1 -0
- package/dist/menu/mcp-menu.js +136 -0
- package/dist/menu/mcp-menu.js.map +1 -0
- package/dist/menu/provider-menu.d.ts +4 -0
- package/dist/menu/provider-menu.d.ts.map +1 -0
- package/dist/menu/provider-menu.js +623 -0
- package/dist/menu/provider-menu.js.map +1 -0
- package/dist/menu/shared.d.ts +17 -0
- package/dist/menu/shared.d.ts.map +1 -0
- package/dist/menu/shared.js +255 -0
- package/dist/menu/shared.js.map +1 -0
- package/dist/menu/system-menu.d.ts +3 -0
- package/dist/menu/system-menu.d.ts.map +1 -0
- package/dist/menu/system-menu.js +111 -0
- package/dist/menu/system-menu.js.map +1 -0
- package/dist/menu/tool-menu.d.ts +3 -0
- package/dist/menu/tool-menu.d.ts.map +1 -0
- package/dist/menu/tool-menu.js +619 -0
- package/dist/menu/tool-menu.js.map +1 -0
- package/dist/utils/api-test.d.ts +6 -0
- package/dist/utils/api-test.d.ts.map +1 -1
- package/dist/utils/api-test.js +66 -0
- package/dist/utils/api-test.js.map +1 -1
- package/dist/utils/brand.d.ts.map +1 -1
- package/dist/utils/brand.js +14 -0
- package/dist/utils/brand.js.map +1 -1
- package/dist/utils/config.d.ts +29 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +194 -68
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/providers.d.ts +32 -0
- package/dist/utils/providers.d.ts.map +1 -0
- package/dist/utils/providers.js +63 -0
- package/dist/utils/providers.js.map +1 -0
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +123 -35
- package/dist/wizard.js.map +1 -1
- package/package.json +1 -1
- package/dist/menu.d.ts.map +0 -1
- package/dist/menu.js +0 -1226
- package/dist/menu.js.map +0 -1
package/dist/lib/pi-manager.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { existsSync
|
|
2
|
-
import {
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { readJsonConfig, writeJsonConfig } from './config-io.js';
|
|
6
|
+
import { detectPlanFromUrl, getBaseUrl, getDefaultModel, } from './provider-registry.js';
|
|
5
7
|
const PI_PROVIDER_ID = 'moonshot';
|
|
6
8
|
export class PiManager {
|
|
7
9
|
static instance = null;
|
|
@@ -16,35 +18,11 @@ export class PiManager {
|
|
|
16
18
|
}
|
|
17
19
|
return PiManager.instance;
|
|
18
20
|
}
|
|
19
|
-
ensureDir() {
|
|
20
|
-
const dir = dirname(this.configPath);
|
|
21
|
-
if (!existsSync(dir)) {
|
|
22
|
-
mkdirSync(dir, { recursive: true });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
21
|
readConfig() {
|
|
26
|
-
|
|
27
|
-
if (!existsSync(this.configPath))
|
|
28
|
-
return {};
|
|
29
|
-
const text = readFileSync(this.configPath, 'utf-8');
|
|
30
|
-
if (!text.trim())
|
|
31
|
-
return {};
|
|
32
|
-
return JSON.parse(text);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
logger.logError('PiManager.readConfig', error);
|
|
36
|
-
throw new Error(`Failed to parse Pi models config at ${this.configPath}`);
|
|
37
|
-
}
|
|
22
|
+
return readJsonConfig(this.configPath, 'PiManager');
|
|
38
23
|
}
|
|
39
24
|
writeConfig(config) {
|
|
40
|
-
|
|
41
|
-
this.ensureDir();
|
|
42
|
-
writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
logger.logError('PiManager.writeConfig', error);
|
|
46
|
-
throw new Error(`Failed to write Pi models config at ${this.configPath}`);
|
|
47
|
-
}
|
|
25
|
+
writeJsonConfig(this.configPath, config, 'PiManager', 2);
|
|
48
26
|
}
|
|
49
27
|
async detectCurrentConfig() {
|
|
50
28
|
try {
|
|
@@ -61,16 +39,8 @@ export class PiManager {
|
|
|
61
39
|
model = models[0].id;
|
|
62
40
|
}
|
|
63
41
|
if (typeof apiKey === 'string' && apiKey.trim()) {
|
|
64
|
-
// Detect plan from base_url
|
|
65
|
-
|
|
66
|
-
if (typeof baseUrl === 'string') {
|
|
67
|
-
if (baseUrl.includes('openrouter.ai')) {
|
|
68
|
-
plan = 'openrouter';
|
|
69
|
-
}
|
|
70
|
-
else if (baseUrl.includes('nvidia.com')) {
|
|
71
|
-
plan = 'nvidia';
|
|
72
|
-
}
|
|
73
|
-
}
|
|
42
|
+
// Detect plan from base_url using centralized detection
|
|
43
|
+
const plan = detectPlanFromUrl(baseUrl) || 'kimi';
|
|
74
44
|
return { plan, apiKey: apiKey.trim(), model };
|
|
75
45
|
}
|
|
76
46
|
return { plan: null, apiKey: null };
|
|
@@ -81,11 +51,14 @@ export class PiManager {
|
|
|
81
51
|
}
|
|
82
52
|
}
|
|
83
53
|
async loadConfig(plan, apiKey, options) {
|
|
84
|
-
|
|
54
|
+
// LM Studio doesn't require an API key
|
|
55
|
+
const planKey = plan;
|
|
56
|
+
const isLMStudio = planKey === 'lmstudio';
|
|
57
|
+
if (!isLMStudio && (!apiKey || !apiKey.trim())) {
|
|
85
58
|
throw new Error('API key cannot be empty');
|
|
86
59
|
}
|
|
87
|
-
const baseUrl = options?.baseUrl?.trim() || '
|
|
88
|
-
const modelId = options?.model?.trim() ||
|
|
60
|
+
const baseUrl = options?.baseUrl?.trim() || getBaseUrl(planKey, 'openai');
|
|
61
|
+
const modelId = options?.model?.trim() || getDefaultModel(planKey);
|
|
89
62
|
const source = (options?.source || '').toString().trim().toLowerCase();
|
|
90
63
|
// Pi supported APIs: openai-completions/openai-responses/anthropic-messages/google-generative-ai.
|
|
91
64
|
// Despite the name, `openai-completions` maps to OpenAI *Chat Completions* (POST /chat/completions).
|
|
@@ -97,6 +70,10 @@ export class PiManager {
|
|
|
97
70
|
return 'Kimi K2.5 (NVIDIA)';
|
|
98
71
|
if (source === 'openrouter')
|
|
99
72
|
return 'Kimi K2.5 (OpenRouter)';
|
|
73
|
+
if (source === 'alibaba')
|
|
74
|
+
return 'Qwen3 Coder Plus (Alibaba)';
|
|
75
|
+
if (source === 'alibaba-api-sg')
|
|
76
|
+
return 'Qwen3 Max (Alibaba API)';
|
|
100
77
|
if (source === 'glm-global')
|
|
101
78
|
return 'GLM (Global)';
|
|
102
79
|
if (source === 'glm-china')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-manager.js","sourceRoot":"","sources":["../../src/lib/pi-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"pi-manager.js","sourceRoot":"","sources":["../../src/lib/pi-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized Provider Configuration Registry
|
|
3
|
+
*
|
|
4
|
+
* This module serves as the single source of truth for all provider-related
|
|
5
|
+
* configurations including base URLs, default models, display names, and
|
|
6
|
+
* detection patterns.
|
|
7
|
+
*
|
|
8
|
+
* Benefits:
|
|
9
|
+
* - Eliminates duplication across manager files
|
|
10
|
+
* - Makes adding new providers easier (add once, works everywhere)
|
|
11
|
+
* - Ensures consistency across all tools
|
|
12
|
+
* - Simplifies maintenance and updates
|
|
13
|
+
*/
|
|
14
|
+
import type { Plan } from '../utils/config.js';
|
|
15
|
+
export type Protocol = 'openai' | 'anthropic';
|
|
16
|
+
export interface ProviderUrlConfig {
|
|
17
|
+
/** OpenAI-compatible base URL (for /v1/chat/completions) */
|
|
18
|
+
openai: string;
|
|
19
|
+
/** Anthropic-compatible base URL (for /v1/messages) - undefined if not supported */
|
|
20
|
+
anthropic?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ConfigurableDefaults {
|
|
23
|
+
/** Default port(s) for local servers */
|
|
24
|
+
defaultPorts?: number[];
|
|
25
|
+
/** Whether baseUrl can be configured by user */
|
|
26
|
+
allowCustomBaseUrl?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface ProviderConfig {
|
|
29
|
+
/** Unique plan identifier */
|
|
30
|
+
id: Plan;
|
|
31
|
+
/** Human-readable display name */
|
|
32
|
+
displayName: string;
|
|
33
|
+
/** Short name for config keys (no spaces, URL-safe) */
|
|
34
|
+
shortName: string;
|
|
35
|
+
/** Base URLs for each protocol */
|
|
36
|
+
urls: ProviderUrlConfig;
|
|
37
|
+
/** Default model ID */
|
|
38
|
+
defaultModel: string;
|
|
39
|
+
/** Common models for this provider */
|
|
40
|
+
commonModels: string[];
|
|
41
|
+
/** URL patterns for detecting this provider from a base URL */
|
|
42
|
+
detectionPatterns: string[];
|
|
43
|
+
/** Whether this provider supports extended thinking/reasoning */
|
|
44
|
+
supportsThinking: boolean;
|
|
45
|
+
/** Max context size for this provider */
|
|
46
|
+
maxContextSize: number;
|
|
47
|
+
/** Max output tokens for this provider */
|
|
48
|
+
maxOutputTokens: number;
|
|
49
|
+
/**
|
|
50
|
+
* Configurable defaults for local providers
|
|
51
|
+
* Allows users to override default ports or base URLs without editing code
|
|
52
|
+
*/
|
|
53
|
+
configurableDefaults?: ConfigurableDefaults;
|
|
54
|
+
/** Whether this provider requires healthcheck on startup (typically local providers) */
|
|
55
|
+
requiresHealthCheck?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare const PROVIDER_CONFIGS: Record<Plan, ProviderConfig>;
|
|
58
|
+
/**
|
|
59
|
+
* Get the provider configuration for a given plan
|
|
60
|
+
*/
|
|
61
|
+
export declare function getProviderConfig(plan: Plan): ProviderConfig;
|
|
62
|
+
/**
|
|
63
|
+
* Get the base URL for a specific plan and protocol
|
|
64
|
+
*/
|
|
65
|
+
export declare function getBaseUrl(plan: Plan, protocol: Protocol): string;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a provider supports a specific protocol
|
|
68
|
+
*/
|
|
69
|
+
export declare function supportsProtocol(plan: Plan, protocol: Protocol): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Detect the plan from a base URL
|
|
72
|
+
*/
|
|
73
|
+
export declare function detectPlanFromUrl(baseUrl: string): Plan | null;
|
|
74
|
+
/**
|
|
75
|
+
* Get the default model for a plan
|
|
76
|
+
*/
|
|
77
|
+
export declare function getDefaultModel(plan: Plan): string;
|
|
78
|
+
/**
|
|
79
|
+
* Get max output tokens for a model (handles special cases like qwen3-max)
|
|
80
|
+
*/
|
|
81
|
+
export declare function getMaxOutputTokens(plan: Plan, model?: string): number;
|
|
82
|
+
/**
|
|
83
|
+
* Get max context size for a plan
|
|
84
|
+
*/
|
|
85
|
+
export declare function getMaxContextSize(plan: Plan): number;
|
|
86
|
+
/**
|
|
87
|
+
* Check if a provider requires healthcheck on startup
|
|
88
|
+
*/
|
|
89
|
+
export declare function requiresHealthCheck(plan: Plan): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Get configurable defaults for a provider
|
|
92
|
+
*/
|
|
93
|
+
export declare function getConfigurableDefaults(plan: Plan): ConfigurableDefaults | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Resolve provider base URL for a specific protocol.
|
|
96
|
+
* This is a generic, protocol-agnostic function that handles URL normalization
|
|
97
|
+
* for all providers without requiring separate cases for each protocol extension.
|
|
98
|
+
*
|
|
99
|
+
* @param plan - The provider plan
|
|
100
|
+
* @param protocol - The target protocol ('openai' or 'anthropic')
|
|
101
|
+
* @param options - Optional base URL overrides
|
|
102
|
+
* @returns The resolved and normalized base URL
|
|
103
|
+
*/
|
|
104
|
+
export declare function resolveProviderBaseUrl(plan: Plan, protocol: Protocol, options?: {
|
|
105
|
+
baseUrl?: string;
|
|
106
|
+
anthropicBaseUrl?: string;
|
|
107
|
+
}): string;
|
|
108
|
+
/**
|
|
109
|
+
* Resolve the effective base URL, handling user overrides and URL normalization
|
|
110
|
+
* @deprecated Use resolveProviderBaseUrl instead for better protocol-agnostic handling
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveBaseUrl(plan: Plan, protocol: Protocol, options?: {
|
|
113
|
+
baseUrl?: string;
|
|
114
|
+
anthropicBaseUrl?: string;
|
|
115
|
+
}): string;
|
|
116
|
+
/**
|
|
117
|
+
* Normalize LM Studio URL for a specific protocol (protocol-agnostic)
|
|
118
|
+
* This is a dedicated function to handle LM Studio's URL conventions.
|
|
119
|
+
*/
|
|
120
|
+
export declare function normalizeLMStudioUrl(url: string, protocol: Protocol): string;
|
|
121
|
+
/**
|
|
122
|
+
* Get all provider plans as an array
|
|
123
|
+
*/
|
|
124
|
+
export declare function getAllPlans(): Plan[];
|
|
125
|
+
/**
|
|
126
|
+
* Get provider display name
|
|
127
|
+
*/
|
|
128
|
+
export declare function getProviderDisplayName(plan: Plan): string;
|
|
129
|
+
/**
|
|
130
|
+
* Get provider short name (for config keys)
|
|
131
|
+
*/
|
|
132
|
+
export declare function getProviderShortName(plan: Plan): string;
|
|
133
|
+
/**
|
|
134
|
+
* Check if a provider supports extended thinking
|
|
135
|
+
*/
|
|
136
|
+
export declare function supportsThinking(plan: Plan, source?: string): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Check if LM Studio server is reachable
|
|
139
|
+
* Returns the actual base URL that responded, or null if unreachable
|
|
140
|
+
*/
|
|
141
|
+
export declare function checkLMStudioHealth(baseUrl?: string, options?: {
|
|
142
|
+
timeoutMs?: number;
|
|
143
|
+
signal?: AbortSignal;
|
|
144
|
+
}): Promise<{
|
|
145
|
+
reachable: boolean;
|
|
146
|
+
url?: string;
|
|
147
|
+
version?: string;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Fetch the currently loaded model from LM Studio
|
|
151
|
+
* Returns the model ID if available, null otherwise
|
|
152
|
+
*/
|
|
153
|
+
export declare function fetchLMStudioModel(baseUrl?: string, options?: {
|
|
154
|
+
timeoutMs?: number;
|
|
155
|
+
signal?: AbortSignal;
|
|
156
|
+
port?: number;
|
|
157
|
+
}): Promise<string | null>;
|
|
158
|
+
/**
|
|
159
|
+
* Check if LM Studio is running and has a model loaded
|
|
160
|
+
* Now includes health check and uses refactored URL building
|
|
161
|
+
*/
|
|
162
|
+
export declare function checkLMStudioStatus(baseUrl?: string, options?: {
|
|
163
|
+
timeoutMs?: number;
|
|
164
|
+
port?: number;
|
|
165
|
+
}): Promise<{
|
|
166
|
+
running: boolean;
|
|
167
|
+
reachable: boolean;
|
|
168
|
+
modelLoaded: boolean;
|
|
169
|
+
modelId?: string;
|
|
170
|
+
actualUrl?: string;
|
|
171
|
+
version?: string;
|
|
172
|
+
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Get the effective base URL for LM Studio, considering custom port configuration
|
|
175
|
+
*/
|
|
176
|
+
export declare function getLMStudioBaseUrl(options?: {
|
|
177
|
+
port?: number;
|
|
178
|
+
baseUrl?: string;
|
|
179
|
+
}): string;
|
|
180
|
+
/**
|
|
181
|
+
* Get default LM Studio ports from configuration
|
|
182
|
+
*/
|
|
183
|
+
export declare function getLMStudioDefaultPorts(): number[];
|
|
184
|
+
export interface ProviderHealthCheckResult {
|
|
185
|
+
reachable: boolean;
|
|
186
|
+
url?: string;
|
|
187
|
+
error?: string;
|
|
188
|
+
/** Provider-specific metadata */
|
|
189
|
+
metadata?: Record<string, unknown>;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Perform health check for any provider that requires it.
|
|
193
|
+
* This is a generic function that can be extended for other local providers.
|
|
194
|
+
*/
|
|
195
|
+
export declare function checkProviderHealth(plan: Plan, options?: {
|
|
196
|
+
baseUrl?: string;
|
|
197
|
+
timeoutMs?: number;
|
|
198
|
+
signal?: AbortSignal;
|
|
199
|
+
}): Promise<ProviderHealthCheckResult>;
|
|
200
|
+
//# sourceMappingURL=provider-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/lib/provider-registry.ts"],"names":[],"mappings":"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"}
|