@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,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Preset command handler 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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.handlePresetCommand = handlePresetCommand;
|
|
44
|
+
const fs = __importStar(require("fs/promises"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const json5_1 = __importDefault(require("json5"));
|
|
47
|
+
const export_1 = require("./export");
|
|
48
|
+
const install_1 = require("./install");
|
|
49
|
+
const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
|
|
50
|
+
// ANSI color codes
|
|
51
|
+
const RESET = "\x1B[0m";
|
|
52
|
+
const GREEN = "\x1B[32m";
|
|
53
|
+
const YELLOW = "\x1B[33m";
|
|
54
|
+
const BOLDCYAN = "\x1B[1m\x1B[36m";
|
|
55
|
+
const BOLDYELLOW = "\x1B[1m\x1B[33m";
|
|
56
|
+
const DIM = "\x1B[2m";
|
|
57
|
+
/**
|
|
58
|
+
* List local presets
|
|
59
|
+
*/
|
|
60
|
+
async function listPresets() {
|
|
61
|
+
const presetsDir = path.join(claude_code_router_shared_1.HOME_DIR, 'presets');
|
|
62
|
+
try {
|
|
63
|
+
await fs.access(presetsDir);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
console.log('\nNo presets directory found.');
|
|
67
|
+
console.log(`\nCreate your first preset with: ${GREEN}ccr preset export <name>${RESET}\n`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const entries = await fs.readdir(presetsDir, { withFileTypes: true });
|
|
71
|
+
const presetDirs = entries.filter(e => e.isDirectory() && !e.name.startsWith('.')).map(e => e.name);
|
|
72
|
+
if (presetDirs.length === 0) {
|
|
73
|
+
console.log('\nNo presets found.');
|
|
74
|
+
console.log(`\nInstall a preset with: ${GREEN}ccr preset install <file>${RESET}\n`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
console.log(`\n${BOLDCYAN}Available presets:${RESET}\n`);
|
|
78
|
+
for (const dirName of presetDirs) {
|
|
79
|
+
const presetDir = path.join(presetsDir, dirName);
|
|
80
|
+
try {
|
|
81
|
+
const manifestPath = path.join(presetDir, 'manifest.json');
|
|
82
|
+
const content = await fs.readFile(manifestPath, 'utf-8');
|
|
83
|
+
const manifest = json5_1.default.parse(content);
|
|
84
|
+
// Extract metadata fields from manifest
|
|
85
|
+
const { Providers, Router, PORT, HOST, API_TIMEOUT_MS, PROXY_URL, LOG, LOG_LEVEL, StatusLine, NON_INTERACTIVE_MODE, ...metadata } = manifest;
|
|
86
|
+
const name = metadata.name || dirName;
|
|
87
|
+
const description = metadata.description || '';
|
|
88
|
+
const author = metadata.author || '';
|
|
89
|
+
const version = metadata.version;
|
|
90
|
+
// Display preset name
|
|
91
|
+
if (version) {
|
|
92
|
+
console.log(`${GREEN}•${RESET} ${BOLDCYAN}${name}${RESET} (v${version})`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(`${GREEN}•${RESET} ${BOLDCYAN}${name}${RESET}`);
|
|
96
|
+
}
|
|
97
|
+
// Display description
|
|
98
|
+
if (description) {
|
|
99
|
+
console.log(` ${description}`);
|
|
100
|
+
}
|
|
101
|
+
// Display author
|
|
102
|
+
if (author) {
|
|
103
|
+
console.log(` ${DIM}by ${author}${RESET}`);
|
|
104
|
+
}
|
|
105
|
+
console.log('');
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.log(`${YELLOW}•${RESET} ${dirName}`);
|
|
109
|
+
console.log(` ${DIM}(Error reading preset)${RESET}\n`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Delete preset
|
|
115
|
+
*/
|
|
116
|
+
async function deletePreset(name) {
|
|
117
|
+
const presetsDir = path.join(claude_code_router_shared_1.HOME_DIR, 'presets');
|
|
118
|
+
// Validate preset name (prevent path traversal)
|
|
119
|
+
if (!name || name.includes('..') || name.includes('/') || name.includes('\\')) {
|
|
120
|
+
console.error(`\n${YELLOW}Error:${RESET} Invalid preset name.\n`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const presetDir = path.join(presetsDir, name);
|
|
124
|
+
try {
|
|
125
|
+
// Recursively delete entire directory
|
|
126
|
+
await fs.rm(presetDir, { recursive: true, force: true });
|
|
127
|
+
console.log(`\n${GREEN}✓${RESET} Preset "${name}" deleted.\n`);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (error.code === 'ENOENT') {
|
|
131
|
+
console.error(`\n${YELLOW}Error:${RESET} Preset "${name}" not found.\n`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.error(`\n${YELLOW}Error:${RESET} ${error.message}\n`);
|
|
135
|
+
}
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Show preset information
|
|
141
|
+
*/
|
|
142
|
+
async function showPresetInfo(name) {
|
|
143
|
+
try {
|
|
144
|
+
const preset = await (0, install_1.loadPreset)(name);
|
|
145
|
+
const config = preset.config;
|
|
146
|
+
const metadata = preset.metadata;
|
|
147
|
+
console.log(`\n${BOLDCYAN}═══════════════════════════════════════════════${RESET}`);
|
|
148
|
+
if (metadata?.name) {
|
|
149
|
+
console.log(`${BOLDCYAN}Preset: ${RESET}${metadata.name}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(`${BOLDCYAN}Preset: ${RESET}${name}`);
|
|
153
|
+
}
|
|
154
|
+
console.log(`${BOLDCYAN}═══════════════════════════════════════════════${RESET}\n`);
|
|
155
|
+
if (metadata?.version)
|
|
156
|
+
console.log(`${BOLDCYAN}Version:${RESET} ${metadata.version}`);
|
|
157
|
+
if (metadata?.description)
|
|
158
|
+
console.log(`${BOLDCYAN}Description:${RESET} ${metadata.description}`);
|
|
159
|
+
if (metadata?.author)
|
|
160
|
+
console.log(`${BOLDCYAN}Author:${RESET} ${metadata.author}`);
|
|
161
|
+
const keywords = metadata?.keywords;
|
|
162
|
+
if (keywords && keywords.length > 0) {
|
|
163
|
+
console.log(`${BOLDCYAN}Keywords:${RESET} ${keywords.join(', ')}`);
|
|
164
|
+
}
|
|
165
|
+
console.log(`\n${BOLDCYAN}Configuration:${RESET}`);
|
|
166
|
+
if (config.Providers) {
|
|
167
|
+
console.log(` Providers: ${config.Providers.length}`);
|
|
168
|
+
}
|
|
169
|
+
if (config.Router) {
|
|
170
|
+
console.log(` Router rules: ${Object.keys(config.Router).length}`);
|
|
171
|
+
}
|
|
172
|
+
if (config.provider) {
|
|
173
|
+
console.log(` Provider: ${config.provider}`);
|
|
174
|
+
}
|
|
175
|
+
if (preset.schema && preset.schema.length > 0) {
|
|
176
|
+
console.log(`\n${BOLDYELLOW}Required inputs:${RESET}`);
|
|
177
|
+
for (const input of preset.schema) {
|
|
178
|
+
const label = input.label || input.id;
|
|
179
|
+
const prompt = input.prompt || '';
|
|
180
|
+
console.log(` - ${label}${prompt ? ` ${DIM}(${prompt})${RESET}` : ''}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
console.log('');
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
console.error(`\n${YELLOW}Error:${RESET} ${error.message}\n`);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Handle preset commands
|
|
192
|
+
*/
|
|
193
|
+
async function handlePresetCommand(args) {
|
|
194
|
+
const subCommand = args[0];
|
|
195
|
+
switch (subCommand) {
|
|
196
|
+
case 'export':
|
|
197
|
+
const presetName = args[1];
|
|
198
|
+
if (!presetName) {
|
|
199
|
+
console.error('\nError: Preset name is required\n');
|
|
200
|
+
console.error('Usage: ccr preset export <name> [--output <path>] [--description <text>] [--author <name>] [--tags <tags>]\n');
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
// Parse options
|
|
204
|
+
const options = {};
|
|
205
|
+
for (let i = 2; i < args.length; i++) {
|
|
206
|
+
if (args[i] === '--output' && args[i + 1]) {
|
|
207
|
+
options.output = args[++i];
|
|
208
|
+
}
|
|
209
|
+
else if (args[i] === '--description' && args[i + 1]) {
|
|
210
|
+
options.description = args[++i];
|
|
211
|
+
}
|
|
212
|
+
else if (args[i] === '--author' && args[i + 1]) {
|
|
213
|
+
options.author = args[++i];
|
|
214
|
+
}
|
|
215
|
+
else if (args[i] === '--tags' && args[i + 1]) {
|
|
216
|
+
options.tags = args[++i];
|
|
217
|
+
}
|
|
218
|
+
else if (args[i] === '--include-sensitive') {
|
|
219
|
+
options.includeSensitive = true;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
await (0, export_1.exportPresetCli)(presetName, options);
|
|
223
|
+
break;
|
|
224
|
+
case 'install':
|
|
225
|
+
const source = args[1];
|
|
226
|
+
if (!source) {
|
|
227
|
+
console.error('\nError: Preset source is required\n');
|
|
228
|
+
console.error('Usage: ccr preset install <file | url | name>\n');
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
await (0, install_1.installPresetCli)(source, {});
|
|
232
|
+
break;
|
|
233
|
+
case 'list':
|
|
234
|
+
await listPresets();
|
|
235
|
+
break;
|
|
236
|
+
case 'delete':
|
|
237
|
+
case 'rm':
|
|
238
|
+
case 'remove':
|
|
239
|
+
const deleteName = args[1];
|
|
240
|
+
if (!deleteName) {
|
|
241
|
+
console.error('\nError: Preset name is required\n');
|
|
242
|
+
console.error('Usage: ccr preset delete <name>\n');
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
await deletePreset(deleteName);
|
|
246
|
+
break;
|
|
247
|
+
case 'info':
|
|
248
|
+
const infoName = args[1];
|
|
249
|
+
if (!infoName) {
|
|
250
|
+
console.error('\nError: Preset name is required\n');
|
|
251
|
+
console.error('Usage: ccr preset info <name>\n');
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
await showPresetInfo(infoName);
|
|
255
|
+
break;
|
|
256
|
+
default:
|
|
257
|
+
console.error(`\nError: Unknown preset command "${subCommand}"\n`);
|
|
258
|
+
console.error('Available commands:');
|
|
259
|
+
console.error(' ccr preset export <name> Export current configuration as a preset');
|
|
260
|
+
console.error(' ccr preset install <source> Install a preset from file, URL, or registry');
|
|
261
|
+
console.error(' ccr preset list List installed presets');
|
|
262
|
+
console.error(' ccr preset info <name> Show preset information');
|
|
263
|
+
console.error(' ccr preset delete <name> Delete a preset\n');
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/utils/preset/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset export functionality CLI layer
|
|
3
|
+
* Handles CLI interactions, core logic is in shared package
|
|
4
|
+
*/
|
|
5
|
+
import { ExportOptions } from '@wengine-ai/claude-code-router-shared';
|
|
6
|
+
/**
|
|
7
|
+
* Export preset configuration (CLI version, with interaction)
|
|
8
|
+
* @param presetName Preset name
|
|
9
|
+
* @param options Export options
|
|
10
|
+
*/
|
|
11
|
+
export declare function exportPresetCli(presetName: string, options?: ExportOptions): Promise<void>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Preset export functionality CLI layer
|
|
4
|
+
* Handles CLI interactions, core logic is in shared package
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.exportPresetCli = exportPresetCli;
|
|
8
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
9
|
+
const index_1 = require("../index");
|
|
10
|
+
const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
|
|
11
|
+
// ANSI color codes
|
|
12
|
+
const RESET = "\x1B[0m";
|
|
13
|
+
const GREEN = "\x1B[32m";
|
|
14
|
+
const BOLDGREEN = "\x1B[1m\x1B[32m";
|
|
15
|
+
const YELLOW = "\x1B[33m";
|
|
16
|
+
const BOLDCYAN = "\x1B[1m\x1B[36m";
|
|
17
|
+
/**
|
|
18
|
+
* Export preset configuration (CLI version, with interaction)
|
|
19
|
+
* @param presetName Preset name
|
|
20
|
+
* @param options Export options
|
|
21
|
+
*/
|
|
22
|
+
async function exportPresetCli(presetName, options = {}) {
|
|
23
|
+
try {
|
|
24
|
+
console.log(`\n${BOLDCYAN}═══════════════════════════════════════════════${RESET}`);
|
|
25
|
+
console.log(`${BOLDCYAN} Preset Export${RESET}`);
|
|
26
|
+
console.log(`${BOLDCYAN}═══════════════════════════════════════════════${RESET}\n`);
|
|
27
|
+
// 1. Read current configuration
|
|
28
|
+
const config = await (0, index_1.readConfigFile)();
|
|
29
|
+
// 2. Interactively ask for metadata if not provided via command line
|
|
30
|
+
if (!options.description) {
|
|
31
|
+
try {
|
|
32
|
+
options.description = await (0, prompts_1.input)({
|
|
33
|
+
message: 'Description (optional):',
|
|
34
|
+
default: '',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// User cancelled, use default value
|
|
39
|
+
options.description = '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!options.author) {
|
|
43
|
+
try {
|
|
44
|
+
options.author = await (0, prompts_1.input)({
|
|
45
|
+
message: 'Author (optional):',
|
|
46
|
+
default: '',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
options.author = '';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!options.tags) {
|
|
54
|
+
try {
|
|
55
|
+
const keywordsInput = await (0, prompts_1.input)({
|
|
56
|
+
message: 'Keywords (comma-separated, optional):',
|
|
57
|
+
default: '',
|
|
58
|
+
});
|
|
59
|
+
options.tags = keywordsInput || '';
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
options.tags = '';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// 3. Call core export functionality
|
|
66
|
+
const result = await (0, claude_code_router_shared_1.exportPreset)(presetName, config, options);
|
|
67
|
+
// 4. Display summary
|
|
68
|
+
console.log(`\n${BOLDGREEN}✓ Preset exported successfully${RESET}\n`);
|
|
69
|
+
console.log(`${BOLDCYAN}Location:${RESET} ${result.presetDir}\n`);
|
|
70
|
+
console.log(`${BOLDCYAN}Summary:${RESET}`);
|
|
71
|
+
console.log(` - Providers: ${result.sanitizedConfig.Providers?.length || 0}`);
|
|
72
|
+
console.log(` - Router rules: ${Object.keys(result.sanitizedConfig.Router || {}).length}`);
|
|
73
|
+
if (!options.includeSensitive) {
|
|
74
|
+
console.log(` - Sensitive fields sanitized: ${YELLOW}${result.sanitizedCount}${RESET}`);
|
|
75
|
+
}
|
|
76
|
+
// Display metadata
|
|
77
|
+
if (result.metadata.description) {
|
|
78
|
+
console.log(`\n${BOLDCYAN}Description:${RESET} ${result.metadata.description}`);
|
|
79
|
+
}
|
|
80
|
+
if (result.metadata.author) {
|
|
81
|
+
console.log(`${BOLDCYAN}Author:${RESET} ${result.metadata.author}`);
|
|
82
|
+
}
|
|
83
|
+
if (result.metadata.keywords && result.metadata.keywords.length > 0) {
|
|
84
|
+
console.log(`${BOLDCYAN}Keywords:${RESET} ${result.metadata.keywords.join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
// Display sharing tips
|
|
87
|
+
console.log(`\n${BOLDCYAN}To share this preset:${RESET}`);
|
|
88
|
+
console.log(` 1. Share the directory: ${result.presetDir}`);
|
|
89
|
+
console.log(` 2. Upload to GitHub Gist or your repository`);
|
|
90
|
+
console.log(` 3. Others can install with: ${GREEN}ccr preset install <directory>${RESET}\n`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.error(`\n${YELLOW}Error exporting preset:${RESET} ${error.message}`);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/utils/preset/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 预设功能 CLI 层
|
|
4
|
+
* 导出所有预设相关的功能和类型
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.handlePresetCommand = exports.applyPresetCli = exports.installPresetCli = exports.exportPresetCli = void 0;
|
|
22
|
+
// 从 shared 包重新导出类型和核心功能
|
|
23
|
+
__exportStar(require("@wengine-ai/claude-code-router-shared"), exports);
|
|
24
|
+
// 导出 CLI 特定的功能(带交互)
|
|
25
|
+
var export_1 = require("./export");
|
|
26
|
+
Object.defineProperty(exports, "exportPresetCli", { enumerable: true, get: function () { return export_1.exportPresetCli; } });
|
|
27
|
+
var install_1 = require("./install");
|
|
28
|
+
Object.defineProperty(exports, "installPresetCli", { enumerable: true, get: function () { return install_1.installPresetCli; } });
|
|
29
|
+
Object.defineProperty(exports, "applyPresetCli", { enumerable: true, get: function () { return install_1.applyPresetCli; } });
|
|
30
|
+
var commands_1 = require("./commands");
|
|
31
|
+
Object.defineProperty(exports, "handlePresetCommand", { enumerable: true, get: function () { return commands_1.handlePresetCommand; } });
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/preset/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,wBAAwB;AACxB,wEAAsD;AAEtD,oBAAoB;AACpB,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AACxB,qCAA6D;AAApD,2GAAA,gBAAgB,OAAA;AAAE,yGAAA,cAAc,OAAA;AACzC,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install preset from GitHub marketplace by preset name
|
|
3
|
+
*/
|
|
4
|
+
import { type PresetFile } from '@wengine-ai/claude-code-router-shared';
|
|
5
|
+
/**
|
|
6
|
+
* Install preset from marketplace by preset name
|
|
7
|
+
* @param presetName Preset name (must exist in marketplace)
|
|
8
|
+
* @returns Object containing installed preset name and PresetFile
|
|
9
|
+
*/
|
|
10
|
+
export declare function installPresetFromMarket(presetName: string): Promise<{
|
|
11
|
+
name: string;
|
|
12
|
+
preset: PresetFile;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Install preset from GitHub marketplace by preset name
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.installPresetFromMarket = installPresetFromMarket;
|
|
43
|
+
const fs = __importStar(require("fs/promises"));
|
|
44
|
+
const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
|
|
45
|
+
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
46
|
+
// ANSI color codes
|
|
47
|
+
const RESET = "\x1B[0m";
|
|
48
|
+
const GREEN = "\x1B[32m";
|
|
49
|
+
const BOLDCYAN = "\x1B[1m\x1B[36m";
|
|
50
|
+
const BOLDYELLOW = "\x1B[1m\x1B[33m";
|
|
51
|
+
/**
|
|
52
|
+
* Parse GitHub repository URL or name
|
|
53
|
+
* Supports:
|
|
54
|
+
* - owner/repo (short format)
|
|
55
|
+
* - github.com/owner/repo
|
|
56
|
+
* - https://github.com/owner/repo
|
|
57
|
+
* - https://github.com/owner/repo.git
|
|
58
|
+
* - git@github.com:owner/repo.git
|
|
59
|
+
*/
|
|
60
|
+
function parseGitHubRepo(input) {
|
|
61
|
+
const match = input.match(/(?:github\.com[:/]|^)([^/]+)\/([^/\s#]+?)(?:\.git)?$/);
|
|
62
|
+
if (!match) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const [, owner, repoName] = match;
|
|
66
|
+
return { owner, repoName };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load preset from ZIP file
|
|
70
|
+
*/
|
|
71
|
+
async function loadPresetFromZip(zipFile) {
|
|
72
|
+
const zip = new adm_zip_1.default(zipFile);
|
|
73
|
+
// First try to find manifest.json in root directory
|
|
74
|
+
let entry = zip.getEntry('manifest.json');
|
|
75
|
+
// If not in root, try to find in subdirectories (handle GitHub repo archive structure)
|
|
76
|
+
if (!entry) {
|
|
77
|
+
const entries = zip.getEntries();
|
|
78
|
+
// Find any manifest.json file
|
|
79
|
+
entry = entries.find(e => e.entryName.includes('manifest.json')) || null;
|
|
80
|
+
}
|
|
81
|
+
if (!entry) {
|
|
82
|
+
throw new Error('Invalid preset file: manifest.json not found');
|
|
83
|
+
}
|
|
84
|
+
const manifest = JSON.parse(entry.getData().toString('utf-8'));
|
|
85
|
+
return (0, claude_code_router_shared_1.manifestToPresetFile)(manifest);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Install preset from marketplace by preset name
|
|
89
|
+
* @param presetName Preset name (must exist in marketplace)
|
|
90
|
+
* @returns Object containing installed preset name and PresetFile
|
|
91
|
+
*/
|
|
92
|
+
async function installPresetFromMarket(presetName) {
|
|
93
|
+
// Check if preset is in the marketplace
|
|
94
|
+
console.log(`${BOLDCYAN}Checking marketplace...${RESET}`);
|
|
95
|
+
const marketPreset = await (0, claude_code_router_shared_1.findMarketPresetByName)(presetName);
|
|
96
|
+
if (!marketPreset) {
|
|
97
|
+
throw new Error(`Preset '${presetName}' not found in marketplace. ` +
|
|
98
|
+
`Please check the available presets at: https://github.com/claude-code-router/presets`);
|
|
99
|
+
}
|
|
100
|
+
console.log(`${GREEN}✓${RESET} Found in marketplace\n`);
|
|
101
|
+
// Get repository from market preset
|
|
102
|
+
if (!marketPreset.repo) {
|
|
103
|
+
throw new Error(`Preset '${presetName}' does not have repository information`);
|
|
104
|
+
}
|
|
105
|
+
// Parse GitHub repository URL
|
|
106
|
+
const githubRepo = parseGitHubRepo(marketPreset.repo);
|
|
107
|
+
if (!githubRepo) {
|
|
108
|
+
throw new Error(`Invalid repository format: ${marketPreset.repo}`);
|
|
109
|
+
}
|
|
110
|
+
const { owner, repoName } = githubRepo;
|
|
111
|
+
// Use preset name from market (or the preset's id)
|
|
112
|
+
const installedPresetName = marketPreset.name || presetName;
|
|
113
|
+
// Check if already installed BEFORE downloading
|
|
114
|
+
if (await (0, claude_code_router_shared_1.isPresetInstalled)(installedPresetName)) {
|
|
115
|
+
throw new Error(`Preset '${installedPresetName}' is already installed.\n` +
|
|
116
|
+
`To delete and reinstall, use: ccr preset delete ${installedPresetName}\n` +
|
|
117
|
+
`To reconfigure without deleting, use: ccr preset install ${installedPresetName}`);
|
|
118
|
+
}
|
|
119
|
+
// Download GitHub repository ZIP file
|
|
120
|
+
console.log(`${BOLDCYAN}Downloading preset...${RESET}`);
|
|
121
|
+
const downloadUrl = `https://github.com/${owner}/${repoName}/archive/refs/heads/main.zip`;
|
|
122
|
+
const tempFile = await (0, claude_code_router_shared_1.downloadPresetToTemp)(downloadUrl);
|
|
123
|
+
console.log(`${GREEN}✓${RESET} Downloaded\n`);
|
|
124
|
+
try {
|
|
125
|
+
// Load preset to validate structure
|
|
126
|
+
console.log(`${BOLDCYAN}Validating preset...${RESET}`);
|
|
127
|
+
const preset = await loadPresetFromZip(tempFile);
|
|
128
|
+
console.log(`${GREEN}✓${RESET} Valid\n`);
|
|
129
|
+
// Double-check if already installed (in case of race condition)
|
|
130
|
+
if (await (0, claude_code_router_shared_1.isPresetInstalled)(installedPresetName)) {
|
|
131
|
+
throw new Error(`Preset '${installedPresetName}' was installed while downloading. ` +
|
|
132
|
+
`Please try again.`);
|
|
133
|
+
}
|
|
134
|
+
// Extract to target directory
|
|
135
|
+
console.log(`${BOLDCYAN}Installing preset...${RESET}`);
|
|
136
|
+
const targetDir = (0, claude_code_router_shared_1.getPresetDir)(installedPresetName);
|
|
137
|
+
await (0, claude_code_router_shared_1.extractPreset)(tempFile, targetDir);
|
|
138
|
+
console.log(`${GREEN}✓${RESET} Installed\n`);
|
|
139
|
+
// Read manifest and add repo information
|
|
140
|
+
const manifest = await (0, claude_code_router_shared_1.readManifestFromDir)(targetDir);
|
|
141
|
+
// Add repo information to manifest
|
|
142
|
+
manifest.repository = marketPreset.repository;
|
|
143
|
+
if (marketPreset.url) {
|
|
144
|
+
manifest.source = marketPreset.url;
|
|
145
|
+
}
|
|
146
|
+
// Save updated manifest
|
|
147
|
+
await (0, claude_code_router_shared_1.saveManifest)(installedPresetName, manifest);
|
|
148
|
+
// Return preset name and PresetFile for further configuration
|
|
149
|
+
return { name: installedPresetName, preset };
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
// Clean up temp file
|
|
153
|
+
try {
|
|
154
|
+
await fs.unlink(tempFile);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Ignore cleanup errors
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=install-github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-github.js","sourceRoot":"","sources":["../../../src/utils/preset/install-github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset installation functionality CLI layer
|
|
3
|
+
* Handles CLI interactions, core logic is in the shared package
|
|
4
|
+
*/
|
|
5
|
+
import { loadPreset as loadPresetShared, MergeStrategy, PresetFile } from '@wengine-ai/claude-code-router-shared';
|
|
6
|
+
export { loadPresetShared as loadPreset };
|
|
7
|
+
/**
|
|
8
|
+
* Apply preset to configuration
|
|
9
|
+
* @param presetName Preset name
|
|
10
|
+
* @param preset Preset object
|
|
11
|
+
*/
|
|
12
|
+
export declare function applyPresetCli(presetName: string, preset: PresetFile): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Install preset (main entry point)
|
|
15
|
+
*/
|
|
16
|
+
export declare function installPresetCli(source: string, options?: {
|
|
17
|
+
strategy?: MergeStrategy;
|
|
18
|
+
name?: string;
|
|
19
|
+
}): Promise<void>;
|