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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/dist/README.md +763 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +1193 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.html +225 -0
  7. package/dist/index.js +1539 -0
  8. package/dist/package.json +31 -0
  9. package/dist/tiktoken_bg.wasm +0 -0
  10. package/dist/utils/activateCommand.d.ts +4 -0
  11. package/dist/utils/activateCommand.js +24 -0
  12. package/dist/utils/activateCommand.js.map +1 -0
  13. package/dist/utils/claudeSettings.d.ts +12 -0
  14. package/dist/utils/claudeSettings.js +188 -0
  15. package/dist/utils/claudeSettings.js.map +1 -0
  16. package/dist/utils/codeCommand.d.ts +13 -0
  17. package/dist/utils/codeCommand.js +88 -0
  18. package/dist/utils/codeCommand.js.map +1 -0
  19. package/dist/utils/createEnvVariables.d.ts +5 -0
  20. package/dist/utils/createEnvVariables.js +83 -0
  21. package/dist/utils/createEnvVariables.js.map +1 -0
  22. package/dist/utils/index.d.ts +15 -0
  23. package/dist/utils/index.js +271 -0
  24. package/dist/utils/index.js.map +1 -0
  25. package/dist/utils/installCommand.d.ts +9 -0
  26. package/dist/utils/installCommand.js +47 -0
  27. package/dist/utils/installCommand.js.map +1 -0
  28. package/dist/utils/modelSelector.d.ts +1 -0
  29. package/dist/utils/modelSelector.js +402 -0
  30. package/dist/utils/modelSelector.js.map +1 -0
  31. package/dist/utils/preset/commands.d.ts +8 -0
  32. package/dist/utils/preset/commands.js +267 -0
  33. package/dist/utils/preset/commands.js.map +1 -0
  34. package/dist/utils/preset/export.d.ts +11 -0
  35. package/dist/utils/preset/export.js +97 -0
  36. package/dist/utils/preset/export.js.map +1 -0
  37. package/dist/utils/preset/index.d.ts +8 -0
  38. package/dist/utils/preset/index.js +32 -0
  39. package/dist/utils/preset/index.js.map +1 -0
  40. package/dist/utils/preset/install-github.d.ts +13 -0
  41. package/dist/utils/preset/install-github.js +161 -0
  42. package/dist/utils/preset/install-github.js.map +1 -0
  43. package/dist/utils/preset/install.d.ts +19 -0
  44. package/dist/utils/preset/install.js +239 -0
  45. package/dist/utils/preset/install.js.map +1 -0
  46. package/dist/utils/processCheck.d.ts +17 -0
  47. package/dist/utils/processCheck.js +161 -0
  48. package/dist/utils/processCheck.js.map +1 -0
  49. package/dist/utils/prompt/schema-input.d.ts +26 -0
  50. package/dist/utils/prompt/schema-input.js +183 -0
  51. package/dist/utils/prompt/schema-input.js.map +1 -0
  52. package/dist/utils/status.d.ts +1 -0
  53. package/dist/utils/status.js +28 -0
  54. package/dist/utils/status.js.map +1 -0
  55. package/dist/utils/statusline.d.ts +61 -0
  56. package/dist/utils/statusline.js +924 -0
  57. package/dist/utils/statusline.js.map +1 -0
  58. package/dist/utils/update.d.ts +18 -0
  59. package/dist/utils/update.js +74 -0
  60. package/dist/utils/update.js.map +1 -0
  61. package/package.json +25 -4
@@ -0,0 +1,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,4 @@
1
+ /**
2
+ * Execute the env command
3
+ */
4
+ export declare const activateCommand: () => Promise<void>;
@@ -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,5 @@
1
+ /**
2
+ * Get environment variables for Agent SDK/Claude Code integration
3
+ * This function is shared between `ccr env` and `ccr code` commands
4
+ */
5
+ export declare const createEnvVariables: () => Promise<Record<string, string | undefined>>;
@@ -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>;