插件生态与扩展

August 16, 2026 · View on GitHub

dsh-tianshu-tui 本身是官方 DeepSeek Harness 的插件;在其之上还有伴生插件扩展点两层。本仓同时包含两个独立插件:根目录的 @huiliyi37/dsh-tianshu-tuivision-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-tuivision-ask/ (独立 package.json/tsconfig/tests)。
  • lsp/ 目录是历史源码(已迁出为社区独立仓 omdsh-dev/dsh-lsp),不再随本仓发布。
  • 发版流程见 RELEASE.md;lib/index.js 必须跟仓。

贡献新插件

想为 TUI 生态贡献新插件,建议:

  1. 先确认能力边界:展示层能做什么/不能做什么见 ADAPTER.md (能:新命令、新 overlay、事件消费、主题;不能:改请求体、workflow 控制、审批 patch)。
  2. tui.commands 注册表 + overlay 契约起步,纯函数渲染层放 format/ 风格模块。
  3. 新文件必须补 SOURCE-MAP.md 条目(CI 护栏)。