CC开源版Bun部署实战:Windows下三层架构落地指南

1. 项目概述:这不是一个普通软件安装,而是一次对现代前端工程化底座的深度实践

“CC 开源版完整安装部署指南”——光看标题,很多人第一反应是“又一个带图形界面的工具?点几下就完事?”但如果你真这么想,等你卡在 Bun 报错EPERM: operation not permitted或者unexpected status 404 not found: cc switch local proxy failed while handling codex endpoint /responses的时候,就会发现:这根本不是传统意义上的“安装”,而是一场围绕CC(CodeCraft / Claude Client)开源生态展开的、涉及运行时选型、代理链路设计、环境隔离策略与服务端接口契约理解的系统性工程实践。我从去年底开始跟踪 CC 社区动向,实测过 7 种不同组合(Windows WSL2 + Docker、macOS Rosetta2 + Bun、统信UOS + Node.js 18.20.3、Windows 原生 CMD/PowerShell/Powershell Core 7.4),最终沉淀出这套不依赖任何商业镜像、不绕过官方协议、完全基于开源组件可复现的部署路径。它解决的不是“能不能跑起来”的问题,而是“为什么在 Windows 上cc switch命令始终找不到本地代理服务”、“为什么bun setup在 zsh 下提示 command not found 却在 bash 中正常”、“为什么 Docker 部署后/responses接口返回 404 而不是 502”这类真实生产级卡点。适合三类人:一是正在评估 CC 开源版是否适配企业内网文档协同场景的架构师;二是被claude启动报bun is a fast javascript runtime这类错误日志反复折磨的前端工程师;三是想把无忧企业文档免费开源版真正落地为部门级知识中枢的技术负责人。它不教你怎么用 GUI 点按钮,而是带你亲手拧紧每一颗螺丝——从 Bun 的二进制权限校验逻辑,到 CC Switch 的本地 HTTP 代理注册机制,再到 Codex Endpoint 的路由匹配规则。

2. 整体设计思路与方案选型逻辑:为什么必须放弃“一键安装”幻觉

2.1 核心矛盾识别:CC 开源版不是单体应用,而是三层解耦架构

很多初学者误以为 CC 开源版和传统桌面软件一样,下载一个.exe.dmg就能运行。但翻看其 GitHub 仓库结构(以cc-org/cc-open-source为例),你会发现它实际由三个独立子项目构成:

  • cc-gui:Electron 构建的桌面客户端,负责用户交互、本地文件管理、快捷键响应;
  • cc-switch:Rust 编写的轻量级本地代理服务,监听http://localhost:3001,承担请求转发、API Key 注入、响应缓存等职责;
  • cc-codex:TypeScript 编写的后端服务,提供/responses/documents/search等核心 RESTful 接口,依赖 PostgreSQL 存储元数据。

这三层之间通过明确的 HTTP 协议通信,而非进程内调用。这意味着:GUI 启动失败 ≠ 后端不可用,后端 404 ≠ 代理未运行,代理启动成功 ≠ GUI 能连上。我见过太多人花三天时间调试cc-gui的 Electron 渲染进程白屏问题,最后发现根源是cc-switch--codex-url参数写成了http://localhost:3000(实际应为http://host.docker.internal:3000),而这个 URL 错误在cc-switch日志里只显示为WARN: codex unreachable,根本不会报红。所以整个部署设计的第一原则就是:分层验证,逐段击穿。先确保cc-codex能独立返回{ "status": "ok" },再确认cc-switch能正确转发请求到该地址,最后才让cc-gui连接cc-switch。跳过任一环节,都会陷入“症状模糊、日志分散、定位耗时”的泥潭。

2.2 Bun 为何成为不可替代的运行时?不只是“快”那么简单

网络热词里高频出现bun,bun install,bun setup 失败,说明 Bun 已成为 CC 生态的事实标准。但很多人只知其然不知其所以然。Bun 在这里的作用远超“更快的 npm 替代品”。我们来拆解它的三个刚性价值点:

第一,进程模型一致性。CC 的cc-switchcc-codex都采用 Bun 的Bun.spawn()启动子进程,并依赖其Bun.file()的零拷贝文件读取能力处理大文档解析。如果强行用 Node.js 替代,cc-codex/documents/upload接口在上传 50MB PDF 时会出现内存暴涨至 2GB+(Node.js V8 堆内存限制触发 OOM),而 Bun 在相同负载下稳定在 380MB。这是因为 Bun 的 JavaScriptCore 引擎对 ArrayBuffer 的内存管理更贴近底层操作系统,无需经过 V8 的 GC 拷贝链路。

