dsh-plugin-verified-search
f0909172434
Verified current-source search workflow for DeepSeek Harness
PROJECT TOPICS
PROJECT README
DSH(DeepSeek Harness)Cordis 插件:把任意一段资料正文——或一段 AI 会话执行轨迹——用 AI 拆解成一张知识图,并在知识图与原文之间双向定位。
贴原文 → AI 异步拆图 → 双向锚点定位。是 NovelStudio「资料 ⇄ 知识图」落地为独立、可复用插件的形态。
fact 事实 · inference 推论 · concept 概念 · definition 定义 · example 例子 · counter_example 反例 · rule 规则。supports 支持 · example 例子 · counter_example 反例 · defines 定义 · infers 推断 · causes 因果。… 省略),完整内容随时可在详情卡片中查看;− 100% +(50%–200% 步进 10%)/ 长按节点查看原文摘录 / 键盘可达。┌─────────────────────────────── 浮动工作台 ───────────────────────────────┐
│ ● 知识库 · 资料 ⇄ 知识图 [ × ] │
│ 知识库 │
│ 把任意资料用 AI 拆成「事实/推论/概念/定义/例子/反例/规则」知识图… [历史][重新开始]│
│ [输入资料 ─────────── 收起 ▴] │
│ [原文 ⇄ 知识图] │
│ 一句话总结:… │
│ N 节点 · M 关系 · 可回链 X/Y ─────────────────────────┐ │
│ [原文段落…带类型徽标] ‖ [知识图 SVG…] [− 100% +] │ ← 可拖宽竖条 │
│ ─────────────── 可拖高横条 ──────────────── │ │
└─────────────────────────────────────────────────────────────────────────┘
对话区「轨迹知识图」标签页:
┌────────────────────────── 轨迹 ⇄ 知识图 ──────────────────────────┐
│ 拆解本会话轨迹:用户消息 / 工具调用 / 工具结果 / AI 回复 │
│ 一句话总结:… │
│ [轨迹事件…带类型徽章] ‖ [知识图 SVG…] [− 100% +] ← 可拖宽竖条 │
│ ──────────── 可拖高横条 ──────────── │
│ (切换标签页 / 刷新页面后结果自动恢复) │
└────────────────────────────────────────────────────────────────────┘
这是一个 DSH 动态 Cordis 插件:一份 Host 代码(Node 进程)+ 一份 Client 代码(浏览器),纯 JS、零依赖、无需构建。通过 DSH Web 界面的 Cordis 插件机制加载,步骤适用于任何 DSH Web 会话。
dsh web)并进入任意会话;agentDefaultModel)。插件默认跟随系统当前模型;工作台与「轨迹知识图」顶部均提供模型下拉框,可手动指定拆分、追加、AI 审校、质疑与外部核查使用的模型(选择会保存在浏览器本地);未配置时会给出明确的中文错误提示。git clone https://github.com/cwbcheng/dsh-knowledge-graph.git
cd dsh-knowledge-graph
| 文件 | 作用 |
|---|---|
src/index.host.js |
Host 半:异步 AI 拆分任务引擎(段落编号、分批、schema 校验、typed 诊断、模型路由、会话轨迹序列化)+ 知识图验证/质疑引擎(本地体检、LLM 审校、二次复核) |
src/index.client.js |
Client 半:浮动工作台 UI、图渲染、双向定位、验证与质疑面板、修复应用/审计、历史、宽高调节、轨迹知识图标签页 |
方式 A:让 Agent 帮你安装(推荐)
在任意会话中把下面这句话发给 Agent(把路径换成你 clone 的位置):
请读取
dsh-knowledge-graph仓库的src/index.host.js和src/index.client.js,把这两个文件定义为 Cordis 插件的 Host 半和 Client 半,然后运行它。
Agent 会依次调用 cordis_define(定义)→ cordis_run(运行),并在界面上弹出运行审批卡片。
方式 B:自己复制源码定义
cordis_define(由 Agent 执行,或按你环境的 Cordis 工具流程操作);src/index.host.js 的内容,Client 半粘贴 src/index.client.js 的内容;export default function hostPlugin() { / export default function clientPlugin() { 这一行和文件末尾对应的 },保留中间的 return { ... }; 部分(文件头部注释可保留也可删掉)。不熟悉
cordis_define工具的话直接用方式 A,Agent 会自动处理好上面的取函数体步骤。
方式 C:常驻安装(推荐,重启不丢)
把本仓库安装为 web profile 的组合插件(与 dsh-hud 相同的社区插件包形态):Host 半走 webServer 路由、Client 半是 __ModuleLoader__ 浏览器模块,随 dsh web 启动自动加载,不需要每次重启后重新定义,也无需审批。
# 1. 在 profile 目录添加依赖与 bundle($DSH_HOME 默认 ~/.dsh)
cd ~/.dsh/profiles/web
# 在 package.json 的 dependencies 中加:
# "dsh-knowledge-graph": "github:cwbcheng/dsh-knowledge-graph#main"
# 在 package.json 的 dsh.profile.bundles 中加:
# "dsh-knowledge-graph"
pnpm install
# 2. 重启 dsh web(Ctrl+C 后重新 `dsh web`)
重启后:对话标题右侧出现「知识图」按钮,历史记录、窗口位置等(浏览器 localStorage)原样保留。
| 文件 | 作用(常驻包) |
|---|---|
lib/index.js |
Host 半:任务引擎 + /api/dsh-knowledge-graph 路由(POST extract / POST append-extract / POST trajectory-extract / GET task-status / GET trajectory-status) |
lib/client.js |
Client 半:__ModuleLoader__ 浏览器模块(fetch RPC + 手动样式注入) |
cordis.patch.yml |
bundle patch:向组合插入 dsh-knowledge-graph 行 |
src/与lib/是同一插件的两种部署形态:src/供动态插件(方式 A/B)使用,lib/供常驻组合(方式 C)使用,逻辑保持一致。
定义成功后运行会进入 awaiting approval(等待批准) 状态:
cordis_define(在同一个插件下追加新 Package),再 cordis_run(update 模式)切换到新版本;若你之前点了双勾,新版本会自动运行。pnpm install(拉取最新 #main)并重启 dsh web 即可。cordis_undefine。package.json 移除依赖与 bundles 条目,pnpm install 后重启。历史记录等数据保存在浏览器 localStorage,卸载不会丢失。
在任意网页上选中文字,点浮动按钮「拆成知识图」,一键调用本机 DSH 服务生成知识图(弹窗内可直接拆分、看图、回链原文)。
extension/ 目录,零依赖打包:viewer.js 由 scripts/build-viewer.mjs 从 src/index.client.js 切片生成(d3/*.js 为内嵌 d3 模块的独立文件——MV3 扩展页禁止 eval,popup 用 <script src> 预载后 viewer 自动走全局 d3 快速路径),修改源文件后运行 node scripts/build-viewer.mjs 重新生成。chrome://extensions → 开启右上角「开发者模式」→ 把 dist/dsh-knowledge-graph.crx 直接拖进页面 → 点「添加扩展程序」。首次会提示"Chromium 无法验证此扩展程序的来源",属正常(未上架商店),照常使用。extension/ 目录。--load-extension 命令行加载(Chrome for Testing / Chromium 等未品牌化构建仍支持)。dist/dsh-knowledge-graph.pem 私钥(扩展 ID 由它派生,换密钥 = 换 ID = 旧安装失效):chrome --pack-extension=extension --pack-extension-key=dist/dsh-knowledge-graph.pem
输出 extension.crx 替换 dist/dsh-knowledge-graph.crx 后重新拖入安装。
dsh web 且插件版本包含 /dsh-kg 扩展端点(常驻安装需先更新插件并重启 dsh web;端点仅接受 chrome-extension:// 与 localhost/127.0.0.1 来源,并返回 PNA 预检头)。chrome.runtime.sendMessage → Service Worker 写入 chrome.storage.session 并 chrome.action.openPopup()(Chrome 127+);弹窗读取选中文本后调用 http://127.0.0.1:3080/dsh-kg/extract,轮询 task-status 渲染知识图。DSH 服务地址可在弹窗底部修改并记忆(chrome.storage.local 的 kgBase)。┌─────────────── Host(Node 进程) ───────────────┐ ┌────────── Client(浏览器)──────────┐
│ extract / append-extract / task-status / │ │ │
│ trajectory-extract / trajectory-status │ │ 浮动窗口(shell.overlay) │
│ verify-graph (quick/standard) │ │ 输入区(可收起) │
│ question-graph (node/edge/graph) │ │ 原文 ⇄ 知识图(宽高可拖) │
│ fact-check (quick/deep, wikipedia evidence) │ │ 验证与质疑面板 / 修复应用 / 审计 │
│ split paragraphs (numbered) ───────────────►│ │ 外部事实核查面板 │
│ serializeTrace(会话事件) ───────────────────►│ │ 历史 / 诊断 / toast(悬浮) │
│ append: 已有图节点清单注入提示词 ────────────►│ │ 对话头部「知识图」按钮 + run 卡片启动条│
│ batches → llm.stream (typed retry ×2) │ │ 会话标签页「轨迹知识图」 │
│ schema validate → merge (dedupe/warnings) │ │ 轨迹 ⇄ 知识图双向定位 │
│ task Map; busy lock; 2h purge │ └──────────────────────────────────────┘
└────────────────────────────────────────────────┘
n1 开始命名节点,Host 在合并前无条件重编号冲突 id 并同步重写边,避免长文档后续批次的节点被当成重复 id 丢弃。anchor_unresolved:node:...)中。[start, end) 偏移,超长事件被切分成多个单元后仍能确定性映射回原事件,复用同一套「内容单元编号即锚点」机制做图与事件的确定性双向回链。graph.verification.auditLog(仅保存变化节点的 before/after 快照,防止 localStorage 膨胀);追加拆分后旧报告自动标记 stale。KnowledgeGraphDto { summary: string, nodes[], edges[], warnings[], verification? }
Node { id, type, typeLabel?, text, quote?, paragraph?, offsetHint? }
Edge { fromNodeId, toNodeId, relation, relationLabel? }
GraphVerification {
lastReport?: VerificationReport,
stale?: boolean,
auditLog?: [{ ts, action, targetId, detail, reportId, before?, after? }]
}
VerificationReport {
reportId, mode: 'quick' | 'standard' | 'question',
createdAt, model?, scope: { kind: 'full' | 'node' | 'edge' | 'graph', ids[] },
summary, metrics: { checkedNodes, checkedEdges, errorCount, warningCount,
suggestionCount, evidenceCoverage, paragraphCoverage },
issues: Issue[]
}
Issue {
id, source: 'local' | 'ai' | 'question',
severity: 'error' | 'warning' | 'suggestion',
category: 'grounding' | 'type' | 'relation' | 'duplicate' | 'contradiction'
| 'completeness' | 'summary' | 'other',
targetKind: 'node' | 'edge' | 'graph', targetId: string | null,
title, detail, evidence: [{ paragraph?, quote? }],
confidence: 0..1,
proposedFix: { action: 'none' | 'update_node' | 'delete_node' | 'add_node'
| 'update_edge' | 'delete_edge' | 'add_edge' | 'merge_nodes'
| 'update_summary', nodePatch?, edgePatch?, mergeIntoId?, summaryPatch? },
status: 'open' | 'accepted' | 'rejected' | 'applied'
}
FactCheckState { lastReport?: ExternalFactCheckReport, stale?: boolean }
ExternalFactCheckReport {
reportId, mode: 'quick' | 'deep', createdAt, model?,
summary, metrics: { totalClaims, supported, contradicted,
partially_supported, insufficient, unverifiable,
out_of_scope, supportedRate },
claims: ExternalClaim[], warnings?
}
ExternalClaim {
id, nodeId?, kind, paragraph?, quote, claim,
checkworthy: 0..1,
verdict: 'supported' | 'contradicted' | 'partially_supported'
| 'insufficient' | 'unverifiable' | 'out_of_scope',
confidence: 0..1, rationale?, correction?,
evidence: [{ id, provider: 'wikipedia' | 'rules', url?, title?,
snippet, domainAuthority }],
evidenceQuote?, status: 'open' | 'accepted' | 'rejected'
}
paragraph(段落编号,确定性回链)与 quote(原文逐字摘录)。verification / factCheck 可选,旧版本生成的历史数据没有这些字段时按未验证/未核查处理,完全向后兼容。MIT © cwbcheng
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。