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

pi 终端界面 lqhl/dsh-pi-tui

DeepSeek Harnessv0.5.3
lqhl26 天前有提交已提供中文文档扫描:含敏感能力

pi 的 TUI@earendil-works/pi-tui驱动的 DeepSeek Harness 终端前端:界面是…

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-pi-tui
npm 源 · dsh-pi-tui 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(runtime_boot_failed),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(runtime_boot_failed · 2026/11/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 18:24:34

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 10 处,展示前 10 条)
  • 执行外部命令来自配置/变量
    lib/core/files.js:57
    const child = spawn(rgPath, [
  • 执行外部命令固定命令
    lib/core/git.js:15
    execFile('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, timeout: timeoutMs }, (error, stdout) => {
  • 执行外部命令固定命令
    lib/core/git.js:25
    execFile('git', ['status', '--porcelain'], { cwd, timeout: timeoutMs }, (statusError, statusOut) => {
  • 读取本地文件
    lib/core/session.js:153
    canonical = await realpath(header.cwd);
  • 写入本地文件
    lib/ui/chat.js:1633
    await writeFile(tmp, this.editor.getText(), 'utf8');
  • 读取本地文件
    lib/ui/chat.js:1642
    const text = await readFile(tmp, 'utf8');
  • 删除本地文件
    lib/ui/chat.js:1647
    await rm(tmp, { force: true });
  • 执行外部命令来自配置/变量
    lib/ui/clipboard-terminal.js:51
    child = spawn(command, args, { stdio: ['pipe', 'ignore', 'ignore'] });
  • 写入本地文件
    lib/ui/clipboard-terminal.js:69
    mkdirSync(join(homedir(), '.pi', 'agent'), { recursive: true });
  • 写入本地文件
    lib/ui/clipboard-terminal.js:70
    appendFileSync(path, `${new Date().toISOString()} ${message}\n`);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent@deepseek-ai/dsh-cmdline@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm@deepseek-ai/dsh-sandbox-policy@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-skill@deepseek-ai/dsh-user-approval@deepseek-ai/dsh-user-questions@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 终端界面前端

README

由 DeepSeek 最新模型翻译生成
dsh-pi-tui pi 的 TUI(@earendil-works/pi-tui)驱动的 DeepSeek Harness 终端前端:界面是 pi 的观感(品牌蓝 prompt、流式 Markdown、thinking 折叠、工具调用卡片、微分渲染防闪烁),内核(模型路由、工具、会话持久化、slash 命令、审批)全部由 dsh 官方机制提供。 安装 前置:官方 dsh CLI(npm i -g @deepseek-ai/dsh)与 pnpm。 dsh plugin --profile pi-tui add dsh-pi-tui # 自动初始化 profile 并挂为 bundle dsh --profile pi-tui # 新会话 dsh --profile pi-tui --resume <session-id> # 恢复指定会话 dsh --profile pi-tui --resume # 从持久化会话列表中选择 dsh --profile pi-tui --preset <id> # 选择 agent preset(standard/minimal/code) dsh --profile pi-tui --preset # 从 preset 列表中选择 会话与 web profile 共享 ~/.dsh/sessions 持久化存储,两端互通。
展开完整文档(README 剩余 1 节)
dsh-pi-tui

pi 的 TUI(@earendil-works/pi-tui)驱动的 DeepSeek Harness 终端前端:界面是 pi 的观感(品牌蓝 prompt、流式 Markdown、thinking 折叠、工具调用卡片、微分渲染防闪烁),内核(模型路由、工具、会话持久化、slash 命令、审批)全部由 dsh 官方机制提供。

安装

前置:官方 dsh CLI(npm i -g @deepseek-ai/dsh)与 pnpm。

dsh plugin --profile pi-tui add dsh-pi-tui # 自动初始化 profile 并挂为 bundle
dsh --profile pi-tui # 新会话
dsh --profile pi-tui --resume <session-id> # 恢复指定会话
dsh --profile pi-tui --resume # 从持久化会话列表中选择
dsh --profile pi-tui --preset <id> # 选择 agent preset(standard/minimal/code)
dsh --profile pi-tui --preset # 从 preset 列表中选择

会话与 web profile 共享 ~/.dsh/sessions 持久化存储,两端互通。

键位

| 按键 | 功能 |
| Enter | 提交(Shift+Enter 换行) |
| Esc | 中断当前 turn / 取消自动补全 / 退出工具卡片浏览 / 清除搜索高亮 |
| Ctrl+C | 运行中→中断;有文字→清空;已空→再次按下退出 |
| Ctrl+D | 编辑器为空时退出(非空时删除字符) |
| Ctrl+T | 展开/折叠 thinking 块 |
| Ctrl+O | 展开/折叠工具完整输出 / diff |
| Ctrl+F | 在 transcript 内搜索(输入即跳转,↑/↓ 循环,Enter 确认,Esc 关闭) |
| Alt+C | 复制最后一条 assistant 消息(OSC 52 三路剪贴板) |
| Ctrl+L | 打开模型选择器 |
| Ctrl+R | 搜索消息历史:本会话 + 最近持久化会话的首条消息(选中载入输入框) |
| ↑ / ↓ | 浏览当前会话的消息历史(恢复/切换后自动载入) |
| Ctrl+Z | 挂起到后台(fg 恢复) |
| Ctrl+G | 用 $EDITOR 编辑输入 |
| Shift+Tab | 循环会话 mode(normal ↔ plan) |
| Ctrl+X | 循环思考强度(off→high→max) |
| Tab | 补全(slash 命令 / 路径型 token;普通单词不触发);空编辑器时循环工具卡片焦点(Enter 展开) |
| @ | 文件提及菜单(搜索框 fuzzy 过滤,选中即插入) |
| ! / !! | 直接执行 shell 命令(用户全权;!! 输出不进模型上下文) |

命令

| 命令 | 功能 |
| /model [query] | 切换模型(无参数弹选择器;下一步生效) |
| /thinking off\|high\|max | 设置思考强度(下一步生效) |
| /skills | 列出人类可调用技能 |
| /new | 新会话 |
| /fork | 当前会话末尾 fork(保留历史,记录 lineage) |
| /resume [query] | 列出/恢复持久化会话 |
| /tree | 子代理会话树 |
| /agents | 列出 live 子代理 |
| /jobs | 列出后台任务 |
| /export | 导出 transcript 为 markdown |
| /rename | 重命名会话(官方 sessionTitle 服务) |
| /copy last\|tool\|error\|id\|resume | 复制到剪贴板(assistant 文本 / 工具结果 / 错误 / id / resume 命令) |
| /retry | turn 失败后重发最后一条人类提示 |
| /expand-all | 切换长会话折叠(旧消息折叠,显示全部) |
| /permission [preset] | 官方权限 preset 切换(workspace-write / danger-full-access…) |
| /hotkeys | 显示键位表 |
| /compact /goal /plan /feedback | 官方 dsh 命令(自动发现) |

模型/思考强度切换通过官方 installModelSelection 链路(与 web/grok 客户端同款),无需 fork 会话;会话与 web profile 共享 ~/.dsh/sessions 持久化存储。

功能

- 流式渲染:官方 agent/assistant-stream 增量帧 → Markdown、thinking 折叠标签(持久化日志里的 assistant/message 再做权威收敛,重放同样能看到 thinking)
- 工具调用卡片:运行/成功/失败三态 + 参数与结果预览;Ctrl+O 展开完整输出;write/edit 结果带彩色 diff 高亮(官方 meta.diffs)
- read_image 结果在 kitty/iTerm2 终端内联渲染图片(Ctrl+O 展开)
- slash 命令:/compact /goal /plan /feedback 等全部来自官方 ctx.commands 注册表(自动补全 + 动态发现)
- 权限审批弹窗(approval/request)与用户问答瀑布(user-questions/request;选项/多选/自由文本;plan-review 特化决策条,PgUp/PgDn 滚动 transcript 里的完整 plan)
- 会话管理:创建、恢复、fork、子代理树、选择器(官方持久化后端;resume 选择器显示官方自动标题,没有任何对话的会话标注为 (empty session))。恢复失败会明确报错——比如目标会话仍被另一个 dsh 进程占用——而不是静默新建一个空会话,让人以为历史丢了
- 惰性建会话:启动、/new、!cmd 都不会真的创建会话——状态栏显示 new session,直到你第一次提问才落盘。所以「打开看一下就退出」不会在 store 里留下任何东西,也不会污染 resume 选择器
- 会话短 id:状态栏、选择器、提示里统一显示可辨识的 8 位(store 自造的 session-<uuid> 会跳过常量前缀,不再显示成一排 session-)
- 转录搜索:Ctrl+F 在 transcript 内搜索并跳转(输入即定位 + 高亮,↑/↓ 循环);/retry 一键重发失败 turn;/copy 复制 assistant/工具结果/错误/id/resume 命令(OSC 52 三路剪贴板)
- 长会话折叠:消息超过阈值自动折叠旧消息(/expand-all 展开)
- 状态栏:provider/model、preset、plan 指示、goal 状态、上下文压力 ctx N%、会话 id、git 分支、token 统计、todo 进度、后台任务计数(全部来自官方 projection/jobs 服务)
- 转场提示:compaction 检查点、turn 失败/中止/超长提示
- 启动 banner:品牌蓝 ASCII 鲸鱼 + 会话信息 + 键位提示 + 持久化会话提示(boot 与会话切换时)
- 权限:官方 /permission <preset>(沙箱模式 + 审批策略捆绑切换),状态栏显示当前 preset

支持矩阵

| dsh | pi-tui | node | 状态 |
| 0.2.0-rc.2(当前 next) | ^1.1.0 | >= 22.19(CI 跑 22/24) | ✅ 端到端验证 |
| 其他 rc | — | — | 未验证,欢迎反馈 |

dsh 在加载插件时会校验 peerDependencies;本版本只声明并验证 0.2.0-rc.2。

发布:npm 上的每次发版由 GitHub Actions 经 npm Trusted Publishers(OIDC)发布,带 provenance 签名——打 v* tag 即发布,无任何 token。

开发

npm install && npm run build && npm test
本地联调:profile 里是 link: 软链,重新 build 后直接重启即可

代码规范(提交时 pre-commit hook 会自动对暂存文件跑 eslint --fix + prettier --write):

npm run lint # ESLint flat config,含 type-aware recommendedTypeChecked
npm run lint:fix # 自动修复可修问题
npm run typecheck # tsc 对 src + test 做类型检查
npm run format # Prettier 统一格式
npm run format:check # 校验格式

CI 对每个 PR 跑 lint + typecheck + build + test。详细约定见 AGENTS.md。

License

MIT。改编自 pi coding-agent interactive mode 的组件逻辑保留原作者版权,见 NOTICE。
预览分享卡片长什么样 ↓lqhl/dsh-pi-tui
分享 · DeepSeek Harness Hub
lqhl/dsh-pi-tui

pi 的 TUI@earendil-works/pi-tui驱动的 DeepSeek Harness 终端前端:界面是…

这是你的仓库?认领条目

回到顶部