claude-code-router: init at 1.0.59

This commit is contained in:
Sizhe Zhao
2025-10-10 20:44:06 +08:00
parent d8c903a0ad
commit d4d2689fc0
2 changed files with 205 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
{
buildNpmPackage,
esbuild,
fetchFromGitHub,
lib,
makeBinaryWrapper,
nodejs_24,
pnpm_9,
versionCheckHook,
}:
let
buildNpmPackage' = buildNpmPackage.override { nodejs = nodejs_24; };
in
buildNpmPackage' (finalAttrs: {
pname = "claude-code-router";
version = "1.0.59";
src = fetchFromGitHub {
owner = "musistudio";
repo = "claude-code-router";
rev = "4617d66492cf37539d9567044f6ffec7844af2ee";
hash = "sha256-LC1JIOLaNLYNIIDofgFj+is4mwLjRjD3aAOt/nHRUmo=";
};
patches = [
# pnpm install --fix-lockfile --lockfile-only
./pnpm-lock.patch
];
postPatch = ''
substituteInPlace src/cli.ts \
--replace-fail '"node"' '"${lib.getExe nodejs_24}"'
'';
npmDeps = null;
pnpmDeps = pnpm_9.fetchDeps {
inherit (finalAttrs) pname src patches;
fetcherVersion = 2;
hash = "sha256-aPAY7JhzzYQero8f0/w3jtf5IwpDnoZCXGQKzRbj9aU=";
};
nativeBuildInputs = [
esbuild
makeBinaryWrapper
pnpm_9.configHook
];
npmConfigHook = pnpm_9.configHook;
buildPhase = ''
runHook preBuild
esbuild src/cli.ts --bundle --platform=node --outfile=dist/cli.js
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/lib/claude-code-router/dist
cp dist/cli.js $out/lib/claude-code-router/dist/
cp node_modules/tiktoken/tiktoken_bg.wasm $out/lib/claude-code-router/dist/
cp ${finalAttrs.passthru.ui}/index.html $out/lib/claude-code-router/dist/
mkdir -p $out/bin
makeBinaryWrapper ${lib.getExe nodejs_24} $out/bin/ccr \
--add-flags "$out/lib/claude-code-router/dist/cli.js"
runHook postInstall
'';
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "-v";
passthru.ui = buildNpmPackage' (finalAttrs': {
pname = finalAttrs.pname + "-ui";
inherit (finalAttrs) version src;
sourceRoot = "${finalAttrs'.src.name}/ui";
npmDeps = null;
pnpmDeps = pnpm_9.fetchDeps {
inherit (finalAttrs') pname src sourceRoot;
fetcherVersion = 2;
hash = "sha256-ZjYLUec9EADQmKfju8hMbq0y4f1TDVwjbe3yw8Gh4Ac=";
};
nativeBuildInputs = [
pnpm_9.configHook
];
npmConfigHook = pnpm_9.configHook;
installPhase = ''
runHook preInstall
mkdir -p $out
cp dist/index.html $out/
runHook postInstall
'';
});
meta = {
description = "Tool to route Claude Code requests to different models and customize any request";
homepage = "https://github.com/musistudio/claude-code-router";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
prince213
];
mainProgram = "ccr";
};
})

View File

@@ -0,0 +1,90 @@
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -356,6 +356,12 @@
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@types/mute-stream@0.0.4':
+ resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
+
+ '@types/node@22.18.9':
+ resolution: {integrity: sha512-5yBtK0k/q8PjkMXbTfeIEP/XVYnz1R9qZJ3yUicdEW7ppdDJfe+MqXEhpqDL3mtn4Wvs1u0KLEG0RXzCgNpsSg==}
+
'@types/node@24.7.0':
resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==}
@@ -904,6 +910,9 @@
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
@@ -1026,11 +1035,18 @@
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
undici-types@7.14.0:
resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==}
@@ -1253,7 +1269,7 @@
'@inquirer/figures': 1.0.13
'@inquirer/type': 2.0.0
'@types/mute-stream': 0.0.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/wrap-ansi': 3.0.0
ansi-escapes: 4.3.2
cli-width: 4.1.0
@@ -1386,6 +1402,14 @@
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@types/mute-stream@0.0.4':
+ dependencies:
+ '@types/node': 24.7.0
+
+ '@types/node@22.18.9':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/node@24.7.0':
dependencies:
undici-types: 7.14.0
@@ -1956,6 +1980,8 @@
safe-stable-stringify@2.5.0: {}
+ safer-buffer@2.1.2: {}
+
secure-json-parse@4.1.0: {}
semver@5.7.2: {}
@@ -2054,8 +2080,12 @@
tr46@0.0.3: {}
+ type-fest@0.21.3: {}
+
typescript@5.9.3: {}
+ undici-types@6.21.0: {}
+
undici-types@7.14.0: {}
undici@7.16.0: {}