dsh-metaphysics 0.62.0 → 0.62.1

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.hepan.js CHANGED
@@ -150,7 +150,7 @@ ${i.summary}`);const v=Zn(a.detail);if(a.withInterpret&&(i.interpret=X(i,{questi
150
150
   规则·${ie.gist}〔${ie.statusLabel}〕${ie.detail} 出处:${ie.source}${ie.note?` 注:${ie.note}`:""}`).join("");v.push(`${de.label}:${le}${de.text}${de.advice?` 建议:${de.advice}`:""}${Y}${j}`)}const se=e.sections||[],Ke=l?se.filter(de=>String(de.text||"").length>i):[];for(const de of se)l&&String(de.text||"").length>i||v.push(`${de.label}:${de.text}`);Ke.length&&v.push(`(另有 ${Ke.length} 节长论述未展开:${Ke.map(de=>de.label).join("、")}。需要原文与出处时传 detail:"full")`);for(const de of e.tables||[])!Array.isArray(de.rows)||!de.rows.length||(v.push(`【${de.title}】`),v.push([de.columns.join(" | "),...de.rows.map(Y=>Y.join(" | "))].join(`
151
151
  `)));return Array.isArray(e.followups)&&e.followups.length&&v.push("还可以这样追问:"+e.followups.map(de=>`「${de}」`).join(" ")),Array.isArray(e.glossary)&&e.glossary.length&&v.push("名词解释:"+e.glossary.map(de=>`${de.term}=${de.plain}`).join(" ")),Array.isArray(e.limits)&&e.limits.length&&v.push("【本插件不回答什么】"+e.limits.map(de=>`${de.title}——${de.text}`).join(`
152
152
  `)),e.disclaimer&&v.push(e.disclaimer),v.join(`
153
- `)}const Hn=["cross","verifyPast","withInterpret","detail","question","direction","ask","geocode","rectify","events","shadow","trace"];function Cn(e={},a={}){const l=a.system||e.system,i=a.switches||Gn[l]||[];if(!i.length)return{system:l,switches:[],affected:0,total:0};const v={...e};for(const W of Hn)delete v[W];const p=i.map(W=>{const se=W.read(v),Ke=W.alt(se);let de=[],Y="",le=null,j=null;try{le=Tn({...v,[W.key]:se}),j=Tn({...v,[W.key]:Ke}),de=ne(le,j)}catch(cn){Y=cn&&cn.message||String(cn)}const ie=Xe(de.filter(cn=>Mn(cn.path))).map(cn=>({path:cn.path,label:Rn(cn.path),from:gn(cn.from),to:gn(cn.to)})),Ie=new Map;for(const cn of de){const fn=Wn(cn.path)||"其他";Ie.set(fn,(Ie.get(fn)||0)+1)}const pn=[...Ie.entries()].map(([cn,fn])=>({name:cn,count:fn})).sort((cn,fn)=>fn.count-cn.count||cn.name.localeCompare(fn.name,"zh-Hans-CN"));return{key:W.key,title:W.title,short:W.short,current:se,alt:Ke,currentLabel:W.label(se),altLabel:W.label(Ke),total:de.length,summary:Y?"":xe(de),views:Y?[]:Yn(l,le,j),roots:ie,categories:pn,error:Y}});return{system:l,switches:p,affected:p.filter(W=>!W.error&&W.total>0).length,total:p.reduce((W,se)=>W+se.total,0)}}const Pe=["chaibu","chaoshen","zhirun"],rn=[1,3,5],zn=["same-day","next-day"];function Nn(e,a=""){if(e==null||e==="")return;const l=a?`${a}的`:"";let i;if(typeof e=="number")i=e;else if(typeof e=="string"){const v=e.trim();if(!/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(v))throw G("E_RANGE",`${l}经度不是十进制数字:收到「${e}」。经度写数字即可,例如北京 116.4`);i=Number(v)}else throw G("E_RANGE",`${l}经度必须是数字或数字字符串,收到 ${Array.isArray(e)?"array":typeof e}`);if(!Number.isFinite(i))throw G("E_RANGE",`${l}经度不是有限数值:收到「${e}」。经度写十进制数字即可,例如北京 116.4`);if(i<-180||i>180)throw G("E_RANGE",`${l}经度要在 −180 到 180 之间(东经为正),收到 ${i}`);return i}function On(e){const a=Nn(e.longitude,""),l=e.partner&&typeof e.partner=="object"?Nn(e.partner.longitude,"对方"):void 0,i=e.partner2&&typeof e.partner2=="object"?Nn(e.partner2.longitude,"第三方"):void 0;if(!(a!==void 0&&e.longitude!==a||l!==void 0&&e.partner.longitude!==l||i!==void 0&&e.partner2.longitude!==i))return e;const p={...e};return a!==void 0&&(p.longitude=a),l!==void 0&&(p.partner={...p.partner,longitude:l}),i!==void 0&&(p.partner2={...p.partner2,longitude:i}),p}function Zn(e){if(e==null||e===""||e==="full")return"full";if(e==="lean")return"lean";throw G("E_INPUT",`detail 只能是 'full' 或 'lean':收到「${String(e).slice(0,24)}」`)}function Dn(e){if(e==null||typeof e=="string"&&!e.trim())return;const a=S(e);if(!a)throw G("E_ASOF",`无法解析 asOf:「${e}」,请用 2026-10-22T16:00 这种格式`);const{year:l,month:i,day:v,hour:p,minute:W}=a;if(!(i>=1&&i<=12)||!(v>=1&&v<=Oe(l,i)))throw G("E_ASOF",`asOf 指向的日期不存在:${e}`);if(p!==void 0&&!(p>=0&&p<=23))throw G("E_ASOF",`asOf 的小时要在 0–23 之间:${e}`);if(W!==void 0&&!(W>=0&&W<=59))throw G("E_ASOF",`asOf 的分钟要在 0–59 之间:${e}`);return a}function Xn(e={}){const a=e.system;if(e.mode!==void 0&&e.mode!==null&&e.mode!==""){const l={convert:["solar2lunar","lunar2solar"],meihua:["time","number"],xiaoliuren:["time","number"]},i=l[a];if(!i)throw G("E_INPUT",`mode 只用于 ${Object.keys(l).join(" / ")};${a||"当前体系"} 不收 mode`);if(!i.includes(e.mode))throw G("E_INPUT",`${a} 的 mode 只能是 ${i.join(" / ")},收到「${String(e.mode).slice(0,24)}」`)}if(e.fortuneYear!==void 0&&e.fortuneYear!==null&&e.fortuneYear!==""){const l=Number(e.fortuneYear);if(!Number.isInteger(l))throw G("E_INPUT",`fortuneYear 要是整数年份,收到「${e.fortuneYear}」`);e={...e,fortuneYear:l}}if(a==="bazi"){const l=C(e.datetime),i=Dn(e.asOf),v=H({...l,gender:Z(e.gender),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,nowYear:i?i.year:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:Le(v)}}if(a==="ziwei"){if(e.hourUnknown===!0)throw G("HOUR_UNKNOWN","紫微必须有出生时刻:命宫由生月与生时支定,时支未知则整盘不成立。请补上出生时刻,或改用八字三柱模式只看年/月/日。");e.lateZi!==void 0&&e.lateZishi===void 0&&(e={...e,lateZishi:e.lateZi===!1?"current-day":"next-day"});const l=C(e.datetime),i=Dn(e.asOf),v=b({...l,gender:Z(e.gender),leapMonth:e.leapMonth,leapAsNext:e.leapAsNext===!0,...F(e),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,trueSolar:e.trueSolar,dst:e.dst!==!1,asOf:i});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:ye(v)}}if(a==="tarot"){const l=e.count===void 0||e.count===null||e.count===""?3:Number(e.count);if(!rn.includes(l))throw G("E_COUNT",`塔罗张数只能是 1 / 3 / 5,收到「${e.count}」`);if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);const i=Dn(e.asOf),v=E({count:l,question:e.question,at:e.asOf,random:ue(e.seed)});return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(v.seed=Number(e.seed)),{...v,...i?{asOf:i}:{},summary:Ce(v)}}if(a==="daliuren"){const l=C(e.datetime),i=e.lateZi!==!1,v=ee({...l,lateZi:i});return v.lateZi=i,{...v,precision:l.precision,summary:hn(v)}}if(a==="qimen"){const l=C(e.datetime);if(e.juMethod!==void 0&&!Pe.includes(e.juMethod))throw G("E_INPUT",`juMethod 只能是 chaibu / chaoshen / zhirun,收到「${e.juMethod}」`);const i=e.lateZiHourMode!==void 0?e.lateZiHourMode:e.lateZi===!0?"next-day":e.lateZi===!1?"same-day":void 0;if(i!==void 0&&!zn.includes(i))throw G("E_INPUT",`lateZiHourMode 只能是 same-day / next-day,收到「${i}」`);const v=i==="next-day"?"next-day":"same-day",p=r({...l,lateZiHourMode:v,juMethod:e.juMethod});return p.lateZiHourMode=v,{...p,summary:T(p)}}if(a==="hepan"){if(e.hourUnknown===!0||e.partner&&e.partner.hourUnknown===!0)throw G("HOUR_UNKNOWN","合盘需要双方都有出生时刻:夫妻宫与大运都依赖时支。请补齐时刻后再看,或用八字三柱模式各自看年/月/日。");const l=e.partner;if(!l||typeof l!="object")throw G("E_PARTNER","合盘需要 partner:{ datetime, gender, address? },其中 partner.datetime 是对方的公历出生时间");if(!l.datetime)throw G("E_PARTNER",'缺少 partner.datetime(对方的公历出生时间),例如 partner: {"datetime":"1992-03-03T10:00","gender":"female"}');const i=e.partner2;if(i!=null){if(typeof i!="object"||Array.isArray(i))throw G("E_PARTNER","partner2 需要 { datetime, gender, address? };不想看三方就整段省略(null 视同未传)");if(!i.datetime)throw G("E_PARTNER",'缺少 partner2.datetime(第三方的公历出生时间),例如 partner2: {"datetime":"1988-09-09T08:00","gender":"male"}')}const v=e.chart==="ziwei"?"ziwei":"bazi",p=(Y,le)=>({...C(Y.datetime),gender:Z(Y.gender,le),trueSolar:Y.trueSolar,lateZi:Y.lateZi,dst:Y.dst!==!1,address:typeof Y.address=="string"?Y.address:void 0,longitude:typeof Y.longitude=="number"?Y.longitude:void 0,geo:Y.geo&&typeof Y.geo=="object"?Y.geo:void 0}),W=p(e,"你(主方)"),se=p(l,"对方"),Ke=(Y,le)=>v==="ziwei"?t({a:Y,b:le}):f({a:Y,b:le}),de=Ke(W,se);if(i){const Y=p(i,"第三方");de.triple=c([{key:"a-b",a:"你",b:"对方",result:de},{key:"a-c",a:"你",b:"第三方",result:Ke(W,Y)},{key:"b-c",a:"对方",b:"第三方",result:Ke(se,Y)}])}return{...de,summary:ke(de)}}if(a==="meihua"){let l;e.mode!=="number"&&C(e.datetime);try{l=V({mode:e.mode==="number"?"number":"time",datetime:e.datetime,upper:e.upper,lower:e.lower,changing:e.changing,lateZi:e.lateZi})}catch(i){const v=i&&i.message||String(i);throw G(i&&i.code||"E_INPUT",i&&i.code?v:`梅花起卦参数不完整:${v}`)}return{...l,summary:he(l)}}if(a==="liuyao"){if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);let l;if(e.lines===void 0||e.lines===null)l=pe(ue(e.seed));else{if(!Array.isArray(e.lines))throw G("E_LINES","lines 必须是数组:自下而上 6 个爻值(6 老阴 / 7 少阳 / 8 少阴 / 9 老阳)");if(e.lines.length!==6)throw G("E_LINES",`六爻需要正好 6 个爻值(自下而上),收到 ${e.lines.length} 个;留空则由引擎随机摇卦`);l=e.lines.map(Number)}let i,v=null;const p=e.datetime?C(e.datetime):Dn(e.asOf);if(p){e.datetime||(v=p);const le=g(O($(p.year,p.month,p.day)));i={stem:le.stem,branch:le.branch,name:le.name}}let W;try{W=A({lines:l,question:e.question,dayGanZhi:i})}catch(le){throw G(le&&le.code||"E_LINES",le&&le.message?le.message:le)}const se=fe(W,{direction:e.direction,gender:e.gender});se.liuqin&&(W.useGod=se);let Ke=null;if(p)try{Ke=(n({year:p.year,month:p.month,day:p.day,hour:p.hour,minute:p.minute}).monthGanZhi||"")[1]||null}catch{Ke=null}const de=o(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});de&&(W.hexStrength=de);const Y=q(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});if(Y&&(W.jinTuiPower=Y),se.liuqin){const le=U(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});le&&(W.useGodStrength=le);const j=K(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});j&&(W.fushenAccess=j);const ie=_(W,se,{monthBranch:Ke});ie&&(W.yingqi=ie)}return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(W.seed=Number(e.seed)),{...W,...v?{asOf:v}:{},summary:tn(W)}}if(a==="almanac"){const l=C(e.datetime),i=We({year:l.year,month:l.month,day:l.day});return{...i,summary:Qn(i)}}if(a==="zeri"){if(!(e.candidates!==void 0&&e.candidates!==null)&&(typeof e.startDate!="string"||!e.startDate.trim()))throw G("E_INPUT",'择日需要 startDate(公历 YYYY-MM-DD,起算日);可另给 days(1–60,默认 30)与 shengXiao(当事人属相)。只想比几天,改给 candidates: ["2026-12-01","2026-12-08"]');let i;try{i=Ge({task:e.task,startDate:e.startDate,days:e.days,shengXiao:e.shengXiao,candidates:e.candidates})}catch(v){throw G(v&&v.code||"E_INPUT",v&&v.message||String(v))}return{...i,summary:et(i)}}if(a==="chenggu"){const l=C(e.datetime),i=/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime)),v=Number.isInteger(e.hour)?e.hour:i?l.hour:null;if(v===null||v<0||v>23)throw G("E_INPUT","称骨必须给时辰:datetime 带时分(如 1990-08-15T10:00),或额外给 hour(0–23)——缺时辰四柱不齐");const p=Fe({year:l.year,month:l.month,day:l.day,hour:v,minute:i?l.minute:0,lateZi:e.lateZi});return{...p,summary:wn(p)}}if(a==="convert"){const l=e.mode==="lunar2solar"?"lunar2solar":"solar2lunar";let i;if(l==="lunar2solar"){if(e.lunarYear==null||e.lunarMonth==null||e.lunarDay==null)throw G("E_INPUT","农历转公历需要 lunarYear / lunarMonth / lunarDay(闰月另加 isLeapMonth: true)");i=ce({mode:l,lunarYear:Number(e.lunarYear),lunarMonth:Number(e.lunarMonth),lunarDay:Number(e.lunarDay),isLeapMonth:e.isLeapMonth===!0})}else{const v=C(e.datetime);i=ce({mode:l,year:v.year,month:v.month,day:v.day})}return{...i,summary:Ee(i)}}if(a==="xiaoliuren"){const l=e.datetime?C(e.datetime):null,i=Qe({mode:e.mode==="number"?"number":"time",date:typeof e.date=="string"&&e.date.trim()?e.date:l?`${l.year}-${l.month}-${l.day}`:void 0,hour:Number.isInteger(e.hour)?e.hour:l&&/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime))?l.hour:void 0,num1:e.num1,num2:e.num2,num3:e.num3,question:e.question,lateZi:e.lateZi});return{...i,summary:Vn(i)}}if(a==="star"){const l=C(e.datetime),i=De({year:l.year,month:l.month,day:l.day});return{...i,summary:te(i)}}if(a==="numerology"){const l=C(e.datetime),i=He({year:l.year,month:l.month,day:l.day});return{...i,summary:dn(i)}}if(a==="mbti"){if(e.answers===void 0||e.answers===null){const i=Je();return{...i,summary:In(i)}}const l=Ze({answers:e.answers});return{...l,summary:En(l)}}if(a==="trend"){const l=C(e.datetime),i=e.asOf?Dn(e.asOf):void 0,v=rt({...l,nowYear:i?i.year:void 0,gender:Z(e.gender),toAge:e.toAge,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...e.hourUnknown===!0?{hourUnknown:!0,hourPrecision:"day"}:{},precision:l.precision,summary:jn(v)}}if(a==="fengshui"){const l=e.action==="advise"?"advise":e.action==="xuankong"?"xuankong":"natal";if(l==="xuankong"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.period!==void 0?{period:e.period}:{},...e.fortuneYear!==void 0?{fortuneYear:e.fortuneYear}:{},...typeof e.sittingOffset=="number"?{sittingOffset:e.sittingOffset}:{},...typeof e.sittingDegree=="number"?{sittingDegree:e.sittingDegree}:{},...typeof e.facingOffset=="number"?{facingOffset:e.facingOffset}:{},...typeof e.facingDegree=="number"?{facingDegree:e.facingDegree}:{},...typeof e.fortuneDate=="string"?{fortuneDate:e.fortuneDate}:{},...typeof e.fortuneTime=="string"?{fortuneTime:e.fortuneTime}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}if(l==="advise"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.datetime?C(e.datetime):{},...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}const i=C(e.datetime),v=nt({action:"natal",year:i.year,month:i.month,day:i.day,gender:Z(e.gender),fortuneYear:e.fortuneYear,dst:e.dst!==!1});return{...v,summary:Pn(v)}}if(a==="name"){const l=e.action==="generate"?"generate":"assess",i=e.datetime?C(e.datetime):Number.isInteger(e.year)&&Number.isInteger(e.month)&&Number.isInteger(e.day)?{year:e.year,month:e.month,day:e.day,...Number.isInteger(e.hour)?{hour:e.hour}:{},...Number.isInteger(e.minute)?{minute:e.minute}:{}}:{},v=ot({action:l,surname:e.surname,givenName:e.givenName,limit:e.limit,charElements:e.charElements&&typeof e.charElements=="object"?e.charElements:void 0,strokeOverrides:e.strokeOverrides&&typeof e.strokeOverrides=="object"?e.strokeOverrides:void 0,surnameStrokes:e.surnameStrokes&&typeof e.surnameStrokes=="object"?e.surnameStrokes:void 0,...i,...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},...e.datetime?{lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0}:{}});return{...v,summary:Bn(v)}}throw a?G("E_SYSTEM",`未知体系「${a}」,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。`):G("E_INPUT","缺少 system,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。")}function Qn(e){const a=e.ganzhi,l=e.jieQi&&e.jieQi.next?` 下一节:${e.jieQi.next.name} ${e.jieQi.next.date}`:"",i=e.dayGod?`值日:${e.dayGod.name}(${e.dayGod.type}·${e.dayGod.luck})`:"",v=e.xiu?`二十八宿:${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",p=e.taiShen?`胎神:${e.taiShen}`:"",W=e.positions?`吉神方位:喜神${e.positions.xiShen||"—"} 财神${e.positions.caiShen||"—"} 福神${e.positions.fuShen?e.positions.fuShen.dir:"—"} 阳贵${e.positions.yangGui?e.positions.yangGui.dir:"—"} 阴贵${e.positions.yinGui?e.positions.yinGui.dir:"—"}`:"",se=e.lucky?`吉配生肖:六合${e.lucky.liuhe||"—"} 三合${(e.lucky.sanhe||[]).join("、")||"—"}`:"",Ke=e.nayin&&e.nayin.day?`日柱纳音:${e.nayin.day.name}`:"",de=(e.hours||[]).map(Y=>`${Y.zhi}${Y.ganZhi.slice(0,1)}·${Y.shen}${Y.luck==="吉"?"吉":"凶"}`).join(" ");return[`【黄历】${e.meta.date} ${e.meta.weekday} ${e.lunar.text}`,`干支:${a.year}年 ${a.month}月 ${a.day}日 属${a.shengXiao}`,...e.meta.boundaryNote?[` ${e.meta.boundaryNote}`]:[],`建除:${e.zhiXing}日 冲:${e.chong.text}${e.chong.sha?`(${e.chong.sha})`:""} ${i}`,[v,Ke,p].filter(Boolean).join(" "),`宜:${e.yi.join("、")}`,`忌:${e.ji.join("、")}`,W,se,de?`时辰吉凶:${de}`:"",`节气:上一节 ${e.jieQi.prev?`${e.jieQi.prev.name} ${e.jieQi.prev.date}`:"—"}${l}`,e.dailyHexagram?`每日一卦:${e.dailyHexagram.name} ${e.dailyHexagram.meaning||""}`:"",`口径:${e.meta.scope}`].filter(Boolean).join(`
153
+ `)}const Hn=["cross","verifyPast","withInterpret","detail","question","direction","ask","geocode","rectify","events","shadow","trace"];function Cn(e={},a={}){const l=a.system||e.system,i=a.switches||Gn[l]||[];if(!i.length)return{system:l,switches:[],affected:0,total:0};const v={...e};for(const W of Hn)delete v[W];const p=i.map(W=>{const se=W.read(v),Ke=W.alt(se);let de=[],Y="",le=null,j=null;try{le=Tn({...v,[W.key]:se}),j=Tn({...v,[W.key]:Ke}),de=ne(le,j)}catch(cn){Y=cn&&cn.message||String(cn)}const ie=Xe(de.filter(cn=>Mn(cn.path))).map(cn=>({path:cn.path,label:Rn(cn.path),from:gn(cn.from),to:gn(cn.to)})),Ie=new Map;for(const cn of de){const fn=Wn(cn.path)||"其他";Ie.set(fn,(Ie.get(fn)||0)+1)}const pn=[...Ie.entries()].map(([cn,fn])=>({name:cn,count:fn})).sort((cn,fn)=>fn.count-cn.count||cn.name.localeCompare(fn.name,"zh-Hans-CN"));return{key:W.key,title:W.title,short:W.short,current:se,alt:Ke,currentLabel:W.label(se),altLabel:W.label(Ke),total:de.length,summary:Y?"":xe(de),views:Y?[]:Yn(l,le,j),roots:ie,categories:pn,error:Y}});return{system:l,switches:p,affected:p.filter(W=>!W.error&&W.total>0).length,total:p.reduce((W,se)=>W+se.total,0)}}const Pe=["chaibu","chaoshen","zhirun"],rn=[1,3,5],zn=["same-day","next-day"];function Nn(e,a=""){if(e==null||e==="")return;const l=a?`${a}的`:"";let i;if(typeof e=="number")i=e;else if(typeof e=="string"){const v=e.trim();if(!/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(v))throw G("E_RANGE",`${l}经度不是十进制数字:收到「${e}」。经度写数字即可,例如北京 116.4`);i=Number(v)}else throw G("E_RANGE",`${l}经度必须是数字或数字字符串,收到 ${Array.isArray(e)?"array":typeof e}`);if(!Number.isFinite(i))throw G("E_RANGE",`${l}经度不是有限数值:收到「${e}」。经度写十进制数字即可,例如北京 116.4`);if(i<-180||i>180)throw G("E_RANGE",`${l}经度要在 −180 到 180 之间(东经为正),收到 ${i}`);return i}function On(e){const a=Nn(e.longitude,""),l=e.partner&&typeof e.partner=="object"?Nn(e.partner.longitude,"对方"):void 0,i=e.partner2&&typeof e.partner2=="object"?Nn(e.partner2.longitude,"第三方"):void 0;if(!(a!==void 0&&e.longitude!==a||l!==void 0&&e.partner.longitude!==l||i!==void 0&&e.partner2.longitude!==i))return e;const p={...e};return a!==void 0&&(p.longitude=a),l!==void 0&&(p.partner={...p.partner,longitude:l}),i!==void 0&&(p.partner2={...p.partner2,longitude:i}),p}function Zn(e){if(e==null||e===""||e==="full")return"full";if(e==="lean")return"lean";throw G("E_INPUT",`detail 只能是 'full' 或 'lean':收到「${String(e).slice(0,24)}」`)}function Dn(e){if(e==null||typeof e=="string"&&!e.trim())return;const a=S(e);if(!a)throw G("E_ASOF",`无法解析 asOf:「${e}」,请用 2026-10-22T16:00 这种格式`);const{year:l,month:i,day:v,hour:p,minute:W}=a;if(!(i>=1&&i<=12)||!(v>=1&&v<=Oe(l,i)))throw G("E_ASOF",`asOf 指向的日期不存在:${e}`);if(p!==void 0&&!(p>=0&&p<=23))throw G("E_ASOF",`asOf 的小时要在 0–23 之间:${e}`);if(W!==void 0&&!(W>=0&&W<=59))throw G("E_ASOF",`asOf 的分钟要在 0–59 之间:${e}`);return a}function Xn(e={}){const a=e.system;if(e.mode!==void 0&&e.mode!==null&&e.mode!==""){const l={convert:["solar2lunar","lunar2solar"],meihua:["time","number"],xiaoliuren:["time","number"]},i=l[a];if(!i)throw G("E_INPUT",`mode 只用于 ${Object.keys(l).join(" / ")};${a||"当前体系"} 不收 mode`);if(!i.includes(e.mode))throw G("E_INPUT",`${a} 的 mode 只能是 ${i.join(" / ")},收到「${String(e.mode).slice(0,24)}」`)}if(e.fortuneYear!==void 0&&e.fortuneYear!==null&&e.fortuneYear!==""){const l=Number(e.fortuneYear);if(!Number.isInteger(l))throw G("E_INPUT",`fortuneYear 要是整数年份,收到「${e.fortuneYear}」`);e={...e,fortuneYear:l}}if(a==="bazi"){const l=C(e.datetime),i=Dn(e.asOf),v=H({...l,gender:Z(e.gender),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,nowYear:i?i.year:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:Le(v)}}if(a==="ziwei"){if(e.hourUnknown===!0)throw G("HOUR_UNKNOWN","紫微必须有出生时刻:命宫由生月与生时支定,时支未知则整盘不成立。请补上出生时刻,或改用八字三柱模式只看年/月/日。");e.lateZi!==void 0&&e.lateZishi===void 0&&(e={...e,lateZishi:e.lateZi===!1?"current-day":"next-day"});const l=C(e.datetime),i=Dn(e.asOf),v=b({...l,gender:Z(e.gender),leapMonth:e.leapMonth,leapAsNext:e.leapAsNext===!0,...F(e),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,trueSolar:e.trueSolar,dst:e.dst!==!1,asOf:i});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:ye(v)}}if(a==="tarot"){const l=e.count===void 0||e.count===null||e.count===""?3:Number(e.count);if(!rn.includes(l))throw G("E_COUNT",`塔罗张数只能是 1 / 3 / 5,收到「${e.count}」`);if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);const i=Dn(e.asOf),v=E({count:l,question:e.question,at:e.asOf,random:ue(e.seed)});return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(v.seed=Number(e.seed)),{...v,...i?{asOf:i}:{},summary:Ce(v)}}if(a==="daliuren"){const l=C(e.datetime),i=e.lateZi!==!1,v=ee({...l,lateZi:i});return v.lateZi=i,{...v,precision:l.precision,summary:hn(v)}}if(a==="qimen"){const l=C(e.datetime);if(e.juMethod!==void 0&&!Pe.includes(e.juMethod))throw G("E_INPUT",`juMethod 只能是 chaibu / chaoshen / zhirun,收到「${e.juMethod}」`);const i=e.lateZiHourMode!==void 0?e.lateZiHourMode:e.lateZi===!0?"next-day":e.lateZi===!1?"same-day":void 0;if(i!==void 0&&!zn.includes(i))throw G("E_INPUT",`lateZiHourMode 只能是 same-day / next-day,收到「${i}」`);const v=i==="next-day"?"next-day":"same-day",p=r({...l,lateZiHourMode:v,juMethod:e.juMethod});return p.lateZiHourMode=v,{...p,summary:T(p)}}if(a==="hepan"){if(e.hourUnknown===!0||e.partner&&e.partner.hourUnknown===!0)throw G("HOUR_UNKNOWN","合盘需要双方都有出生时刻:夫妻宫与大运都依赖时支。请补齐时刻后再看,或用八字三柱模式各自看年/月/日。");const l=e.partner;if(!l||typeof l!="object")throw G("E_PARTNER","合盘需要 partner:{ datetime, gender, address? },其中 partner.datetime 是对方的公历出生时间");if(!l.datetime)throw G("E_PARTNER",'缺少 partner.datetime(对方的公历出生时间),例如 partner: {"datetime":"1992-03-03T10:00","gender":"female"}');const i=e.partner2;if(i!=null){if(typeof i!="object"||Array.isArray(i))throw G("E_PARTNER","partner2 需要 { datetime, gender, address? };不想看三方就整段省略(null 视同未传)");if(!i.datetime)throw G("E_PARTNER",'缺少 partner2.datetime(第三方的公历出生时间),例如 partner2: {"datetime":"1988-09-09T08:00","gender":"male"}')}const v=e.chart==="ziwei"?"ziwei":"bazi",p=(Y,le)=>({...C(Y.datetime),gender:Z(Y.gender,le),trueSolar:Y.trueSolar,lateZi:Y.lateZi,dst:Y.dst!==!1,address:typeof Y.address=="string"?Y.address:void 0,longitude:typeof Y.longitude=="number"?Y.longitude:void 0,geo:Y.geo&&typeof Y.geo=="object"?Y.geo:void 0}),W=p(e,"你(主方)"),se=p(l,"对方"),Ke=(Y,le)=>v==="ziwei"?t({a:Y,b:le}):f({a:Y,b:le}),de=Ke(W,se);if(i){const Y=p(i,"第三方");de.triple=c([{key:"a-b",a:"你",b:"对方",result:de},{key:"a-c",a:"你",b:"第三方",result:Ke(W,Y)},{key:"b-c",a:"对方",b:"第三方",result:Ke(se,Y)}])}return{...de,summary:ke(de)}}if(a==="meihua"){let l;e.mode!=="number"&&C(e.datetime);try{l=V({mode:e.mode==="number"?"number":"time",datetime:e.datetime,upper:e.upper,lower:e.lower,changing:e.changing,lateZi:e.lateZi})}catch(i){const v=i&&i.message||String(i);throw G(i&&i.code||"E_INPUT",i&&i.code?v:`梅花起卦参数不完整:${v}`)}return{...l,summary:he(l)}}if(a==="liuyao"){if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);let l;if(e.lines===void 0||e.lines===null)l=pe(ue(e.seed));else{if(!Array.isArray(e.lines))throw G("E_LINES","lines 必须是数组:自下而上 6 个爻值(6 老阴 / 7 少阳 / 8 少阴 / 9 老阳)");if(e.lines.length!==6)throw G("E_LINES",`六爻需要正好 6 个爻值(自下而上),收到 ${e.lines.length} 个;留空则由引擎随机摇卦`);l=e.lines.map(Number)}let i,v=null;const p=e.datetime?C(e.datetime):Dn(e.asOf);if(p){e.datetime||(v=p);const le=g(O($(p.year,p.month,p.day)));i={stem:le.stem,branch:le.branch,name:le.name}}let W;try{W=A({lines:l,question:e.question,dayGanZhi:i})}catch(le){throw G(le&&le.code||"E_LINES",le&&le.message?le.message:le)}const se=fe(W,{direction:e.direction,gender:e.gender});se.liuqin&&(W.useGod=se);let Ke=null;if(p)try{Ke=(n({year:p.year,month:p.month,day:p.day,hour:p.hour,minute:p.minute}).monthGanZhi||"")[1]||null}catch{Ke=null}const de=o(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});de&&(W.hexStrength=de);const Y=q(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});if(Y&&(W.jinTuiPower=Y),se.liuqin){const le=U(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});le&&(W.useGodStrength=le);const j=K(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});j&&(W.fushenAccess=j);const ie=_(W,se,{monthBranch:Ke});ie&&(W.yingqi=ie)}return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(W.seed=Number(e.seed)),{...W,...v?{asOf:v}:{},summary:tn(W)}}if(a==="almanac"){const l=C(e.datetime),i=We({year:l.year,month:l.month,day:l.day});return{...i,summary:Qn(i)}}if(a==="zeri"){if(!(e.candidates!==void 0&&e.candidates!==null)&&(typeof e.startDate!="string"||!e.startDate.trim()))throw G("E_INPUT",'择日需要 startDate(公历 YYYY-MM-DD,起算日);可另给 days(1–60,默认 30)与 shengXiao(当事人属相)。只想比几天,改给 candidates: ["2026-12-01","2026-12-08"]');let i;try{i=Ge({task:e.task,startDate:e.startDate,days:e.days,shengXiao:e.shengXiao,candidates:e.candidates})}catch(v){throw G(v&&v.code||"E_INPUT",v&&v.message||String(v))}return{...i,summary:et(i)}}if(a==="chenggu"){const l=C(e.datetime),i=/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime)),v=Number.isInteger(e.hour)?e.hour:i?l.hour:null;if(v===null||v<0||v>23)throw G("E_INPUT","称骨必须给时辰:datetime 带时分(如 1990-08-15T10:00),或额外给 hour(0–23)——缺时辰四柱不齐");const p=Fe({year:l.year,month:l.month,day:l.day,hour:v,minute:i?l.minute:0,lateZi:e.lateZi});return{...p,summary:wn(p)}}if(a==="convert"){const l=e.mode==="lunar2solar"?"lunar2solar":"solar2lunar";let i;if(l==="lunar2solar"){if(e.lunarYear==null||e.lunarMonth==null||e.lunarDay==null)throw G("E_INPUT","农历转公历需要 lunarYear / lunarMonth / lunarDay(闰月另加 isLeapMonth: true)");i=ce({mode:l,lunarYear:Number(e.lunarYear),lunarMonth:Number(e.lunarMonth),lunarDay:Number(e.lunarDay),isLeapMonth:e.isLeapMonth===!0})}else{const v=C(e.datetime);i=ce({mode:l,year:v.year,month:v.month,day:v.day})}return{...i,summary:Ee(i)}}if(a==="xiaoliuren"){const l=e.datetime?C(e.datetime):null,i=Qe({mode:e.mode==="number"?"number":"time",date:typeof e.date=="string"&&e.date.trim()?e.date:l?`${l.year}-${l.month}-${l.day}`:void 0,hour:Number.isInteger(e.hour)?e.hour:l&&/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime))?l.hour:void 0,num1:e.num1,num2:e.num2,num3:e.num3,question:e.question,lateZi:e.lateZi});return{...i,summary:Vn(i)}}if(a==="star"){const l=C(e.datetime),i=De({year:l.year,month:l.month,day:l.day});return{...i,summary:te(i)}}if(a==="numerology"){const l=C(e.datetime),i=He({year:l.year,month:l.month,day:l.day});return{...i,summary:dn(i)}}if(a==="mbti"){if(e.answers===void 0||e.answers===null){const i=Je();return{...i,summary:In(i)}}const l=Ze({answers:e.answers});return{...l,summary:En(l)}}if(a==="trend"){const l=C(e.datetime),i=e.asOf?Dn(e.asOf):void 0,v=rt({...l,nowYear:i?i.year:void 0,gender:Z(e.gender),toAge:e.toAge,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...e.hourUnknown===!0?{hourUnknown:!0,hourPrecision:"day"}:{},precision:l.precision,summary:jn(v)}}if(a==="fengshui"){if(e.action!=null&&!["natal","advise","xuankong"].includes(e.action))throw G("E_INPUT",`风水 action 只能是 natal / advise / xuankong,收到「${String(e.action).slice(0,24)}」`);const l=e.action==="advise"?"advise":e.action==="xuankong"?"xuankong":"natal";if(l==="xuankong"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.period!==void 0?{period:e.period}:{},...e.fortuneYear!==void 0?{fortuneYear:e.fortuneYear}:{},...typeof e.sittingOffset=="number"?{sittingOffset:e.sittingOffset}:{},...typeof e.sittingDegree=="number"?{sittingDegree:e.sittingDegree}:{},...typeof e.facingOffset=="number"?{facingOffset:e.facingOffset}:{},...typeof e.facingDegree=="number"?{facingDegree:e.facingDegree}:{},...typeof e.fortuneDate=="string"?{fortuneDate:e.fortuneDate}:{},...typeof e.fortuneTime=="string"?{fortuneTime:e.fortuneTime}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}if(l==="advise"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.datetime?C(e.datetime):{},...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}const i=C(e.datetime),v=nt({action:"natal",year:i.year,month:i.month,day:i.day,gender:Z(e.gender),fortuneYear:e.fortuneYear,dst:e.dst!==!1});return{...v,summary:Pn(v)}}if(a==="name"){if(e.action!=null&&!["assess","generate"].includes(e.action))throw G("E_INPUT",`起名 action 只能是 assess / generate,收到「${String(e.action).slice(0,24)}」`);const l=e.action==="generate"?"generate":"assess",i=e.datetime?C(e.datetime):Number.isInteger(e.year)&&Number.isInteger(e.month)&&Number.isInteger(e.day)?{year:e.year,month:e.month,day:e.day,...Number.isInteger(e.hour)?{hour:e.hour}:{},...Number.isInteger(e.minute)?{minute:e.minute}:{}}:{},v=ot({action:l,surname:e.surname,givenName:e.givenName,limit:e.limit,charElements:e.charElements&&typeof e.charElements=="object"?e.charElements:void 0,strokeOverrides:e.strokeOverrides&&typeof e.strokeOverrides=="object"?e.strokeOverrides:void 0,surnameStrokes:e.surnameStrokes&&typeof e.surnameStrokes=="object"?e.surnameStrokes:void 0,...i,...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},...e.datetime?{lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0}:{}});return{...v,summary:Bn(v)}}throw a?G("E_SYSTEM",`未知体系「${a}」,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。`):G("E_INPUT","缺少 system,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。")}function Qn(e){const a=e.ganzhi,l=e.jieQi&&e.jieQi.next?` 下一节:${e.jieQi.next.name} ${e.jieQi.next.date}`:"",i=e.dayGod?`值日:${e.dayGod.name}(${e.dayGod.type}·${e.dayGod.luck})`:"",v=e.xiu?`二十八宿:${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",p=e.taiShen?`胎神:${e.taiShen}`:"",W=e.positions?`吉神方位:喜神${e.positions.xiShen||"—"} 财神${e.positions.caiShen||"—"} 福神${e.positions.fuShen?e.positions.fuShen.dir:"—"} 阳贵${e.positions.yangGui?e.positions.yangGui.dir:"—"} 阴贵${e.positions.yinGui?e.positions.yinGui.dir:"—"}`:"",se=e.lucky?`吉配生肖:六合${e.lucky.liuhe||"—"} 三合${(e.lucky.sanhe||[]).join("、")||"—"}`:"",Ke=e.nayin&&e.nayin.day?`日柱纳音:${e.nayin.day.name}`:"",de=(e.hours||[]).map(Y=>`${Y.zhi}${Y.ganZhi.slice(0,1)}·${Y.shen}${Y.luck==="吉"?"吉":"凶"}`).join(" ");return[`【黄历】${e.meta.date} ${e.meta.weekday} ${e.lunar.text}`,`干支:${a.year}年 ${a.month}月 ${a.day}日 属${a.shengXiao}`,...e.meta.boundaryNote?[` ${e.meta.boundaryNote}`]:[],`建除:${e.zhiXing}日 冲:${e.chong.text}${e.chong.sha?`(${e.chong.sha})`:""} ${i}`,[v,Ke,p].filter(Boolean).join(" "),`宜:${e.yi.join("、")}`,`忌:${e.ji.join("、")}`,W,se,de?`时辰吉凶:${de}`:"",`节气:上一节 ${e.jieQi.prev?`${e.jieQi.prev.name} ${e.jieQi.prev.date}`:"—"}${l}`,e.dailyHexagram?`每日一卦:${e.dailyHexagram.name} ${e.dailyHexagram.meaning||""}`:"",`口径:${e.meta.scope}`].filter(Boolean).join(`
154
154
  `)}function et(e){const a=e.compare&&e.compare.mode==="candidates",l=a?`【择日·${e.meta.task}】候选 ${e.meta.days} 天:${e.meta.candidates.join("、")}${e.meta.shengXiao?` 当事人属${e.meta.shengXiao}`:"(未给属相,未做冲煞排除)"}`:`【择日·${e.meta.task}】${e.meta.startDate} 起 ${e.meta.days} 天${e.meta.shengXiao?` 当事人属${e.meta.shengXiao}`:"(未给属相,未做冲煞排除)"}`,i=e.days.slice().sort((p,W)=>W.score-p.score).slice(0,a?12:5).map(p=>{const W=p.grade?`,卷十${p.grade.label}·${p.grade.decision}`:"";return`· ${p.date} ${p.weekday} ${p.verdict}(${p.score}分${W}) 宜${p.yi.slice(0,3).join("/")} ${p.reasons.join(";")||"无特别加减分"}`}),v=a?e.compare.best?`这一组里最优:${e.compare.best.date}(${e.compare.best.score}分,${e.compare.best.verdict})`+(e.compare.best.ties.length>1?`;同分:${e.compare.best.ties.filter(p=>p!==e.compare.best.date).join("、")}`:""):"这一组都因冲属相被排除,没有可用的日子":`推荐日:${e.best.length?e.best.join("、"):"本期无(都不够推荐分)"}`;return[l,v,`推荐日:${e.best.length?e.best.join("、"):"无"}`,`可用日:${e.usable.length?e.usable.join("、"):"无"}`,`回避日:${e.avoid.length?e.avoid.slice(0,6).join("、"):"无"}`,a?"候选日逐日:":"逐日排序:",...i,...a?[`比较口径:${e.compare.note}`]:[],`神煞依据:${e.shenshaRef.text};起法 ${e.shenshaRef.volumes.join("、")}。未实现起法:${e.shenshaRef.unsupported.join("、")}(不计分,逐日 shensha.unsupported 列出)。`,...e.shenshaRef.juan10?[`卷十依据:${e.shenshaRef.juan10.text}(${e.shenshaRef.juan10.corpusLines});${e.shenshaRef.juan10.thresholdsNote}`]:[],`口径:${e.meta.scope}`].join(`
155
155
  `)}function wn(e){const a=e.song||{};return[`【称骨】${e.input.solar} ${e.lunar.text}`,`四项:${e.weights.year.label} ${e.weights.month.label} ${e.weights.day.label} ${e.weights.hour.label}`,`合计:${e.total.label}(${e.verdict.band})`,`歌诀(${e.total.label}):${a.text||"—"}`,`释义:${a.plain||"—"}`,`分档白话:${e.verdict.text}`,"口径:骨重与歌诀为通行本口径(各版本歌诀有异文),释义为白话自撰,属民俗娱乐参考。"].join(`
156
156
  `)}function Vn(e){return[`【小六壬·${e.meta.mode}】${e.meta.question?`所问:${e.meta.question}`:""}`,e.meta.originText,`落宫:${e.steps.join(" → ")}`,`断语:${e.result.palace}(${e.result.luck}) ${e.result.text}`].join(`
package/client.js CHANGED
@@ -1,4 +1,4 @@
1
- window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.62.0",factory(Fa){const ya=(function(){try{return Fa("react")}catch{return globalThis.React}})();if(!ya)return{inject:[],apply(){}};const p=ya.createElement,Mt={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.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"},Nt=[{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.62.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",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:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",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:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Nt,K.compute=()=>{throw new Error("命理引擎尚未加载")};const At=Object.create(null),dt=Object.create(null);function Ni(s){return Mt[s]||Mt.bazi||"client.bazi.js"}const Lt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Ai(s){const n=Ni(s);let k=At[n];const I=!!k,X=Lt();if(!k){if(!Fa||typeof Fa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let te=dt[n];te||(te=Fa.async(`./${n}`).then(re=>{const se=re&&(re.Engine||re.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return At[n]=se,se}),dt[n]=te,te.catch(()=>{}).then(()=>{delete dt[n]})),k=await te}for(const te of Object.keys(k))k[te]!==void 0&&(K[te]=k[te]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Nt),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Lt()-X)*10)/10},K}window.__mpEnsureEngine=Ai,window.Engine=K,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=Q=>!!s[Q],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=Q=>k[Q]||"other",X="#ffffff",te="#1c1a15";function re(Q){const ee=String(Q??"").match(/rgba?\(([^)]+)\)/i);if(!ee)return null;const G=ee[1].split(/[,\s/]+/).filter(Boolean).map(Number);return G.length<3||G.slice(0,3).some(B=>!Number.isFinite(B))||G.length>3&&Number.isFinite(G[3])&&G[3]<.95?null:[G[0],G[1],G[2]]}function se(Q){const ee=String(Q||"").replace("#",""),G=ee.length===3?ee.split("").map(B=>B+B).join(""):ee;return/^[0-9a-f]{6}$/i.test(G)?[0,2,4].map(B=>parseInt(G.slice(B,B+2),16)):null}function t(Q){const ee=G=>{const B=G/255;return B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4)};return .2126*ee(Q[0])+.7152*ee(Q[1])+.0722*ee(Q[2])}function ce(Q,ee){const G=t(Q),B=t(ee),he=Math.max(G,B),ca=Math.min(G,B);return(he+.05)/(ca+.05)}function Z(Q){const ee=typeof Q=="string"?re(Q):Q;return ee?ce(ee,se(X))>=ce(ee,se(te))?X:te:""}function le(Q){const ee=String(Q??"").trim();if(!ee)return{lines:null,warning:""};const G=ee.split(/[^0-9]+/).filter(Boolean).map(Number),B=G.filter(he=>![6,7,8,9].includes(he));return G.length===6&&B.length===0?{lines:G,warning:""}:{lines:null,warning:G.length!==6?`爻值需要正好 6 个数字(当前 ${G.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${B.join("/")}),本次按随机摇卦。`}}function ge(Q){const ee=String(Q??"").trim();if(!ee)return null;const G=Number(ee);return Number.isFinite(G)?G:null}function ve(Q){const ee=Q instanceof Date?Q:new Date,G=B=>String(B).padStart(2,"0");return`${ee.getFullYear()}-${G(ee.getMonth()+1)}-${G(ee.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:le,toNumber:ge,parseRGB:re,hexToRGB:se,luminance:t,contrastRatio:ce,pickOnColor:Z,ON_DARK:X,ON_LIGHT:te,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.62.1",factory(Fa){const ya=(function(){try{return Fa("react")}catch{return globalThis.React}})();if(!ya)return{inject:[],apply(){}};const p=ya.createElement,Mt={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.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"},Nt=[{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.62.1",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",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:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",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:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Nt,K.compute=()=>{throw new Error("命理引擎尚未加载")};const At=Object.create(null),dt=Object.create(null);function Ni(s){return Mt[s]||Mt.bazi||"client.bazi.js"}const Lt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Ai(s){const n=Ni(s);let k=At[n];const I=!!k,X=Lt();if(!k){if(!Fa||typeof Fa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let te=dt[n];te||(te=Fa.async(`./${n}`).then(re=>{const se=re&&(re.Engine||re.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return At[n]=se,se}),dt[n]=te,te.catch(()=>{}).then(()=>{delete dt[n]})),k=await te}for(const te of Object.keys(k))k[te]!==void 0&&(K[te]=k[te]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Nt),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Lt()-X)*10)/10},K}window.__mpEnsureEngine=Ai,window.Engine=K,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=Q=>!!s[Q],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=Q=>k[Q]||"other",X="#ffffff",te="#1c1a15";function re(Q){const ee=String(Q??"").match(/rgba?\(([^)]+)\)/i);if(!ee)return null;const G=ee[1].split(/[,\s/]+/).filter(Boolean).map(Number);return G.length<3||G.slice(0,3).some(B=>!Number.isFinite(B))||G.length>3&&Number.isFinite(G[3])&&G[3]<.95?null:[G[0],G[1],G[2]]}function se(Q){const ee=String(Q||"").replace("#",""),G=ee.length===3?ee.split("").map(B=>B+B).join(""):ee;return/^[0-9a-f]{6}$/i.test(G)?[0,2,4].map(B=>parseInt(G.slice(B,B+2),16)):null}function t(Q){const ee=G=>{const B=G/255;return B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4)};return .2126*ee(Q[0])+.7152*ee(Q[1])+.0722*ee(Q[2])}function ce(Q,ee){const G=t(Q),B=t(ee),he=Math.max(G,B),ca=Math.min(G,B);return(he+.05)/(ca+.05)}function Z(Q){const ee=typeof Q=="string"?re(Q):Q;return ee?ce(ee,se(X))>=ce(ee,se(te))?X:te:""}function le(Q){const ee=String(Q??"").trim();if(!ee)return{lines:null,warning:""};const G=ee.split(/[^0-9]+/).filter(Boolean).map(Number),B=G.filter(he=>![6,7,8,9].includes(he));return G.length===6&&B.length===0?{lines:G,warning:""}:{lines:null,warning:G.length!==6?`爻值需要正好 6 个数字(当前 ${G.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${B.join("/")}),本次按随机摇卦。`}}function ge(Q){const ee=String(Q??"").trim();if(!ee)return null;const G=Number(ee);return Number.isFinite(G)?G:null}function ve(Q){const ee=Q instanceof Date?Q:new Date,G=B=>String(B).padStart(2,"0");return`${ee.getFullYear()}-${G(ee.getMonth()+1)}-${G(ee.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:le,toNumber:ge,parseRGB:re,hexToRGB:se,luminance:t,contrastRatio:ce,pickOnColor:Z,ON_DARK:X,ON_LIGHT:te,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
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,卡片感等于零。