DSH-forJP-TUI:面向 DeepSeek Harness 的日语原生 TUI

前言

DeepSeek Harness(dsh)默认的终端交互界面以英文路径和通用布局为主。若你希望日文文案从设计阶段就作为一等公民、而不是塞进语言包边角,同时又想自己掌控绘制层、减少对上流非公开契约的依赖,社区里有人在做一条独立路线:参考既有 dsh-TUI 的思路,但不共享代码,从渲染层重新设计。

下面介绍维护者 mugi995 的客户端插件 DSH-forJP-TUI(仓库 mugi995/DSH-forJP-TUI,目录页 SkillHub)。截至 README 记载(2026-10-21),纵向切片 v0 已完成,UI 大改仍在进行中;阶段实现 S0~S12 中仅 S8b(goal)保留,其余已落地。

这是什么

DSH-forJP-TUI 是 dsh 的日语原生 TUI 表面:在终端里与智能体对话、查看工具结果、处理审批与用户提问。它与官方应用商店无从属关系;SkillHub 等社区目录是独立站点,安装前请自行阅读源码与 MIT 许可证。

插件以当前 dsh 进程权限运行;接入方式采用 in-process 的 Cordis bundle(dsh.bundle.patch),以便实现审批、用户提问、模型切换等人机交互——README 指出官方 SDK / ACP 并无审批通道,因此这是既定方案之一。

核心功能(README 已核实)

在 PTY 上启动并逐字节校验的前提下,当前版本已覆盖的能力包括:

  1. 对话与流式输出:响应流式显示、失败信息展示。
  2. 阅读与导航:替代屏幕(vim 风格)与滚动(PgUp / PgDn / Home / End、滚轮)。
  3. 工具卡片:terminal / diff / search / read 等调用与结果展示。
  4. 安全交互:审批(y 允许、n 拒绝;不回答视为拒绝,fail-closed);执行中可用 Ctrl+C / Esc 取消。
  5. 后台与提问:后台任务逐次输出;智能体提问(选项、Tab 自由输入、前后移动、跳过)。
  6. 辅助信息:思考展示、TODO、子智能体列表、web 卡片(模型依赖,无则 [skip]);上下文用量与 Cache Hit 进度条。
  7. 日文输入:日语 IME,转换中的文字会出现在输入栏。

输入栏与上下文条已实现;正文装饰类 UI 仍在重做(见 README 状态说明)。

设计取向(便于判断是否适合你)

目标 要点
自研外观 自握绘制层,默认不堆装饰
日语原生 文案自始 catalog 化,不把日语挤进语言包
上游稳定 尽量少依赖 dsh 非公开契约,并持续计量
可替换边界 UI 与 harness 分层;运行时对 DSH 的依赖刻意压到 ctx.get() / ctx.on() 两个导出名(src/host-contract.ts)

绘制基于 fork 的 Ink v8.0.0(置于 src/ink/),鼠标选择、命中测试、滚动固定等由项目自行扩展。Node 要求 >=22.19(见 package.json)。

安装与启用

资料中的用法是从仓库构建并安装 profile,而非凭插件名拼接 dsh plugin add。步骤如下。

先安装依赖并构建(顺序必须为 yoga → ink → main):

pnpm install
pnpm build

将 profile 安装到 $DSH_HOME(默认 ~/.dsh):

pnpm profile:install

在配置好 API 密钥后,用指定 profile 启动 dsh:

COMMANDCODE_API_KEY=... dsh --profile forjp-tui

也可通过包内入口 dsh-forjp(lib/bin.js)启动;入口行为可用环境变量切换(见下节)。

隔离开发时,可把 profile 装到工作区内的 home:

pnpm profile:install --home .dsh-home

典型用法与快捷键

对话操作(来自 README):

  • 输入后 Enter 发送;Alt+Enter / Ctrl+J 换行(输入区最多约 5 行)。
  • Ctrl+C 或连按两次 Esc 退出。
  • 审批或提问面板出现时,键盘由面板接管。

常用环境变量:

变量 值 含义
FORJP_ENTRY auto(默认) 先试 in-process,失败则子进程回退
in-process 仅 in-process,失败则异常退出
child 强制子进程 dsh --profile
FORJP_PROFILE 默认 forjp profile 名称
DSH_FORJP_HOST_PACKAGE 未设置 显式指定 @deepseek-ai/dsh 包目录

验证是否在另一版 DSH 上可用:

pnpm verify:host --host <dsh 的包目录>

UI 端到端冒烟(PTY,调用真实模型,约 10~15 分钟):

pnpm test:ui

适用场景与注意

适合:需要日语界面与 IME、希望在终端 TUI 里完整走审批/提问/工具卡片流程的 dsh 用户;愿意从源码构建、接受 UI 仍在改版中的现状。

注意:

  1. 插件与 dsh 同权限运行,安装前请审查 cordis.patch.yml、bundle 与脚本。
  2. README 写明自研 host-entry 失败时会回退到 dsh --profile 子进程;若需强制行为,请设置 FORJP_ENTRY。
  3. 测试默认不写 $HOME/.dsh,而是通过 DSH_HOME 指向工作区 .dsh-home/(见 README 开发节)。
  4. 更完整的状态、架构与坑点集中在仓库 docs/HANDOFF.md;接棒开发应先读该文档。

结尾

DSH-forJP-TUI 把「日语原生 + 自研 TUI 层 + 最小 harness 契约」做成可运行的纵向切片,适合作为客户端定制与 UX 实验的参考实现。当前星标为 0,属早期社区项目;跟进进展可看 GitHub 与 SkillHub 目录页。

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

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

小夜