采集脱敏证据并离线定位推理服务故障根因
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiciyang/inference-diagnose该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 56 处,展示前 50 条)
- 读取本地文件src/engine/loop-controller.js:113
if (!existsSync(machinePath)) { - 读取本地文件src/engine/loop-controller.js:116
const m = parse(readFileSync(machinePath, 'utf8')) - 读取本地文件src/governance/audit.js:243
const stream = createReadStream(path, { highWaterMark: 4 * 1024 * 1024 }) - 读取本地文件src/primitives/abstraction-layer.js:36
if (!existsSync(p)) continue - 读取本地文件src/primitives/assets-hash.js:39
if (!existsSync(dir)) return - 读取本地文件src/primitives/assets-hash.js:40
for (const name of readdirSync(dir)) { - 读取本地文件src/primitives/assets-hash.js:44
st = statSync(p) - 读取本地文件src/primitives/assets-hash.js:68
h.update(readFileSync(p)) - 读取本地文件src/primitives/assets-hotloader.js:42
buf = readFileSync(f.path) - 读取本地文件src/primitives/consistency-rules.js:32
if (!existsSync(p)) { - 读取本地文件src/primitives/consistency-rules.js:38
doc = parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/consistency-rules.js:244
if (!existsSync(p)) { - 读取本地文件src/primitives/consistency-rules.js:256
doc = JSON.parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/desensitizer.js:21
if (!existsSync(dir)) return rulesUnavailable(`缺少目录 ${RULES_DIR}/`) - 读取本地文件src/primitives/desensitizer.js:24
files = readdirSync(dir).filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).sort() - 读取本地文件src/primitives/desensitizer.js:35
const doc = parse(readFileSync(join(dir, f), 'utf8')) - 读取本地文件src/primitives/dimension-loader.js:24
return JSON.parse(readFileSync(path, 'utf8')) - 读取本地文件src/primitives/dimension-loader.js:36
if (!existsSync(cfgPath)) { - 读取本地文件src/primitives/dimension-loader.js:67
if (!existsSync(p)) { - 读取本地文件src/primitives/dimension-loader.js:72
const doc = parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/dimension-loader.js:203
if (!existsSync(dir) || !statSync(dir).isDirectory()) continue - 读取本地文件src/primitives/dimension-loader.js:203
if (!existsSync(dir) || !statSync(dir).isDirectory()) continue - 读取本地文件src/primitives/regression-rules.js:28
const doc = parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/regression-rules.js:57
if (!existsSync(p)) { - 读取本地文件src/primitives/root-cause-rules.js:70
if (!existsSync(p)) { - 读取本地文件src/primitives/root-cause-rules.js:75
const doc = parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/scope-resolver.js:44
if (!existsSync(p)) { - 读取本地文件src/primitives/scope-resolver.js:50
const doc = parse(readFileSync(p, 'utf8')) - 读取本地文件src/primitives/script-composer.js:21
if (!existsSync(dir)) return { ok: false, reason: `缺少目录 ${TEMPLATE_DIR}/` } - 读取本地文件src/primitives/script-composer.js:22
const files = readdirSync(dir).filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).sort() - 读取本地文件src/primitives/script-composer.js:27
const doc = parse(readFileSync(join(dir, f), 'utf8')) - 读取本地文件src/session/closure-tracker.js:32
if (existsSync(parent)) { - 读取本地文件src/session/closure-tracker.js:33
const st = statSync(parent) - 写入本地文件src/session/closure-tracker.js:36
mkdirSync(dir, { recursive: true }) - 写入本地文件src/session/closure-tracker.js:38
writeFileSync(probe, String(Date.now())) - 删除本地文件src/session/closure-tracker.js:39
rmSync(probe, { force: true }) - 读取本地文件src/session/closure-tracker.js:97
if (existsSync(p)) { - 读取本地文件src/session/closure-tracker.js:99
staleMemory = JSON.parse(readFileSync(p, 'utf8')) - 写入本地文件src/session/closure-tracker.js:116
writeFileSync(tmp, JSON.stringify(obj, null, 2)) - 写入本地文件src/session/closure-tracker.js:117
renameSync(tmp, target) - 删除本地文件src/session/closure-tracker.js:120
try { rmSync(tmp, { force: true }) } catch { } - 读取本地文件src/session/closure-tracker.js:137
for (const f of readdirSync(dir)) { - 读取本地文件src/session/closure-tracker.js:154
if (existsSync(p)) { - 写入本地文件src/session/closure-tracker.js:168
writeFileSync(tmp, JSON.stringify(obj, null, 2)) - 写入本地文件src/session/closure-tracker.js:169
renameSync(tmp, target) - 删除本地文件src/session/closure-tracker.js:172
try { rmSync(tmp, { force: true }) } catch { } - 删除本地文件src/session/closure-tracker.js:280
rmSync(tmp, { force: true }) - 读取本地文件src/verification/hash-binder.js:11
if (!existsSync(path)) return null - 读取本地文件src/verification/hash-binder.js:12
return 'sha256:' + createHash('sha256').update(readFileSync(path)).digest('hex').slice(0, 32) - 读取本地文件src/verification/hash-binder.js:22
pluginVersion = JSON.parse(readFileSync(join(pkgRoot, 'package.json'), 'utf8')).version || '0.0.0'
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
从证据诊断推理服务:生成脱敏采集脚本,离线解析,按根因排序并给出证伪条件,只补采缺失部分。哈希链审计;五个只读 DSH 工具。
README
由 DeepSeek 最新模型翻译生成@xiciyang/inference-diagnose
用证据诊断推理服务,不靠猜——证据不足时,就直说「未确认」。
生成采集脚本 → 离线解析脱敏报告 → 给出按优先级排序的根因和修复方案 → 修复失败,就只补采缺失的探针,再和上一轮做 diff。
全程离线、去标识化、审计哈希链;framework × runtime × hardware 组合缺规则时,直接 fail-closed。
- 日志不出本机:采集在用户机器上跑,解析和诊断都在内存里完成,不走云端往返。
- 证据驱动:每条结论都带严重度、置信度和证伪条件;「未确认」也是有效结论。
- 三种模式:服务故障(A)、相对客户基线的劣化(B)、一致性 / 非确定性(C)。
- 五个工具,全部 risk: read——不写盘、不需要沙箱、不需要确认令牌。
安装
git clone https://github.com/xiciyang/inference-diagnose.git
cd inference-diagnose && bash scripts/build.sh
dsh plugin --profile <name> add .
尚未发布到 npm;按上面的源码路径装完,重启生效。
要求 Node ≥ 20,已在本机 DSH 0.2.0-rc.2 上验证。
展开完整文档(README 剩余 1 节)
@xiciyang/inference-diagnose 用证据诊断推理服务,不靠猜——证据不足时,就直说「未确认」。 生成采集脚本 → 离线解析脱敏报告 → 给出按优先级排序的根因和修复方案 → 修复失败,就只补采缺失的探针,再和上一轮做 diff。 全程离线、去标识化、审计哈希链;framework × runtime × hardware 组合缺规则时,直接 fail-closed。 - 日志不出本机:采集在用户机器上跑,解析和诊断都在内存里完成,不走云端往返。 - 证据驱动:每条结论都带严重度、置信度和证伪条件;「未确认」也是有效结论。 - 三种模式:服务故障(A)、相对客户基线的劣化(B)、一致性 / 非确定性(C)。 - 五个工具,全部 risk: read——不写盘、不需要沙箱、不需要确认令牌。 安装 git clone https://github.com/xiciyang/inference-diagnose.git cd inference-diagnose && bash scripts/build.sh dsh plugin --profile <name> add . 尚未发布到 npm;按上面的源码路径装完,重启生效。 要求 Node ≥ 20,已在本机 DSH 0.2.0-rc.2 上验证。 从源码构建: bash scripts/build.sh # 27 个文件 → lib/ node tests/run.mjs # 30 spec,无 GPU / 无容器 / 无网络 用法 在会话里直接调用五个工具(裸名,无 inference_ 前缀): | 工具 | 作用 | | generate_collect_script | 生成内嵌脱敏的采集脚本(在用户自己的机器上执行,本插件不代执行) | | parse_collect_report | 解析已脱敏报告 → 结构化证据(全程内存,明文不落盘) | | diagnose_service | A 范式:服务异常(崩溃/启动失败/挂起/被外部杀/资源耗尽/输出异常) | | diagnose_regression | B 范式:相对客户基线的性能/精度劣化(无基线则退化为定性诊断) | | diagnose_consistency | C 范式:一致性/非确定性 | 典型链路:generate_collect_script → 用户在目标机执行 → parse_collect_report → diagnose_service;修复失败后,用返回的 nextSteps 只补采缺失探针,再调一次 diagnose_service(带 priorRound)看 diff。 配置 | 变量 | 作用 | 默认 | | INFERENCE_DIAGNOSE_ROOT | 审计链与运行状态根 | ~/.ai-infra | | DSH_HOME | 会话存储根 | ~/.dsh | | INFERENCE_WORKSPACE | 跑「与兄弟插件工具名不重名」检查时的源码目录 | 未设置则跳过该检查 | | SPEC_ROOT | 设计文档仓(门禁 2–4) | 未设置则跳过 | 三维词表是 L1 数据:assets/config/dims.json + assets/dimensions/<kind>/<id>.yaml。 新增一个维度取值 = 加一个 YAML + 在 dims.json 登记 + 配规则文件;缺规则文件会让该组合 fail-closed(ERR_ROOTCAUSE_RULES_NOT_LOADED),不会静默降级。 framework:mindie(Ascend)· vllm;runtime:docker; hardware:ascend-arm · gb10 · nvidia · cpu。 治理面 - 风险分级:五个工具全部 risk: read / sandbox: none / confirmation: not-required。 声明面在 manifest.yaml(给人/审计看)与 src/governance/risk.js(给代码看),由 tests/unit/governance.spec.mjs 断言逐工具相等,并与实际注册工具名双向一致。 - 审计哈希链:每次调用追加到 $INFERENCE_DIAGNOSE_ROOT/logs/audit/inference-diagnose/<YYYY-MM-DD>.jsonl; hash = sha256(canonicalJson(record 去掉 hash)),prevHash 首尾相接,只追加(O_APPEND + 0600)。 记录只存参数摘要与参数名,绝不存参数值。 - 复算:node scripts/verify-audit.mjs [--root R] [--day D] [--tail N],链损坏 exit 1。 兼容与门禁 - DSH bundle:已声明 dsh.bundle.patch + engines.dsh;entry id 为 inference-diagnose,npm 名为 @xiciyang/inference-diagnose。 - node tests/run.mjs:30 个 spec 全部通过(本机实测),只收集 tests/unit/ 与 tests/integration/。 - bash scripts/verify-all.sh:spec 套件 +(可选)状态机穷举与兄弟仓契约;缺少外部仓时显式 SKIP,不伪造通过。 - 真机端到端脚本在 tests/realmachine/,不进 CI(见其 README)。 许可 BSD-3-Clause。见 LICENSE。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xiciyang/inference-diagnose
采集脱敏证据并离线定位推理服务故障根因
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9