dsh-ciel
higekibaka/dsh-ciel
夏尔 Ciel — DeepSeek Harness 的规划前顾问:第二个知识广博的模型在动手前提供方向、先例、陷阱与验证清单(主意,不是步骤)。命名灵感:转生史莱姆的大贤者夏尔。Settings → 夏尔 Ciel 独立页面可配。
Installer
dsh plugin --profile web add github:higekibaka/dsh-cielREADME
English | 中文
dsh-ciel(夏尔)
DeepSeek Harness(DSH)的规划前顾问 + 收敛批评者:在主模型制定计划之前,由一个知识分布不同的顾问模型提供思路、领域知识与陷阱清单——只给思路,不给步骤;另附每条助手回复的「批注评审」按钮,由批评者模型(默认 google/gemini-3.8-flash)对草案做红线批注。命名灵感:《关于我转生变成史莱姆这档事》中主角的脑内参谋大贤者夏尔。
顾问模式的价值不在于"顾问更聪明",而在于引入分布多样性 + 分离探索与执行两种认知角色,并用"只给思路"的约束把理解和落地的工作强制留在主模型身上。完整论证见 docs/design.md。
工作流程
flowchart TD
U[用户请求] --> E[主模型探查:读 / 搜 / 跑]
E --> P{规划时刻仍未咨询?}
P -->|是| R[注入一次提醒]
R --> A
P -->|否| A[ask_advisor · /advise]
A --> G{{门:先探查 · 追问预算}}
G --> M[顾问模型<br>第二模型 · 只给思路]
M --> I[思路 · 先例 · 陷阱 · 验证清单]
I --> L[主模型自己定计划、自己落地]
L --> D[回复草稿]
D -->|批注评审| C[批评者模型<br>收敛红线]
C --> S[severity 批注长在原文]
S --> F[填入输入框 → 用户编辑并发送 → 修正]
两条管道刻意角色分离:
发散(规划前) 收敛(成稿后)
───────────── ─────────────
顾问管道 批评者管道
ask_advisor · /advise 批注评审
思路 · 先例 · 陷阱 · 验证清单 红线批注 · severity 分级
只给方向,不下场 证伪输出,不复盘心路
开阔主模型的解空间 收窄成稿的风险面
功能
ask_advisor工具——一次同步咨询:思路、先例、陷阱、验证清单;受「先探查后咨询」门与追问预算约束。- 指导 prompt section——咨询协议注入系统提示词(可开关)。
- 批注评审——每条助手回复操作区的「批注评审」按钮:批评者对草案做收敛型红线评审,批注以 severity 波浪下划线 + 角标长在原文上,另有完整评审面板;评审记录持久化、跨重启水合。
- 原生右侧栏资源——评审、历史证据与顾问记录注册为三个
dsh-resource://资源与标签页;聊天保留摘要与角标,侧栏显示完整批注、引用与顾问条目。资源读取一次即结束,不后台监听、不轮询、不调用模型;失败时不显示上一次成功值。 /advise命令——人类触发咨询:上下文自动装配、结果卡片、自动知会主模型。- 独立设置页——设置左侧 → 夏尔 Ciel,位于 Agent 预设之后;采用 DSH 原生开关与只读状态标签,点击保存后热生效。切换页面保留草稿,不再在插件配置中重复编辑。
下方截图是旧版设置卡片与顾问卡片。当前版本使用左侧独立设置入口与原生右侧栏资源;后者尚无已发布截图,本文不代拟界面。
安装
dsh plugin --profile web add dsh-ciel
重启 DSH 后生效:工具与指导 section 对所有 preset 全局可用,设置出现在 设置 → 夏尔 Ciel 的独立页面。
从 dsh-advisor(≤ 0.10.x)升级?
settings.yaml里的advisor:节会在首次启动时自动迁入新的ciel命名空间;旧节保留不删,可随时手工移除。
配置项(ciel 命名空间)
| 字段 | 默认 | 说明 |
|---|---|---|
provider | kimi-coding | 顾问提供方路由(须已在设置 → 模型 注册) |
model | kimi-for-coding | 顾问模型 id;跨家族模型多样性收益更大 |
reasoningEffort | provider | 注入每次咨询的思考深度;provider 跟随提供方默认 |
maxTokens | 4096 | 顾问单次输出上限(256–32768) |
maxCallsPerTurn | 3 | 每轮咨询额度:1 次发散 + 追问预算 |
requireExploration | true | 首次咨询前要求先探查 |
enforceFollowupGap | true | 追问之间要求独立工作 |
planReminderEnabled | true | 规划时刻提醒 |
guidanceEnabled | true | 注入使用协议到系统提示词 |
criticProvider | google | 批评者提供方路由(独立于顾问管道) |
criticModel | gemini-3.8-flash | 批评者模型 id |
criticEffort | medium | 注入评审请求的思考深度;亦接受 provider |
enabled | true | 本插件调用总开关;关闭取消在途顾问/评审,并禁止新调用与新回传 |
advisorTimeoutSeconds | 180 | 单次顾问或 /advise 总时限,10–600 秒 |
criticExploreEnabled | true | 两阶段评审:先存疑,再只读核实 |
criticTimeoutSeconds | 180 | 评审唯一的执行预算:准备资料、存疑、核实共用总时限,10–600 秒 |
criticMaxTokens | 16384 | 单条模型响应的大小保护,256–32768;存疑最多 4096,不限制模型请求次数 |
评审结果与费用
批注按钮现在是“填入输入框”:追加到对应会话草稿,保留原文、引用卡片和附件,由你编辑确认后手动发送。填入不算已发送;清空草稿后可以重新填入。准备期间切换会话或修改输入时拒绝迟到写入,不覆盖、不自动发送;缺少新版 DSH 输入接口时明确失败,不退回自动回传。
0.17.0 起评审只限总时间,默认180秒;查询与模型请求次数只统计,不再因为达到某个次数而停止,也不据此截取疑点。资料准备和两个阶段共用同一个截止时间,不重新计时。旧 criticExploreBudget / criticMaxRequests 设置仍可加载但不生效(包括旧值0);是否查文件只看 criticExploreEnabled。本轮没有工具记录、只找到旧报告或不同套件,均不能直接证明测试未发生;证据不足应为未查,不据此指控造假。
存疑阶段只看用户请求和草稿,核实阶段才收到作者工具证据及顾问清单。合法空清单显示“未核实”,格式失败显示错误;未查完、逐项结果缺失/冲突以及旧版抢救记录显示“不完整”,不作为完整通过。宿主分配疑点编号,按逐项结果自己计数、生成总评;已排除或未查项的提醒批注会被剔除,规则见 评审契约。证据字段是模型引用,不代表程序已经验证引用内容为真;回传后作者仍应核对,而不是盲目修改。
每个会话同时允许一项评审;评审中可点“停止”。到总时限即中断当前工作并记录未完成/错误,不追加模型整理、不自动延时重试。正常完成或无法继续的错误也可提前结束评审;不是一定要运行到时限。0.18.0 起核实阶段只呈现原生保留的 run_code:批评者程序在 Ciel 私有的 worker + QuickJS/WASM 中执行,只能通过 JSON.parse(await tools.read/grep/glob(...)) 查询评审开始时的不可变内存副本;grep 是字面量搜索,程序只接受 TypeScript 可擦除语法,缺少能力时明确失败而不回退普通文件工具。详见 受限 PTC 评审交接。
时间上限不是金额上限。 两阶段及工具后的继续生成都会请求模型,输入上下文也会计费;输出上限是每请求上限,不是整轮总额,DSH 提供方还可能重试。停止不会退还已经消耗的 tokens。要禁止 Ciel 调用请关闭 enabled;要关闭文件核查用 criticExploreEnabled: false(仍会调用模型);此前已回传给主模型的修复轮次不归此开关取消。
独立设置页把总开关、常用设置和高级设置分开;所有修改在点击“保存”后以同一修订号原子提交。草稿在切换页面时保留,刷新页面不自动保存;配置在别处有更新时拒绝覆盖。“当前已启用”显示保存值,“待保存”标记草稿预览。顾问和评审卡片记录本次模型,历史缺失不会用当前配置补猜。
文件核查只访问本次受限源码副本,默认来自当前会话工作目录;高级设置 criticAdditionalRoots(默认 [])可追加明确允许的源码目录。普通工具输出保留,疑似凭据或作者过程资料会被扣留并标明未完整核实。内容检测不是识别所有秘密的保证,详见 读取隔离与模型标识。
受限 PTC 不等于通用沙箱。 批评者程序没有环境 Node 全局,不能直接读实时文件、起进程、联网或读会话;根 codeRuntime 不变,能力缺失时工具化阶段失败而不回退。私有注册表沿用 DSH 嵌套调度与日志格式,由 Ciel 守卫控制范围与时限;隔离的私有 tools/result 事件不会进入根观察者,因此并非所有全局策略插件都作用于该子会话。程序收到的是宿主裁剪后的回执,模型上下文只看到程序打印/返回的摘要与必要片段——不要把「程序读到」当成「模型看到全部文件」。DSH 原生子会话日志仍可能保留每次嵌套查询,Ciel 的片段/记录限额不是全局无痕承诺。
记录与证据存储
以下限制针对 Ciel 额外记录。DSH 本身仍可能保存顾问/评审子会话日志;清理 Ciel 旧记录不删除这些原生会话,也不代表全局无痕。
新版记录只写入版本化数据根 $DSH_HOME/ciel/v1/<kind>/<sessionId>/<hash(id)>.json:kind 为 reviews / evidence / advice(保留 calls / feedback)。每条记录封装 schemaVersion、kind、sessionId、id 与 value,以随机临时文件 wx 写入后原子重命名替换同键记录;目录 0700、文件 0600,单文件上限 512 KiB,评审列表按游标分页(默认 100 条、每页至多 200 条 / 16 MiB),受限页显式提供下一游标;分诊按每条评审合并保存,不随点击次数增加文件。读取校验会话/记录归属,拒绝符号链接、硬链接与非普通文件,并在读取前后检查大小与文件身份。旧 $DSH_HOME/dsh-advisor/ JSONL 历史不迁移、不读取;ciel 设置命名空间保留。
评审证据由宿主在真实 read / grep / glob 结果上分配 e1、e2… 引用;groundReview 只接受本次账本中实际存在且被引用的编号,伪造、越权或未返回的编号整条作废(对应疑点退回未查)。保存片段有界:每条记录默认 16 KiB / 200 行,每轮评审合计 128 KiB / 128 条;模型看到的就是落盘的那段字节,完整内存副本在评审结束后释放。contentSha256 只用于一致性检查,不证明防篡改,也不证明引用内容为真。
a1 是「作者提供的工具输出」来源标记:只记录来源存在性,不另存原文,覆盖范围因此标为不完整。模型输入前与落盘前各做一次敏感检查,两者都是启发式,不能保证识别所有秘密。检测会把明显占位符(…、...、<token>、YOUR_API_KEY、changeme、[redacted]、${ACCESS_TOKEN} 等,含被反引号、括号或列表标点包住的形式)与真实凭据形状分开,避免文档示例误拦评审;真实形状(长度 ≥8 的凭据值、已知密钥前缀、私钥块、带账号密码的 URL、Bearer/Basic)仍会被拦截。readEvidence 只按已提交评审的 evidenceIds 读取历史片段;记录缺失或不可用时明确失败,绝不改读当前文件。当前文件只能通过 Host 解析的 currentPath 作为导航打开。
当前文件导航始终携带历史证据所属 Session,工作区外绝对路径也不例外。Markdown 渲染视图需切换到代码或纯文本后按源码行定位;历史行号可能已不对应当前内容。空间不足时“对照当前文件”只打开单栏标签页,可先将原生侧栏展开全屏再对照。
兼容性
- 当前原生界面需要 DSH 0.1.5-alpha.2 或更新版本:使用
settings.section、平台共享的 Switch/Tag/Button、原生 resources 与右侧栏服务,不复制组件或样式,也不申请额外文件权限。安全调用仍需要tools.guard()与 Typert Remote;缺少守卫时明确拒绝,不降级为不受控调用。旧dsh-advisor评审记录不再读取;ciel设置保留。 - Node.js
^22.19.0或>=24.0.0;文件资料捕获目前要求 Linux 及可访问的 procfs 描述符接口。评审后端还需共享dsh-subagent/dsh-llm/dsh-tools的 0.1.5-alpha.2 对应 API(dsh-tools用于受限 PTC),并固定quickjs-emscripten 0.32.0;缺失时明确拒绝评审,不回退普通文件工具。 - 可与 omdsh-dev/dsh-advisor 共存:0.11.0 起设置命名空间迁至
ciel,两插件可同装。
开发验证(隔离会话与配置)
只换 profile 或端口并不隔离历史。 共享 DSH_HOME 的测试实例仍会把普通评测会话写入主 GUI 的会话库,出现在“未分组”。浏览器 A/B 必须让测试服务本身使用独立的 DSH_HOME;只给驱动脚本设置该变量无效,也不要连接主 GUI 做评测。
优先使用下面的 verify-runtime.mjs:它自动使用临时 DSH_HOME 并在结束时清理,不留下主侧边栏测试会话。Ciel 的后台子会话由 DSH 按 origin: subagent 隐藏,不能把用户正常的主会话一起隐藏。
仓库根是私有开发包(dsh-ciel-development),提供 esbuild 与官方 @deepseek-ai/dsh-util-workspace-path;根 pnpm-workspace.yaml 只包含根包,插件依赖独立安装。浏览器端源码是 plugin/src/client.js 与 plugin/src/sidebar.js(含 sidebar.css),由 scripts/build-client.mjs 打成单一 plugin/client.js:
pnpm install
pnpm --dir plugin install --frozen-lockfile=false
node scripts/build-client.mjs --check # 校验 client.js 与源码一致;重建用 pnpm build:client
在
plugin/内本地pnpm install后,运行一次scripts/relink-dev.sh:两个@deepseek-ai/*开发依赖(cordis、typert-protocol)和可用的评审 peer(dsh-subagent、dsh-llm)改用 profile 的共享副本——真实第二份副本带自己的注册状态,会让已链接插件失效。npm 安装的部署不受影响(消费方不会安装 devDependencies)。
离线回归(无需密钥,网络请求为 0):根目录 node --test plugin/test/*.test.js,或在 plugin/ 下 node --test。真实 DSH 工具链回放(不启动 Web):
DSH_CHECKOUT=/path/to/deepseek-harness node scripts/verify-runtime.mjs
独立原生侧栏验证(在目标 DSH checkout 目录内运行,使用其 React/JSDOM 与真实资源/右侧栏注册表):
DSH_CHECKOUT=/path/to/deepseek-harness \
TSX_TSCONFIG_PATH=$DSH_CHECKOUT/tsconfig.base.client.json \
node --import tsx/esm /path/to/dsh-ciel/scripts/verify-sidebar-native.mjs
0.18.0 受限 PTC 评审:默认 PTC 执行链 37/37 通过(0 失败、0 网络;执行链测试使用脚本模型,未做额外的真实模型评审/A/B 测试),单元测试 428/428(含运行时 15 项),Chromium 夹具 22/22(页面/控制台错误 0、网络 0),原生 SettingsRoot 回归通过(网络/模型 0),生成客户端 --check 与源码一致。宿主变更需重启 DSH 并刷新页面后生效(建议人工重启);正式实例上的人工 GUI 验收仍待进行。测试网络 0 只说明测试本身,不代表整个开发任务没有真实模型调用。候选包冒烟 18/18(解包 12 文件、仅 production 依赖、/tmp 真实 QuickJS Promise/.then/for-await、模块相对 worker 定位);缓存缺失时 --prefer-offline 会拉依赖包,打包/安装不保证全程 0 网络;仅 Node 24.20.0 实测,Node 22.19 尚未测试。详见 受限 PTC 评审。
0.17.0 历史验证(只限时、仍用原生读工具):390 个单元测试、22 个真实 DSH 离线执行链场景、22 项 Chromium 夹具检查及原生设置页回归通过。总时限包含资料准备和两个阶段;超时不追加模型。该记录不等于 0.18.0 已部署。详见 只限时评审交接。
0.16.1 历史验证:单元 381/381、真实执行链 23 场景(含占位符放行与真令牌拒绝)、原生侧栏 21 项、真实 Chromium 夹具 19 项、原生设置页回归全部通过。用户升级到 alpha.2 后,另用隔离 DSH_HOME 的第二实例完成真实浏览器检查:认证与刷新、Ciel 激活、只读分页 RPC、设置页原生控件、空白会话右侧栏挂载、/advise 命令注册通过,页面错误与模型 prompt 为 0;该实例使用合成记录与隔离状态,不是正式实例验收。正式实例上基于真实会话数据的批注/证据/当前文件交互仍需人工点验。CI 固定 alpha.2 commit。交接见 alpha.2 兼容性说明。
显式允许 DeepSeek 实测时,在 verify-runtime.mjs 后加 --live,并通过环境提供 CIEL_ALLOW_PAID_TESTS=1、DEEPSEEK_API_KEY;脚本固定使用 deepseek-v4-flash-vision-exp,禁止其他网络目标。不要把密钥写进参数或仓库。默认不运行 --live。
旧的浏览器 A/B 驱动需要显式提供 CIEL_ALLOW_PAID_TESTS=1、CIEL_AB_MODEL、CIEL_AB_CRITIC_PROVIDER(可另设 CIEL_AB_CRITIC_MODEL),模型和消息身份不明确即停止。它重新生成作者草稿,因此是诊断工具,不是严格的模型质量排名;优先使用固定夹具回归。
许可证
MIT © hgk
Plugins associés
archify (deepseek-harness)
tt-a1i/archify
WeKnora (dsh-weknora)
tencent/weknora
weknora
tencent/weknora
BrowserSkill (dsh-plugin-browserskill)
tencent/browserskill