JSPM

  • Created
  • Published
  • Downloads 2263
  • Score
    100M100P100Q108108F
  • License MIT

A DeepSeek-native AI coding agent for your terminal

Package Exports

  • dskcode

Readme

dskcode

基于 DeepSeek 的 AI 编程助手终端 CLI 工具。让 AI 直接在终端中理解你的代码、读写文件、执行命令。 npm version Node.js

dskcode


特性

🤖 AI 编程助手

  • 终端原生交互dskcode 直接进入交互式对话,在终端中与 AI 协作编码
  • DeepSeek 深度集成 — 原生 DeepSeek API 支持,Prefix Cache 感知,成本透明
  • 多模型支持DeepSeek-V4-Flash(默认,速度快)和 DeepSeek-V4-Pro(精度高)可选
  • 深度思考模式/thinking 开启 DeepSeek 原生推理能力,/effort 切换 High / Max 等级
  • 流式渲染 — 打字机效果、spinner、代码块高亮、工具调用可视化
  • 计划模式/plan 切换到计划模式(紫色主题),让 AI 先分析再编码,适合复杂任务
  • Token 计价 — 会话级 / 日级 / 历史级三层成本统计,Prefix Cache 半价计费
  • 中文优先 — 界面提示、帮助信息、文档均为中文

🛠️ 工具系统

10 个内置工具,覆盖文件读写、命令执行、代码搜索全场景:

工具 能力
read_file 读取文件,支持行号范围,自动拒绝二进制文件
write_file 写入/创建文件,自动创建中间目录
edit_file 精确文本替换,唯一匹配校验,自动保留原 EOL
multi_edit 原子批量替换,一处失败全部回滚,支持 replaceAll
delete_range 按行锚点删除文件中的行范围
bash 执行 shell 命令,超时控制,Windows / Git Bash 兼容
glob 文件路径模式搜索(* / ** / ?),自动跳过 node_modules / .git
grep 文件内容正则搜索,大小写控制,扩展名过滤
ls 目录列表,类型标记,隐藏文件控制
fetch HTTP 请求(GET / POST / PUT / DELETE),自定义请求头

🔒 权限与安全

  • 三级审批策略 — Allow / Ask / Deny,按工具 + 参数精细化控制
  • 硬编码安全规则 — 内置 11 条灾难模式拦截:rm -rf / / rm -rf ~ / curl|sh / git push --force 到 main 等
  • 写工具默认确认 — 0 配置即可用:写文件前弹窗确认,always 按文件路径缓存本会话免问
  • 规则引擎 — 在 settings.jsonpermissions 字段定义 always_allow / always_deny / always_confirm
  • ink 弹窗 — 键盘快捷键 y/n/a,Esc 拒绝,上下箭头切换
  • Turn-Abort — 写工具被拒绝后,本轮余下 tool_calls 全部跳过,避免模型"一错再错"
  • denial 友好提示 — 拒绝时显示具体原因(哪条规则命中、为什么、怎么调整)
  • /permissions 命令 — 随时查看当前生效的规则、会话 grants、配置文件加载来源

💾 会话与回退

  • 会话持久化 — 对话自动保存到磁盘,重启可恢复
  • 文件回退(/rewind) — 每轮对话自动生成 git stash 检查点,/rewind 1 一键撤回最新修改
  • rewind 提示 — 对话结束后 2 秒在原状态栏位置自动出现「↩ /rewind 1 可撤回本次修改」
  • 多回合选择/rewind 进入选择模式,↑↓ 选择任意历史检查点回退
  • 上下文压缩 — 长会话自动摘要,保留最近 N 回合完整内容,Prefix Cache 命中继续享半价

