# dgbmcmore **Repository Path**: opencode-plugin/dgbmcmore ## Basic Information - **Project Name**: dgbmcmore - **Description**: dgbmcmore-支持多key轮询(DBG 公益站) - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-25 - **Last Updated**: 2026-10-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # opencode-dgbmcmore [DGB More](https://freeapi.dgbmc.top) 免费通道的 OpenCode 提供商插件,支持多 API Key 自动轮询。 ## 快速开始 ## 构建 ``` cd dgbmcmore npm install npm run build ``` ## 安装: ``` // opencode.json { "plugins": [ "/path/to/dgbmcmore" ] } ``` ### 获取 API Key 1. 注册账号(邀请链接): [freeapi.dgbmc.top/sign-up?aff=3ZYg](https://freeapi.dgbmc.top/sign-up?aff=3ZYg) 2. 创建 API Key: [freeapi.dgbmc.top/keys](https://freeapi.dgbmc.top/keys) ### 配置 运行 `opencode connect`,粘贴你的 API Key 即可。 支持输入多个 Key(用逗号分隔),插件会自动轮询使用,充分利用各 Key 的额度。 ## 可用模型 ### 推理模型 | 模型 ID | 上游真实 ID | 上下文 | 说明 | |---------|-------------|--------|------| | `grok-4.2` | `grok-4.20-multi-agent-0309` | 256K | Multi-Agent 多智能体推理模型 | | `grok-4.3` | `grok-4.3` | 256K | Grok 4.3 推理模型 | | `grok-4.5` | `grok-4.5` | 256K | Grok 4.5 推理模型 | | `grok-4.7` | `grok-4.7` | 256K | Grok 4.7 推理模型 | > OpenCode 配置中使用模型 ID(别名)即可,插件内部会自动映射为上游真实 ID 发起请求。 ## 架构 ``` dgbmcmore/ ├── package.json # 项目配置 ├── tsconfig.json # TypeScript 配置 ├── src/ │ ├── index.ts # 插件入口 — auth / config / chat.headers / dispose 钩子 │ ├── constants.ts # 模型定义 + 提供商常量 │ ├── plugin/ │ │ ├── auth.ts # 多 Key 持久化存储 (~/.dgbmcmore/auth.json) │ │ └── key-manager.ts # API Key 轮询管理器 │ └── utils/ │ └── debug-logger.ts # 调试日志 └── dist/ # 构建产物 ``` ### 核心流程 1. **授权**: 用户输入一个或多个 API Key → `AuthStorage` 持久化到本地 2. **轮询**: `chat.headers` 钩子每次请求通过 `KeyManager` round-robin 轮换 Key,错误计数 ≥3 自动跳过 3. **自愈**: 请求成功时自动重置对应 Key 的错误计数 4. **清理**: `dispose` 钩子重置全局状态,防止插件重连后 Key 轮询错乱 ## 开发 ```bash # 安装依赖 npm install # 构建 npm run build # 类型检查 npm run typecheck ``` ### 调试日志 启用调试日志: ```bash # 方式一 export DEBUG=1 # 方式二 export OPENCODE_DGBMCMORE_DEBUG=1 ``` 日志文件位置: `~/.dgbmcmore/debug.log` ## Key 黑名单(blacklist.json) KeyManager 会为每个 Key 维护错误计数,持久性错误(`401/403/400` 等)触发 `reportError`(计数 +1), 当 `errorCount >= 3` 时该 Key 被临时拉黑,轮询时自动跳过;请求成功一次即触发 `reportSuccess` 复位计数。 黑名单状态通过快照文件跨重启保留,重启后自动恢复各 Key 的错误计数。 快照文件格式(与插件写盘格式一致): ```json { "updatedAt": 1759800000000, "keys": [ { "key": "sk-xxx1", "errorCount": 3, "blocked": true }, { "key": "sk-xxx2", "errorCount": 0, "blocked": false } ] } ``` 目标路径:`%USERPROFILE%\.dgbmcmore\blacklist.json` 复制方法(可选):将项目 `jsonc/blacklist.jsonc` 复制到 `%USERPROFILE%\.dgbmcmore\` 并重命名为 `blacklist.json`。不复制也不影响运行——插件仅在内存中计数,不跨重启保留;快照读写失败仅记录 debug 警告,绝不中断主流程。 ## 技术细节 - **适配器**: `@ai-sdk/openai-compatible` — 标准 OpenAI Chat Completions 协议 - **端点**: `https://freeapi.dgbmc.top/v1` - **模型别名**: 配置中的模型 ID(如 `grok-4.2`)为别名,插件通过 `constants.ts` 的 key 匹配后转换为真实 ID 请求上游 - **推理分离**: 所有模型声明 `interleaved: { field: 'reasoning_content' }`,思考内容与正文分离展示 - **错误处理**: - 401/403 → 标准 JSON 错误流,立即报错,不无限等待 - 429/5xx → 标准 JSON 错误流(保留原状态码),触发 OpenCode 自动重试 - 网络异常 → 返回 502 标准错误流,不向 UI 抛异常 - fetch 内绝不 throw,防止渲染进程崩溃 - **日志**: 不使用 `console.error`,通过 `DebugLogger` 写入文件 - **无节流/重试**: 插件不自行实现节流或重试机制,由 OpenCode 框架管理 ## 配置文件 插件运行所需的配置文件位于本仓库 ./jsonc/ 目录下(provider.jsonc 与 models.jsonc)。使用前将这两个文件复制到用户目录 %USERPROFILE%\.dgbmcmore/ 下(缺失时插件启动会 fail fast 报错)。复制后可按需编辑模型列表与提供商信息(支持注释),修改后重启插件生效。