dsh-metaphysics 0.61.1 → 0.61.2
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 +32 -4
- package/client.js +316 -316
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +45 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-metaphysics",
|
|
3
|
-
"version": "0.61.
|
|
3
|
+
"version": "0.61.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "命理排盘(玄学 xuanxue)for DeepSeek Harness: nineteen systems and eleven quick references (almanac, solar–lunar conversion, …), with climate adjustment (tiaohou), the 120 Qiongtong Baojian entries, 1,062-char name library with per-character pinyin, Kangxi stroke counts, five-grid (五格/三才) analysis and mechanical phonetics checks, a 78-card tarot library on the Rider-Waite-Smith base (per-card English name, image description, core meaning and astrological correspondence, cross-checked against three published sources; court cards carry no zodiac by design and the chart says so), classical quotes (Ziping Zhenquan / Di Tian Sui / San Ming Tong Hui), hexagram body relations (六冲/六合/伏吟/反吟/化进神/化退神) plus yongshen placement (用神落位) with month/day strength (月建日辰旺衰) and whole-hexagram per-line strength (全卦逐爻旺衰) and response-time clues (应期线索:逢值/逢冲/逢合 + 月建五态快慢) for liuyao, plus an MBTI-style 16-type questionnaire and exact dayun handover dates (交运日) with annual suiyun hints (岁运并临/伏吟反吟), palace conditions (击刑/入墓), month states (旺相休囚死) and stem–palace relations (天盘干与宫生克) for qimen, flying four-transformations with chained flights (四化飞星串连), three-way-four-corner composite flights (三方四正复合飞化), switchable leap-month policy (闰月按日切分/整月归次月/整月归本月) eleven school switches (亮度/庚干四化/天马/天空/截空旬空/魁钺/天伤天使/长生/晚子时/身主/杂曜全表) for ziwei, the last one opting in to a 61-star minor-star (杂曜) table where each of the twelve extra stars carries its placement verse and the palace it landed in (verses accepted only when at least two independent published editions give the same table, homonymous stars never merged), caliber diffs for bazi/ziwei/qimen (same inputs, one switch, root-field changes), shadow-chart IDs (same normalized params → same ID; version bumps auto-diff chart fields), step-by-step deduction traces (liuyao najia→liuqin→shiying→fushen→strength; bazi strength score and pattern/yongshen; ziwei pattern conditions), and a bundled offline single-file page (命理排盘.html), a panel-to-chat handoff that asks the Harness about a finished chart, per-tab lazy engine chunks so the first-screen client bundle stays under 100KB gzip, and a public verification report (128 classical hexagram cases, 312 Zi Wei charts × 34 patterns, 12 dayun handover cases) generated from the same source that gates CI.",
|
|
6
6
|
"keywords": [
|
|
@@ -362,7 +362,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
362
362
|
<div class="wrap">
|
|
363
363
|
<header>
|
|
364
364
|
<div class="brand-row">
|
|
365
|
-
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.61.
|
|
365
|
+
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.61.2</span><small>八字 · 紫微 · 六爻 · 梅花 · 六壬 · 奇门 · 合盘 · 塔罗 全部在本机计算</small></span></div>
|
|
366
366
|
<div class="view-switch">
|
|
367
367
|
<span class="hint">熟练了可以换回平铺</span>
|
|
368
368
|
<span class="seg" role="group" aria-label="首屏样式">
|
|
@@ -653,7 +653,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
653
653
|
<h3>对拍:把典籍当期望值</h3>
|
|
654
654
|
<ul><li>六爻:京房八宫卦序与世应,64 卦全表;旬空六旬表</li><li>六壬:日干寄宫、中气换将;紫微:纳音定五行局、紫微天府相照</li><li>卦例:《增删卜易》9 条 +《卜筮正宗》128 条(93 成对 + 35 静卦),核本变卦 / 动爻数 / 卦宫 / 缺爻 / 旬空</li><li>奇门:20 个时辰 × 9 宫,核四柱 / 局数 / 值符 / 值使 / 星门神 / 天盘干</li></ul>
|
|
655
655
|
<h3>工程验证</h3>
|
|
656
|
-
<ul><li>测试:154 个测试文件 /
|
|
656
|
+
<ul><li>测试:154 个测试文件 / 7637 条断言;七道闸(回归 · 断言基线 · 测试可失败自检 · HTML 注入面 · 工程约定 · 产物宿主形态 · 随机扫射)</li><li>可复现:seed / asOf 显式;同一输入同一输出</li><li>口径:晚子时、真太阳时、奇门三流派、闰月归月都可切换,并有字段级差异对照</li></ul>
|
|
657
657
|
|
|
658
658
|
<h3>已知边界(不猜)</h3>
|
|
659
659
|
<ul><li>六爻应期(具体哪天应验)不做;卦例只录动爻个数,不录爻位</li><li>财富/健康只给结构判断与档位,不给金额区间、不作诊断</li><li>紫微飞星已做「单一支化逐宫追到成环」与「三方四正 16 条按落宫归堆」,但都未叠大限流年四化、不折吉凶;八字交运日已能算到日/时,但未与第三方排盘案例批量对拍</li></ul>
|
|
@@ -26320,7 +26320,7 @@ return { interpret, DIRECTIONS, DIRECTION_DEFAULT, BRIGHTNESS, flowOf, geocodeAd
|
|
|
26320
26320
|
})();
|
|
26321
26321
|
|
|
26322
26322
|
window.Engine = __mods.index;
|
|
26323
|
-
window.__MP_VER = "0.61.
|
|
26323
|
+
window.__MP_VER = "0.61.2";
|
|
26324
26324
|
</script>
|
|
26325
26325
|
<script>
|
|
26326
26326
|
// 两个 UI 共用的表单规则:宿主面板(src/app.js)与独立页(src/web-ui.js)。
|
|
@@ -29805,6 +29805,9 @@ window.__MP_VER = "0.61.1";
|
|
|
29805
29805
|
hourUnknown: hu,
|
|
29806
29806
|
gender: String(src.gender || ''),
|
|
29807
29807
|
address: String(src.address || ''),
|
|
29808
|
+
// 两个开关也换一张盘:不随档案存,载入时就会跟着表单此刻的勾选排
|
|
29809
|
+
trueSolar: src.trueSolar !== false,
|
|
29810
|
+
lateZi: src.lateZi !== false,
|
|
29808
29811
|
pinned: false,
|
|
29809
29812
|
createdAt: Date.now(),
|
|
29810
29813
|
lastUsedAt: 0,
|
|
@@ -30464,10 +30467,16 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30464
30467
|
const puts = [['date', p.date], ['time', p.hourUnknown ? '' : p.time], ['gender', p.gender], ['addr', p.address]];
|
|
30465
30468
|
for (const pair of puts) {
|
|
30466
30469
|
const node = el(pair[0]);
|
|
30467
|
-
|
|
30470
|
+
// 空出生地也要写回去:留着上一个地址,这张盘的真太阳时就会按别人的地方算
|
|
30471
|
+
if (node) node.value = pair[1] || '';
|
|
30468
30472
|
}
|
|
30469
30473
|
const hu = el('hourunknown');
|
|
30470
30474
|
if (hu) hu.checked = !!p.hourUnknown;
|
|
30475
|
+
// 旧档案没存开关:按默认(都开)处理,别沿用表单此刻的勾选
|
|
30476
|
+
const tsBox = el('ts');
|
|
30477
|
+
if (tsBox) tsBox.checked = p.trueSolar !== false;
|
|
30478
|
+
const lzBox = el('latezi');
|
|
30479
|
+
if (lzBox) lzBox.checked = p.lateZi !== false;
|
|
30471
30480
|
// 把这次回填当成「用户填的」:否则切走再切回出生类体系时会被上一次的自动值顶掉
|
|
30472
30481
|
onManualEdit();
|
|
30473
30482
|
run();
|
|
@@ -30480,9 +30489,14 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30480
30489
|
const hu = el('hourunknown');
|
|
30481
30490
|
const box = el('profwrap');
|
|
30482
30491
|
const nameEl = box ? box.querySelector('.mp-prof-name') : null;
|
|
30492
|
+
const tsBox = el('ts');
|
|
30493
|
+
const lzBox = el('latezi');
|
|
30483
30494
|
return PP.profFromForm({
|
|
30484
30495
|
kind: tab, date: v('date'), time: v('time'), gender: v('gender'), address: v('addr'),
|
|
30485
30496
|
hourUnknown: !!(hu && hu.checked),
|
|
30497
|
+
// 两个开关决定时柱:随档案存下来,载入才能回到当初那张盘
|
|
30498
|
+
trueSolar: !(tsBox && !tsBox.checked),
|
|
30499
|
+
lateZi: !(lzBox && !lzBox.checked),
|
|
30486
30500
|
}, nameEl ? nameEl.value : '', profEditing || undefined);
|
|
30487
30501
|
}
|
|
30488
30502
|
|
|
@@ -30513,7 +30527,8 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30513
30527
|
const puts = [['date', p.date], ['time', p.hourUnknown ? '' : p.time], ['gender', p.gender], ['addr', p.address]];
|
|
30514
30528
|
for (const pair of puts) {
|
|
30515
30529
|
const node = el(pair[0]);
|
|
30516
|
-
|
|
30530
|
+
// 同上:这张档案没存地址就把框清空,别让「更新」把别人的地址存进来
|
|
30531
|
+
if (node) node.value = pair[1] || '';
|
|
30517
30532
|
}
|
|
30518
30533
|
const hu = el('hourunknown');
|
|
30519
30534
|
if (hu) hu.checked = !!p.hourUnknown;
|
|
@@ -30665,9 +30680,10 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30665
30680
|
fillDateTime(manual[k] || defaultFor(k));
|
|
30666
30681
|
}
|
|
30667
30682
|
|
|
30668
|
-
/** 当前 tab
|
|
30683
|
+
/** 当前 tab 是否真的用到日期/时刻(塔罗、人格不看时间;梅花「数字起卦」也不用)
|
|
30684
|
+
* 与 syncMhMode 里的显隐共用这一处判断:字段既然藏起来了,run() 就不能拿它拦人。 */
|
|
30669
30685
|
function usesTimeInput() {
|
|
30670
|
-
return !(tab === 'meihua' && mhMode === 'number');
|
|
30686
|
+
return tab !== 'tarot' && tab !== 'mbti' && !(tab === 'meihua' && mhMode === 'number');
|
|
30671
30687
|
}
|
|
30672
30688
|
|
|
30673
30689
|
/** 用户手动改了日期或时刻 */
|
|
@@ -30954,11 +30970,11 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30954
30970
|
day: Number(last.date.slice(8, 10)),
|
|
30955
30971
|
minute: Number(last.time.slice(3, 5)) || 0,
|
|
30956
30972
|
},
|
|
30957
|
-
gender:
|
|
30973
|
+
gender: last.gender,
|
|
30958
30974
|
events,
|
|
30959
|
-
lateZi:
|
|
30960
|
-
trueSolar:
|
|
30961
|
-
address:
|
|
30975
|
+
lateZi: last.lateZi !== false,
|
|
30976
|
+
trueSolar: last.trueSolar !== false,
|
|
30977
|
+
address: last.address || undefined,
|
|
30962
30978
|
}) : { error: '当前页面未加载生时校正模块' };
|
|
30963
30979
|
} catch (e) { rectOut = { error: e && e.message ? e.message : String(e) }; }
|
|
30964
30980
|
const out = el('rectout');
|
|
@@ -31062,7 +31078,8 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31062
31078
|
// 推导链只覆盖六爻 / 八字 / 紫微
|
|
31063
31079
|
args.trace = tab === 'liuyao' || tab === 'bazi' || tab === 'ziwei' || tab === 'qimen' || tab === 'daliuren';
|
|
31064
31080
|
if (tab !== 'tarot') args.datetime = `${date}T${time}`;
|
|
31065
|
-
|
|
31081
|
+
// 人生K线也是出生盘:出生地决定真太阳时,落进时柱后会改变整条运程
|
|
31082
|
+
if (tab === 'bazi' || tab === 'ziwei' || tab === 'hepan' || tab === 'trend') {
|
|
31066
31083
|
// 合盘主方同样要性别与出生地:引擎里合盘的性别是必填,地址决定真太阳时
|
|
31067
31084
|
args.gender = el('gender').value;
|
|
31068
31085
|
if (hourUnknown) args.hourUnknown = true;
|
|
@@ -31144,8 +31161,9 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31144
31161
|
args.num3 = Number(el('num3').value) || undefined;
|
|
31145
31162
|
} else {
|
|
31146
31163
|
args.date = date;
|
|
31147
|
-
|
|
31148
|
-
|
|
31164
|
+
// Number('') 是 0:时刻框被清空时不能悄悄按子时起课,退回正午
|
|
31165
|
+
const hm = /^(\d{1,2}):/.exec(String(time));
|
|
31166
|
+
args.hour = hm ? Number(hm[1]) : 12;
|
|
31149
31167
|
}
|
|
31150
31168
|
}
|
|
31151
31169
|
if (tab === 'convert') {
|
|
@@ -31164,7 +31182,8 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31164
31182
|
if (nums.length) args.answers = nums;
|
|
31165
31183
|
}
|
|
31166
31184
|
if (tab === 'trend' && hourUnknown) args.hourUnknown = true;
|
|
31167
|
-
|
|
31185
|
+
// 性别 / 出生地 / 两个开关已在上面的出生盘分支里给齐,这里只补 K 线自己的参数
|
|
31186
|
+
if (tab === 'trend') args.toAge = Number(el('toage').value) || 60;
|
|
31168
31187
|
if (tab === 'fengshui') {
|
|
31169
31188
|
args.action = fsMode;
|
|
31170
31189
|
if (fsMode === 'natal') { args.gender = el('gender').value; }
|
|
@@ -31250,7 +31269,16 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31250
31269
|
: tab === 'mbti' ? window.__PP.mbtiHTML(r)
|
|
31251
31270
|
: tab === 'fengshui' ? window.__PP.fengshuiHTML(r)
|
|
31252
31271
|
: window.__PP.quickHTML(r));
|
|
31253
|
-
|
|
31272
|
+
// 新盘就是新的一轮:上一次的自评、贴合度、候选时辰不能跟着贴到这张盘上
|
|
31273
|
+
// (它们只在模块里存着,重绘不会自己清)。
|
|
31274
|
+
pastMarks = {}; pastFit = null; rectOut = null;
|
|
31275
|
+
// 生时校正要按「这张盘自己的输入」反推:档案/表单在排完之后还能改,
|
|
31276
|
+
// 只读 last.date 而性别、出生地读表单,候选时辰就会贴到另一张盘上
|
|
31277
|
+
last = { r, html, tab, date, time, timed, trend, caliber, shadowDiff,
|
|
31278
|
+
gender: args.gender || el('gender').value,
|
|
31279
|
+
address: typeof args.address === 'string' ? args.address : '',
|
|
31280
|
+
trueSolar: typeof args.trueSolar === 'boolean' ? args.trueSolar : true,
|
|
31281
|
+
lateZi: typeof args.lateZi === 'boolean' ? args.lateZi : true };
|
|
31254
31282
|
const paintStart = mpNow();
|
|
31255
31283
|
paint();
|
|
31256
31284
|
// 渲染=组 HTML + 写入 DOM 的同步时间;浏览器真正绘制在下一帧,这里不假装量到
|
|
@@ -31373,7 +31401,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31373
31401
|
const mhNum = tab === 'meihua' && mhMode === 'number';
|
|
31374
31402
|
el('mh-num').style.display = mhNum ? '' : 'none';
|
|
31375
31403
|
// 梅花「数字起卦」不参与时间计算,日期/时刻在此模式下隐藏,避免误导;人格问卷同样与日期无关
|
|
31376
|
-
const showDT =
|
|
31404
|
+
const showDT = usesTimeInput();
|
|
31377
31405
|
el('for-date').style.display = showDT ? '' : 'none';
|
|
31378
31406
|
// 「时辰未知」只对八字与人生K线开放:紫微/合盘没有时支就没有盘,不提供这个勾选
|
|
31379
31407
|
const canUnknown = tab === 'bazi' || tab === 'trend';
|