dshcodecli
Verifieddshcodecli · v0.1.6 · MIT
Keyboard-first terminal UI profile for the DeepSeek Harness agent runtime
Install
dsh plugin add dshcodecli Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Creators
Readme
DeepSeek Harness TUI
键盘优先的终端 profile,独立位于本仓库 packages/dsh-tui,不修改
opensource/deepseek-harness 或 opensource/cordis。用户文档见
docs/tui-user-guide.md,验证记录见
docs/phase-0-compatibility-matrix.md。
边界
src/harness-adapter.ts是唯一允许接触上游的模块:它优先 import 已安装的@deepseek-ai/dsh-*包,开发环境回退到固定的源码 checkout,并把 Agent、 SessionEvent、approval waterfall、commands、questions 与 tool presentation 归一为 TUI 自有 contract。- 其余模块(projection、store、卡片、布局、shutdown、诊断)不引用上游类型;
非
.tsx模块也不引用 React/Ink。tests/isolation.spec.ts扫描全部源码强制这两条。 cordis.patch.yml是外置 bundle overlay,并显式补齐read-onlypermission preset;Agent loop、工具、策略、sandbox 与持久化仍归 Harness 所有。upstream-compat.json固定已验证 commit 与工具链;上游更新先跑npm run check:release,失败时保留旧基线。
模块
| 模块 | 职责 |
|---|---|
startup.ts |
argv 解析与校验(进入 raw mode 前失败) |
plugin.ts |
组合、生命周期、受控关闭、诊断日志 |
harness-adapter.ts |
唯一上游耦合点,含 session 列表与运行请求 |
agent-controller.ts |
上游中立的 handle 所有权与操作 |
conversation-projection.ts |
seq gate + 幂等折叠(id 索引,无线性扫描) |
transcript-view.ts / tool-card.ts / diff-view.ts |
卡片与折叠策略 |
terminal-text.ts / terminal-capabilities.ts / terminal-layout.ts |
终端安全、能力探测与行预算 |
activity.ts |
状态行投影(权限、todo、token、子 Agent) |
session-selector.ts |
恢复候选与选择解析 |
shutdown.ts / diagnostic-log.ts |
有界关闭与脱敏诊断 |
app.tsx / render-boundary.tsx |
Ink 渲染与区域级错误边界 |
开发命令
pnpm install
pnpm run check:release # 完整发布门禁(下列全部)
pnpm run check:release -- --fast
pnpm run check:upstream # 上游 tuple 与服务契约
pnpm build # 严格 TypeScript
pnpm test # 单元 / 投影 / 边界 / 故障注入
pnpm run check:profile # 真实 Harness profile 组合
pnpm run check:interactive # 80x24 审批 / 160x50 resize / 80x12 提问 / Unicode 粘贴
pnpm run check:resume # 新建 -> 退出 -> --resume latest -> 续跑
pnpm run check:bench # 性能预算
pnpm run check:packed # 打包产物离树安装
pnpm run check:soak:quick # 10 秒耐久;pnpm run check:soak 为 30 分钟
pnpm run check:node22 # Node 22 运行时矩阵
pnpm run check:real # 真实 DeepSeek API 一次性任务(密钥取自环境或 .env)
pnpm run check:real:interactive # 真实模型 + 真实工具 + follow-up + /quit
pnpm run check:real:approval # read-only 预设下的真实升权与审批决策
pnpm run build:lib # 生成发布用 lib/
pnpm run check:cli # dshcodecli 启动器(help / 非 TTY / 非法预设 / installed 接线)
dshcodecli "检查当前改动并运行测试"
dshcodecli -i --alternate-screen "修复登录竞态"
dshcodecli --resume latest
dshcodecli --resume-select
dshcodecli --permission read-only "review current changes"
交互模式中,/model 打开模型选择器,/model PROVIDER/MODEL[:EFFORT] 从下一轮切换
当前 Session,/model save PROVIDER/MODEL[:EFFORT] 额外保存未来 Session 默认值。/status、
/context、/doctor 和 /config 提供只读运行信息;/commands 打开 Ctrl+P 命令面板;
/clear、/exit 分别是 /new、/quit 的安全别名。
dshcodecli(bin/dshcodecli.mjs,pnpm link --global 后任意目录可用)是唯一入口,
pnpm tui 与 scripts/run-tui.sh 已经变成它的薄别名。命令在本仓库内解析到时走 dev 模式:
以 --conditions=development 让 profile 解析 src/*.ts;装到别处则找已安装的 dsh
并解析编译后的 lib/*.js。两种模式都以你敲命令时所在的目录为工作区。
当前限制
Ctrl+X以 detached 进程打开编辑器,适合 GUI/远程编辑器;需要接管 TTY 的终端 编辑器不在 P0 范围。- SSH/tmux 已探测并降级,但人工环境矩阵尚未执行;Linux/macOS 的 PTY 套件未在本 环境运行。
- 鼠标只接管滚轮(应用内翻页),接管期间原生拖选需按住
Shift,/mouse可交还终端; 图像协议、PTY 面板、右侧 activity 面板与会话全文搜索仍未做(P1)。 - 内置 profile 注册需上游
PROFILE_TEMPLATES配合;本仓库按 ADR 0001 只用外置 bundle。