@halilertekin/claude-code-router-config 2.0.4 → 2.0.6
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/CHANGELOG.md +7 -1
- package/README.md +2 -2
- package/cli/commands.js +12 -2
- package/package.json +1 -1
- package/router/server.js +16 -0
- package/setup-glm.sh +20 -7
- package/web-dashboard/public/index.html +1 -1
- package/web-dashboard/public/js/dashboard.js +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2.0.
|
|
3
|
+
## 2.0.6
|
|
4
|
+
- UI sürüm etiketi artık paket versiyonunu gösteriyor.
|
|
5
|
+
- Dashboard dil dosyalarındaki hatalı virgüller düzeltildi (dil seçimi ve sağlayıcı listesi geri geldi).
|
|
6
|
+
- `ccr activate` artık yapılandırılan env dosyasını (`CCR_ENV_PATH`) export ediyor.
|
|
7
|
+
- GLM wrapper: z.ai için doğru auth/timeout/model eşlemeleri ve python3 fallback.
|
|
8
|
+
|
|
9
|
+
## 2.0.5
|
|
4
10
|
- UI üzerinden `.env` anahtarları ekleme/güncelleme eklendi.
|
|
5
11
|
- API tarafına `GET/POST /api/env` eklendi.
|
|
6
12
|
|
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Claude Code Router Config - Advanced Multi-Provider Setup
|
|
2
2
|
|
|
3
|
-
🚀 **v2.0.
|
|
3
|
+
🚀 **v2.0.6** - Unified router + config package with z.ai (GLM 4.7) support, advanced CLI tools, analytics, smart routing, and configuration templates!
|
|
4
4
|
|
|
5
5
|
Use Claude Code as a single interface to access multiple AI providers with intelligent routing for optimal performance, cost, and quality.
|
|
6
6
|
|
|
7
|
-
## ✨ New in v2.0.
|
|
7
|
+
## ✨ New in v2.0.6
|
|
8
8
|
- UI üzerinden `.env` anahtarları ekleme/güncelleme (TR/NL).
|
|
9
9
|
- `~/.env` otomatik yükleme ile API anahtarlarının bulunması (CLI + health monitor).
|
|
10
10
|
- **z.ai Support**: Native integration for GLM-4.7 via z.ai (PPInfra).
|
package/cli/commands.js
CHANGED
|
@@ -5,7 +5,7 @@ const os = require('os');
|
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const { spawn } = require('child_process');
|
|
7
7
|
const chalk = require('./chalk-safe');
|
|
8
|
-
const { resolveProviderKey } = require('../router/config');
|
|
8
|
+
const { resolveProviderKey, readEnvFile } = require('../router/config');
|
|
9
9
|
const configPath = path.join(os.homedir(), '.claude-code-router');
|
|
10
10
|
const pidFile = path.join(configPath, 'router.pid');
|
|
11
11
|
const serverScript = path.join(__dirname, '..', 'router', 'server.js');
|
|
@@ -20,6 +20,12 @@ function loadConfig() {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
function formatEnvValue(value) {
|
|
24
|
+
const safe = /^[A-Za-z0-9_./:@-]+$/.test(value);
|
|
25
|
+
if (safe) return value;
|
|
26
|
+
return JSON.stringify(value);
|
|
27
|
+
}
|
|
28
|
+
|
|
23
29
|
function readPid() {
|
|
24
30
|
if (!fs.existsSync(pidFile)) return null;
|
|
25
31
|
const pid = parseInt(fs.readFileSync(pidFile, 'utf8'), 10);
|
|
@@ -392,7 +398,11 @@ async function main() {
|
|
|
392
398
|
case 'activate': {
|
|
393
399
|
const config = loadConfig();
|
|
394
400
|
const port = config.PORT || 3456;
|
|
395
|
-
|
|
401
|
+
const { entries } = readEnvFile();
|
|
402
|
+
Object.entries(entries).forEach(([key, value]) => {
|
|
403
|
+
if (value === undefined) return;
|
|
404
|
+
console.log(`export ${key}=${formatEnvValue(String(value))}`);
|
|
405
|
+
});
|
|
396
406
|
console.log(`export ANTHROPIC_BASE_URL="http://127.0.0.1:${port}"`);
|
|
397
407
|
console.log('export NO_PROXY="127.0.0.1"');
|
|
398
408
|
break;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@halilertekin/claude-code-router-config",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "Multi-provider configuration for Claude Code Router with intent-based routing, advanced CLI tools, analytics, and smart routing. Setup OpenAI, Anthropic, Gemini, Qwen, GLM, OpenRouter, and GitHub Copilot with intelligent routing.",
|
|
5
5
|
"main": "install.js",
|
|
6
6
|
"bin": {
|
package/router/server.js
CHANGED
|
@@ -518,6 +518,22 @@ function setupApi(app) {
|
|
|
518
518
|
|
|
519
519
|
function setupUi(app) {
|
|
520
520
|
const uiRoot = path.join(__dirname, '..', 'web-dashboard', 'public');
|
|
521
|
+
const indexPath = path.join(uiRoot, 'index.html');
|
|
522
|
+
|
|
523
|
+
const renderIndex = () => {
|
|
524
|
+
const version = require('../package.json').version;
|
|
525
|
+
const html = fs.readFileSync(indexPath, 'utf8');
|
|
526
|
+
return html.replace(/__CCR_VERSION__/g, version);
|
|
527
|
+
};
|
|
528
|
+
|
|
529
|
+
app.get(['/ui', '/ui/', '/ui/index.html'], (req, res, next) => {
|
|
530
|
+
try {
|
|
531
|
+
res.type('html').send(renderIndex());
|
|
532
|
+
} catch (error) {
|
|
533
|
+
next(error);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
|
|
521
537
|
app.use('/ui', express.static(uiRoot));
|
|
522
538
|
app.get('/', (req, res) => res.redirect('/ui'));
|
|
523
539
|
}
|
package/setup-glm.sh
CHANGED
|
@@ -6,6 +6,10 @@ CONFIG_DIR="$HOME/.claude-code-router"
|
|
|
6
6
|
BIN_DIR="$HOME/.local/bin"
|
|
7
7
|
KEYS_FILE="$CONFIG_DIR/keys.env"
|
|
8
8
|
ZSHRC="${HOME}/.zshrc"
|
|
9
|
+
PYTHON_BIN="python"
|
|
10
|
+
if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then
|
|
11
|
+
PYTHON_BIN="python3"
|
|
12
|
+
fi
|
|
9
13
|
|
|
10
14
|
GLM_KEY="${GLM_API_KEY:-}"
|
|
11
15
|
SKIP_INSTALL=0
|
|
@@ -188,14 +192,23 @@ if ! port_open; then
|
|
|
188
192
|
exit 1
|
|
189
193
|
fi
|
|
190
194
|
|
|
195
|
+
export CCR_ENV_PATH="$KEYS_FILE"
|
|
191
196
|
eval "$(ccr activate)"
|
|
192
197
|
|
|
193
|
-
|
|
194
|
-
export
|
|
195
|
-
export
|
|
196
|
-
|
|
197
|
-
export
|
|
198
|
-
export
|
|
198
|
+
# Ensure Claude Code doesn't fall back to Claude Pro when glm is requested.
|
|
199
|
+
export ANTHROPIC_AUTH_TOKEN="${GLM_API_KEY}"
|
|
200
|
+
export ANTHROPIC_API_KEY="${GLM_API_KEY}"
|
|
201
|
+
|
|
202
|
+
export ANTHROPIC_BASE_URL="http://127.0.0.1:3456"
|
|
203
|
+
export NO_PROXY="127.0.0.1"
|
|
204
|
+
export API_TIMEOUT_MS="${API_TIMEOUT_MS:-3000000}"
|
|
205
|
+
|
|
206
|
+
export ANTHROPIC_MODEL="${ANTHROPIC_MODEL:-glm,glm-4.7}"
|
|
207
|
+
export ANTHROPIC_DEFAULT_OPUS_MODEL="${ANTHROPIC_DEFAULT_OPUS_MODEL:-glm,glm-4.7}"
|
|
208
|
+
export ANTHROPIC_DEFAULT_SONNET_MODEL="${ANTHROPIC_DEFAULT_SONNET_MODEL:-glm,glm-4.7}"
|
|
209
|
+
export ANTHROPIC_DEFAULT_HAIKU_MODEL="${ANTHROPIC_DEFAULT_HAIKU_MODEL:-glm,glm-4.5-air}"
|
|
210
|
+
export ANTHROPIC_SMALL_FAST_MODEL="${ANTHROPIC_SMALL_FAST_MODEL:-glm,glm-4.5-air}"
|
|
211
|
+
export CLAUDE_CODE_SUBAGENT_MODEL="${CLAUDE_CODE_SUBAGENT_MODEL:-glm,glm-4.7}"
|
|
199
212
|
|
|
200
213
|
CLAUDE_BIN="$HOME/.claude/local/claude"
|
|
201
214
|
if [[ ! -x "$CLAUDE_BIN" ]]; then
|
|
@@ -235,7 +248,7 @@ backup_file "$CONFIG_DIR/config.json"
|
|
|
235
248
|
cp "$SCRIPT_DIR/config/glm-only.json" "$CONFIG_DIR/config.json"
|
|
236
249
|
backup_file "$CONFIG_DIR/intent-router-glm.js"
|
|
237
250
|
cp "$SCRIPT_DIR/config/intent-router-glm.js" "$CONFIG_DIR/intent-router-glm.js"
|
|
238
|
-
|
|
251
|
+
"$PYTHON_BIN" - <<'PY'
|
|
239
252
|
import json
|
|
240
253
|
import os
|
|
241
254
|
|
|
@@ -63,7 +63,7 @@ class Dashboard {
|
|
|
63
63
|
envSet: 'Tanımlı',
|
|
64
64
|
envMissing: 'Eksik',
|
|
65
65
|
envPath: 'Dosya',
|
|
66
|
-
envSelect: 'Anahtar seç'
|
|
66
|
+
envSelect: 'Anahtar seç',
|
|
67
67
|
logOn: 'Açık',
|
|
68
68
|
logOff: 'Kapalı',
|
|
69
69
|
statusHealthy: 'Sağlıklı',
|
|
@@ -122,7 +122,7 @@ class Dashboard {
|
|
|
122
122
|
envSet: 'Ingesteld',
|
|
123
123
|
envMissing: 'Ontbreekt',
|
|
124
124
|
envPath: 'Bestand',
|
|
125
|
-
envSelect: 'Sleutel kiezen'
|
|
125
|
+
envSelect: 'Sleutel kiezen',
|
|
126
126
|
logOn: 'Aan',
|
|
127
127
|
logOff: 'Uit',
|
|
128
128
|
statusHealthy: 'Gezond',
|