Conversation
梅花易数起卦与解卦。时间、数字、铜钱摇卦、每日一卦四种起法,按体用生克、京房八宫、 纳支、旬空月破、爻之合刑等传统规则断吉凶,落到所问之事上给应期与宜忌;内置六十四卦 全文(卦辞、彖传、三百八十四条爻辞与小象传)与干支时辰历法。既能在页面起卦,也能由 Agent 经 MCP 端点在对话里主动起卦。 安全与边界: - 全部计算在本机完成:不联网、不调模型、不 spawn 进程,不读包目录以外的任何文件 - 卦历存在 Host 分配的 dataDir,原子写入,上限 500 条;坏盘另存而非删除 - 请求只认回环 Host/Origin,挡住 DNS rebinding 与跨源读取;403 不回显请求方 - 日志只记错误码,不记 error.message——fs 报错会把绝对路径与系统用户名带出去 平台与验证: - 三个平台(Windows / macOS / Linux)均已实跑:安装、经 Agent 打开、四个分区走通 - 路径审计 0 问题:可移植路径、Windows 保留名、UTF-8 无 BOM 无 CRLF、大小写、 import 解析、最坏 dataDir 路径 112 字符(MAX_PATH 260 内) - 228 项单元测试,在 UTC-8 到 UTC+14 四个时区与 C locale 下均为 228 通过 0 失败 - 冒烟脚本真起 start(context),83 项覆盖页面、四种起法、卦历增删查、同秒 id 撞车、 坏盘恢复、MCP 全路径与 dispose 幂等 - 尚未核对的一项:760px 断点以下的窄屏版式
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
是什么
梅花易数占卜 Mini App。时间、数字、铜钱摇卦、每日一卦四种起法,按体用生克、京房八宫、纳支、
旬空月破、爻之合与爻之刑等传统规则断吉凶,把结论落到所问的那件事上,给应期与宜忌。
内置六十四卦全文(卦辞、彖传、384 条爻辞与 384 条小象传)与干支时辰历法。
两种用法:打开页面起卦;或在对话里由 Agent 经 MCP 端点主动起卦并讲解。
包目录
plugins/weekbin/chinese-divination/,插件 IDchinese-divination,版本 1.1.0。安全与边界
字体或脚本。唯一网络行为是 MCP 端点在 Host 分配的回环地址上监听,且只接受 POST。
miniapp/client/index.html与本包 Node 载荷。readings.json存卦历(最新在前,上限 500 条),临时文件写入后改名,中断不会留半份文件。解析不出的落盘文件被改名另存为
readings.json.corrupt-<时间戳>而非删除,手写批注仍可找回,卦历按空表继续而不是全线 500。
Host头,以及存在时的Origin头,都必须是回环名。Host挡 DNSrebinding(攻击者域名解析到 127.0.0.1 后浏览器视作同源),
Origin挡直接打端口的跨源简单请求。被拒时返回 403 且不回显请求方。
error.message——Node 的 fs 报错会把完整绝对路径连同操作系统用户名写进 message,而 dataDir 按契约是不透明的,那串路径不该跟着日志离开进程
(日志会被贴进 issue、传进工单、上传)。
textContent渲染,其余插值一律过escapeHtml。测试环境与结果
三个平台均已实跑:Windows、macOS、Linux。 三边都装好后经 Agent 打开,页面渲染正常,四个分区
可操作,掷钱、卦历与 MCP 各条路径一并查过。
macOS 那一轮是脚本化的,每一步都记在这里:
America/New_York、UTC、Asia/Shanghai、Pacific/Kiritimati(UTC-8 到 UTC+14)四个时区下各跑一遍,另加LC_ALL=C LANG=C极窄 locale一遍,每种组合都是 228 通过 0 失败——本包不依赖本机时区与 locale。
dataDir真起start(context),覆盖:页面与四种起法、掷钱、六十四卦全表、历法、卦历增删查、同秒起卦 id 撞车(曾致删一条连带删另一条)、故意写坏的
readings.json、MCP 的initialize/tools/list/ 三个tools/call/ 通知 / 未知工具 /非法事类、以及
dispose真的关掉监听且可重复调用。不同的文件、每条相对 import 都能在磁盘上找到;最坏形态的 dataDir 全路径 112 字符,
离
MAX_PATH260 还远。npm run check55/55 通过;npm run validate对本包报OK(0 错误 0 警告)。两条平台相关的设计决定,由静态核查托底:路径一律用
node:path拼;无__dirname(ESM 里不存在),import.meta.url只在测试文件里以new URL(相对, import.meta.url)+fileURLToPath出现,即ESM 跨平台的正解,且测试文件在运行时载荷之外。落盘用「临时文件 + 改名」,在 Windows 上遇到杀毒扫描
或索引器占用导致的
EPERM/EACCES/EBUSY会退避重试四次(约 400ms)——这是 Windows 独有的行为。尚未核对的一项: 760px 断点以下的窄屏版式,三个平台都未在实机看过。收窄内容区替代不了——
那两处容器查询反应的是区块自身宽度而非视口宽度,只有真实窄视口才走得到那条路。
几个值得一提的实现选择
相同的 id,而卦历按 id 过滤,删一条就会连带删另一条。现在同卦同时刻的 id 必不相同。
现在
cast()在第一个await之前同步置位casting并锁住触发器,解锁按状态计算而不是清空
disabled——成卦解卦另有「满六次才能点」的规则,一刀切会留下一个看得见却点不动的按钮。disabled。 原先renderToss()算完可用态,末尾又无条件全部启用,两者互相覆盖,六次之后两个按钮同时可点。现在可用态集中在
syncTossButtons(),只由已掷次数决定。用户原话,由它填
topic更准。九类之外的值直接报错而不是静默忽略——静默忽略会让 Agent以为自己已经定过了。
许可
MIT,见
LICENSE。Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.