简称 CT全名 DSH Calibration Tier:C 取自 calibration——把用力程度校准到任务;T…
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add YokosWY/dsh-calibration-tier该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 30 条)
- 发起网络请求lib/client.js:135
return fetch(portUrl(port, "probe", "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client.js:176
return fetch(portUrl(port, sessionId, "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client.js:577
return fetch(portUrl(port, sessionId, "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client.js:607
return fetch(portUrl(port, sessionId, "/state"), { - 发起网络请求lib/client.js:1275
fetch(bridgeUrl("client", "/debug"), { - 写入本地文件lib/bridge.js:128
writeFileSync(join(dirname(STATE_FILE), "calibration-debug.jsonl"), line, { flag: "a" }); - 读取本地文件lib/state.js:32
text = readFileSync(STATE_FILE, "utf8"); - 读取本地文件lib/state.js:37
text = readFileSync(LEGACY_STATE_FILE, "utf8"); - 写入本地文件lib/state.js:211
mkdirSync(dirname(STATE_FILE), { recursive: true }); - 写入本地文件lib/state.js:212
writeFileSync(tmp, JSON.stringify(payload, null, 2), "utf8"); - 写入本地文件lib/state.js:213
renameSync(tmp, STATE_FILE); - 写入本地文件lib/state.js:217
writeFileSync(tmp, "", "utf8"); - 读取本地文件lib/state.js:227
if (options.backup && existsSync(STATE_FILE)) { - 写入本地文件lib/state.js:229
copyFileSync(STATE_FILE, `${STATE_FILE}.bak`); - 读取本地文件lib/agents.js:42
const st = statSync(MODELS_FILE); - 读取本地文件lib/agents.js:45
const raw = JSON.parse(readFileSync(MODELS_FILE, "utf8")); - 读取本地文件lib/agents.js:107
const st = statSync(MODELS_FILE); - 读取本地文件lib/agents.js:109
const raw = JSON.parse(readFileSync(MODELS_FILE, "utf8")); - 写入本地文件lib/agents.js:232
mkdirSync(dirname(CACHE_FILE), { recursive: true }); - 写入本地文件lib/agents.js:233
writeFileSync(CACHE_FILE, JSON.stringify(payload, null, 2), "utf8"); - 读取本地文件lib/agents.js:243
return JSON.parse(readFileSync(CACHE_FILE, "utf8")); - 读取本地文件lib/verify.js:70
if (statSync(resolved.abs).isDirectory()) return { ok: false, level: "missing", reasons: ["path-is-directory"] }; - 读取本地文件lib/verify.js:71
content = readFileSync(resolved.abs, "utf8"); - 读取本地文件lib/verify.js:117
if (statSync(resolved.abs).isDirectory()) return { ok: false, level: "missing", reasons: ["path-is-directory"] }; - 读取本地文件lib/verify.js:120
content = readFileSync(resolved.abs, "utf8"); - 发起网络请求lib/client/10-bridge.js:23
return fetch(portUrl(port, "probe", "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client/10-bridge.js:64
return fetch(portUrl(port, sessionId, "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client/30-net.js:5
return fetch(portUrl(port, sessionId, "/state"), { method: "GET", credentials: "omit", cache: "no-store" }) - 发起网络请求lib/client/30-net.js:35
return fetch(portUrl(port, sessionId, "/state"), { - 发起网络请求lib/client/50-tail.js:17
fetch(bridgeUrl("client", "/debug"), {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
给 DSH 输入框加一条需求锚定档位分段条:静默/方向/约束/落地/拷问,模型通过 clarify_tier 工具读取
README
由 DeepSeek 最新模型翻译生成dsh-calibration-tier
简称 CT(全名 DSH Calibration Tier):C 取自 calibration——把用力程度校准到任务;T 取自 tier——一根条上的档位;两代旧名(dsh-clarify-tier / dsh-calibration)的首字母也都落在这两个词里。
给 DSH 输入框加一条档位条:一框三模式:思考 / 循环 / 对抗。思考与循环互斥切换,对抗可叠加在任一种上。
常规 | 严格 | 极致 ‖ 循环 | 对抗(思考)↔ 轻量 | 交付 | 极致 ‖ 循环亮 | 对抗(循环)。
拨档或拨开关 → 模型通过 clarify_tier / forge_level 读到 → 决定开工问多深、交付后磨几轮、要不要额外做对抗审。
展开完整文档(README 剩余 1 节)
dsh-calibration-tier
简称 CT(全名 DSH Calibration Tier):C 取自 calibration——把用力程度校准到任务;T 取自 tier——一根条上的档位;两代旧名(dsh-clarify-tier / dsh-calibration)的首字母也都落在这两个词里。
给 DSH 输入框加一条档位条:一框三模式:思考 / 循环 / 对抗。思考与循环互斥切换,对抗可叠加在任一种上。
常规 | 严格 | 极致 ‖ 循环 | 对抗(思考)↔ 轻量 | 交付 | 极致 ‖ 循环亮 | 对抗(循环)。
拨档或拨开关 → 模型通过 clarify_tier / forge_level 读到 → 决定开工问多深、交付后磨几轮、要不要额外做对抗审。
demo
同框三模式:思考 / 循环 / 对抗
思考: [常规] [严格] [极致] ‖ [循环] [对抗] ← 思考 / 循环 / 对抗 三色
循环: [轻量] [交付] [极致] ‖ [循环]亮 [对抗]
一根框里三种模式,关系是「二选一 + 可叠加」:
- 思考(默认)与 循环 互斥:拨「循环」在两者之间切,前三格的语义从「问多深」变成「磨几轮」,标签与配色一起换;
- 对抗 是第三种模式,可叠加:它不改变前三格,只决定这一轮要不要额外做一轮对抗审查(思考下=动手前审方案 + 交付前审改动;循环下=每轮审改动)。与前两种任意组合,互不影响。
界面不挂悬停解释(2026-10-24 起只留按钮本体,避免一格一个 tip 打断视线);配色(2026-10-24 定版):思考 #877be3、循环 #66ae7c、对抗 #da7f7f,只在客户端 CSS 的 --dct-think/--dct-loop/--dct-counter 三个变量里定义。循环与对抗之间另有一条隔离线;对抗一旦亮起就保持红,不跟循环换色。
| 模式 | 格 | 含义 | 模型读到 |
| 思考 | 常规(值 off) | 按平时标准直接做:不锚定、不复述、不提问 | clarify_tier=off |
| 思考 | 严格(默认) | 复述 + 2 确认点 + 回滚 + 验收 + 失败分支 | clarify_tier=high |
| 思考 | 极致 | 严格之上再加反例与代价、对抗自检、对抗复审 | clarify_tier=max |
| 循环 | 轻量 | 3 轮纯自检,适合小修小补 | forge_level=lite |
| 循环 | 交付 | 5 轮,第 2 轮独立评审 + 收敛复核 | forge_level=high |
| 循环 | 极致 | 8 轮,第 2 轮起每轮独立评审 | forge_level=max |
对抗开关决定「每轮几条攻击」:常规/严格 3 条、极致 5 条;关着就是 0 条,行为与以前完全一致。
为什么对抗不做成第四格:三格表示「强度」,对抗表示「多审一遍」,两者正交;做成可叠加的开关才能和思考/循环自由组合,也不挤占格位。
状态模型(每个对话各用各的)
{
"schema": 7,
"sessions": {
"<sessionId>": {
"mode": "think" | "loop",
"level": "off" | "high" | "max",
"counter": true | false,
"owner": "tool" | "client" | null,
"updatedAt": "…"
}
}
}
- 会话键:客户端用插槽 inject 给的 sessionId,经 ?session= 传给桥;工具用 exec.agent.session.id,读不到才落 default
- clarify_tier:思考模式返回 level + counter;循环模式返回 off(不叠加锚定)+ counter
- counter = 对抗开关:{ enabled, maxAttacks, scope },密度随档位(常规/严格 3 条、极致 5 条),scope 思考为 plan+delivery、循环为 round-changes
- forge_level:思考模式返回 off;循环模式把 off/high/max 映射成 lite/high/max 与 3/5/8 轮;同样带 counter
- 每轮快照:一条用户消息 = 一轮(轮号取 agent.phase.turn)。开工第一次调工具时,把当时的设置记成本轮快照(turn{id,mode,level,counter});本轮内再点档位条只改「下轮的值」,条尾显示一个循环色小点(pending)
- 下一轮开工自动换用新值;取不到轮 id 时退回实时值(不做轮内保护,但功能不坏)
- 没单独设置过的对话,继承 default 会话(迁移自 0.6 的全局值),再没有就用内置 think/high
- 文件:$DSH_HOME/storages/calibration.json;每会话只写自己那条,切模式不会丢档位;最多保留 100 个会话(删最旧的非 default)
- 实时同步:GET /events?session=… 只推本会话;同一对话开两个窗口才互通,跨对话互不干扰;普通断线按 retry: 2000 自动重连,连接被彻底关掉(readyState=2)时客户端按 CONFIG.reconnectDelay 自己重建,最多 CONFIG.maxReconnects 次
安装
需要:DSH Desktop / DSH NEXT(带 Web 客户端插件支持的版本)。
pwsh -File install-profile.ps1 # 装进 desktop profile pwsh -File install-profile.ps1 -Uninstall # 卸载
脚本做三件事:往 profile 的 package.json 加一条 link: 依赖、把包名追加进 dsh.profile.bundles、在 profile 的 node_modules 下建链接。装完完全退出并重开 DSH(关窗口不够,要退出进程)。
验证:输入框工具行、模型选择左边出现一条「三格 + 两条隔离线 + 循环 / 对抗」的框,默认停在「严格」;点「循环」,前三格变「轻量 / 交付 / 极致」、框转绿;点「对抗」,那颗开关转红且循环模式下也保持红。再问模型「现在什么档」,它应能调 clarify_tier / forge_level 报出同值。
工作原理
| 层 | 文件 | 职责 |
| 客户端 | lib/client.js | 三格 + 循环/对抗两个可拨控件,注册进 conversation.input.right(order=10)。单文件 bundle,模块加载器只吃一个 factory,不能拆 import |
| 宿主入口 | lib/index.js | 装配层:起桥 + 注册工具 + 把 dispose 挂到 ctx.effect |
| 宿主模块 | lib/core.js / lib/state.js / lib/bridge.js / lib/tools.js | 常量与文案表 / 状态读写与迁移 / 回环桥 HTTP+SSE / 两个只读工具与轮内快照 |
| 形态 | cordis.patch.yml + package.json 的 dsh.client | 进 cordis 树,客户端产物编进启动包 |
- 桥:http://127.0.0.1:43871/state(GET/POST)与 /events(SSE);只绑回环,宿主在 43871–43880 里取第一个能绑的端口,客户端按同区间探测 /state 的 plugin 标记自动对齐,两套 DSH 同时开着也不打架
- 对抗是独立开关:开/关记在 counter 上,密度随档位(常规/严格 3 条、极致 5 条),关着就是 0 条、行为与旧版一致;两个工具都返回 counter,客户端只多一格
- 两套 DSH 同开时靠「会话归属」认桥:/state 带 knownSession,只有本实例的工具为该会话落过盘才算认识(客户端写只标 owner:"client",认领不到)——plugin 标记只能证明「是同一个插件」,分不出是哪个实例
- 认不准就不碰桥:扫一遍端口后若「两套以上、且谁都不认识本会话」,客户端不读不写任何桥、也不连 SSE,只用本地值(本地值天生属于本应用),并显示 !;期间点击先记账,认准实例后补写一次。工具只在本轮的第一次调用时落盘,所以通常几秒内就会认准
- 只有一套在跑就直接认:端口上只找到一个本插件实例时不存在「连错」的可能,不必等工具落盘
- 点一次只发一个 POST:宿主在 POST 响应里直接回带 mode/level/counter/pending/turnLocked,客户端不再补 GET(老宿主不回 pending 才退回拉一次)
- 端口发现失败后 3 秒内不重扫:一轮探空会记住时间,期间点击不再打 10 个 fetch;挂载时 pull 与 SSE 并发要端口,同一时刻只跑一轮发现
- 档名 / 悬停 / 轮次表只在宿主定义一次,客户端从 /state 的 labels、titles 读;离线兜底文案由测试锁死与宿主一致
- 三条纪律:fail-open(注册失败只是控件不出现)、不碰官方 DOM、不注入会话消息
安全边界
桥只绑 127.0.0.1,并且:
- 带 Origin 的请求只放行本机页面(127.0.0.1 / localhost / ::1),其余返回 403,且不回显 Access-Control-Allow-Origin
- 无 Origin 的请求(curl、测试、本地脚本)照常放行
- POST 必须是 application/json,挡掉 text/plain 这类绕过预检的简单请求
- 没有 token 鉴权:同机其它进程仍可写。这台机器上的信任边界就是本机,够用但不防本机恶意程序
测试
npm test # node --test,62 项,约 4 秒
npm run lint # scripts/check.mjs:lib 下所有模块 + 所有测试逐个 node --check
npm run verify # lint + test,本地 CI 就用这条
覆盖(按类,不按条数):
- 状态与迁移:默认值、模式/档位/对抗三轴合并写、非法值 400、标量与坏 JSON 400、schema 4/5 迁移 + .bak、schema 6 → 7 补 counter、坏 JSON 与未知 schema 不覆写(含「未来 schema 带旧字段」也不降级)、字段坏只保留能认的一半
- 工具投影:clarify_tier / forge_level 的档位值、pending/turnLocked、counter(开关 / 条数随档位 3 与 5 / scope 随模式)
- 桥与安全:跨站 Origin 403(读/写/预检/null/子域伪装)、本机 Origin 回显 204、text/plain 415、写盘失败 500、SSE 首帧与广播、跨站 SSE 403、端口退让与 plugin 标记、退让日志只报一次且端口正确、knownSession 只认工具写过的会话
- 界面与交互:七节点结构(3 档 + 2 隔离线 + 循环 + 对抗)、两套标签、循环格亮起、对抗恒红、只提交变化的一维、focus 重新对齐、/state 文案优先、兜底文案与宿主表逐字一致、pending 小点
- 容错与实例识别:桥不可达只探一遍且 TTL 内不重扫、老宿主缺 pending 补一次 GET、SSE 断后重建不超上限、诊断默认关、离线与待生效同显、两套实例按会话归属切端口、单实例直接认领、两套都不认领时不读不写桥且认领后补写
- 一致性守则:版本号与 CHANGELOG 同条、files 清单覆盖 lib 全部模块、文案不再出现旧名「极限」、工具描述与档位表同字、skill 表与宿主 LEVELS 同一套、对抗密度与 LEVELS 绑定、counter-review 技能 frontmatter 合规、README 边界与测试条数自校验
CI:.github/workflows/ci.yml,推上去后在 Node 22 / 24 上跑 npm run lint + npm test。本地没有网络通道时以 npm run verify 为准。
给使用者的说明
分享给不写代码的同学看:使用说明(Markdown) · 使用说明(Word)。内容:三种模式与三档怎么拨、安装三步、常见问题、卸载。
工作方式(项目内约定)
开放性作业先方案再动手(2026-10-24 定):新功能、方案设计、架构选型这类没定论的事,先把方案、取舍、代价摆出来讨论,敲定后再写代码;不要先实现再解释。已定论的修 bug、补测试、改文案不受此限。
配套技能
| 技能 | 位置 | 作用 |
| clarify-needs | skill/clarify-needs/ | 拿到思考档后怎么问:复述 / 确认点 / 设计树 / 共识摘要 |
| counter-review | skill/counter-review/ | 开了「对抗」之后怎么杠:六轴矩阵 → 攻击卡(触发条件/后果/检查方法)→ 三态收口;思考模式前后各一轮、循环模式每轮 |
| loop-forge | D:\AI\Skills\mine\loop-forge(junction 到技能目录) | 拿到循环档后怎么磨:判据 → 每轮报数 → 自动下一轮 → 自动止损 |
cmd /c mklink /J "D:\AI\DSH-NEXT\skills\loop-forge" "D:\AI\Skills\mine\loop-forge"
cmd /c mklink /J "D:\AI\DSH-NEXT\skills\clarify-needs" "%CD%\skill\clarify-needs"
cmd /c mklink /J "D:\AI\DSH-NEXT\skills\counter-review" "%CD%\skill\counter-review"
数据安全
- 读不出来不覆写:坏 JSON / 未知 schema(如未来的 schema:8)只返回默认值并标 corrupt / unsupported,原文件原样保留
- 迁移前留备份:旧的 {tier, forge} 迁移时先写 calibration.json.bak
- 原子写:临时文件 + rename,避免写到一半断电留下半截 JSON
- 写失败不谎报:磁盘不可写时 POST 返回 500(error: write failed),不返回 200
已知边界
- 端口区间全被占(43871–43880 十个都绑不上,例如三套 DSH 同开)时,控件退化为只读(虚线边框 + !):本地点击仍然换档,但不会同步到宿主,重启后按宿主里的值走
- DSH_CLARIFY_TIER_PORT 只改宿主起点,客户端按同区间探测、认 plugin 标记,两端不用手工对齐;要改区间宽度得同时改宿主与客户端的 PORT_SPAN
- 「会话归属」认桥的空窗:刚开的对话还没被工具写过时,两边都可能回 knownSession=false,这段时间控件只显示本地值(不读另一套的档位)并带 !,点击只记账不落地;本轮的第一次 clarify_tier 落盘后(最长 5 秒一轮的轮询)自动认准、补写、连 SSE
- 面板显示的是「最后一次认准后」的值:认准之前改的档,认准后以宿主值为准;要立刻用新档就在认准后再点一次
- 降级后不会自己变回来:端口全占 / 宿主没起时,控件停在只读(!);恢复靠下一次成功写入、切窗口,或 SSE 重建成功
- SSE 重建有上限(CONFIG.maxReconnects,默认 3 次、间隔 2 秒):连不上就停手,不做无限重试;重建时会顺手作废端口缓存,宿主换了端口也能重新发现
- 状态文件只有一个(storages/calibration.json):并发写按「最后落盘为准」,没有跨进程锁
- 工具返回的是调用时刻的值;中途改档要再调一次
- 循环模式不叠加思考档:需要强提问就先退回思考模式;但「对抗」在思考/循环两种强度模式下都能叠加,不冲突
- 多窗口实时同步:SSE 推送,同一对话两窗同时改动以最后落盘为准;SSE 不可用时退回「切窗口重新对齐」
- 快照是按轮的:只影响「我这一轮用什么」,不改你拨出来的值;别的对话互不影响
- 诊断默认关:启动时不再往宿主写 calibration-debug.jsonl(那个文件不轮转,会一直长)。要抓注册链路时在控制台执行 localStorage.setItem("dsh-tier-debug","1") 再刷新,用完删掉这个键
踩过的坑(别重犯)
| 坑 | 症状 | 正解 |
| 客户端 bundle 的 id 写成短名 | duplicate factory registration → web boot: 1 entry did not activate → GUI 起不来 | id 必须等于包名(含 @scope) |
| 宿主没声明 inject | cannot get property "tools" without inject,工具静默消失 | export const inject = ["tools"] |
| 两个开关写同一文件不做合并 | 切档把另一轴冲掉 | writeState 读旧值再合并 |
| 把「读不到」当成「要重置」 | 一次 GET 就把用户设置冲成默认 | 坏文件/未知 schema 只读兜底,迁移才写盘 |
卸载
1. install-profile.ps1 -Uninstall
2. 删 $DSH_HOME/storages/calibration.json
3. 重开应用
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
YokosWY/dsh-calibration-tier
简称 CT全名 DSH Calibration Tier:C 取自 calibration——把用力程度校准到任务;T…
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目