🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

域名注册局核验 samorachumbi/dsh-domain-watch

DeepSeek Harness
samorachumbi30 天前有提交已提供中文文档扫描:未发现敏感能力

直查注册局确认域名归属与到期,识破面板缓存偏差

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add samorachumbi/dsh-domain-watch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · market
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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。
预览分享卡片长什么样 ↓samorachumbi/dsh-domain-watch
分享 · DeepSeek Harness Hub
samorachumbi/dsh-domain-watch

直查注册局确认域名归属与到期,识破面板缓存偏差

回到顶部