用 dsh-tianshu-build 把视觉、记忆和全屏 TUI 装进 DeepSeek Harness

前言

DeepSeek Harness(dsh)是 DeepSeek AI 开源的智能体框架,核心设计是「一切皆插件」:模型、工具、会话、沙箱、界面都可以用 Cordis 插件替换或重组。官方仓库目前仍处于开发者预览阶段,兼容性会持续变化。社区里也出现了独立的插件目录站点,用来收录可安装的扩展,它和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。

对日常写代码的人来说,单独装一个皮肤或侧边栏往往不够。截图要读、跨会话要记得住、改 bug 希望先验证再落盘、仓库大了还要语义检索和影响分析——这些能力如果全靠自己拼插件,成本不低。dsh-tianshu-build 走的是另一条路:在 2026-08 的 dsh 基线上做友好 fork,把视觉、跨会话记忆、验证门、agent 路由、语义与图谱检索、文件回滚和全屏终端 UI 预先组合成一套可运行的发行。

这是什么

dsh-tianshu-build 由 huiliyi37 维护,社区目录把它归在「界面增强」。打开仓库会发现,它并不只是挂在官方 dsh 上的一个 UI 插件,而是独立的集成发行,产品名是天枢 Harness(Tianshu Harness),命令行与 npm 包名是 oh-my-tianshu。GitHub 上的旧地址 huiliyi37/dsh-tianshu-build 会重定向到 huiliyi37/oh-my-tianshu。截至 2026-08-17,该仓库约 32 星,主要语言是 TypeScript。

许可证需要分两层看。上游 DeepSeek Harness 是 MIT;本仓库在 NOTICE 里保留了这段署名,并写明自己是基于快照的独立 fork,与 DeepSeek 无隶属、无背书,也不追踪上游发布。发行许可证是 Apache-2.0,目录页、GitHub LICENSE 和 npm 包信息一致。仓库描述里的「友好 MIT fork」指的是上游许可,不是本仓库自己改成了 MIT。

维护者把两条发行线写得很清楚,安装前先对上号:

  1. 官方 dsh + dsh-tianshu-tui:只给官方 Harness 加交互式终端 UI,数据目录固定在 ~/.dsh
  2. 本仓库(oh-my-tianshu,曾用名 tianshu-public):自带 CLI 的独立发行。与官方 dsh 共存时,应设置独立的 $DSH_HOME(文档示例是 ~/.dsh-tianshu),避免会话和配置互相覆盖。

如果你只想给现有的官方 dsh 换一层终端界面,应走第一条;如果要一次性拿到下面这些差异化能力,才是 dsh-tianshu-build 的目标读者。

核心功能

官方基线已经包含文件与 shell/PTY、技能、任务/目标/计划、subagent 与工作流、沙箱审批、可恢复会话、LSP、Web 访问、上下文压缩等。本 monorepo 在此之上额外打包了若干插件,全部仍按「组合插件」的方式装配,而不是改死 agent 循环。

1、视觉桥与视觉副驾。@huiliyi37/dsh-vision-bridge 给纯文本主模型补读图:在 agent/pre-step 用独立视觉模型描述附件,再把描述注入上下文。桥失败会降级成可见提示,不会整轮失败。@huiliyi37/dsh-vision-ask 再进一步,把本会话里的图片登记为 img_1 这类短 id,主模型可通过 ask_image 反复追问,不必让用户重发。

2、跨会话记忆。@huiliyi37/dsh-memory 在结构化 claim 和知识笔记上做 BM25 混合召回,写入带质量门,终端里用 /memory/remember 管理。

3、验证门与路由。@huiliyi37/dsh-evidence-gate 面向修 bug:先看到失败再允许编辑,走 RED→GREEN。@huiliyi37/dsh-agent-router 根据指标把工作 MoE 式派发到原生 subagent。

4、检索。@huiliyi37/dsh-semantic-index 按定义对齐分块做文件级 BM25(对 CJK bigram 有处理),可选向量层再用 RRF 融合,对应 semantic_search@huiliyi37/dsh-meridian 用 tree-sitter 建 sqlite 代码图谱,提供 repo map、影响分析和流查询,对应 repo_graph@huiliyi37/dsh-pheromone 则是文件级、会指数衰减的会话空间记忆,用来标记 fragile、entry-point 一类信号。