🎤 语音输入

  • /voice 命令 — 在 ChatSession 输入框直接录入语音,边说边转写,结果落回输入框
  • F2 快捷键 — 一键开关录音,按 ESC 取消
  • 流式识别 — 边录边出字(partial result),识别完成时落回最终文本(final)
  • 火山 ASR 大模型 — 走 bigmodel_async WebSocket 流式协议,识别准确率实测 100%
  • 跨平台录音 — 自动探测 ffmpeg / sox / arecord,macOS / Linux / Windows 三平台零配置
  • 独立调试子命令dskcode voice 跳过 UI,把识别结果直接打印到 stdout,便于排查

🎮 内置工具

  • 股票行情dskcode stock 交互式 A 股行情终端,键盘选择 + 详情折线图 + 5s 倒计时自动刷新
  • 内置小游戏dskcode game 启动游戏列表,打砖块(10 个关卡)、Coder Check 极速打字等

⚙️ 配置

  • 多层级配置 — 全局 + 项目 + 环境变量 + CLI flag 四级合并
  • JSON 格式 — 易于编辑、版本控制、团队共享
  • 命令提示轮播 — 输入框上方自动轮播可用命令提示

🔌 扩展性

  • MCP 插件 — 通过 Model Context Protocol 扩展任意外部工具(数据库 / 浏览器 / Notion 等)
  • Tool 抽象 — 自定义工具只需实现 AgentTool 接口

快速开始

# 团队内部安装(请使用公司 npm registry)
npm install -g dskcode

# 查看帮助
dskcode --help

# 启动交互式对话(无参默认行为)
dskcode

第一次使用

首次启动会引导你输入 DeepSeek API Key,保存到 ~/.dskcode/settings.json 后即可使用。

# 重新设置 API Key
dskcode setup

# 在当前项目生成 AGENTS.md 项目记忆
dskcode init

命令

