@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,271 @@
|
|
|
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.getSettingsPath = exports.restartService = exports.run = exports.initConfig = exports.writeConfigFile = exports.backupConfigFile = exports.readConfigFile = exports.initDir = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_readline_1 = __importDefault(require("node:readline"));
|
|
9
|
+
const json5_1 = __importDefault(require("json5"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
13
|
+
const claude_code_router_shared_1 = require("@wengine-ai/claude-code-router-shared");
|
|
14
|
+
const claude_code_router_server_1 = require("@wengine-ai/claude-code-router-server");
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const update_1 = require("./update");
|
|
17
|
+
const package_json_1 = require("../../package.json");
|
|
18
|
+
const child_process_1 = require("child_process");
|
|
19
|
+
const processCheck_1 = require("./processCheck");
|
|
20
|
+
// Function to interpolate environment variables in config values
|
|
21
|
+
const interpolateEnvVars = (obj) => {
|
|
22
|
+
if (typeof obj === "string") {
|
|
23
|
+
// Replace $VAR_NAME or ${VAR_NAME} with environment variable values
|
|
24
|
+
return obj.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g, (match, braced, unbraced) => {
|
|
25
|
+
const varName = braced || unbraced;
|
|
26
|
+
return process.env[varName] || match; // Keep original if env var doesn't exist
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
else if (Array.isArray(obj)) {
|
|
30
|
+
return obj.map(interpolateEnvVars);
|
|
31
|
+
}
|
|
32
|
+
else if (obj !== null && typeof obj === "object") {
|
|
33
|
+
const result = {};
|
|
34
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
35
|
+
result[key] = interpolateEnvVars(value);
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
return obj;
|
|
40
|
+
};
|
|
41
|
+
const ensureDir = async (dir_path) => {
|
|
42
|
+
try {
|
|
43
|
+
await promises_1.default.access(dir_path);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
await promises_1.default.mkdir(dir_path, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const initDir = async () => {
|
|
50
|
+
await ensureDir(claude_code_router_shared_1.HOME_DIR);
|
|
51
|
+
await ensureDir(claude_code_router_shared_1.PLUGINS_DIR);
|
|
52
|
+
await ensureDir(claude_code_router_shared_1.PRESETS_DIR);
|
|
53
|
+
await ensureDir(node_path_1.default.join(claude_code_router_shared_1.HOME_DIR, "logs"));
|
|
54
|
+
};
|
|
55
|
+
exports.initDir = initDir;
|
|
56
|
+
const createReadline = () => {
|
|
57
|
+
return node_readline_1.default.createInterface({
|
|
58
|
+
input: process.stdin,
|
|
59
|
+
output: process.stdout,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
const question = (query) => {
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
const rl = createReadline();
|
|
65
|
+
rl.question(query, (answer) => {
|
|
66
|
+
rl.close();
|
|
67
|
+
resolve(answer);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const confirm = async (query) => {
|
|
72
|
+
const answer = await question(query);
|
|
73
|
+
return answer.toLowerCase() !== "n";
|
|
74
|
+
};
|
|
75
|
+
const readConfigFile = async () => {
|
|
76
|
+
try {
|
|
77
|
+
const config = await promises_1.default.readFile(claude_code_router_shared_1.CONFIG_FILE, "utf-8");
|
|
78
|
+
try {
|
|
79
|
+
// Try to parse with JSON5 first (which also supports standard JSON)
|
|
80
|
+
const parsedConfig = json5_1.default.parse(config);
|
|
81
|
+
// Interpolate environment variables in the parsed config
|
|
82
|
+
return interpolateEnvVars(parsedConfig);
|
|
83
|
+
}
|
|
84
|
+
catch (parseError) {
|
|
85
|
+
console.error(`Failed to parse config file at ${claude_code_router_shared_1.CONFIG_FILE}`);
|
|
86
|
+
console.error("Error details:", parseError.message);
|
|
87
|
+
console.error("Please check your config file syntax.");
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (readError) {
|
|
92
|
+
if (readError.code === "ENOENT") {
|
|
93
|
+
// Config file doesn't exist, prompt user for initial setup
|
|
94
|
+
try {
|
|
95
|
+
// Initialize directories
|
|
96
|
+
await (0, exports.initDir)();
|
|
97
|
+
// Backup existing config file if it exists
|
|
98
|
+
const backupPath = await (0, exports.backupConfigFile)();
|
|
99
|
+
if (backupPath) {
|
|
100
|
+
console.log(`Backed up existing configuration file to ${backupPath}`);
|
|
101
|
+
}
|
|
102
|
+
const config = {
|
|
103
|
+
PORT: 3456,
|
|
104
|
+
Providers: [],
|
|
105
|
+
Router: {},
|
|
106
|
+
};
|
|
107
|
+
// Create a minimal default config file
|
|
108
|
+
await (0, exports.writeConfigFile)(config);
|
|
109
|
+
console.log("Created minimal default configuration file at ~/.claude-code-router/config.json");
|
|
110
|
+
console.log("Please edit this file with your actual configuration.");
|
|
111
|
+
return config;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error("Failed to create default configuration:", error.message);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.error(`Failed to read config file at ${claude_code_router_shared_1.CONFIG_FILE}`);
|
|
120
|
+
console.error("Error details:", readError.message);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
exports.readConfigFile = readConfigFile;
|
|
126
|
+
const backupConfigFile = async () => {
|
|
127
|
+
try {
|
|
128
|
+
if (await promises_1.default.access(claude_code_router_shared_1.CONFIG_FILE).then(() => true).catch(() => false)) {
|
|
129
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
130
|
+
const backupPath = `${claude_code_router_shared_1.CONFIG_FILE}.${timestamp}.bak`;
|
|
131
|
+
await promises_1.default.copyFile(claude_code_router_shared_1.CONFIG_FILE, backupPath);
|
|
132
|
+
// Clean up old backups, keeping only the 3 most recent
|
|
133
|
+
try {
|
|
134
|
+
const configDir = node_path_1.default.dirname(claude_code_router_shared_1.CONFIG_FILE);
|
|
135
|
+
const configFileName = node_path_1.default.basename(claude_code_router_shared_1.CONFIG_FILE);
|
|
136
|
+
const files = await promises_1.default.readdir(configDir);
|
|
137
|
+
// Find all backup files for this config
|
|
138
|
+
const backupFiles = files
|
|
139
|
+
.filter(file => file.startsWith(configFileName) && file.endsWith('.bak'))
|
|
140
|
+
.sort()
|
|
141
|
+
.reverse(); // Sort in descending order (newest first)
|
|
142
|
+
// Delete all but the 3 most recent backups
|
|
143
|
+
if (backupFiles.length > 3) {
|
|
144
|
+
for (let i = 3; i < backupFiles.length; i++) {
|
|
145
|
+
const oldBackupPath = node_path_1.default.join(configDir, backupFiles[i]);
|
|
146
|
+
await promises_1.default.unlink(oldBackupPath);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (cleanupError) {
|
|
151
|
+
console.warn("Failed to clean up old backups:", cleanupError);
|
|
152
|
+
}
|
|
153
|
+
return backupPath;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error("Failed to backup config file:", error);
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
};
|
|
161
|
+
exports.backupConfigFile = backupConfigFile;
|
|
162
|
+
const writeConfigFile = async (config) => {
|
|
163
|
+
await ensureDir(claude_code_router_shared_1.HOME_DIR);
|
|
164
|
+
const configWithComment = `${JSON.stringify(config, null, 2)}`;
|
|
165
|
+
await promises_1.default.writeFile(claude_code_router_shared_1.CONFIG_FILE, configWithComment);
|
|
166
|
+
};
|
|
167
|
+
exports.writeConfigFile = writeConfigFile;
|
|
168
|
+
const initConfig = async () => {
|
|
169
|
+
const config = await (0, exports.readConfigFile)();
|
|
170
|
+
Object.assign(process.env, config);
|
|
171
|
+
return config;
|
|
172
|
+
};
|
|
173
|
+
exports.initConfig = initConfig;
|
|
174
|
+
const run = async (args = []) => {
|
|
175
|
+
const isRunning = (0, processCheck_1.isServiceRunning)();
|
|
176
|
+
if (isRunning) {
|
|
177
|
+
console.log('claude-code-router server is running');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const server = await (0, claude_code_router_server_1.getServer)();
|
|
181
|
+
const app = server.app;
|
|
182
|
+
// Save the PID of the background process
|
|
183
|
+
(0, fs_1.writeFileSync)(claude_code_router_shared_1.PID_FILE, process.pid.toString());
|
|
184
|
+
app.post('/api/update/perform', async () => {
|
|
185
|
+
return await (0, update_1.performUpdate)();
|
|
186
|
+
});
|
|
187
|
+
app.get('/api/update/check', async () => {
|
|
188
|
+
return await (0, update_1.checkForUpdates)(package_json_1.version);
|
|
189
|
+
});
|
|
190
|
+
app.post("/api/restart", async () => {
|
|
191
|
+
setTimeout(async () => {
|
|
192
|
+
(0, child_process_1.spawn)("ccr", ["restart"], {
|
|
193
|
+
detached: true,
|
|
194
|
+
stdio: "ignore",
|
|
195
|
+
}).unref();
|
|
196
|
+
}, 100);
|
|
197
|
+
return { success: true, message: "Service restart initiated" };
|
|
198
|
+
});
|
|
199
|
+
// await server.start() to ensure it starts successfully and keep process alive
|
|
200
|
+
await server.start();
|
|
201
|
+
};
|
|
202
|
+
exports.run = run;
|
|
203
|
+
const restartService = async () => {
|
|
204
|
+
// Stop the service if it's running
|
|
205
|
+
try {
|
|
206
|
+
const pid = parseInt((0, fs_1.readFileSync)(claude_code_router_shared_1.PID_FILE, "utf-8"));
|
|
207
|
+
process.kill(pid);
|
|
208
|
+
(0, processCheck_1.cleanupPidFile)();
|
|
209
|
+
if ((0, fs_1.existsSync)(claude_code_router_shared_1.REFERENCE_COUNT_FILE)) {
|
|
210
|
+
try {
|
|
211
|
+
await promises_1.default.unlink(claude_code_router_shared_1.REFERENCE_COUNT_FILE);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
// Ignore cleanup errors
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
console.log("claude code router service has been stopped.");
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
console.log("Service was not running or failed to stop.");
|
|
221
|
+
(0, processCheck_1.cleanupPidFile)();
|
|
222
|
+
}
|
|
223
|
+
// Start the service again in the background
|
|
224
|
+
console.log("Starting claude code router service...");
|
|
225
|
+
const cliPath = node_path_1.default.join(__dirname, "cli.js");
|
|
226
|
+
const startProcess = (0, child_process_1.spawn)("node", [cliPath, "start"], {
|
|
227
|
+
detached: true,
|
|
228
|
+
stdio: "ignore",
|
|
229
|
+
});
|
|
230
|
+
startProcess.on("error", (error) => {
|
|
231
|
+
console.error("Failed to start service:", error);
|
|
232
|
+
throw error;
|
|
233
|
+
});
|
|
234
|
+
startProcess.unref();
|
|
235
|
+
console.log("✅ Service started successfully in the background.");
|
|
236
|
+
};
|
|
237
|
+
exports.restartService = restartService;
|
|
238
|
+
/**
|
|
239
|
+
* Get a temporary path for the settings file
|
|
240
|
+
* Hash the content and return the file path if it already exists in temp directory,
|
|
241
|
+
* otherwise create a new file with the content
|
|
242
|
+
* @param content Settings content string
|
|
243
|
+
* @returns Full path to the temporary file
|
|
244
|
+
*/
|
|
245
|
+
const getSettingsPath = async (content) => {
|
|
246
|
+
// Hash the content using SHA256 algorithm
|
|
247
|
+
const hash = (0, node_crypto_1.createHash)('sha256').update(content, 'utf-8').digest('hex');
|
|
248
|
+
// Create claude-code-router directory in system temp folder
|
|
249
|
+
const tempDir = node_path_1.default.join(node_os_1.default.tmpdir(), 'claude-code-router');
|
|
250
|
+
const fileName = `ccr-settings-${hash}.json`;
|
|
251
|
+
const tempFilePath = node_path_1.default.join(tempDir, fileName);
|
|
252
|
+
// Ensure the directory exists
|
|
253
|
+
try {
|
|
254
|
+
await promises_1.default.access(tempDir);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
await promises_1.default.mkdir(tempDir, { recursive: true });
|
|
258
|
+
}
|
|
259
|
+
// Check if the file already exists
|
|
260
|
+
try {
|
|
261
|
+
await promises_1.default.access(tempFilePath);
|
|
262
|
+
return tempFilePath;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// File doesn't exist, create and write content
|
|
266
|
+
await promises_1.default.writeFile(tempFilePath, content, 'utf-8');
|
|
267
|
+
return tempFilePath;
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
exports.getSettingsPath = getSettingsPath;
|
|
271
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install preset from GitHub marketplace
|
|
3
|
+
* ccr install {presetname}
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Install preset from marketplace by preset name
|
|
7
|
+
* @param presetName Preset name (must exist in marketplace)
|
|
8
|
+
*/
|
|
9
|
+
export declare function handleInstallCommand(presetName: string): Promise<void>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Install preset from GitHub marketplace
|
|
4
|
+
* ccr install {presetname}
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.handleInstallCommand = handleInstallCommand;
|
|
8
|
+
const install_github_1 = require("./preset/install-github");
|
|
9
|
+
const install_1 = require("./preset/install");
|
|
10
|
+
// ANSI color codes
|
|
11
|
+
const RESET = "\x1B[0m";
|
|
12
|
+
const GREEN = "\x1B[32m";
|
|
13
|
+
const YELLOW = "\x1B[33m";
|
|
14
|
+
const BOLDGREEN = "\x1B[1m\x1B[32m";
|
|
15
|
+
const BOLDYELLOW = "\x1B[1m\x1B[33m";
|
|
16
|
+
const BOLDCYAN = "\x1B[1m\x1B[36m";
|
|
17
|
+
const DIM = "\x1B[2m";
|
|
18
|
+
/**
|
|
19
|
+
* Install preset from marketplace by preset name
|
|
20
|
+
* @param presetName Preset name (must exist in marketplace)
|
|
21
|
+
*/
|
|
22
|
+
async function handleInstallCommand(presetName) {
|
|
23
|
+
try {
|
|
24
|
+
if (!presetName) {
|
|
25
|
+
console.error(`\n${BOLDYELLOW}Error:${RESET} Preset name is required\n`);
|
|
26
|
+
console.error('Usage: ccr install <preset-name>\n');
|
|
27
|
+
console.error('Examples:');
|
|
28
|
+
console.error(' ccr install my-preset');
|
|
29
|
+
console.error(' ccr install awesome-preset\n');
|
|
30
|
+
console.error(`${DIM}Note: Preset must exist in the official marketplace.${RESET}\n`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
console.log(`${BOLDCYAN}Installing preset:${RESET} ${presetName}\n`);
|
|
34
|
+
// Install preset (download and extract)
|
|
35
|
+
const { name: installedName, preset } = await (0, install_github_1.installPresetFromMarket)(presetName);
|
|
36
|
+
if (installedName && preset) {
|
|
37
|
+
// Apply preset configuration (interactive setup)
|
|
38
|
+
await (0, install_1.applyPresetCli)(installedName, preset);
|
|
39
|
+
console.log(`\n${BOLDGREEN}✓ Preset installation completed!${RESET}\n`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(`\n${BOLDYELLOW}Failed to install preset:${RESET} ${error.message}\n`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=installCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installCommand.js","sourceRoot":"","sources":["../../src/utils/installCommand.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkBH,oDA4BC;AA5CD,4DAAkE;AAClE,8CAAkD;AAElD,mBAAmB;AACnB,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AACnC,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IAC3D,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,UAAU,SAAS,KAAK,4BAA4B,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,uDAAuD,KAAK,IAAI,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,qBAAqB,KAAK,IAAI,UAAU,IAAI,CAAC,CAAC;QAErE,wCAAwC;QACxC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,wCAAuB,EAAC,UAAU,CAAC,CAAC;QAElF,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;YAC5B,iDAAiD;YACjD,MAAM,IAAA,wBAAc,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAE5C,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,mCAAmC,KAAK,IAAI,CAAC,CAAC;QAC1E,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,UAAU,4BAA4B,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runModelSelector(): Promise<void>;
|