@wengine-ai/claude-code-router 2.0.54 → 2.0.56

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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/dist/README.md +763 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +1193 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.html +225 -0
  7. package/dist/index.js +1539 -0
  8. package/dist/package.json +31 -0
  9. package/dist/tiktoken_bg.wasm +0 -0
  10. package/dist/utils/activateCommand.d.ts +4 -0
  11. package/dist/utils/activateCommand.js +24 -0
  12. package/dist/utils/activateCommand.js.map +1 -0
  13. package/dist/utils/claudeSettings.d.ts +12 -0
  14. package/dist/utils/claudeSettings.js +188 -0
  15. package/dist/utils/claudeSettings.js.map +1 -0
  16. package/dist/utils/codeCommand.d.ts +13 -0
  17. package/dist/utils/codeCommand.js +88 -0
  18. package/dist/utils/codeCommand.js.map +1 -0
  19. package/dist/utils/createEnvVariables.d.ts +5 -0
  20. package/dist/utils/createEnvVariables.js +83 -0
  21. package/dist/utils/createEnvVariables.js.map +1 -0
  22. package/dist/utils/index.d.ts +15 -0
  23. package/dist/utils/index.js +271 -0
  24. package/dist/utils/index.js.map +1 -0
  25. package/dist/utils/installCommand.d.ts +9 -0
  26. package/dist/utils/installCommand.js +47 -0
  27. package/dist/utils/installCommand.js.map +1 -0
  28. package/dist/utils/modelSelector.d.ts +1 -0
  29. package/dist/utils/modelSelector.js +402 -0
  30. package/dist/utils/modelSelector.js.map +1 -0
  31. package/dist/utils/preset/commands.d.ts +8 -0
  32. package/dist/utils/preset/commands.js +267 -0
  33. package/dist/utils/preset/commands.js.map +1 -0
  34. package/dist/utils/preset/export.d.ts +11 -0
  35. package/dist/utils/preset/export.js +97 -0
  36. package/dist/utils/preset/export.js.map +1 -0
  37. package/dist/utils/preset/index.d.ts +8 -0
  38. package/dist/utils/preset/index.js +32 -0
  39. package/dist/utils/preset/index.js.map +1 -0
  40. package/dist/utils/preset/install-github.d.ts +13 -0
  41. package/dist/utils/preset/install-github.js +161 -0
  42. package/dist/utils/preset/install-github.js.map +1 -0
  43. package/dist/utils/preset/install.d.ts +19 -0
  44. package/dist/utils/preset/install.js +239 -0
  45. package/dist/utils/preset/install.js.map +1 -0
  46. package/dist/utils/processCheck.d.ts +17 -0
  47. package/dist/utils/processCheck.js +161 -0
  48. package/dist/utils/processCheck.js.map +1 -0
  49. package/dist/utils/prompt/schema-input.d.ts +26 -0
  50. package/dist/utils/prompt/schema-input.js +183 -0
  51. package/dist/utils/prompt/schema-input.js.map +1 -0
  52. package/dist/utils/status.d.ts +1 -0
  53. package/dist/utils/status.js +28 -0
  54. package/dist/utils/status.js.map +1 -0
  55. package/dist/utils/statusline.d.ts +61 -0
  56. package/dist/utils/statusline.js +924 -0
  57. package/dist/utils/statusline.js.map +1 -0
  58. package/dist/utils/update.d.ts +18 -0
  59. package/dist/utils/update.js +74 -0
  60. package/dist/utils/update.js.map +1 -0
  61. package/package.json +25 -4
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ /**
3
+ * Preset installation functionality CLI layer
4
+ * Handles CLI interactions, core logic is in the shared package
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.loadPreset = void 0;
41
+ exports.applyPresetCli = applyPresetCli;
42
+ exports.installPresetCli = installPresetCli;
43
+ const fs = __importStar(require("fs/promises"));
44
+ const path = __importStar(require("path"));
45
+ const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
46
+ Object.defineProperty(exports, "loadPreset", { enumerable: true, get: function () { return claude_code_router_shared_1.loadPreset; } });
47
+ const schema_input_1 = require("../prompt/schema-input");
48
+ // ANSI color codes
49
+ const RESET = "\x1B[0m";
50
+ const GREEN = "\x1B[32m";
51
+ const BOLDGREEN = "\x1B[1m\x1B[32m";
52
+ const YELLOW = "\x1B[33m";
53
+ const BOLDYELLOW = "\x1B[1m\x1B[33m";
54
+ const BOLDCYAN = "\x1B[1m\x1B[36m";
55
+ const DIM = "\x1B[2m";
56
+ /**
57
+ * Apply preset to configuration
58
+ * @param presetName Preset name
59
+ * @param preset Preset object
60
+ */
61
+ async function applyPresetCli(presetName, preset) {
62
+ try {
63
+ console.log(`${BOLDCYAN}Loading preset...${RESET} ${GREEN}✓${RESET}`);
64
+ // Validate preset
65
+ const validation = await (0, claude_code_router_shared_1.validatePreset)(preset);
66
+ if (validation.warnings.length > 0) {
67
+ console.log(`\n${YELLOW}Warnings:${RESET}`);
68
+ for (const warning of validation.warnings) {
69
+ console.log(` ${DIM}⚠${RESET} ${warning}`);
70
+ }
71
+ }
72
+ if (!validation.valid) {
73
+ console.log(`\n${YELLOW}Validation errors:${RESET}`);
74
+ for (const error of validation.errors) {
75
+ console.log(`${YELLOW}✗${RESET} ${error}`);
76
+ }
77
+ throw new Error('Invalid preset file');
78
+ }
79
+ console.log(`${BOLDCYAN}Validating preset...${RESET} ${GREEN}✓${RESET}`);
80
+ // Check if configuration is required
81
+ if (preset.schema && preset.schema.length > 0) {
82
+ console.log(`\n${BOLDCYAN}Configuration required:${RESET} ${preset.schema.length} field(s)\n`);
83
+ }
84
+ else {
85
+ console.log(`\n${DIM}No configuration required for this preset${RESET}\n`);
86
+ }
87
+ // Collect user inputs
88
+ let userInputs = {};
89
+ // Use schema system
90
+ if (preset.schema && preset.schema.length > 0) {
91
+ userInputs = await (0, schema_input_1.collectUserInputs)(preset.schema, preset.config);
92
+ }
93
+ // Read existing manifest to preserve fields like repository, source, etc.
94
+ const presetDir = (0, claude_code_router_shared_1.getPresetDir)(presetName);
95
+ let existingManifest = null;
96
+ try {
97
+ existingManifest = await (0, claude_code_router_shared_1.readManifestFromDir)(presetDir);
98
+ }
99
+ catch {
100
+ // Manifest doesn't exist yet, this is a new installation
101
+ }
102
+ // Build manifest, preserve existing fields
103
+ const manifest = {
104
+ name: presetName,
105
+ version: preset.metadata?.version || '1.0.0',
106
+ ...(preset.metadata || {}),
107
+ ...preset.config, // Keep original config (may contain placeholders)
108
+ };
109
+ // Preserve fields from existing manifest (repository, source, etc.)
110
+ if (existingManifest) {
111
+ if (existingManifest.repository) {
112
+ manifest.repository = existingManifest.repository;
113
+ }
114
+ if (existingManifest.source) {
115
+ manifest.source = existingManifest.source;
116
+ }
117
+ if (existingManifest.sourceType) {
118
+ manifest.sourceType = existingManifest.sourceType;
119
+ }
120
+ if (existingManifest.checksum) {
121
+ manifest.checksum = existingManifest.checksum;
122
+ }
123
+ }
124
+ // Save schema (if exists)
125
+ if (preset.schema) {
126
+ manifest.schema = preset.schema;
127
+ }
128
+ // Save other configurations
129
+ if (preset.template) {
130
+ manifest.template = preset.template;
131
+ }
132
+ if (preset.configMappings) {
133
+ manifest.configMappings = preset.configMappings;
134
+ }
135
+ // Save user-filled values to userValues
136
+ if (Object.keys(userInputs).length > 0) {
137
+ manifest.userValues = userInputs;
138
+ }
139
+ // Save to manifest.json in extracted directory
140
+ await (0, claude_code_router_shared_1.saveManifest)(presetName, manifest);
141
+ // Display summary
142
+ console.log(`\n${BOLDGREEN}✓ Preset configured successfully!${RESET}\n`);
143
+ console.log(`${BOLDCYAN}Preset directory:${RESET} ${presetDir}`);
144
+ console.log(`${BOLDCYAN}Inputs configured:${RESET} ${Object.keys(userInputs).length}`);
145
+ if (preset.metadata?.description) {
146
+ console.log(`\n${BOLDCYAN}Description:${RESET} ${preset.metadata.description}`);
147
+ }
148
+ if (preset.metadata?.author) {
149
+ console.log(`${BOLDCYAN}Author:${RESET} ${preset.metadata.author}`);
150
+ }
151
+ const keywords = preset.metadata.keywords;
152
+ if (keywords && keywords.length > 0) {
153
+ console.log(`${BOLDCYAN}Keywords:${RESET} ${keywords.join(', ')}`);
154
+ }
155
+ console.log(`\n${GREEN}Use this preset:${RESET} ccr ${presetName} "your prompt"`);
156
+ console.log(`${DIM}Note: Configuration is stored in the manifest file${RESET}\n`);
157
+ }
158
+ catch (error) {
159
+ console.error(`\n${YELLOW}Error applying preset:${RESET} ${error.message}`);
160
+ throw error;
161
+ }
162
+ }
163
+ /**
164
+ * Install preset (main entry point)
165
+ */
166
+ async function installPresetCli(source, options = {}) {
167
+ try {
168
+ // Determine preset name
169
+ let presetName = options.name;
170
+ let sourceDir;
171
+ let isReconfigure = false; // Whether to reconfigure installed preset
172
+ // Determine source type and get directory path
173
+ if (source.startsWith('http://') || source.startsWith('https://')) {
174
+ // URL installation not supported
175
+ throw new Error('URL installation is not supported. Please download the preset directory and install from local path.');
176
+ }
177
+ else if (source.includes('/') || source.includes('\\')) {
178
+ // Directory path
179
+ if (!presetName) {
180
+ presetName = path.basename(source);
181
+ }
182
+ // Verify directory exists
183
+ try {
184
+ const stats = await fs.stat(source);
185
+ if (!stats.isDirectory()) {
186
+ throw new Error(`Source is not a directory: ${source}`);
187
+ }
188
+ }
189
+ catch {
190
+ throw new Error(`Preset directory not found: ${source}`);
191
+ }
192
+ sourceDir = source;
193
+ // Check if preset with this name already exists BEFORE installing
194
+ if (await (0, claude_code_router_shared_1.isPresetInstalled)(presetName)) {
195
+ throw new Error(`Preset '${presetName}' is already installed. To reconfigure, use: ccr preset install ${presetName}\nTo delete and reinstall, use: ccr preset delete ${presetName}`);
196
+ }
197
+ }
198
+ else {
199
+ // Preset name (without path)
200
+ presetName = source;
201
+ // Check if already installed (directory exists)
202
+ if (await (0, claude_code_router_shared_1.isPresetInstalled)(source)) {
203
+ // Already installed, reconfigure
204
+ isReconfigure = true;
205
+ }
206
+ else {
207
+ // Not found, error
208
+ throw new Error(`Preset '${source}' not found. Please provide a valid preset directory path.`);
209
+ }
210
+ }
211
+ if (isReconfigure) {
212
+ // Reconfigure installed preset
213
+ console.log(`${BOLDCYAN}Reconfiguring preset:${RESET} ${presetName}\n`);
214
+ const presetDir = (0, claude_code_router_shared_1.getPresetDir)(presetName);
215
+ const manifest = await (0, claude_code_router_shared_1.readManifestFromDir)(presetDir);
216
+ const preset = (0, claude_code_router_shared_1.manifestToPresetFile)(manifest);
217
+ // Apply preset (will ask for sensitive info)
218
+ await applyPresetCli(presetName, preset);
219
+ }
220
+ else {
221
+ // New installation: read from source directory
222
+ if (!sourceDir) {
223
+ throw new Error('Source directory is required for installation');
224
+ }
225
+ console.log(`${BOLDCYAN}Reading preset from:${RESET} ${sourceDir}`);
226
+ console.log(`${GREEN}✓${RESET} Read successfully\n`);
227
+ // Read manifest from source directory
228
+ const manifest = await (0, claude_code_router_shared_1.readManifestFromDir)(sourceDir);
229
+ const preset = (0, claude_code_router_shared_1.manifestToPresetFile)(manifest);
230
+ // Apply preset (ask user info, etc.)
231
+ await applyPresetCli(presetName, preset);
232
+ }
233
+ }
234
+ catch (error) {
235
+ console.error(`\n${YELLOW}Failed to install preset:${RESET} ${error.message}`);
236
+ process.exit(1);
237
+ }
238
+ }
239
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/utils/preset/install.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCH,wCAyHC;AAKD,4CAkFC;AAlPD,gDAAkC;AAClC,2CAA6B;AAC7B,qFAY+C;AAIlB,2FAfb,sCAAgB,OAeO;AAHvC,yDAA2D;AAK3D,mBAAmB;AACnB,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AACnC,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAkB;IAElB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,oBAAoB,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;QAEtE,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,IAAA,0CAAc,EAAC,MAAM,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,YAAY,KAAK,EAAE,CAAC,CAAC;YAC5C,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,qBAAqB,KAAK,EAAE,CAAC,CAAC;YACrD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;QAEzE,qCAAqC;QACrC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,0BAA0B,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,4CAA4C,KAAK,IAAI,CAAC,CAAC;QAC7E,CAAC;QAED,sBAAsB;QACtB,IAAI,UAAU,GAAoB,EAAE,CAAC;QAErC,oBAAoB;QACpB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,UAAU,GAAG,MAAM,IAAA,gCAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QAED,0EAA0E;QAC1E,MAAM,SAAS,GAAG,IAAA,wCAAY,EAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,gBAAgB,GAAwB,IAAI,CAAC;QAEjD,IAAI,CAAC;YACH,gBAAgB,GAAG,MAAM,IAAA,+CAAmB,EAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAiB;YAC7B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO;YAC5C,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC1B,GAAG,MAAM,CAAC,MAAM,EAAG,kDAAkD;SACtE,CAAC;QAEF,oEAAoE;QACpE,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC;gBAChC,QAAQ,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;YACpD,CAAC;YACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBAC5B,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;YAC5C,CAAC;YACD,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC;gBAChC,QAAQ,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;YACpD,CAAC;YACD,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBAC9B,QAAQ,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAChD,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACtC,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAClD,CAAC;QAED,wCAAwC;QACxC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,CAAC;QAED,+CAA+C;QAC/C,MAAM,IAAA,wCAAY,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEzC,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,oCAAoC,KAAK,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,oBAAoB,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,qBAAqB,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAEvF,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,eAAe,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,UAAU,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAI,MAAM,CAAC,QAAgB,CAAC,QAAQ,CAAC;QACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,YAAY,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,mBAAmB,KAAK,QAAQ,UAAU,gBAAgB,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,qDAAqD,KAAK,IAAI,CAAC,CAAC;IAEpF,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,yBAAyB,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,UAGI,EAAE;IAEN,IAAI,CAAC;QACH,wBAAwB;QACxB,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,SAA6B,CAAC;QAClC,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC,0CAA0C;QAErE,+CAA+C;QAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,iCAAiC;YACjC,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAC;QAC1H,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,iBAAiB;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,0BAA0B;YAC1B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,GAAG,MAAM,CAAC;YAEnB,kEAAkE;YAClE,IAAI,MAAM,IAAA,6CAAiB,EAAC,UAAU,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mEAAmE,UAAU,qDAAqD,UAAU,EAAE,CAAC,CAAC;YACvL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,UAAU,GAAG,MAAM,CAAC;YAEpB,gDAAgD;YAChD,IAAI,MAAM,IAAA,6CAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,iCAAiC;gBACjC,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,4DAA4D,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,+BAA+B;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,wBAAwB,KAAK,IAAI,UAAU,IAAI,CAAC,CAAC;YAExE,MAAM,SAAS,GAAG,IAAA,wCAAY,EAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,+CAAmB,EAAC,SAAS,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,IAAA,gDAAoB,EAAC,QAAQ,CAAC,CAAC;YAE9C,6CAA6C;YAC7C,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,uBAAuB,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,sBAAsB,CAAC,CAAC;YAErD,sCAAsC;YACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,+CAAmB,EAAC,SAAS,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,IAAA,gDAAoB,EAAC,QAAQ,CAAC,CAAC;YAE9C,qCAAqC;YACrC,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,4BAA4B,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare function isProcessRunning(pid: number): Promise<boolean>;
2
+ export declare function incrementReferenceCount(): void;
3
+ export declare function decrementReferenceCount(): void;
4
+ export declare function getReferenceCount(): number;
5
+ export declare function isServiceRunning(): boolean;
6
+ export declare function savePid(pid: number): void;
7
+ export declare function cleanupPidFile(): void;
8
+ export declare function getServicePid(): number | null;
9
+ export declare function getServiceInfo(): Promise<{
10
+ running: boolean;
11
+ pid: number | null;
12
+ port: any;
13
+ endpoint: string;
14
+ pidFile: string;
15
+ referenceCount: number;
16
+ }>;
17
+ export declare function closeService(): Promise<void>;
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isProcessRunning = isProcessRunning;
7
+ exports.incrementReferenceCount = incrementReferenceCount;
8
+ exports.decrementReferenceCount = decrementReferenceCount;
9
+ exports.getReferenceCount = getReferenceCount;
10
+ exports.isServiceRunning = isServiceRunning;
11
+ exports.savePid = savePid;
12
+ exports.cleanupPidFile = cleanupPidFile;
13
+ exports.getServicePid = getServicePid;
14
+ exports.getServiceInfo = getServiceInfo;
15
+ exports.closeService = closeService;
16
+ const fs_1 = require("fs");
17
+ const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
18
+ const _1 = require(".");
19
+ const find_process_1 = __importDefault(require("find-process"));
20
+ const child_process_1 = require("child_process"); // 引入 execSync 来执行命令行
21
+ async function isProcessRunning(pid) {
22
+ try {
23
+ const processes = await (0, find_process_1.default)('pid', pid);
24
+ return processes.length > 0;
25
+ }
26
+ catch (error) {
27
+ return false;
28
+ }
29
+ }
30
+ function incrementReferenceCount() {
31
+ let count = 0;
32
+ if ((0, fs_1.existsSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE)) {
33
+ count = parseInt((0, fs_1.readFileSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE, 'utf-8')) || 0;
34
+ }
35
+ count++;
36
+ (0, fs_1.writeFileSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE, count.toString());
37
+ }
38
+ function decrementReferenceCount() {
39
+ let count = 0;
40
+ if ((0, fs_1.existsSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE)) {
41
+ count = parseInt((0, fs_1.readFileSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE, 'utf-8')) || 0;
42
+ }
43
+ count = Math.max(0, count - 1);
44
+ (0, fs_1.writeFileSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE, count.toString());
45
+ }
46
+ function getReferenceCount() {
47
+ if (!(0, fs_1.existsSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE)) {
48
+ return 0;
49
+ }
50
+ return parseInt((0, fs_1.readFileSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE, 'utf-8')) || 0;
51
+ }
52
+ function isServiceRunning() {
53
+ if (!(0, fs_1.existsSync)(claude_code_router_shared_1.PID_FILE)) {
54
+ return false;
55
+ }
56
+ let pid;
57
+ try {
58
+ const pidStr = (0, fs_1.readFileSync)(claude_code_router_shared_1.PID_FILE, 'utf-8');
59
+ pid = parseInt(pidStr, 10);
60
+ if (isNaN(pid)) {
61
+ // PID 文件内容无效
62
+ cleanupPidFile();
63
+ return false;
64
+ }
65
+ }
66
+ catch (e) {
67
+ // 读取文件失败
68
+ return false;
69
+ }
70
+ try {
71
+ if (process.platform === 'win32') {
72
+ // --- Windows 平台逻辑 ---
73
+ // 使用 tasklist 命令并通过 PID 过滤器查找进程
74
+ // stdio: 'pipe' 压制命令的输出,防止其显示在控制台
75
+ const command = `tasklist /FI "PID eq ${pid}"`;
76
+ const output = (0, child_process_1.execSync)(command, { stdio: 'pipe' }).toString();
77
+ // 如果输出中包含了 PID,说明进程存在
78
+ // tasklist 找不到进程时会返回 "INFO: No tasks are running..."
79
+ // 所以一个简单的包含检查就足够了
80
+ if (output.includes(pid.toString())) {
81
+ return true;
82
+ }
83
+ else {
84
+ // 理论上如果 tasklist 成功执行但没找到,这里不会被命中
85
+ // 但作为保险,我们仍然认为进程不存在
86
+ cleanupPidFile();
87
+ return false;
88
+ }
89
+ }
90
+ else {
91
+ // --- Linux, macOS 等其他平台逻辑 ---
92
+ // 使用信号 0 来检查进程是否存在,这不会真的杀死进程
93
+ process.kill(pid, 0);
94
+ return true; // 如果没有抛出异常,说明进程存在
95
+ }
96
+ }
97
+ catch (e) {
98
+ // 捕获到异常,说明进程不存在 (无论是 kill 还是 execSync 失败)
99
+ // 清理掉无效的 PID 文件
100
+ cleanupPidFile();
101
+ return false;
102
+ }
103
+ }
104
+ function savePid(pid) {
105
+ (0, fs_1.writeFileSync)(claude_code_router_shared_1.PID_FILE, pid.toString());
106
+ }
107
+ function cleanupPidFile() {
108
+ if ((0, fs_1.existsSync)(claude_code_router_shared_1.PID_FILE)) {
109
+ try {
110
+ const fs = require('fs');
111
+ fs.unlinkSync(claude_code_router_shared_1.PID_FILE);
112
+ }
113
+ catch (e) {
114
+ // Ignore cleanup errors
115
+ }
116
+ }
117
+ }
118
+ function getServicePid() {
119
+ if (!(0, fs_1.existsSync)(claude_code_router_shared_1.PID_FILE)) {
120
+ return null;
121
+ }
122
+ try {
123
+ const pid = parseInt((0, fs_1.readFileSync)(claude_code_router_shared_1.PID_FILE, 'utf-8'));
124
+ return isNaN(pid) ? null : pid;
125
+ }
126
+ catch (e) {
127
+ return null;
128
+ }
129
+ }
130
+ async function getServiceInfo() {
131
+ const pid = getServicePid();
132
+ const running = await isServiceRunning();
133
+ const config = await (0, _1.readConfigFile)();
134
+ const port = config.PORT || 3456;
135
+ return {
136
+ running,
137
+ pid,
138
+ port,
139
+ endpoint: `http://127.0.0.1:${port}`,
140
+ pidFile: claude_code_router_shared_1.PID_FILE,
141
+ referenceCount: getReferenceCount()
142
+ };
143
+ }
144
+ async function closeService() {
145
+ // Check reference count
146
+ const referenceCount = getReferenceCount();
147
+ // Only stop the service if reference count is 0
148
+ if (referenceCount === 0) {
149
+ const pid = getServicePid();
150
+ if (pid && await isServiceRunning()) {
151
+ try {
152
+ // Kill the service process
153
+ process.kill(pid, 'SIGTERM');
154
+ }
155
+ catch (e) {
156
+ // Ignore kill errors
157
+ }
158
+ }
159
+ }
160
+ }
161
+ //# sourceMappingURL=processCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processCheck.js","sourceRoot":"","sources":["../../src/utils/processCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Dynamic configuration CLI interaction handler
3
+ * Handles user interactions for various input types
4
+ */
5
+ import { RequiredInput, UserInputValues, PresetConfigSection } from '@wengine-ai/claude-code-router-shared';
6
+ export declare const COLORS: {
7
+ RESET: string;
8
+ GREEN: string;
9
+ YELLOW: string;
10
+ BOLDYELLOW: string;
11
+ BOLDCYAN: string;
12
+ DIM: string;
13
+ BOLDGREEN: string;
14
+ };
15
+ /**
16
+ * Collect user input (supports dynamic configuration)
17
+ */
18
+ export declare function collectUserInputs(schema: RequiredInput[], presetConfig: PresetConfigSection, existingValues?: UserInputValues): Promise<UserInputValues>;
19
+ /**
20
+ * Recollect affected fields (when a field value changes)
21
+ */
22
+ export declare function recollectAffectedFields(changedFieldId: string, schema: RequiredInput[], presetConfig: PresetConfigSection, currentValues: UserInputValues): Promise<UserInputValues>;
23
+ /**
24
+ * Collect sensitive information (legacy compatible)
25
+ */
26
+ export declare function collectSensitiveInputs(schema: RequiredInput[], presetConfig: PresetConfigSection, existingValues?: UserInputValues): Promise<UserInputValues>;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * Dynamic configuration CLI interaction handler
4
+ * Handles user interactions for various input types
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.COLORS = void 0;
11
+ exports.collectUserInputs = collectUserInputs;
12
+ exports.recollectAffectedFields = recollectAffectedFields;
13
+ exports.collectSensitiveInputs = collectSensitiveInputs;
14
+ const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
15
+ const input_1 = __importDefault(require("@inquirer/input"));
16
+ const confirm_1 = __importDefault(require("@inquirer/confirm"));
17
+ const select_1 = __importDefault(require("@inquirer/select"));
18
+ const password_1 = __importDefault(require("@inquirer/password"));
19
+ const checkbox_1 = __importDefault(require("@inquirer/checkbox"));
20
+ const editor_1 = __importDefault(require("@inquirer/editor"));
21
+ // ANSI color codes
22
+ exports.COLORS = {
23
+ RESET: "\x1B[0m",
24
+ GREEN: "\x1B[32m",
25
+ YELLOW: "\x1B[33m",
26
+ BOLDYELLOW: "\x1B[1m\x1B[33m",
27
+ BOLDCYAN: "\x1B[1m\x1B[36m",
28
+ DIM: "\x1B[2m",
29
+ BOLDGREEN: "\x1B[1m\x1B[32m",
30
+ };
31
+ /**
32
+ * Collect user input (supports dynamic configuration)
33
+ */
34
+ async function collectUserInputs(schema, presetConfig, existingValues) {
35
+ // Sort by dependencies
36
+ const sortedFields = (0, claude_code_router_shared_1.sortFieldsByDependencies)(schema);
37
+ // Initialize values
38
+ const values = { ...existingValues };
39
+ // Collect all inputs
40
+ for (const field of sortedFields) {
41
+ // Check if this field should be displayed
42
+ if (!(0, claude_code_router_shared_1.shouldShowField)(field, values)) {
43
+ // Skip and clear the field value (if it existed before)
44
+ delete values[field.id];
45
+ continue;
46
+ }
47
+ // Skip if value already exists and not initial collection
48
+ if (existingValues && field.id in existingValues) {
49
+ continue;
50
+ }
51
+ // Get input value
52
+ const value = await promptField(field, presetConfig, values);
53
+ // Validate
54
+ const validation = (0, claude_code_router_shared_1.validateInput)(field, value);
55
+ if (!validation.valid) {
56
+ console.error(`${exports.COLORS.YELLOW}Error:${exports.COLORS.RESET} ${validation.error}`);
57
+ // Throw error for required fields
58
+ if (field.required !== false) {
59
+ throw new Error(validation.error);
60
+ }
61
+ }
62
+ values[field.id] = value;
63
+ console.log('');
64
+ }
65
+ return values;
66
+ }
67
+ /**
68
+ * Recollect affected fields (when a field value changes)
69
+ */
70
+ async function recollectAffectedFields(changedFieldId, schema, presetConfig, currentValues) {
71
+ const affectedFields = (0, claude_code_router_shared_1.getAffectedFields)(changedFieldId, schema);
72
+ const sortedFields = (0, claude_code_router_shared_1.sortFieldsByDependencies)(schema);
73
+ const values = { ...currentValues };
74
+ // Recollect input for affected fields
75
+ for (const fieldId of affectedFields) {
76
+ const field = sortedFields.find(f => f.id === fieldId);
77
+ if (!field) {
78
+ continue;
79
+ }
80
+ // Check if should be displayed
81
+ if (!(0, claude_code_router_shared_1.shouldShowField)(field, values)) {
82
+ delete values[field.id];
83
+ continue;
84
+ }
85
+ // Recollect input
86
+ const value = await promptField(field, presetConfig, values);
87
+ values[field.id] = value;
88
+ // Cascade update: if this field change affects other fields
89
+ const newAffected = (0, claude_code_router_shared_1.getAffectedFields)(field.id, schema);
90
+ for (const newAffectedId of newAffected) {
91
+ if (!affectedFields.has(newAffectedId)) {
92
+ affectedFields.add(newAffectedId);
93
+ }
94
+ }
95
+ }
96
+ return values;
97
+ }
98
+ /**
99
+ * Prompt for a single field
100
+ */
101
+ async function promptField(field, presetConfig, currentValues) {
102
+ const label = field.label || field.id;
103
+ const message = field.prompt || `${label}:`;
104
+ switch (field.type) {
105
+ case claude_code_router_shared_1.InputType.PASSWORD:
106
+ return await (0, password_1.default)({
107
+ message,
108
+ mask: '*',
109
+ });
110
+ case claude_code_router_shared_1.InputType.INPUT:
111
+ return await (0, input_1.default)({
112
+ message,
113
+ default: field.defaultValue,
114
+ });
115
+ case claude_code_router_shared_1.InputType.NUMBER:
116
+ const numStr = await (0, input_1.default)({
117
+ message,
118
+ default: String(field.defaultValue ?? 0),
119
+ });
120
+ return Number(numStr);
121
+ case claude_code_router_shared_1.InputType.CONFIRM:
122
+ return await (0, confirm_1.default)({
123
+ message,
124
+ default: field.defaultValue ?? false,
125
+ });
126
+ case claude_code_router_shared_1.InputType.SELECT: {
127
+ const options = (0, claude_code_router_shared_1.resolveOptions)(field, presetConfig, currentValues);
128
+ if (options.length === 0) {
129
+ console.warn(`${exports.COLORS.YELLOW}Warning:${exports.COLORS.RESET} No options available for ${label}`);
130
+ return field.defaultValue;
131
+ }
132
+ return await (0, select_1.default)({
133
+ message,
134
+ choices: options.map(opt => ({
135
+ name: opt.label,
136
+ value: opt.value,
137
+ description: opt.description,
138
+ disabled: opt.disabled,
139
+ })),
140
+ default: field.defaultValue,
141
+ });
142
+ }
143
+ case claude_code_router_shared_1.InputType.MULTISELECT: {
144
+ const options = (0, claude_code_router_shared_1.resolveOptions)(field, presetConfig, currentValues);
145
+ if (options.length === 0) {
146
+ console.warn(`${exports.COLORS.YELLOW}Warning:${exports.COLORS.RESET} No options available for ${label}`);
147
+ return field.defaultValue ?? [];
148
+ }
149
+ // @inquirer/prompts doesn't have multi-select, use checkbox
150
+ return await (0, checkbox_1.default)({
151
+ message,
152
+ choices: options.map(opt => ({
153
+ name: opt.label,
154
+ value: opt.value,
155
+ checked: Array.isArray(field.defaultValue) && field.defaultValue.includes(opt.value),
156
+ })),
157
+ });
158
+ }
159
+ case claude_code_router_shared_1.InputType.EDITOR: {
160
+ return await (0, editor_1.default)({
161
+ message,
162
+ default: field.defaultValue,
163
+ });
164
+ }
165
+ default:
166
+ // Use input by default
167
+ return await (0, input_1.default)({
168
+ message,
169
+ default: field.defaultValue,
170
+ });
171
+ }
172
+ }
173
+ /**
174
+ * Collect sensitive information (legacy compatible)
175
+ */
176
+ async function collectSensitiveInputs(schema, presetConfig, existingValues) {
177
+ console.log(`\n${exports.COLORS.BOLDYELLOW}This preset requires additional information:${exports.COLORS.RESET}\n`);
178
+ const values = await collectUserInputs(schema, presetConfig, existingValues);
179
+ // Display summary
180
+ console.log(`${exports.COLORS.GREEN}✓${exports.COLORS.RESET} All required information collected\n`);
181
+ return values;
182
+ }
183
+ //# sourceMappingURL=schema-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-input.js","sourceRoot":"","sources":["../../../src/utils/prompt/schema-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function showStatus(): Promise<void>;