附录
附录 A 命令速查表
安装与启动
代码块
Plain Text
# 一行启动 Web UI(首次会自动下载)
npx @deepseek-ai/dsh web
# 全局安装后直接使用
npm install -g @deepseek-ai/dsh
dsh web
# 源码构建运行
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
常用命令
#GyaRiJLnoqyp text { white-space: pre; }#GyaRiJLnoqyp .fb0 { stroke: var(--N900-FG, 0.15); }#GyaRiJLnoqyp .fb0 {stroke: rgba(31,35,41, 0.15)}#GyaRiJLnoqyp .fx0 { stroke-miterlimit: 10; }#GyaRiJLnoqyp .fx0 {stroke-miterlimit: 10}#GyaRiJLnoqyp .fa1 { fill: rgb(187, 191, 196); }#GyaRiJLnoqyp .fa1 {fill: rgb(187, 191, 196)}#GyaRiJLnoqyp .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#GyaRiJLnoqyp .fx1 {font-style: normal}#GyaRiJLnoqyp .fx2 { text-anchor: middle; }#GyaRiJLnoqyp .fx2 {text-anchor: middle}#GyaRiJLnoqyp .fx3 { dominant-baseline: central; }#GyaRiJLnoqyp .fx3 {dominant-baseline: central}#GyaRiJLnoqyp .fx4 { stroke: none; }#GyaRiJLnoqyp .fx4 {stroke: none}#GyaRiJLnoqyp .fc0 { fill: var(--text-caption); }#GyaRiJLnoqyp .fc0 {fill: #646a73}#GyaRiJLnoqyp .fa2 { fill: var(--text-link-disabled); }#GyaRiJLnoqyp .fa2 {fill: rgb(187, 191, 196)}#GyaRiJLnoqyp .fa3 { fill: rgb(232, 239, 250); }#GyaRiJLnoqyp .fa3 {fill: rgb(232, 239, 250)}#GyaRiJLnoqyp .fc1 { stroke: var(--B500); }#GyaRiJLnoqyp .fc1 {stroke: #336df4}#GyaRiJLnoqyp .fx5 { font: 700 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#GyaRiJLnoqyp .fx5 {font-style: normal}#GyaRiJLnoqyp .fx6 { text-anchor: start; }#GyaRiJLnoqyp .fx6 {text-anchor: start}#GyaRiJLnoqyp .fx7 { dominant-baseline: alphabetic; }#GyaRiJLnoqyp .fx7 {dominant-baseline: alphabetic}#GyaRiJLnoqyp .fc2 { fill: rgb(0, 0, 0); }#GyaRiJLnoqyp .fc2 {fill: rgb(0, 0, 0)}#GyaRiJLnoqyp .fx8 { font: 400 12px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#GyaRiJLnoqyp .fx8 {font-style: normal}#GyaRiJLnoqyp .fc3 { fill: rgb(26, 58, 122); }#GyaRiJLnoqyp .fc3 {fill: rgb(26, 58, 122)}#GyaRiJLnoqyp .fx9 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#GyaRiJLnoqyp .fx9 {font-style: normal}#GyaRiJLnoqyp .fx10 { font: 400 11px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#GyaRiJLnoqyp .fx10 {font-style: normal}#GyaRiJLnoqyp .fc4 { fill: var(--B500); }#GyaRiJLnoqyp .fc4 {fill: #336df4}#GyaRiJLnoqyp .fb1 { fill: var(--N900-FG, 0.15); }#GyaRiJLnoqyp .fb1 {fill: rgba(31,35,41, 0.15)}#GyaRiJLnoqyp .fb2 { fill: rgb(201, 212, 230); }#GyaRiJLnoqyp .fb2 {fill: rgb(201, 212, 230)}#GyaRiJLnoqyp .fa4 { fill: var(--bg-body); }#GyaRiJLnoqyp .fa4 {fill: #fff}AB1234567891011命令作用dsh webdsh --profile headless "任务"dsh --profile web --dump-configdsh --dump-default-configdsh web --patch ./xxx/cordis.ymldsh plugin --profile demo add ./pkgdsh plugin --profile demo remove pkgdsh plugin --profile demo add github:you/pkgdsh --helpdsh web --help启动 Web UI(默认 )无头模式跑一次性任务打印组合后的配置树打印默认配置叠加配置层启动安装插件包到 profile从 profile 移除从 GitHub 安装启动器帮助Web 应用帮助http://127.0.0.1:3080
Python SDK
代码块
Plain Text
python -m pip install deepseek-harness-sdk
export DEEPSEEK_API_KEY=sk-...
# export DEEPSEEK_BASE_URL=http://127.0.0.1:8000/v1
# export DSH_MODEL=deepseek-v4-flash
关键路径
#nmXpAOWMPzEx text { white-space: pre; }#nmXpAOWMPzEx .fb0 { stroke: var(--N900-FG, 0.15); }#nmXpAOWMPzEx .fb0 {stroke: rgba(31,35,41, 0.15)}#nmXpAOWMPzEx .fx0 { stroke-miterlimit: 10; }#nmXpAOWMPzEx .fx0 {stroke-miterlimit: 10}#nmXpAOWMPzEx .fa1 { fill: rgb(187, 191, 196); }#nmXpAOWMPzEx .fa1 {fill: rgb(187, 191, 196)}#nmXpAOWMPzEx .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nmXpAOWMPzEx .fx1 {font-style: normal}#nmXpAOWMPzEx .fx2 { text-anchor: middle; }#nmXpAOWMPzEx .fx2 {text-anchor: middle}#nmXpAOWMPzEx .fx3 { dominant-baseline: central; }#nmXpAOWMPzEx .fx3 {dominant-baseline: central}#nmXpAOWMPzEx .fx4 { stroke: none; }#nmXpAOWMPzEx .fx4 {stroke: none}#nmXpAOWMPzEx .fc0 { fill: var(--text-caption); }#nmXpAOWMPzEx .fc0 {fill: #646a73}#nmXpAOWMPzEx .fa2 { fill: var(--text-link-disabled); }#nmXpAOWMPzEx .fa2 {fill: rgb(187, 191, 196)}#nmXpAOWMPzEx .fa3 { fill: rgb(232, 239, 250); }#nmXpAOWMPzEx .fa3 {fill: rgb(232, 239, 250)}#nmXpAOWMPzEx .fx5 { font: 700 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nmXpAOWMPzEx .fx5 {font-style: normal}#nmXpAOWMPzEx .fx6 { text-anchor: start; }#nmXpAOWMPzEx .fx6 {text-anchor: start}#nmXpAOWMPzEx .fx7 { dominant-baseline: alphabetic; }#nmXpAOWMPzEx .fx7 {dominant-baseline: alphabetic}#nmXpAOWMPzEx .fc1 { fill: rgb(0, 0, 0); }#nmXpAOWMPzEx .fc1 {fill: rgb(0, 0, 0)}#nmXpAOWMPzEx .fx8 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nmXpAOWMPzEx .fx8 {font-style: normal}#nmXpAOWMPzEx .fx9 { font: 400 12px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#nmXpAOWMPzEx .fx9 {font-style: normal}#nmXpAOWMPzEx .fc2 { fill: rgb(26, 58, 122); }#nmXpAOWMPzEx .fc2 {fill: rgb(26, 58, 122)}#nmXpAOWMPzEx .fb1 { fill: var(--N900-FG, 0.15); }#nmXpAOWMPzEx .fb1 {fill: rgba(31,35,41, 0.15)}#nmXpAOWMPzEx .fb2 { fill: rgb(201, 212, 230); }#nmXpAOWMPzEx .fb2 {fill: rgb(201, 212, 230)}#nmXpAOWMPzEx .fa4 { fill: var(--bg-body); }#nmXpAOWMPzEx .fa4 {fill: #fff}AB12345内容位置凭据(只写)机器级配置Profile 目录会话日志session_root(SDK)下的 JSONL$DSH_HOME/.credentials.yaml$DSH_HOME/cordis.patch.yml$DSH_HOME/profiles/
附录 B 术语表
#WNTVpLLgziPQ text { white-space: pre; }#WNTVpLLgziPQ .fb0 { stroke: var(--N900-FG, 0.15); }#WNTVpLLgziPQ .fb0 {stroke: rgba(31,35,41, 0.15)}#WNTVpLLgziPQ .fx0 { stroke-miterlimit: 10; }#WNTVpLLgziPQ .fx0 {stroke-miterlimit: 10}#WNTVpLLgziPQ .fa1 { fill: rgb(187, 191, 196); }#WNTVpLLgziPQ .fa1 {fill: rgb(187, 191, 196)}#WNTVpLLgziPQ .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#WNTVpLLgziPQ .fx1 {font-style: normal}#WNTVpLLgziPQ .fx2 { text-anchor: middle; }#WNTVpLLgziPQ .fx2 {text-anchor: middle}#WNTVpLLgziPQ .fx3 { dominant-baseline: central; }#WNTVpLLgziPQ .fx3 {dominant-baseline: central}#WNTVpLLgziPQ .fx4 { stroke: none; }#WNTVpLLgziPQ .fx4 {stroke: none}#WNTVpLLgziPQ .fc0 { fill: var(--text-caption); }#WNTVpLLgziPQ .fc0 {fill: #646a73}#WNTVpLLgziPQ .fa2 { fill: var(--text-link-disabled); }#WNTVpLLgziPQ .fa2 {fill: rgb(187, 191, 196)}#WNTVpLLgziPQ .fa3 { fill: rgb(232, 239, 250); }#WNTVpLLgziPQ .fa3 {fill: rgb(232, 239, 250)}#WNTVpLLgziPQ .fx5 { font: 700 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#WNTVpLLgziPQ .fx5 {font-style: normal}#WNTVpLLgziPQ .fx6 { text-anchor: start; }#WNTVpLLgziPQ .fx6 {text-anchor: start}#WNTVpLLgziPQ .fx7 { dominant-baseline: alphabetic; }#WNTVpLLgziPQ .fx7 {dominant-baseline: alphabetic}#WNTVpLLgziPQ .fc1 { fill: rgb(0, 0, 0); }#WNTVpLLgziPQ .fc1 {fill: rgb(0, 0, 0)}#WNTVpLLgziPQ .fx8 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#WNTVpLLgziPQ .fx8 {font-style: normal}#WNTVpLLgziPQ .fx9 { font: 400 12px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#WNTVpLLgziPQ .fx9 {font-style: normal}#WNTVpLLgziPQ .fc2 { fill: rgb(26, 58, 122); }#WNTVpLLgziPQ .fc2 {fill: rgb(26, 58, 122)}#WNTVpLLgziPQ .fx10 { font: 400 11px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#WNTVpLLgziPQ .fx10 {font-style: normal}#WNTVpLLgziPQ .fb1 { fill: var(--N900-FG, 0.15); }#WNTVpLLgziPQ .fb1 {fill: rgba(31,35,41, 0.15)}#WNTVpLLgziPQ .fb2 { fill: rgb(201, 212, 230); }#WNTVpLLgziPQ .fb2 {fill: rgb(201, 212, 230)}#WNTVpLLgziPQ .fa4 { fill: var(--bg-body); }#WNTVpLLgziPQ .fa4 {fill: #fff}AB123456789101112131415161718192021222324252627术语含义HarnessdshPlugin(插件)Context(ctx)injectBundle(组合包)ProfilePatch(补丁层)Seam(能力接缝)Service DefinitionService ProviderConsumerAgent Loop(智能体循环)Turn(轮次)Step(步骤)Waterfall 事件会话事件模型可见即已记录Headless(无头模式)CordisSchemasteryMCPE2BHMR把模型接到世界上的那层"接线系统":工具、文件、命令、日志、审批DeepSeek Harness 的命令行名称与缩写导出 的能力单元,一切皆插件服务容器,通过 访问服务插件声明服务依赖的方式带一个配置层的 npm 包, 声明可启动的具名装配, 声明 bundle 顺序按 id 插入或替换配置行的 YAML 层可替换能力:定义 + 实现 + 使用seam 中声明接口的角色seam 中实现接口的角色seam 中使用能力的角色(通常是面向模型的工具)驱动"模型请求 + 工具调用"的循环,本身也是插件零个或多个步骤,从领输入到不再欠工作一次模型请求 + 它调用的工具中间件式事件,监听器须 委托追加到日志的持久事实dsh 的运行时不变量:模型看到的都必须能从日志重建一次性跑任务并退出的 profile无沙箱限制的权限配置,只能在隔离环境使用Harness 主目录,存放凭据、配置与 profiledsh 底层的插件框架插件配置的 schema 定义库Model Context Protocol,模型上下文协议远程沙箱提供方(官方 POC 示例)热重载,配置变更自动替换插件实例danger-full-access$DSH_HOMEapply(ctx)ctx.
附录 D 实测记录
本附录记录本书写作过程中的真实运行验证,供读者放心参照。
D.1 环境
#FMtcRNVwfhtT text { white-space: pre; }#FMtcRNVwfhtT .fb0 { stroke: var(--N900-FG, 0.15); }#FMtcRNVwfhtT .fb0 {stroke: rgba(31,35,41, 0.15)}#FMtcRNVwfhtT .fx0 { stroke-miterlimit: 10; }#FMtcRNVwfhtT .fx0 {stroke-miterlimit: 10}#FMtcRNVwfhtT .fa1 { fill: rgb(187, 191, 196); }#FMtcRNVwfhtT .fa1 {fill: rgb(187, 191, 196)}#FMtcRNVwfhtT .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#FMtcRNVwfhtT .fx1 {font-style: normal}#FMtcRNVwfhtT .fx2 { text-anchor: middle; }#FMtcRNVwfhtT .fx2 {text-anchor: middle}#FMtcRNVwfhtT .fx3 { dominant-baseline: central; }#FMtcRNVwfhtT .fx3 {dominant-baseline: central}#FMtcRNVwfhtT .fx4 { stroke: none; }#FMtcRNVwfhtT .fx4 {stroke: none}#FMtcRNVwfhtT .fc0 { fill: var(--text-caption); }#FMtcRNVwfhtT .fc0 {fill: #646a73}#FMtcRNVwfhtT .fa2 { fill: var(--text-link-disabled); }#FMtcRNVwfhtT .fa2 {fill: rgb(187, 191, 196)}#FMtcRNVwfhtT .fa3 { fill: rgb(232, 239, 250); }#FMtcRNVwfhtT .fa3 {fill: rgb(232, 239, 250)}#FMtcRNVwfhtT .fx5 { font: 700 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#FMtcRNVwfhtT .fx5 {font-style: normal}#FMtcRNVwfhtT .fx6 { text-anchor: start; }#FMtcRNVwfhtT .fx6 {text-anchor: start}#FMtcRNVwfhtT .fx7 { dominant-baseline: alphabetic; }#FMtcRNVwfhtT .fx7 {dominant-baseline: alphabetic}#FMtcRNVwfhtT .fc1 { fill: rgb(30, 42, 58); }#FMtcRNVwfhtT .fc1 {fill: rgb(30, 42, 58)}#FMtcRNVwfhtT .fx8 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#FMtcRNVwfhtT .fx8 {font-style: normal}#FMtcRNVwfhtT .fx9 { font: 400 11px LarkHackSafariFont, LarkEmojiFont, Consolas, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, "Noto Sans", Tahoma, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", STHeiti, SimHei, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", system-ui; }#FMtcRNVwfhtT .fx9 {font-style: normal}#FMtcRNVwfhtT .fc2 { fill: rgb(26, 58, 122); }#FMtcRNVwfhtT .fc2 {fill: rgb(26, 58, 122)}#FMtcRNVwfhtT .fb1 { fill: var(--N900-FG, 0.15); }#FMtcRNVwfhtT .fb1 {fill: rgba(31,35,41, 0.15)}#FMtcRNVwfhtT .fb2 { fill: rgb(201, 212, 230); }#FMtcRNVwfhtT .fb2 {fill: rgb(201, 212, 230)}#FMtcRNVwfhtT .fa4 { fill: var(--bg-body); }#FMtcRNVwfhtT .fa4 {fill: #fff}AB12345项目值实测日期Node.js包管理器dsh 包2026/8/17v24.19.0(满足官方 要求)pnpm 11.21.0( 等价于 )(与官方 README 一致)>=24.0.0pnpm dlxnpx@deepseek-ai/dsh
D.2 验证项
启动 Web UI
代码块
Plain Text
pnpm dlx @deepseek-ai/dsh web --port 3099
结果:终端输出 dsh web: http://127.0.0.1:3099;用 curl 访问返回 HTTP 200,页面正常响应。
启动器帮助(与第 4 章一致)
代码块
Plain Text
dsh --help
结果:输出 dsh: boot a DeepSeek Harness profile — an ordered stack of plugin-bundle patch layers under your own overrides.,包含 --profile、--patch、--dump-config、--dump-default-config、web、plugin 等选项与命令,与第 4 章命令表完全对应。
配置树(与第 2 章一致)
代码块
Plain Text
dsh --profile web --dump-config
结果:输出分层配置树,可以看到:
•
第一层 # == @deepseek-ai/dsh-base(llm、session、agent 等基础插件行);
•
被上层修改的行带注释 # == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app;
•
每行含 id、name 与 config,正如第 2 章"后层 patch 按 id 覆盖前层"的描述。
D.3 未验证项与原因
•
真实 API 任务执行:需要 DeepSeek API Key,本环境未配置,未实测;
•
Python SDK:官方说明要求 Linux/macOS,本机为 Windows,未实测(书中已标注限制);
•
微信读书导入渲染效果:依赖微信读书 App 端行为,以实际导入为准。