# OpenCode对接IDEA免费模型 **Repository Path**: web/open-code-to-idea ## Basic Information - **Project Name**: OpenCode对接IDEA免费模型 - **Description**: OpenCode对接IDEA免费模型 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-29 - **Last Updated**: 2026-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
OpenCodeToIdea

OpenCodeToIdea

把 OpenCode 的免费模型摆渡给 WorkBuddy / DSH / VSCode / Cursor / JetBrains 等 IDE

跨平台托盘应用 · 隔离运行时 · 并发检测 · 判定缓存 · 一键写入 · 本机 OpenAI 兼容转发口 · Adapter 可扩展架构

许可证 版本 平台 Node 测试
--- ## ✨ 核心特性 - **Adapter 可扩展架构**:新增一个 IDE 客户端 = 写一个适配器文件 + 注册一行,主程序自动识别 UI 和路由 - **隔离运行时**:在数据目录内放一份独立的 OpenCode,自动下载/校验/启动,与系统 OpenCode 互不干扰 - **并发检测**:3 路并发探测每个免费模型能否按客户端的工具协议产生动作 - **判定缓存**:成功判定 6 小时、失败原因按类别 10 分钟到 1 小时分级过期,**重启基本秒开** - **一键写入**:WorkBuddy 的 `models.json`、DSH 的 `cordis.patch.yml`、以及未来更多 IDE 配置 - **本机转发口**:只监听 127.0.0.1 的 OpenAI 兼容端点(41980),客户端填进去就能用 - **审批围栏**:模型永远不能自己执行本机动作,所有外部调用必须通过客户端的工具协议 ## 界面 浅色 / 深色两套主题,托盘常驻,控制面板四档状态一眼可读。 ![工作台(浅色)](docs/screenshots/01-light-ready.png) ## 工作流程 ```mermaid flowchart LR A["托盘 / 控制面板"] -->|读取模型目录| B["隔离 OpenCode 运行时"] B --> C{"并发检测
能否按协议产生动作"} C -->|产生正确动作| D["判定缓存
成功 6 小时"] C -->|只回文本| E["可用 · 仅对话
工具关闭"] C -->|超时 / 限流| F["记录原因
分级自动重试"] D --> H["Adapter 写入目标
WorkBuddy / DSH / ..."] E --> H H --> I["IDE 客户端"] I -->|"OpenAI 兼容请求"| J["本机转发口
127.0.0.1:41980"] J --> K["审批围栏 · 动作转交"] K --> B A -->|退出| L["摘掉自己导入的条目
保留手写配置"] ``` ## 快速开始 ### 终端用户 先安装 WorkBuddy 或 DeepSeek Harness(DSH)。**不需要另外装 Node.js**。 - **macOS(Apple 芯片)**:下载 `OpenCodeToIdea-1.0.0-mac-arm64.dmg`,双击打开,把 `OpenCodeToIdea` 拖进「应用程序」,再双击启动。 未做 Apple 公证,首次打开可能要右键 →「打开」。若提示「已损坏」: ```bash xattr -dr com.apple.quarantine "/Applications/OpenCodeToIdea.app" ``` - **Windows**:运行 `OpenCodeToIdea-Setup-1.0.0-win-x64.exe`,桌面图标双击即开。 安装包会写入**开机自启**(托盘常驻、不开弹窗),卸载时自动摘干净。 首次启动会自动准备 OpenCode、扫描免费模型、并发检测,**检测完自动写入一次**。之后重新检测**不会**自动改客户端,需要点导入按钮。 ### 开发者 ```sh npm ci npm test # 91 项自动测试,不访问网络 npm run desktop # 起 Electron(窗口 + 托盘 + 后台服务) npm start # 只起后台服务(无界面),用于调试 npm run build:mac # 打 macOS 的 .app + zip + dmg(ad-hoc 签名 + 深度严格校验) npm run build:dmg # 只重打安装包(复用已构建的 .app,几秒钟) npm run build:win # 打 Windows 安装包(NSIS,桌面图标 + 开机自启) npm run build:win:portable # 打 Windows 便携版(不写注册表、不自启) npm run build:win:arm64 # 打 Windows ARM64 安装包 npm run build:linux # 打 Linux AppImage(实验性) $env:PATH = "C:\Windows\System32\WindowsPowerShell\v1.0;" + $env:PATH npm run build:win:portable ``` Windows 构建前置条件:确保 PowerShell 在系统 PATH 里(`C:\Windows\System32\WindowsPowerShell\v1.0`),否则会报 `spawn powershell.exe ENOENT`。electron 下载已配置国内镜像 npmmirror。 $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"; npm install electron --save-dev 2>&1 | Select-Object -Last 15 ## 数据目录 | 系统 | 应用数据 | WorkBuddy 配置 | DSH 配置 | |---|---|---|---| | macOS | `~/Library/Application Support/OpenCodeToIdea` | `~/.workbuddy/models.json` | `~/.dsh/profiles/*/cordis.patch.yml` | | Windows | `%APPDATA%\OpenCodeToIdea` | `%USERPROFILE%\.workbuddy\models.json` | `%USERPROFILE%\.dsh\profiles\*\cordis.patch.yml` | | Linux(实验性) | `$XDG_CONFIG_HOME/OpenCodeToIdea` | `~/.workbuddy/models.json` | `~/.dsh/profiles/*/cordis.patch.yml` | 数据目录里:`api-key`(本机转发口密钥)、`status.json`、`settings.json`、`probe-cache.json`(判定缓存)、`runtime/`(托管运行时)、`opencode/`(隔离 OpenCode 目录)。 ### 环境变量(调试用) `FERRY_DATA_DIR`、`FERRY_PORT`(默认 41980)、`FERRY_MODELS_FILE`、`FERRY_NO_SYNC=1`(完全不写客户端配置)、`DSH_HOME`(默认 `~/.dsh`)、`FERRY_OPENCODE_PATH`、`FERRY_PROBE_CONCURRENCY`(并发度,默认 3,上限 6)、`FERRY_PROBE_TTL_MINUTES`(成功判定有效期,默认 360 分钟)、`WORKBUDDY_CONFIG_DIR` / `WORKBUDDY_DATA_FOLDER_NAME`。 ### 本机接口 所有路由都要 `Authorization: Bearer <数据目录>/api-key`,带 `Origin` 头的请求一律 403。 ``` GET /health # 完整状态 GET /v1/models # 已判定可用的模型(id 为 "OC · 名字") POST /v1/chat/completions # 转发,支持 stream;并发上限 4 POST /admin/refresh | /admin/probe | /admin/import | /admin/selection POST /admin/target # {target:"workbuddy"|"dsh"|...} 切换写入目标 POST /admin/system-proxy | /admin/find-config ``` ## 代码结构 ``` src/ main.js 编排:状态机 / 检测队列 / 刷新 / 写入目标 / 退出清理 adapters/index.js Adapter 注册表 + CAP 能力位常量 adapters/workbuddy-adapter.js 薄接口层,只 import ./config/workbuddy-config.js adapters/dsh-adapter.js 薄接口层,只 import ./config/dsh-config.js adapters/vscode-adapter.js 薄接口层,只 import ./config/vscode-config.js adapters/config/ 所有 adapter 专属实现层统一目录 workbuddy-config.js WorkBuddy resolve / validate / sync(内部引用 sync.js / config-finder.js) dsh-config.js DSH profile patch 的 provider 合并 / 摘除 / 备份 vscode-config.js VSCode chatLanguageModels.json customendpoint provider 读写 config-finder.js Windows 自动查找配置(只读 agent 辅助) backend.js OpenCode 会话、审批围栏、事件流、动作转交与翻译 runtime.js 运行时发现 · 下载 · 校验 · 隔离启动 protocol.js 请求校验 / 信封编解码 / usage 换算 / SSE probe.js 检测请求与判定规则 probe-cache.js 判定缓存:跨重启复用,按能力指纹与过期时间失效 repair.js 翻译兜底:系统提示、材料打包、诊断重发 handoff.js 本机动作 → 外部工具的映射与 schema 复核 sync.js 共享基础设施:合并 / 加锁 / 备份 / 原子写(多 adapter 共享) server.js 本机 HTTP 面(鉴权、来源围栏、转发) platform.js system-proxy.js atomic.js json.js service-instance.js model-status.js reasoning.js desktop/ main.cjs Electron:窗口、托盘、受限 IPC、服务生命周期 preload.cjs 只暴露状态订阅与固定动作 index.html style.css renderer.js 控制面板 activity.cjs 托盘与面板共用的阶段文案 test/ 91 项自动测试 docs/ 多客户端扩展方案.md Adapter 架构设计文档 adapter-开发指南.md 新增 IDE 适配器的完整开发流程 设计说明.md 架构、协议、机制与边界 screenshots/ 界面截图 ``` ## 扩展一个 IDE 客户端 OpenCodeToIdea 采用 Adapter 模式架构。VSCode Copilot Chat(Custom Endpoint)已作为内置实现,新增其他 IDE(例如 Cursor、JetBrains)**必须成对创建两个文件**: 1. **`src/adapters/-adapter.js`** —— 薄接口层,只声明 `id` / `name` / `capabilities` + 转发到 config 层的方法。adapter 层**严禁**直接 import `sync.js`、`json.js` 等共享模块。 2. **`src/adapters/config/-config.js`** —— 实现层,所有文件读写、格式合并、OWNER 标记、备份原子写逻辑全部在这里。共享模块用 `../../sync.js` 形式引用。 3. 把 adapter 文件名加到 `src/adapters/index.js` 的 `ADAPTER_FILES` 数组。 主程序会自动检测、自动渲染切换按钮、自动路由写入。详细流程、CAP 位说明、完整骨架代码见 [adapter-开发指南.md](docs/adapter-开发指南.md)。 ## 诚实交代 - 启动后会自动发送简短的检测请求,**会使用少量免费额度** - 检测通过只代表"这一次能按协议产生动作",不代表完整工作流都验证过 - 不可用的模型只在窗口里保留记录,**不会**提供给客户端 - 免费模型与额度由上游决定,随时可能变化 - 系统代理只支持手动 HTTP/HTTPS 配置,**不支持 PAC/SOCKS** ## 本项目来源 本项目由 [RuiC-oc-ferry](https://github.com/HRuiCcc/RuiC-oc-ferry) 改造而来,基于其 MIT 协议授权。 ## License [MIT](LICENSE) ---

如果这个工具帮到了你,可以请我喝杯咖啡 ☕

微信赞赏码