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 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,eAAe,8BAAmB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAO5E;AAED,wBAAgB,kBAAkB,gCAEjC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,yCAExC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAavE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,MAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAYhG;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B/C"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Gemini Provider Configuration
|
|
4
|
+
*
|
|
5
|
+
* Uses Google Gemini models via a LiteLLM proxy for Anthropic API compatibility.
|
|
6
|
+
* Gemini only speaks OpenAI format, so LiteLLM translates Anthropic Messages API
|
|
7
|
+
* requests into OpenAI Chat Completions format.
|
|
8
|
+
*
|
|
9
|
+
* Prerequisites:
|
|
10
|
+
* - LiteLLM installed (pip install 'litellm[proxy]')
|
|
11
|
+
* - Google API key from https://aistudio.google.com/apikey
|
|
12
|
+
* - LiteLLM proxy running on port 4001
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.GEMINI_LITELLM_PORT = exports.GEMINI_ENDPOINT = exports.GEMINI_PROVIDER = void 0;
|
|
49
|
+
exports.getGeminiConfig = getGeminiConfig;
|
|
50
|
+
exports.getAvailableModels = getAvailableModels;
|
|
51
|
+
exports.findModel = findModel;
|
|
52
|
+
exports.isLitellmInstalled = isLitellmInstalled;
|
|
53
|
+
exports.isGeminiKeyValid = isGeminiKeyValid;
|
|
54
|
+
exports.isLitellmProxyRunning = isLitellmProxyRunning;
|
|
55
|
+
exports.startGeminiLitellmProxy = startGeminiLitellmProxy;
|
|
56
|
+
const models_1 = require("../models");
|
|
57
|
+
exports.GEMINI_PROVIDER = models_1.providers.gemini;
|
|
58
|
+
exports.GEMINI_ENDPOINT = "http://localhost:4001";
|
|
59
|
+
exports.GEMINI_LITELLM_PORT = 4001;
|
|
60
|
+
function getGeminiConfig(apiKey, model) {
|
|
61
|
+
return {
|
|
62
|
+
provider: "gemini",
|
|
63
|
+
apiKey,
|
|
64
|
+
model: model || "gemini-2.5-pro",
|
|
65
|
+
endpoint: exports.GEMINI_ENDPOINT
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function getAvailableModels() {
|
|
69
|
+
return models_1.geminiModels;
|
|
70
|
+
}
|
|
71
|
+
function findModel(modelId) {
|
|
72
|
+
return models_1.geminiModels.find(m => m.id === modelId);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if litellm is installed
|
|
76
|
+
*/
|
|
77
|
+
async function isLitellmInstalled() {
|
|
78
|
+
try {
|
|
79
|
+
const { platform } = await Promise.resolve().then(() => __importStar(require("os")));
|
|
80
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
81
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require("util")));
|
|
82
|
+
const execAsync = promisify(exec);
|
|
83
|
+
const cmd = platform() === "win32" ? "where litellm" : "which litellm";
|
|
84
|
+
await execAsync(cmd);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate a Gemini API key by hitting the models endpoint
|
|
93
|
+
*/
|
|
94
|
+
async function isGeminiKeyValid(apiKey) {
|
|
95
|
+
try {
|
|
96
|
+
const controller = new AbortController();
|
|
97
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
98
|
+
const resp = await fetch("https://generativelanguage.googleapis.com/v1beta/models", { signal: controller.signal, headers: { "x-goog-api-key": apiKey } });
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
return resp.ok;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if LiteLLM proxy is running on the Gemini port
|
|
108
|
+
*/
|
|
109
|
+
async function isLitellmProxyRunning(port = exports.GEMINI_LITELLM_PORT) {
|
|
110
|
+
try {
|
|
111
|
+
const controller = new AbortController();
|
|
112
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
113
|
+
const resp = await fetch(`http://localhost:${port}/health`, {
|
|
114
|
+
signal: controller.signal
|
|
115
|
+
});
|
|
116
|
+
clearTimeout(timeout);
|
|
117
|
+
return resp.ok;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Start LiteLLM proxy for Gemini as a detached background process
|
|
125
|
+
*/
|
|
126
|
+
async function startGeminiLitellmProxy(apiKey, model, port = exports.GEMINI_LITELLM_PORT) {
|
|
127
|
+
try {
|
|
128
|
+
// Already running?
|
|
129
|
+
if (await isLitellmProxyRunning(port)) {
|
|
130
|
+
return { success: true };
|
|
131
|
+
}
|
|
132
|
+
const { spawn } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
133
|
+
const child = spawn("litellm", ["--model", `gemini/${model}`, "--port", String(port)], {
|
|
134
|
+
detached: true,
|
|
135
|
+
stdio: "ignore",
|
|
136
|
+
shell: true,
|
|
137
|
+
env: { ...process.env, GEMINI_API_KEY: apiKey }
|
|
138
|
+
});
|
|
139
|
+
child.unref();
|
|
140
|
+
// Poll health endpoint for up to 5 seconds
|
|
141
|
+
for (let i = 0; i < 10; i++) {
|
|
142
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
143
|
+
if (await isLitellmProxyRunning(port)) {
|
|
144
|
+
return { success: true };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { success: false, error: "LiteLLM proxy did not start within 5 seconds" };
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: error instanceof Error ? error.message : "Failed to start LiteLLM proxy"
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM/Z.AI Provider Configuration
|
|
3
|
+
*
|
|
4
|
+
* Uses coding-helper to manage GLM Coding Plan settings.
|
|
5
|
+
* This provider delegates to the @z_ai/coding-helper package.
|
|
6
|
+
*/
|
|
7
|
+
export declare const GLM_PROVIDER: import("../models").Provider;
|
|
8
|
+
export interface GLMConfig {
|
|
9
|
+
provider: "glm";
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function getGLMConfig(): GLMConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Check if coding-helper is installed
|
|
16
|
+
*/
|
|
17
|
+
export declare function isCodingHelperInstalled(): Promise<boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Reload GLM configuration into Claude Code using coding-helper
|
|
20
|
+
*/
|
|
21
|
+
export declare function reloadGLMConfig(): Promise<{
|
|
22
|
+
success: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=glm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glm.d.ts","sourceRoot":"","sources":["../../src/providers/glm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,YAAY,8BAAgB,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,IAAI,SAAS,CAKxC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYhE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAcrF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GLM/Z.AI Provider Configuration
|
|
4
|
+
*
|
|
5
|
+
* Uses coding-helper to manage GLM Coding Plan settings.
|
|
6
|
+
* This provider delegates to the @z_ai/coding-helper package.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.GLM_PROVIDER = void 0;
|
|
43
|
+
exports.getGLMConfig = getGLMConfig;
|
|
44
|
+
exports.isCodingHelperInstalled = isCodingHelperInstalled;
|
|
45
|
+
exports.reloadGLMConfig = reloadGLMConfig;
|
|
46
|
+
const os_1 = require("os");
|
|
47
|
+
const models_1 = require("../models");
|
|
48
|
+
exports.GLM_PROVIDER = models_1.providers.glm;
|
|
49
|
+
function getGLMConfig() {
|
|
50
|
+
return {
|
|
51
|
+
provider: "glm",
|
|
52
|
+
model: process.env.ZHIPUAI_MODEL || process.env.ZAI_MODEL || "glm-5.1"
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if coding-helper is installed
|
|
57
|
+
*/
|
|
58
|
+
async function isCodingHelperInstalled() {
|
|
59
|
+
try {
|
|
60
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
61
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require("util")));
|
|
62
|
+
const execAsync = promisify(exec);
|
|
63
|
+
const checkCommand = (0, os_1.platform)() === "win32" ? "where coding-helper" : "which coding-helper";
|
|
64
|
+
await execAsync(checkCommand);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Reload GLM configuration into Claude Code using coding-helper
|
|
73
|
+
*/
|
|
74
|
+
async function reloadGLMConfig() {
|
|
75
|
+
try {
|
|
76
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
77
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require("util")));
|
|
78
|
+
const execAsync = promisify(exec);
|
|
79
|
+
await execAsync("coding-helper auth reload claude");
|
|
80
|
+
return { success: true };
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return {
|
|
84
|
+
success: false,
|
|
85
|
+
error: error instanceof Error ? error.message : "Failed to reload GLM config"
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=glm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glm.js","sourceRoot":"","sources":["../../src/providers/glm.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,oCAKC;AAKD,0DAYC;AAKD,0CAcC;AApDD,2BAA8B;AAC9B,sCAAiD;AAEpC,QAAA,YAAY,GAAG,kBAAS,CAAC,GAAG,CAAC;AAQ1C,SAAgB,YAAY;IAC1B,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS;KACvE,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG,IAAA,aAAQ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC5F,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,SAAS,CAAC,kCAAkC,CAAC,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;SAC9E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Provider Configuration
|
|
3
|
+
*
|
|
4
|
+
* Uses local Ollama models via a LiteLLM proxy for Anthropic API compatibility.
|
|
5
|
+
* Ollama only speaks OpenAI format, so LiteLLM translates Anthropic Messages API
|
|
6
|
+
* requests into OpenAI Chat Completions format.
|
|
7
|
+
*
|
|
8
|
+
* Prerequisites:
|
|
9
|
+
* - Ollama installed and running on port 11434
|
|
10
|
+
* - LiteLLM installed (pip install 'litellm[proxy]')
|
|
11
|
+
* - LiteLLM proxy running on port 4000
|
|
12
|
+
*/
|
|
13
|
+
export declare const OLLAMA_PROVIDER: import("../models").Provider;
|
|
14
|
+
export interface OllamaConfig {
|
|
15
|
+
provider: "ollama";
|
|
16
|
+
model: string;
|
|
17
|
+
endpoint: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const OLLAMA_ENDPOINT = "http://localhost:4000";
|
|
20
|
+
export declare const OLLAMA_LITELLM_PORT = 4000;
|
|
21
|
+
export declare const OLLAMA_PORT = 11434;
|
|
22
|
+
export declare function getOllamaConfig(model?: string): OllamaConfig;
|
|
23
|
+
export declare function getAvailableModels(): import("../models").Model[];
|
|
24
|
+
export declare function findModel(modelId: string): import("../models").Model | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Check if litellm is installed
|
|
27
|
+
*/
|
|
28
|
+
export declare function isLitellmInstalled(): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if ollama is installed
|
|
31
|
+
*/
|
|
32
|
+
export declare function isOllamaInstalled(): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if Ollama is running on port 11434
|
|
35
|
+
*/
|
|
36
|
+
export declare function isOllamaRunning(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if LiteLLM proxy is running on a given port
|
|
39
|
+
*/
|
|
40
|
+
export declare function isLitellmProxyRunning(port?: number): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Start LiteLLM proxy for Ollama as a detached background process
|
|
43
|
+
*/
|
|
44
|
+
export declare function startLitellmProxy(model: string, port?: number): Promise<{
|
|
45
|
+
success: boolean;
|
|
46
|
+
error?: string;
|
|
47
|
+
}>;
|
|
48
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,eAAO,MAAM,eAAe,8BAAmB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,WAAW,QAAQ,CAAC;AAEjC,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAM5D;AAED,wBAAgB,kBAAkB,gCAEjC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,yCAExC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAY3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAY1D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAYxD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,MAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAYhG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAA4B,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BxI"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ollama Provider Configuration
|
|
4
|
+
*
|
|
5
|
+
* Uses local Ollama models via a LiteLLM proxy for Anthropic API compatibility.
|
|
6
|
+
* Ollama only speaks OpenAI format, so LiteLLM translates Anthropic Messages API
|
|
7
|
+
* requests into OpenAI Chat Completions format.
|
|
8
|
+
*
|
|
9
|
+
* Prerequisites:
|
|
10
|
+
* - Ollama installed and running on port 11434
|
|
11
|
+
* - LiteLLM installed (pip install 'litellm[proxy]')
|
|
12
|
+
* - LiteLLM proxy running on port 4000
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.OLLAMA_PORT = exports.OLLAMA_LITELLM_PORT = exports.OLLAMA_ENDPOINT = exports.OLLAMA_PROVIDER = void 0;
|
|
49
|
+
exports.getOllamaConfig = getOllamaConfig;
|
|
50
|
+
exports.getAvailableModels = getAvailableModels;
|
|
51
|
+
exports.findModel = findModel;
|
|
52
|
+
exports.isLitellmInstalled = isLitellmInstalled;
|
|
53
|
+
exports.isOllamaInstalled = isOllamaInstalled;
|
|
54
|
+
exports.isOllamaRunning = isOllamaRunning;
|
|
55
|
+
exports.isLitellmProxyRunning = isLitellmProxyRunning;
|
|
56
|
+
exports.startLitellmProxy = startLitellmProxy;
|
|
57
|
+
const os_1 = require("os");
|
|
58
|
+
const models_1 = require("../models");
|
|
59
|
+
exports.OLLAMA_PROVIDER = models_1.providers.ollama;
|
|
60
|
+
exports.OLLAMA_ENDPOINT = "http://localhost:4000";
|
|
61
|
+
exports.OLLAMA_LITELLM_PORT = 4000;
|
|
62
|
+
exports.OLLAMA_PORT = 11434;
|
|
63
|
+
function getOllamaConfig(model) {
|
|
64
|
+
return {
|
|
65
|
+
provider: "ollama",
|
|
66
|
+
model: model || "deepseek-r1:latest",
|
|
67
|
+
endpoint: exports.OLLAMA_ENDPOINT
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function getAvailableModels() {
|
|
71
|
+
return models_1.ollamaModels;
|
|
72
|
+
}
|
|
73
|
+
function findModel(modelId) {
|
|
74
|
+
return models_1.ollamaModels.find(m => m.id === modelId);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if litellm is installed
|
|
78
|
+
*/
|
|
79
|
+
async function isLitellmInstalled() {
|
|
80
|
+
try {
|
|
81
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
82
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require("util")));
|
|
83
|
+
const execAsync = promisify(exec);
|
|
84
|
+
const cmd = (0, os_1.platform)() === "win32" ? "where litellm" : "which litellm";
|
|
85
|
+
await execAsync(cmd);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if ollama is installed
|
|
94
|
+
*/
|
|
95
|
+
async function isOllamaInstalled() {
|
|
96
|
+
try {
|
|
97
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
98
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require("util")));
|
|
99
|
+
const execAsync = promisify(exec);
|
|
100
|
+
const cmd = (0, os_1.platform)() === "win32" ? "where ollama" : "which ollama";
|
|
101
|
+
await execAsync(cmd);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if Ollama is running on port 11434
|
|
110
|
+
*/
|
|
111
|
+
async function isOllamaRunning() {
|
|
112
|
+
try {
|
|
113
|
+
const controller = new AbortController();
|
|
114
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
115
|
+
const resp = await fetch(`http://localhost:${exports.OLLAMA_PORT}/api/tags`, {
|
|
116
|
+
signal: controller.signal
|
|
117
|
+
});
|
|
118
|
+
clearTimeout(timeout);
|
|
119
|
+
return resp.ok;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if LiteLLM proxy is running on a given port
|
|
127
|
+
*/
|
|
128
|
+
async function isLitellmProxyRunning(port = exports.OLLAMA_LITELLM_PORT) {
|
|
129
|
+
try {
|
|
130
|
+
const controller = new AbortController();
|
|
131
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
132
|
+
const resp = await fetch(`http://localhost:${port}/health`, {
|
|
133
|
+
signal: controller.signal
|
|
134
|
+
});
|
|
135
|
+
clearTimeout(timeout);
|
|
136
|
+
return resp.ok;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Start LiteLLM proxy for Ollama as a detached background process
|
|
144
|
+
*/
|
|
145
|
+
async function startLitellmProxy(model, port = exports.OLLAMA_LITELLM_PORT) {
|
|
146
|
+
try {
|
|
147
|
+
// Already running?
|
|
148
|
+
if (await isLitellmProxyRunning(port)) {
|
|
149
|
+
return { success: true };
|
|
150
|
+
}
|
|
151
|
+
const { spawn } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
152
|
+
const child = spawn("litellm", ["--model", `ollama/${model}`, "--port", String(port)], {
|
|
153
|
+
detached: true,
|
|
154
|
+
stdio: "ignore",
|
|
155
|
+
shell: false
|
|
156
|
+
});
|
|
157
|
+
child.unref();
|
|
158
|
+
// Poll health endpoint for up to 5 seconds
|
|
159
|
+
for (let i = 0; i < 10; i++) {
|
|
160
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
161
|
+
if (await isLitellmProxyRunning(port)) {
|
|
162
|
+
return { success: true };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return { success: false, error: "LiteLLM proxy did not start within 5 seconds" };
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return {
|
|
169
|
+
success: false,
|
|
170
|
+
error: error instanceof Error ? error.message : "Failed to start LiteLLM proxy"
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Provider Configuration
|
|
3
|
+
*
|
|
4
|
+
* Configures Claude Code and OpenCode to use OpenRouter
|
|
5
|
+
* with models like Qwen3.6 Plus and OpenRouter Free via Anthropic-compatible API.
|
|
6
|
+
*/
|
|
7
|
+
export declare const OPENROUTER_PROVIDER: import("../models").Provider;
|
|
8
|
+
export interface OpenRouterConfig {
|
|
9
|
+
provider: "openrouter";
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model: string;
|
|
12
|
+
endpoint: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const OPENROUTER_ENDPOINT = "https://openrouter.ai/api/v1";
|
|
15
|
+
export declare function getOpenRouterConfig(apiKey: string, model?: string): OpenRouterConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Get available OpenRouter models
|
|
18
|
+
*/
|
|
19
|
+
export declare function getAvailableModels(): import("../models").Model[];
|
|
20
|
+
/**
|
|
21
|
+
* Find a model by ID
|
|
22
|
+
*/
|
|
23
|
+
export declare function findModel(modelId: string): import("../models").Model | undefined;
|
|
24
|
+
//# sourceMappingURL=openrouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,mBAAmB,8BAAuB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAOpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,gCAEjC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,yCAExC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenRouter Provider Configuration
|
|
4
|
+
*
|
|
5
|
+
* Configures Claude Code and OpenCode to use OpenRouter
|
|
6
|
+
* with models like Qwen3.6 Plus and OpenRouter Free via Anthropic-compatible API.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OPENROUTER_ENDPOINT = exports.OPENROUTER_PROVIDER = void 0;
|
|
10
|
+
exports.getOpenRouterConfig = getOpenRouterConfig;
|
|
11
|
+
exports.getAvailableModels = getAvailableModels;
|
|
12
|
+
exports.findModel = findModel;
|
|
13
|
+
const models_1 = require("../models");
|
|
14
|
+
exports.OPENROUTER_PROVIDER = models_1.providers.openrouter;
|
|
15
|
+
exports.OPENROUTER_ENDPOINT = "https://openrouter.ai/api/v1";
|
|
16
|
+
function getOpenRouterConfig(apiKey, model) {
|
|
17
|
+
return {
|
|
18
|
+
provider: "openrouter",
|
|
19
|
+
apiKey,
|
|
20
|
+
model: model || "qwen/qwen3.6-plus:free",
|
|
21
|
+
endpoint: exports.OPENROUTER_ENDPOINT
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get available OpenRouter models
|
|
26
|
+
*/
|
|
27
|
+
function getAvailableModels() {
|
|
28
|
+
return models_1.openrouterModels;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Find a model by ID
|
|
32
|
+
*/
|
|
33
|
+
function findModel(modelId) {
|
|
34
|
+
return models_1.openrouterModels.find(m => m.id === modelId);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAeH,kDAOC;AAKD,gDAEC;AAKD,8BAEC;AAlCD,sCAAwD;AAE3C,QAAA,mBAAmB,GAAG,kBAAS,CAAC,UAAU,CAAC;AAS3C,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,SAAgB,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,wBAAwB;QACxC,QAAQ,EAAE,2BAAmB;KAC9B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,OAAO,yBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,yBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Verification
|
|
3
|
+
*
|
|
4
|
+
* Makes lightweight requests to each provider's API to verify keys are valid.
|
|
5
|
+
*/
|
|
6
|
+
export interface VerifyResult {
|
|
7
|
+
provider: string;
|
|
8
|
+
status: "ok" | "invalid" | "missing" | "error" | "skipped";
|
|
9
|
+
message?: string;
|
|
10
|
+
}
|
|
11
|
+
declare function maskKey(key: string): string;
|
|
12
|
+
export { maskKey };
|
|
13
|
+
/**
|
|
14
|
+
* Verify all configured API keys in parallel.
|
|
15
|
+
*/
|
|
16
|
+
export declare function verifyAllKeys(keys: {
|
|
17
|
+
alibaba?: string;
|
|
18
|
+
openrouter?: string;
|
|
19
|
+
anthropic?: string;
|
|
20
|
+
checkGLM?: boolean;
|
|
21
|
+
checkOllama?: boolean;
|
|
22
|
+
gemini?: string;
|
|
23
|
+
}): Promise<VerifyResult[]>;
|
|
24
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iBAAS,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGpC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AA+HnB;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwC1B"}
|