5、文件回滚与 Git。写工具落盘前,@huiliyi37/dsh-fs-snapshot 先做快照,支撑 /rewind 的 code/both 粒度。@huiliyi37/dsh-git 提供类型化的本地 Git 能力,给工具和 UI 调用。

6、全屏终端 UI。@huiliyi37/dsh-tui 把天枢(opencode-tui)渲染核接到 harness 接缝上,界面对标 oh-my-pi:欢迎卡、段式状态栏、按状态着色的工具块,以及 17 套主题(默认琥珀色 omp)。渲染核的 Apache-2.0 来源链保留在包内的 LICENSE / NOTICE / SOURCE-MAP。

7、DeepSeek Spark 锚点。deepseek-spark 这条 provider 路由会在传输层截断 assistant 推理(flash 保留尾部 300 token,pro 需显式打开),@huiliyi37/dsh-spark-anchors 再把被裁掉的排除路径注回去,减少模型把已经否决的选项重新推一遍。

架构上仍是 Cordis 插件:模型、工具、策略、存储、上下文和界面都可以替换。会话流是权威日志,UI、恢复、fork 都从同一组事件派生。Code Mode 和自指 Cordis 工具(运行中检查并挂载/卸载插件)都是显式启用,不是默认打开。遥测默认关闭,不会往外传;只有你自己设置了 DSH_TELEMETRY_OTLP_URL,才会把日志打到你指定的 OTLP/HTTP 收集器。

安装与启用

运行环境是 Node ^22.19 || >=24,以及 DeepSeek API key(DEEPSEEK_API_KEY)。社区目录给出的安装命令如下,在 DeepSeek Harness 终端里执行:

dsh plugin add github:huiliyi37/dsh-tianshu-build

如需可复现安装,按目录页的写法固定 commit:

dsh plugin add github:huiliyi37/dsh-tianshu-build#commit

#commit 换成实际哈希即可。需要强调的是:这条命令来自社区目录;仓库自己的 README 把本项目定位成独立 CLI,推荐直接走 npm,而不是把它当作官方 dsh 上的普通插件往里塞。

已发布的 npm 包是 @huiliyi37/oh-my-tianshu(本文核对到的版本是 0.2.7)。一条命令直接跑终端 UI:

npx @huiliyi37/oh-my-tianshu tui

或全局安装:

npm i -g @huiliyi37/oh-my-tianshu
oh-my-tianshu tui

npm 11 及以上会拦截未放行的生命周期脚本。本包装了若干原生依赖:koffi 要编译、node-pty 要构建 PTY 二进制、@huiliyi37/dsh-subprocess-local 要恢复 spawn-helper 的可执行位、@google/genaiprotobufjs 要生成运行时资源。全局安装时需要显式放行:

npm i -g --allow-scripts=koffi,node-pty,@huiliyi37/dsh-subprocess-local,@google/genai,protobufjs @huiliyi37/oh-my-tianshu

如果 npm 还警告列表外的包,按提示追加后再装。静默跳过的原生构建,运行时往往会变成 Cannot find module

API key 可以先导出,也可以写入用户环境文件,之后每次启动会自动加载:

export DEEPSEEK_API_KEY=sk-…
echo 'DEEPSEEK_API_KEY=sk-…' >> ~/.dsh/.env

第一行只对当前 shell 生效,第二行持久化。启动后看欢迎页环境行:API Key ✓ 表示读到了,API Key ✗ 表示没读到,设好后重启。退出用 Ctrl+Q/exit

在 Termux(或 proot-distro 的 root)上,process.platformandroidkoffi 没有 Android 预编译包,CMake 还依赖 Termux 前缀。安装前需要:

export PREFIX=/data/data/com.termux/files/usr
npm i -g @huiliyi37/oh-my-tianshu

从源码开发则需要 git、上述 Node 版本和 pnpm。仓库检出地址以当前名为准:

git clone https://github.com/huiliyi37/oh-my-tianshu.git
cd oh-my-tianshu
pnpm install
pnpm run build
pnpm oh-my-tianshu tui
pnpm oh-my-tianshu web

与官方 dsh 同时安装时,先隔开数据目录:

export DSH_HOME=~/.dsh-tianshu

优先级是:显式配置 > $DSH_HOME > 默认 home。文档写明默认 home 独立化还在计划中,落地前不要省略这一步。

典型用法

终端 UI 和 Web UI 是两条常用入口。全屏终端:

oh-my-tianshu tui

