一个用 C# 重写的 DeepSeek Harness 实现,初衷是解决原 DeepSeek Harness 在高并发下性能减退和崩溃的问题(TUI 单进程内存占用约 10MB,GUI 单进程内存占用约50-100MB)。
从 GitHub Release 下载对应平台的 Release 构建,装到用户目录并注册 dsharp 命令:
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/forestbat/DeepSeek-Harness-Sharp/master/scripts/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/forestbat/DeepSeek-Harness-Sharp/master/scripts/install.ps1 | iex安装后新开终端,在任意目录运行 dsharp 即可启动 TUI。
可用环境变量: DSHARP_VERSION(版本号或 latest)、DSHARP_HOME(安装目录)、DSHARP_BASE_URL(镜像基址)、DSHARP_PROXY(下载代理)。
-
配置文件:
~/.dsh/settings.yaml(Linux)/%USERPROFILE%\.dsh\settings.yaml(Windows);首次运行使用带注释的模板作为默认配置,保存设置时才写入文件,不会覆盖已有配置;插件开关与参数写在
plugins:段。 -
测试性构建与运行:
dotnet build # 只构建不运行 dotnet run --project DeepSeek-Harness-Sharp/DeepSeek-Harness-Sharp.csproj # 执行构建并启动 DeepSeek-Harness-Sharp/bin/Debug(Release)/net10.0/dsharp 启动构建结果
DSH_HOME(或settings.yaml的storage.root)可以指定独立的配置/会话目录,便于用不同配置试跑构建产物。# 默认入口: 交互式 TUI dsharp --gpu # 使用GPU加速渲染,会启动独立窗口 # 无头单次任务 dsharp -- headless "跑一遍测试" # 从磁盘恢复已退出的对话 dsharp (tui) --session <session-id> # 启动/恢复特定会话,加入--gpu参数则在独立 GPU 窗口恢复 dsharp (tui) attach <session-id> # 同上 # 后台 PTY 会话管理(守护进程按需自动拉起, 无需手动启动) dsharp (tui) list # 列出 daemon 管理的 PTY 会话 dsharp (tui) attach <pty-id> # 接回仍在运行的后台会话(`pty-id` 标识 daemon 管理的进程),加入--gpu参数则在独立 GPU 窗口恢复
注意:Linux 上
vk后端要求 glibc >= 2.33(ppy.SDL3-CS 要求), 老系统请用gl或升级 glibc; GPU 后端不可用时 dsharp 会自动回退到 CPU 模式。 -
使用
/plugins命令族添加、卸载和管理插件;也可以将插件放进<安装目录>/plugins/,就可以自动加载并启用该插件。插件编写示例可见tests/Dsh.NativePluginSample。 -
dsharp日志默认位置为
<home>/logs/dsh-YYYYMMDD.log,可以在settings.yaml→logging:中配置它们(TUI 下强制关闭)。
Dsh.Tui 工作逻辑类似于 tmux,会启动守护进程和伪终端,为 AI 任务保活,以防用户退出终端或网络抖动时,任务自动终止;此外,TUI还支持 Vulkan/OpenGL GPU 渲染加速,如果你使用 llama.cpp 部署模型,可以使用同一个 Vulkan 后端,实现原生命令行。
TUI 配置
plugins:
"@deepseek-ai/dsh-tui":
gpuBackend: auto # auto|vk|gl|cpu
vsync: true
keys:
overview: F5
newSession: "Ctrl+X Ctrl+N"
splitPane: "Ctrl+X |"
keySequenceTimeoutMs: 1500
highlightColor: "#7fd1ff" # 支持真彩色颜色配置
dividerColor: BrightBlack0.4.0 待发布:ChoicePrompt 问答与审批
- 问答与审批接管键盘和鼠标,不向聊天、全局快捷键或 shell 穿透;关闭后恢复聊天草稿、光标和焦点。
- 方向键与
Home/End导航,Space或1-9选择,Tab/Shift+Tab切换选项、自定义输入、提交和取消,Enter确认;滚轮或PageUp/PageDown浏览长内容,支持中文折行后的点击与悬停。 - 问答
Esc取消整个题组并丢弃部分答案,返回{"status":"dismissed","answers":[],"reason":"user_cancelled"},区别于没有问答提供者或服务错误。 - 审批提供
Allow once(y)、Always(a,仅当前会话的该工具,fork 不继承)、Reject(n) 和Cancel(c/Esc);取消不放行工具或取消整个回合,带Ctrl/Alt的快捷键不授权。 - GUI/Web 使用相同的选项和结果契约;Host 待决投影与 request id 为唯一权威,先答者生效。GUI 主聊天只自动打开当前机器、当前会话的提示,其他提示可从通知中心回答;调用方撤销等待会移除自己的请求。
- 仅在 Host 宣告
decision-cancellation-v1时启用问答整组取消与审批 Cancel;旧 v2 Host 显示 Unsupported、保留未决项,正常回答与拒绝仍可用。ACP 按实际提供的选项启用按钮,不代用更高权限,未被接受的响应保留待决状态。
本项目的 GUI 使用 Avalonia UI 原生实现,与 TUI 共用配置、会话和命令,双击安装包里的dsh-gui.exe即可打开,也可以从命令行启动。
Dsh.GuiHost/bin/Debug/net10.0/dsh-gui.exe # Windows
dsharp gui # 从控制台宿主进入 GUIGUI 配置
plugins:
"@deepseek-ai/dsh-gui":
theme: dark # dark|light|system
fontSize: 13.5
closeAction: tray # tray|quit|ask
workspaceView: solution # solution|filesystem
sidebarVisible: true
gpu: { enabled: true, adapter: auto, backend: auto }
window: { rememberBounds: true }@deepseek-ai/dsh-ide 提供外部编辑器启动、文件/行列定位、diff、历史记录和客户端桥接等功能。
/ide list
/ide doctor
/ide open README.md --line 1 --column 1 --pick
/ide open --changed
/ide diff --git --pick
/ide diff --checkpoint --pick
/ide status
/ide why
用户可以在 GUI 的「设置 → IDE 与编辑器」调整编辑器顺序(自动打开机制会选取最上面的一个启动)与触发规则(例如,用户可以配置在打开新会话时,启动想要的IDE);「打开方式」可选择编辑器及本地/远端目标。
IDE 配置
plugins:
"@deepseek-ai/dsh-ide":
editors:
- id: rider
remote_executables: [/opt/rider/bin/rider]
- id: vscode
- id: nvim
default_editor: auto
focus: never
reuse_window: auto
history:
timeline: true
timeline_limit: 50
window_seconds: 60
client_mappings:
- machine: build
source_root: /home/dev/project
destination_root: C:\work\project
kind: local_mirrordsharp 有完善的多机远程支持(Dsh.Fleet),同时可以在 GUI 中直接配置远程机器、打开远程工作区。
示意图:
运维命令:
dsharp machine list | add | remove | test | deploy
dsharp session list [--machine build]
dsharp session attach build/<id>
dsharp session stop build/<id>
dsharp doctor [--machine build]
dsharp host serve
dsharp machine proxy build show | set | test | clear
dsharp machine tunnel build set | show | test | use | direct | clear
dsharp doctor --proxy-layer ssh | local_outbound | remote_outboundFleet 配置
fleet:
machines:
- name: build
kind: ssh
host: build.internal
user: dev
auth: key # agent | key | password
keyPath: ~/.ssh/id_ed25519
deploy:
autoDeploy: true
network:
outbound_proxy:
url: http://127.0.0.1:7890
bypass: [example.com, "*.example.org"]
probe_url: https://www.gstatic.com/generate_204目前采取 Agent(主会话)-SubAgent 模式进行多 Agent 协作,支持多个 Agent 构成的森林;SubAgent 之间通过共享看板协调,也可接入 A2A 与外部 Agent。
- SubAgent 支持
spawn独立上下文/fork继承当前上下文两种派生方法,支持后台运行、模型选择、工具过滤与委派深度等功能或配置。 - 工具:
subagent、list_subagent_models、send_message、interrupt_agent、list_agents。 - 共享看板:
board_post、board_read、board_claim、board_release。 - 看板软行锁:按路径和行区间声明编辑意图,以防其他 SubAgent 乱改,
ttl到期自动失效;重叠声明返回冲突,只作 advisory。 - 大规模编排:
workflow(Dsh.Workflow) 或 PTC 模式,用 C# 程序批量启动子 Agent。 - A2A支持:带有
a2a_card、a2a_send、a2a_get、a2a_list、a2a_cancel工具,可作 A2A server 或连接远端 Agent。 - 外部 Agent:目前支持 Codex、Claude Code、OpenCode、Kilo Code 或任意 ACP Agent。
多 Agent 配置
plugins:
"@deepseek-ai/dsh-subagent":
provider: spawn
toolName: subagent
enableRunInBackground: true
backgroundMode: one-shot
maxDepth: 3
agentOptions:
provider: deepseek-official
model: deepseek-v4-flash
maxTokens: 8192
toolFilter:
allow: [read, grep]
"@deepseek-ai/dsh-workflow-worker-thread":
subagentProvider: spawn
maxRounds: 256
a2a:
enabled: true
host: 127.0.0.1
port: 0
publicUrl: https://agent.example.com
authToken: <token>
skill_id: coding
skill_name: Coding
remotes:
peer:
url: https://peer.example.com
token: <token>可以通过启用Dsh.Checkpoints插件,自动生成项目检查点,以便使用/timestamp命令回滚。
相关配置
plugins:
"@deepseek-ai/dsh-checkpoints":
maxPoints: 256
keepDays: 15
storage:
root: ~/.dsh
tool_results:
max_bytes: 65536
retain_days: 30支持 C# JIT 编译和 AOT 编译两种插件,使用 /plugins 命令管理,将符合规范的插件放入 <安装目录>/plugins/ 也可以自动加载。
插件配置
plugins:
"@deepseek-ai/dsh-memory":
backend: file
file: ~/.dsh/memory/project.md
"@deepseek-ai/dsh-checkpoints": false
"@deepseek-ai/dsh-toon": false
sandbox:
enabled: false支持 DeepSeek 账号登陆; 支持 TOON 格式输出,节省 token 消耗; 支持搜索会话内容。
0.4.0 待发布 — ChoicePrompt 问答与审批
- TUI 问答与既有审批共用键鼠选择控件,支持多选、自定义输入、禁用/默认、中文折行命中、长内容滚动和草稿光标恢复。
- 问答整组取消返回结构化
dismissed,审批保留当前会话工具授权边界,GUI/Web 复用选择与结果契约及 Host 先答者生效生命周期。 - 决策取消采用显式 Host 能力门禁:旧 v2 Host 不会把取消误读为空答案或拒绝;GUI/Web 显示 Unsupported、保留未决项,既有回答与拒绝继续可用。
未发布 — GUI 后端解耦
- GUI 改由中性工作区契约连接后端,会话、问答、文件/Git、编辑器、终端和机器设置保留现有入口;释放工作区不停止 Host 持有的会话。
- 工作区作为独立插件管理后端连接,不依赖 IDE 插件;未启用 IDE 时仍可使用会话、终端和文件能力。
- 新增 Kilo Code 内置适配器,支持 ACP 会话与交互终端入口。
- 内置 Host 新建或恢复会话时继承启动默认模型与 reasoning;持久化的会话选择仍优先,完全未配置模型时仍明确报错。
0.3.1 — Dsh.Ide 编辑器集成
- 编辑器检测、有序定义、宿主识别、安装目录
/ide命令族- GUI 编辑器设置与打开方式
- VS Code/JetBrains/Zed 历史与时间线
- 编辑器触发器
- 远端客户端桥接与路径映射
- LSP 与扩展桥接
0.3.0 — 远程宿主拆分、Iroh 传输与 GUI 工作区
- 远程 Host 客户端/服务端契约;SSH/Iroh 可选传输
- Iroh 机器配置与接收端命令
- SSH 代理、借用出口、分层代理探测
- GUI 远端会话、Git 页面、机器编辑、目录选择
- 图片读取工具;文本引用不再自动解析图片
- 配置模板统一
0.2.0 — Vulkan、主题与设置面
- Vulkan 渲染后端与 GPU 宿主抽象
- 时间线功能
- 模型列表、存储根统一
0.1.2 — 远程工作区打磨
- 远端会话跟随客户端模型
- 远端部署按发布版本取键,过期守护进程重启
- 修复 Avalonia 托盘图标;升级 Avalonia
- GUI 远端会话列表滚动区
0.1.1 — SSH 远程工作区、macOS、TUI
- SSH 远程工作区、中立传输、远端宿主、自动部署
dsh改名dsharp- macOS CI/JIT 发布
- TUI 真彩色颜色配置、更多
Ctrl+X功能 - 时间线/回滚、检查点
- 看板软行锁