Package Exports
- dskcode
Readme


特性
🤖 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.json的permissions字段定义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_asyncWebSocket 流式协议,识别准确率实测 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 / GitHub / Figma 等),本地 stdio 与远程 HTTP 均支持
/mcp命令 — 查看所有 MCP server 状态、重启、重载- 自动重试 — 启动失败的 server 会按 2/4/8/16/30 秒指数退避重试
- 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、配置文件加载来源 |
/mcp |
列出所有 MCP server 状态;/mcp restart <name> 重启;/mcp reload 重载 |
/clear |
清空当前对话历史 |
/help |
查看所有可用命令 |
/version |
显示版本信息 |
/game |
启动内置小游戏 |
/stock |
跳转到股票行情 |
/voice |
开启/结束语音录入(等价于按 F2);录音中再按 ESC 可取消 |
F2 |
同 /voice,按住开启/再次按下结束;适合不想敲命令时用 |
对话结束后若 AI 修改了文件,2 秒后原 spinner 位置会自动出现提示:
↩ /rewind 1 可撤回本次修改该提示一直保留到下一轮对话开始,方便随时撤回最新一轮文件修改。
配置
dskcode 使用 JSON 格式的配置文件,支持多层级合并(优先级从低到高):
- 内置默认值 — 无需配置即可运行
- 用户全局 —
~/.dskcode/settings.json - 项目本地 — 当前目录下的
.dskcode/settings.json - 环境变量 — 如
DEEPSEEK_API_KEY - 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 中可用 /voice 或 F2 调起语音录入:
{
"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 并打出一行提示,扩展连不到。
MCP 服务器(v0.8+)
在 ~/.dskcode/settings.json 的 mcpServers 段声明 MCP server,启动 dskcode 后会自动
spawn 子进程并把 server 暴露的工具注册到 ToolRegistry。详见 docs/接入MCP服务.md。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>" }
}
},
"mcpServerTimeout": 60
}旧配置 plugins: PluginConfig[] 仍兼容 1 个版本,会被自动迁移到 mcpServers。
权限系统
dskcode 默认启用三层防护,0 配置即可用:
第一关:硬编码黑名单
内置 11 条灾难模式规则,不可被配置覆盖,匹配即拒绝:
| 类别 | 规则示例 |
|---|---|
| 递归删除关键目录 | rm -rf /、rm -rf ~、rm -rf $HOME、rm -rf .、rm -rf .. |
| 破坏磁盘 / 设备 | mkfs /dev/sda、dd 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.json 的 permissions 字段定义细粒度规则:
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(项目级,项目级优先)架构
项目采用「领域模块 + 入口骨架」的扁平分层,每个能力点都封成独立目录,便于按需替换或复用:
| 模块 | 职责 |
|---|---|
| 入口 | shebang + 全局异常处理 |
| 命令路由 | commander 子命令、参数解析、补全生成 |
| 配置层 | JSON 多层级加载与合并(全局 / 项目 / 环境变量 / flag) |
| Provider | LLM 接口抽象(DeepSeek 实现)+ CostTracker 成本统计 |
| 工具 | 内置工具注册表与 10 个原子工具 |
| MCP 插件 | Model Context Protocol 插件管理器 |
| 安全 | 权限决策引擎:硬编码黑名单 + 规则引擎 + 多级 Gate |
| Agent | 会话主循环、上下文压缩、Token 计费 |
| 检查点 | git stash 驱动的文件状态快照(/rewind 基础) |
| 会话存储 | 对话持久化与重启恢复 |
| 股票 | 交互式 A 股行情(ink + asciichart) |
| 游戏 | 内置小游戏 |
| 语音 | 火山 ASR 协议客户端 + 跨平台录音 + 状态编排 |
| 类型 / 工具 / UI | 共享类型、辅助函数、Ink 交互式终端组件 |
详细源码布局请参考仓库内项目。
开发
仓库为内部项目,按公司代码规范提 PR。开发流程:
# 安装依赖
npm install
# 开发模式(自动监听重构建)
npm run dev
# 构建
npm run build
# 测试
npm test
# 类型检查
npm run type-check项目要求
- Node.js ≥ 22
- DeepSeek API Key(在 DeepSeek 开放平台申请)
录音依赖(可选,使用 /voice 时需要)
/voice 需要系统装好一个录音 CLI;dskcode 会按平台自动探测可用命令:
| 平台 | 推荐命令 | 安装 |
|---|---|---|
| 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 群沟通
