dsh-commandcode
August 30, 2026 · View on GitHub
面向 Command Code 的增强版 DSH-Desktop LLM 提供商插件。在完整对标
dsh-commandcode-provider核心能力的基础上,提供更健壮的模型目录同步、可配置的超时与重试、多凭证环境支持,以及适配 DSH-Desktop 0.7.x(DeepSeek Harness 0.1.2-alpha.1)的精致界面。
功能特性
核心能力(功能对齐)
- 提供商路由注册 — 在
ctx.llm上注册commandcode提供商路由,使 Command Code 模型可在任意对话中选择 - Models 页面卡片 — 在模型设置页面提供专属提供商卡片,包含 API Key 输入和快捷登录
- 实时模型目录 — 从 Command Code Provider API(
/provider/v1/models)实时拉取模型列表,支持本地磁盘缓存 - 凭证配置 — 支持环境变量(
COMMANDCODE_API_KEY)、设置页面、CLI 认证文件(~/.commandcode/auth.json)及内置 OAuth 登录流程 - 流式生成 — 完整的 SSE/JSONL 流式输出,支持文本、推理、工具调用和用量事件
功能增强
- SWR 模型目录 — 即时返回缓存模型,后台静默刷新;ETag 条件请求;熔断器避免持续请求故障端点
- 可配置超时与重试 — 请求超时(首字节)和流式空闲超时均可在设置中调整;瞬时故障采用指数退避+抖动重试
- 多账户自动轮换 — 配置多个 API Key;遇到 429 限流或 401 凭证失效时自动切换到下一个可用账户;主动探测窗口以恢复冷却账户
- 结构化错误诊断 — 每个错误都携带稳定错误码、诊断上下文(状态码、模型、账户、请求 ID)和面向用户的排查提示
- 按套餐过滤模型 — 自动隐藏超出当前订阅套餐的模型(故障时开放:未知套餐或有按需额度时显示全部模型)
- 用量与套餐面板 — 逐账户用量统计、5小时/每周窗口限制进度条、订阅套餐信息和额度余额
- 图片输入支持 — 支持视觉能力的模型可通过持久化附件服务接收图片输入
界面优化
- 重新设计的设置页面 — 清晰的卡片式布局:连接配置、用量与套餐、多账户管理、高级设置
- 实时表单校验 — API 地址格式错误、超时非正数等即时内联错误提示
- 中英双语界面 — 完整的中/英文本地化,跟随浏览器语言
- DSH-Desktop 0.7.1 设计规范 — 对齐设计令牌(
--dsw-alias-*)、圆角、平滑过渡、焦点环 - 逐账户用量标签页 — 在账户间切换查看各自的用量和套餐状态
版本适配
- 兼容 DeepSeek Harness 0.1.2-alpha.1 — 面向 DSH Desktop 0.7.x:使用
@deepseek-ai/dsh-client-store(接替已删除的dsh-client-runtime)、响应式SettingsScope快照契约、credentialsRemote 命名空间,用量/登录后端走共享/api精确 Fetch 路由 - 一键安装 — 添加到 profile 的
dsh.profile.bundles后重启即可,无需手动构建 - TypeScript 构建 — 通过
tsdown可复现构建,输出 ESM 格式和类型声明
安装
前置要求
- DSH-Desktop >= 0.7.0(DeepSeek Harness 0.1.2-alpha.1)
- Node.js >= 20(仅开发/构建需要;桌面应用自带运行时)
- 一个 Command Code 账户和 API Key 或订阅
快速安装(Profile Bundle)
在 DSH profile 的 package.json 中添加插件:
# 在 profile 目录下(如 ~/.dsh/profiles/desktop/)
npm install dsh-commandcode
然后在 package.json 的 dsh.profile.bundles 中添加:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-commandcode"
]
}
}
}
重启 DSH-Desktop。Command Code 提供商会出现在 Models 页面。
从源码手动构建
git clone https://github.com/wjf1/dsh-commandcode.git
cd dsh-commandcode
npm install
npm run build
# 输出在 ./lib 目录
配置
API Key
三种配置方式,按优先级排列:
- 设置页面 — 进入 设置 → Command Code,粘贴 API Key,点击保存
- 环境变量 — 在启动 DSH 的 shell 中导出
COMMANDCODE_API_KEY - CLI 认证文件 — 运行
command-code login生成~/.commandcode/auth.json - 内置登录 — 在设置页面点击"使用浏览器登录"进行 OAuth 授权
设置项参考
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
apiKeyEnv | string | COMMANDCODE_API_KEY | API Key 的环境变量名 |
apiBase | string | https://api.commandcode.ai | Command Code Provider API 基础地址 |
workingDir | string | process.cwd() | 上报给 API 的工作目录 |
modelsCachePath | string | ~/.commandcode/models-cache.json | 模型目录缓存文件路径 |
requestTimeoutMs | number | 60000 | 等待响应首字节的超时时间(毫秒) |
streamIdleTimeoutMs | number | 300000 | 流式传输中允许的最大停顿时间(毫秒) |
filterModelsByPlan | boolean | true | 隐藏当前套餐不可用的模型 |
accounts | array | [] | 用于多账户轮换的额外账户 |
activeAccount | string | — | 手动选择的活跃账户槽位 ID |
lang | 'zh' | 'en' | 'zh' | /commandcode 终端命令的语言 |
多账户配置
# cordis.patch.yml
- insert:
- id: llm-commandcode
name: "dsh-commandcode"
config:
apiKeyEnv: COMMANDCODE_API_KEY
accounts:
- label: "工作号"
apiKeyEnv: COMMANDCODE_API_KEY_WORK
- label: "个人号"
apiKeyEnv: COMMANDCODE_API_KEY_PERSONAL
当请求遇到 429(限流)或 401(凭证无效)时,插件会自动切换到下一个可用账户。
使用方法
选择模型
- 在 DSH-Desktop 中打开任意对话
- 点击模型选择器
- 找到 "Command Code" 分组
- 选择任意可用模型(带有
(CC)后缀标记)
查看用量
- 设置页面 — 进入 设置 → Command Code → 用量与套餐卡片
- 终端命令 — 在 DSH 终端中输入
/commandcode查看逐账户用量、套餐和额度限制
登录流程
- 进入 设置 → Command Code
- 点击"使用浏览器登录"
- 在打开的浏览器标签页中完成授权
- API Key 自动保存,无需重启
常见问题
"No API key" 错误
请确保至少满足以下一项:
- 环境中设置了
COMMANDCODE_API_KEY - 在 设置 → Command Code 中保存了 API Key
- 已运行
command-code login(生成~/.commandcode/auth.json)
"429 Rate Limit" 限流
- 5小时用量窗口已耗尽
- 等待窗口重置(用量卡片中显示重置时间)
- 添加更多账户以实现自动轮换
- 升级 Command Code 订阅套餐
"401 Invalid Credential" 凭证无效
- API Key 已过期或被撤销
- 重新运行登录流程或粘贴新的 Key
- 检查环境变量中是否包含正确的 Key
模型选择器中不显示模型
- 在用量卡片中点击"刷新"触发目录更新
- 检查到
api.commandcode.ai的网络连接 - 离线时仍会提供缓存的目录;重启会清除内存缓存
流式传输停顿/断开
- 在高级设置中增大
streamIdleTimeoutMs - 检查网络稳定性
- 模型响应较慢时,长生成可能超过空闲超时
开发指南
项目结构
dsh-commandcode/
├── src/
│ ├── index.ts # 插件入口:提供商注册、设置、组件装配
│ ├── adapter.ts # LLM 适配器:流式生成、模型目录、用量端点
│ ├── catalog.ts # 模型目录:SWR、缓存、熔断器
│ ├── accounts.ts # 多账户池:轮换、窗口探测
│ ├── login.ts # OAuth 登录流程:回环回调服务器
│ ├── login-wire.ts # 登录线路协议类型
│ ├── commands.ts # /commandcode 终端命令
│ ├── command-locales.ts # 命令国际化(中/英)
│ ├── usage-remote.ts # 用量 Typert Gateway 端点
│ ├── usage-wire.ts # 用量线路协议类型
│ ├── errors.ts # 结构化错误诊断
│ ├── retry.ts # 重试策略、熔断器、退避
│ └── client/
│ ├── index.ts # 客户端入口:CSS、Slot、控制器
│ ├── section.tsx # 设置页面 React 组件
│ ├── card.tsx # Models 页面提供商卡片
│ ├── settings.ts # 设置控制器(状态、校验、持久化)
│ ├── login.ts # 登录控制器(轮询)
│ ├── usage.ts # 用量控制器(获取、标签页)
│ ├── locales.ts # 客户端国际化(中/英)
│ ├── sessions.ts # 友好的图片会话错误包装
│ ├── update.ts # 更新检查
│ └── version.ts # 版本常量
├── tests/ # Node 测试运行器测试套件
├── assets/ # 图标和截图
├── cordis.patch.yml # Bundle 层定义
├── package.json
├── tsconfig.json
├── tsdown.config.ts
└── README.md / README.zh-CN.md / CHANGELOG.md / LICENSE
构建命令
npm install # 安装依赖
npm run typecheck # TypeScript 类型检查
npm test # 运行测试套件
npm run build # 构建 ESM 输出 + 类型声明到 ./lib
架构说明
- Host/Client 分离:
src/index.ts运行在 Node.js 宿主进程中;src/client/index.ts运行在浏览器中。package.json中的dsh.client.inject字段声明客户端 bundle 的依赖。 - 逐请求解析:所有连接参数(API Key、端点、超时)都通过 thunk 在每次请求时 fresh 解析,因此设置变更无需重启即可生效。
- 线路协议:Command Code Provider API 使用自定义 SSE/JSONL 格式(
/alpha/generate)。适配器解析text-delta、reasoning-*、tool-call、finish和error事件。
致谢
- Mars-Sea/dsh-commandcode-provider — 本项目增强的原始社区插件。MIT 许可证。
- Command Code 团队提供 Provider API 和 CLI。
- DeepSeek Harness 团队提供插件架构和 LLM 适配器框架。
许可证
MIT © 2026 dsh-commandcode 贡献者