等价于 oh-my-tianshu --profile tui。Web UI 默认听 http://127.0.0.1:3080

oh-my-tianshu web

无界面跑完一个任务再退出:

oh-my-tianshu run "summarize this workspace"

oh-my-tianshu 启动的是 profile:按顺序叠插件组合包,再叠 $DSH_HOME/profiles/ 里你自己的覆盖层。例如把插件装进 tui profile:

oh-my-tianshu plugin --profile tui add <package>
oh-my-tianshu --profile tui

TUI 里输入 / 打开命令菜单,↑↓ 选择、Tab 接受、Enter 提交、Esc 关闭;Ctrl+. 随时看键位表。和本发行差异化能力直接相关的命令包括:

  • /memory/remember:浏览或写入跨会话记忆
  • /rewind:两阶段回滚,先选消息再选粒度
  • /model spark-flash/model spark-pro:切到 DeepSeek Spark(对应 deepseek-spark/deepseek-v4-flashdeepseek-spark/deepseek-v4-pro
  • /session/fork:列会话、复制历史后分叉
  • /permission:在 workspace-writedanger-full-access 之间切换

工具审批以内联 ⚠ 允许执行 …?[y/N] 出现,上方带 unified diff。Ctrl+V 会读系统剪贴板里的图片(macOS osascript、Linux wl-paste/xclip、Windows PowerShell);粘贴内容像路径时则按文件附件加载。支持识图的主模型直接看图;纯文本主模型若配了视觉桥,会先转成描述;两者都没有时,界面会提示图片未发送,也不会提交。

视觉桥需要在装配里加上插件,并指定能看图的 provider/model:

# cordis.yml
- id: vision-bridge
  name: '@huiliyi37/dsh-vision-bridge'
  config:
    provider: deepseek-official
    model: <vision-capable model>

同时在 tui-runner 组合包配置里把 TUI 的 vision 状态设成与桥一致:supportsVision: falsebridgeEnabled: true

Spark 模式与同一把 DeepSeek API key 共用,打开一次即可热加载:

# settings.yaml
llm-deepseek:
  spark:
    enabled: true

dsh-spark-anchorstui 组合包装配;切到 deepseek-spark 路由后锚点补偿生效。自己拼的 profile 需要按包 README 显式加上这一项。

适用场景与注意事项

适合已经在用或准备用 DeepSeek Harness,又希望少自己拼插件的人:终端里写代码、偶尔贴截图、需要跨会话记住项目约定、修 bug 时希望先失败再改、以及在较大仓库里做语义检索或影响分析。自动化侧可以用 oh-my-tianshu run、ACP demo 和仓库里的 Python SDK,这些都以源码文档为准。

不适合把它误当成「往官方 dsh 里丢一个主题包」。目录分类是界面增强,仓库本体却是完整 harness fork,包发布在 @huiliyi37/* 下,独立演进、不跟随官方发版节奏。只要终端 UI、仍想留在官方 CLI 上,应安装 dsh-tianshu-tui,而不是本仓库。

安装前要读源码和许可证。社区目录也写了:插件以当前 dsh 进程的权限运行,安装时可能执行代码。本发行还包含原生编译步骤,权限面比普通主题插件更大。遥测默认关闭;若你打开了 OTLP 上报,目标必须是自己的收集器。Code Mode 和运行中改插件装配都是 opt-in,生产环境不要顺手打开。

维护者计划第二批把仓库名、启动命令和 npm 包名进一步统一,以减少和 dsh-tianshu-tui 的混淆。在那之前,以 README 里的命名备忘为准:dsh-tianshu-tui 是官方 dsh 的 TUI 插件,oh-my-tianshu 才是这套独立发行。

小结

dsh-tianshu-build 解决的是「dsh 可以插件化,但完整 coding agent 仍要自己拼」这件事。它从 2026-08 的 DeepSeek Harness 基线分叉,保留一切皆插件,把视觉、记忆、验证门、检索、回滚和全屏 TUI 预装成 oh-my-tianshu。目录页仍提供 dsh plugin add github:huiliyi37/dsh-tianshu-build;实际使用以仓库 README 的 npm/CLI 为准,并和官方 dsh 隔开 $DSH_HOME

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-tianshu-build/

GitHub(旧名会跳转到当前仓库):https://github.com/huiliyi37/dsh-tianshu-build

当前仓库:https://github.com/huiliyi37/oh-my-tianshu

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