dsh-metaphysics 0.73.0 → 0.74.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/client.js CHANGED
@@ -1,4 +1,4 @@
1
- window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){const Ja=(function(){try{return dt("react")}catch{return globalThis.React}})();if(!Ja)return{inject:[],apply(){}};const r=Ja.createElement,ii={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js",constitution:"client.constitution.js",wuyunliuqi:"client.wuyunliuqi.js",taiyi:"client.taiyi.js"},ni=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.73.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次问事"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",label:"梅花",tip:"见闻起卦"},{k:"qimen",label:"奇门",tip:"看方位时机"},{k:"daliuren",label:"六壬",tip:"占事断来意"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算"}]},{title:"看一个人",hint:"看自己或身边人的性情与格局",items:[{k:"bazi",label:"八字",tip:"四柱看格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两人合不合"},{k:"mbti",label:"人格",tip:"16 型问卷"},{k:"constitution",label:"体质",tip:"九种体质"},{k:"chenggu",label:"称骨",tip:"生辰称命重"},{k:"trend",label:"人生K",tip:"一生走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,看一年的气与方位",items:[{k:"almanac",label:"黄历",tip:"今日宜忌"},{k:"zeri",label:"择日",tip:"挑好日子"},{k:"convert",label:"农历",tip:"公历农历"},{k:"wuyunliuqi",label:"运气",tip:"一年大势"},{k:"taiyi",label:"太乙",tip:"积年推局"},{k:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]}],window.__MP_UNRELEASED=[];const X={};X.DIRECTIONS=ni,X.compute=()=>{throw new Error("命理引擎尚未加载")};const si=Object.create(null),Et=Object.create(null);function on(n){return ii[n]||ii.bazi||"client.chart.js"}const oi=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function pn(n){const s=on(n);let S=si[s];const F=!!S,ee=oi();if(!S){if(!dt||typeof dt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let se=Et[s];se||(se=dt.async(`./${s}`).then(le=>{const re=le&&(le.Engine||le.default);if(!re||typeof re.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return si[s]=re,re}),Et[s]=se,se.catch(()=>{}).then(()=>{delete Et[s]})),S=await se}for(const se of Object.keys(S))S[se]!==void 0&&(X[se]=S[se]);return Array.isArray(X.DIRECTIONS)||(X.DIRECTIONS=ni),window.Engine=X,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:F,ms:Math.round((oi()-ee)*10)/10},X}window.__mpEnsureEngine=pn,window.Engine=X,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=Z=>!!n[Z],S={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},F=Z=>S[Z]||"other",ee="#ffffff",se="#1c1a15";function le(Z){const K=String(Z??"").match(/rgba?\(([^)]+)\)/i);if(!K)return null;const V=K[1].split(/[,\s/]+/).filter(Boolean).map(Number);return V.length<3||V.slice(0,3).some(G=>!Number.isFinite(G))||V.length>3&&Number.isFinite(V[3])&&V[3]<.95?null:[V[0],V[1],V[2]]}function re(Z){const K=String(Z||"").replace("#",""),V=K.length===3?K.split("").map(G=>G+G).join(""):K;return/^[0-9a-f]{6}$/i.test(V)?[0,2,4].map(G=>parseInt(V.slice(G,G+2),16)):null}function ve(Z){const K=V=>{const G=V/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*K(Z[0])+.7152*K(Z[1])+.0722*K(Z[2])}function t(Z,K){const V=ve(Z),G=ve(K),te=Math.max(V,G),Me=Math.min(V,G);return(te+.05)/(Me+.05)}function $e(Z){const K=typeof Z=="string"?le(Z):Z;return K?t(K,re(ee))>=t(K,re(se))?ee:se:""}function I(Z){const K=String(Z??"").trim();if(!K)return{lines:null,warning:""};const V=K.split(/[^0-9]+/).filter(Boolean).map(Number),G=V.filter(te=>![6,7,8,9].includes(te));return V.length===6&&G.length===0?{lines:V,warning:""}:{lines:null,warning:V.length!==6?`爻值需要正好 6 个数字(当前 ${V.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(Z){const K=String(Z??"").trim();if(!K)return null;const V=Number(K);return Number.isFinite(V)?V:null}function we(Z){const K=Z instanceof Date?Z:new Date,V=G=>String(G).padStart(2,"0");return`${K.getFullYear()}-${V(K.getMonth()+1)}-${V(K.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:I,toNumber:xe,parseRGB:le,hexToRGB:re,luminance:ve,contrastRatio:t,pickOnColor:$e,ON_DARK:ee,ON_LIGHT:se,kindOfDirection:F,todayStamp:we}})(),(function(){const n=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.74.0",factory(dt){const Ja=(function(){try{return dt("react")}catch{return globalThis.React}})();if(!Ja)return{inject:[],apply(){}};const r=Ja.createElement,ii={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js",constitution:"client.constitution.js",wuyunliuqi:"client.wuyunliuqi.js",taiyi:"client.taiyi.js"},ni=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.74.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次问事"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",label:"梅花",tip:"见闻起卦"},{k:"qimen",label:"奇门",tip:"看方位时机"},{k:"daliuren",label:"六壬",tip:"占事断来意"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算"}]},{title:"看一个人",hint:"看自己或身边人的性情与格局",items:[{k:"bazi",label:"八字",tip:"四柱看格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两人合不合"},{k:"mbti",label:"人格",tip:"16 型问卷"},{k:"constitution",label:"体质",tip:"九种体质"},{k:"chenggu",label:"称骨",tip:"生辰称命重"},{k:"trend",label:"人生K",tip:"一生走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,看一年的气与方位",items:[{k:"almanac",label:"黄历",tip:"今日宜忌"},{k:"zeri",label:"择日",tip:"挑好日子"},{k:"convert",label:"农历",tip:"公历农历"},{k:"wuyunliuqi",label:"运气",tip:"一年大势"},{k:"taiyi",label:"太乙",tip:"积年推局"},{k:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]}],window.__MP_UNRELEASED=[];const X={};X.DIRECTIONS=ni,X.compute=()=>{throw new Error("命理引擎尚未加载")};const si=Object.create(null),Et=Object.create(null);function on(n){return ii[n]||ii.bazi||"client.chart.js"}const oi=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function pn(n){const s=on(n);let S=si[s];const F=!!S,ee=oi();if(!S){if(!dt||typeof dt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let se=Et[s];se||(se=dt.async(`./${s}`).then(le=>{const re=le&&(le.Engine||le.default);if(!re||typeof re.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return si[s]=re,re}),Et[s]=se,se.catch(()=>{}).then(()=>{delete Et[s]})),S=await se}for(const se of Object.keys(S))S[se]!==void 0&&(X[se]=S[se]);return Array.isArray(X.DIRECTIONS)||(X.DIRECTIONS=ni),window.Engine=X,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:F,ms:Math.round((oi()-ee)*10)/10},X}window.__mpEnsureEngine=pn,window.Engine=X,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=Z=>!!n[Z],S={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},F=Z=>S[Z]||"other",ee="#ffffff",se="#1c1a15";function le(Z){const K=String(Z??"").match(/rgba?\(([^)]+)\)/i);if(!K)return null;const V=K[1].split(/[,\s/]+/).filter(Boolean).map(Number);return V.length<3||V.slice(0,3).some(G=>!Number.isFinite(G))||V.length>3&&Number.isFinite(V[3])&&V[3]<.95?null:[V[0],V[1],V[2]]}function re(Z){const K=String(Z||"").replace("#",""),V=K.length===3?K.split("").map(G=>G+G).join(""):K;return/^[0-9a-f]{6}$/i.test(V)?[0,2,4].map(G=>parseInt(V.slice(G,G+2),16)):null}function ve(Z){const K=V=>{const G=V/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*K(Z[0])+.7152*K(Z[1])+.0722*K(Z[2])}function t(Z,K){const V=ve(Z),G=ve(K),te=Math.max(V,G),Me=Math.min(V,G);return(te+.05)/(Me+.05)}function $e(Z){const K=typeof Z=="string"?le(Z):Z;return K?t(K,re(ee))>=t(K,re(se))?ee:se:""}function I(Z){const K=String(Z??"").trim();if(!K)return{lines:null,warning:""};const V=K.split(/[^0-9]+/).filter(Boolean).map(Number),G=V.filter(te=>![6,7,8,9].includes(te));return V.length===6&&G.length===0?{lines:V,warning:""}:{lines:null,warning:V.length!==6?`爻值需要正好 6 个数字(当前 ${V.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(Z){const K=String(Z??"").trim();if(!K)return null;const V=Number(K);return Number.isFinite(V)?V:null}function we(Z){const K=Z instanceof Date?Z:new Date,V=G=>String(G).padStart(2,"0");return`${K.getFullYear()}-${V(K.getMonth()+1)}-${V(K.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:I,toNumber:xe,parseRGB:le,hexToRGB:re,luminance:ve,contrastRatio:t,pickOnColor:$e,ON_DARK:ee,ON_LIGHT:se,kindOfDirection:F,todayStamp:we}})(),(function(){const n=`
2
2
  .pp,.mp-it,.mp-al,.mp-cg,.mp-cl,.mp-cli,.mp-kline,.mp-mb,.mp-mb-paper,.mp-nm,.mp-quick,.mp-cdiff,.mp-shadow,.mp-trace-card,.mp-trace-layer,.mp-prof{--ink:#1b1b1b;--ink2:#3f3a33;--muted:#6f6a60;--label:#8a8378;--faint:#a9a296;
3
3
  --line:#c8c1b2;--dimline:#b9b2a4;--hair:#e9e2d3;
4
4
  /* 底色略沉作「桌面」,--card 跳到近白:原先 bg 与 card 只差 1/255,卡片感等于零。
@@ -167,7 +167,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
167
167
  #ppm-ben:checked~.pp-modes label[for="ppm-ben"],#ppm-da:checked~.pp-modes label[for="ppm-da"],#ppm-ln:checked~.pp-modes label[for="ppm-ln"]{background:var(--red);color:var(--on-accent)}
168
168
  .pp-tri{background:var(--tri)}
169
169
  .pp-soul{background:var(--soul)}
170
- /* 三视图切换(学文墨天机:飞星/三合/四化)——真分派,不是同一张盘的显隐开关:
170
+ /* 三视图切换(三视图:飞星/三合/四化)——真分派,不是同一张盘的显隐开关:
171
171
  四化派(默认):生年四化实心 + 大限/流年空心 + 自化 + 飞星链 chips;
172
172
  飞星派:每宫格内显示「宫干四化飞出」逐条(禄→某宫…),图例藏大限/流年四化;
173
173
  三合派:只看星曜庙旺与宫位结构,所有四化徽章(含生年)、自化、飞星链全部藏起。 */
@@ -200,7 +200,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
200
200
  #ppm-sc-sanhe:checked~.pp-body .pp-zha,
201
201
  #ppm-sc-sanhe:checked~.pp-body .pp-viewhua,
202
202
  #ppm-sc-sanhe:checked~.pp-flywrap{display:none}
203
- /* 自化箭头(学文墨天机):自化是「宫干化回本宫」,箭头画在星名左边、箭头尖顶住星名,
203
+ /* 自化箭头:自化是「宫干化回本宫」,箭头画在星名左边、箭头尖顶住星名,
204
204
  由左向右弧着落回这颗星——读成「这笔化飞出去又落回自己」。
205
205
  为什么必须放星名左边:放右边箭头就朝外,视觉上成了「从本宫飞出去」,意思正好反了。
206
206
  为什么 inline 在星名旁而不是绝对定位:宫格左侧会被满星曜的宫撞上(实测压住「紫微 庙」)。 */
@@ -212,7 +212,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
212
212
  .pp-zha.ke{color:var(--ke)}.pp-zha.ji{color:var(--ji)}
213
213
  #ppm-sc-sihe:checked~.pp-flywrap{display:block}
214
214
  #ppm-sc-feixing:checked~.pp-flywrap{display:block}
215
- /* 自化图示(文墨式图例行):箭头颜色跟四化色走 */
215
+ /* 自化图例行:箭头颜色跟四化色走 */
216
216
  .pp-zhlegend{display:flex;gap:10px;align-items:center;justify-content:center;font-size:12px;color:var(--muted);margin-top:4px}
217
217
  .pp-zhlegend i{font-style:normal;font-weight:600}
218
218
  .pp-zhlegend .z-lu{color:var(--lu)}.pp-zhlegend .z-quan{color:var(--quan)}
@@ -1516,7 +1516,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
1516
1516
  /* 结果卡阴影分层:默认最轻,hover 时浮起一档(只对可交互的卡,避免整页抖动) */
1517
1517
  .pp{transition:box-shadow var(--dur) var(--ease)}
1518
1518
 
1519
- /* —— 文墨式「显示设置」14 项(学文墨天机 group_fxp / group_4hb / group_3hp)——
1519
+ /* —— 「显示设置」分组(group_fxp / group_4hb / group_3hp)——
1520
1520
  纯 CSS 显隐:勾了盘面立刻变,不重排盘、不进引擎、不进工具 schema。
1521
1521
  复选框必须是 .pp 的直接子元素,才能用 ~ 命中后面的 .pp-body / .pp-zhlegend。
1522
1522
  组1/组2 默认勾(:not(:checked) 才隐藏),组3 默认不勾(:checked 才增强,默认盘观感不变)。 */
@@ -1628,7 +1628,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
1628
1628
  <input type="radio" name="ppm-sc" id="ppm-sc-sihe" class="pp-r" checked>
1629
1629
  <input type="radio" name="ppm-sc" id="ppm-sc-feixing" class="pp-r">
1630
1630
  <input type="radio" name="ppm-sc" id="ppm-sc-sanhe" class="pp-r">
1631
- <!-- 文墨式显示设置:14 个复选框必须与 .pp-body / .pp-zhlegend 同层(.pp 的直接子元素)。
1631
+ <!-- 显示设置:14 个复选框必须与 .pp-body / .pp-zhlegend 同层(.pp 的直接子元素)。
1632
1632
  组1/组2 默认勾(观感与旧版一致),组3 默认不勾(纯增强)。不重排盘、不进引擎。 -->
1633
1633
  <input type="checkbox" id="ppm-d-ss" class="pp-r" checked>
1634
1634
  <input type="checkbox" id="ppm-d-sbg" class="pp-r" checked>
@@ -1648,7 +1648,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){
1648
1648
  <input type="checkbox" id="ppm-d-njq" class="pp-r">
1649
1649
  <input type="checkbox" id="ppm-d-tjz" class="pp-r">
1650
1650
  <details class="pp-disp">
1651
- <summary>显示设置 · 17 项(学文墨天机)</summary>
1651
+ <summary>显示设置 · 17 项</summary>
1652
1652
  <div class="pp-disp-g"><span>飞星派显示</span>
1653
1653
  <label for="ppm-d-ss"><i class="pp-disp-box"></i>显示神煞</label>
1654
1654
  <label for="ppm-d-sbg"><i class="pp-disp-box"></i>三台八座恩光天贵</label>
@@ -1,13 +1,13 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="455" height="28" role="img" aria-label="公开对拍:0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运">
2
- <title>公开对拍:0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运</title>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="507" height="28" role="img" aria-label="公开对拍:0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运 · 18 八字">
2
+ <title>公开对拍:0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运 · 18 八字</title>
3
3
  <linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient>
4
- <rect width="455" height="28" rx="4" fill="#555"/>
5
- <rect x="62" width="393" height="28" rx="4" fill="#1f6f3f"/>
6
- <rect x="62" width="393" height="28" fill="url(#s)"/>
4
+ <rect width="507" height="28" rx="4" fill="#555"/>
5
+ <rect x="62" width="445" height="28" rx="4" fill="#1f6f3f"/>
6
+ <rect x="62" width="445" height="28" fill="url(#s)"/>
7
7
  <rect width="66" height="28" rx="4" fill="#555"/>
8
8
  <rect x="62" width="4" height="28" fill="#555"/>
9
9
  <g fill="#fff" text-anchor="middle" font-family="Verdana,DejaVu Sans,sans-serif" font-size="11">
10
10
  <text x="33" y="18">对拍</text>
11
- <text x="258.5" y="18">0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运</text>
11
+ <text x="284.5" y="18">0 处不符|128 例 · 5 剔除 · 127 未核 · 312 紫微 · 20 奇门 · 12 交运 · 18 八字</text>
12
12
  </g>
13
13
  </svg>
package/engine/ziwei.js CHANGED
@@ -127,7 +127,7 @@ export const ZIWEI_SCHOOL_OPTIONS = Object.freeze({
127
127
  mingzhuSchool: ['soul-branch', 'year-branch'],
128
128
  zuoyaoSchool: ['minimal', 'full'],
129
129
  liunianSihua: ['year-stem', 'life-palace-stem'],
130
- // 十干四化变体:default 表示各干用本插件原有通行表;其余按文墨变体名整表替换。
130
+ // 十干四化变体:default 表示各干用本插件原有通行表;其余按变体名整表替换。
131
131
  // 只列与 default 不同的那一档(default 之外全是「换掉某一干」的显式选择)。
132
132
  sihuaVariant: ['default', '廉破曲阳', '贪阴阳机', '阳武同阴', '阳武府同', '阳武府相',
133
133
  '阳武同相', '巨阳武昌', '梁紫府武', '梁紫相武', '破巨阳贪'],
@@ -247,10 +247,10 @@ const GENG_MUTAGEN = {
247
247
  GYWTX: { 太阳: '禄', 武曲: '权', 天同: '科', 天相: '忌' },
248
248
  };
249
249
 
250
- // 十干四化变体全表(文墨天机「十干四化」,2026-11 从 WMTJ-Pro64-2.5.26 的 App.swf 常量表挖出)。
251
- // 变体名一律取文墨原文四字,按「禄 权 科 忌」的顺序念,所以名字本身就是这张表:
250
+ // 十干四化变体全表(十干四化变体全表)。
251
+ // 变体名一律取口诀四字,按「禄 权 科 忌」的顺序念,所以名字本身就是这张表:
252
252
  // 「廉破曲阳」= 廉贞化禄、破军化权、文曲化科、太阳化忌。
253
- // 每干第一个是与本插件原有默认表完全一致的那一档,乙丙丁己四干文墨没有变体。
253
+ // 每干第一个是与本插件原有默认表完全一致的那一档,乙丙丁己四干无通行变体。
254
254
  // 这张表和 gengYearSihua 不是一回事:gengYearSihua 只换生年四化里庚年那一支,
255
255
  // sihuaVariant 换的是整张十干四化表(生年、宫干自化、大限宫干、飞星、流年一起走)。
256
256
  export const SIHUA_VARIANTS = Object.freeze({
@@ -777,7 +777,7 @@ export function buildZiwei(input) {
777
777
  const xxPalace = palaces.find((p) => p.xiaoxian.age === xxAge);
778
778
  const dxPalace = palaces.find((p) => age >= p.daxian.start && age <= p.daxian.end);
779
779
  // 流年四化取干:默认按流年天干;liunianSihua: life-palace-stem 改按该年命宫
780
- // 的宫干(文墨设置树里的「依据流年命宫天干」)。这两干各依不同的表:年干随年份走,
780
+ // 的宫干(「依据流年命宫天干」口径)。这两干各依不同的表:年干随年份走,
781
781
  // 命宫宫干由五虎遁从出生年干起,所以实测十二年会换掉十二次,不是只差个别年。
782
782
  // 取哪一干必须随盘回显,否则用户看不出四颗化星是被哪张表定的。
783
783
  const lnStemOf = (() => {
@@ -858,7 +858,7 @@ export function buildZiwei(input) {
858
858
  hourBranch,
859
859
  yearGanzhi: yearGanzhi.name,
860
860
  ...((() => {
861
- // 非节气四柱(紫微斗数口径,文墨「显示非节气四柱」开关的数据源):
861
+ // 非节气四柱(紫微斗数口径,「显示非节气四柱」开关的数据源):
862
862
  // 紫微按农历排盘,年柱以正月初一换岁(lunarYear 已是此口径)、月柱按农历月配五虎遁;
863
863
  // 日柱、时柱与节气版完全一致(日时不受节气影响)。与八字(节气)四柱只在立春前后的
864
864
  // 出生者上年/月两柱有差异,正好给用户对照。
@@ -951,7 +951,7 @@ export function buildZiwei(input) {
951
951
  rules: {
952
952
  ziweiPlacement: '借数法:局数除日数取商,商数自寅宫顺行,借数奇逆偶顺',
953
953
  mutagen: '生年四化用中州派常用表;庚干可按流派切换(默认阳武阴同,另有同科阴忌、府科、府科相忌、同科相忌)',
954
- schools: `流派开关:亮度 ${schools.brightnessSchool}、庚干四化 ${schools.gengYearSihua}、天马 ${schools.tianmaSchool}、天空 ${schools.tiankongSchool}、截空 ${schools.jiekongSchool}、魁钺 ${schools.kuiyueSchool}、天伤天使 ${schools.tianshiTianshang}、长生 ${schools.changshengSchool}、晚子时 ${schools.lateZishi}、身主 ${schools.shenzhuSchool}(common 子午皆火星 / verse 子铃午火)、命主 ${schools.mingzhuSchool}(soul-branch 按命宫地支 / year-branch 按生年年支)、杂曜 ${schools.zuoyaoSchool}(minimal 49 颗 / full 61 颗)、流年四化取干 ${schools.liunianSihua}(year-stem 按流年天干 / life-palace-stem 按流年命宫宫干)、十干四化 ${schools.sihuaVariant}(default 各干通行表,其余为文墨变体整表替换)、截路空亡 ${schools.jieluSchool}(off 照常排 / zhongzhou 整组不排)、岁前十二神 ${schools.suipoSchool}(off 照常 / zhongzhou 大耗改岁破);庚干四化只作用于生年四化,sihuaVariant 换的是宫干自化、大限宫干、飞星与流年共用的那张表`,
954
+ schools: `流派开关:亮度 ${schools.brightnessSchool}、庚干四化 ${schools.gengYearSihua}、天马 ${schools.tianmaSchool}、天空 ${schools.tiankongSchool}、截空 ${schools.jiekongSchool}、魁钺 ${schools.kuiyueSchool}、天伤天使 ${schools.tianshiTianshang}、长生 ${schools.changshengSchool}、晚子时 ${schools.lateZishi}、身主 ${schools.shenzhuSchool}(common 子午皆火星 / verse 子铃午火)、命主 ${schools.mingzhuSchool}(soul-branch 按命宫地支 / year-branch 按生年年支)、杂曜 ${schools.zuoyaoSchool}(minimal 49 颗 / full 61 颗)、流年四化取干 ${schools.liunianSihua}(year-stem 按流年天干 / life-palace-stem 按流年命宫宫干)、十干四化 ${schools.sihuaVariant}(default 各干通行表,其余为变体表整表替换)、截路空亡 ${schools.jieluSchool}(off 照常排 / zhongzhou 整组不排)、岁前十二神 ${schools.suipoSchool}(off 照常 / zhongzhou 大耗改岁破);庚干四化只作用于生年四化,sihuaVariant 换的是宫干自化、大限宫干、飞星与流年共用的那张表`,
955
955
  zuoyao: schools.zuoyaoSchool === 'full'
956
956
  ? `全表十二颗已安:生月 解神、天巫、天月、阴煞;生年干 天官、天福、天厨;生年支 蜚廉、天德、年解;命宫+生年支 天才、身宫+生年支 天寿。蜚廉与博士十二神的飞廉同名异星,年解与月解(解神)分列,天德与岁前十二神的天德同名异宫。`
957
957
  : `本盘按 49 颗的通行简盘安星,未排全表杂曜。开 zuoyaoSchool: "full" 追加十二颗:解神、天巫、天月、阴煞(生月)、天官、天福、天厨(生年干)、蜚廉、天德、年解(生年支)、天才(命宫+生年支)、天寿(身宫+生年支),每颗都带安星诀。`,
package/index.js CHANGED
@@ -160,9 +160,9 @@ const SYSTEM_PARAMS = {
160
160
  xiaoliuren: ['datetime', 'date', 'hour', 'mode', 'num1', 'num2', 'num3', 'lateZi', 'question', 'shadow'],
161
161
  star: ['datetime', 'shadow'],
162
162
  numerology: ['datetime', 'shadow'],
163
- mbti: ['answers', 'shadow'],
164
- constitution: ['answers', 'shadow'],
165
- wuyunliuqi: ['datetime', 'shadow'],
163
+ mbti: ['answers', 'shadow'],
164
+ constitution: ['answers', 'shadow'],
165
+ wuyunliuqi: ['datetime', 'shadow'],
166
166
  taiyi: ['datetime', 'shadow'],
167
167
  trend: ['datetime', 'gender', 'address', 'geocode', 'longitude', 'trueSolar', 'hourUnknown', 'toAge', 'asOf', 'shadow', 'ask'],
168
168
  fengshui: ['action', 'datetime', 'gender', 'sitting', 'facing', 'fortuneYear', 'period', 'sittingOffset', 'sittingDegree', 'facingOffset', 'facingDegree', 'fortuneDate', 'fortuneTime', 'dst', 'shadow'],
@@ -185,9 +185,9 @@ const SYSTEM_REQUIRED = {
185
185
  xiaoliuren: 'time 模式 datetime/date+hour;number 模式 num1–num3',
186
186
  star: '无(省略补今天)',
187
187
  numerology: '无(省略补今天)',
188
- mbti: '无(先不带 answers 拿题)',
189
- constitution: '无(先不带 answers 拿 45 道题)',
190
- wuyunliuqi: '无(省略则用今天;要算别的年份就传那年的日期)',
188
+ mbti: '无(先不带 answers 拿题)',
189
+ constitution: '无(先不带 answers 拿 45 道题)',
190
+ wuyunliuqi: '无(省略则用今天;要算别的年份就传那年的日期)',
191
191
  taiyi: '无(省略则用今天;年家按积年推局,给哪一年的日期就算哪一年)',
192
192
  trend: 'datetime、gender',
193
193
  fengshui: 'natal 要 datetime + gender;advise/xuankong 要 sitting 或 facing',
@@ -847,7 +847,7 @@ export function apply(ctx) {
847
847
  mingzhuSchool: {
848
848
  type: 'string',
849
849
  enum: ['soul-branch', 'year-branch'],
850
- description: '紫微斗数:命主取法。两派共用同一张十二支→命主星的表(子贪狼、丑亥巨门、寅戌禄存、卯酉文曲、辰申廉贞、巳未武曲、午破军),分歧只在拿哪个地支去查:soul-branch(默认,通行本 /《紫微斗数全书》卷二「安命主」)用命宫地支,year-branch(中州派,文墨「安命主 - 依据中州派理论」)用生年年支。命主的定义是「依地支指定的一颗星」,命宫里不一定有它,换取法不改任何宫位与星曜落宫。实测命宫地支与生年年支重合的只占约 8%,两派约九成的人结果不同。',
850
+ description: '紫微斗数:命主取法。两派共用同一张十二支→命主星的表(子贪狼、丑亥巨门、寅戌禄存、卯酉文曲、辰申廉贞、巳未武曲、午破军),分歧只在拿哪个地支去查:soul-branch(默认,通行本 /《紫微斗数全书》卷二「安命主」)用命宫地支,year-branch(中州派口径)用生年年支。命主的定义是「依地支指定的一颗星」,命宫里不一定有它,换取法不改任何宫位与星曜落宫。实测命宫地支与生年年支重合的只占约 8%,两派约九成的人结果不同。',
851
851
  },
852
852
  zuoyaoSchool: {
853
853
  type: 'string',
@@ -857,13 +857,13 @@ export function apply(ctx) {
857
857
  liunianSihua: {
858
858
  type: 'string',
859
859
  enum: ['year-stem', 'life-palace-stem'],
860
- description: '紫微斗数:流年四化的取干口径。year-stem(默认)用该年干支的天干,life-palace-stem 改用该年流年命宫那一宫的宫干(文墨「依据流年命宫天干」)。年干随年份走,命宫宫干由五虎遁从生年干起,两者是两张表,实测十二年会换十二次,四颗化星全变。每年回显 sihuaStem / sihuaStemFrom 说明实际用了哪一干。',
860
+ description: '紫微斗数:流年四化的取干口径。year-stem(默认)用该年干支的天干,life-palace-stem 改用该年流年命宫那一宫的宫干(另一档:按流年命宫宫干取)。年干随年份走,命宫宫干由五虎遁从生年干起,两者是两张表,实测十二年会换十二次,四颗化星全变。每年回显 sihuaStem / sihuaStemFrom 说明实际用了哪一干。',
861
861
  },
862
862
  sihuaVariant: {
863
863
  type: 'string',
864
864
  enum: ['default', '廉破曲阳', '贪阴阳机', '阳武同阴', '阳武府同', '阳武府相',
865
865
  '阳武同相', '巨阳武昌', '梁紫府武', '梁紫相武', '破巨阳贪'],
866
- description: '紫微斗数:十干四化变体,整表替换生年、宫干自化、大限宫干、飞星与流年所查的那张表。default(默认)各干取通行表;其余取值按文墨天机「十干四化」原文四字命名,依禄权科忌顺序念,如 廉破曲阳 = 廉贞禄破军权文曲科太阳忌。可选:廉破曲阳(甲)、贪阴阳机(戊)、阳武同阴/阳武府同/阳武府相/阳武同相(庚)、巨阳武昌(辛)、梁紫府武/梁紫相武(壬)、破巨阳贪(癸);乙丙丁己四干无变体。变体天干与所查该干不符时不生效,不会串表。与庚干那一项重叠时以本参数为准。',
866
+ description: '紫微斗数:十干四化变体,整表替换生年、宫干自化、大限宫干、飞星与流年所查的那张表。default(默认)各干取通行表;其余取值按通行变体口诀四字命名,依禄权科忌顺序念,如 廉破曲阳 = 廉贞禄破军权文曲科太阳忌。可选:廉破曲阳(甲)、贪阴阳机(戊)、阳武同阴/阳武府同/阳武府相/阳武同相(庚)、巨阳武昌(辛)、梁紫府武/梁紫相武(壬)、破巨阳贪(癸);乙丙丁己四干无变体。变体天干与所查该干不符时不生效,不会串表。与庚干那一项重叠时以本参数为准。',
867
867
  },
868
868
  jieluSchool: {
869
869
  type: 'string',
package/package.json CHANGED
@@ -1,135 +1,135 @@
1
- {
2
- "name": "dsh-metaphysics",
3
- "displayName": "烛微命盘",
4
- "version": "0.73.0",
5
- "type": "module",
6
- "description": "烛微命盘(玄学 xuanxue)for DeepSeek Harness: twenty-two 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 110KB 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.",
7
- "keywords": [
8
- "玄学",
9
- "玄学排盘",
10
- "算命",
11
- "占卜",
12
- "运势",
13
- "传统命理",
14
- "dsh-plugin",
15
- "dsh-bundle",
16
- "dsh-market",
17
- "metaphysics",
18
- "bazi",
19
- "four-pillars",
20
- "ziwei",
21
- "ziwei-doushu",
22
- "liuyao",
23
- "tarot",
24
- "divination",
25
- "命理",
26
- "烛微命盘",
27
- "八字",
28
- "四柱",
29
- "神煞",
30
- "紫微斗数",
31
- "六爻",
32
- "塔罗",
33
- "meihua-yishu",
34
- "da-liu-ren",
35
- "大六壬",
36
- "梅花易数",
37
- "almanac",
38
- "黄历",
39
- "择日",
40
- "称骨",
41
- "小六壬",
42
- "feng-shui",
43
- "风水",
44
- "起名",
45
- "numerology",
46
- "生命数字",
47
- "horoscope",
48
- "星座"
49
- ],
50
- "license": "MIT",
51
- "author": "xuanfu-web",
52
- "repository": {
53
- "type": "git",
54
- "url": "git+https://github.com/xuanfu-web/dsh-metaphysics.git"
55
- },
56
- "homepage": "https://github.com/xuanfu-web/dsh-metaphysics#readme",
57
- "bugs": {
58
- "url": "https://github.com/xuanfu-web/dsh-metaphysics/issues"
59
- },
60
- "engines": {
61
- "node": ">=18",
62
- "dsh": ">=0.2.0"
63
- },
64
- "scripts": {
65
- "build": "node tools/build-client.mjs",
66
- "build:html": "node tools/build-html.mjs",
67
- "build:desktop": "node tools/build-html.mjs --desktop",
68
- "build:verification": "node tools/verification.mjs",
69
- "build:citations": "node tools/citations.mjs",
70
- "test": "node tools/test-all.mjs",
71
- "test:ci": "node tools/build-client.mjs && node tools/check-bundle.mjs && node tools/check-verification.mjs && node tools/test-all.mjs && node tools/check-assertions.mjs && node tools/verify-tests-can-fail.mjs && node tools/check-html-sinks.mjs && node tools/check-patterns.mjs && node tools/check-perf.mjs",
72
- "test:baseline": "node tools/check-assertions.mjs --update",
73
- "bench": "node tools/bench.mjs",
74
- "check:html": "node tools/check-html-sinks.mjs",
75
- "check:bundle": "node tools/check-bundle.mjs",
76
- "check:patterns": "node tools/check-patterns.mjs",
77
- "check:perf": "node tools/check-perf.mjs",
78
- "gen:zengshan": "node tools/gen-zengshan-cases.mjs",
79
- "backtest:yingqi": "node tools/backtest-yingqi.mjs",
80
- "release": "node tools/release.mjs",
81
- "push:tag": "node tools/push-tag.mjs",
82
- "rollback:plan": "node tools/release-rollback.mjs",
83
- "prompt:event": "node tools/event-prompt.mjs",
84
- "smoke": "node tools/smoke-all.mjs",
85
- "e2e": "node tools/e2e-dom.mjs && node tools/e2e-panel.mjs",
86
- "stress": "node test/stress.test.mjs",
87
- "e2e:page": "node tools/e2e-dom.mjs",
88
- "e2e:panel": "node tools/e2e-panel.mjs",
89
- "check:verification": "node tools/check-verification.mjs",
90
- "gh:release": "node tools/gh-release.mjs"
91
- },
92
- "exports": {
93
- ".": "./index.js",
94
- "./client": "./client.js",
95
- "./client.*.js": "./client.*.js",
96
- "./package.json": "./package.json",
97
- "./locale/*.json": "./locale/*.json",
98
- "./icon": "./icon.svg",
99
- "./命理排盘.html": "./命理排盘.html"
100
- },
101
- "files": [
102
- "index.js",
103
- "client.js",
104
- "client.*.js",
105
- "命理排盘.html",
106
- "engine",
107
- "cordis.patch.yml",
108
- "locale/*.json",
109
- "icon.svg",
110
- "README.md",
111
- "CHANGELOG.md",
112
- "docs/assets",
113
- "LICENSE"
114
- ],
115
- "dsh": {
116
- "bundle": {
117
- "patch": "./cordis.patch.yml"
118
- },
119
- "client": {
120
- "platform": "web",
121
- "immediately": true,
122
- "inject": []
123
- }
124
- },
125
- "devDependencies": {
126
- "esbuild": "^0.28.2",
127
- "playwright-core": "^1.49.1",
128
- "react": "^18.3.1",
129
- "react-dom": "^18.3.1"
130
- },
131
- "meta": {
132
- "title": "烛微命盘",
133
- "description": "二十二套命理排盘与速查,本地计算,每一步都能展开核对。"
134
- }
135
- }
1
+ {
2
+ "name": "dsh-metaphysics",
3
+ "displayName": "烛微命盘",
4
+ "version": "0.74.0",
5
+ "type": "module",
6
+ "description": "烛微命盘(玄学 xuanxue)for DeepSeek Harness: twenty-two 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 110KB 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.",
7
+ "keywords": [
8
+ "玄学",
9
+ "玄学排盘",
10
+ "算命",
11
+ "占卜",
12
+ "运势",
13
+ "传统命理",
14
+ "dsh-plugin",
15
+ "dsh-bundle",
16
+ "dsh-market",
17
+ "metaphysics",
18
+ "bazi",
19
+ "four-pillars",
20
+ "ziwei",
21
+ "ziwei-doushu",
22
+ "liuyao",
23
+ "tarot",
24
+ "divination",
25
+ "命理",
26
+ "烛微命盘",
27
+ "八字",
28
+ "四柱",
29
+ "神煞",
30
+ "紫微斗数",
31
+ "六爻",
32
+ "塔罗",
33
+ "meihua-yishu",
34
+ "da-liu-ren",
35
+ "大六壬",
36
+ "梅花易数",
37
+ "almanac",
38
+ "黄历",
39
+ "择日",
40
+ "称骨",
41
+ "小六壬",
42
+ "feng-shui",
43
+ "风水",
44
+ "起名",
45
+ "numerology",
46
+ "生命数字",
47
+ "horoscope",
48
+ "星座"
49
+ ],
50
+ "license": "MIT",
51
+ "author": "xuanfu-web",
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/xuanfu-web/dsh-metaphysics.git"
55
+ },
56
+ "homepage": "https://github.com/xuanfu-web/dsh-metaphysics#readme",
57
+ "bugs": {
58
+ "url": "https://github.com/xuanfu-web/dsh-metaphysics/issues"
59
+ },
60
+ "engines": {
61
+ "node": ">=18",
62
+ "dsh": ">=0.2.0"
63
+ },
64
+ "scripts": {
65
+ "build": "node tools/build-client.mjs",
66
+ "build:html": "node tools/build-html.mjs",
67
+ "build:desktop": "node tools/build-html.mjs --desktop",
68
+ "build:verification": "node tools/verification.mjs",
69
+ "build:citations": "node tools/citations.mjs",
70
+ "test": "node tools/test-all.mjs",
71
+ "test:ci": "node tools/build-client.mjs && node tools/check-bundle.mjs && node tools/check-verification.mjs && node tools/test-all.mjs && node tools/check-assertions.mjs && node tools/verify-tests-can-fail.mjs && node tools/check-html-sinks.mjs && node tools/check-patterns.mjs && node tools/check-perf.mjs",
72
+ "test:baseline": "node tools/check-assertions.mjs --update",
73
+ "bench": "node tools/bench.mjs",
74
+ "check:html": "node tools/check-html-sinks.mjs",
75
+ "check:bundle": "node tools/check-bundle.mjs",
76
+ "check:patterns": "node tools/check-patterns.mjs",
77
+ "check:perf": "node tools/check-perf.mjs",
78
+ "gen:zengshan": "node tools/gen-zengshan-cases.mjs",
79
+ "backtest:yingqi": "node tools/backtest-yingqi.mjs",
80
+ "release": "node tools/release.mjs",
81
+ "push:tag": "node tools/push-tag.mjs",
82
+ "rollback:plan": "node tools/release-rollback.mjs",
83
+ "prompt:event": "node tools/event-prompt.mjs",
84
+ "smoke": "node tools/smoke-all.mjs",
85
+ "e2e": "node tools/e2e-dom.mjs && node tools/e2e-panel.mjs",
86
+ "stress": "node test/stress.test.mjs",
87
+ "e2e:page": "node tools/e2e-dom.mjs",
88
+ "e2e:panel": "node tools/e2e-panel.mjs",
89
+ "check:verification": "node tools/check-verification.mjs",
90
+ "gh:release": "node tools/gh-release.mjs"
91
+ },
92
+ "exports": {
93
+ ".": "./index.js",
94
+ "./client": "./client.js",
95
+ "./client.*.js": "./client.*.js",
96
+ "./package.json": "./package.json",
97
+ "./locale/*.json": "./locale/*.json",
98
+ "./icon": "./icon.svg",
99
+ "./命理排盘.html": "./命理排盘.html"
100
+ },
101
+ "files": [
102
+ "index.js",
103
+ "client.js",
104
+ "client.*.js",
105
+ "命理排盘.html",
106
+ "engine",
107
+ "cordis.patch.yml",
108
+ "locale/*.json",
109
+ "icon.svg",
110
+ "README.md",
111
+ "CHANGELOG.md",
112
+ "docs/assets",
113
+ "LICENSE"
114
+ ],
115
+ "dsh": {
116
+ "bundle": {
117
+ "patch": "./cordis.patch.yml"
118
+ },
119
+ "client": {
120
+ "platform": "web",
121
+ "immediately": true,
122
+ "inject": []
123
+ }
124
+ },
125
+ "devDependencies": {
126
+ "esbuild": "^0.28.2",
127
+ "playwright-core": "^1.49.1",
128
+ "react": "^18.3.1",
129
+ "react-dom": "^18.3.1"
130
+ },
131
+ "meta": {
132
+ "title": "烛微命盘",
133
+ "description": "二十二套命理排盘与速查,本地计算,每一步都能展开核对。"
134
+ }
135
+ }