🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

思维链锚定监控 Aik358/dsh-anchored-monitor

DeepSeek 客户端v0.3.1
Aik35859 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

一句话说清:这是给 DeepSeek V4 Pro 加的一根鞭子。

35.2/100
综合分
10
GitHub 星标
274
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Aik358/dsh-anchored-monitor.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 59 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@a9i5k4/dsh-anchored-monitor @ 0.3.1
✓Node 引擎要求 >=22.19 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 22:54:14

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 53 处,展示前 42 条)
  • 发起网络请求
    lib/index.js:99
    const upstream = await fetch(monitorUrl + monitorPath + query, { signal: AbortSignal.timeout(2500) })
  • 读取本地文件
    lib/index.js:119
    parsed = JSON.parse(await readFile(configPath(), 'utf8'))
  • 发起网络请求
    lib/index.js:157
    const r = await fetch(url + '/api/health', { signal: AbortSignal.timeout(1500) })
  • 写入本地文件
    lib/index.js:170
    await mkdir(homeFile(), { recursive: true })
  • 写入本地文件
    lib/index.js:171
    await writeFile(overridesPath(), JSON.stringify(config.monitorOverrides ?? {}, null, 2), 'utf8')
  • 执行外部命令来自配置/变量
    lib/index.js:175
    monitorProc = spawn(process.execPath, [MONITOR_ENTRY, '--profile', config.profile, '--overrides', overridesPath()], {
  • 发起网络请求
    lib/index.js:211
    await fetch(config.monitorUrl + '/api/push', {
  • 发起网络请求
    lib/index.js:230
    await fetch(config.monitorUrl + '/api/push-text', {
  • 发起网络请求
    lib/index.js:339
    fetch(config.monitorUrl + '/api/sessions/' + encodeURIComponent(signal.sessionId) + '/ack', {
  • 发起网络请求
    lib/index.js:436
    const res = await fetch(config.monitorUrl + '/api/sessions', { signal: AbortSignal.timeout(2500) })
  • 读取本地文件
    lib/index.js:552
    const localRaw = await readFile(path.join(PACKAGE_ROOT, 'package.json'), 'utf8')
  • 写入本地文件
    lib/index.js:614
    await mkdir(homeFile(), { recursive: true })
  • 写入本地文件
    lib/index.js:615
    await writeFile(configPath(), JSON.stringify(next, null, 2), 'utf8')
  • 写入本地文件
    lib/index.js:667
    await mkdir(homeFile(), { recursive: true })
  • 写入本地文件
    lib/index.js:668
    await writeFile(configPath(), JSON.stringify(next, null, 2), 'utf8')
  • 读取本地文件
    lib/index.js:799
    const buf = await readFile(file)
  • 发起网络请求
    lib/client.js:287
    var res = await fetch('/api/anchored-monitor/overview' + q, { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:357
    fetch('/api/anchored-monitor/update-check', { cache: 'no-store' }).then(function (r) { return r.json() }).then(function (j) {
  • 发起网络请求
    lib/client.js:1333
    fetch('/api/anchored-monitor/intervention', {
  • 发起网络请求
    lib/client.js:1741
    var res = await fetch('/api/anchored-monitor/settings', { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:1897
    fetch('/api/anchored-monitor/settings', {
  • 发起网络请求
    lib/client.js:1970
    var res = await fetch('/api/anchored-monitor/settings', {
  • 读取本地文件
    dist/shared/paths.js:17
    if (existsSync(join(dir, 'package.json'))) {
  • 写入本地文件
    dist/shared/paths.js:42
    mkdirSync(dirname(p), { recursive: true });
  • 读取本地文件
    dist/shared/config-loader.js:24
    const schemaRaw = await readFile(join(opts.root, 'config', 'schema.json'), 'utf8');
  • 读取本地文件
    dist/shared/config-loader.js:30
    const baseRaw = await readFile(cfgPath, 'utf8');
  • 读取本地文件
    dist/shared/config-loader.js:38
    const profRaw = await readFile(profPath, 'utf8');
  • 读取本地文件
    dist/monitor/logger/experiment-log.js:17
    if (existsSync(this.path)) {
  • 读取本地文件
    dist/monitor/logger/experiment-log.js:19
    this.bytesWritten = statSync(this.path).size;
  • 写入本地文件
    dist/monitor/logger/experiment-log.js:25
    this.stream = createWriteStream(this.path, { flags: 'a' });
  • 写入本地文件
    dist/monitor/logger/experiment-log.js:44
    renameSync(this.path, this.path + '.' + Date.now());
  • 写入本地文件
    dist/monitor/logger/experiment-log.js:49
    this.stream = createWriteStream(this.path, { flags: 'a' });
  • 读取本地文件
    dist/monitor/event-source/log-tail.js:100
    if (!existsSync(this.path)) {
  • 写入本地文件
    dist/monitor/event-source/log-tail.js:102
    writeFileSync(this.path, '');
  • 读取本地文件
    dist/monitor/event-source/log-tail.js:104
    const size = statSync(this.path).size;
  • 读取本地文件
    dist/monitor/event-source/log-tail.js:143
    const size = statSync(this.path).size;
  • 读取本地文件
    dist/monitor/event-source/log-tail.js:167
    const size = statSync(this.path).size;
  • 读取本地文件
    dist/monitor/event-source/log-tail.js:171
    const text = decompressZstdFrames(readFileSync(this.path));
  • 读取本地文件
    dist/monitor/server.js:285
    const data = await readFile(join(webRoot, staticFile));
  • 发起网络请求
    dist/plugin/ipc-client.js:13
    const res = await fetch(this.baseUrl + path, {
  • 发起网络请求
    preset/anchored-monitor.mjs:55
    fetch(monitorUrl + path, {
  • 发起网络请求
    web/app.js:38
    const res = await fetch(path, opts)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 实时思维链锚定监控
  • 三档指纹检测
  • 三级干预与浮层滑阻

DeepSeek Harness 的实时思维链锚定监控与干预插件:三档(规范/混合/反应)指纹检测,L1 提示 / L2 重置 / L3 重启干预,液态玻璃网页浮层 + 滑阻条,独立监控进程带 JSONL 实验日志。

README

由 DeepSeek 最新模型翻译生成
dsh-anchored-monitor 一句话说清:这是给 DeepSeek V4 Pro 加的一根鞭子。 当模型从「We need…」/「I will…」这种高专注、高能力模式,跌落到「let me…」这种发散、低专注模式时,鞭子就抽下去——把它拉回来。 这是给 DeepSeek V4 Pro 加的一根鞭子——当它从「We need / I will」的高专注、高能力模式,跌落到「let me」的发散、低专注、低效率模式时,就抽它一鞭,让它改回去。 面向 DeepSeek Harness 的实时思维链锚定监控与干预。 盯住每个推理块的 we / let's / let me 指纹,让它待在规范区间里,轨迹一旦漂移就自动把模型拉回来。 dashboard 一句话说清它是什么 什么都不用动,它就是一个实时仪表,显示你的模型此刻思考得有多用力。 思考强度、三段状态和心电图式曲线,缩在屏幕角落——把模型的思考效率 / 能力强度实时画出来。 - 可视化优先(默认——你想干预时才干预):实时显示思考效率 / 能力强度的仪表。 - 需要鞭子时才干预:只有轨迹漂进发散的「let me」区间才抽下去——然后自动接着把任务做下去。 - 「滑动变祖器」梗皮肤:把仪表切成梁系计,运行时实时查询 DeepSeek V4 Pro 的「梁系强度」(从专注谦逊到摆烂称帝)。
展开完整文档(README 剩余 1 节)
dsh-anchored-monitor

一句话说清:这是给 DeepSeek V4 Pro 加的一根鞭子。
当模型从「We need…」/「I will…」这种高专注、高能力模式,跌落到「let me…」这种发散、低专注模式时,鞭子就抽下去——把它拉回来。
这是给 DeepSeek V4 Pro 加的一根鞭子——当它从「We need / I will」的高专注、高能力模式,跌落到「let me」的发散、低专注、低效率模式时,就抽它一鞭,让它改回去。

面向 DeepSeek Harness 的实时思维链锚定监控与干预。
盯住每个推理块的 we / let's / let me 指纹,让它待在规范区间里,轨迹一旦漂移就自动把模型拉回来。

dashboard

一句话说清它是什么

什么都不用动,它就是一个实时仪表,显示你的模型此刻思考得有多用力。 思考强度、三段状态和心电图式曲线,缩在屏幕角落——把模型的思考效率 / 能力强度实时画出来。

- 可视化优先(默认——你想干预时才干预):实时显示思考效率 / 能力强度的仪表。
- 需要鞭子时才干预:只有轨迹漂进发散的「let me」区间才抽下去——然后自动接着把任务做下去。
- 「滑动变祖器」梗皮肤:把仪表切成梁系计,运行时实时查询 DeepSeek V4 Pro 的「梁系强度」(从专注谦逊到摆烂称帝)。

打开设置页就能调每一个参数——要是改得太多,还能一键恢复默认值。

它搭配哪种模式?

你不需要强制安装 dsh-anchored-standard。

监控从不检查预设的名字。它读取每个会话的推理块(~/.dsh/sessions//events.jsonl),只按 we / let's / let me 指纹打分(规范区间 < 0.2,混合 0.2–0.5,发散 ≥ 0.5)。所以任何实现了 anchored-standard 纪律的预设——第一轮用 Minimal 人格锚定(46 字符人格 + bash/str_replace_editor),之后用集体的「we」口吻规划、不出现「let me」——都能和这个插件搭配。改过名的、衍生的预设也行:梁神模式 (Liang-god Mode)、liangshen,以及任何基于同一套锚定思路做出来的预设。L2 重置载荷完全自包含(Minimal 46 字符人格 + 双工具都随本插件自己的配置一起发布),运行时不会从别的仓库导入任何东西。
⚠️ 提醒一句:如果会话从一开始就没被锚定,它就会一直待在 react 区间,L2 也会持续触发——那是死循环,不是监控。除非你用的正是这条鞭子调校过的模型,否则把干预保持关闭(仅监控)。

什么时候打开 / 关闭干预 —— 这条鞭子是为 DeepSeek V4 Pro 0813 调校的:

- ✅ DeepSeek V4 Pro 0813 → 干预开启(推荐)。
- ❌ 其他任何模型 → 干预关闭(仅监控)—— 让它只当一块实时仪表。

插件面板里就写着这条建议:

ℹ 提示:只有 DeepSeek V4 Pro 0813 才打开干预;其他模型请关闭(仅监控)。

为什么会有这个插件

DeepSeek V4 Pro 会严重依赖首次请求给它看的东西。社区测过后果:官方 Minimal 预设(46 字符人设 + bash/str_replace_editor)锚定出集体式的「我们」轨迹,在 Project2 上拿到 99/96;而完整的 Standard 预设锚定出演员式的「让我」轨迹,只拿到 91。行为是路径锁定的:一旦锚定,再扩充工具目录最多只能扰动一个推理块——模式不会自己翻回来。

锚定类预设(dsh-anchored-standard)解决的是引导问题。这个插件解决的是锚定之后发生的事:外部因素(命令式暗示、注入的超大上下文)会把轨迹拖出规范区间,而此前没有任何东西能发现或修复这种漂移——现在有了。

它做什么

- 实时指纹识别 —— 每个推理块都会在滑动窗口内打分,看它带的是规范轨迹标记(we、let's、we'll、we need……)还是 react 标记(let me)。
- 三区间模型 —— 正是 dsh-router-standard 测出的那套量化:persona_ratio < 0.2 → spec,0.2–0.5 → mixed(不稳定的过渡区间),≥ 0.5 → react。
- 分级干预 —— 自动执行,带冷却门控,并有滞回恢复:

| 级别 | 触发条件 | 动作 |
| L1 提示 | 进入 mixed 区间 | 注入建议式提示(绝不用命令式——命令会把 we 翻成 let me) |
| L2 重置 | 进入 react 区间 | 下一个请求只带 46 字符 Minimal 人设 + bash/str_replace_editor;监控窗口与基线一并重置 |
| L3 重启 | L2 重试次数用尽 | 建议重启会话 |

- 液态玻璃 Web UI —— 侧边栏入口打开一块磨砂玻璃面板,悬浮在对话之上(可拖动 / 可缩放 / 会记住)。收起后变成一条变阻器式横条,用滑块位置显示思考强度,外加一条滚动日志跑马灯。DeepSeek 白 / 灰 / 蓝配色;深色模式用中性灰,与外壳一致。横条是固定宽度的圆角矩形(320px,随视口自适应)——尺寸不会跳动。面板头部和设置里都有 zh/en 语言切换。
- 两套皮肤 —— 默认的 Serious 变阻器条,或者 Meme 皮肤(「滑动变祖器 / Liang-o-meter」):一个 52px 的对话气泡浮在强度旋钮上方,跟着旋钮一起滑动,随着思考强度上升,在梁文锋的各种表情之间切换 —— 从专注(谦逊)到摸鱼(皇帝)—— 并随色带颜色脉动。表情图片以 base64 内嵌在客户端 bundle 里,所以永远能加载。在设置页切换(本地保存)。表情素材来自 Lichtspektrum/liang-intensity-calibrator(MIT)。
- 零配置自动启动 —— DSH 启动时,宿主插件拉起监控进程(15s 看门狗保活)。无需手动操作。
- 实时流式心电图 —— 宿主订阅 llm/stream,推送 reasoning-delta 分片(1s 节流),所以模型思考时图表和进度条就在动 —— 不是每轮结束后才动。计数是累加的,窗口聚合值始终精确。
- CoT 泄漏 / 停滞防护(0.2.9) —— 监控还会接收可见文本通道(text-delta → /api/push-text),因此能标记出仅靠推理指纹看不到的两种退化:text_leak(思考风格的文字漏进可见正文 —— 文本量大,且 let me/(we+let me) 比例高)和 streaming_stall(推理安静下来,文本却还在流)。只告警,绝不自动干预;按会话统计的 cot 计数器和 guard_triggered 事件会出现在面板 / 仪表盘里。
- 干预总开关 —— 面板标题栏里的开关可在运行时打开/关闭干预(重启后仍保留);关闭 = 只监控,不打断。面板会显示提示:仅在使用 DeepSeek V4 Pro 0813 时保持干预开启;其他模型请关闭。
- 完整设置页 —— 每个参数(窗口、词典、评分权重、区间边界、阈值、冷却时间、提示词模板、bootstrap 对、日志轮转)都能在 DSH 设置页编辑,附带说明和浮动保存栏;保存会重启监控以应用更改。图表只为已启用的触发规则画阈值线。
- 带自动继续的循环内干预 —— 宿主观察每个会话的推理,自动执行 L1/L2/L3,然后继续任务而不是停下: L1 注入建议性上下文提示(绝不用命令式);L2 取消正在运行的一轮并软重启对话(下一个请求在 46 字符的 Minimal 人设 + bash/str_replace_editor 下运行);L3 应用同样的软重启,外加重启建议。
- 实验优先 —— 每个词典条目、权重、阈值、窗口、区间边界和冷却时间都放在 YAML 里(config/.yaml,按 config/schema.json 校验)。附带 JSONL 实验日志、离线回放和网格搜索校准脚本。
- 解耦 —— 监控是独立的 Node 进程;它从不接触模型的上下文或算力。

环境要求

- Node.js ≥ 22.19
- DeepSeek Harness 0.1.0-rc.5+(用于 web 插件和预设)

安装

1) install the web plugin into your web profile (dsh CLI = pnpm forwarder)
dsh plugin --profile web add @a9i5k4/dsh-anchored-monitor

2) start the monitor process (default profile = production-safe default;
demo is only for the accelerated L1→L2→L3 demo)
npx anchored-monitor

3) restart DeepSeek Harness (host bundle) and refresh the web GUI

现在你应该能在左侧边栏底部看到 锚定监控 / Anchored Monitor。点击它打开玻璃面板;点击浮动条展开或收起。

要修改监控地址:编辑 ~/.dsh/anchored-monitor.json,或者向 POST /api/anchored-monitor/config 发送 { "monitorUrl": "http://127.0.0.1:9301" }。

快速演示

git clone https://github.com/Aik358/dsh-anchored-monitor.git
cd dsh-anchored-monitor
npm install && npm run build

npm run demo:generate # 300 synthetic reasoning blocks
npm run dev -- --profile demo # monitor + dashboard on :9301
npm run demo:feed # live-feed the blocks (watch L1→L2 cascade)

智能体侧预设(可选)

把 preset/ 复制到 ~/.dsh/.agent-presets/anchored-monitor,让 harness 智能体 把自己的推理块推送到监控,并在智能体循环内执行 L1/L2/L3 干预(搭配一个锚定预设,比如 dsh-anchored-standard,用于第一轮锚定)。

API

监控进程暴露以下接口(默认 http://127.0.0.1:9301):

| 方法 | 路径 | 说明 |
| GET | /api/overview | 一次调用返回会话 + 选中快照 + 尾部事件 |
| GET | /api/sessions | 会话摘要 |
| GET | /api/sessions/:id | 完整快照(历史 / 干预 / 基线) |
| GET | /api/events?sessionId=&limit= | 实验 JSONL 的尾部 |
| POST | /api/push | 推送推理块 {sessionId, text, sequence?, timestamp?} |
| POST | /api/push-text | 推送可见文本块 {sessionId, text, sequence?, timestamp?}(CoT 防护) |
| POST | /api/sessions/:id/ack | 确认一次干预 |
| POST | /api/sessions/:id/reset | 触发手动 L2 重置 |
| GET | /api/stream | SSE 事件流 |

web 插件通过 /api/anchored-monitor/ 代理这些接口(仅限回环)。

脚本

| 命令 | 说明 |
| npm run demo:generate | 生成合成会话 JSONL(带标签,用于校准) |
| npm run demo:feed | 把推理块实时喂给运行中的监控 |
| npm run replay -- --file x.jsonl | 离线回放并输出摘要报告 |
| npm run calibrate -- --file x.jsonl | 网格搜索窗口 / 权重 / 阈值 |
| npm run preview:build | 把仪表盘快照成独立 HTML |

配置

完整参数参考见 docs/experiment-params.md。全部用 YAML——没有任何硬编码调参。

常见问题

干预之后会发生什么?对话会停下来吗? 不会。每次干预都会自动让任务继续:L1 注入一条提示,下一轮接着跑;L2 停掉正在跑的轮次(软重启),然后立刻重新进入上下文——下一个请求会在 Minimal 人格 + bootstrap 组合下继续任务;L3 做法相同,另外加上重启建议。

为什么图表感觉卡顿 / 不动了? 0.2.0 之前,数据只在每轮结束时到达一次。现在宿主每约 1s 就把 reasoning-delta 分块流式推给监控器,所以模型思考时曲线就在动。

怎么关掉干预? 用面板标题栏的开关(会持久化),或者在设置里设 intervention.enabled: false——监控照常运行,干预停止。

L2 会截断模型的上下文吗? 不会。L2 只把下一个请求的人格段落替换成 46 字符的 Minimal 句子,并把可见工具目录收窄到 bootstrap 组合。所有对话历史都保留;监控器只重置自己的指纹统计(对模型不可见)。plan-mode 和其他所有段落都保留,因为丢掉它们会导致重新探索失忆(由 dsh-router-standard 测量)。

为什么过渡带被当作警告? 混合带(0.2–0.5)是训练分布的空隙:实测分数比两个稳定带都低*。进入它就触发 L1 提示;进入 react 带则升级。

运行它安全吗? 监控器对模型是只读的:它消费推理文本,发送干预信号。所有 HTTP 路由都只走回环。推理文本可能敏感——实验日志默认存在本地;在 experiment_log 里轮换 / 关闭它。

插件作者须知(扩展前必读)

流式瀑布规则 —— llm/stream 是流式透传瀑布:链上靠前的监听器会迭代靠后监听器的返回值。因此:

1. 生产方:llm/stream 监听器必须是普通函数,返回异步生成器。绝不要声明成 async——生成器会被包进 Promise,上游的 for await 消费者会崩,报 next(...) is not a function or its return value is not async iterable。
2. 消费方:一律 for await (const chunk of await next())——先 await,再迭代;不管下游返回什么都安全。
3. agent/pre-step / system-prompt/assemble 是传值事件;那里用 async + await next() 才对。

违反这条会让每一个模型请求都挂掉,且日志里零事件——如果打包顺序调整或新增插件后所有会话突然失败,先查 llm/stream 链。

单一干预执行器规则 —— L1/L2/L3 必须只有一个执行器。Web 插件(宿主那一半)负责干预,也是默认执行器;智能体预设(preset/)自带 handleInterventions: false,只推送推理。两个都开会导致重复注册 agent/pre-step / system-prompt/assemble,并且触发两次 L2 重置。

致谢

本插件建立在以下社区项目的实测结果之上(已浅克隆到 ../references 供审计):

- xiaobright/dsh-anchored-standard —— 两阶段锚定预设(bootstrap 配对、晋升门控、晋升后常驻集)
- ruler770525/dsh-anchored-flash —— 指纹计数(we/let's/let me)以及 E1/E1.5 提示词措辞实验
- yjh051108/dsh-router-standard —— 双吸引子论文与三档量化(bandOf)
- KDB-Wind/dsh-minimal-anchored —— 最小工具锚定替代方案
- Lichtspektrum/liang-intensity-calibrator —— 驱动「滑动变祖器」皮肤的梗图表情帧(MIT)
- deepseek-ai/deepseek-harness —— 本插件所扩展的宿主框架

许可证

MIT © 2026 Aik358
预览分享卡片长什么样 ↓Aik358/dsh-anchored-monitor
分享 · DeepSeek Harness Hub
Aik358/dsh-anchored-monitor

一句话说清:这是给 DeepSeek V4 Pro 加的一根鞭子。

这是你的仓库?认领条目

回到顶部