DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Capability Aware — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
C

dsh-capability-aware

Capability Aware

DSH self-capability awareness plugin: automatically scans and maintains a capability inventory (plugins/skills/memories/connectors/automations/tools/local environment/hardware/software), quickly retrieves matching capabilities and invocation methods, and provides guidance to fill in missing capabili

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:edisonzerolam/dsh-capability-aware#6c40395f278fa66121912153c647e0919dde7bd7
READMECompatibilityVersions

Description

DSH self-capability awareness plugin: automatically scans and maintains a capability inventory (plugins/skills/memories/connectors/automations/tools/local environment/hardware/software), quickly retrieves matching capabilities and invocation methods, and provides guidance to fill in missing capabilities; v0.8.0 adds a session error ledger that records errors from each session and aggregates them by plugin/skill/object/responsible party and other dimensions for self-repair and self-evolution; installation automatically provides the capability-lookup skill and a system prompt section without modifying any user files.

Compatibility and provenance

Capability Aware is published as dsh-capability-aware and currently resolves to version 0.8.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/11/2026

Versions

0.8.0stable
10/11/2026
0.7.1stable
10/11/2026
0.7.0stable
10/9/2026
Show 5 more versionsCollapse versions
0.6.1stable
10/9/2026
0.6.0stable
10/7/2026
0.5.1stable
10/7/2026
0.5.0stable
10/6/2026
0.4.0stable
10/5/2026

Related plugins

Loading related plugins…

Latest
0.8.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
Weekly downloads
0
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in memory-context.

Hindsight Coding Agents@vectorize-io/hindsight-coding-agentsReflect-only Hindsight long-term memory for coding agents (harness-pluggable: opencode, …), with automatic background ingestion (no setup CLI).Memsearch Dsh@zilliz/memsearch-dshMemSearch plugin for DeepSeek Harness: shared markdown memory across agents, with capture, pre-step context injection, memory-recall skill, and a skill-candidate review panel.Memory@furongjun1999/dsh-memoryLingshu (Lingshu·líng shū) DeepSeek Harness plugin: a complete brain—long-term memory/knowledge flywheel/self-awareness/recursive reflection integrated with DSH, with conversations automatically distilled into the md_cg cognitive graph (md documents)Archive Manager@michengai/dsh-archive-manager归档、恢复、收藏和永久删除会话,并诊断损坏的会话日志。 · Archive, restore, favorite, and permanently delete sessions, and diagnose damaged session logs.

README

dsh-capability-aware · DSH 自我能力感知插件

定位(v4.2,用户裁决):本插件是快速索引底稿 + 兜底——凡 DSH 已有对应系统的能力领域, 权威归已有系统,本插件不重复造轮子,只提供统一台账、变更审计与本机环境事实;权威系统不可用时才兜底。

能力领域权威入口(用它)本插件角色
技能路由/打分/学习重排skill-use-router(skill_index.py query)索引底稿(358 条,含子技能/层级/禁用态)
记忆条目检索dsh-mneme(memory_search)只登记 memory/ 主题文件(文件粒度)
MCP 连接器状态/工具清单宿主(mcp_connector_status)连接与工具快照底稿
定时任务增删改查宿主(automation_list)名称/调度底稿
知识页检索Hindsight仅数据目录存在性
本机硬件/软件/环境事实本插件即权威(DSH 无等价物)唯一来源

每条条目都带 authority(权威归属:system/how/note)与 bounds(适用范围/限制/前置),查询答案里直接透出。 本机环境速查入口见技能 capability-lookup。

自供给(装上即得)

  • 常驻指令面(v0.7.0,默认开)★ 关键:用宿主公开的 ctx.systemPrompt.section() 往系统提示词注入一段行为规约——「任务依赖本机环境 / 不确定本机有无该能力 / 怀疑能力已消失时,起手先调 capability_query」,附权威归属与 CLI 兜底。完全不改用户任何文件(不写 AGENTS.md),纯运行时贡献,卸载即消失,任何机器装上就复现;v0.8.0 起追加第二段同款规约(位次 2951),指向错误账本工具 error_ledger_query;
  • 技能入口(默认开):安装后首次启动自动把 capability-lookup 技能写入 ~/.dsh/skills/(幂等带版本戳),harness 的技能目录即出现本能力,无需手工配置;
  • AGENTS.md 指针(默认关闭):向 ~/.dsh/AGENTS.md 注入带管理标记的块——工具优先:起手直接调 capability_query 工具(不用开终端、不用记路径),CLI 只作兜底/台账/审计。改用户规则文件须显式配置 provisionAgentsPointer: true(在宿主 profile 的 cordis.patch.yml 覆盖即可),幂等维护、插件升级自动刷新。 实测依据:一天运行日志显示后台扫描 103 次/0 错误,但 harness 主动调用 0 次——缺的就是这个必经触发点。

