直查注册局确认域名归属与到期,识破面板缓存偏差
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add samorachumbi/dsh-domain-watch该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求lib/client.js:170
const res = await fetch("/domain-watch/state", { cache: "no-store" }); - 发起网络请求lib/client.js:255
fetch("/domain-watch/recheck", { method: "POST", cache: "no-store" })
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-storage-json@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 直查注册局确认归属
- 查询注册商信息
- 查询域名到期时间
问注册局,别问服务商面板:域名到底有没有注册、注册商是谁、什么时候到期。DSH 智能体工具加一块宿主渲染的看板。
README
由 DeepSeek 最新模型翻译生成dsh-domain-watch
去问注册局,别信服务商的控制面板。 注册商的控制面板只是注册局的一份缓存,而这个插件回答的是钱已经付出去之后唯一重要的问题:这个域名到底是不是我的?
curl 'http://127.0.0.1:3080/domain-watch/check?domain=example.co.ke&claimed=paid&json=1'
这个插件因何而生
2026 年 10 月 1 日,一张主机账单被标记为 PAID。订单在服务商的控制面板里显示 active。有收据,有发票号,还有一位客户,坚信自己拥有某个域名。
而 KENIC 的注册局里根本查不到这条记录。
严格来说,面板没有撒谎。它只是一份缓存,而这份缓存从未写入注册局。日子一天天过去,等的是一个永远不会完成的队列,升级计时器在跑,最后还得申请退款——而这个域名本来可以在头十分钟里就注册妥当。
三天后,同样的事反着又来了一次:注册局已经把某个域名置为 active,面板却显示 Pending,只有查一次注册局才知道一切正常。
缓存会朝两个方向出错。解决办法不是做一个更好的控制面板,而是去问权威机构,并且拒绝把两个答案折中成一个让人舒服的中间值。
域名面板,深色主题同一个面板,浅色主题
它能做什么
四个智能体工具,外加一个由宿主渲染的页面。
展开完整文档(README 剩余 1 节)
dsh-domain-watch 去问注册局,别信服务商的控制面板。 注册商的控制面板只是注册局的一份缓存,而这个插件回答的是钱已经付出去之后唯一重要的问题:这个域名到底是不是我的? curl 'http://127.0.0.1:3080/domain-watch/check?domain=example.co.ke&claimed=paid&json=1' 这个插件因何而生 2026 年 10 月 1 日,一张主机账单被标记为 PAID。订单在服务商的控制面板里显示 active。有收据,有发票号,还有一位客户,坚信自己拥有某个域名。 而 KENIC 的注册局里根本查不到这条记录。 严格来说,面板没有撒谎。它只是一份缓存,而这份缓存从未写入注册局。日子一天天过去,等的是一个永远不会完成的队列,升级计时器在跑,最后还得申请退款——而这个域名本来可以在头十分钟里就注册妥当。 三天后,同样的事反着又来了一次:注册局已经把某个域名置为 active,面板却显示 Pending,只有查一次注册局才知道一切正常。 缓存会朝两个方向出错。解决办法不是做一个更好的控制面板,而是去问权威机构,并且拒绝把两个答案折中成一个让人舒服的中间值。 域名面板,深色主题同一个面板,浅色主题 它能做什么 四个智能体工具,外加一个由宿主渲染的页面。 | 工具 | 回答什么 | | domain_check | 它注册了吗?注册商是谁、创建时间、到期时间、剩余天数、转移锁——另外,如果你传入 claimed,面板和注册局是否不一致 | | domain_watch_add | 开始监视:查一次注册局,然后记住答案 | | domain_watch_remove | 停止监视。只删除记录,绝不碰域名本身 | | domain_watch_list | 列出所有被监视的域名,最快到期的排最前,倒计时实时重算 | 面板在 /domain-watch/ui——一个服务端渲染的页面,独占一个标签页,没有客户端 bundle,不需要 JavaScript。倒计时按每次请求、根据记住的注册局答案现算,所以没人点任何东西,数字也在动。这正是重点:要防的失败就是时间流逝。 状态胶囊 外壳里的状态胶囊:左下角,紧挨着应用胶囊,右下角是费用气泡 外壳里一个可拖动的气泡,就在应用胶囊旁边。它存在的理由是:面板回答的是现在发生了什么,而胶囊回答的是它开着吗,它在正常工作吗——这是另一个问题,被问到的频率高得多,问的人也不会为此专门开一个标签页。 始终可见,这是故意的:一个始终在场的东西,才让它的缺席有意义;一个时有时无的指示器,永远没法告诉你它已经坏了。 | 状态 | 显示 | 非开发者会拿它做什么 | | calm | domains fine ✓ | 什么都不做 | | invoked | domains checking itikia.co.ke… | 还没等到答案,就已经听见了 | | just finished | domains itikia.co.ke ✓ | 无 | | expiring | domains 2 expiring | 注意,快到期了 | | expired | domains needs renewing | 今天就续费 | | not registered | domains not registered | 马上行动——你并不拥有它 | | unreachable | domains ? | 现在查不了 | 检查成功后的状态胶囊:域名,然后一个对勾 三条规则让它值得信任,而这三条全都关乎读它的人,而不是代码: 它敢说「我不知道」。 轮询失败就显示 ?,绝不显示对勾。一盏会撒谎的状态灯,等于这个插件自己的立论被那个用来维护立论的东西打破了。 颜色在调用时变,不在完成时变。 助手最糟糕的行为就是闷不吭声——所以确认不能等结果。这一条是用下限强制的,不是指望它自然发生;为什么这个区别让我们搭进去一天,见下文。 每个警报都带一个动词。 开发者看到红色会去查日志。其他人看到红色,需要有人告诉他该做什么,否则这盏灯只会制造焦虑。 级别、措辞和那句话全部由 summarize() 在宿主侧决定,面板标题画的也是同一个对象——所以气泡和页面永远不会互相矛盾。 点击会做什么 点击状态胶囊会重新检查所有被监视的域名,并立刻确认这次点击。它不会打开面板:状态灯的点击应该做便宜、高频的事,并在 shell 里给出回应。面板离你只有一次点击,在 apps 胶囊里,或者访问 /domain-watch/ui。 确认会保持至少 1.2 s(ACK_MS),而这个下限正是关键。.ke 的 whois 在 24–74 ms 内应答,而状态胶囊每秒轮询一次,所以第一版大约每十三次调用才有一次能渲染出蓝色的 checking…——而且,因为点击打开的是一个标签页而不是做检查,实际上它根本没渲染过。上面第 1 条规则是代码没能兑现的承诺。 这个下限是边界,不是延迟:时间一到,真相就接管,不管真相是什么,所以缓慢或失败的检查永远不会藏在确认背后。在一个立论就是「状态灯不能撒谎」的插件里,这个边界是允许下限存在的唯一理由。 这些都不是「看起来没问题」能覆盖的——这个判断被从 React 函数体里提出来,放进纯函数 pillState(),正是为了能测试它,而重新引入任何一个缺陷都会让测试套件失败。 工具提示是宿主的句子,不是客户端的。 你悬停时状态胶囊说的话是 summary.action,由服务器上的 summarize() 决定——而点击逻辑在客户端 bundle 里。它们在不同的文件里,所以任何一方一改就会漂移:客户端工具提示已经按新的点击行为改好了,宿主却还在说「点击打开面板」,一直说到一天之后。现在有测试禁止宿主承诺任何点击做不到的事。 动效是一次缓慢的呼吸(约 2.5 秒),绝不是眨眼:一个永久闪烁的元素一周内就会变成壁纸,然后在真正重要的那个早晨把问题藏起来。它在 prefers-reduced-motion 下完全停止,而且呼吸落在 chip 的 tint 上,而不是整个 pill 的不透明度——淡化整个 pill 会让文字降到 3.09:1,低于 4.5:1 的下限。淡化 tint 是脉冲;淡化文字则是读不出来的状态灯。改动后实测:5.21:1。 判定结果 domain_check 不只是查一下。拿到面板告诉你的信息后,它会指出分歧: | 判定 | 含义 | | confirmed | 两边一致。 | | registry-ahead | 注册局已经有了;面板是滞后的缓存。不要重复下单。 | | registry-silent | 面板说这是你的,注册局却没有记录。这个名字还不属于你。 | | in-progress | 两边都没显示已注册。订单还没落地。 | | registry-only | 没有给出声明,所以这只是注册局的答案。 | 三个值得了解的决定 查询失败绝不报告为「未注册」。 对只看到空字符串的调用方来说,网络错误和域名不存在无法区分,把两者混为一谈,你就会为一个已经拥有的域名付两次钱。错误就报告为错误。 未知 TLD 是错误,不是猜测。 Verisign 提供 .com 和 .net;它不提供 .org、.io 或 .dev。拿这些去问它,它会回答 "No match"——读起来像可注册,实际是你问错了服务器。不在映射表里的注册局会返回明确的错误,因为错误答案比没有答案更糟:错误答案才是你会照着行动的那个。从 IANA 根数据库添加 TLD;绝不要从相似的 TLD 推断。 put 是合并。 重新检查域名不能抹掉你的备注,添加备注也不能抹掉注册局的答案。每次写入都通过同一个辅助函数先读再合并,所以 undefined 意味着保留,绝不是清空。 安装 DEST="$DSH_HOME/profiles/web/node_modules/dsh-domain-watch" mkdir -p "$DEST" cp -r lib package.json cordis.patch.yml "$DEST"/ $DSH_HOME/profiles/web/cordis.patch.yml (append) - insert: - id: domain-watch name: 'dsh-domain-watch' config: domains: - example.co.ke Registry policy, not universal law. These defaults are KENIC's. suspendAfterDays: 14 deleteAfterDays: 90 warnWithinDays: 60 然后重启宿主,让新条目被组合进去。@deepseek-ai/ 的导入通过共享配置档树解析,所以不需要安装任何东西。 不要用 dsh plugin add 做这件事。 它会转发到配置档目录内部的包管理器,从而实体化出第二份 @deepseek-ai/dsh-tools 副本——而两份副本指的是两个模块级 Symbol,所以会话里每次工具调用都会挂掉,报 Cannot read properties of undefined (reading 'prepare')。直接复制真实文件就完全绕开了这个问题。 配置 | 键 | 默认值 | 含义 | | domains | [] | 要预置进监控列表的域名。预置时不发起网络查询,所以再慢的注册局也拖不住启动 | | suspendAfterDays | 14 | 到期后过多少天,域名停止解析 | | deleteAfterDays | 90 | 到期后过多少天,别人才能注册它 | | warnWithinDays | 60 | 域名从什么时候开始显示为即将到期* | | timeoutMs | 15000 | 每次 whois 查询的超时时间 | 宽限期可以配置,因为它是注册局的政策,不是普适的法律。默认值来自 KENIC,出自 .ke 三级域名政策:到期后 14 天暂停,90 天后删除。.com 的行为不一样。插件如果写死某家注册局的规则,却声称能回答任何 TLD,那就是在悄悄撒谎。 开发 npm install npm run typecheck # tsc, strict npm test # 38 tests, no network — real registry replies as fixtures npm run build node scripts/probe.mjs example.co.ke # LIVE: a real registry round trip 测试套件跑的是2026-10-01 抓取的注册局原始回复——一条是存在的域名,一条是不存在的域名,一条带转移锁。套件里没有网络,这些固定数据就是注册局,所以它们是 tests/ 里最重要的文件。 探针是另一半:录下来的回复能证明解析逻辑,只有实时查询才能证明传输、注册局映射表和整个往返链路。 作者 作者是 Samora Chumbi —— @samorachumbi —— 做这个是因为有个 harness 不能再信厂商的仪表盘了。我专门做 DSH 插件;这是第四个。 想找我——报 bug、指出这张映射表搞错了哪个注册局、或者想要某个还不存在的插件——开个 issue: <https://github.com/samorachumbi/dsh-domain-watch/issues>。如果映射表在你实际使用的某个 TLD 上是错的,那是你能提的最有用的 bug:从 IANA 根数据库加一个 TLD 只是个小改动,还能让下一个人也用上正确的插件。 同一个作坊出的其他插件: - dsh-cost-bubble —— 当前对话花了多少钱,实时显示,带计费 token 分桶和缓存命中率。 - dsh-app-launcher —— 这个插件的气泡就挨着它那个 Apps 药丸:点一下,在独立的系统窗口里打开插件页面。 - dsh-daily-progress-tab —— 这项工作就是照着它排优先级的创业看板(omdsh-dev/dsh-daily-progress 的 fork)。 许可证 MIT。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
samorachumbi/dsh-domain-watch
直查注册局确认域名归属与到期,识破面板缓存偏差
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6