🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

全屏终端界面 lnuo56717-bit/dsh-tui-app

DeepSeek Harnessv0.0.1
lnuo56717-bit45 天前有提交已提供中文文档扫描:含敏感能力

在终端里流式查看会话并直接编辑输入

30.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lnuo56717-bit/dsh-tui-app
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/11/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 45 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-tui-app @ 0.0.1
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 09:29:45

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 9 处,展示前 9 条)
  • 执行外部命令来自配置/变量
    src/clipboard.ts:51
    const child = spawn(target.command, [...target.args], { stdio: ['pipe', 'ignore', 'ignore'], windowsHide: true })
  • 读取本地文件
    src/image-input.ts:47
    const data = new Uint8Array(await readFile(path))
  • 执行外部命令来自配置/变量
    src/image-input.ts:95
    const child = spawn(command, [...args], { stdio: ['ignore', 'pipe', 'ignore'], windowsHide: true })
  • 删除本地文件递归
    src/interaction-controller.ts:1086
    await rm(dirname(location.path), { recursive: true, force: true }).catch(() => undefined)
  • 发起网络请求
    src/llm-vision.ts:110
    response = await fetch(`${connection.baseURL}/chat/completions`, {
  • 读取本地文件
    src/llm-vision.ts:153
    if (existsSync(join(pkg, 'lib/types/sse.js'))) return join(pkg, 'lib/types')
  • 读取本地文件
    src/llm-vision.ts:154
    if (existsSync(join(pkg, 'lib/sse.js'))) return join(pkg, 'lib')
  • 读取本地文件
    src/llm-vision.ts:161
    if (existsSync(join(root, 'lib/types/sse.js'))) return join(root, 'lib/types')
  • 读取本地文件
    src/llm-vision.ts:162
    if (existsSync(join(root, 'lib/sse.js'))) return join(root, 'lib')
扫描于 2026/11/5(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-cmdline@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-attachment@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 流式查看会话
  • 直接编辑输入

README

由 DeepSeek 最新模型翻译生成
dsh-tui-app 一个为 DeepSeek Harness(dsh)打造的全屏终端界面(TUI),以独立、树外插件的形式构建。它与 dsh 宿主运行在同一进程中,直接读取持久化会话事件流,仅将宿主投影用于辅助状态事实。由 Chafa 生成的 DeepSeek 鲸鱼是它唯一的视觉标志。 功能 - 流式记录 — 终端原生 Markdown、工具树、差异、工作流/任务摘要,以及原始事件回退,并支持字素安全的 CJK 布局。 - 折叠的工具输出 — 工具结果以预格式化方式渲染(绝不重新排版为散文),并折叠为六行预览,同时保留真实行数。方向键可选择任意块;→/← 展开和折叠;Ctrl+E 切换全部。 - 行级精确滚动回看 — 视口是渲染后终端行上的窗口,而不是节点上的窗口:一次滚轮刻度始终移动三行,比例滚动条跟踪位置,流式追加内容会锚定在你正在阅读的位置,松开滚轮后回到固定的实时尾部。 - 原位 IME 组合 — 终端光标每一帧都停在输入框插入符上,因此拼音/预编辑文本会在提示符内组合,而不是在屏幕底部。 - 剪贴板复制 — Ctrl+Y 通过终端的 OSC 52 接收端和平台剪贴板工具复制选中的块(或最新的块,或输入框的鼠标选择);松开记录拖拽也会复制;Shift+拖拽使用终端原生选择;/mouse 将鼠标完全交还给终端。
展开完整文档(README 剩余 1 节)
dsh-tui-app

一个为 DeepSeek Harness(dsh)打造的全屏终端界面(TUI),以独立、树外插件的形式构建。它与 dsh 宿主运行在同一进程中,直接读取持久化会话事件流,仅将宿主投影用于辅助状态事实。由 Chafa 生成的 DeepSeek 鲸鱼是它唯一的视觉标志。

功能

- 流式记录 — 终端原生 Markdown、工具树、差异、工作流/任务摘要,以及原始事件回退,并支持字素安全的 CJK 布局。
- 折叠的工具输出 — 工具结果以预格式化方式渲染(绝不重新排版为散文),并折叠为六行预览,同时保留真实行数。方向键可选择任意块;→/← 展开和折叠;Ctrl+E 切换全部。
- 行级精确滚动回看 — 视口是渲染后终端行上的窗口,而不是节点上的窗口:一次滚轮刻度始终移动三行,比例滚动条跟踪位置,流式追加内容会锚定在你正在阅读的位置,松开滚轮后回到固定的实时尾部。
- 原位 IME 组合 — 终端光标每一帧都停在输入框插入符上,因此拼音/预编辑文本会在提示符内组合,而不是在屏幕底部。
- 剪贴板复制 — Ctrl+Y 通过终端的 OSC 52 接收端和平台剪贴板工具复制选中的块(或最新的块,或输入框的鼠标选择);松开记录拖拽也会复制;Shift+拖拽使用终端原生选择;/mouse 将鼠标完全交还给终端。
- 停止并接管 — 未打开任何覆盖层时,Esc 会直接停止正在运行的回合。在回合运行时发送草稿会预备接管:再次按 Enter(或 Esc)会中止该回合,等待驱动器进入空闲状态,然后重新发送排队的草稿,让智能体带着它们继续。在空输入框上按两次 Enter 只会停止回合;Ctrl+C 是硬停止,也会丢弃排队的草稿。在 / 命令(或任何其他覆盖层)上按 Esc 只会关闭该覆盖层。
- 鼠标编辑 — 点击输入框放置插入符(显示单元精确,CJK 安全);在其中拖拽以选择,输入以替换;点击记录行以聚焦其块;在记录中拖拽以选择行,松开时复制。
- 多行编辑与历史 — 多行提示、排队的后续输入、提示历史召回(在空输入框上按 ↑;滚轮绝不会召回历史),以及显式步骤引导。
- 实时模型与强度切换 — /switch 更改下一个尚未组装的步骤;/effort 仅提供活动适配器所公布的精确模型级别。没有任何硬编码:目录和能力都来自 ctx.llm。
- 推理披露 — 以 Grok 风格展示真实的 dsh 推理事件:实时思考上的宽度为 1 的旋转指示器、实时尾部、稳定的已定摘要、有界预览,以及可独立滚动的详情视图。
- 原生结构化问题 — 应用注册了宿主的 userQuestions 提供程序,因此加载 @deepseek-ai/dsh-tool-ask-user 的配置文件为模型提供了一个可用的 ask_user_question:该工具会阻塞,QuestionCard 收集键盘答案,答案作为普通工具结果返回。只有活动根代理可以提问;子代理的请求会被拒绝,而不是代表用户作答。参见启用 ask_user_question。
- 会话选择器 — /resume(以及 Ctrl+S)按持久标题(或开场提示)、提示数量和存在时长列出已持久化的对话,并带有当前会话标记。
- 任务和对话计时 — 当一轮运行时,标题栏芯片从与思考旋转指示器同步的同一实时时钟计算已用秒数;当该轮结束时,芯片显示该轮的时长以及对话累计的任务时间。两者都来自日志自身的 turn/start/turn/end 时间戳,因此恢复的会话会重新显示真实总计,而 Harness 从未记录时间戳的一轮不会被计入,而不是进行估算。
- 实时令牌吞吐量 — 当模型正在流式传输时,标题栏显示 ⚡ 27.5 tok/s,并从同一个 80 毫秒实时时钟刷新。该计数来自 Harness 实际的提供程序令牌边界文本、推理和工具调用增量——而非字符长度——并且终端提供程序用量会在步骤关闭前校准不可见的协议令牌。一旦助手消息提交,分母即冻结,最终平均值在空闲时保持可见;下一个模型步骤会开始新的测量。
- 缓存命中率计量器 — 在已用时间芯片正下方,标题栏显示会话的缓存命中率:整个持久日志中缓存读取令牌占计费提示输入的比例,与 Web UI 统计行打印的指标相同。在日志有计费输入之前它保持静默,并与标题和计时器共享窄标题栏预算。
- 安全状态界面 — 由投影支持的状态栏仅保留短字段(通知、ctx、短模型名、effort、权限、计划/待办事项);会话 ID 和 cwd 位于 /session-info 中;类密钥字符串始终会被脱敏;密钥和计费信息从不显示。
- 主题 — Abyss 和 Pearl,支持真彩色、256 色、16 色和单色调色板。当无法在不进行阻塞查询的情况下确定终端背景时,auto 会安全地默认使用 Abyss。

要求

- 现有的 DeepSeek Harness dsh 启动器,带有 npm 0.1.0-rc.6 构件集(本项目从不下载或修补 Harness)
- Node.js 22 或更高版本(CI 中使用 Node.js 24)
- 用于 dsh plugin 工作流的 npm 和 pnpm
- Windows 上使用 Windows Terminal;其他平台上的现代 xterm 兼容终端为尽力支持

安装

markdown
npm install
npm run build
dsh plugin --profile tui add "C:\absolute\path\to\dsh-tui-app"
dsh --profile tui --help
dsh --profile tui

要让裸 dsh 命令打开此 TUI: powershell powershell -ExecutionPolicy Bypass -File .\scripts\install-default-command.ps1 dsh

显式命令(如 dsh --help、dsh web 和 dsh plugin ...)仍会路由到上游 CLI。该插件会创建或更新隔离的 tui 配置文件,先使用 @deepseek-ai/dsh-base,再使用 dsh-tui-app;它不会修改 Harness 检出内容。

恢复持久会话: powershell
dsh --profile tui --resume

启用 ask_user_question

该应用提供了问题 UI,但没有任何 dsh 包会加载让模型提问的工具。将其一次性添加到配置文件自身的补丁层($DSH_HOME/profiles/tui/cordis.patch.yml)并重启: yaml
- insert:
- id: tool-ask-user
name: '@deepseek-ai/dsh-tool-ask-user'

使用 dsh --profile tui --dump-config 确认组合后的树,并使用 npm run test:ask-user 确认整个路径——注册、卡片、返回的答案——该命令会在只读 --patch 覆盖层后面启动真实配置文件。

仅在存在 userQuestions 提供程序的地方启用此项:此应用注册了一个,而 Web UI 随附了 @deepseek-ai/dsh-client-ui-user-questions。没有提供程序的配置文件(例如 grok TUI)会在每次调用时以 NO_PROVIDER 失败,而不是进行询问。

标志

| 标志 | 值 | 默认值 |
| --resume | 不透明的持久会话 ID | 新会话 |
| --theme | abyss、pearl、auto | auto |
| --color | truecolor、256、16、mono、auto | auto |

无论 --color 如何,NO_COLOR 始终强制使用单色。/theme abyss|pearl|auto 会立即为当前 TUI 运行预览主题。

斜杠命令

/switch [provider/model]、/effort [default|level]、/model(/switch 的别名)、/new、/resume、/session-info、/rename、/theme、/workflows、/mouse、/keys、/help、/quit。

由 dsh 通告的命令通过宿主命令注册表执行;完全同名的冲突会以 [dsh] 和 [tui] 条目保持可见的区分。

键盘参考

| 按键 | 操作 |
| Enter | 发送普通提示/后续消息;在多行模式下插入换行 |
| Enter ×2 | 在有新草稿时:发送,然后用它接管正在进行的回合;在空编辑器上:停止正在进行的回合 |
| Esc | 停止正在进行的回合;否则关闭覆盖层或搁置阻塞卡片而不回答它 |
| Ctrl+M / Alt+Enter | 切换多行 / 发送多行;从转录中打开模型选择器 |
| Ctrl+L | 引导当前或下一步 |
| Ctrl+W、Ctrl+U、Ctrl+K | 删除单词 / 删除到行首 / 删除到行尾 |
| Ctrl+P 或 ? | 打开模糊 dsh + 本地命令面板 |
| Ctrl+S | 打开持久会话选择器 |
| Ctrl+X | 打开完整的应用内按键页面 |
| Ctrl+Y | 将选中的块、composer 的鼠标选区或最新的块复制到剪贴板 |
| Ctrl+E | 展开/折叠所有工具输出和推理预览 |
| Shift+Tab | 仅在 dsh 所公布的权限预设之间循环切换 |
| Tab | 在 composer、阻塞卡片和 transcript 之间移动 |
| PgUp、PgDn | 从任一焦点按行翻页 transcript |
| Ctrl+U、Ctrl+D | transcript 获得焦点时半页滚动 |
| transcript 中的 Home / End | 跳转到最早的一行 / 回到实时末尾 |
| 鼠标滚轮 | 每格滚动 transcript 三行,或在打开的选取器中移动;绝不召回提示历史 |
| 空 composer 上按 Up | 短暂停顿后召回上一条提示(忽略滚轮连发) |
| Ctrl+Up / Ctrl+Down | 立即召回提示历史 |
| transcript 中的 Up、Down、Left、Right、Enter | 选择工具输出或推理块,折叠/展开它,或打开完整详情 |
| 鼠标点击 | composer:将光标移到点击的单元格;transcript:聚焦光标下的块 |
| 鼠标拖动 | composer:选择文本(输入会替换它);transcript:选择行并在松开时复制 |
| Shift+拖动 | 终端自身的选择和复制,不受鼠标跟踪影响 |
| Ctrl+C | 取消正在运行的回合;否则清除草稿;空闲/为空时按两次退出 |

审批使用 y/1(允许一次)、n/2(拒绝)或 3(更改真实权限预设,然后允许一次)。问题使用方向键、数字、Space 进行多选、z 输入自由文本,Enter 前进/提交。

Web UI 对比

| 能力 | dsh-tui | Harness Web UI |
| 一个活动根会话,新建/恢复/切换 | 是,选取器列出标题和开场提示 | 是 |
| 回滚缓冲 | 行精确窗口、比例滚动条、流式传输期间锚定 | 浏览器滚动 |
| 流式消息、工具、差异、工作流 | 终端原生紧凑树 | 丰富的浏览器呈现 |
| 实时模型 + 精确模型强度切换 | 通过 ModelSelectionRef 进入下一个未组装步骤 | 是 |
| 推理披露 | 宽度为 1 的 spinner、实时末尾、稳定摘要、键盘详情 | 可折叠的浏览器行 |
| 长工具输出 | 预格式化,折叠为固定大小的预览,可用键盘展开 | 可折叠的浏览器面板 |
| 复制输出 | 每块 Ctrl+Y、Shift+拖动、/mouse 关闭 | 浏览器选择 |
| 审批和结构化用户问题 | 键盘优先,失败关闭 | 浏览器控件 |
| 投影状态(tokens/context/stats/plan/todos) | 短页脚 + /session-info | 丰富面板 |
| 主题 | Abyss/Pearl + 能力回退 | 浏览器主题系统 |
| CJK 和字素安全编辑 | 是,已在 Windows Terminal 验证 | 浏览器文本引擎 |
| 图像/媒体渲染 | 仅元数据占位符 | 丰富媒体界面 |
| 窗格内鼠标编辑 | composer 中点击定位光标和拖动选择;transcript 中点击聚焦和拖动复制 | 浏览器选择 |
| 转录搜索、多根仪表板 | v1 中不提供 | 可用或更适合 Web UI |
| 远程/浏览器附件和 DOM 槽位 | 有意不使用 | 原生架构 |

开发

npm run check
npm test
npm run build
npm run test:ac:all

完整的本地验收需要现有的 dsh 启动器来运行 AC-1 到 AC-5。CI 在 windows-latest 上运行静态 M4 套件;真实配置文件的 PTY 验收仍然是本地/发布门禁,因为 CI 不会安装另一份 Harness 副本。

npm run test:timer 是仅限本地的端到端检查,用于验证已用时间标签:一个只读的 --patch 覆盖层添加了一个驱动程序,在真实会话时钟上打开和关闭两个真实回合,探针断言页脚在回合打开期间每秒递增一次,然后给出与记录的跨度匹配的对话总计。与下面的检查一样,它不会编辑 $DSH_HOME 下的任何内容,并会删除其自身探针创建的会话。

npm run test:ask-user 是仅限本地的端到端检查,用于验证原生问题路径:它使用只读的 --patch 覆盖层启动机器自身的 tui 配置文件,断言 ask_user_question 位于面向模型的注册表中,用真实按键回答 QuestionCard,并断言该工具在此之前一直保持阻塞。它不会编辑 $DSH_HOME 下的任何内容,并会删除其自身探针创建的会话。

已知限制

- Windows Terminal 是受支持的 Windows 模拟器;旧版 conhost 为尽力而为的单色模式。
- 块展开以键盘优先,并针对常见手势提供鼠标支持:单击会放置编辑器光标或聚焦转录块,拖动会进行选择——释放转录拖动会复制。终端自身的选区仍可通过 Shift+拖动使用,或通过 /mouse 将鼠标交还。UI 仅显示 Harness 发出的推理内容,绝不虚构完成估计或活动声明。
- Ctrl+Y 报告的是它尝试了什么,而不是剪贴板当前持有什么:OSC 52 传递不可观测,终端可能会拒绝它。在 Windows 上,clip.exe 路径是权威的。复制会获取块的源文本,因此折叠预览和展开预览复制的内容相同。
- 助手消息仍会完整渲染;只有工具输出会折叠。如果模型在自己的回答中发出非常长的代码块,它仍会打印出来。
- 将终端光标放在编辑器光标处,才能让 IME 就地组合。忽略光标定位的终端会保持旧行为。
- 会话选择器会为每个可见行折叠一个持久日志,因此一个非常大的已存储会话在滚动进入视图时只需读取一次。行仍按创建时间排序,而不是按折叠后的最后活动时间排序,因为按活动排序需要读取每个日志。
- 经过的芯片时间按轮次计算,而非按挂钟对话时长:你在轮次之间打字所花的时间不计入总数,当标题栏太窄而无法同时容纳两者时,末轮/总计这一对会从标题数字中省略。因代理失败而保持开启的轮次会让芯片停留在其已确定的事实上,而不是永远累加。
- 多行 dsh 命令输出(如 /goal 的状态视图)会折叠到单行状态页脚上;重新运行该命令以阅读完整文本。
- @ 仍然是普通提示文本,因为 rc.6 没有主机安全的通用附件选择器接缝。
- 图像渲染为附件标签,而非终端像素。鲸鱼是预生成的 ASCII 资源。
- 没有转录内容搜索、多根仪表板、远程附加、ACP 桥接、持久化的按命令授权,或凭空发明的 /auto 策略。
- 工作流/子代理视图是只读的持久摘要。它们不会派发并发的根会话。
- ask_user_question 仅针对活动根代理作答,且一次仅处理一个请求;子代理的请求或并发的第二个请求会被拒绝,绝不会自动作答。该工具默认不在任何 dsh 捆绑包中——必须由某个配置文件加载它。
- auto 不会发送阻塞式终端后台查询;当检测不可靠时,它会选择 Abyss。

许可证与来源

MIT,参见 LICENSE。依赖注册表完整性值以及每一份所使用的主机契约都记录在 PROVENANCE.md 中;安装细节与诊断信息在 INSTALL.md 中。

本项目独立,与 DeepSeek 无关联,也未获得其认可。徽标来源与商标边界记录在 NOTICE 中。
预览分享卡片长什么样 ↓lnuo56717-bit/dsh-tui-app
分享 · DeepSeek Harness Hub
lnuo56717-bit/dsh-tui-app

在终端里流式查看会话并直接编辑输入

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部