talon-ui
Đã xác minhtalon-ui · v0.1.0 · MIT
Talon: a terminal UI for DeepSeek Harness agents (dsh plugin)
Cài đặt
dsh plugin add talon-ui Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
Readme
Talon
DeepSeek Harness(dsh)agent 的终端 UI,以 dsh 插件 bundle 形式交付。Talon 在不改动 harness 检出的前提下,在终端里呈现完整的交互式会话——流式转录、工具审批、用户提问、斜杠命令、跨工作区会话恢复。

English documentation: README.md.
功能
- 流式转录 —— 角色头 + 纯文本正文(拖选即可复制原文),流式 markdown 定稿后进入缓存的已提交单元格,上下文注入卡片,常规交互零
ESC[3J滚回区清屏。 - 审批面板 —— dsh 的第一个终端审批 UI。当工具请求提权(例如 bash 命令被沙箱拒绝后携带
sandbox_permissions重试),内联面板展示工具名、命令预览、cwd 与理由。1允许一次,2拒绝,Esc取消。每次决定都在转录里留下一行审计记录。 - 用户提问 —— 模型可通过
ask_user_question(已组合进 bundle)向你提问:单选、多选、自定义自由输入、多问题串行作答,plan-review 意图会高亮批准项渲染。 - 斜杠命令 ——
/help、/status、/resume、/clear、/exit、/quit,/触发模糊补全。命令结果从持久会话事件渲染,恢复会话时逐字节重放一致。 - 会话恢复 ——
/resume打开选择器(输入过滤,Tab在「本工作区 / 全部工作区」间切换,ISO 时间戳,live/persisted 标记)。恢复是进程内重绑定:先切换工作目录(chdir-first),再从活动会话日志重放转录,恢复后的 agent 立即可以继续对话。 - 干净退出 ——
/exit(或空闲空输入框下Ctrl+C/Ctrl+D)恢复终端并打印告别行,注明会话 id:To resume: dsh --profile talon, then /resume — session <id>。
环境要求
- Node >= 22.19,pnpm
deepseek-harness检出,且与本仓库为同级目录- 交互式终端(非 TTY 下 talon 会 fail-loud;自动化请用
dsh --profile headless)
安装
先构建 harness(talon 的 typecheck 与 profile 都从同级检出解析 dsh 包):
cd deepseek-harness && pnpm install && pnpm run build:lib:host
再构建 talon 并安装进 dsh profile:
cd ../talon-ui && pnpm install && pnpm build
cd ../deepseek-harness
pnpm dsh plugin --profile talon add link:../talon-ui
dsh plugin 会在 $DSH_HOME/profiles/talon(默认 ~/.dsh/profiles/talon)播种 @deepseek-ai/dsh-base,并把 talon-ui 追加为 bundle 层。link: 协议装的是指向本仓库的真符号链接,之后改代码只需 pnpm build,无需重装 profile。细节(含卸载方法、为何用 link: 而非 file:)见 docs/INSTALL.md。
使用
cd deepseek-harness
pnpm dsh --profile talon
按键
| 按键 | 场景 | 动作 |
|---|---|---|
Enter |
输入中 | 发送 |
Shift+Enter |
输入中 | 换行 |
Esc |
turn 运行中 | 中断 |
Ctrl+C |
turn 运行中 | 中断 |
Ctrl+C |
空闲且输入框有内容 | 清空输入框 |
Ctrl+C / Ctrl+D |
空闲且输入框为空 | 退出 |
Ctrl+L |
任意时刻 | 强制整屏重绘 |
面板
- 审批:
1允许一次 ·2拒绝 · 方向键移动高亮 ·Enter选中 ·Esc取消。 - 提问:
↑/↓或1–9移动 ·Space勾选/取消(多选)·Tab(或c)切自定义输入 ·Enter提交 ·Esc取消(自定义模式下先回选项)·PgUp/PgDn翻长题头。 - 恢复:输入过滤 ·
↑/↓移动 ·Tab切「本工作区 / 全部工作区」·Enter恢复 ·Esc先清过滤、再关闭。
上手示例
- 流式:
Explain what this repository does. - 提问:
Use ask_user_question to ask me a multi-select question with options Alpha, Bravo, Charlie. - 审批:
Run exactly: touch ~/talon-demo—— 沙箱拒绝工作区外写入,模型请求提权,审批面板弹出。 - 恢复:
/exit退出后重新启动,/resume选中会话——转录重放,agent 接着上次继续,换个工作目录也可以。
开发
pnpm test # vitest,v8 覆盖率,src/ 每文件 100% 阈值
pnpm typecheck # tsc strict,对着 harness 检出的编译声明
pnpm build # 产出 lib/(link 安装的 profile 实际运行的就是它)
pnpm test:e2e # live PTY 冒烟:启动 → 流式 → 审批提权 → 告别行
pnpm test:e2e 在真实 PTY 上驱动一次 pnpm dsh --profile talon 的活模型会话。前置条件:已构建的 harness、link: 安装的 talon profile、DEEPSEEK_API_KEY、python3;缺任意一项时套件自动跳过,默认 pnpm test 永不运行它。审批阶段会创建并删除 ~/.talon-e2e-<pid>。
设计文档位于 docs/:设计 spec 在 docs/specs/,各里程碑实施计划在 docs/plans/。
架构
两个 cordis 插件加一个 bundle patch:
talon-ui/boot(talon-boot)—— 宿主侧:用组合的默认模型选择创建根 agent。UI 插件从不拥有 agent(专用前门设计)。talon-ui—— UI 本体:在真实 TTY 上挂载控制器,经 pi-tui 渲染,只通过窄服务切面消费 dsh(审批应答者、提问提供者、命令注册表、会话查询、agent 注册表)。cordis.patch.yml—— 叠在@deepseek-ai/dsh-base之上的 bundle 层:storage + session-projection 缓存(给恢复选择器提供廉价会话标题)、dsh-tool-ask-user(模型侧提问工具)、以及 talon 自己的两行。
渲染遵循事件驱动、重放一致的纪律:转录展示的一切都来自持久会话事件,活会话与事后恢复渲染同样的字节。不可信字符串(模型文本、工具输出、标题)先过清洗器再着色;已提交单元格缓存渲染行,只有状态变更才失效。
状态
里程碑 T0(骨架)、T1(核心回路)、T2(富交互:审批、提问、命令、恢复)已完成,均有单测、快照与 live PTY 测试覆盖。接下来:T3(富渲染——markdown 高亮、工具卡、diff)与 T4(打磨——模型选择器、@file 补全、通知、图片粘贴、Windows)。
许可证
MIT