在终端里与 AI 实时对话并审批工具调用
25.9/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LemonPhase/dsh-tui该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 73 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求src/app.ts:1191
const response = await fetch(`${baseURL.replace(/ +$/, '')}/models`, { - 执行外部命令来自配置/变量src/clipboard.ts:25
child = spawn(tool, [], { stdio: ['pipe', 'ignore', 'ignore'] })
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-attachment@deepseek-ai/dsh-cmdline@deepseek-ai/dsh-command-compact@deepseek-ai/dsh-command-feedback@deepseek-ai/dsh-command-goal给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 终端内实时对话
- 审批工具调用
README
由 DeepSeek 最新模型翻译生成dsh-tui
给 DeepSeek Harness(dsh)用的独立终端 UI 插件。它在标准 dsh-base 配置档之上叠了一层交互式聊天 TUI:实时流式输出、工具调用行、带内审批、用户提问、会话恢复、斜杠命令——纯 ANSI,不用框架,DeepSeek 暗色配色。
这是 @deepseek-ai/dsh-tui(仓库内打包版)的独立构建,面向 next 核心线(@deepseek-ai/dsh-@0.1.0-rc.8)。所有 @deepseek-ai/ 包都是 peer 依赖:它们从 dsh 安装自身的模块闭包里解析,所以插件始终只是一层薄薄的补丁。
安装
需要 next 线的 dsh(自带配置档/打包系统和 rc.8 核心):
npm i -g @deepseek-ai/dsh@next
把插件装进配置档的模块回退目录:
npm i --prefix ~/.dsh/profiles --legacy-peer-deps dsh-tui
(或者,在发布之前,直接从文件夹安装:npm i --prefix ~/.dsh/profiles --legacy-peer-deps /path/to/dsh-tui。
展开完整文档(README 剩余 1 节)
dsh-tui
给 DeepSeek Harness(dsh)用的独立终端 UI 插件。它在标准 dsh-base 配置档之上叠了一层交互式聊天 TUI:实时流式输出、工具调用行、带内审批、用户提问、会话恢复、斜杠命令——纯 ANSI,不用框架,DeepSeek 暗色配色。
这是 @deepseek-ai/dsh-tui(仓库内打包版)的独立构建,面向 next 核心线(@deepseek-ai/dsh-@0.1.0-rc.8)。所有 @deepseek-ai/ 包都是 peer 依赖:它们从 dsh 安装自身的模块闭包里解析,所以插件始终只是一层薄薄的补丁。
安装
需要 next 线的 dsh(自带配置档/打包系统和 rc.8 核心):
npm i -g @deepseek-ai/dsh@next
把插件装进配置档的模块回退目录:
npm i --prefix ~/.dsh/profiles --legacy-peer-deps dsh-tui
(或者,在发布之前,直接从文件夹安装:npm i --prefix ~/.dsh/profiles --legacy-peer-deps /path/to/dsh-tui。)
然后创建一个配置档,把 TUI 组合到 base 之上:
mkdir -p ~/.dsh/profiles/tui
cat > ~/.dsh/profiles/tui/package.json <<'EOF'
{
"name": "tui",
"private": true,
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "dsh-tui"] } }
}
EOF
运行:
dsh --profile tui
在环境变量里、<cwd>/.env 里或 ~/.dsh/.env 里设置 DEEPSEEK_API_KEY(启动器会在启动时加载)。
按键
| 按键 | 操作 |
| Enter | 发送(或在命令面板里运行高亮的命令) |
| Shift+Enter | 在输入框里换行 |
| / | 命令面板——输入即过滤,↑/↓ 循环(会滚动窗口),Enter 运行,Tab 接受进输入框,Esc 关闭 |
| Shift+Tab | 循环切换权限预设(/permission) |
| Drag | 选中文本——松开时复制到剪贴板 |
| ↑ / ↓ | 历史记录 |
| Ctrl+C / Esc | 取消正在运行的回合 |
| Ctrl+D / /exit | 退出 |
| PgUp / PgDn | 滚动 |
| Ctrl+O | 展开 / 折叠工具输出 |
| Ctrl+X | 复制模式回退(终端原生选择) |
| Ctrl+W/U/K/A/E | 按词/按行编辑,光标移到开头/结尾 |
| Home / End | 光标移到开头/结尾 |
Shift+Enter 需要终端能单独上报这个键:kitty、iTerm2、WezTerm 和 xterm(modifyOtherKeys)会发一个带修饰的 enter 转义序列,TUI 直接解析。VS Code 集成终端则发一个字面反斜杠加 Enter——比如 Claude Code 的 /terminal-setup 键绑定 shift+enter → sendSequence "\\\r\n"——TUI 也认得这种编码,同样插入换行。(如果自定义键绑定发的是别的序列,把它指向 \u001b[13;2u。)
输入 / 会打开 pi 风格命令面板,列出内置命令(/exit、/help、/login、/model、/new、/sessions),以及组合配置档注册的全部命令——包括 harness 自带的命令:/compact(压缩较早的对话历史)、/feedback <text>、/goal [<objective>|clear|edit <objective>|pause|resume]、/plan [off|message]、/permission <preset>,每条命令在声明了用法提示时都会一并显示。输入会收窄列表(显示为可滚动的八行窗口,底部有 1–8 of N 范围提示),↑/↓ 让高亮在全部匹配项之间循环——窗口跟随高亮移动,所以前八条之后的命令依然可达,从最后一条会绕回第一条——Enter 运行选中的命令,Tab 把 /name 接受进输入框,方便你补参数,Esc 关闭选择器并清空斜杠输入。注册的命令通过 harness 的 ctx.commands.execute 派发,带可取消信号:命令执行期间状态栏显示 running(对 /compact 很有用),Ctrl+C / Esc 可中止。每次派发都会在对话里渲染成一行命令记录——由 harness 自身的 command/run + command/done 生命周期事件折叠而来——所以发送 /compact 会可见地打开 ● /compact,再落定为 ✓ /compact 并带上结果(例如 Compacted 3 history items (~12.5k tokens).),或者以 ✕ /compact 带上错误;会话恢复时,同一行也会显示过去的命令。
/login 通过 harness 的凭据接缝存储服务商 API key:从目录路由(deepseek、openai、anthropic、command-code)中选一个,或声明自定义网关(路由名、API 协议、base URL、逗号分隔的 model id),然后输入 key——在提示框里以掩码显示。key 会落到 ~/.dsh/.credentials.yaml,放在派生出的引用名下(例如 OPENAI_API_KEY、COMMAND_CODE_API_KEY),同时该路由的 apiKeyEnv 会写入 llm-pi-ai 配置段,下一次请求即生效。command-code 路由是通往 Command Code 的 OpenAI 兼容 Provider API(https://api.commandcode.ai/provider/v1)的网关:登录时会抓取该端点的实时模型列表——名称和上下文窗口来自 GET /provider/v1/models——走 harness 的模型发现接缝(端点不可达时,回退到直接探测,再回退到内置列表),所以 /model 显示的是当前目录,带真实上下文大小。TUI 还会在启动时于后台重新探测每个已配置的网关:上次登录之后端点新增的模型,会在下次启动时出现在 /model 里(并给出 model list refreshed 提示),无需重新登录;端点不可达或缺少 key 时,则静默保留已持久化的列表。随后 /model 从已注册路由中挑选当前服务商和模型,在下一次请求时把这组选择应用到当前会话,并持久化为未来会话的默认值;状态栏会立即反映该选择。
斜杠命令:/help、/new、/sessions(恢复选择器)、/login(保存服务商密钥)、/model(选择服务商和模型),以及组合配置档提供的任何命令。dsh --profile tui --resume <session-id> 会重新打开已持久化的会话。
粘贴支持 bracketed paste:多行粘贴会落到多个输入行上(保留换行),而不是逐行提交;终端的多行粘贴警告也会被抑制,因为应用启用了 bracketed paste 模式。
复制是 pi 风格:用鼠标拖拽选中(带实时强调色背景高亮),松开即直接复制到操作系统剪贴板(pbcopy / clip / wl-copy / xclip / xsel)。Ctrl+X 仍作为后备方案,它会暂停鼠标捕获,改用终端原生选择。
推理过程同样流式输出:思考增量(reasoning-delta)以暗色渲染在模型可见文本上方;当文本引导行折叠到工具行上时,纯推理块仍然可见。助手流式输出期间,盲文点阵加载指示器(⠋ ⠙ ⠹ …)会原地转动,取代静态块状光标,实时回复一眼就能看出正在进行中。
模型回复按真正的 markdown 渲染,配色沿用 DeepSeek 调色板(用 marked 解析,样式使用与其他界面元素相同的原始 ANSI token):标题带强调色 # 标记,粗体/斜体/删除线,行内代码和围栏代码块置于 layer-2 背景上,紧凑与宽松列表(项目符号、编号、任务、嵌套),引用块带强调色竖条,链接带下划线且目标地址以暗色显示在旁边,表格对齐且表头加粗,分隔线为暗色——全部按终端宽度换行,宽字符按两列计算,因此任何一行都不会溢出。流式输出中的不完整片段(未闭合的代码围栏、悬空的列表标记)按原样渲染,不会报错;模型输出中的控制序列会在解析前剥离。
工具调用在对话记录中渲染为扁平状态行——对话本身保持无边框,只有停靠区界面(输入框、调色板、提示)带边框。每行以状态符号开头,工具名用状态色显示——运行中为强调色 ●,完成为绿色 ✓,失败为红色 ✕——旁边是可读的 key=value 参数(绝不显示原始 JSON),长度有固定上限;工具上报结果后,结果缩进显示在下方(调用失败时用错误样式,最多折叠五行并带「more」提示)。正在运行的调用没有结果行。按 Ctrl+O 展开完整输出、模型自己的引导文本(「Let me check the directory…」)以及完整参数列表,再按一次折叠回去。
harness 的纯日志事件会折叠进 transcript,显示为变暗的状态行,所以恢复会话时能看到完整历史,而不是丢掉那些从未到达模型表面的内容:权限决策(✓ bash allowed、✕ bash rejected —— 取消的询问保持安静)、目标状态(◎ goal: …、⏸ goal paused: …、⊘ goal blocked: … 用警告色调、goal cleared)、plan 模式切换(plan mode on/off)、会话标题(title: …)、反馈记录(feedback recorded)、压缩(compacting… 最终落定为 context compacted,或红色的 compaction failed)、服务商重试等待(deepseek-official unavailable — retrying (2/5) in 2s,只有一行实时计数递增,而不是堆叠每次尝试),以及子代理委派(subagent spawned: research the API)。模型的 todo 列表渲染为实时清单块 —— Todos 每个条目一行复选框(✓ 已完成变暗,● 进行中用强调色,○ 待处理)—— 每次 todo_write 都整体替换,列表清空时移除。连续相同的行会折叠,所以重放恢复的日志不会堆叠重复状态。
状态栏实时显示当前上下文用量 —— 最近一次请求计费的输入(未缓存 + 缓存读取 + 缓存写入),投影到会话当前表面上,所以它表示下一次请求会占用模型窗口的多少:适配器公开窗口时显示 ctx 62.5k/1m,否则显示 ctx 62.5k,居中于运行状态和按键提示之间。挂载的模型紧挨运行状态(○ idle · deepseek-v4-flash),所以一眼就能看到当前模型,不用扫视头部;在任何会话存在之前 —— 刚启动或 /new 之后 —— 同一位置显示持久化的默认模型对,所以下一次发送会用的模型在第一条提示词之前就可见,无需创建会话。投影遵循 harness token 计量器的影子价格协议,所以 /compact(或自动压缩)会立即缩小数字 —— 检查点替换落地时减去计量事件的影子 token 价格 —— 而最后一条请求之后输入的消息已经计入。
Shift+Tab 会按组合好的 /permission 表向前循环切换权限预设(沙箱模式 + 审批策略)——默认配置档下依次是 read-only → workspace-write → danger-full-access,循环回绕;当前开关状态匹配不上任何条目时,从第一个预设开始——每次切换都走与 /permission 相同的持久化写入路径,静默生效。输入编辑框就是反馈,Claude-Code 风格:上边框标出当前预设(╭─ Message · workspace-write ─╮),整个框跟着变色调,输入光标块也保持一致——read-only 是蓝色,workspace-write 是绿色,danger-full-access 是红色,custom 开关状态是琥珀色——在 /permission、Shift+Tab 和恢复会话时实时更新;没有权限服务时,编辑框保持中性。Shift+Tab 在任何会话存在之前也能用:它循环切换的是下一个全新会话启动时所用的预设(先通过权限服务的设置持久化,会话创建时再固定进去),所以你可以在编辑框里先选好模式,再发第一条消息。
会话按需创建:TUI 打开时没有会话,只有你发出第一条消息(或运行需要智能体的命令)时才创建一个,所以只是打开再关掉应用,不会留下空会话。
回合正在流式输出时发送的消息,会作为引导消息(agent.steer)路由给 harness:正在运行的驱动器会在下一个步骤边界消费它——比如两次工具调用之间——于是它引导当前回合,而不是排队成一个后续回合、等流式输出结束再处理。空闲时发送则和以前完全一样,开启一个正常的新回合。harness 还在流式输出期间,消息不会消失:它显示为编辑框上方一条灰暗的待处理条(pending → hold on,排队多条时编号为 pending 1/2),harness 一认领就移入对话——或者你取消回合时从条上消失,同时丢弃排队的收件箱。
回合流式输出时向上滚动会固定视口:流式输出不再推动你的视图,只有滚回实时底部才恢复跟随(发送消息、调整窗口大小或切换会话都会立刻回到那里)。
Development
npm install --legacy-peer-deps
npm run build # tsc → lib/
npm test # vitest (336 tests)
发布:把 package.json 里的包名改成你自己的 scope(@you/dsh-tui),然后 npm publish。
License
MIT。原始作品位于 deepseek-ai/deepseek-harness,采用相同协议;这个独立版本跟随它,供社区使用。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LemonPhase/dsh-tui
在终端里与 AI 实时对话并审批工具调用
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目