@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.
- package/LICENSE +21 -0
- package/dist/README.md +763 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1193 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.html +225 -0
- package/dist/index.js +1539 -0
- package/dist/package.json +31 -0
- package/dist/tiktoken_bg.wasm +0 -0
- package/dist/utils/activateCommand.d.ts +4 -0
- package/dist/utils/activateCommand.js +24 -0
- package/dist/utils/activateCommand.js.map +1 -0
- package/dist/utils/claudeSettings.d.ts +12 -0
- package/dist/utils/claudeSettings.js +188 -0
- package/dist/utils/claudeSettings.js.map +1 -0
- package/dist/utils/codeCommand.d.ts +13 -0
- package/dist/utils/codeCommand.js +88 -0
- package/dist/utils/codeCommand.js.map +1 -0
- package/dist/utils/createEnvVariables.d.ts +5 -0
- package/dist/utils/createEnvVariables.js +83 -0
- package/dist/utils/createEnvVariables.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.js +271 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/installCommand.d.ts +9 -0
- package/dist/utils/installCommand.js +47 -0
- package/dist/utils/installCommand.js.map +1 -0
- package/dist/utils/modelSelector.d.ts +1 -0
- package/dist/utils/modelSelector.js +402 -0
- package/dist/utils/modelSelector.js.map +1 -0
- package/dist/utils/preset/commands.d.ts +8 -0
- package/dist/utils/preset/commands.js +267 -0
- package/dist/utils/preset/commands.js.map +1 -0
- package/dist/utils/preset/export.d.ts +11 -0
- package/dist/utils/preset/export.js +97 -0
- package/dist/utils/preset/export.js.map +1 -0
- package/dist/utils/preset/index.d.ts +8 -0
- package/dist/utils/preset/index.js +32 -0
- package/dist/utils/preset/index.js.map +1 -0
- package/dist/utils/preset/install-github.d.ts +13 -0
- package/dist/utils/preset/install-github.js +161 -0
- package/dist/utils/preset/install-github.js.map +1 -0
- package/dist/utils/preset/install.d.ts +19 -0
- package/dist/utils/preset/install.js +239 -0
- package/dist/utils/preset/install.js.map +1 -0
- package/dist/utils/processCheck.d.ts +17 -0
- package/dist/utils/processCheck.js +161 -0
- package/dist/utils/processCheck.js.map +1 -0
- package/dist/utils/prompt/schema-input.d.ts +26 -0
- package/dist/utils/prompt/schema-input.js +183 -0
- package/dist/utils/prompt/schema-input.js.map +1 -0
- package/dist/utils/status.d.ts +1 -0
- package/dist/utils/status.js +28 -0
- package/dist/utils/status.js.map +1 -0
- package/dist/utils/statusline.d.ts +61 -0
- package/dist/utils/statusline.js +924 -0
- package/dist/utils/statusline.js.map +1 -0
- package/dist/utils/update.d.ts +18 -0
- package/dist/utils/update.js +74 -0
- package/dist/utils/update.js.map +1 -0
- 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":"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"}
|
|
@@ -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>;
|