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)的精致界面。

CI License: MIT Node

English | 中文


功能特性

核心能力(功能对齐)

  • 提供商路由注册 — 在 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 快照契约、credentials Remote 命名空间,用量/登录后端走共享 /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.jsondsh.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

三种配置方式,按优先级排列:

  1. 设置页面 — 进入 设置 → Command Code,粘贴 API Key,点击保存
  2. 环境变量 — 在启动 DSH 的 shell 中导出 COMMANDCODE_API_KEY
  3. CLI 认证文件 — 运行 command-code login 生成 ~/.commandcode/auth.json
  4. 内置登录 — 在设置页面点击"使用浏览器登录"进行 OAuth 授权

设置项参考

字段类型默认值说明
apiKeyEnvstringCOMMANDCODE_API_KEYAPI Key 的环境变量名
apiBasestringhttps://api.commandcode.aiCommand Code Provider API 基础地址
workingDirstringprocess.cwd()上报给 API 的工作目录
modelsCachePathstring~/.commandcode/models-cache.json模型目录缓存文件路径
requestTimeoutMsnumber60000等待响应首字节的超时时间(毫秒)
streamIdleTimeoutMsnumber300000流式传输中允许的最大停顿时间(毫秒)
filterModelsByPlanbooleantrue隐藏当前套餐不可用的模型
accountsarray[]用于多账户轮换的额外账户
activeAccountstring手动选择的活跃账户槽位 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(凭证无效)时,插件会自动切换到下一个可用账户。


使用方法

选择模型

  1. 在 DSH-Desktop 中打开任意对话
  2. 点击模型选择器
  3. 找到 "Command Code" 分组
  4. 选择任意可用模型(带有 (CC) 后缀标记)

查看用量

  • 设置页面 — 进入 设置 → Command Code → 用量与套餐卡片
  • 终端命令 — 在 DSH 终端中输入 /commandcode 查看逐账户用量、套餐和额度限制

登录流程

  1. 进入 设置 → Command Code
  2. 点击"使用浏览器登录"
  3. 在打开的浏览器标签页中完成授权
  4. 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-deltareasoning-*tool-callfinisherror 事件。

致谢

  • Mars-Sea/dsh-commandcode-provider — 本项目增强的原始社区插件。MIT 许可证。
  • Command Code 团队提供 Provider API 和 CLI。
  • DeepSeek Harness 团队提供插件架构和 LLM 适配器框架。

许可证

MIT © 2026 dsh-commandcode 贡献者