命令 说明
dskcode 启动交互式对话会话(默认行为,等价于 dskcode chat
dskcode chat 同上,保留作为显式子命令
dskcode run <prompt> 执行一次性任务(如"修改所有 TODO")
dskcode setup 运行配置向导,设置 API Key 等
dskcode init 在当前项目生成 AGENTS.md 项目记忆文件
dskcode game <name> 启动内置小游戏,不指定名称则显示交互式游戏列表
dskcode stock [codes...] 交互式股票行情,↑/↓ 选择,Enter 查看分时折线图,5s 倒计时自动刷新
dskcode voice 独立语音识别调试:录音并把识别结果(partial/final)直接打印到 stdout
dskcode config-ui 启动本地 WebSocket 服务(端口固定 54006),仅供 Chrome 扩展编辑 settings.json,需 Ctrl+C 退出
dskcode --ws dskcode config-ui 等价,适用于桌面快捷方式
dskcode completion 生成 shell 自动补全配置

全局选项

选项 说明
-V, --version 显示版本号
--verbose 开启详细日志输出
--config <path> 指定配置文件路径
--dir <path> 指定工作子目录,@ 提示仅显示该目录下的文件
--no-config-ui 默认会在 chat session 启动时同时拉起 ws server(端口 54006)供 Chrome 扩展连接。加此 flag 后跳过
--ws 跳过 chat,直接独占运行本地 WebSocket 服务(端口 54006),需 Ctrl+C 退出
-h, --help 显示帮助信息

环境变量 DSKCODE_CONFIG_UI=0--no-config-ui 等价,默认是开启。


交互式 Chat 命令

dskcode(或 dskcode chat)会话中输入以下命令(按 /help 查看所有可用命令):

命令 说明
/rewind 进入选择模式 ↑↓ 选择检查点回退;/rewind 1 直接撤回最新一轮(1=最新,2=上一次…)
/plan 切换为计划模式(紫色主题),AI 先分析需求再逐步编码
/code 切换回代码模式
/thinking 切换深度思考(DeepSeek 原生推理能力)
/effort 切换推理等级 High / Max
/toolchoice 切换工具调用策略(auto / required / none)
/model 切换模型(DeepSeek-V4-Flash / DeepSeek-V4-Pro)
/permissions 查看当前权限规则、会话 grants、配置文件加载来源
/clear 清空当前对话历史
/help 查看所有可用命令
/version 显示版本信息
/game 启动内置小游戏
/stock 跳转到股票行情
/voice 开启/结束语音录入(等价于按 F2);录音中再按 ESC 可取消
F2 /voice,按住开启/再次按下结束;适合不想敲命令时用

对话结束后若 AI 修改了文件,2 秒后原 spinner 位置会自动出现提示:

↩ /rewind 1 可撤回本次修改

该提示一直保留到下一轮对话开始,方便随时撤回最新一轮文件修改。


配置

dskcode 使用 JSON 格式的配置文件,支持多层级合并(优先级从低到高):

  1. 内置默认值 — 无需配置即可运行
  2. 用户全局~/.dskcode/settings.json
  3. 项目本地 — 当前目录下的 .dskcode/settings.json
  4. 环境变量 — 如 DEEPSEEK_API_KEY
  5. CLI flag — 命令行参数优先级最高

全局配置示例

~/.dskcode/settings.json(存放个人密钥):

{
  "defaultProvider": "deepseek",
  "providers": [
    {
      "name": "deepseek",
      "apiKey": "sk-xxx",
      "baseUrl": "https://api.deepseek.com",
      "model": "deepseek-v4-flash"
    }
  ]
}

项目配置示例

.dskcode/settings.json(存放团队约定的行为参数 + 权限规则):

{
  "defaultProvider": "deepseek",
  "temperature": 0.3,
  "maxToolRounds": 30,
  "tools": [
    { "name": "read_file", "enabled": true },
    { "name": "write_file", "enabled": true },
    { "name": "bash", "enabled": true },
    { "name": "grep", "enabled": true }
  ],
  "permissions": {
    "default": "confirm",
    "tools": {
      "bash": {
        "always_allow":   ["^git\\s+status", "^ls"],
        "always_deny":    ["^npm\\s+publish"],
        "always_confirm": ["^rm\\s"]
      },
      "edit_file": {
        "always_allow": { "pathGlob": "**/*.test.ts" }
      }
    }
  }
}

语音输入

voice 段为可选配置。开启后在 ChatSession 中可用 /voiceF2 调起语音录入:

{
  "voice": {
    "enabled": true,                                    // 总开关
    "provider": "volc",                                  // 目前仅支持 volc(火山引擎 ASR)
    "token":        "${env.VOLC_ASR_TOKEN}",             // 推荐从环境变量读,勿入仓
    "secretKey":    "${env.VOLC_ASR_SECRET}",
    "resourceId":   "volc.bigasr.sauc.duration",         // 默认即可
    "sampleRate":   16000,                                // 16k 精度高
    "language":     "zh-CN"                               // zh-CN / en-US / ja-JP
  }
}

凭据建议通过环境变量注入;填明文仅供本地调试。运行依赖系统命令其一:ffmpeg(三平台通用)/ sox(macOS)/ arecord(Linux)。

股票行情

dskcode stock 交互式 A 股行情终端,↑/↓ 选择股票,Enter 查看分时折线图、实时刷新。

dskcode stock          # 自选股列表
dskcode stock sh000001 # 指定代码

浏览器配置 UI(配合 Chrome 扩展)

日常使用:只要跑 dskcode 启动 chat session,同时会在后台拉起 ws 服务:

dskcode           # 进 chat,同时后台跑 ws server
dskcode --ws      # 只跑 ws server,不进 chat(需要 Ctrl+C 退出)
dskcode config-ui # 与 --ws 等价的子命令

后台 server 默认绑端口 54006。终端启动时控制台会看到一行:

  [config-ui] ws server listening on ws://127.0.0.1:54006 (token: 9eee4f0c…)

Chrome 扩展启动后会自动连这个 URL,无需在 popup 粘贴。

关闭后台 server:传 --no-config-ui 或设置 DSKCODE_CONFIG_UI=0。 如果 54006 已被另一个 dskcode 占用,本进程会跳过 ws 并打出一行提示,扩展连不到。

端口常量:在 src/config/port.ts 定义,与扩展 src/lib/connection.ts 中的 WS_URL 一一对应,迁移端口同时改两边。


权限系统

dskcode 默认启用三层防护,0 配置即可用

第一关:硬编码黑名单

内置 11 条灾难模式规则,不可被配置覆盖,匹配即拒绝:

类别 规则示例
递归删除关键目录 rm -rf /rm -rf ~rm -rf $HOMErm -rf .rm -rf ..
破坏磁盘 / 设备 mkfs /dev/sdadd of=/dev/sda
递归权限提升 chmod -R 777 /
网络拉取直跑 `curl ...
强制推主干 git push --force 到 main / master

第二关:写工具默认确认

  • 读工具(read_file / ls / glob / grep)→ 直接放行
  • 写工具(write_file / edit_file / multi_edit / delete_range)→ 弹窗确认
    • y(Yes)— 仅本次放行
    • a(Always)— 本会话内这个文件路径后续修改不再问
    • n(No)— 拒绝,本轮余下 tool_calls 全部跳过

第三关:用户自定义规则

settings.jsonpermissions 字段定义细粒度规则:

  • default — 无规则命中时的默认行为(allow / confirm / deny
  • tools.<name>.always_allow — 始终放行的命令正则列表
  • tools.<name>.always_deny — 始终拒绝的命令正则列表
  • tools.<name>.always_confirm — 始终需要确认的命令正则列表
  • pathGlob — 工具参数路径 glob 匹配(支持 * / ** / ? / [abc]

查看当前生效的规则:

> /permissions
📋 当前权限系统状态:
  Gate 链:共 2 个
  模式:写确认(默认)
  会话 grants:0 个("always" 批准的工具调用)

配置文件:~/.dskcode/permissions.json(全局)
            .dskcode/permissions.json(项目级,项目级优先)

架构

src/
├── index.ts          # 入口,shebang + 异常处理
├── cli/              # commander 命令路由
├── config/           # JSON 配置加载与合并
├── provider/         # LLM Provider 接口(DeepSeek)+ CostTracker
├── tool/             # 内置工具(Registry + 10 个内置工具)
├── plugin/           # MCP 插件管理器
├── security/         # 权限决策引擎:黑名单 + 规则引擎 + 4 个 Gate
├── agent/            # Agent 会话循环 + 检查点(Checkpoint)
├── checkpoint/       # git stash 驱动的文件状态检查点(/rewind 基础)
├── session-store/    # 会话持久化与恢复
├── stock/            # 股票行情(交互式终端 + asciichart)
├── game/             # 内置小游戏
├── voice/            # 语音输入(火山 ASR 协议 + 跨平台录音 + 编排)
├── types/            # 共享类型定义
├── utils/            # 工具函数(渐变、模型工具等)
└── ui/               # Ink 交互式终端 UI

开发

仓库为内部项目,按公司代码规范提 PR。开发流程:

# 安装依赖
npm install

# 开发模式(自动监听重构建)
npm run dev

# 构建
npm run build

# 测试
npm test

# 类型检查
npm run type-check

# 代码检查
npm run lint

项目要求


录音依赖(可选,使用 /voice 时需要)

/voice 需要系统装好一个录音 CLI;src/voice/recorder-drivers.ts 会自动探测:

平台 推荐命令 安装
macOS sox brew install sox(首次会触发 TCC 麦克风授权弹窗)
Linux arecord(alsa-utils)或 ffmpeg sudo apt install alsa-utils
Windows ffmpeg(portable 也可) 手动下 https://www.gyan.dev/ffmpeg/builds/ 解压到 PATH

验证装好后在终端里跑 dskcode voice,看到「[recording]」后说话,出现 partial 后台有字出现即接入成功。报错通常是麦克风权限、设备名或 ffmpeg 未入 PATH,详见 docs/语音识别voice命令接入.md §12.1。


反馈

Bug / 需求 / 改进建议欢迎加入 QQ 群沟通

沟通群