claude-ai-switcher 1.1.4
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/AGENTS.md +265 -0
- package/ARCHITECTURE.md +162 -0
- package/CLAUDE.md +267 -0
- package/LICENSE +21 -0
- package/QWEN.md +429 -0
- package/README.md +833 -0
- package/dist/clients/claude-code.d.ts +92 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +312 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/opencode.d.ts +71 -0
- package/dist/clients/opencode.d.ts.map +1 -0
- package/dist/clients/opencode.js +604 -0
- package/dist/clients/opencode.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +122 -0
- package/dist/config.js.map +1 -0
- package/dist/display.d.ts +51 -0
- package/dist/display.d.ts.map +1 -0
- package/dist/display.js +118 -0
- package/dist/display.js.map +1 -0
- package/dist/hooks/index.d.ts +60 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +223 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/token-tracker.js +280 -0
- package/dist/hooks/visual-enhancements.js +364 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1091 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +34 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +343 -0
- package/dist/models.js.map +1 -0
- package/dist/providers/alibaba.d.ts +25 -0
- package/dist/providers/alibaba.d.ts.map +1 -0
- package/dist/providers/alibaba.js +37 -0
- package/dist/providers/alibaba.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +19 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +44 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +156 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/glm.d.ts +25 -0
- package/dist/providers/glm.d.ts.map +1 -0
- package/dist/providers/glm.js +89 -0
- package/dist/providers/glm.js.map +1 -0
- package/dist/providers/ollama.d.ts +48 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +174 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openrouter.d.ts +24 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +36 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/verify.d.ts +24 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +262 -0
- package/dist/verify.js.map +1 -0
- package/package.json +57 -0
- package/scripts/copy-hooks.js +15 -0
- package/src/clients/claude-code.ts +340 -0
- package/src/clients/opencode.ts +618 -0
- package/src/config.ts +101 -0
- package/src/display.ts +151 -0
- package/src/hooks/index.ts +208 -0
- package/src/hooks/token-tracker.js +280 -0
- package/src/hooks/visual-enhancements.js +364 -0
- package/src/index.ts +1263 -0
- package/src/models.ts +366 -0
- package/src/providers/alibaba.ts +43 -0
- package/src/providers/anthropic.ts +23 -0
- package/src/providers/gemini.ts +136 -0
- package/src/providers/glm.ts +60 -0
- package/src/providers/ollama.ts +146 -0
- package/src/providers/openrouter.ts +42 -0
- package/src/verify.ts +258 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Client Handler
|
|
3
|
+
*
|
|
4
|
+
* Manages ~/.claude/settings.json and ~/.claude.json for Claude Code
|
|
5
|
+
*/
|
|
6
|
+
import { ModelTierMap } from "../models";
|
|
7
|
+
export interface ClaudeSettings {
|
|
8
|
+
mcpServers?: Record<string, any>;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export interface ClaudeJson {
|
|
12
|
+
hasCompletedOnboarding?: boolean;
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}
|
|
15
|
+
export interface MCPService {
|
|
16
|
+
type: string;
|
|
17
|
+
command?: string;
|
|
18
|
+
args?: string[];
|
|
19
|
+
env?: Record<string, string>;
|
|
20
|
+
url?: string;
|
|
21
|
+
headers?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if Claude settings file exists
|
|
25
|
+
*/
|
|
26
|
+
export declare function claudeSettingsExists(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if ~/.claude.json exists
|
|
29
|
+
*/
|
|
30
|
+
export declare function claudeJsonExists(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Read current Claude settings
|
|
33
|
+
*/
|
|
34
|
+
export declare function readClaudeSettings(): Promise<ClaudeSettings>;
|
|
35
|
+
/**
|
|
36
|
+
* Read ~/.claude.json
|
|
37
|
+
*/
|
|
38
|
+
export declare function readClaudeJson(): Promise<ClaudeJson>;
|
|
39
|
+
/**
|
|
40
|
+
* Write Claude settings with backup
|
|
41
|
+
*/
|
|
42
|
+
export declare function writeClaudeSettings(settings: ClaudeSettings): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Write ~/.claude.json with backup
|
|
45
|
+
*/
|
|
46
|
+
export declare function writeClaudeJson(config: ClaudeJson): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Ensure hasCompletedOnboarding is set to true in ~/.claude.json
|
|
49
|
+
* This prevents "Unable to connect to Anthropic services" error
|
|
50
|
+
*/
|
|
51
|
+
export declare function ensureOnboardingComplete(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Configure Claude Code for Alibaba Coding Plan
|
|
54
|
+
*/
|
|
55
|
+
export declare function configureAlibaba(apiKey: string, model: string, tierMap: ModelTierMap): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Configure Claude Code for Anthropic (default)
|
|
58
|
+
* Removes MCP overrides and tier map env vars to use native Claude
|
|
59
|
+
*/
|
|
60
|
+
export declare function configureAnthropic(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Configure Claude Code for GLM via coding-helper
|
|
63
|
+
* Clears provider-specific env vars (e.g. Alibaba) before applying GLM tier map
|
|
64
|
+
*/
|
|
65
|
+
export declare function configureGLM(tierMap: ModelTierMap): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Configure Claude Code for OpenRouter
|
|
68
|
+
* Sets env vars to route through OpenRouter's Anthropic-compatible API
|
|
69
|
+
*/
|
|
70
|
+
export declare function configureOpenRouter(apiKey: string, model: string, tierMap: ModelTierMap): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Configure Claude Code for Ollama (via LiteLLM proxy on port 4000)
|
|
73
|
+
*/
|
|
74
|
+
export declare function configureOllama(model: string, tierMap: ModelTierMap): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Configure Claude Code for Gemini (via LiteLLM proxy on port 4001)
|
|
77
|
+
*/
|
|
78
|
+
export declare function configureGemini(apiKey: string, model: string, tierMap: ModelTierMap): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Get current provider from Claude settings
|
|
81
|
+
*/
|
|
82
|
+
export declare function getCurrentProvider(): Promise<{
|
|
83
|
+
provider: string;
|
|
84
|
+
model?: string;
|
|
85
|
+
endpoint?: string;
|
|
86
|
+
tierMap?: {
|
|
87
|
+
opus?: string;
|
|
88
|
+
sonnet?: string;
|
|
89
|
+
haiku?: string;
|
|
90
|
+
};
|
|
91
|
+
} | null>;
|
|
92
|
+
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA8BD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAO1D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CASvE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBxD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7G;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D,GAAG,IAAI,CAAC,CAgFR"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code Client Handler
|
|
4
|
+
*
|
|
5
|
+
* Manages ~/.claude/settings.json and ~/.claude.json for Claude Code
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.claudeSettingsExists = claudeSettingsExists;
|
|
42
|
+
exports.claudeJsonExists = claudeJsonExists;
|
|
43
|
+
exports.readClaudeSettings = readClaudeSettings;
|
|
44
|
+
exports.readClaudeJson = readClaudeJson;
|
|
45
|
+
exports.writeClaudeSettings = writeClaudeSettings;
|
|
46
|
+
exports.writeClaudeJson = writeClaudeJson;
|
|
47
|
+
exports.ensureOnboardingComplete = ensureOnboardingComplete;
|
|
48
|
+
exports.configureAlibaba = configureAlibaba;
|
|
49
|
+
exports.configureAnthropic = configureAnthropic;
|
|
50
|
+
exports.configureGLM = configureGLM;
|
|
51
|
+
exports.configureOpenRouter = configureOpenRouter;
|
|
52
|
+
exports.configureOllama = configureOllama;
|
|
53
|
+
exports.configureGemini = configureGemini;
|
|
54
|
+
exports.getCurrentProvider = getCurrentProvider;
|
|
55
|
+
const fs = __importStar(require("fs-extra"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
57
|
+
const os = __importStar(require("os"));
|
|
58
|
+
const CLAUDE_DIR = path.join(os.homedir(), ".claude");
|
|
59
|
+
const SETTINGS_FILE = path.join(CLAUDE_DIR, "settings.json");
|
|
60
|
+
const CLAUDE_JSON = path.join(os.homedir(), ".claude.json");
|
|
61
|
+
const TIER_ENV_KEYS = {
|
|
62
|
+
opus: "ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
63
|
+
sonnet: "ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
64
|
+
haiku: "ANTHROPIC_DEFAULT_HAIKU_MODEL"
|
|
65
|
+
};
|
|
66
|
+
function applyTierMap(settings, tierMap) {
|
|
67
|
+
settings.env = settings.env || {};
|
|
68
|
+
settings.env[TIER_ENV_KEYS.opus] = tierMap.opus;
|
|
69
|
+
settings.env[TIER_ENV_KEYS.sonnet] = tierMap.sonnet;
|
|
70
|
+
settings.env[TIER_ENV_KEYS.haiku] = tierMap.haiku;
|
|
71
|
+
}
|
|
72
|
+
function clearTierMap(settings) {
|
|
73
|
+
if (settings.env) {
|
|
74
|
+
delete settings.env[TIER_ENV_KEYS.opus];
|
|
75
|
+
delete settings.env[TIER_ENV_KEYS.sonnet];
|
|
76
|
+
delete settings.env[TIER_ENV_KEYS.haiku];
|
|
77
|
+
if (Object.keys(settings.env).length === 0) {
|
|
78
|
+
delete settings.env;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if Claude settings file exists
|
|
84
|
+
*/
|
|
85
|
+
function claudeSettingsExists() {
|
|
86
|
+
return fs.existsSync(SETTINGS_FILE);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if ~/.claude.json exists
|
|
90
|
+
*/
|
|
91
|
+
function claudeJsonExists() {
|
|
92
|
+
return fs.existsSync(CLAUDE_JSON);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read current Claude settings
|
|
96
|
+
*/
|
|
97
|
+
async function readClaudeSettings() {
|
|
98
|
+
if (!claudeSettingsExists()) {
|
|
99
|
+
return {};
|
|
100
|
+
}
|
|
101
|
+
const content = await fs.readFile(SETTINGS_FILE, "utf-8");
|
|
102
|
+
return JSON.parse(content);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Read ~/.claude.json
|
|
106
|
+
*/
|
|
107
|
+
async function readClaudeJson() {
|
|
108
|
+
if (!claudeJsonExists()) {
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
const content = await fs.readFile(CLAUDE_JSON, "utf-8");
|
|
112
|
+
return JSON.parse(content);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Write Claude settings with backup
|
|
116
|
+
*/
|
|
117
|
+
async function writeClaudeSettings(settings) {
|
|
118
|
+
// Ensure directory exists
|
|
119
|
+
await fs.ensureDir(CLAUDE_DIR);
|
|
120
|
+
// Backup existing settings if they exist
|
|
121
|
+
if (claudeSettingsExists()) {
|
|
122
|
+
const backupPath = `${SETTINGS_FILE}.backup.${Date.now()}`;
|
|
123
|
+
await fs.copyFile(SETTINGS_FILE, backupPath);
|
|
124
|
+
}
|
|
125
|
+
// Write new settings
|
|
126
|
+
await fs.writeFile(SETTINGS_FILE, JSON.stringify(settings, null, 2), "utf-8");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Write ~/.claude.json with backup
|
|
130
|
+
*/
|
|
131
|
+
async function writeClaudeJson(config) {
|
|
132
|
+
// Backup existing file if it exists
|
|
133
|
+
if (claudeJsonExists()) {
|
|
134
|
+
const backupPath = `${CLAUDE_JSON}.backup.${Date.now()}`;
|
|
135
|
+
await fs.copyFile(CLAUDE_JSON, backupPath);
|
|
136
|
+
}
|
|
137
|
+
// Write new config
|
|
138
|
+
await fs.writeFile(CLAUDE_JSON, JSON.stringify(config, null, 2), "utf-8");
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Ensure hasCompletedOnboarding is set to true in ~/.claude.json
|
|
142
|
+
* This prevents "Unable to connect to Anthropic services" error
|
|
143
|
+
*/
|
|
144
|
+
async function ensureOnboardingComplete() {
|
|
145
|
+
const config = await readClaudeJson();
|
|
146
|
+
config.hasCompletedOnboarding = true;
|
|
147
|
+
await writeClaudeJson(config);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Configure Claude Code for Alibaba Coding Plan
|
|
151
|
+
*/
|
|
152
|
+
async function configureAlibaba(apiKey, model, tierMap) {
|
|
153
|
+
await ensureOnboardingComplete();
|
|
154
|
+
const settings = await readClaudeSettings();
|
|
155
|
+
settings.env = settings.env || {};
|
|
156
|
+
settings.env["ANTHROPIC_AUTH_TOKEN"] = apiKey;
|
|
157
|
+
settings.env["ANTHROPIC_BASE_URL"] = "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic";
|
|
158
|
+
settings.env["ANTHROPIC_MODEL"] = model;
|
|
159
|
+
applyTierMap(settings, tierMap);
|
|
160
|
+
await writeClaudeSettings(settings);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Configure Claude Code for Anthropic (default)
|
|
164
|
+
* Removes MCP overrides and tier map env vars to use native Claude
|
|
165
|
+
*/
|
|
166
|
+
async function configureAnthropic() {
|
|
167
|
+
await ensureOnboardingComplete();
|
|
168
|
+
const settings = await readClaudeSettings();
|
|
169
|
+
if (settings.mcpServers) {
|
|
170
|
+
delete settings.mcpServers["alibaba-coding-plan"];
|
|
171
|
+
delete settings.mcpServers["glm-coding-plan"];
|
|
172
|
+
}
|
|
173
|
+
// Clear Alibaba env vars
|
|
174
|
+
if (settings.env) {
|
|
175
|
+
delete settings.env["ANTHROPIC_AUTH_TOKEN"];
|
|
176
|
+
delete settings.env["ANTHROPIC_BASE_URL"];
|
|
177
|
+
delete settings.env["ANTHROPIC_MODEL"];
|
|
178
|
+
}
|
|
179
|
+
clearTierMap(settings);
|
|
180
|
+
await writeClaudeSettings(settings);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Configure Claude Code for GLM via coding-helper
|
|
184
|
+
* Clears provider-specific env vars (e.g. Alibaba) before applying GLM tier map
|
|
185
|
+
*/
|
|
186
|
+
async function configureGLM(tierMap) {
|
|
187
|
+
await ensureOnboardingComplete();
|
|
188
|
+
const settings = await readClaudeSettings();
|
|
189
|
+
// Clear other provider env vars (e.g. Alibaba)
|
|
190
|
+
if (settings.env) {
|
|
191
|
+
delete settings.env["ANTHROPIC_AUTH_TOKEN"];
|
|
192
|
+
delete settings.env["ANTHROPIC_BASE_URL"];
|
|
193
|
+
delete settings.env["ANTHROPIC_MODEL"];
|
|
194
|
+
}
|
|
195
|
+
applyTierMap(settings, tierMap);
|
|
196
|
+
await writeClaudeSettings(settings);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Configure Claude Code for OpenRouter
|
|
200
|
+
* Sets env vars to route through OpenRouter's Anthropic-compatible API
|
|
201
|
+
*/
|
|
202
|
+
async function configureOpenRouter(apiKey, model, tierMap) {
|
|
203
|
+
await ensureOnboardingComplete();
|
|
204
|
+
const settings = await readClaudeSettings();
|
|
205
|
+
settings.env = settings.env || {};
|
|
206
|
+
settings.env["ANTHROPIC_AUTH_TOKEN"] = apiKey;
|
|
207
|
+
settings.env["ANTHROPIC_BASE_URL"] = "https://openrouter.ai/api/v1";
|
|
208
|
+
settings.env["ANTHROPIC_MODEL"] = model;
|
|
209
|
+
applyTierMap(settings, tierMap);
|
|
210
|
+
await writeClaudeSettings(settings);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Configure Claude Code for Ollama (via LiteLLM proxy on port 4000)
|
|
214
|
+
*/
|
|
215
|
+
async function configureOllama(model, tierMap) {
|
|
216
|
+
await ensureOnboardingComplete();
|
|
217
|
+
const settings = await readClaudeSettings();
|
|
218
|
+
settings.env = settings.env || {};
|
|
219
|
+
settings.env["ANTHROPIC_AUTH_TOKEN"] = "ollama";
|
|
220
|
+
settings.env["ANTHROPIC_BASE_URL"] = "http://localhost:4000";
|
|
221
|
+
settings.env["ANTHROPIC_MODEL"] = model;
|
|
222
|
+
applyTierMap(settings, tierMap);
|
|
223
|
+
await writeClaudeSettings(settings);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Configure Claude Code for Gemini (via LiteLLM proxy on port 4001)
|
|
227
|
+
*/
|
|
228
|
+
async function configureGemini(apiKey, model, tierMap) {
|
|
229
|
+
await ensureOnboardingComplete();
|
|
230
|
+
const settings = await readClaudeSettings();
|
|
231
|
+
settings.env = settings.env || {};
|
|
232
|
+
settings.env["ANTHROPIC_AUTH_TOKEN"] = apiKey;
|
|
233
|
+
settings.env["ANTHROPIC_BASE_URL"] = "http://localhost:4001";
|
|
234
|
+
settings.env["ANTHROPIC_MODEL"] = model;
|
|
235
|
+
applyTierMap(settings, tierMap);
|
|
236
|
+
await writeClaudeSettings(settings);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get current provider from Claude settings
|
|
240
|
+
*/
|
|
241
|
+
async function getCurrentProvider() {
|
|
242
|
+
if (!claudeSettingsExists()) {
|
|
243
|
+
return { provider: "anthropic" };
|
|
244
|
+
}
|
|
245
|
+
const settings = await readClaudeSettings();
|
|
246
|
+
const tierMap = settings.env ? {
|
|
247
|
+
opus: settings.env[TIER_ENV_KEYS.opus],
|
|
248
|
+
sonnet: settings.env[TIER_ENV_KEYS.sonnet],
|
|
249
|
+
haiku: settings.env[TIER_ENV_KEYS.haiku]
|
|
250
|
+
} : undefined;
|
|
251
|
+
// Check for Alibaba via env vars
|
|
252
|
+
if (settings.env?.["ANTHROPIC_BASE_URL"]?.includes("coding-intl.dashscope.aliyuncs.com")) {
|
|
253
|
+
return {
|
|
254
|
+
provider: "alibaba",
|
|
255
|
+
model: settings.env["ANTHROPIC_MODEL"],
|
|
256
|
+
endpoint: settings.env["ANTHROPIC_BASE_URL"],
|
|
257
|
+
tierMap
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
// Check for OpenRouter via env vars
|
|
261
|
+
if (settings.env?.["ANTHROPIC_BASE_URL"]?.includes("openrouter.ai")) {
|
|
262
|
+
return {
|
|
263
|
+
provider: "openrouter",
|
|
264
|
+
model: settings.env["ANTHROPIC_MODEL"],
|
|
265
|
+
endpoint: settings.env["ANTHROPIC_BASE_URL"],
|
|
266
|
+
tierMap
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
// Check for Ollama via LiteLLM proxy on port 4000
|
|
270
|
+
if (settings.env?.["ANTHROPIC_BASE_URL"]?.includes("localhost:4000")) {
|
|
271
|
+
return {
|
|
272
|
+
provider: "ollama",
|
|
273
|
+
model: settings.env["ANTHROPIC_MODEL"],
|
|
274
|
+
endpoint: settings.env["ANTHROPIC_BASE_URL"],
|
|
275
|
+
tierMap
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
// Check for Gemini via LiteLLM proxy on port 4001
|
|
279
|
+
if (settings.env?.["ANTHROPIC_BASE_URL"]?.includes("localhost:4001")) {
|
|
280
|
+
return {
|
|
281
|
+
provider: "gemini",
|
|
282
|
+
model: settings.env["ANTHROPIC_MODEL"],
|
|
283
|
+
endpoint: settings.env["ANTHROPIC_BASE_URL"],
|
|
284
|
+
tierMap
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
if (settings.mcpServers?.["glm-coding-plan"]) {
|
|
288
|
+
return {
|
|
289
|
+
provider: "glm",
|
|
290
|
+
model: settings.mcpServers["glm-coding-plan"].model,
|
|
291
|
+
tierMap
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Check for GLM via z.ai endpoint (set by coding-helper auth reload)
|
|
295
|
+
if (settings.env?.["ANTHROPIC_BASE_URL"]?.includes(".z.ai")) {
|
|
296
|
+
return {
|
|
297
|
+
provider: "glm",
|
|
298
|
+
model: settings.env["ANTHROPIC_MODEL"],
|
|
299
|
+
endpoint: settings.env["ANTHROPIC_BASE_URL"],
|
|
300
|
+
tierMap
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
// Check for GLM via tier map env vars (no BASE_URL but tier aliases are set)
|
|
304
|
+
if (!settings.env?.["ANTHROPIC_BASE_URL"] && tierMap?.opus) {
|
|
305
|
+
return {
|
|
306
|
+
provider: "glm",
|
|
307
|
+
tierMap
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return { provider: "anthropic" };
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Client Handler
|
|
3
|
+
*
|
|
4
|
+
* Manages ~/.config/opencode/opencode.json for OpenCode
|
|
5
|
+
*/
|
|
6
|
+
export interface OpenCodeSettings {
|
|
7
|
+
$schema?: string;
|
|
8
|
+
provider?: Record<string, any>;
|
|
9
|
+
mcpServers?: Record<string, any>;
|
|
10
|
+
agents?: Record<string, any>;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the OpenCode config path
|
|
15
|
+
* Priority: ~/.config/opencode/opencode.json
|
|
16
|
+
*/
|
|
17
|
+
export declare function getOpenCodeConfigPath(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Check if OpenCode settings file exists
|
|
20
|
+
*/
|
|
21
|
+
export declare function opencodeSettingsExists(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Read current OpenCode settings
|
|
24
|
+
*/
|
|
25
|
+
export declare function readOpenCodeSettings(): Promise<OpenCodeSettings>;
|
|
26
|
+
/**
|
|
27
|
+
* Write OpenCode settings with backup
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeOpenCodeSettings(settings: OpenCodeSettings): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Configure OpenCode for Alibaba Coding Plan
|
|
32
|
+
* Writes the full provider configuration with all models
|
|
33
|
+
*/
|
|
34
|
+
export declare function configureAlibaba(apiKey: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Configure OpenCode for Anthropic (default)
|
|
37
|
+
* Removes bailian-coding-plan provider to use native Anthropic
|
|
38
|
+
*/
|
|
39
|
+
export declare function configureAnthropic(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Configure OpenCode for GLM/Z.AI
|
|
42
|
+
* Auth is managed by coding-helper — reads baseURL and apiKey from Claude settings
|
|
43
|
+
*/
|
|
44
|
+
export declare function configureGLM(baseURL: string, apiKey: string): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Configure OpenCode for OpenRouter
|
|
47
|
+
* Writes the openrouter provider with available models
|
|
48
|
+
*/
|
|
49
|
+
export declare function configureOpenRouter(apiKey: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Configure OpenCode for Ollama (via LiteLLM proxy on port 4000)
|
|
52
|
+
*/
|
|
53
|
+
export declare function configureOllama(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Configure OpenCode for Gemini (via LiteLLM proxy on port 4001)
|
|
56
|
+
*/
|
|
57
|
+
export declare function configureGemini(apiKey: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Remove a specific provider from OpenCode settings
|
|
60
|
+
* Only removes the named provider, preserving others
|
|
61
|
+
*/
|
|
62
|
+
export declare function removeProvider(providerKey: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Get current provider from OpenCode settings
|
|
65
|
+
*/
|
|
66
|
+
export declare function getCurrentProvider(): Promise<{
|
|
67
|
+
provider: string;
|
|
68
|
+
model?: string;
|
|
69
|
+
endpoint?: string;
|
|
70
|
+
} | null>;
|
|
71
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/clients/opencode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAStE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAerF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JpE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCxD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGjF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CvE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DrD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDnE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAavE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,CAgDR"}
|