Files
deepseek-harness/packages/examples/tui-demo/README.zh.md
T
Yichen Jiang fee12f1af0 refactor(llm-deepseek)!: rename the provider route to deepseek-official
The native adapter's route was named deepseek, colliding with pi-ai's
catalog provider of the same name, so the two DeepSeek paths could never
be mounted side by side. The web settings page needs both configurable at
once. Compositions, fixtures, goldens, scaffolding defaults, and docs all
move together (pre-release, no shim); TUI/session-query-spill/
missing-credential goldens re-recorded through their keyless refresh
modes because provider-name length shifts box padding and spill
truncation points.
2026-07-29 16:36:07 +08:00

6.5 KiB
Raw Blame History

@deepseek-ai/dsh-tui-demo

English | 中文

全屏终端应用组合包:一个 Cordis 插件,组合 @deepseek-ai/dsh-agent-spine-demo、持久的同会话目标、人类命令注册表与 /goal 生产方、JSONL 持久化、键盘支持的用户交互、预创建的 main agent,以及 @deepseek-ai/dsh-tui。一份 cordis.yml 将它作为单个条目挂载;dsh CLI 是启动此类配置的前端入口。

管道、脚本和其他非交互式运行应使用 @deepseek-ai/dsh-cli-demo。此组合包需要一对 TTY,不提供面向行的回退。

内置组件

插件 设置在此处的原因
@deepseek-ai/dsh-agent-spine-demo 共享服务、面向模型的工具,以及一个已配置的 main agent
@deepseek-ai/dsh-commands 供 TUI 和命令插件消费的纯人类命令发现与分发
@deepseek-ai/dsh-command-goal 直接在主干的持久目标栈上提供 /goal 状态与变更
@deepseek-ai/dsh-session-persistence-jsonl 位于 persistenceRoot 下的持久会话日志
@deepseek-ai/dsh-session-checkpoint-policy 模型请求和顶层工具 effect 前的语义持久性屏障,以及已完成步骤的检查点
@deepseek-ai/dsh-session-query-sqlite + @deepseek-ai/dsh-session-reference TUI 消费的组合式精确/FTS 会话查询与有界 @session 快照;面向模型的查询工具仍由叶节点选用
@deepseek-ai/dsh-user-interaction 与提供方无关的人类问题服务
@deepseek-ai/dsh-tui 全屏记录、编辑器、工具卡片、计划与问题 overlay
@deepseek-ai/dsh-tool-ask-user 面向模型的 ask_user_question 工具

可替换的 LLM、bash、文件系统和其他能力提供方仍留在叶节点配置中。@cordisjs/plugin-hmr 也仍是仅叶节点使用的开发条目,因为它需要 Loader 内部表层。

配置

默认值 路由目标
provider 必填 已配置 main agent 的提供方
model 必填 已配置 main agent 的模型
maxParallelToolCalls agent-loop 默认值 组合包内循环的并发上限
persona 系统提示词 persona 模板
toolOrder 字典序 显式的面向模型工具顺序
tools 拥有者默认值 工具呈现 mode
dshHome 拥有者默认值 bash 与 skill 使用的 Harness 主目录
sessionTitle 主干示例限制 后备标题词数/字节限制
skills 拥有者默认值 Skill 注册表、本地提供方和工具配置
toolBash 拥有者默认值 面向模型的 bash 工具配置
toolTasks 拥有者默认值 后台任务控制工具配置,或 false
goals 拥有者默认值 持久目标领域与模型工具配置;false 会移除目标栈与 /goal 生产方
workspaceContext 必填 Workspace 指令配置,或 false
persistenceRoot ./.sessions JSONL 持久化根目录,以及派生 session-query.db 索引的父目录
persistenceCompression 'zstd' JSONL 工件编码('zstd' 或原始 'none'
sessionReferences 服务默认值 路由到 dsh-session-reference 的跨会话候选项与快照限制
welcome ready. TUI 副标题
resumeCommand 退出和无宿主回退的命令模板;选择器本身使用会话查询与宿主移交
ui 拥有者默认值 推理、颜色、卡片高度等 TUI 呈现设置
resumeSessionId 要恢复的确切持久化会话

新运行会创建 main-session-<uuid> 会话 id,并将它同时传给 TUI 与已配置的 agent。恢复运行会将两个组件都绑定到 resumeSessionId。TUI 先于主干挂载,因此它可以渲染匹配的配置启动失败,而不会留下空白终端。应用为 /resume 组合持久化和会话查询;嵌入宿主还可以提供 tuiResumeHost,以原地移交进程。

前端入口

此包不交付 bin。dsh CLI 是终端前端入口:裸 dsh 启动已交付的 examples/tui-agent/cordis.yml(它挂载此组合包),而 dsh --config <path-to-cordis.yml> 启动另一个挂载此组合包的叶节点配置。它加载 cwd 下可选的 .env,驱动 Cordis Loader,并等待完整插件树。仓库安装了 Loader 的可选原生辅助程序,因此裸包说明符可以在纯 Node 下解析。

叶节点示例

- id: llm-deepseek
  name: '@deepseek-ai/dsh-llm-deepseek'
  config:
    apiKey: !!js process.env.DEEPSEEK_API_KEY
- id: bash
  name: '@deepseek-ai/dsh-bash-local'
- id: tui-agent
  name: '@deepseek-ai/dsh-tui-demo'
  config:
    provider: deepseek-official
    model: deepseek-v4-flash
    workspaceContext:
      maxBytes: 65536
    welcome: 'Coding agent ready.'
    ui:
      showReasoning: true

模型体验

交互式终端轮次

模型所见

每次非空、非命令的编辑器提交都会成为用户消息;运行中轮次内的提交成为 steering。斜杠命令输入和输出仍只面向人类,而已接受的 /goal 变更会追加领域拥有的模型可见状态。共享主干提供已配置的 persona、workspace 指令、skill 目录、目标控制和可见工具 schema。TUI 渲染本身对模型不可见。

Token 影响

用户、assistant 与工具历史按常规会话和压缩规则增长。Header、卡片、计划、Markdown 样式和快捷键不增加 token。

KV Cache 影响

只要组合后的提示词、schema、路由和保留历史前缀保持稳定,就只追加。组合变更与压缩可能从第一个变化的 token 起使复用失效。

人类问题答案

模型所见

ask_user_question 会保留工具调用,以及 dsh-tool-ask-user 定义的精简答案或稳定中断错误。问题 overlay 只在终端显示。

Token 影响

只有已完成或失败的工具结果会增加保留 token。

KV Cache 影响

只追加;答案跟在可复用请求前缀之后。

已知限制与延后工作

  • 只支持 TTYstdin 与 stdout 都必须是终端;自动化使用 dsh-cli-demo
  • 一个已配置的终端会话:记录与编辑器绑定到一个确切会话 id。
  • 应用集群固定不变JSONL 持久化与 ask-user 工具内置;不同策略需要另一种组合。
  • 批准机制独立存在:此应用回答 ctx.userInteraction,而不是 ctx.approval;权限提示需要批准服务和回答方。