DSH-Search-Citation-Auditor
Audit citation sources in AI responses – extract URLs from the reply, score and rank them by threat level, and output a detailed report. Domains on your blocklist will be genuinely blocked – web tools such as web_search and web_fetch will directly refuse to access them. The blocklist is fully maintained by you.
- Stars
- 2
- Language
- TypeScript
- Created
- Sep 1, 2026
- Updated
- Oct 5, 2026
Introduction
Citation Auditor
各个模式怎么用
插件有三个模式,在设置页那张卡片上切换,改完立刻生效,不用重启。
白名单模式:最严,眼里不揉沙子。 你先自己维护一份白名单,名单里的域名算好,其余不管是谁一律标红。适合只信几个固定来源的场景,比如只看官方文档、只看内网。缺点是新来源一律先红,得手动加进去才放行。
实现上就是二元判定:命中白名单得 0 分,否则 100 分。进了拦截名单的直接标红,不参与打分。
简单模式:看域名岁数。 拿域名的注册时间跟分界年(默认 2023,能改)比:分界年以前注册的算好,之后注册的一律标红。思路很直白——老域名一般更靠谱,刚注册没几天的钓鱼站最可疑。查不到注册时间的按可疑处理,不会直接放过去。
要让它真干活,得先打开年龄查询小脚本(一段你自己写的 JS,默认关着)。不开的话,年龄这一项就按"查不到"算。
普通模式:综合打分,默认就用它。 看一堆信号加起来:后缀是不是高风险类型(比如 .xyz、.shop 这种)、连字符和数字多不多、域名是不是异常地长、注册年龄、链接本身有没有猫腻(IP 直连、@ 混淆、短链接、追踪参数、深路径、超长查询串、非标准端口)。每个信号加几分都能在"高级阈值"里调。同一个域名的多个链接,同类信号只计一次,不会重复扣分。
不管哪个模式,进了拦截名单的域名都直接标红、不参与打分。名单对每个模式有独立开关——比如你在普通模式下关掉了拦截名单,那这个模式就完全不用名单。域名一律按注册域归一化:en.wikipedia.org 会被当成 wikipedia.org 来判。
拦截名单里的域名,模型再想访问会被直接拦住(默认行为)。也可以改成"先问我"(ask)或者"只在报表里标红、不拦"(allow)。策略在设置页、悬浮窗、citation_manage policy 里都能切,即时生效。只拦浏览器类工具(web_search / web_fetch 这种),终端命令之类的不管。
实现的效果
除了域名本身,插件还看抓回来的网页正文:里面要是藏着"让模型照做"的指令,就在正文前面加一段提示,正文一个字不动,要不要停由你决定。右下角有个小球,点开就是最近一条回复的审查结果,可以拖来拖去。
可能的缺陷
先说在前面,免得用的时候觉得被骗了:
- 正文里没带
http://的裸域名认不出来,比如"见 example.com/about"这种。这是故意的——不然普通句子里提到个像域名的词也会被当成引用。工具抓回来的链接都带协议,不受影响。 - 只查
web_fetch抓回来的正文,web_search的结果摘要不在范围内。 - 安全文章会误报。一篇讲提示词注入的文章里,"ignore all previous instructions"这句话会被命中。因为处置只是"提示一下",留着这个信号比删掉好。
- 正则一定有漏得掉的东西。纯靠换个说法就能绕过去的攻击,它看不出来。它的作用是提高攻击成本、让攻击看得见,不是对抗有资源的攻击者。
每版具体改了什么、已知问题清单,分别见 CHANGELOG.md 和 CODE-REVIEW.md。
项目结构
src/
├── index.ts # 插件入口(注册工具 + 挂钩子)
├── storage.ts # 名单和设置存哪、怎么读写
├── routes.ts # 插件自己的数据接口
├── settingsSection.ts # 设置页那张卡片的数据形状
├── webBlock.ts # 拦请求(域名进名单就不让访问)
├── injectionBlock.ts # 标内容(正文里有指令就加提示)
├── routeGuard.ts # 接口只接受本机请求
├── client/ # 界面:设置卡片、报表、悬浮窗
├── test/ # 测试(现在 197 项)
└── auditor/ # 干活的内核:抽链接、打分、查注入
名单、设置、缓存都是纯 JSON 文件,放在 ~/.citation-auditor/ 下面,用记事本直接改也行,改完即生效。
怎么装
从 Release 页下载 dsh-citation-auditor-0.4.1.tgz,在桌面端的设置 → 插件管理里安装,然后重启桌面端。
想自己编译:npm install && npm run build。跑测试:npm test。
要求宿主 dsh >= 0.2.0-rc.2。
License
MIT,见 LICENSE。