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.
Files changed (83) hide show
  1. package/AGENTS.md +265 -0
  2. package/ARCHITECTURE.md +162 -0
  3. package/CLAUDE.md +267 -0
  4. package/LICENSE +21 -0
  5. package/QWEN.md +429 -0
  6. package/README.md +833 -0
  7. package/dist/clients/claude-code.d.ts +92 -0
  8. package/dist/clients/claude-code.d.ts.map +1 -0
  9. package/dist/clients/claude-code.js +312 -0
  10. package/dist/clients/claude-code.js.map +1 -0
  11. package/dist/clients/opencode.d.ts +71 -0
  12. package/dist/clients/opencode.d.ts.map +1 -0
  13. package/dist/clients/opencode.js +604 -0
  14. package/dist/clients/opencode.js.map +1 -0
  15. package/dist/config.d.ts +37 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +122 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/display.d.ts +51 -0
  20. package/dist/display.d.ts.map +1 -0
  21. package/dist/display.js +118 -0
  22. package/dist/display.js.map +1 -0
  23. package/dist/hooks/index.d.ts +60 -0
  24. package/dist/hooks/index.d.ts.map +1 -0
  25. package/dist/hooks/index.js +223 -0
  26. package/dist/hooks/index.js.map +1 -0
  27. package/dist/hooks/token-tracker.js +280 -0
  28. package/dist/hooks/visual-enhancements.js +364 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +1091 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/models.d.ts +34 -0
  34. package/dist/models.d.ts.map +1 -0
  35. package/dist/models.js +343 -0
  36. package/dist/models.js.map +1 -0
  37. package/dist/providers/alibaba.d.ts +25 -0
  38. package/dist/providers/alibaba.d.ts.map +1 -0
  39. package/dist/providers/alibaba.js +37 -0
  40. package/dist/providers/alibaba.js.map +1 -0
  41. package/dist/providers/anthropic.d.ts +14 -0
  42. package/dist/providers/anthropic.d.ts.map +1 -0
  43. package/dist/providers/anthropic.js +19 -0
  44. package/dist/providers/anthropic.js.map +1 -0
  45. package/dist/providers/gemini.d.ts +44 -0
  46. package/dist/providers/gemini.d.ts.map +1 -0
  47. package/dist/providers/gemini.js +156 -0
  48. package/dist/providers/gemini.js.map +1 -0
  49. package/dist/providers/glm.d.ts +25 -0
  50. package/dist/providers/glm.d.ts.map +1 -0
  51. package/dist/providers/glm.js +89 -0
  52. package/dist/providers/glm.js.map +1 -0
  53. package/dist/providers/ollama.d.ts +48 -0
  54. package/dist/providers/ollama.d.ts.map +1 -0
  55. package/dist/providers/ollama.js +174 -0
  56. package/dist/providers/ollama.js.map +1 -0
  57. package/dist/providers/openrouter.d.ts +24 -0
  58. package/dist/providers/openrouter.d.ts.map +1 -0
  59. package/dist/providers/openrouter.js +36 -0
  60. package/dist/providers/openrouter.js.map +1 -0
  61. package/dist/verify.d.ts +24 -0
  62. package/dist/verify.d.ts.map +1 -0
  63. package/dist/verify.js +262 -0
  64. package/dist/verify.js.map +1 -0
  65. package/package.json +57 -0
  66. package/scripts/copy-hooks.js +15 -0
  67. package/src/clients/claude-code.ts +340 -0
  68. package/src/clients/opencode.ts +618 -0
  69. package/src/config.ts +101 -0
  70. package/src/display.ts +151 -0
  71. package/src/hooks/index.ts +208 -0
  72. package/src/hooks/token-tracker.js +280 -0
  73. package/src/hooks/visual-enhancements.js +364 -0
  74. package/src/index.ts +1263 -0
  75. package/src/models.ts +366 -0
  76. package/src/providers/alibaba.ts +43 -0
  77. package/src/providers/anthropic.ts +23 -0
  78. package/src/providers/gemini.ts +136 -0
  79. package/src/providers/glm.ts +60 -0
  80. package/src/providers/ollama.ts +146 -0
  81. package/src/providers/openrouter.ts +42 -0
  82. package/src/verify.ts +258 -0
  83. 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":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDH,oDAEC;AAKD,4CAEC;AAKD,gDAOC;AAKD,wCAOC;AAKD,kDAYC;AAKD,0CASC;AAMD,4DAIC;AAKD,4CAYC;AAMD,gDAmBC;AAMD,oCAcC;AAMD,kDAYC;AAKD,0CAYC;AAKD,0CAYC;AAKD,gDAqFC;AA7UD,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AAsBzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAE5D,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,8BAA8B;IACpC,MAAM,EAAE,gCAAgC;IACxC,KAAK,EAAE,+BAA+B;CAC9B,CAAC;AAEX,SAAS,YAAY,CAAC,QAAwB,EAAE,OAAqB;IACnE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,QAAwB;IAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,QAAwB;IAChE,0BAA0B;IAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAE/B,yCAAyC;IACzC,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,GAAG,aAAa,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3D,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAqB;IACrB,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,MAAkB;IACtD,oCAAoC;IACpC,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,WAAW,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB;IACnB,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,wBAAwB;IAC5C,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAE,OAAqB;IACzF,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,2DAA2D,CAAC;IACjG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAExC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,kBAAkB;IACtC,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,yBAAyB;IACzB,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,+CAA+C;IAC/C,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAa,EAAE,OAAqB;IAC5F,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,8BAA8B,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAExC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,OAAqB;IACxE,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,uBAAuB,CAAC;IAC7D,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAExC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,OAAqB;IACxF,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,uBAAuB,CAAC;IAC7D,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAExC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB;IAMtC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,iCAAiC;IACjC,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,oCAAoC,CAAC,EAAE,CAAC;QACzF,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC5C,OAAO;SACR,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpE,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC5C,OAAO;SACR,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC5C,OAAO;SACR,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC5C,OAAO;SACR,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK;YACnD,OAAO;SACR,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC5C,OAAO;SACR,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3D,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC"}
@@ -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"}