给Deep Code CLI状态栏加上插件:自定义Git分支、时间与Token用量完整指南
【免费下载链接】deepcode-cliDeep Code 是专为 deepseek-v4 模型优化的终端 AI 编码助手,支持深度思考、推理强度控制以及 Agent Skills。项目地址: https://gitcode.com/gh_mirrors/de/deepcode-cli
Deep Code 是专为 deepseek-v4 模型优化的终端 AI 编码助手,除了深度思考与推理强度控制,它还内置了状态栏插件机制:无需修改任何 CLI 源码,只需在settings.json中声明几个 provider,就能在输入框下方的状态栏实时显示 Git 分支、当前时间、Token 用量等自定义信息。本文将带你从零完成配置,5 分钟搞定一条"信息流"状态栏。
📌 官方说明文档:statusline.md,实现源码位于 packages/cli/src/ui/statusline/
什么是 Deep Code 状态栏?
状态栏是终端界面底部的一条信息行,展示在输入框下方的快捷键提示行之下。你可以把它理解成"可插拔的信息条":
- 每个插件项称为一个provider,支持
command(执行外部命令)和module(加载本地 JS 模块)两种类型; - 所有 provider 的输出按声明顺序拼接,用分隔符连接渲染;
- 支持为每个 provider 单独指定颜色(如
cyan、#229ac3)。
配置完成后,状态栏行在任何场景下都会显示(包括 AI 正在思考、权限确认等),不会遮挡 busy 提示。下面是 Deep Code CLI 的终端运行效果,状态栏就显示在这类界面的输入框区域下方:
一键启用:最小配置 3 行搞定
编辑用户级配置~/.deepcode/settings.json,或项目级配置项目根目录/.deepcode/settings.json,加入statusline字段(完整字段表见 statusline.md):
{ "statusline": { "enabled": true, "refreshMs": 2000, "providers": [ { "type": "command", "id": "git", "command": "git branch --show-current", "color": "cyan" }, { "type": "command", "id": "time", "command": "date +%H:%M", "color": "green" } ] } }只需记住 4 个顶层字段:
| 字段 | 说明 |
|---|---|
enabled | 是否启用(省略时,只要有 provider 即视为启用) |
refreshMs | 刷新间隔毫秒,最小 500,默认 2000 |
separator | 各 provider 之间的分隔符,默认" · " |
providers | provider 列表,按声明顺序渲染 |
⚠️改完配置需要重启 CLI 才会生效,不支持热加载。
Provider 类型一:command —— 显示 Git 分支与时间
command类型会在 shell 中周期执行一条命令,取 stdout第一行作为状态栏文本。支持管道、重定向等 shell 语法,最灵活、零代码。
常用的几个"即抄即用"命令(摘自 statusline.md):
| 用途 | 命令 |
|---|---|
| Git 当前分支 | git branch --show-current |
| 当前时间 | date +%H:%M |
| 节点版本 | node -v |
| 变更文件数 | git status --porcelain \| wc -l \| xargs -I{} echo '{} files changed' |
每个 command provider 还支持这些可选字段(详见 statusline.md):
cwd:执行目录,相对路径相对于项目根目录;timeoutMs:超时毫秒,默认 1500,超时返回空串;color:任意 ink 颜色名或十六进制色值。
启动后你会看到类似main · 14:32 · 3 files changed的实时状态,效果如下:
Provider 类型二:module —— 显示 Token 用量
当需要访问 Deep Code 内部数据(比如本次会话消耗了多少 Token)时,用module类型:它加载一个本地 JS/MJS 模块,调用其默认导出函数,返回值作为状态栏文本。
在项目的.deepcode/plugins/目录放一个tokens.mjs,函数会收到{ projectRoot, session }两个参数:
export default function tokensProvider({ projectRoot, session }) { if (session?.activeSessionId) { return `tokens: ${session.totalTokens}`; } return "tokens: -"; }session(SessionInfo)里可直接取到的关键字段:
| 字段 | 含义 |
|---|---|
activeSessionId | 当前活跃会话 ID,无会话时为null |
messageCount | 当前会话消息总数 |
requestCount | LLM API 请求次数 |
totalTokens | 当前会话累计消耗的 Token 总数 |
在配置中引用它即可:
{ "statusline": { "providers": [ { "type": "module", "id": "tokens", "path": "./.deepcode/plugins/tokens.mjs", "color": "yellow", "timeoutMs": 2000 } ] } }💡 提示:
path支持相对路径(相对于项目根目录),也支持具名导出provider代替default导出。
安全限制与行为细节(新手必看)
状态栏插件在设计上做了多重"护栏",了解它们能帮你快速排错(规则详见 statusline.md):
- module 路径白名单:模块必须位于项目根目录或用户 home 目录之下,超出范围的绝对路径会被拒绝加载,防止从任意位置执行代码;
- 文本自动清洗:每个 segment 只取第一个非空行、去除 ANSI 转义、折叠空白,并截断到 40 个字符(超出加
…)——所以别指望在状态栏放长句; - 容错隔离:任一 provider 抛错、超时或返回空串,只跳过该 segment,其余 provider 正常显示;
- 配置合并:用户级与项目级的
providers数组合并渲染(用户级在前),其余字段以项目级优先; - command 输出上限:stdout 最多读取 4 KB。
核心调度逻辑(定时拉取、并发 fetch、内容不变不重渲染)实现在 manager.ts 的StatusLineManager中,感兴趣的可以一读。
常见问题(FAQ)
Q:配置了状态栏却什么都不显示?检查providers是否为空(空数组视为未启用),确认命令在 shell 中单独执行能输出第一行文本,然后重启 CLI。
Q:为什么我的 segment 只有 40 个字符?这是刻意设计的上限,避免撑破终端。把最重要的信息放在字符串前面即可。
Q:想给不同 provider 不同颜色?在每个 provider 上加"color"字段,颜色名(red、cyan…)或十六进制("#229ac3")都行。
Q:Token 数据在哪来的?由 module provider 调用时注入的session对象提供,无需自己解析日志文件。
小结
Deep Code CLI 的状态栏插件机制让你用纯 JSON 配置就能扩展终端信息:
command负责一切"shell 能拿到"的信息:Git 分支、时间、脏文件数;module负责需要访问会话数据的信息:Token 用量、消息数;- 出错自动隔离、文本自动截断,配置合并友好,重启即生效。
照着本文的 完整示例 抄改一番,你也能拥有一个既专业又个性化的 AI 编码终端。
【免费下载链接】deepcode-cliDeep Code 是专为 deepseek-v4 模型优化的终端 AI 编码助手,支持深度思考、推理强度控制以及 Agent Skills。项目地址: https://gitcode.com/gh_mirrors/de/deepcode-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考