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 @@
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":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBH,0CAOC;AAED,gDAEC;AAED,8BAEC;AAKD,gDAaC;AAKD,4CAaC;AAKD,sDAYC;AAKD,0DAmCC;AA1HD,sCAAoD;AAEvC,QAAA,eAAe,GAAG,kBAAS,CAAC,MAAM,CAAC;AASnC,QAAA,eAAe,GAAG,uBAAuB,CAAC;AAC1C,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAExC,SAAgB,eAAe,CAAC,MAAc,EAAE,KAAc;IAC5D,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,gBAAgB;QAChC,QAAQ,EAAE,uBAAe;KAC1B,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,qBAAY,CAAC;AACtB,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,qBAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;QACxC,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,GAAG,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;QACvE,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB,yDAAyD,EACzD,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,CACrE,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,OAAe,2BAAmB;IAC5E,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,EAAE;YAC1D,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAc,EACd,KAAa,EACb,OAAe,2BAAmB;IAElC,IAAI,CAAC;QACH,mBAAmB;QACnB,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;YACrF,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE;SAChD,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,2CAA2C;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;IACnF,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,+BAA+B;SAChF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -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"}
@@ -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"}