@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,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wengine-ai/claude-code-router",
|
|
3
|
+
"version": "2.0.56",
|
|
4
|
+
"description": "CLI for Claude Code Router",
|
|
5
|
+
"bin": {
|
|
6
|
+
"ccr": "dist/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [
|
|
9
|
+
"claude",
|
|
10
|
+
"code",
|
|
11
|
+
"router",
|
|
12
|
+
"cli"
|
|
13
|
+
],
|
|
14
|
+
"author": "musistudio",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@wengine-ai/llms": "^2.0.53",
|
|
18
|
+
"lru-cache": "^11.2.2"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist/*",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"node": ">=18.0.0"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.activateCommand = void 0;
|
|
4
|
+
const createEnvVariables_1 = require("./createEnvVariables");
|
|
5
|
+
/**
|
|
6
|
+
* Execute the env command
|
|
7
|
+
*/
|
|
8
|
+
const activateCommand = async () => {
|
|
9
|
+
const envVars = await (0, createEnvVariables_1.createEnvVariables)();
|
|
10
|
+
// Output in shell-friendly format for eval
|
|
11
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
12
|
+
if (value === "") {
|
|
13
|
+
console.log(`export ${key}=""`);
|
|
14
|
+
}
|
|
15
|
+
else if (value === undefined) {
|
|
16
|
+
console.log(`unset ${key}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.log(`export ${key}="${value}"`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.activateCommand = activateCommand;
|
|
24
|
+
//# sourceMappingURL=activateCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activateCommand.js","sourceRoot":"","sources":["../../src/utils/activateCommand.ts"],"names":[],"mappings":";;;AAAA,6DAA0D;AAE1D;;GAEG;AACI,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;IACxC,MAAM,OAAO,GAAG,MAAM,IAAA,uCAAkB,GAAE,CAAC;IAE3C,2CAA2C;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAbY,QAAA,eAAe,mBAa3B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function injectStatusLine(config: any): void;
|
|
2
|
+
export declare function removeStatusLine(): void;
|
|
3
|
+
/**
|
|
4
|
+
* Inject model family names into Claude Code settings.
|
|
5
|
+
* When families are configured, set model env vars to ccr-opus/ccr-sonnet/ccr-haiku
|
|
6
|
+
* Optionally append [1m] for extended context (1M window) support.
|
|
7
|
+
*/
|
|
8
|
+
export declare function injectModelFamilies(config: any): void;
|
|
9
|
+
/**
|
|
10
|
+
* Restore original model env vars in Claude Code settings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function removeModelFamilies(): void;
|
|
@@ -0,0 +1,188 @@
|
|
|
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.injectStatusLine = injectStatusLine;
|
|
7
|
+
exports.removeStatusLine = removeStatusLine;
|
|
8
|
+
exports.injectModelFamilies = injectModelFamilies;
|
|
9
|
+
exports.removeModelFamilies = removeModelFamilies;
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
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_SETTINGS_PATH = node_path_1.default.join(node_os_1.default.homedir(), ".claude", "settings.json");
|
|
15
|
+
const BACKUP_PATH = node_path_1.default.join(claude_code_router_shared_1.HOME_DIR, ".statusline-backup.json");
|
|
16
|
+
const MODEL_BACKUP_PATH = node_path_1.default.join(claude_code_router_shared_1.HOME_DIR, ".model-env-backup.json");
|
|
17
|
+
function readClaudeSettings() {
|
|
18
|
+
try {
|
|
19
|
+
const content = node_fs_1.default.readFileSync(CLAUDE_SETTINGS_PATH, "utf-8");
|
|
20
|
+
return JSON.parse(content);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function writeClaudeSettings(settings) {
|
|
27
|
+
const dir = node_path_1.default.dirname(CLAUDE_SETTINGS_PATH);
|
|
28
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
29
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
node_fs_1.default.writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2), "utf-8");
|
|
32
|
+
}
|
|
33
|
+
function injectStatusLine(config) {
|
|
34
|
+
if (!config?.StatusLine?.enabled)
|
|
35
|
+
return;
|
|
36
|
+
const settings = readClaudeSettings();
|
|
37
|
+
// Backup existing statusLine if present and not already a ccr one
|
|
38
|
+
if (settings.statusLine && settings.statusLine.command !== "ccr statusline") {
|
|
39
|
+
node_fs_1.default.writeFileSync(BACKUP_PATH, JSON.stringify(settings.statusLine), "utf-8");
|
|
40
|
+
}
|
|
41
|
+
settings.statusLine = {
|
|
42
|
+
type: "command",
|
|
43
|
+
command: "ccr statusline",
|
|
44
|
+
padding: 0,
|
|
45
|
+
};
|
|
46
|
+
writeClaudeSettings(settings);
|
|
47
|
+
}
|
|
48
|
+
function removeStatusLine() {
|
|
49
|
+
const settings = readClaudeSettings();
|
|
50
|
+
// Only remove if it's ours
|
|
51
|
+
if (settings.statusLine?.command !== "ccr statusline")
|
|
52
|
+
return;
|
|
53
|
+
// Restore backup if exists
|
|
54
|
+
try {
|
|
55
|
+
const backup = node_fs_1.default.readFileSync(BACKUP_PATH, "utf-8");
|
|
56
|
+
settings.statusLine = JSON.parse(backup);
|
|
57
|
+
node_fs_1.default.unlinkSync(BACKUP_PATH);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
delete settings.statusLine;
|
|
61
|
+
}
|
|
62
|
+
writeClaudeSettings(settings);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if families are configured and need model name injection
|
|
66
|
+
*/
|
|
67
|
+
function hasFamiliesConfig(config) {
|
|
68
|
+
const families = config?.Router?.families;
|
|
69
|
+
if (!families || typeof families !== "object")
|
|
70
|
+
return false;
|
|
71
|
+
return Object.keys(families).length > 0;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a family has extendedContext (1M) enabled
|
|
75
|
+
*/
|
|
76
|
+
function hasExtendedContext(familyConfig) {
|
|
77
|
+
return familyConfig?.enableExtendedContext === true;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Inject model family names into Claude Code settings.
|
|
81
|
+
* When families are configured, set model env vars to ccr-opus/ccr-sonnet/ccr-haiku
|
|
82
|
+
* Optionally append [1m] for extended context (1M window) support.
|
|
83
|
+
*/
|
|
84
|
+
function injectModelFamilies(config) {
|
|
85
|
+
if (!hasFamiliesConfig(config))
|
|
86
|
+
return;
|
|
87
|
+
const families = config.Router.families;
|
|
88
|
+
const settings = readClaudeSettings();
|
|
89
|
+
if (!settings.env)
|
|
90
|
+
settings.env = {};
|
|
91
|
+
// Set proxy base URL and API key so plain `claude` commands route through CCR
|
|
92
|
+
const port = config.PORT || 3456;
|
|
93
|
+
const apiKey = config.APIKEY || "test";
|
|
94
|
+
settings.env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${port}`;
|
|
95
|
+
settings.env.ANTHROPIC_AUTH_TOKEN = apiKey;
|
|
96
|
+
// Backup original model env vars
|
|
97
|
+
const backup = {};
|
|
98
|
+
const envKeys = [
|
|
99
|
+
"ANTHROPIC_MODEL",
|
|
100
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
101
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
102
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
103
|
+
"ANTHROPIC_REASONING_MODEL",
|
|
104
|
+
];
|
|
105
|
+
let hasExisting = false;
|
|
106
|
+
for (const key of envKeys) {
|
|
107
|
+
if (settings.env[key] && !settings.env[key].startsWith("ccr-")) {
|
|
108
|
+
backup[key] = settings.env[key];
|
|
109
|
+
hasExisting = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (hasExisting) {
|
|
113
|
+
node_fs_1.default.writeFileSync(MODEL_BACKUP_PATH, JSON.stringify(backup), "utf-8");
|
|
114
|
+
}
|
|
115
|
+
// Set model env vars to ccr-family format with optional [1m] suffix
|
|
116
|
+
const familyNames = Object.keys(families);
|
|
117
|
+
let primaryFamily = null;
|
|
118
|
+
for (const family of familyNames) {
|
|
119
|
+
const familyConfig = families[family];
|
|
120
|
+
const extendedSuffix = hasExtendedContext(familyConfig) ? "[1m]" : "";
|
|
121
|
+
const ccrModel = `ccr-${family}${extendedSuffix}`;
|
|
122
|
+
switch (family) {
|
|
123
|
+
case "opus":
|
|
124
|
+
settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = ccrModel;
|
|
125
|
+
if (!primaryFamily)
|
|
126
|
+
primaryFamily = "opus";
|
|
127
|
+
break;
|
|
128
|
+
case "sonnet":
|
|
129
|
+
settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = ccrModel;
|
|
130
|
+
if (!primaryFamily)
|
|
131
|
+
primaryFamily = "sonnet";
|
|
132
|
+
break;
|
|
133
|
+
case "haiku":
|
|
134
|
+
settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = ccrModel;
|
|
135
|
+
if (!primaryFamily)
|
|
136
|
+
primaryFamily = "haiku";
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Set main model to sonnet (official default), fallback to first configured family
|
|
141
|
+
const defaultFamily = families["sonnet"] ? "sonnet" : primaryFamily;
|
|
142
|
+
if (defaultFamily) {
|
|
143
|
+
const defaultConfig = families[defaultFamily];
|
|
144
|
+
const extendedSuffix = hasExtendedContext(defaultConfig) ? "[1m]" : "";
|
|
145
|
+
settings.env.ANTHROPIC_MODEL = `ccr-${defaultFamily}${extendedSuffix}`;
|
|
146
|
+
}
|
|
147
|
+
// Set reasoning model to first family with think config, or first family
|
|
148
|
+
const thinkFamily = familyNames.find((f) => families[f]?.think);
|
|
149
|
+
if (thinkFamily) {
|
|
150
|
+
const thinkConfig = families[thinkFamily];
|
|
151
|
+
const extendedSuffix = hasExtendedContext(thinkConfig) ? "[1m]" : "";
|
|
152
|
+
settings.env.ANTHROPIC_REASONING_MODEL = `ccr-${thinkFamily}${extendedSuffix}`;
|
|
153
|
+
}
|
|
154
|
+
else if (primaryFamily) {
|
|
155
|
+
const primaryConfig = families[primaryFamily];
|
|
156
|
+
const extendedSuffix = hasExtendedContext(primaryConfig) ? "[1m]" : "";
|
|
157
|
+
settings.env.ANTHROPIC_REASONING_MODEL = `ccr-${primaryFamily}${extendedSuffix}`;
|
|
158
|
+
}
|
|
159
|
+
writeClaudeSettings(settings);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Restore original model env vars in Claude Code settings.
|
|
163
|
+
*/
|
|
164
|
+
function removeModelFamilies() {
|
|
165
|
+
const settings = readClaudeSettings();
|
|
166
|
+
// Restore backup if exists
|
|
167
|
+
try {
|
|
168
|
+
const backup = JSON.parse(node_fs_1.default.readFileSync(MODEL_BACKUP_PATH, "utf-8"));
|
|
169
|
+
if (!settings.env)
|
|
170
|
+
settings.env = {};
|
|
171
|
+
for (const [key, value] of Object.entries(backup)) {
|
|
172
|
+
settings.env[key] = value;
|
|
173
|
+
}
|
|
174
|
+
node_fs_1.default.unlinkSync(MODEL_BACKUP_PATH);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// No backup, remove ccr- prefixed values
|
|
178
|
+
if (settings.env) {
|
|
179
|
+
for (const key of Object.keys(settings.env)) {
|
|
180
|
+
if (typeof settings.env[key] === "string" && settings.env[key].startsWith("ccr-")) {
|
|
181
|
+
delete settings.env[key];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
writeClaudeSettings(settings);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=claudeSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeSettings.js","sourceRoot":"","sources":["../../src/utils/claudeSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface PresetConfig {
|
|
2
|
+
noServer?: boolean;
|
|
3
|
+
claudeCodeSettings?: {
|
|
4
|
+
env?: Record<string, any>;
|
|
5
|
+
statusLine?: any;
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
};
|
|
8
|
+
provider?: string;
|
|
9
|
+
router?: Record<string, any>;
|
|
10
|
+
StatusLine?: any;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
export declare function executeCodeCommand(args?: string[], presetConfig?: PresetConfig | null, envOverrides?: Record<string, string>, presetName?: string): Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeCodeCommand = executeCodeCommand;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const _1 = require(".");
|
|
6
|
+
const processCheck_1 = require("./processCheck");
|
|
7
|
+
const createEnvVariables_1 = require("./createEnvVariables");
|
|
8
|
+
async function executeCodeCommand(args = [], presetConfig, envOverrides, presetName // Preset name for statusline command
|
|
9
|
+
) {
|
|
10
|
+
// Set environment variables using shared function
|
|
11
|
+
const config = await (0, _1.readConfigFile)();
|
|
12
|
+
const env = await (0, createEnvVariables_1.createEnvVariables)();
|
|
13
|
+
// Apply environment variable overrides (from preset's provider configuration)
|
|
14
|
+
if (envOverrides) {
|
|
15
|
+
Object.assign(env, envOverrides);
|
|
16
|
+
}
|
|
17
|
+
// Build settingsFlag
|
|
18
|
+
let settingsFlag = {
|
|
19
|
+
env: env
|
|
20
|
+
};
|
|
21
|
+
// Add statusLine configuration
|
|
22
|
+
// Priority: preset.StatusLine > global config.StatusLine
|
|
23
|
+
const statusLineConfig = presetConfig?.StatusLine || config?.StatusLine;
|
|
24
|
+
if (statusLineConfig?.enabled) {
|
|
25
|
+
// If using preset, pass preset name to statusline command
|
|
26
|
+
const statuslineCommand = presetName
|
|
27
|
+
? `ccr statusline ${presetName}`
|
|
28
|
+
: "ccr statusline";
|
|
29
|
+
settingsFlag.statusLine = {
|
|
30
|
+
type: "command",
|
|
31
|
+
command: statuslineCommand,
|
|
32
|
+
padding: 0,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Merge claudeCodeSettings from preset into settingsFlag
|
|
36
|
+
if (presetConfig?.claudeCodeSettings) {
|
|
37
|
+
settingsFlag = {
|
|
38
|
+
...settingsFlag,
|
|
39
|
+
...presetConfig.claudeCodeSettings,
|
|
40
|
+
// Deep merge env
|
|
41
|
+
env: {
|
|
42
|
+
...settingsFlag.env,
|
|
43
|
+
...presetConfig.claudeCodeSettings.env,
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Non-interactive mode for automation environments
|
|
48
|
+
if (config.NON_INTERACTIVE_MODE) {
|
|
49
|
+
settingsFlag.env = {
|
|
50
|
+
...settingsFlag.env,
|
|
51
|
+
CI: "true",
|
|
52
|
+
FORCE_COLOR: "0",
|
|
53
|
+
NODE_NO_READLINE: "1",
|
|
54
|
+
TERM: "dumb"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const settingsFile = await (0, _1.getSettingsPath)(`${JSON.stringify(settingsFlag)}`);
|
|
58
|
+
args.push('--settings', settingsFile);
|
|
59
|
+
// Increment reference count when command starts
|
|
60
|
+
(0, processCheck_1.incrementReferenceCount)();
|
|
61
|
+
// Execute claude command
|
|
62
|
+
const claudePath = config?.CLAUDE_PATH || process.env.CLAUDE_PATH || "claude";
|
|
63
|
+
const stdioConfig = config.NON_INTERACTIVE_MODE
|
|
64
|
+
? ["pipe", "inherit", "inherit"] // Pipe stdin for non-interactive
|
|
65
|
+
: "inherit"; // Default inherited behavior
|
|
66
|
+
const claudeProcess = (0, child_process_1.spawn)(claudePath, args, {
|
|
67
|
+
env: {
|
|
68
|
+
...process.env,
|
|
69
|
+
},
|
|
70
|
+
stdio: stdioConfig,
|
|
71
|
+
});
|
|
72
|
+
// Close stdin for non-interactive mode
|
|
73
|
+
if (config.NON_INTERACTIVE_MODE) {
|
|
74
|
+
claudeProcess.stdin?.end();
|
|
75
|
+
}
|
|
76
|
+
claudeProcess.on("error", (error) => {
|
|
77
|
+
console.error("Failed to start claude command:", error.message);
|
|
78
|
+
console.log("Make sure Claude Code is installed: npm install -g @anthropic-ai/claude-code");
|
|
79
|
+
(0, processCheck_1.decrementReferenceCount)();
|
|
80
|
+
process.exit(1);
|
|
81
|
+
});
|
|
82
|
+
claudeProcess.on("close", (code) => {
|
|
83
|
+
(0, processCheck_1.decrementReferenceCount)();
|
|
84
|
+
(0, processCheck_1.closeService)();
|
|
85
|
+
process.exit(code || 0);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=codeCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeCommand.js","sourceRoot":"","sources":["../../src/utils/codeCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEnvVariables = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
function hasExtendedContext(familyConfig) {
|
|
6
|
+
return familyConfig?.enableExtendedContext === true;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Inject model family env vars when families are configured in CCR.
|
|
10
|
+
* This ensures `ccr code` uses the correct ccr-* model names for routing,
|
|
11
|
+
* regardless of what's in ~/.claude/settings.json.
|
|
12
|
+
*/
|
|
13
|
+
function getModelEnvVars(config) {
|
|
14
|
+
const families = config?.Router?.families;
|
|
15
|
+
if (!families || typeof families !== "object")
|
|
16
|
+
return {};
|
|
17
|
+
const familyNames = Object.keys(families);
|
|
18
|
+
if (familyNames.length === 0)
|
|
19
|
+
return {};
|
|
20
|
+
const env = {};
|
|
21
|
+
let primaryFamily = null;
|
|
22
|
+
for (const family of familyNames) {
|
|
23
|
+
const familyConfig = families[family];
|
|
24
|
+
const extendedSuffix = hasExtendedContext(familyConfig) ? "[1m]" : "";
|
|
25
|
+
const ccrModel = `ccr-${family}${extendedSuffix}`;
|
|
26
|
+
switch (family) {
|
|
27
|
+
case "opus":
|
|
28
|
+
env.ANTHROPIC_DEFAULT_OPUS_MODEL = ccrModel;
|
|
29
|
+
if (!primaryFamily)
|
|
30
|
+
primaryFamily = "opus";
|
|
31
|
+
break;
|
|
32
|
+
case "sonnet":
|
|
33
|
+
env.ANTHROPIC_DEFAULT_SONNET_MODEL = ccrModel;
|
|
34
|
+
if (!primaryFamily)
|
|
35
|
+
primaryFamily = "sonnet";
|
|
36
|
+
break;
|
|
37
|
+
case "haiku":
|
|
38
|
+
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = ccrModel;
|
|
39
|
+
if (!primaryFamily)
|
|
40
|
+
primaryFamily = "haiku";
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (primaryFamily) {
|
|
45
|
+
// Default to sonnet (Claude Code official default), fallback to first configured family
|
|
46
|
+
const defaultFamily = families["sonnet"] ? "sonnet" : primaryFamily;
|
|
47
|
+
const defaultConfig = families[defaultFamily];
|
|
48
|
+
const extendedSuffix = hasExtendedContext(defaultConfig) ? "[1m]" : "";
|
|
49
|
+
env.ANTHROPIC_MODEL = `ccr-${defaultFamily}${extendedSuffix}`;
|
|
50
|
+
const thinkFamily = familyNames.find((f) => families[f]?.think);
|
|
51
|
+
if (thinkFamily) {
|
|
52
|
+
const thinkConfig = families[thinkFamily];
|
|
53
|
+
const thinkExtendedSuffix = hasExtendedContext(thinkConfig) ? "[1m]" : "";
|
|
54
|
+
env.ANTHROPIC_REASONING_MODEL = `ccr-${thinkFamily}${thinkExtendedSuffix}`;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
env.ANTHROPIC_REASONING_MODEL = `ccr-${defaultFamily}${extendedSuffix}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return env;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get environment variables for Agent SDK/Claude Code integration
|
|
64
|
+
* This function is shared between `ccr env` and `ccr code` commands
|
|
65
|
+
*/
|
|
66
|
+
const createEnvVariables = async () => {
|
|
67
|
+
const config = await (0, _1.readConfigFile)();
|
|
68
|
+
const port = config.PORT || 3456;
|
|
69
|
+
const apiKey = config.APIKEY || "test";
|
|
70
|
+
return {
|
|
71
|
+
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
72
|
+
ANTHROPIC_BASE_URL: `http://127.0.0.1:${port}`,
|
|
73
|
+
NO_PROXY: "127.0.0.1",
|
|
74
|
+
DISABLE_TELEMETRY: "true",
|
|
75
|
+
DISABLE_COST_WARNINGS: "true",
|
|
76
|
+
API_TIMEOUT_MS: String(config.API_TIMEOUT_MS ?? 600000),
|
|
77
|
+
// Reset CLAUDE_CODE_USE_BEDROCK when running with ccr
|
|
78
|
+
CLAUDE_CODE_USE_BEDROCK: undefined,
|
|
79
|
+
...getModelEnvVars(config),
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
exports.createEnvVariables = createEnvVariables;
|
|
83
|
+
//# sourceMappingURL=createEnvVariables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createEnvVariables.js","sourceRoot":"","sources":["../../src/utils/createEnvVariables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const initDir: () => Promise<void>;
|
|
2
|
+
export declare const readConfigFile: () => Promise<any>;
|
|
3
|
+
export declare const backupConfigFile: () => Promise<string | null>;
|
|
4
|
+
export declare const writeConfigFile: (config: any) => Promise<void>;
|
|
5
|
+
export declare const initConfig: () => Promise<any>;
|
|
6
|
+
export declare const run: (args?: string[]) => Promise<void>;
|
|
7
|
+
export declare const restartService: () => Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Get a temporary path for the settings file
|
|
10
|
+
* Hash the content and return the file path if it already exists in temp directory,
|
|
11
|
+
* otherwise create a new file with the content
|
|
12
|
+
* @param content Settings content string
|
|
13
|
+
* @returns Full path to the temporary file
|
|
14
|
+
*/
|
|
15
|
+
export declare const getSettingsPath: (content: string) => Promise<string>;
|