1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"repo": "147228/whitelabel-claude", "files": {"SKILL.md": {"bcb3339bef7a026722bfc60f711d336a2e1f80d9": {"t": 1785746652.4206107, "n": 5896, "h": "dda6ab735dd0bee3", "c": "---\nname: whitelabel-claude\ndescription: 一键为 Claude Code 接入任意兼容 Anthropic Messages API 的大模型服务(DeepSeek、Kimi、OpenRouter、自建中转等),同时支持换皮为自定义品牌。自动探测已安装的 Claude Code 或从用户提供的 zip 包提取 cli.js,patch 后生成启动脚本和可分发包。当用户说\"白标\"、\"换皮\"、\"接 DeepSeek/Kimi/OpenRouter\"、\"rebrand\"、\"/whitelabel\"、\"打包分发\" 时触发。\n---\n\n# Claude Code 一键白标 & 多 API 接入\n\n## 触发场景\n\n- \"白标 claude code\"、\"换皮\"、\"rebrand\"、\"/whitelabel\"\n- \"帮我接 DeepSeek / Kimi / OpenRouter / 硅基流动\"\n- \"打包一个可以分发的版本\"\n\n---\n\n## 执行流程\n\n### Step 0:收集配置\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| 品牌名 | 替换 UI 中的 \"Claude Code\",不改就留空 | 可选 |\n| API 端点 | 目标服务 base URL | 必填(接第三方时)|\n| API Key | 第三方 API 的 key | 必填(接第三方时)|\n| 中文 UI | 欢迎页汉化 | N |\n| 品牌色 | 欢迎框边框 + 图标颜色,填 R,G,B 三个数字 | `215,119,87`(官方橙褐色)|\n| 自定义 Logo | 替换欢迎页那个小机器人 | 可选 |\n| 是否打包 | 打成 zip 分发 | 看用户需求 |\n\n**常用 API 端点**:\n\n| 服务 | base URL |\n|------|----------|\n| DeepSeek | `https://api.deepseek.com` |\n| Kimi Code | `https://api.kimi.com/coding/` |\n| OpenRouter | `https://openrouter.ai/api/v1` |\n| 硅基流动 | `https://api.siliconflow.cn/v1` |\n| 自建中转 | `https://your-domain.com` |\n| 官方(默认) | 留空 |\n\n---\n\n### Step 1:找到 cli.js\n\ncli.js 是 Claude Code 的核心文件,所有 patch 都在这一个文件上做。按以下优先级查找,命中第一个就停:\n\n**情况 A:用户已安装 Claude Code(最常见)**\n\n大部分人通过 npm、winget、brew 装过 Claude Code,cli.js 已经在系统里了。\n\n```bash\n# npm 全局安装路径\nnode -e \"try{console.log(require.resolve('@anthropic-ai/claude-code/cli.js'))}catch{}\"\n\n# 或者通过 which/where 找到 claude 命令,再找同目录的 cli.js\nwhich claude 2>/dev/null || where claude 2>/dev/null\n# claude 命令通常是个 shim,实际 cli.js 在 npm 全局 node_modules 里\n```\n\n找到后复制到工作目录:\n```bash\nmkdir -p {brand}-dist\ncp <找到的cli.js> {brand}-dist/cli.js\ncp <同目录的package.json> {brand}-dist/package.json\ncp -r <同目录的vendor/> {brand}-dist/vendor/\n```\n\n**情况 B:用户有 claude-code-sourcemap-main.zip**\n\n这个 zip 里有现成的 `package/cli.js`(v2.1.88),直接提取:\n\n```bash\nmkdir -p {brand}-dist\nunzip -j claude-code-sourcemap-main.zip \\\n \"claude-code-sourcemap-main/package/cli.js\" \\\n \"claude-code-sourcemap-main/package/package.json\" \\\n -d {brand}-dist/\n# vendor 按当前平台提取(如 Windows x64):\nunzip claude-code-sourcemap-main.zip \\\n \"claude-code-sourcemap-main/package/vendor/*\" \\\n -d tmp-extract/\ncp -r tmp-extract/claude-code-sourcemap-main/package/vendor/ {brand}-dist/vendor/\nrm -rf tmp-extract/\n```\n\n> 注:另一个文件 `claudecode.zip` 是还原出来的 TypeScript 源码,只用于阅读理解结构,本流程不需要它。\n\n**情况 C:用户什么都没有**\n\n引导安装 Claude Code:\n\n```bash\n# 方式一:npm(需要 Node.js)\nnpm install -g @anthropic-ai/claude-code\n\n# 方式二:Windows winget\nwinget install Anthropic.ClaudeCode\n\n# 方式三:macOS brew\nbrew install claude-code\n```\n\n安装完成后按情况 A 定位 cli.js。\n\n---\n\n### Step 2:patch\n\n读取本 skill 目录下的 `scripts/patch.template.js`,将这些占位符替换为实际值:\n\n```\n__BRAND_NAME__ → 品牌名(不改品牌就填 \"Claude Code\")\n__API_BASE_URL__ → API 端点(如 \"https://api.deepseek.com\")或 \"\"\n__ENABLE_I18N__ → true 或 false\n__BRAND_R__ → 品牌色 R(默认 215)\n__BRAND_G__ → 品牌色 G(默认 119)\n__BRAND_B__ → 品牌色 B(默认 87)\n__LOGO_STYLE__ → default | look-left | look-right | arms-up | custom\n__CUSTOM_LOGO__ → 自定义 logo 对象;非 custom 时填 null\n```\n\n写入 `{brand}-dist/patch.js`,然后执行:\n\n```bash\n# 先备份\ncp {brand}-dist/cli.js {brand}-dist/cli.js.bak\n# 执行 patch\nnode {brand}-dist/patch.js {brand}-dist/cli.js\n```\n\n**原理(Protect → Replace → Restore)**:\n1. 先把 50+ 个协议层字符串换成占位符(User-Agent `claude-cli/`、npm 包名、所有环境变量名、SDK 类名)\n2. 做品牌替换(占位符保护下不会误伤协议层)\n3. 还原占位符\n\n> 不保护直接替换,会把 HTTP User-Agent 改掉,Kimi 等服务端校验客户端标识会 403。\n\n**视觉定制也在这一步做**:\n- 欢迎框边框色和机器人身体色,官方默认是 `rgb(215,119,87)` / `#D77757`\n- skill 会把这个颜色改成你提供的 `品牌色`\n- 欢迎页小机器人支持这些内置姿态 / 图标:`default`、`look-left`、`look-right`、`arms-up`、`bot-mini`、`pixel-cat`、`star`\n- 如果用户提供了自定义 logo,就填 `__LOGO_STYLE__ = custom`,并把 `__CUSTOM_LOGO__` 写成:\n\n```js\n{\n r1L: ' 左上 ',\n r1E: '中间上半',\n r1R: ' 右上 ',\n r2L: '左下',\n r2R: '右下',\n feet: '底部一行'\n}\n```\n\n比如官方默认 logo 实际就是:\n\n```js\n{\n r1L: ' ▐',\n r1E: '▛███▜',\n r1R: '▌',\n r2L: '▝▜',\n r2R: '▛▘',\n feet: ' ▗ ▖ '\n}\n```\n\n如果用户只是想改颜色,不想改图标,就保留 `default`。\n\n---\n\n### Step 3:生成启动脚本\n\n读取 `templates/launcher.bat`(Windows)或 `templates/launcher.sh`(macOS/Linux),替换占位符后写入 `{brand}-dist/`:\n\n```\n__BRAND__ → 品牌名\n__BRAND_LOWER__ → 小写\n__API_KEY__ → API Key\n__API_BASE_URL__ → API 端点\n```\n\n**写入 .bat 文件时必须注意**:\n1. **纯 ASCII 注释**:bat 里的 `rem` 注释和 `echo` 输出只用英文,不写中文。Windows cmd 默认编码是 GBK,中文 Unicode 字符(包括 `──` 这种)会导致 `不是内部或外部命令` 报错\n2. **CRLF 行尾**:bat 必须是 `\\r\\n` 行尾。如果在 macOS/Linux/Git Bash 环境下生成,写入后执行 `sed -i 's/$/\\r/' {brand}.bat` 或用 Node.js 写入时确保 `\\r\\n`\n3. **chcp 65001**:脚本开头加 `chcp 65001 >nul 2>&1`,让 node 进程的 stdout 能正确显示 UTF-8(cli.js 输出中文需要这个)\n\n启动脚本里两个关键设计:\n- `CLAUDE_CONFIG_DIR=~/.{brand_lower}` — 隔离配置目录,避免全局 OAuth token 抢占\n- `ANTHROPIC_AUTH_TOKEN`(不是 API_KEY)— 认证优先级最高,确保走第三方 API\n\n---\n\n### Step 4:验证\n\n```bash\nnode {brand}-dist/cli.js --version\n# 期望: 2.1.xx (BrandName) 或 2.1.xx(不改品牌时无后缀)\n\n# User-Agent 必须在(否则第三方 API 会 403)\nnode -e \"const c=require('fs').readFileSync('{brand}-dist/cli.js','utf8'); console.log(c.includes('claude-cli/') ? 'UA ✓' : 'UA 丢失!')\"\n```\n\n---\n\n### Step 5(可选):打包分发\n\n```\n{brand}-dist/\n├── cli.js ← 已 patch\n├── package.json\n├── vendor/ ← 当前平台的 native addon\n├── {brand}.bat ← Windows 启动脚本(含 API key)\n├── {brand}.sh ← macOS/Linux 启动脚本\n└── patch.js ← 留着,方便以后重新 patch\n```\n\n打包:\n```bash\ncd {brand}-dist && zip -r ../{brand}-release.zip . && cd ..\n```\n\n接收方要求:有 Node.js 即可(无需安装 Claude Code)。如果目标用户连 Node.js 都没有,可以从 nodejs.org/dist/ 下载对应平台的便携版 `node.exe`,放进分发包根目录,启动脚本里优先使用它。\n\n---\n\n## 完成后告知用户\n\n```\n完成 ✓\n\n启动: ./{brand}.bat(Windows)/ bash {brand}.sh(macOS/Linux)\n配置目录: ~/.{brand_lower}(与全局 Claude Code 完全隔离)\n\n两个实例可同时运行:\n ./{brand}.bat → 第三方 API\n claude → 官方 Anthropic(如有)\n```\n\n---\n\n## 常见问题\n\n| 症状 | 原因 | 解法 |\n|------|------|------|\n| 403 \"客户端异常\" | User-Agent 被改 | 检查 `claude-cli/` 是否在 cli.js 里 |\n| 401 明明 key 对 | 全局 OAuth 抢占 | 确认用 `ANTHROPIC_AUTH_TOKEN` |\n| AUTH_TOKEN 也 401 | OAuth 文件被直接读 | 确认 `CLAUDE_CONFIG_DIR` 指向独立空目录 |\n| 工具调用报 400 | 中转不支持 tool_search | 加 `ENABLE_TOOL_SEARCH=false` |\n| vendor 报错 | 平台 native addon 缺 | 确认提取了对应平台的 vendor/ |\n"}, "2251320e30d76f15d91f8eb250a8cb5e121ca580": {"t": 1785766591.376919, "n": 5896, "h": "dda6ab735dd0bee3", "c": "---\nname: whitelabel-claude\ndescription: 一键为 Claude Code 接入任意兼容 Anthropic Messages API 的大模型服务(DeepSeek、Kimi、OpenRouter、自建中转等),同时支持换皮为自定义品牌。自动探测已安装的 Claude Code 或从用户提供的 zip 包提取 cli.js,patch 后生成启动脚本和可分发包。当用户说\"白标\"、\"换皮\"、\"接 DeepSeek/Kimi/OpenRouter\"、\"rebrand\"、\"/whitelabel\"、\"打包分发\" 时触发。\n---\n\n# Claude Code 一键白标 & 多 API 接入\n\n## 触发场景\n\n- \"白标 claude code\"、\"换皮\"、\"rebrand\"、\"/whitelabel\"\n- \"帮我接 DeepSeek / Kimi / OpenRouter / 硅基流动\"\n- \"打包一个可以分发的版本\"\n\n---\n\n## 执行流程\n\n### Step 0:收集配置\n\n| 参数 | 说明 | 默认 |\n|------|------|------|\n| 品牌名 | 替换 UI 中的 \"Claude Code\",不改就留空 | 可选 |\n| API 端点 | 目标服务 base URL | 必填(接第三方时)|\n| API Key | 第三方 API 的 key | 必填(接第三方时)|\n| 中文 UI | 欢迎页汉化 | N |\n| 品牌色 | 欢迎框边框 + 图标颜色,填 R,G,B 三个数字 | `215,119,87`(官方橙褐色)|\n| 自定义 Logo | 替换欢迎页那个小机器人 | 可选 |\n| 是否打包 | 打成 zip 分发 | 看用户需求 |\n\n**常用 API 端点**:\n\n| 服务 | base URL |\n|------|----------|\n| DeepSeek | `https://api.deepseek.com` |\n| Kimi Code | `https://api.kimi.com/coding/` |\n| OpenRouter | `https://openrouter.ai/api/v1` |\n| 硅基流动 | `https://api.siliconflow.cn/v1` |\n| 自建中转 | `https://your-domain.com` |\n| 官方(默认) | 留空 |\n\n---\n\n### Step 1:找到 cli.js\n\ncli.js 是 Claude Code 的核心文件,所有 patch 都在这一个文件上做。按以下优先级查找,命中第一个就停:\n\n**情况 A:用户已安装 Claude Code(最常见)**\n\n大部分人通过 npm、winget、brew 装过 Claude Code,cli.js 已经在系统里了。\n\n```bash\n# npm 全局安装路径\nnode -e \"try{console.log(require.resolve('@anthropic-ai/claude-code/cli.js'))}catch{}\"\n\n# 或者通过 which/where 找到 claude 命令,再找同目录的 cli.js\nwhich claude 2>/dev/null || where claude 2>/dev/null\n# claude 命令通常是个 shim,实际 cli.js 在 npm 全局 node_modules 里\n```\n\n找到后复制到工作目录:\n```bash\nmkdir -p {brand}-dist\ncp <找到的cli.js> {brand}-dist/cli.js\ncp <同目录的package.json> {brand}-dist/package.json\ncp -r <同目录的vendor/> {brand}-dist/vendor/\n```\n\n**情况 B:用户有 claude-code-sourcemap-main.zip**\n\n这个 zip 里有现成的 `package/cli.js`(v2.1.88),直接提取:\n\n```bash\nmkdir -p {brand}-dist\nunzip -j claude-code-sourcemap-main.zip \\\n \"claude-code-sourcemap-main/package/cli.js\" \\\n \"claude-code-sourcemap-main/package/package.json\" \\\n -d {brand}-dist/\n# vendor 按当前平台提取(如 Windows x64):\nunzip claude-code-sourcemap-main.zip \\\n \"claude-code-sourcemap-main/package/vendor/*\" \\\n -d tmp-extract/\ncp -r tmp-extract/claude-code-sourcemap-main/package/vendor/ {brand}-dist/vendor/\nrm -rf tmp-extract/\n```\n\n> 注:另一个文件 `claudecode.zip` 是还原出来的 TypeScript 源码,只用于阅读理解结构,本流程不需要它。\n\n**情况 C:用户什么都没有**\n\n引导安装 Claude Code:\n\n```bash\n# 方式一:npm(需要 Node.js)\nnpm install -g @anthropic-ai/claude-code\n\n# 方式二:Windows winget\nwinget install Anthropic.ClaudeCode\n\n# 方式三:macOS brew\nbrew install claude-code\n```\n\n安装完成后按情况 A 定位 cli.js。\n\n---\n\n### Step 2:patch\n\n读取本 skill 目录下的 `scripts/patch.template.js`,将这些占位符替换为实际值:\n\n```\n__BRAND_NAME__ → 品牌名(不改品牌就填 \"Claude Code\")\n__API_BASE_URL__ → API 端点(如 \"https://api.deepseek.com\")或 \"\"\n__ENABLE_I18N__ → true 或 false\n__BRAND_R__ → 品牌色 R(默认 215)\n__BRAND_G__ → 品牌色 G(默认 119)\n__BRAND_B__ → 品牌色 B(默认 87)\n__LOGO_STYLE__ → default | look-left | look-right | arms-up | custom\n__CUSTOM_LOGO__ → 自定义 logo 对象;非 custom 时填 null\n```\n\n写入 `{brand}-dist/patch.js`,然后执行:\n\n```bash\n# 先备份\ncp {brand}-dist/cli.js {brand}-dist/cli.js.bak\n# 执行 patch\nnode {brand}-dist/patch.js {brand}-dist/cli.js\n```\n\n**原理(Protect → Replace → Restore)**:\n1. 先把 50+ 个协议层字符串换成占位符(User-Agent `claude-cli/`、npm 包名、所有环境变量名、SDK 类名)\n2. 做品牌替换(占位符保护下不会误伤协议层)\n3. 还原占位符\n\n> 不保护直接替换,会把 HTTP User-Agent 改掉,Kimi 等服务端校验客户端标识会 403。\n\n**视觉定制也在这一步做**:\n- 欢迎框边框色和机器人身体色,官方默认是 `rgb(215,119,87)` / `#D77757`\n- skill 会把这个颜色改成你提供的 `品牌色`\n- 欢迎页小机器人支持这些内置姿态 / 图标:`default`、`look-left`、`look-right`、`arms-up`、`bot-mini`、`pixel-cat`、`star`\n- 如果用户提供了自定义 logo,就填 `__LOGO_STYLE__ = custom`,并把 `__CUSTOM_LOGO__` 写成:\n\n```js\n{\n r1L: ' 左上 ',\n r1E: '中间上半',\n r1R: ' 右上 ',\n r2L: '左下',\n r2R: '右下',\n feet: '底部一行'\n}\n```\n\n比如官方默认 logo 实际就是:\n\n```js\n{\n r1L: ' ▐',\n r1E: '▛███▜',\n r1R: '▌',\n r2L: '▝▜',\n r2R: '▛▘',\n feet: ' ▗ ▖ '\n}\n```\n\n如果用户只是想改颜色,不想改图标,就保留 `default`。\n\n---\n\n### Step 3:生成启动脚本\n\n读取 `templates/launcher.bat`(Windows)或 `templates/launcher.sh`(macOS/Linux),替换占位符后写入 `{brand}-dist/`:\n\n```\n__BRAND__ → 品牌名\n__BRAND_LOWER__ → 小写\n__API_KEY__ → API Key\n__API_BASE_URL__ → API 端点\n```\n\n**写入 .bat 文件时必须注意**:\n1. **纯 ASCII 注释**:bat 里的 `rem` 注释和 `echo` 输出只用英文,不写中文。Windows cmd 默认编码是 GBK,中文 Unicode 字符(包括 `──` 这种)会导致 `不是内部或外部命令` 报错\n2. **CRLF 行尾**:bat 必须是 `\\r\\n` 行尾。如果在 macOS/Linux/Git Bash 环境下生成,写入后执行 `sed -i 's/$/\\r/' {brand}.bat` 或用 Node.js 写入时确保 `\\r\\n`\n3. **chcp 65001**:脚本开头加 `chcp 65001 >nul 2>&1`,让 node 进程的 stdout 能正确显示 UTF-8(cli.js 输出中文需要这个)\n\n启动脚本里两个关键设计:\n- `CLAUDE_CONFIG_DIR=~/.{brand_lower}` — 隔离配置目录,避免全局 OAuth token 抢占\n- `ANTHROPIC_AUTH_TOKEN`(不是 API_KEY)— 认证优先级最高,确保走第三方 API\n\n---\n\n### Step 4:验证\n\n```bash\nnode {brand}-dist/cli.js --version\n# 期望: 2.1.xx (BrandName) 或 2.1.xx(不改品牌时无后缀)\n\n# User-Agent 必须在(否则第三方 API 会 403)\nnode -e \"const c=require('fs').readFileSync('{brand}-dist/cli.js','utf8'); console.log(c.includes('claude-cli/') ? 'UA ✓' : 'UA 丢失!')\"\n```\n\n---\n\n### Step 5(可选):打包分发\n\n```\n{brand}-dist/\n├── cli.js ← 已 patch\n├── package.json\n├── vendor/ ← 当前平台的 native addon\n├── {brand}.bat ← Windows 启动脚本(含 API key)\n├── {brand}.sh ← macOS/Linux 启动脚本\n└── patch.js ← 留着,方便以后重新 patch\n```\n\n打包:\n```bash\ncd {brand}-dist && zip -r ../{brand}-release.zip . && cd ..\n```\n\n接收方要求:有 Node.js 即可(无需安装 Claude Code)。如果目标用户连 Node.js 都没有,可以从 nodejs.org/dist/ 下载对应平台的便携版 `node.exe`,放进分发包根目录,启动脚本里优先使用它。\n\n---\n\n## 完成后告知用户\n\n```\n完成 ✓\n\n启动: ./{brand}.bat(Windows)/ bash {brand}.sh(macOS/Linux)\n配置目录: ~/.{brand_lower}(与全局 Claude Code 完全隔离)\n\n两个实例可同时运行:\n ./{brand}.bat → 第三方 API\n claude → 官方 Anthropic(如有)\n```\n\n---\n\n## 常见问题\n\n| 症状 | 原因 | 解法 |\n|------|------|------|\n| 403 \"客户端异常\" | User-Agent 被改 | 检查 `claude-cli/` 是否在 cli.js 里 |\n| 401 明明 key 对 | 全局 OAuth 抢占 | 确认用 `ANTHROPIC_AUTH_TOKEN` |\n| AUTH_TOKEN 也 401 | OAuth 文件被直接读 | 确认 `CLAUDE_CONFIG_DIR` 指向独立空目录 |\n| 工具调用报 400 | 中转不支持 tool_search | 加 `ENABLE_TOOL_SEARCH=false` |\n| vendor 报错 | 平台 native addon 缺 | 确认提取了对应平台的 vendor/ |\n"}}}} |