dsh-metaphysics 0.59.1 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -1
- package/client.almanac.js +61 -60
- package/client.bazi.js +112 -111
- package/client.chenggu.js +61 -60
- package/client.convert.js +60 -59
- package/client.daliuren.js +116 -115
- package/client.fengshui.js +61 -60
- package/client.hepan.js +108 -107
- package/client.js +352 -290
- package/client.liuyao.js +113 -112
- package/client.mbti.js +63 -62
- package/client.name.js +61 -60
- package/client.numerology.js +63 -62
- package/client.qimen.js +116 -115
- package/client.star.js +66 -65
- package/client.tarot.js +116 -115
- package/client.trend.js +112 -111
- package/client.xiaoliuren.js +77 -76
- package/client.zeri.js +61 -60
- package/client.ziwei.js +110 -109
- package/engine/calendar.js +8 -2
- package/engine/dst.js +28 -1
- package/engine/handle.js +6 -2
- package/engine/index.js +85 -13
- package/engine/lunar.js +10 -11
- package/engine/random.js +9 -1
- package/engine/rectify.js +24 -3
- package/engine/trend.js +29 -20
- package/engine/zeri.js +25 -9
- package/engine/ziwei.js +5 -2
- package/index.js +29 -12
- package/package.json +4 -3
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +722 -78
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,56 @@
|
|
|
1
|
-
## 0.
|
|
1
|
+
## 0.60.0(2026-11-02,待发布)
|
|
2
|
+
|
|
3
|
+
> 本版主题:从「算得对」推进到「用得顺」。新增**我的命盘**(本机档案)与**复制提问**两条日常路径,并把历算、输入守卫、异步竞态、发布闸门里查出来的问题逐条修掉。新增能力不改变既有排盘口径;同一输入、同一 asOf 仍产出同一张盘。
|
|
4
|
+
|
|
5
|
+
- **我的命盘:一次录入,下次点卡出盘**(`src/panel-kit.js`、`src/app.js`、`src/web-ui.js`):
|
|
6
|
+
- 面板与离线单页共用一套实现与同一个存储键 `dsh-metaphysics/profiles-v1`:存的是出生日期、时刻、性别、出生地这些**输入**,不是结果;只落本机,不上传。
|
|
7
|
+
- 卡片照市面排盘 App 的命盘列表:一张卡一个人,点卡直接出盘;改名、置顶、删除收在卡片右上角,悬停或键盘聚焦才出现,触屏常驻。置顶在前,其余按最近排过排序;最多 24 张,超出时淘汰最久没排的那张。
|
|
8
|
+
- 档案来自 localStorage,按外部输入对待:逐字段验一遍,日期要真过日历,坏条目整条丢弃,不把 `undefined` 渲染进卡片;同 id 只留第一条。
|
|
9
|
+
- 删除点两次才算;改名会把原称呼读回输入框,改完点「更新这张档案」覆盖原档,创建时间、使用次数与置顶状态不变。
|
|
10
|
+
- 写入失败不再假装成功:`profilesPut` 报失败,删除/置顶/记次数也回滚到存储里的真实状态;浏览器完全没有 localStorage 时同样按失败回报——否则卡片从界面消失、下次进来又复活。
|
|
11
|
+
- 旧版本或手改存储留下的「有日期没时刻」卡不再拿表单里现成的时刻顶上(那会排成另一个人),而是提示先补时刻;这种卡也不算「排过一次」。
|
|
12
|
+
- 称呼框是裸 DOM:面板重绘与单页重绘都先把已输入的字存起来,翻置顶、切视图不会把称呼抹掉。
|
|
13
|
+
|
|
14
|
+
- **复制提问:把盘面和问题整理成一段话,交给任意 AI**(`engine/followup.js`、`engine/bridge.js`、`src/app.js`、`src/web-ui.js`):
|
|
15
|
+
- 追问框优先于「所问之事」:只读主问题时,命盘类没有这个输入框,复制出去的「所问」会永远是默认开场句。
|
|
16
|
+
- 包里带上面板已算好的开场结论(直答/说人话),别的模型开场沿用同一口径;盘面摘要与回答骨架一并带上。
|
|
17
|
+
- 打包失败时按钮给出「暂无可复制内容」并自动复原,不再毫无反应;切方向 / 重绘结果时追问框里已经输入的字保留。
|
|
18
|
+
|
|
19
|
+
- **输入守卫:坏参数不再静默变成另一张盘**(`engine/index.js`、`index.js`、`engine/handle.js`):
|
|
20
|
+
- 经度统一整形并校验:数字串转数字;非有限值或超出 −180…180 报 `E_RANGE`,不再走到真太阳时里炸成裸异常,也不再静默少一次修正。
|
|
21
|
+
- 地址、问题、revise、ask、姓名等自由文本设长度上限——这些串会整段进句柄,不设限等于允许一次调用把结果撑到几百 KB。
|
|
22
|
+
- `datetime` 的秒位真正校验;`asOf` 的小时与分钟必须在范围内,非法值不再被折回另一天。
|
|
23
|
+
- 句柄增量拒绝 `__proto__` / `constructor` / `prototype` 键,避免改掉结果对象的原型。
|
|
24
|
+
- 联网解析失败不写缓存:不会连着六小时把「解析失败」当成答案;风水不再请求出生地解析(经度对盘面没有影响,发给第三方是纯外泄)。
|
|
25
|
+
- `detail` 只接受 `full` / `lean`,写了别的值不再被当成缺省静默放过。
|
|
26
|
+
|
|
27
|
+
- **历算修正**(`engine/calendar.js`、`engine/lunar.js`、`engine/dst.js`、`engine/ziwei.js`、`engine/trend.js`、`engine/random.js`、`engine/rectify.js`、`engine/zeri.js`):
|
|
28
|
+
- `jdToParts` 的分钟进位会让 23:59:45 塌回「当日 00:00」,日柱退一天;改为先归到整秒再向下取整分,拆出的那一天永远就是这一刻所在的那一天。
|
|
29
|
+
- 农历的节气时刻被移了两次时(净偏移约 −12 分),节气落在午夜前后十几分钟内会少算一天,置闰整月错位;修正后 1917 年由「闰三」回到真历表「闰二」、1922 年由「闰六」回到「闰五」。
|
|
30
|
+
- 夏令时换表日给出明确说明:起算日 02:00–03:00 的钟面读数在当年不存在,终止日 01:00–02:00 同一读数对应两个真实时刻——按哪种读法折算写进提示。
|
|
31
|
+
- 紫微流年改用调用方的 `asOf` 作基准年,同一句柄跨年不再排出不同的流年表;人生 K 线按交运年份切段,与虚岁轴对齐,不再整条线提前一年。
|
|
32
|
+
- 随机种子把高位与小数位折进状态:相差 2^32 的种子(如隔 49.7 天的毫秒时间戳)不再摇出同一卦。
|
|
33
|
+
- 生时校正的事件限 200 条、年份限 1600–2400、候选时辰去重后最多 24 个;择日事项错误统一带 `E_INPUT`,`days` 的数字串会被规范化,越界或非数字一律报错,不再静默改成 30 天。
|
|
34
|
+
|
|
35
|
+
- **输出档位与上下文**(`engine/index.js`、`index.js`、`engine/handle.js`):
|
|
36
|
+
- 新增 `detail: "lean"`:只给结论、所问方向那一条与三张表,长论述与「规则·出处」折成一行指针(省约一半文本);盘面、句柄与解析对象不变,影子盘与口径对照也不会把档位当成盘面差异。
|
|
37
|
+
- 工具 schema 把梅花与小六壬的 `mode` 合并进同一个字段并写明三组取值,避免同名字段被后定义覆盖。
|
|
38
|
+
|
|
39
|
+
- **客户端稳定性**(`src/engine-lazy.js`、`src/app.js`):
|
|
40
|
+
- 分块在途请求去重:并发打开两个体系共享同一次下载;失败也清掉在途记录,一次网络抖动不会把分块永久钉在「正在加载」。
|
|
41
|
+
- 面板连续排盘 / 连点 tab 时用序号丢弃过期结果:旧请求不再覆盖新盘,也不再在 await 之后把 tab 拨回去。
|
|
42
|
+
|
|
43
|
+
- **闸门与发布**(`tools/`):
|
|
44
|
+
- `check-html-sinks` 重写:逐插值判定,补上四类旧版漏检(裸变量赋值、一个 `esc(` 救全条、`insertAdjacentHTML` 的第二个实参、`dangerouslySetInnerHTML`),并带可自证的漏检用例。
|
|
45
|
+
- 发布脚本不再 `git add -A`:按目录白名单与扩展名逐路径暂存,点开头的运行痕迹不收,重命名记录正确跳过来源路径。
|
|
46
|
+
- 新增凭据扫描、对拍报告新鲜度校验、分块体积预算(单块 gzip ≤260KB、18 块合计 ≤2.75MB)。
|
|
47
|
+
- `npm test` 现有 147 个测试文件 / 7139 条断言;新测试覆盖档案存储、分块预算、客户端竞态、细节档位、DST 歧义、输入守卫、HTML 注入面、凭据闸。新增断言均通过「把旧实现改回去必须变红」的反向验证。
|
|
48
|
+
|
|
49
|
+
- **真机回归**:`e2e-dom` 137 项、`e2e-panel` 89 项全过,覆盖档案存入/回填/改名/置顶/两次删除/缺时刻拦截、复制提问的所问与开场结论、切方向后追问框保留、深色与窄屏布局、全程无 JS 报错。
|
|
50
|
+
|
|
51
|
+
## 0.59.1(2026-11-02,已发布)
|
|
52
|
+
|
|
53
|
+
> 已发布:npm `dsh-metaphysics@0.59.1`,shasum `43817f74d114121bbbe947c91abc10a825a287b9`,94 个文件。
|
|
2
54
|
|
|
3
55
|
> 本版主题:把「先说结论」从八字/紫微推到全部九个体系,并且堵住三个会让第一屏**说错话**的坑。不新增断法,不改算法;改的是「第一屏能不能读、说的是不是真的」。
|
|
4
56
|
|
|
@@ -153,6 +205,11 @@
|
|
|
153
205
|
|
|
154
206
|
## 未发布
|
|
155
207
|
|
|
208
|
+
- **凭据扫描进约定闸:token 形态的字符串提交不进去**(`tools/check-patterns.mjs`):
|
|
209
|
+
- 起因:npm / GitHub 的发布凭据存在 `<用户目录>/.dsh/metaphysics-autopublish.json`,只从环境变量喂给 `tools/release.mjs`;它一旦被贴进对话、写进文档或提交到仓库,撤回版本也撤不回已推送的历史。
|
|
210
|
+
- 新增第 8 条规则:全仓(跳过 `node_modules` / `.git` / `.workbuddy`)扫 `npm_xxx`、`gh[pousr]_xxx`、`github_pat_xxx`、PEM 私钥头。**命中只打印「文件:行」与原因,绝不回显匹配到的内容**——检查本身不能变成泄露通道。
|
|
211
|
+
- 自检:往仓库根放一个 `npm_` + 40 位的假串,闸门退出码 1 并指出 `_leak-probe.js:1`;删掉后恢复通过。当前 299 个文件无命中。
|
|
212
|
+
|
|
156
213
|
- **面板(宿主侧栏)真机回归:补上最后一层没测过的 UI,并抓到一个三柱盘必崩的 bug**(`tools/e2e-panel.mjs`、`src/app.js`、`package.json`):
|
|
157
214
|
- 缺口在哪:单页 E2E 跑的是 `src/web-ui.js`,面板跑的是 `src/app.js`——两条渲染链只有 `panel-kit` 共用。面板自己的状态(勾选联动、本地历史、深链落地、首屏卡片)此前只有静态字符串断言,等于没跑过。
|
|
158
215
|
- 怎么测:真 Chrome + **真 React 18**,配一个最小宿主——假 `slots` 注册表(`register` / `inject` / `spec`)、假 `ctx.effect`、`assemble()` 打出的全量 client(含引擎),本机 http 起服务(`file://` 下 localStorage 会抛 SecurityError)。把 `PanelIcon` 画进侧栏、主面板画进 `#main`,然后照用户顺序点:切体系 → 排盘 → 勾「时辰未知」→ 起卦 → 切深色 → 缩到 520px → 带 `#mp=` 深链重开。43 项断言。
|