v0.8.0(2026-10-11)· 会话错误账本并入(用户裁决:「做进 dsh-capability-aware 里面,不是新开一个插件」) 为什么并入:本插件的定位原则④是「其他系统出问题我兜底」——「本机有什么能力」与「什么坏了 / 缺什么」 是同一问题的两面。做成独立插件会让「能力清单」与「能力失效史」分家,agent 得记住两个工具、两份清单。 能力:实时订阅 session/event 捕获每个会话的报错(工具失败 / LLM 重试 / 回合失败 / 中断 / 插件装载异常), 历史 1.2 GB 会话日志一次性回填(1821 文件 / 11.7 万条 / 22.7 秒),按 错误码 / 插件 / 技能 / 对象 / 责任方 / 工具 / 供应商 / 模型 / 类别 / 工作目录 十个切面聚合。 关键设计(由真机数据驱动):owner 是一等切面——实测本机错误最大来源是模型路由与配额 (RATE_LIMIT 2790 + SERVER 1090 + TIMEOUT 430 ≈ provider 5352 条),不是本机代码缺陷; 因此自修复候选只收 owner=local,供应商类错误一律不列——否则会去「修」不该修的东西。 本机真实可修的第一大项是 edit 工具误用(FS_EDIT_NOT_FOUND 773 + old_string/new_string must differ 308

  • FS_NOT_OBSERVED 594 ≈ 700 条),全部围绕「先 read 再 edit」这条纪律。 三面齐备:常驻指令面(capability-aware:error-index,位次 2951)+ agent 工具面(error_ledger_query,五视图)+ RPC 面(/api/capability-aware/ledger/* 七条)+ CLI(node cap.mjs ledger <子命令>)。 只读承诺:只读会话日志,不删任何文件(源码级断言 T48 锁死);只给候选与证据,不做自动改动。 测试:capability 40 项 + ledger 55 项 = 95/95 全绿。

v0.7.0(2026-10-10)· 常驻指令面:让「全新安装」达到应有水平 问题(用户提出):技能入口会自动出现,但 ~/.dsh/AGENTS.md 不会被动——意味着别的机器装了这个插件, 达不到本机水平;而 AGENTS.md 路线必须改用户文件,公共仓库不能替安装者默认改,只能靠本机 profile 覆盖, 不可移植。根因:常驻指令面里没有本插件的任何痕迹,技能要先被列出/被 router 命中才可能用上, 而「环境类任务起手先查能力」这条行为规约根本没进上下文。 解法:改用宿主官方公开的提示词注入点 ctx.systemPrompt.section({name, order, text}) (权威写法对照 @deepseek-ai/dsh-mcp-resources/lib/index.js:118-130)。 位次取 2950,经与宿主 SECTION_ORDERS 全表交叉核对无碰撞(落在 TOOL_REPORT:2900 与 TOOL_COMPUTER_USE:3000 空档)。 两个坑已避:① 用 ctx.inject(['systemPrompt']) 软注入,硬声明 export const inject 会让极简 profile 整体 pending; ② 注册用 scoped.effect(...) 包裹,否则热重载在同层重复注册会 throw(宿主 section() 明确如此规定)。 实证(非纸面):真实 cordis Context + 真实 SystemPrompt 服务下 section() 接受注册、renderPrompt() 输出含本段正文; 隔离真空 DSH_CAP_HOME 跑真实 apply() → promptSection 段注册、技能 v0.7.0 落盘、AGENTS.md 未被创建。 回归测试 T28–T30,全套 36/36 绿。

v0.6.1(2026-10-09)· 缺陷 #7:监听过宽致写放大(运行体检取证) 反应式监听原本裸听整个 ~/.dsh/storages 与 ~/.dsh/memory。实测:~/.dsh/storages/whale.json (114 MB,DeepTrace 插件的 store)被别的插件每 30 秒重写一次,memory.db-wal 亦持续写入 → 每 30 秒触发一次全量扫描+落盘:10 分钟精确窗口 10 次写入(9 次 whale + 1 次 wal) = 1438 次/天、约 1.66 GB/天纯写放大,而两次扫描的条目 md5 完全相同(根本没变)。 修法:每个监听根加文件名白名单——storages 只认 mcp_connector.json / dsh_automation.json (lib/scanner.js:271 与 :334 真正读的两个文件),memory 只认 README.md 与主题 markdown, plugins 只认 .yml/.yaml/.js/.mjs/.json;拿不到文件名时仍放行(宁可多扫一次,不漏真实变更)。 同版把供给文本(AGENTS 块 + capability-lookup 技能正文)统一改为工具优先。 回归测试 T24–T27(含真实 fs.watch 行为级验证),全套 33/33 绿。

自动扫描并维护 DSH 的能力清单(插件 / 技能 / 记忆 / 连接器 / 自动化 / CLI 工具 / 本机环境 / 硬件 / 软件), 按任务意图快速匹配能力及调用方式,能力缺失时给出针对性补足引导。

v2(2026-10-05):按全网调研修正——新增 env 本机环境能力类型与触发词自动提取、 检索升级 BM25-lite(IDF 加权)、负触发降权(已归档/勿用技能)、doctor 健康报告、 每日 06:30 定时巡检(DSH automation)。依据: MCP 官方 Client Best Practices(Progressive Tool Discovery:Catalog→Inspect→Execute 三层、关键词 BM25 对描述型名称简单有效、list_changed 重索引)、 Claude Skills 官方(description 即触发器:须同时说「做什么+何时用」)、 SBoM drift 定义(声明 vs 运行态偏差→doctor 口径)。

v3(2026-10-05):① MCP 探针实证修正(路径 → mcp_connector.json,工具快照 + 连接器市场目录中文 tags 并入触发面);② 新增 hardware/software 类型(WMI 单次采集 排除虚拟显卡、卸载注册表三视图 + dev 工具链带版本);③ 检索四修正(人工别名层 cap.mjs alias / desc 封顶 3 token / 单字 CJK 边界守卫 / 事实型降权);④ ambiguous 补 top 字段;⑤ IDF 现算语料含 aliases。依据:docs/research-2026-10-05.md (MCP 官方 registry/server.json/低频拉取 调研蒸馏)。

v5 / v0.6.0(2026-10-07):基于真实调用取证的六缺陷修复——不是纸面推演,全部由 36 小时会话日志里挖出的真实失败案例驱动(详见 docs/research-2026-10-05.md)。

#缺陷真实事故修法
1人工数据被扫描抹平manual.aliases 被 normalizeEntry 的空默认值覆盖 → 全清单 563 条带人工数据者 0;灌入 AKShare 别名后排名 12 → 1mergeManual() 逐字段「非空者胜」
2受限技能被当废弃技能disable-model-invocation(权限标志)与「已归档/勿用」被合并成同一 negative → wechat-send-file 连精确点名都返回 no_match拆成 disabled / negative 两档语义:前者可检索、点名可用、带告警;后者才强降权
3缺失被伪装成有候选单字 CJK 几乎命中每条中文描述 → 「文生图」6 条并列 12.61 的噪声地板desc 命中禁单字;新增 queryStrength(cov/exact/aliasHit)判据,弱命中保留候选 + 附加缺失提示(不误杀真有能力的查询)
4agent 走的是退化路径tool.js 漏传 idf → 退化为常数权重,实测「查A股」全候选并列 16 分;此前所有 CLI 验证都没覆盖 agent 真实路径match() 缺省 idf 自愈 + tool.js 显式传参(双保险)
A同名条目互相覆盖清单存在 18 组同名条目(bili-daily 顶层 vs web-intel 子技能、skill-creator 3 条)→ (type,name) 键致 diff 失真entryKey() 带上 source
B路由器覆盖词压过专精技能visual-studio(4 子技能路由器)靠 字幕 触发词压过真正的字幕技能父子竞争让位(父 ×0.7)+ 单字拉丁权重 0.5(治「抓B站」里单字 b 贡献 +43.47)

数据层(新增 lib/seed.js):预置人工别名随插件分发,首次扫描即注入且跨扫描存活—— 新装机器装上就修好词表鸿沟,无需手工 cap.mjs alias。当前覆盖三处已取证缺口: AKShare(A股/沪深/行情数据…)、wechat-send-file(发我微信/发到微信…)、 imagegen-frontend-web(文生图/图像生成…,仅解决可检索性,其边界由条目自身说明)。 语义为:用户自己加的别名永不被覆盖。

三个核心功能

功能实现入口
能力自感知10 类探针扫描能力地形 → fingerprint 级 diff → JSON 快照落盘cap.mjs scan / boot 自动扫描 / 每日巡检
能力快速检索中英混排分词 + BM25-lite IDF + 触发词/人工别名直配 + 负触发降权 + 事实型降权 → 置信度排序cap.mjs query "<任务>"
缺失引导no_match / stale 条目 → 按类型给出补足动作 + 验证命令(硬件=替代方案、软件=安装引导)cap.mjs stale / cap.mjs guide
错误账本(v0.8.0)实时订阅会话事件 + 历史日志回填 → 十切面聚合 → 自修复候选(只收 owner=local)error_ledger_query 工具 / cap.mjs ledger <子命令>

错误账本(v0.8.0)

解决什么:同一类报错在几十个会话里反复出现,却没人知道它出现过多少次、在哪台机器、哪个工具上—— 于是每次都从零排查。账本把「报错」变成可聚合、可追溯、可优先排序的证据。

记录哪些(错误事件面,全部经源码取证):

事件形状说明
tool/resultdata.error = {name, code}工具失败;工具名靠 callId ↔ tool/call 关联
llm/retrydata.failure = {message, code} + provider模型层失败(限流/断流/超时);model 靠 request/header 富化
turn/enddata.reason.kind === 'error'回合级失败
assistant/messageinterrupted === true用户中断(可关)
loader/partial-disposeentry 异常卸载插件装载期错误(插件切面)
agent/error{turn, step, error}回合内抛错(罕见但最权威)

十个切面:code / plugin / skill / object / owner / tool / provider / model / category / cwd。 其中 object 是从错误正文里抽出的来源对象(文件路径 / URL / 命令),owner 是责任方: local(本机可修)/ provider(供应商侧)/ external(网络)/ user(用户中断)/ unknown。

五视图工具 error_ledger_query({ view, key, since, limit }):

view用途
recent(默认)最近错误明细
facets十切面聚合;key 下钻单切面
repair自修复候选(只收 owner=local,按 次数×会话数 排序,附样本与建议)
search按关键词检索原文
report概览(时间跨度 / 责任方分布 / Top 码 / Top 对象 / Top 插件技能 / 按天分布)

CLI 等价入口(人的通道;agent 走工具):

node cap.mjs ledger backfill [--force] [--workspace=] [--max-files=N] [--concurrency=N]
node cap.mjs ledger stats                 # 总量 / 时间跨度 / 责任方分布 / 按天
node cap.mjs ledger recent [N]            # 最近 N 条明细
node cap.mjs ledger facets [切面] [--top=K] [--since=7d]
node cap.mjs ledger repair [--min=5]      # 自修复候选(默认 ≥3 次)
node cap.mjs ledger search "<词>" [N]
node cap.mjs ledger report                # 人类可读概览
node cap.mjs ledger export [--out=f.json]

数据布局:~/.dsh/data/capability-aware/ledger/(events.v1.jsonl 追加式 + meta.v1.json 回填水位线)。 与能力清单同属一个插件数据目录——一个插件一个数据目录(topic-trail 先例),清单在 ../capabilities.json。

诚实边界:① 只读,绝不删除或修改任何会话日志;② 只给候选与证据,不做自动改动(自修复是人的决定); ③ 供应商/配额类错误不进自修复候选——那是换路由/退避的事,不是「修代码」;④ 正文截断 1200 字符 (账本不是上下文仓库,只存定位所需的证据);⑤ capture:false 时完全不订阅运行期事件(不留钩子)。

能力地形(探针覆盖)

  • skill:~/.dsh/skills/*/SKILL.md + ~/.agents/skills/*/SKILL.md(junction 按 realpath 去重,.bak*/_snapshot/.incoming 排除)
  • plugin:~/.dsh/plugins/*/package.json(声明 dsh.bundle.patch 才算宿主插件)
  • memory:~/.dsh/memory/README.md §1 表格登记的主题文件(索引↔文件一一对应口径)
  • mcp(v3 实证修正):~/.dsh/storages/mcp_connector.json 的 tables.connections; 触发面三源合并——连接器市场目录(tables.catalog.remote.connectors 中文 summary/tags)+ SKILL 式描述提取 + tables.tool_catalog 工具快照(工具名进 triggers、invoke.example 给可直接调用的 mcp__<server>__<tool>);enabled=false 标 disabled(停用≠缺失)
  • automation:~/.dsh/storages/dsh_automation.json 的 tables.definitions(第三方自动化系统口径)
  • knowledge:Hindsight 数据目录存在性
  • tool:CLI 白名单(默认 python/node/git/rg/dsh,可用 tools 配置扩展)
  • env(v2):本机环境能力,三类来源——① web-intel channel-notes.md 通道边界表逐条 (「失败特征 → 正确通道 → 验证命令」,抓取/搜索前先走对通道);② web-intel 自进化状态 (.state 有记录 = 有通道纠偏能力);③ 本机事实探针(控制台 cp936 编码、本地代理 7897、 playwright chromium 路径、技能双根——实测存在才登记,事实性条目非规则)
  • hardware(v3):WMI 单次采集 CPU/内存/实体 GPU(排除 Todesk/OrayIdd 等虚拟显示适配器)/磁盘/OS, 指纹日级(硬件不频繁变化);GPU 加速类任务先核此条目再查官方支持矩阵
  • software(v3):dev 工具链(python/node/git/uv/pnpm/gh/docker/ffmpeg/yt-dlp,带精确版本号)
    • 卸载注册表三视图合并的已安装软件清单(过滤 SystemComponent/KB 噪声,默认上限 200 条)

安装与启用

# 装进 desktop profile(本机 profile 名)
dsh plugin --profile desktop add "file:D:/Agent/CodeLib/dsh-capability-aware"
# 首次安装即刻生效(宿主监听 profile 变更并立即重新 apply,实测装完 4 秒 apply() 已运行),
# 不必重启。启动后 3 秒(scanDelayMs)自动完成首次全量扫描,
# 清单落盘:~/.dsh/data/capability-aware/capabilities.json

⚠ 生效时机(2026-10-11 实测修正,此前 README 的「必须重启」说法有误)

  • 首次安装:宿主监听 profile 变更后立即重新 apply,无需重启。
  • 更新已装插件的代码:remove + add 只刷新磁盘副本并重新 apply,跑不了新代码。模块走 import(),Node 的 ESM 缓存按解析后的 URL 键控,同一路径在进程内只求值一次。
  • 实测(MARKER 实验):把版本改成 0.7.1-MARKER 并重装,安装副本磁盘上确为 MARKER、uptimeMs 归零证明重新 apply 了,但活体仍报旧版本号 —— 跑的是首次加载时缓存的模块。
  • 所以换新代码必须重启 DSH Desktop(托盘菜单「重启」,或 POST /api/desktop/restart)。
  • 判断活体到底在跑哪一版:看 ~/.dsh/skills/capability-lookup/SKILL.md 的版本戳(幂等写,内容变才刷新),或 GET /api/capability-aware/doctor。

建议先在隔离 profile 验证(不碰主 profile、不占端口): dsh plugin --profile cap-probe add "file:D:/Agent/CodeLib/dsh-capability-aware" → dsh --profile cap-probe --no-open --port 0 → 观察数据文件落盘 → 清理 profile。

⚠ 依赖纪律:本插件零运行时依赖(不 import 任何宿主包),无 peerDependencies 遮蔽风险;重装/升级不影响其他插件。

使用

node cap.mjs scan                # 全量扫描 + 落盘 + 打印 diff(新增/消失/变更)
node cap.mjs list [类型]          # 列清单(plugin|skill|memory|mcp|automation|tool|env|hardware|software)
node cap.mjs query "<任务描述>"   # 匹配能力 + 调用方式;默认摘要档,--detail=full 吐全条目
node cap.mjs doctor              # 能力健康报告(扫描年龄/探针错误/陈旧条目/负触发/检索自检/IDF 健康)
node cap.mjs stale               # 与上次快照 diff,报告已消失的能力(不落盘)
node cap.mjs guide "<能力名>" [类型]  # 对指定缺失能力生成补足引导
node cap.mjs alias "<条目名>" <别名…>  # 灌人工别名(检索词表鸿沟的正解,如 A股→AKShare);clear 清空

定期巡检(已建 DSH automation automation_8fa49ea2-…:每日 06:30 Asia/Shanghai, 全新会话执行 scan + doctor,removed/warn/error 逐条汇报、不自动修复)。 重建同款:automation_create(kind=daily, time=06:30, prompt=上述巡检流程)。

环境变量:DSH_CAP_DSH_HOME 重定向扫描根(多 profile / 测试);DSH_CAP_FILE 重定向清单文件。

Web/RPC 面(/capability-aware/query|list|scan|guide)按最小赌注接入宿主 ctx.connection.rpc;若宿主 RPC API 形态变化,CLI 通路不受影响(核心逻辑零依赖宿主)。

能力条目数据结构

{
  "v": 1,                       // 条目 schema 版本
  "name": "web-intel",
  "type": "skill",              // plugin|skill|mcp|memory|knowledge|automation|tool|env|hardware|software
  "description": "网络情报超级技能——…(≤500 字符)",
  "triggers": [],               // 触发词(小写规范化;检索主匹配面;MCP 条目含市场目录 tags + 工具名)
  "negative": false,            // 负触发(已归档/勿用):匹配强降权 + 告警
  "invoke": {                   // 调用方式
    "kind": "auto-route",       // tool|cli|auto-route|mcp|manual
    "how": "skill-use-router query \"web-intel\"",
    "example": "/skill web-intel"
  },
  "guidance": null,             // 缺失时自定义引导(覆盖按类型的缺省)
  "source": "skills:web-intel", // 产出探针
  "fingerprint": "e70a10e74c609c4b:2026-10-04T…", // 变更检测指纹(内容 hash + mtime/版本/日级)
  "disabled": false,            // 仅 mcp:enabled=false 时为 true(停用≠缺失)
  "manual": {                   // 人工字段:scan 永不覆盖
    "aliases": [],              // 人工别名(cap.mjs alias 灌入;触发面并入 + 整词覆盖强加分)
    "notes": "", "hidden": false, "priority": 0
  }
}

边界情况处理

情形行为
清单为空 / 未初始化query 返回 empty_registry + 引导先跑 scan(exit 2)
用户需求模糊无命中 → 按类型词表猜测(guessType)+ 给通用补足口径
匹配到多个候选置信度并列或 ≥0.75 接近 → ambiguous + clarifications + top(最高分仍可直接用)
技能已归档/勿用负触发:匹配强降权 + warnings 告警(v2,防错路由)
能力被移除下次 scan 的 diff.removed 捕获 → guideStale 按类型给针对性引导;每日巡检兜底
单探针失败不影响其他探针,失败计入 meta.lastScanProbeErrors,doctor 列出
弱匹配噪声minScore(默认 4)+ IDF 降权泛化词;manual.priority 人工加权;hidden 屏蔽
索引假健康doctor 检索自检:样本查询必须命中,防「扫描成功但匹配坏了」
检索词表鸿沟(v3)同义词不字面匹配(A股↔股票)→ cap.mjs alias 灌人工别名,整词覆盖强加分
硬件缺失(v3)引导给替代方案(云端/远程/绕开依赖),不瞎建议升级硬件
MCP 连接器停用disabled: true 登记(停用≠缺失),引导指向连接器重连而非重装
事实型 vs 能力型竞速env/hardware/software 命中 ×0.85:任务意图优先路由到能力型条目

测试

npm test   # node --test test/capability.test.mjs test/ledger.test.mjs —— 95 项(40 + 55)
# 注意:本机 node --test test/ 目录形态会报 MODULE_NOT_FOUND,须指文件。

覆盖:探针映射先验(≥1 命中才信整批)、落盘幂等、验收 A(匹配+调用方式)、 验收 B(移除检测+针对性引导)、空清单/空查询/无命中、多候选澄清、类型猜测、schema 校验、 v3 增补(MCP 真实结构探针/虚拟显卡排除/注册表解析噪声过滤/硬件软件检索与引导)、 v5 六缺陷回归 T15–T23(mergeManual 别名存活 / 端到端灌别名→scan→存活 / disabled≠negative / queryStrength 真命中 vs 噪声榜首 / Bug4 idf 自愈 + 源码断言 / entryKey 同名不同源 / 父子竞争让位 / 预置别名幂等且不覆盖用户别名 / 弱命中保留候选)、 v0.6.1 缺陷 #7 回归 T24–T27(监听根 accept 白名单源码级断言 + 真实 fs.watch 行为级验证 whale.json 被挡而 mcp_connector.json 放行 / 工具优先文案断言 / 版本戳一致)、 v0.7.0 常驻指令面回归 T28–T30(promptSectionText 含行为规约/工具名/权威归属且工具优先; mountPromptSection 软注入 ['systemPrompt'] + order 有限且落 2900..3000 空档 + text 函数形态 + effect 包裹 + 可关闭;index.js 接线且 promptSection 默认开启、仍不硬声明 inject、 AGENTS 指针仍默认关闭)、 v0.8.0 账本并入回归 T31–T34(源码级接线 + 装配级真挂载 + ledger:false 完全关断 + lib/ledger/index.js 只导出 mountLedger 不导出 apply,防双份 RPC 路由)。

test/ledger.test.mjs(55 项)另覆盖:多帧 zstd 解码与 torn 帧、分类学与责任方判定、 对象抽取边界(含空格路径 / Unix 路径至少两级 / 英文连接词截断)、归因状态机(callId 关联、 污染工具名拒绝、技能归因、provider/model 富化、callId 表软上限)、存储与原子写、 切面聚合与自修复候选(含「桶键不被 record.code 覆写」的回归)、工具五视图、 历史回填与实时水位线、常驻指令面、源码级只读断言、mountLedger 端到端含真实 RPC handler 调用。

已知边界(未验证 / 待做)

  • RPC 路由面未在真实宿主验证过 RPC 签名(boot 扫描 + CLI 已实证);接 GUI 面板时再验。
  • software 注册表探针依赖 PowerShell;非 Windows 环境该探针报错并计入 probeErrors(其余探针不受影响)。
  • knowledge 探针只做数据目录存在性,不做内容断言。
  • 检索仍是 keyword 层:同义词鸿沟靠预置别名(lib/seed.js)+ alias 人工策展;预置集只收 有真实取证支撑的缺口,不做无差别铺词。>1000 条或别名维护成本上升时再评估 embedding 路线。
  • queryStrength 是附加提示而非排序信号(设计取舍:宁可多一句提示,也不把真有能力的查询误判为缺失); 最坏情况是提示多余,不会丢候选。
  • 预置别名按条目 name(+可选 type)匹配;同名条目(如 imagegen-frontend-web 有两条) 会同时命中,这是刻意的(同名即同能力语义)。
  • v0.6.1 已修缺陷 #7(监听过宽 → 写放大):~/.dsh/storages 与 ~/.dsh/memory 改为文件名白名单 监听。实测修复前 ~/.dsh/storages/whale.json(114 MB,别的插件每 30 秒重写)会触发 1438 次/天扫描+落盘、约 1.66 GB/天纯写入,而清单条目 md5 根本没变。修复后噪声文件不再触发扫描; 代价是「拿不到文件名时仍放行」——宁可多扫一次,不可漏掉真实变更。
  • 仍未做(有意的权衡):applyScan 落盘守卫(条目指纹未变则跳过写盘)未实施——完全不写盘会让 meta.lastScanAt 老化并触发 lib/doctor.js:29-38 的 STALE_SCAN(warn,阈值 24h)误报, 需要「内容不变但仅刷新扫描时间」的轻量策略。白名单已消掉 90% 噪声,暂不引入这个复杂度。
  • v0.7.0 常驻指令面用的是宿主 systemPrompt.section(),位次 2950(TOOL_REPORT:2900 与 TOOL_COMPUTER_USE:3000 之间空档)。该位次若与将来新增的宿主段冲突,宿主会在同层重复注册时 抛错(可见、不静默);届时改 lib/prompt-section.js 的 SECTION_ORDER 即可。 本段是常驻的,会占用每轮少量上下文(正文约 460 字符);不想要可在 profile 侧设 promptSection: false。
  • 与本插件无关的顺带发现(未处理):~/.dsh/storages 下有 23 个 .*.tmp 共约 722 MB, 内容为 {"unit":{"name":"whale",...}},疑为 whale 插件原子写残留,未删除(删前须核实引用)。
并集

测试 20 → 29 全绿(新增 T15–T23 逐条锁死上述修复,含源码级断言防回归)。