← Back to home@la-sandrone

dsh-taller-y-relojeria-de-sandrone

对DeepSeek Harness的本地爆改合集:源码补丁、界面补丁包、皮肤、字体方案、启动器,以及把这些东西改出来时踩过的坑和判据。

Stars
0
Language
Python
Created
Oct 11, 2026
Updated
Oct 12, 2026

Introduction

Nuestra Señora del Trono de Sabiduría, Espejo de Justicia, Salud de los Enfermos, Refugio de los Pecadores, Arca de la Alianza y Estrella de la Mañana

dsh-taller-y-relojeria-de-sandrone —— 桑多涅的工坊与钟表铺

对 DeepSeek Harness(DSH)的本地爆改合集:源码补丁、界面补丁包、皮肤、字体方案、启动器、System Prompt 设计,以及把这些东西改出来时踩过的坑和判据。

标题是Letanías lauretanas里六个真称号的串联,你去核对原剧情我反正觉得差不多对(草生)


⚠️ 三条前提(先读,能省你很多时间)

  1. 本仓零位图。没有任何 png/jpg/webp/gif(唯一例外是随包字体与 bench/katex/ 里的 KaTeX 字体,都在 NOTICE.md 列明)。皮肤背景请自备,见 skins/navia/README.md。
  2. 皮肤只包含作者自己做的那个(navia)。著名全家桶插件dsh-web-all里的其它主题各有作者与各自的授权,不在这里。
  3. 补丁是版本耦合的,而且会大声报错。patches/*/manifest.toml 里带着对上游源码结构的断言:版本对不上就拒绝打补丁并报出漂移点,不会静默打歪。

目录

目录 / 文件里面是什么怎么用
patches/源码补丁的版本无关存档:manifest.toml + 可 git apply 的 .patch + 为什么用 tools/dsh-ui-patches.py 核对/重放;也可手工 git apply
packages/dsh-sandrone-ui-patches/UI 补丁包:以 client 半区注入全局 CSS 的方式改界面(字体方案 / 字号倍率 / 随包可变字体 / 皮肤压制 / 长会话渲染剪枝)pnpm add file:packages/dsh-sandrone-ui-patches(见包内 README)
skins/navia/一个皮肤:浅底侧栏 + 深底主区 + 毛玻璃(图自备)放进 home 的 skins/ 下,重启
notes/脱敏后的实操笔记:排版、皮肤、升级、部署、issue、提示词、检索读为什么;配方数值会随版本过期,判据不会
tools/实用工具:补丁护栏、home 硬链接修复、补丁分层检查、H1 强制,以及皮肤取色探测 skin-color-probe.py(拿一张主题图直接出「该配浅底还是深底」的判决 + 白/黑字对比度)直接跑(多为 --help 自明)
start-web.pyDSH 启动器:起 / 停 / 查 / 试新版本 / 回收运行记录,实现全在这一个文件先看 启动器配置和日志/README.md
prompts/五个使用场景的 System Prompt 设计(从 DSH 活配置提取,不是历史快照)+ 该目录的 CC BY-SA 许可全文先读 prompts/README.md:架构、五条设计取向、对话索引机制
docs/长会话渲染实测报告(含一条方法学教训:--headless 不能用来测 layout);System Prompt 相关研究与实践(110 条参考文献,含逐条证据分级与检索缺口声明)读结论;复现材料在 bench/
bench/渲染基准的复现材料(含 KaTeX 字体)见报告

三个源码补丁

补丁一句话文档
Markdown 渲染让用户消息按 Markdown 渲染(这是上游的产品选择,本地选了另一条)patches/Markdown渲染/
空回复兜底让「只吐思考链、finish=stop」的退化响应变成可重试的 EMPTY_RESPONSE,而不是一条静默落盘、界面上什么都不显示的空白回复patches/空回复兜底/dsh-empty-response-content.md
沙盒 scratch 落点让 workspace-write 沙盒拥有一个跨调用存活的临时目录 —— bwrap 在 --tmpfs /tmp 之后把宿主的一个子目录 bind 回去(其余 /tmp 保持每次全新);顺带解决「沙盒里 mkdir /tmp/x 下次调用就没了」patches/sandbox-scratch/

后者的排查过程值得单看:一场真实会话 153 轮里 13 轮收尾只产出 reasoning 块、正文一个 token 都没生成,而两层空响应守卫都在问错的问题(数的是「有没有开过块」而不是「有没有可交付内容」)——其中一处还有一条把错误行为写成契约的测试(keeps a thinking-only stop successful)。文档里有完整的取证链。


环境变量与可移植性

这些工具是从我们那台机器上搬出来的,所以根目录不写死:

变量作用缺省
DSH_HARNESS_DIRharness 根目录(启动器给子进程注入的就是它)由脚本自身位置推导(tools/ 的上一级)
DSH_TRACE_LOG取证日志落点(用来实现「每实例一份」)启动器按实例路径注入;没走启动器时落 .dsh-scratch/fetch-trace.log
DSH_H1_MODE_FILEH1 实验的「臂」开关文件随实例记录目录

⇒ 把它们放在 <任意目录>/tools/ 下、旁边有 start-web.py,就能自动认祖归宗;实在推不出来会报错而不是猜。

.dsh-scratch/ 是「没走启动器」时的匿名取证落点(我们那边这个目录叫「草稿纸与垃圾桶」,发布件里换成了中性名)。写日志的 preload 有 try/catch 兜底,目录不存在也不会拖垮宿主。

⚠️ 仍要说清:start-web.py 与 tools/ 里几个脚本是按我们自己的工作区布局写的(原始代码研究/<版本>/ 检出、dsh-domus-<版本>/ 实例 home、启动器配置和日志/),它们是参考实现 —— 照这个结构摆能用,扔进别的布局会明确报错。


授权与素材

  • 本仓代码:MIT(见 LICENSE)。
  • 文本内容(notes/、prompts/、docs/):CC BY-SA 4.0(prompts/ 的许可全文在 prompts/LICENSE)。两者是聚集体:CC BY-SA 不传染到代码,反亦然。
  • 第三方素材(随包字体 SIL OFL 1.1、KaTeX MIT、上游 DSH MIT):逐项见 NOTICE.md。
  • 本仓不含任何插画/摄影素材,也不含任何凭据。所有笔记在发布前经过确定性脱敏(机器路径与用户名已替换),并没有「顺手」保留原文。

⚠️ 这是非官方的本地改动合集,与 DSH 上游无隶属关系。补丁都是对特定版本的定点修改,升级后请先核对。