插件生态与扩展
August 16, 2026 · View on GitHub
dsh-tianshu-tui 本身是官方 DeepSeek Harness 的插件;在其之上还有伴生插件与
扩展点两层。本仓同时包含两个独立插件:根目录的 @huiliyi37/dsh-tianshu-tui
与 vision-ask/ 子目录的 @deepseek-ai/dsh-vision-ask。
伴生插件
| 插件 | 包名 | 能力 | 装配 |
|---|---|---|---|
| 视觉副驾 | @deepseek-ai/dsh-vision-ask(同仓 vision-ask/) | 已发送图片登记为短 id(img_1 …),模型可经 ask_image 反复询问;同图同角度命中 per-image 描述缓存 | 独立装配,细节见 vision-ask/README.md |
| LSP 模型工具面 | omdsh-dev/dsh-lsp(社区独立仓) | 模型可调 lsp_goto_definition / lsp_find_references / lsp_diagnostics;装配后 TUI 展示桥自动消费其 lsp 服务,与模型工具面共享同一 LSP server 集 | dsh plugin --profile tui add github:omdsh-dev/dsh-lsp |
| 视觉桥 | dsh-vision-bridge(harness 侧) | 主模型不识图时,提交前经独立视觉模型生成图片描述 | provide visionBridge 服务;TUI 按服务存在性自动探测 |
TUI 展示桥的 LSP 诊断源探测顺序:社区插件服务(getDiagnostics 形状)→ 官方
ctx.lsp seam → 内置桥降级。
扩展点
1. Slash 命令注册表(tui.commands 服务)
TUI 构造时把注册表注册为 tui.commands 服务。外部插件可以:
const registry = ctx.tui.commands // 或经 ctx.reflect.get('commands')
registry.register({
name: 'mycmd',
description: '我的命令',
argsHint: '<arg>',
run: async ({ text, echo, ctx, sessionId }) => { echo('hello') },
})
- 命令对象:
name(小写,不与既有命令互为前缀)/description/argsHint?/run - 最小唯一前缀解析:歧义或未知名拒绝,不猜命令
/help与命令面板自动收录新命令(单一事实来源)
2. Overlay 注册
OverlayController 暴露注册面,外部插件可实现 render(width, height): string[]
契约注册自己的全屏 overlay(进出 alt screen、Esc 关闭、scrollback 补写都自动处理)。
3. 事件消费
TUI 订阅的会话事件与 workflow/subagent/approval 事件(见 ADAPTER.md 清单)都可被 外部插件同时消费——事件是广播的,不互斥。
4. 主题
内置调色板在 src/theme-palettes.ts;custom:<name> 支持运行时自定义。
新增内置主题必须带 description(/theme 选择器的单一事实来源)。
服务依赖(消费面)
TUI 消费的宿主服务分必选/可选,可选服务缺失时相关命令与面板 fails loud (⚠ 警告),绝不静默空白,也不阻塞 TUI 启动。完整清单见 ADAPTER.md。
打包与发布
- 本仓同时产出两个包:根
@huiliyi37/dsh-tianshu-tui与vision-ask/(独立 package.json/tsconfig/tests)。 lsp/目录是历史源码(已迁出为社区独立仓 omdsh-dev/dsh-lsp),不再随本仓发布。- 发版流程见 RELEASE.md;
lib/index.js必须跟仓。
贡献新插件
想为 TUI 生态贡献新插件,建议:
- 先确认能力边界:展示层能做什么/不能做什么见 ADAPTER.md (能:新命令、新 overlay、事件消费、主题;不能:改请求体、workflow 控制、审批 patch)。
- 用
tui.commands注册表 + overlay 契约起步,纯函数渲染层放format/风格模块。 - 新文件必须补
SOURCE-MAP.md条目(CI 护栏)。