第二,权限模型穿透性bun eperm: operation not permitted, mkdir 'f:'这类错误,在 Windows 上本质是 Bun 对 NTFS 符号链接(Symbolic Link)的权限校验比 Node.js 更严格。Node.js 默认允许fs.symlink()创建跨卷链接,而 Bun 要求显式传入--allow-symlink标志。CC 的cc-codex初始化时会创建storage/documents -> f:\cc-docs的软链,若未加该标志,Bun 直接抛 EPERM。这不是 Bug,而是 Bun 主动暴露了 Windows 权限体系的深层约束,迫使你必须正视路径规划——这也是为什么指南里强调“所有存储路径必须位于同一物理磁盘分区”。

第三,包管理原子性bun install的 lockfile 是二进制格式(.bun-lock.json),解析速度比package-lock.json快 17 倍(实测 12ms vs 204ms)。更重要的是,它强制所有依赖版本锁定到精确 commit hash(如@types/node#9a3b2c1),彻底规避了automapper等库因 minor 版本升级导致的mapTo()方法签名变更引发的运行时崩溃。我们在测试中发现,用 npm 安装的cc-codexv0.8.3版本下,DocumentService.mapTo()返回的DocumentDto缺少lastModifiedBy字段,而 Bun 安装的同版本则完整保留——根源就在@automapper/core的 patch 版本差异。

提示:不要试图用npm install -g bun安装 Bun。这是最常见误区。Bun 官方明确要求使用curl -fsSL https://bun.sh/install | bash或 Windows PowerShell 的iwr https://bun.sh/install.ps1 | iex。因为全局 npm 安装的 Bun 实际是 Node.js 包,它只是个启动脚本,真正的 Bun 二进制并未写入 PATH,导致后续bun run命令仍调用 Node.js 解释器。

2.3 为什么拒绝 Docker 作为首选方案?内网部署的隐形成本

搜索热词里docker安装部署zabbix安装部署nacos安装配置高频并列,暗示很多读者默认 Docker 是“现代化部署”的代名词。但在 CC 开源版场景下,Docker 反而是复杂度放大器。原因有三:

其一,Windows 文件系统桥接失真。Docker Desktop for Windows 使用 Hyper-V 虚拟机(MobyLinuxVM)运行 Linux 容器,宿主机 C 盘映射到容器内为/host_mnt/c。而cc-codexstoragePath配置项若设为C:\cc-data,在容器内实际路径是/host_mnt/c/cc-data。但cc-switch的代理逻辑会将X-Forwarded-For头中的原始路径C:\cc-data直接拼接到 API 请求中,导致cc-codex收到GET /documents?path=C:%5Ccc-data%5Cdoc1.pdf,而它实际只认/host_mnt/c/cc-data/doc1.pdf。这个路径错位无法通过简单 volume mount 修复,必须修改cc-switch源码中的路径标准化逻辑。

其二,网络策略冲突不可控cc-switch默认监听127.0.0.1:3001,而 Docker 容器内的cc-codex认为宿主机是host.docker.internal。若你在cc-switch启动时加--host 0.0.0.0,又会触发 Windows 防火墙弹窗,且企业内网常禁用0.0.0.0监听。我们实测过 12 家客户环境,其中 9 家因 IT 策略禁止容器绑定0.0.0.0,最终退回原生部署。

其三,调试链路断裂。当cc-codex返回 404 时,你需要查看其src/routes/responses.ts中的路由定义。但在 Docker 里,你得先docker exec -it cc-codex sh进入容器,再cd /app,再ls src/routes/才能看到文件。而原生部署下,直接code ./cc-codex/src/routes/responses.ts即可。对于需要快速验证“是不是路由没注册”的场景,10 秒和 3 分钟的差距就是生产力鸿沟。

因此,本指南将 Docker 定位为“可选备选方案”,仅在第 4 章提供最小化可行配置,核心流程全部基于原生 Bun 运行时展开。这不是技术保守,而是对交付确定性的尊重。

3. 核心细节解析与实操要点:Windows 环境下的 7 个生死关卡

3.1 关卡一:PowerShell 执行策略与 Bun 的隐式依赖

Windows 用户执行iwr https://bun.sh/install.ps1 | iex时,90% 的失败源于 PowerShell 执行策略(Execution Policy)。默认策略Restricted会阻止所有脚本运行,报错File cannot be loaded because running scripts is disabled on this system。网上教程常建议Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,但这存在两个隐患:

  • 隐患 A:作用域污染CurrentUser策略只对当前用户生效,若你用管理员身份运行cc-codex(需监听 80 端口),而管理员账户的执行策略仍是Restricted,Bun 安装脚本依然失败。
  • 隐患 B:安全基线冲突。金融、政务类客户内网禁用RemoteSigned,只允许AllSigned(所有脚本需数字签名),而bun.sh/install.ps1显然无微软签名。

实操解法:绕过策略检查,直接下载并执行二进制。打开 PowerShell(无需管理员),运行:

# 步骤1:创建临时目录 mkdir "$env:TEMP\bun-install" -Force # 步骤2:下载预编译二进制(Windows x64) Invoke-WebRequest "https://github.com/oven-sh/bun/releases/download/bun-v1.1.20/bun-windows-x64.zip" -OutFile "$env:TEMP\bun-install\bun.zip" # 步骤3:解压到用户目录 Expand-Archive "$env:TEMP\bun-install\bun.zip" -DestinationPath "$env:USERPROFILE\AppData\Local\bun" # 步骤4:添加到 PATH(永久生效) $env:PATH = "$env:USERPROFILE\AppData\Local\bun;$env:PATH" [Environment]::SetEnvironmentVariable("PATH", $env:PATH, "User")

注意:bun-windows-x64.zip中的bun.exe是真正独立二进制,不依赖 PowerShell 策略。后续所有bun run命令均调用此文件,彻底规避策略问题。

3.2 关卡二:cc switch命令不存在?Bun 的 binlink 机制揭秘

安装 Bun 后,执行cc switchThe term 'cc' is not recognized as the name of a cmdlet,这是 Windows 用户最高频问题。根源在于 Bun 的binlink机制与 Windows CMD 的 PATH 解析逻辑冲突。

Bun 安装后,会在$env:USERPROFILE\AppData\Local\bun\bin目录生成cccc-switchcc-codex等可执行文件。但这些文件是JavaScript 脚本(内容为#!/usr/bin/env bun),而非.exe。Windows CMD 无法直接执行 shebang 脚本,必须通过bun.exe加载。而 Bun 的解决方案是:在bin目录下同时生成同名.cmd批处理文件(如cc.cmd),内容为@echo off & bun "%~dp0\cc" %*

但问题来了:cc.cmd的生成依赖 Bun 的bunx命令,而bunx本身需要cc包已安装。这就形成了“鸡生蛋”循环。官方未提供cc的独立安装包,导致首次使用必然失败。

实操解法:手动补全 binlink。在$env:USERPROFILE\AppData\Local\bun\bin目录下,新建文本文件cc.cmd,内容为:

@echo off setlocal enabledelayedexpansion set "BUN_PATH=%~dp0..\bun.exe" if not exist "%BUN_PATH%" set "BUN_PATH=%LOCALAPPDATA%\bun\bun.exe" "%BUN_PATH%" "%~dp0cc" %*

同理创建cc-switch.cmdcc-codex.cmd。这样无论bun.exeAppData\Local\bun还是AppData\Roaming\npm,都能被正确找到。

3.3 关卡三:cc switch local proxy failed的 4 种根因与诊断树

cc switch local proxy failed while handling codex endpoint /responses这个错误信息极其模糊,实际涵盖四种完全不同的故障场景。我们构建了如下诊断树,按优先级顺序排查:

排查步骤检查命令预期输出根因定位
1. Codex 服务是否存活curl http://localhost:3000/health{"status":"ok","timestamp":...}若返回Connection refused,说明cc-codex未启动或端口被占
2. Switch 是否正确指向 Codexcc-switch --help | findstr "codex"--codex-url URL Codex backend URL (default: "http://localhost:3000")若默认值被覆盖为http://127.0.0.1:3000,需确认cc-codex是否监听127.0.0.1(Windows 默认只监听::1
3. 跨域头是否缺失curl -I http://localhost:3001/proxy/responsesAccess-Control-Allow-Origin: *若无此头,cc-gui的 fetch 请求被浏览器拦截,表现为 404(实际是 CORS 错误)
4. Codex 路由是否注册curl http://localhost:3000/{"routes":["/responses","/documents",...]}若返回Cannot GET /,说明cc-codex的 Express 路由未加载,检查src/index.tsapp.use('/responses', responsesRouter)是否被注释

关键技巧:第 2 步中,Windows 的localhost解析为::1(IPv6),而127.0.0.1是 IPv4。若cc-codex启动时指定--host 127.0.0.1,则cc-switch的默认--codex-url http://localhost:3000会因 IPv6/IPv4 不匹配而超时。此时必须显式设置cc-switch --codex-url http://127.0.0.1:3000

3.4 关卡四:PostgreSQL 初始化失败的字符集陷阱

cc-codex依赖 PostgreSQL 存储文档元数据。但 Windows 自带的 PostgreSQL 安装程序(EnterpriseDB)默认创建数据库时使用SQL_ASCII字符集,而cc-codex的迁移脚本migrations/001_init.sql中包含CREATE TABLE documents (title VARCHAR(255) COLLATE "en_US.utf8")en_US.utf8SQL_ASCII数据库中不存在,导致bun run migrate报错collation "en_US.utf8" for encoding "SQL_ASCII" does not exist

实操解法:重建兼容数据库。打开psql,执行:

-- 步骤1:删除默认数据库 DROP DATABASE cc_codex; -- 步骤2:创建 UTF8 编码的新数据库(关键!) CREATE DATABASE cc_codex WITH OWNER = postgres ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE = template0; -- 步骤3:授予权限 GRANT ALL PRIVILEGES ON DATABASE cc_codex TO cc_user;

注意:LC_COLLATELC_CTYPE必须与cc-codex迁移脚本中声明的 collation 名称完全一致(en_US.UTF-8,非en_US.utf8)。Windows 的区域设置中en-US对应en_US.UTF-8,大小写和下划线必须精确匹配。

3.5 关卡五:cc gui白屏的 Electron 渲染进程隔离策略

cc-gui基于 Electron 22.x 构建,其渲染进程默认启用contextIsolation: true。但cc-guipreload.js中有一段代码:

// preload.js window.api = { invoke: (channel, ...args) => ipcRenderer.invoke(channel, ...args), send: (channel, ...args) => ipcRenderer.send(channel, ...args) };

这段代码将ipcRenderer挂载到window全局对象。当contextIsolation: true时,渲染进程的window与预加载脚本的window是隔离的,window.api实际挂载到了预加载上下文,而非渲染进程上下文,导致index.html中的window.api.invoke('get-docs')Cannot read property 'invoke' of undefined,页面白屏。

实操解法:修改主进程配置。编辑cc-gui/main.js,找到new BrowserWindow创建处,将webPreferences修改为:

webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: false, // 关键:关闭隔离 nodeIntegration: true, sandbox: false }

警告:contextIsolation: false会降低安全性,但这是cc-gui当前版本的硬性要求。若企业安全策略禁止此配置,唯一解法是向 CC 社区提交 PR,将api通信改为window.postMessage+window.addEventListener('message')的跨上下文通信模式。

3.6 关卡六:Bun 的--hot模式与 Windows 杀毒软件的对抗

开发时常用bun run --hot启动cc-codex,实现文件变更自动重启。但在 Windows 上,--hot模式会频繁调用fs.watch()监听src/目录。而 Windows Defender 实时防护会将fs.watch()的大量CreateFileW系统调用识别为“潜在勒索软件行为”,主动终止bun.exe进程,日志显示Process terminated due to malware detection

实操解法:精准排除监控路径。打开 Windows 安全中心 → “病毒和威胁防护” → “管理设置” → “添加或删除排除项” → “添加排除项”,添加以下三个路径:

  • C:\your-path\cc-codex\src
  • C:\your-path\cc-codex\node_modules
  • C:\Users\YourName\AppData\Local\bun

注意:必须添加node_modules。因为bun --hot会监听node_modules/.cache中的编译产物变化,若不加此排除,Defender 仍会拦截。

3.7 关卡七:cc switch--host参数与 Windows 防火墙的博弈

cc-switch默认监听127.0.0.1:3001,这保证了仅本地访问。但某些场景(如用手机扫码连接桌面端)需要外部设备访问。此时需cc-switch --host 0.0.0.0:3001。然而 Windows 防火墙默认阻止0.0.0.0绑定,弹窗提示“Windows 防火墙已阻止某些功能”。

实操解法:预注册防火墙规则。以管理员身份运行 PowerShell:

# 创建入站规则,允许 cc-switch 的 3001 端口 New-NetFirewallRule ` -DisplayName "CC Switch Local Proxy" ` -Direction Inbound ` -Protocol TCP ` -LocalPort 3001 ` -Action Allow ` -Profile Domain,Private ` -Program "$env:USERPROFILE\AppData\Local\bun\bin\cc-switch.exe"

关键点:-Program参数必须指向cc-switch.exe的绝对路径,而非cc-switch.cmd。因为防火墙规则匹配的是实际执行的二进制文件。

4. 完整实操流程与核心环节实现:从零开始的 12 步落地

4.1 环境准备:Windows 10/11 最小化依赖清单

我们摒弃“安装 Visual Studio Build Tools”等重型方案,采用最小化依赖组合。经实测,以下组件足以支撑全部流程:

组件版本要求安装方式验证命令预期输出
PowerShell≥ 5.1Windows 10/11 自带$PSVersionTable.PSVersionMajor: 5or7
Git≥ 2.35官网下载Git-2.40.1-64-bit.exegit --versiongit version 2.40.1.windows.1
PostgreSQL≥ 14.0EnterpriseDB 安装包,勾选pgAdmin4Command Line Toolspsql --versionpsql (PostgreSQL) 15.3
Bun≥ 1.1.18手动下载bun-windows-x64.zip(见 3.1 节)bun --versionbun 1.1.20
7-Zip≥ 21.07官网下载7z2107-x64.exe7z7-Zip [64] 21.07

注意:严禁安装 Node.js。Bun 与 Node.js 共存会导致npmnpx命令冲突,且cc-codexpackage.jsonengines字段明确指定"bun": ">=1.1.0",Node.js 运行会跳过 Bun 特有优化。

4.2 源码获取与目录结构初始化

CC 开源版未提供统一发布包,必须从 GitHub 获取各子项目。按以下顺序克隆,确保版本兼容性(基于cc-org官方推荐的v0.8.3分支):

# 步骤1:创建工作目录 mkdir C:\cc-open-source cd C:\cc-open-source # 步骤2:克隆三个核心仓库(注意分支) git clone -b v0.8.3 https://github.com/cc-org/cc-gui.git git clone -b v0.8.3 https://github.com/cc-org/cc-switch.git git clone -b v0.8.3 https://github.com/cc-org/cc-codex.git # 步骤3:初始化子模块(cc-codex 依赖 automapper-core) cd cc-codex git submodule update --init --recursive cd ..

此时目录结构为:

C:\cc-open-source\ ├── cc-gui\ # Electron 客户端 ├── cc-switch\ # Rust 代理服务 └── cc-codex\ # TypeScript 后端

关键细节:cc-codexpackage.jsondependencies包含"@automapper/core": "7.12.0",而cc-guipackage.jsondevDependencies包含"@automapper/core": "8.0.0"。若不执行git submodule updatecc-codex会使用cc-guinode_modules,导致mapTo()方法签名不匹配。这是cc-gui白屏的另一个隐藏根因。

4.3 PostgreSQL 数据库初始化:从零创建生产级实例

跳过图形化 pgAdmin 操作,全程命令行,确保可脚本化复现:

# 步骤1:启动 PostgreSQL 服务(若未运行) Start-Service postgresql-x64-15 # 步骤2:创建专用用户(避免使用 postgres 超级用户) psql -U postgres -c "CREATE USER cc_user WITH PASSWORD 'StrongPass123!';" # 步骤3:创建 UTF8 数据库(见 3.4 节详解) psql -U postgres -c " DROP DATABASE IF EXISTS cc_codex; CREATE DATABASE cc_codex WITH OWNER = cc_user ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE = template0; " # 步骤4:授予权限(关键:赋予 CONNECT 和 TEMP 权限) psql -U postgres -c " GRANT CONNECT ON DATABASE cc_codex TO cc_user; GRANT TEMP ON DATABASE cc_codex TO cc_user; \c cc_codex GRANT USAGE ON SCHEMA public TO cc_user; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO cc_user; "

注意:GRANT TEMP权限至关重要。cc-codex的全文搜索使用 PostgreSQL 的tsvector类型,其内部临时表创建需要TEMP权限。缺少此权限会导致/search接口返回permission denied for database cc_codex

4.4cc-codex后端服务部署:环境变量与迁移脚本详解

cc-codex的配置通过.env文件驱动。创建C:\cc-open-source\cc-codex\.env,内容如下:

# 数据库连接 DATABASE_URL=postgresql://cc_user:StrongPass123!@localhost:5432/cc_codex # 服务端口与主机 PORT=3000 HOST=::1 # 关键:监听 IPv6 localhost,兼容 Windows 默认解析 # 存储路径(必须为绝对路径,且在同一磁盘) STORAGE_PATH=C:\cc-open-source\cc-storage # JWT 密钥(生成随机字符串) JWT_SECRET=2a8f3b1e-9c7d-4f5a-8b2c-6d9e1f4a7b8c # 日志级别 LOG_LEVEL=debug

参数计算逻辑

  • HOST=::1:Windows 的localhost默认解析为 IPv6 地址::1。若设为127.0.0.1cc-switch--codex-url http://localhost:3000会因协议不匹配失败。
  • STORAGE_PATH:必须为绝对路径,且不能是符号链接。cc-codexfs.promises.stat()会校验路径真实性,C:\cc-storage是最简选择。

执行迁移:

cd C:\cc-open-source\cc-codex bun install bun run migrate

实测心得:bun run migrate第一次执行会创建migrations/001_init.sql中定义的 5 张表。若中途失败,不要手动删表,而是运行bun run migrate:reset回滚到初始状态,再重试。因为migrate命令会记录migrations表,手动删表会导致状态不一致。

4.5cc-switch代理服务部署:端口、代理与日志的黄金三角

cc-switch是 CC 架构的神经中枢,其启动参数决定整个链路的稳定性。创建启动脚本C:\cc-open-source\start-switch.bat

@echo off setlocal :: 设置 Codex 地址(必须与 cc-codex 的 HOST/PORT 匹配) set CODEX_URL=http://[::1]:3000 :: 启动代理,监听 3001 端口,日志输出到文件 cc-switch ^ --port 3001 ^ --codex-url %CODEX_URL% ^ --log-level debug ^ --log-file C:\cc-open-source\logs\switch.log pause

关键参数解析

  • --port 3001cc-gui硬编码连接此端口,不可更改。
  • --codex-url http://[::1]:3000[::1]是 IPv6 localhost 的标准表示法,确保与cc-codexHOST=::1完全匹配。
  • --log-file:日志文件路径必须存在。提前创建C:\cc-open-source\logs目录。

启动后,验证代理健康:

curl -I http://localhost:3001/health # 应返回 HTTP/1.1 200 OK curl http://localhost:3001/proxy/responses # 应返回 cc-codex 的 /responses 接口响应

4.6cc-gui客户端构建与运行:绕过 Electron 证书警告

cc-guimain.jswebPreferences默认启用webSecurity: true,这会阻止http://localhost:3001(HTTP)与file://协议混合加载。而cc-switch默认 HTTP,导致白屏。

修改cc-gui/main.js(约第 45 行):

const mainWindow = new BrowserWindow({ width: 1200, height: 800, webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: false, // 见 3.5 节 nodeIntegration: true, sandbox: false, webSecurity: false, // 关键:禁用 Web 安全限制 allowRunningInsecureContent: true // 允许不安全内容 } });

构建并运行:

cd C:\cc-open-source\cc-gui bun install bun run build # 构建完成后,执行 start .\out\make\win-unpacked\cc-gui.exe

注意:bun run build会生成out/make/win-unpacked/目录,其中cc-gui.exe是可执行文件。不要运行bun run dev,那会启动开发服务器,与cc-switch的生产代理链路不兼容。

4.7 全链路贯通验证:从文档上传到 AI 响应的端到端测试

启动全部服务后,进行四步验证:

步骤 1:上传文档

  • 打开cc-gui,点击左上角+ New Document
  • 选择任意.txt文件(如test.txt,内容为Hello CC
  • 点击Upload,观察右下角通知:“Document uploaded successfully”

步骤 2:检查存储目录

  • 打开C:\cc-open-source\cc-storage\documents\
  • 应存在类似doc_abc123.txt的文件,内容与上传一致

步骤 3:触发 AI 响应

  • 在文档编辑区输入/summarize
  • 按回车,等待 3-5 秒
  • 应看到底部出现Summary: This document contains the text "Hello CC".

步骤 4:抓包验证链路

  • 打开 Chrome DevTools → Network 标签页
  • cc-gui中再次触发/summarize
  • 查看fetch请求:
    • Request URL:http://localhost:3001/proxy/responses
    • Request Method:POST
    • Response Headers:X-Codex-Status: 200 OK

若四步全部通过,恭喜,你的 CC 开源版已全链路贯通。

4.8 Docker 备选方案:极简配置与避坑指南

尽管不推荐,但为满足特定需求,提供最小化 Docker Compose 配置。创建docker-compose.yml