dsh-metaphysics 0.58.0 → 0.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1286 -1204
- package/README.md +415 -384
- package/client.almanac.js +5 -4
- package/client.bazi.js +112 -103
- package/client.chenggu.js +13 -12
- package/client.convert.js +5 -4
- package/client.daliuren.js +121 -103
- package/client.fengshui.js +8 -7
- package/client.hepan.js +112 -103
- package/client.js +237 -189
- package/client.liuyao.js +119 -101
- package/client.mbti.js +6 -5
- package/client.name.js +51 -50
- package/client.numerology.js +12 -11
- package/client.qimen.js +117 -99
- package/client.star.js +24 -23
- package/client.tarot.js +113 -95
- package/client.trend.js +112 -103
- package/client.xiaoliuren.js +69 -59
- package/client.zeri.js +15 -14
- package/client.ziwei.js +105 -96
- package/engine/citations.js +52 -3
- package/engine/event-prompt.js +238 -0
- package/engine/guide.js +53 -0
- package/engine/index.js +1736 -1727
- package/engine/interpret-knowledge.js +17 -6
- package/engine/interpret.js +1904 -1889
- package/engine/limits.js +118 -0
- package/engine/liuyao.js +4 -0
- package/engine/qimen-prompt.js +303 -0
- package/engine/yingqi.js +208 -0
- package/package.json +120 -116
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +10738 -9784
package/client.mbti.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:"dsh-metaphysics",chunk:"client.mbti.js",factory(
|
|
1
|
+
window.__ModuleLoader__.load({id:"dsh-metaphysics",chunk:"client.mbti.js",factory(et){const O={};return O.fail=(function(){return{fail:(_,q)=>{const M=new Error(q);return M.code=_,M}}})(),O.diff=(function(){const E=new Set(["summary","interpret","castAt","asOf","precision","disclaimer","note","trueSolarText","civilText","offsetMinutes","input","jd","juMethod","juMethodNote","lateZiHourMode","leapPolicy","schools","bodyMasterSchool","bodyMasterNote","handle","handleError","revision"]),_=a=>a!==null&&typeof a=="object";function q(a,s,u="",c=[]){if(a===s)return c;if(!_(a)||!_(s))return c.push({path:u||"(root)",from:a,to:s}),c;const w=new Set([...Object.keys(a),...Object.keys(s)]);for(const N of w){if(E.has(N))continue;const T=u?`${u}.${N}`:N,A=a[N],Y=s[N];_(A)&&_(Y)?q(A,Y,T,c):JSON.stringify(A)!==JSON.stringify(Y)&&c.push({path:T,from:A,to:Y})}return c}const M=[[/^pillars\.year\.ganzhi$/,"年柱"],[/^pillars\.month\.ganzhi$/,"月柱"],[/^pillars\.day\.ganzhi$/,"日柱"],[/^pillars\.hour\.ganzhi$/,"时柱"],[/^pillars\.\w+\.hidden/,"藏干"],[/^pillars\.\w+\.stemTenGod$/,"十神"],[/^pillars\.\w+\.kongwang/,"空亡"],[/^pillars\.\w+\.dishi$|^pillars\.\w+\.zizuo$/,"十二长生"],[/^pillars\.\w+\.nayin$/,"纳音"],[/^dayMaster\./,"日主"],[/^palaces\.(taiyuan|minggong|shengong)\./,"命身宫"],[/^palaces\.\d+\.(palace|branch|stem|ganzhi)$/,"宫位"],[/^palaces\.\d+\.stars\.\d+\.(name|brightness|type)$/,"星曜"],[/^palaces\.\d+\.shensha\./,"神煞"],[/^palaces\.\d+\.(daxian|xiaoxian)\./,"大限"],[/^palaces\.\d+\.sanfang\./,"三方四正"],[/^palaces\.\d+\./,"宫位"],[/^palaces\./,"命身宫"],[/^soul\./,"命宫"],[/^body\./,"身宫"],[/^doujun\./,"流年斗君"],[/^siZhu\.year$/,"年柱"],[/^siZhu\.month$/,"月柱"],[/^siZhu\.day$/,"日柱"],[/^siZhu\.time$/,"时柱"],[/^ju$|^juNumber$/,"局数"],[/^yuan$/,"三元"],[/^dun$/,"阴阳遁"],[/^daxian(List)?\./,"大限"],[/^fly(Chains|Composite)?\./,"飞星"],[/^pattern/,"格局"],[/^schools\./,"流派回显"],[/^dayun\.jiao\./,"起运"],[/^dayun\.toNextJieDays$/,"起运时间"],[/^dayun\.list\.(\d+)\.ganzhi$/,"大运干支"],[/^dayun\.startAge\./,"起运时间"],[/^dayun\./,"大运评分"],[/^liunian\./,"流年"],[/^jieqi\./,"节气边界"],[/^solarTime\./,"真太阳时"],[/^dayGanZhi$/,"日辰"],[/^hourZhi$/,"时支"],[/^yueJiang\./,"月将"],[/^xunKong$/,"旬空"],[/^lines\.(\d+)\./,"爻"],[/^shensha\./,"神煞"],[/^frame\./,"格局用神"],[/^strength\./,"旺衰"],[/^wuxing\./,"五行计数"],[/^relations\./,"干支关系"],[/^input\./,"输入回显"]],L=[[/^pillars\./,"四柱"],[/^shensha\./,"神煞"],[/^dayun\./,"大运"],[/^liunian\./,"流年"],[/^frame\./,"格局用神"],[/^strength\./,"旺衰"],[/^wuxing\./,"五行计数"],[/^dayMaster\./,"日主"],[/^relations\./,"干支关系"],[/^palaces\.(taiyuan|minggong|shengong)\./,"命身宫"],[/^palaces\.\d+\./,"宫位"],[/^palaces\./,"命身宫"],[/^soul\.|^body\.|^doujun\./,"命身宫"],[/^siZhu\./,"四柱"],[/^ju$|^juNumber$|^yuan$|^dun$/,"局数"],[/^daxian/,"大限"],[/^fly/,"飞星"],[/^pattern/,"格局"],[/^jieqi\./,"节气"],[/^solarTime\./,"真太阳时"],[/^input\./,"输入回显"],[/^lines\./,"爻"]],S=[[/^pillars\.(year|month|day|hour)\.ganzhi$/,"柱"],[/^palaces\.(minggong|shengong)\.ganzhi$/,"命身宫"],[/^soul\.ganzhi$/,"命宫"],[/^body\.branch$/,"身宫"],[/^siZhu\.(year|month|day|time)$/,"柱"],[/^dayun\.jiao\.at$/,"起运"],[/^dayGanZhi$/,"日辰"],[/^hourZhi$/,"时支"],[/^ju$|^juNumber$|^juName$/,"局数"],[/^dun$/,"阴阳遁"],[/^lines\.\d+\.(ganzhi|yinYang|name)$/,"爻"],[/^yueJiang\.(name|zhi)$/,"月将"]];function b(a){for(const[s,u]of M)if(s.test(a))return u;return F(a)||a}function F(a){for(const[s,u]of L)if(s.test(a))return u;return""}function h(a){for(const[s,u]of S)if(s.test(a))return u;return""}function y(a){return[...a].sort((s,u)=>s.path.localeCompare(u.path,"zh-Hans-CN",{numeric:!0}))}function x(a){if(!a.length)return"本盘不受此口径影响:所有字段一致。";const s=a.filter(N=>h(N.path)),u=[...new Set(a.map(N=>F(N.path)).filter(Boolean))],c=s.length?`根因 ${s.length} 处:`+s.slice(0,4).map(N=>`${b(N.path)} ${$(N.from)}→${$(N.to)}`).join("、")+(s.length>4?" 等":""):"无单一根因",w=u.length?`;连带影响 ${u.slice(0,6).join("、")}${u.length>6?" 等":""} ${u.length} 类,共 ${a.length} 处`:`;共 ${a.length} 处`;return c+w+"。"}const $=a=>a===void 0?"—":a===null?"null":typeof a=="string"?a:Array.isArray(a)?a.join("")||"[]":typeof a=="object"?JSON.stringify(a):String(a);function p(a,{title:s="",limit:u=12}={}){const c=[];if(s&&c.push(`【${s}】`),c.push(x(a)),!a.length)return c.join(`
|
|
2
2
|
`);const w=y(a.filter(T=>h(T.path))),N=y(a.filter(T=>!h(T.path)));if(w.length){c.push(""),c.push(" 根因(口径直接改动):");for(const T of w)c.push(` ${b(T.path).padEnd(6)} ${$(T.from)} → ${$(T.to)}`)}if(N.length){c.push(""),c.push(` 连带变化(${N.length} 处,展示前 ${Math.min(u,N.length)} 处):`);for(const T of N.slice(0,u))c.push(` ${b(T.path).padEnd(6)} ${$(T.from)} → ${$(T.to)}`);if(N.length>u){const T={};for(const A of N.slice(u)){const Y=F(A.path)||"其他";T[Y]=(T[Y]||0)+1}c.push(" 其余:"+Object.entries(T).map(([A,Y])=>`${A} ${Y} 处`).join("、"))}}return c.join(`
|
|
3
3
|
`)}const z=(a,s,u,c,w,N)=>({key:a,title:s,short:u,read:T=>{const A=T[a]!==void 0?T[a]:T.schools&&T.schools[a];return N[A]?A:c},alt:T=>T===w?c:w,label:T=>N[T]||T}),D={bazi:[{key:"lateZi",title:"晚子时:23:00 后是否换日",short:"晚子时",read:a=>a.lateZi!==!1,alt:a=>!a,label:a=>a?"换日":"不换日"},{key:"trueSolar",title:"真太阳时:是否按出生地经度修正",short:"真太阳时",read:a=>a.trueSolar!==!1,alt:a=>!a,label:a=>a?"修正":"不修正"}],ziwei:[{key:"leapMonth",title:"闰月归月:按日切分 / 整月归次月",short:"闰月归月",read:a=>a.leapMonth==="next"||a.leapMonth==="prev"?a.leapMonth:"split",alt:a=>a==="split"?"next":"split",label:a=>({split:"按日切分",next:"整月归次月",prev:"整月归本月"})[a]||a},{key:"trueSolar",title:"真太阳时:是否按出生地经度修正",short:"真太阳时",read:a=>a.trueSolar!==!1,alt:a=>!a,label:a=>a?"修正":"不修正"},z("brightnessSchool","亮度表:默认 / QS 七档","亮度表","default","QS",{default:"默认",QS:"QS(七档)",XD1:"XD1(七档)",ZZ:"ZZ(五档)",XD2:"XD2(五档)"}),z("gengYearSihua","庚干四化:阳武阴同 / 同科阴忌","庚干四化","GYWYT","GYWTY",{GYWYT:"阳武阴同",GYWTY:"同科阴忌",GYWFT:"府科同忌",GYWFX:"府科相忌",GYWTX:"同科相忌"}),z("tianmaSchool","天马:按年支 / 按生月","天马","year-branch","month-branch",{"year-branch":"年支","month-branch":"生月"}),z("tiankongSchool","天空:不排 / 年支顺行","天空","off","normal",{off:"不排",normal:"年支顺行","shun-jia-shi":"加生时"}),z("jiekongSchool","截空旬空:不排 / 正副双星","截空旬空","off","double",{off:"不排",single:"单星",double:"正副双星",zhanyan:"占验派"}),z("kuiyueSchool","魁钺:qs1 / qs2","魁钺","qs1","qs2",{qs1:"qs1",qs2:"qs2","zhong-yiming":"中一鸣",network:"网络"}),z("tianshiTianshang","天伤天使:常规 / 中州互换","天伤天使","normal","zhongzhou",{normal:"常规",zhongzhou:"中州(阴男阳女互换)"}),z("changshengSchool","长生:阴阳顺逆 / 火土起寅","长生","yin-yang-shun-ni","huo-tu",{"yin-yang-shun-ni":"阴阳顺逆","shui-tu":"水二","huo-tu":"火土(土五局起寅)"}),z("lateZishi","晚子时:归当日 / 归次日","晚子时","current-day","next-day",{"current-day":"归当日","next-day":"归次日","all-current":"全归当日","day-cur-time-next":"日归当日·时归次日"}),z("shenzhuSchool","身主:子午皆火星 / 子铃午火","身主","common","verse",{common:"子午皆火星",verse:"子铃午火(安身主诀逐字)"})],qimen:[{key:"juMethod",title:"取局流派:拆补 / 超神接气 / 置闰",short:"取局流派",read:a=>["chaibu","chaoshen","zhirun"].includes(a.juMethod)?a.juMethod:"chaibu",alt:a=>a==="chaibu"?"zhirun":"chaibu",label:a=>({chaibu:"拆补法",chaoshen:"超神接气",zhirun:"置闰法"})[a]||a},{key:"lateZiHourMode",title:"晚子时:23:00 后归当日 / 次日",short:"晚子时归日",read:a=>a.lateZiHourMode==="next-day"?"next-day":"same-day",alt:a=>a==="next-day"?"same-day":"next-day",label:a=>a==="next-day"?"归次日":"归当日"}]},m={bazi:[{path:"pillars.day.ganzhi",label:"日柱"},{path:"pillars.hour.ganzhi",label:"时柱"},{path:"strength.level",label:"旺衰"},{path:"frame.primaryName",label:"格局"},{path:"frame.yongshen.favor",label:"喜用"},{path:"dayun.jiao.at",label:"起运"}],ziwei:[{path:"soul.ganzhi",label:"命宫"},{path:"body.branch",label:"身宫支"},{path:"bureau.name",label:"五行局"},{path:"bodyMaster",label:"身主"},{path:"daxianList.0.ages",label:"起大限"}],qimen:[{path:"siZhu.day",label:"日柱"},{path:"ju",label:"局数"},{path:"zhiFu.star",label:"值符"},{path:"zhiShi.gate",label:"值使"}]};function g(a,s){let u=a;for(const c of String(s).split(".")){if(u==null)return;u=u[c]}return u}function r(a){return a==null?"—":Array.isArray(a)?a.join("、"):typeof a=="object"?"—":String(a)}function l(a,s,u){return(m[a]||[]).map(w=>{const N=r(g(s,w.path)),T=r(g(u,w.path));return{key:w.path,label:w.label,current:N,alt:T,changed:N!==T}})}return{diffObjects:q,labelOf:b,categoryOf:F,rootOf:h,sortDiffs:y,summarize:x,formatValue:$,renderDiff:p,CALIBER_SWITCHES:D,CALIBER_VIEWS:m,viewCell:r,viewRows:l}})(),O.fingerprint=(function(){const E="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function _(S){return JSON.stringify(q(S))}function q(S){if(S===null)return null;const b=typeof S;if(b==="string")return typeof S.normalize=="function"?S.normalize("NFC"):S;if(b==="number")return Number.isFinite(S)?Object.is(S,-0)?0:S:null;if(b==="boolean")return S;if(Array.isArray(S))return S.map(q);if(b==="object"){const F={};for(const h of Object.keys(S).sort()){const y=S[h];y===void 0||typeof y=="function"||typeof y=="symbol"||(F[h]=q(y))}return F}return null}function M(S){const b=String(S);let F=2166136261,h=2654435769;for(let $=0;$<b.length;$+=1){const p=b.charCodeAt($);for(const z of[p&255,p>>>8])F=Math.imul(F^z,16777619),h=Math.imul(h^z,2246822507)}let y=(F>>>0)*8+(h>>>29),x="";for(let $=0;$<7;$+=1)x=E[y%32]+x,y=Math.floor(y/32);return x}function L(S={}){const b=String(S.system||""),F=String(S.version||"dev"),h=S.seed===void 0||S.seed===null||S.seed===""?null:Number(S.seed),y=S.asOf?String(S.asOf):null,x=S.params&&typeof S.params=="object"?S.params:{},$=_({system:b,params:x,seed:h,asOf:y}),p=_({base:$,version:F});return{id:`LY-${M(p)}`,baseId:`LY-${M($)}`,version:F,system:b,payload:$}}return{canonicalJson:_,shortHash:M,fingerprintOf:L}})(),O.validate=(function(){const{fail:E}=O.fail||{},_=1600,q=2400;function M(h){return h%4===0&&h%100!==0||h%400===0}function L(h,y){return y===2?M(h)?29:28:[31,28,31,30,31,30,31,31,30,31,30,31][y-1]||0}const S=h=>typeof h=="string"?`「${h}」`:String(h),b="引擎只接受解析好的公历字段 { year, month, day, hour?, minute? };字符串请先交给宿主层的 parseDateTime 解析";function F(h,y=""){const x=y?`${y} 的`:"";if(!h||typeof h!="object"||Array.isArray(h)){const D=h===null?"null":Array.isArray(h)?"数组":typeof h;throw E("E_INPUT",`${x}入参必须是对象(收到 ${D});${b}`)}const $=h.hour===void 0?0:h.hour,p=h.minute===void 0?0:h.minute;for(const[D,m]of[["year",h.year],["month",h.month],["day",h.day],["hour",$],["minute",p]])if(!Number.isInteger(m))throw E("E_INPUT",`${x}${D} 必须是整数(收到 ${S(m)});${b}`);if(h.year<_||h.year>q)throw E("E_INPUT",`${x}year 超出支持范围 ${_}–${q}(收到 ${h.year});更早的年份时区与历法口径不可靠`);if(h.month<1||h.month>12)throw E("E_INPUT",`${x}month 超出范围 1–12(收到 ${h.month})`);const z=L(h.year,h.month);if(h.day<1||h.day>z)throw E("E_INPUT",`${x}日期不存在:${h.year}-${h.month}-${h.day}(${h.year} 年 ${h.month} 月只有 ${z} 天)`);if($<0||$>23)throw E("E_INPUT",`${x}hour 超出范围 0–23(收到 ${$})`);if(p<0||p>59)throw E("E_INPUT",`${x}minute 超出范围 0–59(收到 ${p})`);return h}return{MIN_YEAR:_,MAX_YEAR:q,isLeapYear:M,daysInMonth:L,assertCivil:F}})(),O.lru=(function(){function E({max:_=64,ttlMs:q=0,name:M="lru",now:L=()=>Date.now()}={}){const S=new Map,b={name:M,hits:0,misses:0,evictions:0,expirations:0},F=h=>q>0&&L()-h.at>q;return{name:M,max:_,ttlMs:q,get(h){const y=S.get(h);if(!y||F(y)){y&&(S.delete(h),b.expirations+=1),b.misses+=1;return}return S.delete(h),S.set(h,y),b.hits+=1,y.value},set(h,y){for(S.has(h)&&S.delete(h),S.set(h,{value:y,at:L()});S.size>_;)S.delete(S.keys().next().value),b.evictions+=1;return y},has(h){const y=S.get(h);return y?F(y)?(S.delete(h),b.expirations+=1,!1):!0:!1},delete(h){return S.delete(h)},clear(){S.clear()},get size(){return S.size},stats(){const h=b.hits+b.misses;return{name:M,size:S.size,max:_,hits:b.hits,misses:b.misses,evictions:b.evictions,expirations:b.expirations,hitRate:h?b.hits/h:0}}}}return{createLru:E}})(),O.nayin=(function(){const E=["海中金","炉中火","大林木","路旁土","剑锋金","山头火","涧下水","城头土","白蜡金","杨柳木","泉中水","屋上土","霹雳火","松柏木","长流水","沙中金","山下火","平地木","壁上土","金箔金","覆灯火","天河水","大驿土","钗钏金","桑柘木","大溪水","沙中土","天上火","石榴木","大海水"];function _(q){const M=(Number(q)%60+60)%60,L=E[Math.floor(M/2)];return{name:L,element:L[2]}}return{NAYIN_NAMES:E,nayinOf:_}})(),O.sanhe=(function(){const E=[{branches:["申","子","辰"],element:"水"},{branches:["亥","卯","未"],element:"木"},{branches:["寅","午","戌"],element:"火"},{branches:["巳","酉","丑"],element:"金"}],_=Object.fromEntries(E.map(L=>[L.branches.join(""),L.element])),q=Object.fromEntries(E.flatMap(L=>L.branches.map(S=>[S,L.element])));function M(L){return E.find(S=>S.branches.includes(L))||null}return{SANHE_GROUPS:E,SANHE:_,SANHE_ELEMENT:q,sanheGroupOf:M}})(),O["vsop-earth"]=(function(){const E=[[1.75347045673,0,0],[.03341656453,4.66925680415,6283.0758499914],[.00034894275,4.62610242189,12566.1516999828],[3417572e-11,2.82886579754,3.523118349],[3497056e-11,2.74411783405,5753.3848848968],[3135899e-11,3.62767041756,77713.7714681205],[2676218e-11,4.41808345438,7860.4193924392],[2342691e-11,6.13516214446,3930.2096962196],[1273165e-11,2.03709657878,529.6909650946],[1324294e-11,.74246341673,11506.7697697936],[901854e-11,2.04505446477,26.2983197998],[1199167e-11,1.10962946234,1577.3435424478],[857223e-11,3.50849152283,398.1490034082],[779786e-11,1.17882681962,5223.6939198022],[99025e-10,5.23268072088,5884.9268465832],[753141e-11,2.53339052847,5507.5532386674],[505267e-11,4.58292599973,18849.2275499742],[492392e-11,4.20505711826,775.522611324],[356672e-11,2.91954114478,.0673103028],[284125e-11,1.89869240932,796.2980068164],[242879e-11,.34481445893,5486.777843175],[317087e-11,5.84901948512,11790.6290886588],[271112e-11,.31486255375,10977.078804699],[206217e-11,4.80646631478,2544.3144198834],[205478e-11,1.86953770281,5573.1428014331],[202318e-11,2.45767790232,6069.7767545534],[126225e-11,1.08295459501,20.7753954924],[155516e-11,.83306084617,213.299095438],[115132e-11,.64544911683,.9803210682],[102851e-11,.63599845579,4694.0029547076],[101724e-11,4.2667980198,7.1135470008],[99206e-11,6.20992926918,2146.1654164752],[132212e-11,3.41118292683,2942.4634232916],[97607e-11,.68101342359,155.4203994342],[85128e-11,1.29870764804,6275.9623029906],[74651e-11,1.755089133,5088.6288397668],[101895e-11,.97569280312,15720.8387848784],[84711e-11,3.67080093031,71430.69561812909],[73547e-11,4.67926633877,801.8209311238],[73874e-11,3.50319414955,3154.6870848956],[78757e-11,3.03697458703,12036.4607348882],[79637e-11,1.80791287082,17260.1546546904],[85803e-11,5.9832263126,161000.6857376741],[56963e-11,2.78430458592,6286.5989683404],[61148e-11,1.81839892984,7084.8967811152],[69627e-11,.83297621398,9437.762934887],[56116e-11,4.38694865354,14143.4952424306],[62449e-11,3.97763912806,8827.3902698748],[51145e-11,.28306832879,5856.4776591154],[55577e-11,3.47006059924,6279.5527316424],[41036e-11,5.36817592855,8429.2412664666],[51605e-11,1.33282739866,1748.016413067],[51992e-11,.18914947184,12139.5535091068],[49e-8,.48735014197,1194.4470102246],[392e-9,6.16833020996,10447.3878396044],[3557e-10,1.775968892,6812.766815086],[3677e-10,6.04133863162,10213.285546211],[36596e-11,2.56957481827,1059.3819301892],[33296e-11,.59310278598,17789.845619785],[35954e-11,1.70875808777,2352.8661537718],[40938e-11,2.39850938714,19651.048481098],[30047e-11,2.73975124088,1349.8674096588],[30412e-11,.44294464169,83996.84731811189],[23663e-11,.48473622521,8031.0922630584],[23574e-11,2.06528133162,3340.6124266998],[21089e-11,4.14825468851,951.7184062506],[24738e-11,.21484762138,3.5904286518],[25352e-11,3.16470891653,4690.4798363586],[22823e-11,5.22195230819,4705.7323075436],[21419e-11,1.42563910473,16730.4636895958],[21891e-11,5.55594302779,553.5694028424],[203e-9,.37133792946,283.8593188652]],_=[[6283.0758499914,0,0],[.00206058863,2.67823455808,6283.0758499914],[4303419e-11,2.63512233481,12566.1516999828],[425264e-11,1.59046982018,3.523118349],[109017e-11,2.96631010675,1577.3435424478],[93479e-11,2.59211109542,18849.2275499742],[119305e-11,5.79555765566,26.2983197998],[72121e-11,1.13840581212,529.6909650946],[67784e-11,1.87453300345,398.1490034082],[6735e-10,4.40932832004,5507.5532386674],[59045e-11,2.88815790631,5223.6939198022],[55976e-11,2.17471740035,155.4203994342],[45411e-11,.39799502896,796.2980068164],[36298e-11,.46875437227,775.522611324],[28962e-11,2.64732254645,7.1135470008],[20844e-11,5.34138275149,.9803210682]],q=[[8721859e-11,1.07253635559,6283.0758499914],[99099e-10,3.14159265359,0],[294833e-11,.43717350256,12566.1516999828],[27338e-11,.05295636147,3.523118349],[16333e-11,5.18820215724,26.2983197998],[15745e-11,3.68504712183,155.4203994342],[9425e-11,.29667114694,18849.2275499742],[8938e-11,2.05706319592,77713.7714681205],[694e-10,.82691541038,775.522611324],[5061e-11,4.6624323168,1577.3435424478]],M=[[289058e-11,5.84173149732,6283.0758499914],[20712e-11,6.0498393902,12566.1516999828],[2962e-11,5.1956057957,155.4203994342],[2527e-11,3.14159265359,0],[1288e-11,4.7219761197,3.523118349]],L=[[7714e-11,4.14117321449,6283.0758499914],[1016e-11,3.27573644241,12566.1516999828]];function S(b){let F=0;for(const[y,x,$]of E)F+=y*Math.cos(x+$*b);let h=1;for(const y of[_,q,M,L]){h*=b;for(const[x,$,p]of y)F+=x*h*Math.cos($+p*b)}return F}return{earthL:S}})(),O.calendar=(function(){const{earthL:E}=O["vsop-earth"]||{},{createLru:_}=O.lru||{},q=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"],M=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],L=["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"];function S(P){return(285+15*P)%360}function b(P,C,I){const B=Math.floor((14-C)/12),G=P+4800-B,W=C+12*B-3;return I+Math.floor((153*W+2)/5)+365*G+Math.floor(G/4)-Math.floor(G/100)+Math.floor(G/400)-32045}function F(P){const C=P+32044,I=Math.floor((4*C+3)/146097),B=C-Math.floor(146097*I/4),G=Math.floor((4*B+3)/1461),W=B-Math.floor(1461*G/4),V=Math.floor((5*W+2)/153);return{year:100*I+G-4800+Math.floor(V/10),month:V+3-12*Math.floor(V/10),day:W-Math.floor((153*V+2)/5)+1}}function h(P,C){for(let I=0;I<60;I++)if(I%10===P&&I%12===C)return I;return-1}function y(P){const C=(P%60+60)%60;return{index:C,stem:q[C%10],branch:M[C%12],name:q[C%10]+M[C%12]}}function x(P){return((P+49)%60+60)%60}function $(P){const C=P-2451545,I=C/36525,B=C/365250;let G=E(B)*180/Math.PI+180;G=(G%360+360)%360;const W=(5029.0966*I+1.11113*I*I-6e-6*I*I*I)/3600;G+=W,G-=.09033/3600;const V=(125.04452-1934.136261*I)*Math.PI/180,ce=(280.4665+36000.7698*I)*Math.PI/180,he=(218.3165+481267.8813*I)*Math.PI/180,xe=(-17.2*Math.sin(V)-1.32*Math.sin(2*ce)-.23*Math.sin(2*he)+.21*Math.sin(2*V))/3600;G+=xe;const be=(357.52911+35999.05029*I-1537e-7*I*I)*Math.PI/180,pe=.016708634-42037e-9*I-1267e-10*I*I,Te=1.000001018*(1-pe*pe)/(1+pe*Math.cos(be+(1.914602-.004817*I)*(Math.PI/180)*Math.sin(be)));return G-=20.4898/3600/(Te||1),(G%360+360)%360}function p(P){const C=[[1900,-2.8],[1920,21.2],[1940,24.3],[1950,29.1],[1960,33.2],[1970,40.2],[1980,50.5],[1990,56.9],[2e3,63.8],[2010,66.1],[2020,69.4],[2030,72],[2050,80],[2100,110]];if(P<=C[0][0])return C[0][1];for(let I=1;I<C.length;I++)if(P<=C[I][0]){const[B,G]=C[I-1],[W,V]=C[I];return G+(V-G)*(P-B)/(W-B)}return C[C.length-1][1]}const z=8/24,D=7.7611/24,m=2425612+4/24;function g(P){return P<m?D:z}const r=_({max:4096,name:"termInstant"}),l=1e-5,a=new Map,s=365.2422;function u(P,C){const I=S(C),B=b(P,1,5)-.5+C*15.2184,G=a.get(C);let W=G!==void 0?G+s:B;Math.abs(W-B)>20&&(W=B);for(let ce=0;ce<12;ce++){let he=I-$(W);if(he=((he+180)%360+360)%360-180,W+=he/.98564736,Math.abs(he)<l)break}a.set(C,W);const V=W-p(P)/86400;return V+g(V)}function c(P,C){const I=P*24+C,B=r.get(I);if(B!==void 0)return B;const G=u(P,C);return r.set(I,G),G}function w(P){const C=Math.floor(P+.5),I=P+.5-C,B=Math.round(I*1440),{year:G,month:W,day:V}=F(C);return{year:G,month:W,day:V,hour:Math.floor(B/60)%24,minute:B%60}}function N({year:P,month:C,day:I,hour:B=0,minute:G=0}){return b(P,C,I)-.5+(B*60+G)/1440}function T(P,C,I){const B=b(P,C,I)-b(P,1,1)+1,G=2*Math.PI*(B-81)/364;return 9.87*Math.sin(2*G)-7.53*Math.cos(G)-1.5*Math.sin(G)}const A=_({max:8,name:"termWindow"}),Y=_({max:32,name:"termYear"}),X=Array.from({length:24},(P,C)=>C),ne=X.filter(P=>P%2===0);function oe(P,C){const I=C?`${P}|jie`:`${P}|all`,B=Y.get(I);if(B)return B;if(C){const W=Y.get(`${P}|all`);if(W){const V=W.filter(ce=>ce.index%2===0);return Y.set(I,V),V}}const G=[];for(const W of C?ne:X)G.push({year:P,index:W,name:L[W],jd:c(P,W)});return G.sort((W,V)=>W.jd-V.jd),Y.set(I,G),G}function ie(P,C={}){const I=C.jieOnly===!0,B=I?`${P}|jie`:P,G=A.get(B);if(G)return G;const W=[...oe(P-1,I),...oe(P,I),...oe(P+1,I)];return W.sort((V,ce)=>V.jd-ce.jd),A.set(B,W),W}function se(P){if(typeof P!="string"||P.length<2)return[];const C=q.indexOf(P[0]),I=M.indexOf(P[1]);if(C<0||I<0)return[];const B=h(C,I);if(B<0)return[];const G=Math.floor(B/10)*10;return[M[(G+10)%12],M[(G+11)%12]]}function de(P,C){let I=null;for(const B of P)if(B.index%2===0)if(B.jd<=C)I=B;else break;return I}function ge(P,C){for(const I of P)if(I.index%2===0&&I.jd>C)return I;return null}function $e(P){const C=w(P),I=B=>String(B).padStart(2,"0");return`${C.year}-${I(C.month)}-${I(C.day)} ${I(C.hour)}:${I(C.minute)}`}function ye(){return[r.stats(),Y.stats(),A.stats()]}return{STEMS:q,BRANCHES:M,TERM_NAMES:L,termLongitude:S,toJDN:b,fromJDN:F,sexagenaryIndex:h,ganzhiName:y,dayGanzhiIndex:x,sunLongitude:$,deltaTSeconds:p,OFFSET_MODERN:z,OFFSET_BEIJING_LOCAL:D,CUTOVER_JD:m,localOffsetFor:g,termInstantJd:c,jdToParts:w,partsToJd:N,equationOfTime:T,termWindow:ie,xunKongOf:se,previousJie:de,nextJie:ge,formatJd:$e,cacheMetrics:ye}})(),O.lunar=(function(){const{toJDN:E,jdToParts:_,termInstantJd:q,deltaTSeconds:M,localOffsetFor:L,OFFSET_MODERN:S}=O.calendar||{},b=29.530588861,F=245155009766e-5,h=Math.PI/180;function y(g){const r=g/1236.85,l=F+b*g+15437e-8*r*r-15e-8*r*r*r+73e-11*r*r*r*r,a=1-.002516*r-74e-7*r*r,s=(2.5534+29.1053567*g-14e-7*r*r-11e-8*r*r*r)*h,u=(201.5643+385.81693528*g+.0107582*r*r+1238e-8*r*r*r-58e-9*r*r*r*r)*h,c=(160.7108+390.67050284*g-.0016118*r*r-227e-8*r*r*r+11e-9*r*r*r*r)*h,w=(124.7746-1.56375588*g+.0020672*r*r+215e-8*r*r*r)*h,N=-.4072*Math.sin(u)+.17241*a*Math.sin(s)+.01608*Math.sin(2*u)+.01039*Math.sin(2*c)+.00739*a*Math.sin(u-s)-.00514*a*Math.sin(u+s)+.00208*a*a*Math.sin(2*s)-.00111*Math.sin(u-2*c)-57e-5*Math.sin(u+2*c)+56e-5*a*Math.sin(2*u+s)-42e-5*Math.sin(3*u)+42e-5*a*Math.sin(s+2*c)+38e-5*a*Math.sin(s-2*c)-24e-5*a*Math.sin(2*u-s)-17e-5*Math.sin(w)-7e-5*Math.sin(u+2*s)+4e-5*Math.sin(2*u-2*c)+4e-5*Math.sin(3*s)+3e-5*Math.sin(u+s-2*c)+3e-5*Math.sin(2*u+2*c)-3e-5*Math.sin(u+s+2*c)+3e-5*Math.sin(u-s+2*c)-2e-5*Math.sin(u-s-2*c)-2e-5*Math.sin(3*u+s)+2e-5*Math.sin(4*u),T=l+N-M(2e3+r*100)/86400;return T+L(T)}function x(g){return Math.floor(g+.5)}function $(g){const r=g-S;return r+L(r)}function p(g){return Math.round((g+.5-F)/b)}function z(g,r,l){for(let a=g-1;a<=g+1;a++)for(let s=1;s<24;s+=2){const u=$(q(a,s)),c=x(u);if(c>=r&&c<l)return{index:s,jd:u}}return null}function D(g,r,l){const a=E(g,r,l),s=x($(q(g,23))),u=a<s?g-1:g,c=x($(q(u,23)));let w=p(c);for(;x(y(w))>c;)w--;for(;x(y(w+1))<=c;)w++;const N=x($(q(u+1,23)));let T=w;for(;x(y(T+1))<=N;)T++;const A=T-w;let Y=-1;if(A===13)for(let ie=1;ie<=A;ie++){const se=x(y(w+ie-1)),de=x(y(w+ie));if(!z(u,se,de)){Y=ie;break}}let X=11,ne=!1,oe=x(y(w));for(let ie=1;ie<=15;ie++){const se=x(y(w+ie-1)),de=x(y(w+ie)),ge=z(u,se,de),$e=ie===Y;if(a>=se&&a<de){const ye=_(y(w+ie-1)),P=$e?(X+10)%12+1:X;return{year:u,lunarYear:ne?u+1:u,month:P,day:a-se+1,isLeap:$e,monthStart:`${ye.year}-${String(ye.month).padStart(2,"0")}-${String(ye.day).padStart(2,"0")}`,hasZhongQi:!!ge}}$e||(X=X%12+1,X===1&&(ne=!0)),oe=de}throw new Error(`农历换算失败:${g}-${r}-${l}`)}function m(g,r,l){return E(g,r,l)}return{SYNODIC:b,newMoonJd:y,dayNumberOf:x,solarToLunar:D,monthStartJd:m}})(),O.geo=(function(){const E=`
|
|
4
4
|
北京 116.41 39.90;上海 121.47 31.23;天津 117.20 39.13;重庆 106.55 29.56
|
|
@@ -66,8 +66,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",chunk:"client.mbti.js",factor
|
|
|
66
66
|
`,_={河北:"石家庄",山西:"太原",内蒙古:"呼和浩特",辽宁:"沈阳",吉林:"长春",黑龙江:"哈尔滨",江苏:"南京",浙江:"杭州",安徽:"合肥",福建:"福州",江西:"南昌",山东:"济南",河南:"郑州",湖北:"武汉",湖南:"长沙",广东:"广州",广西:"南宁",海南:"海口",四川:"成都",贵州:"贵阳",云南:"昆明",西藏:"拉萨",陕西:"西安",甘肃:"兰州",青海:"西宁",宁夏:"银川",新疆:"乌鲁木齐",台湾:"台北"},q={石家庄:[114.51,38.04],太原:[112.55,37.87],沈阳:[123.43,41.8],长春:[125.32,43.82],哈尔滨:[126.53,45.8],南京:[118.8,32.06],杭州:[120.15,30.28],合肥:[117.23,31.82],福州:[119.3,26.08],南昌:[115.86,28.68],济南:[117,36.65],郑州:[113.62,34.75],武汉:[114.3,30.59],长沙:[112.94,28.23],广州:[113.26,23.13],南宁:[108.37,22.82],海口:[110.2,20.04],成都:[104.07,30.67],贵阳:[106.63,26.65],昆明:[102.83,24.88],拉萨:[91.13,29.65],西安:[108.94,34.34],兰州:[103.83,36.06],西宁:[101.78,36.62],银川:[106.23,38.49],乌鲁木齐:[87.62,43.82],台北:[121.52,25.03]},M=(()=>{const x={};for(const $ of E.trim().split(`
|
|
67
67
|
`))for(const p of $.split(";")){const z=p.trim().split(/\s+/);if(z.length!==3)continue;const[D,m,g]=z;x[D]={lon:Number(m),lat:Number(g)}}for(const[$,[p,z]]of Object.entries(q))x[$]||(x[$]={lon:p,lat:z});return x})(),L=/(省|市|地区|盟|自治州|自治县|自治区|特别行政区|县|区|镇|乡|街道|村|小区|社区)/g;function S(x){const $=String(x||"").trim();if(!$)return null;const p=Number($);if(Number.isFinite(p)&&/^-?\d+(\.\d+)?$/.test($)&&p>=60&&p<=150)return{lon:p,lat:null,matched:`${p}°E`,level:"经度",note:"按你输入的经度计算"};const z=$.replace(/\s/g,"").replace(L,""),D=Object.keys(M).sort((g,r)=>r.length-g.length);for(const g of D)if(z.includes(g)){const r=M[g];return{lon:r.lon,lat:r.lat,matched:g,level:"地级市",note:`按 ${g} 估算(约 ${r.lon}°E)`}}const m=$.replace(/\s/g,"");for(const[g,r]of Object.entries(_)){const l=m.indexOf(g);if(l<0)continue;const a=m.charAt(l+g.length);if(a==="区"||a==="县")continue;const s=M[r]||{lon:q[r][0],lat:q[r][1]};return{lon:s.lon,lat:s.lat,matched:r,level:"省会",note:`未匹配到具体城市,按 ${g} 省会 ${r} 估算(约 ${s.lon}°E)`}}return{lon:null,lat:null,matched:null,level:"未匹配",note:`没查到「${$}」,可改填经度(如 116.4)`}}const b=/(区|县|镇|乡|村|小区|街道|路|号|巷|弄|组|队)/,F="dsh-metaphysics/0.23.0 (+https://github.com/xuanfu-web/dsh-metaphysics)";async function h(x,{timeoutMs:$=2500}={}){if(typeof fetch!="function")return null;let p=null;try{const z=typeof AbortController=="function"?new AbortController:null;z&&(p=setTimeout(()=>z.abort(),$));const D="https://nominatim.openstreetmap.org/search?format=jsonv2&limit=1&accept-language=zh-CN&countrycodes=cn&q="+encodeURIComponent(x),m=await fetch(D,{signal:z?z.signal:void 0,headers:{"User-Agent":F}});if(!m||!m.ok)return null;const g=await m.json();if(!Array.isArray(g)||g.length===0)return null;const r=g[0],l=Number(r.lon),a=Number(r.lat);return Number.isFinite(l)?{lon:l,lat:a,matched:r.display_name,level:"在线",note:`在线解析:${r.display_name}`}:null}catch{return null}finally{p&&clearTimeout(p)}}async function y(x,$={}){const p=S(x),z=String(x||"").trim();if(!z||!($.online===!0)||p&&typeof p.lon=="number"&&!b.test(z))return p;const m=await h(z,$);return m?{...m,local:p&&p.lon!=null?p:null}:p&&typeof p.lon=="number"?{...p,onlineFailed:!0,note:`${p.note}(联网解析失败或超时,已退回内置坐标表)`}:{...p,onlineFailed:!0}}return{CITIES:M,PROVINCES:_,resolveAddress:S,geocodeAddress:y}})(),O.random=(function(){function E(M){let L=Number(M)>>>0;return L||(L=2654435769),function(){L=L+1831565813>>>0;let b=L;return b=Math.imul(b^b>>>15,b|1),b^=b+Math.imul(b^b>>>7,b|61),((b^b>>>14)>>>0)/4294967296}}function _(M){if(M==null||M==="")return Math.random;const L=Number(M);return Number.isFinite(L)?E(L):Math.random}function q(M){return M==null||M===""?!0:Number.isFinite(Number(M))}return{mulberry32:E,randomOf:_,isSeed:q}})(),O.dst=(function(){const{daysInMonth:E}=O.validate||{},_={1986:["1986-05-04","1986-09-14"],1987:["1987-04-12","1987-09-13"],1988:["1988-04-10","1988-09-11"],1989:["1989-04-16","1989-09-17"],1990:["1990-04-15","1990-09-16"],1991:["1991-04-14","1991-09-15"]},q=(b,F,h)=>b*1e4+F*100+h;function M(b){const F=_[b.year];if(!F)return!1;const[h,y,x]=F[0].split("-").map(Number),[$,p,z]=F[1].split("-").map(Number),D=q(b.year,b.month,b.day);if(D<q(h,y,x)||D>q($,p,z))return!1;const m=b.hour*60+(b.minute||0);return!(D===q(h,y,x)&&m<120||D===q($,p,z)&&m>=120)}function L(b){const F=b.minute||0;if(!M(b))return{year:b.year,month:b.month,day:b.day,hour:b.hour,minute:F,applied:!1,note:null};let{year:h,month:y,day:x,hour:$}=b;return $-=1,$<0&&($+=24,x-=1,x<1&&(y-=1,y<1&&(y=12,h-=1),x=E(h,y))),{year:h,month:y,day:x,hour:$,minute:F,applied:!0,note:`检出自 ${_[b.year][0]} 至 ${_[b.year][1]} 的中国夏令时:出生钟面时间已减 1 小时校正`}}function S(b,F){const h=Array.isArray(b)?b.slice():[];return F&&F.applied&&F.note&&h.push(F.note),h}return{DST_SPANS:_,inDstSpan:M,applyDst:L,withDstNote:S}})(),O.classics=(function(){const E={ziping:{name:"子平真诠",author:"清·沈孝瞻",base:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/"},ditian:{name:"滴天髓",author:"明·京图(通行本)",base:"https://www.diancang.xyz/xuanxuewushu/ditiansui/"},sanming:{name:"三命通会",author:"明·万民英",base:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/"}},_=[{id:"zp-yongshen",book:"ziping",chapter:"八、论用神",scene:"用神",tags:[],quote:"八字用神,专求月令,以日干配月令地支,而生克不同,格局分焉。财官印食,此用神之善而顺用之者也;煞伤劫刃,用神之不善而逆用之者也。",plain:"用神从月令里找:财、官、印、食四吉神顺用(生之护之),煞、伤、劫、刃四凶神逆用(制之化之)。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53628.html"},{id:"zp-zhenguan",book:"ziping",chapter:"三十一、论正官",scene:"格局",tags:["正官"],quote:"以刑冲破害为忌,则以生之护之为喜矣。存其喜而去其忌则贵,而贵之中又有高低者,何也?",plain:"正官格最忌刑冲破害,喜财生官、印护官;去忌存喜才谈得上贵,贵的层次还要看财印是否并透、有无伤官七煞混杂。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53651.html"},{id:"zp-cai",book:"ziping",chapter:"三十三、论财",scene:"格局",tags:["财","正财","偏财"],quote:"财为我克,使用之物也,以能生官,所以为美。为财帛,为妻妾,为才能,为驿马,皆财类也。",plain:"财是我所克、能为我用之物,因能生官而美;它同时代表钱财、配偶、才能、走动,不只「钱」一项。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53653.html"},{id:"zp-yin",book:"ziping",chapter:"三十五、论印绶",scene:"格局",tags:["印"],quote:"印绶喜其生身,正偏同为美格,故财与印不分偏正,同为一格而论之。",plain:"印能生身,正印偏印都算美格,不分偏正而论;印格的关键在身印强弱与官杀、食伤、财的配合。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53655.html"},{id:"zp-shishen",book:"ziping",chapter:"三十七、论食神",scene:"格局",tags:["食神"],quote:"食神本属泄气,以其能生正财,所以喜之。故食神生财,美格也。财要有根,不必偏正叠出,如身强食旺而财透,大贵之格。",plain:"食神本是泄气,可贵在能生财;食神生财要财有根,身强、食旺、财透三者齐,格局才大。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53657.html"},{id:"zp-pianguan",book:"ziping",chapter:"三十九、论偏官",scene:"格局",tags:["七杀","偏官"],quote:"煞以攻身,似非美物,百大贵之格,多存七煞。盖控制得宜,煞为我用,如大英雄大豪杰,似难驾驭,而处之有方,则惊天动地之功,忽焉而就。",plain:"七煞攻身,看着不美,但大贵之格多有七煞——能控制住就为我所用,像驾驭豪杰,处之有方就能成大事。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53659.html"},{id:"zp-shangguan",book:"ziping",chapter:"四十一、论伤官",scene:"格局",tags:["伤官"],quote:"伤官虽非吉神,实为秀气,故文人学士,多于伤官格内得之。而夏木见水,冬金见火,则又为秀之尤秀者也。",plain:"伤官不是吉神,却是秀气所在,文人多出伤官格;夏木得水、冬金得火,是秀气里更秀的两种。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53661.html"},{id:"zp-yangren",book:"ziping",chapter:"四十三、论阳刃",scene:"格局",tags:["劫财","阳刃"],quote:"阳刃者,劫我正财之神,乃正财之七煞也。禄前一位,惟五阳有之,故为阳刃。不曰劫而曰刃,劫之甚也。刃宜伏制,官煞皆宜,财印相随,尤为贵显。",verifiedQuote:"阳刃者,劫我正财之神,乃正财之七煞也。禄前一位,惟五阳有之",variantNote:"典藏网此页把「故为阳刃」刻作「故为旭刃」,与通行本异文;前段仍可逐字核验",plain:"阳刃是劫财之极(只有五阳干有),宜用官煞制伏;财印相随而不相碍,格局更显。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53663.html"},{id:"zp-lujie",book:"ziping",chapter:"四十五、论建禄月劫",scene:"格局",tags:["比肩","建禄","月劫"],quote:"故建禄与月劫,可同一格,不必加分,皆以透干支,别取财官煞食为用。",plain:"建禄、月劫同看一格,月令本身不算用神,要另看透出的财官煞食取用。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53665.html"},{id:"zp-qihou",book:"ziping",chapter:"十四、论用神配气候得失",scene:"调候",tags:[],quote:"论命惟以月令用神为主,然亦须配气候而互参之。譬如英雄豪杰,生得其时,自然事半功倍;遭时不顺,虽有奇才,成功不易。",plain:"月令用神为主,但必须配气候参看;同样的格局,生在得时的气候里事半功倍,逆着气候就费劲。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53634.html"},{id:"zp-chengbai",book:"ziping",chapter:"九、论用神成败救应",scene:"格局",tags:[],quote:"成中有败,必是带忌;败中有成,全凭救应。",plain:"成格不等于一路顺:成中带忌(官逢财又逢伤、官被合之类)就打了折;败格也未必无救——印来解伤、合来清煞,败中还能转成。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53629.html"},{id:"zp-zaji",book:"ziping",chapter:"十六、论杂气如何取用",scene:"用神",tags:[],quote:"何谓透干?如甲生辰月,透戊则用偏财,透癸则用正印,透乙则用月劫是也。何谓会支?如甲生辰月,逢申与子会局,则用水印是也。一透则一用,兼透则兼用,透而又会,则透与会并用。",plain:"四墓(辰戌丑未)所藏不止一气,所以叫杂气:取用先看哪一藏干透到天干,透一个用一个;没有透干,再看地支有没有与月支会成三合局,会成什么局就取局中那一气。透干与会支同时成立时两样并用。原文对「兼透」只给原则,没有给取舍次序。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53636.html"},{id:"zp-bianhua",book:"ziping",chapter:"十、论用神变化",scene:"格局",tags:[],quote:"故若丁生亥月,本为正官,支全卯未,则化为印。己生申月,本属伤官。藏庚透壬,则化为财。凡此之类皆用神之变化也。",plain:"用神本从月令取,但月令藏干不一:丁生亥月本为正官,支会卯未就化为印;己生申月本属伤官,庚藏壬透就化为财。起点相同,合化一变,取用也跟着变(原文只说变化之由,不断定某盘必化)。",url:"https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53630.html"},{id:"dt-hannuan",book:"ditian",chapter:"通神论·寒暖",scene:"调候",tags:[],quote:"天道有寒暖,生育万物,人道行之,不可过也。",plain:"天有寒暖才能生养万物,人命里寒暖也不能过——过寒过热都要调。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-zaoshi",book:"ditian",chapter:"通神论·燥湿",scene:"调候",tags:[],quote:"地道有燥湿,生成品汇,人道得之,不可偏也。",plain:"地有燥湿才有品类生成,人命得燥湿之气也不能偏。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-shuaiwang",book:"ditian",chapter:"通神论·衰旺",scene:"调候",tags:[],quote:"能知旺衰之真机,其于三命之奥,思过半矣。",plain:"真正看懂旺衰的机关,命理之奥就过了一半——旺衰不是数个数,要看真机。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-zhonghe",book:"ditian",chapter:"通神论·中和",scene:"调候",tags:[],quote:"既识中和之正理,而于五行之妙,有全能焉。",plain:"懂得中和的道理,五行的妙处就都在其中了。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-guansha",book:"ditian",chapter:"通神论·官杀",scene:"十神",tags:["正官","七杀"],quote:"官杀混杂来问我,有可有不可。",plain:"官杀混杂不是一律不好,要看能不能去留取清。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-shangguan",book:"ditian",chapter:"通神论·伤官",scene:"十神",tags:["伤官"],quote:"伤官见官最难辨,可见不可见。",plain:"伤官见官是最难分辨的一条:有的能见,有的不能见,不能一句「伤官见官为祸百端」了事。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-yueling",book:"ditian",chapter:"通神论·月令",scene:"用神",tags:[],quote:"月令乃提纲之府,譬之宅也,人元为用事之神,宅之定向也,不可以不卜。",plain:"月令像宅子,藏干是用事之神,像宅子的朝向,必须细看。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-tiyong",book:"ditian",chapter:"通神论·体用",scene:"用神",tags:[],quote:"道有体用,不可以一端论也,要在扶之抑之得其宜。",plain:"体用不能只看一头,关键是扶抑得宜。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-jingshen",book:"ditian",chapter:"通神论·精神",scene:"用神",tags:[],quote:"人有精神,不可以一偏求也,要在损之益之得其中。",plain:"看精神不能偏执一端,要在损益之间求其中。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"dt-tongguan",book:"ditian",chapter:"通神论·通关",scene:"用神",tags:[],quote:"关内有织女,关外有牛郎,此关若通也,相邀入洞房。",plain:"两股力隔着一道关相望:一边织女、一边牛郎,中间若有一行能把两边接上(一方生它、它再生另一方),对峙就化成相生。原文只给取象,哪一行为关要按五行生克定。",url:"https://www.diancang.xyz/xuanxuewushu/ditiansui/153091.html"},{id:"smt-zhenguan",book:"sanming",chapter:"卷五·论正官",scene:"格局",tags:["正官"],quote:"正官者,乃甲见辛、乙见庚之例。阴阳配合,相制有用,成其道也。故正官为六格之首,止许一位,多则不宜。",plain:"正官取「克我而阴阳相配」,有制而能成用;六格以正官居首,只宜一位,多见就杂。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7582.html"},{id:"smt-zhengcai",book:"sanming",chapter:"卷六·论正财",scene:"格局",tags:["财","正财"],quote:"正财者,乃甲见己、乙见戊之例。受我克制,为我之妻,譬人娶妻,妻赍财嫁我,我必精神康强,而后可享用,若衰微不振,虽妻财丰厚,但能目视,终不得用。",plain:"正财是我克制之物,古人以「娶妻带财」作比:自身精神康强才受用得起,身弱不振,财再厚也只是看着。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7645.html"},{id:"smt-piancai",book:"sanming",chapter:"卷六·论偏财",scene:"格局",tags:["财","偏财"],quote:"何谓偏财?乃甲见戊、乙见己之例。非妻所带,乃众人之财也。切忌有姊妹兄弟分夺,柱无官星,祸患百出。",plain:"偏财取「我克而阴阳不同」:不是妻家带来的私财,而是众人之财,宜流通不宜独占。原文最忌比肩劫财来分夺,又说柱中无官星则多事(旧说的重话照录,本插件只记原文、不作断语)。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7650.html"},{id:"smt-yinshou",book:"sanming",chapter:"卷六·论印绶",scene:"格局",tags:["印"],quote:"印绶者,乃五行生我之名。如甲乙在亥子月,丙丁在寅卯月之类,乃我气之源,为生气,为父母,能护我官星,使无伤克",plain:"印是生我之气,像源头与父母:它能护住官星,使官不受伤克;反过来说,印重就怕财来破。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7655.html"},{id:"smt-shishen",book:"sanming",chapter:"卷六·论食神",scene:"格局",tags:["食神"],quote:"凡命遇财煞之地,食神旺相,煞被食制,不敢为祸,财被食生,充裕不竭,故食神一名寿星,一名爵星,良有以也。",plain:"食神旺,一头制煞、一头生财:煞被制住不敢为祸,财被生起不至枯竭;所以食神又叫寿星、爵星。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7663.html"},{id:"smt-shangguan",book:"sanming",chapter:"卷六·论伤官",scene:"格局",tags:["伤官"],quote:"伤官虽凶,乃我所生,自家之物,伤尽则能生财,财旺则能生官,造化展转有情。",plain:"伤官虽称凶,却是我自己生出来的:伤尽(柱中不见官星)反能生财,财旺再生官,辗转还是有情。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7662.html"},{id:"smt-yangren",book:"sanming",chapter:"卷六·论阳刃",scene:"格局",tags:["阳刃","劫财"],quote:"阳者,阴阳之阳,刃者,刀刃之刃,即禄前一位,言旺越其分,故险。",plain:"阳刃指禄前一位,旺过了本分,所以险;甲丙戊庚壬五阳干才有刃,阴干见伤官同论。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7671.html"},{id:"smt-jianlu",book:"sanming",chapter:"卷六·论建禄",scene:"格局",tags:["建禄","比肩","月劫"],quote:"凡命月令建禄,难招祖业,必主平生见财不聚,却病少寿长,行运再见比肩,克妻妨父损子",plain:"月令建禄是日主临官之地,身旺而财官难取:古说难承祖业、见财不聚,但病少寿长;再走比肩运,古书说克妻妨父损子(属于旧说的重话,本插件只记原文、不作断语)。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7672.html"},{id:"smt-guansha-liu",book:"sanming",chapter:"卷五·官煞去留杂论",scene:"格局",tags:["七杀","偏官"],quote:"凡看去留,要详柱中官煞孰重孰轻,天干透者易去,月支所藏者难去,须伤官食神去官煞之物众而有力,方才去得。",plain:"官煞混见时先比谁重谁轻:天干透出的容易去,月支藏着的难去;用来去官煞的伤官食神要成众、有根有力,才真去得掉。七杀格遇正官混杂,就按这一篇看取舍。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7599.html"},{id:"smt-quzhi",book:"sanming",chapter:"卷六·曲直",scene:"格局",tags:["曲直格","专旺"],quote:"甲乙日得亥卯未局,柱中须有亥字带印为入格,若无亥有卯,止是木之本气,却要见金土为贵,既无亥字,又无金土,则木不秀不实,难以言贵。",plain:"曲直格要木局成方(亥卯未)且带亥字为印,才算入格;只有卯、没有亥,只是木的本气,得另见金土才谈得上贵;两样都没有,木虽旺而无成,难称贵格。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7630.html"},{id:"smt-yanshang",book:"sanming",chapter:"卷六·炎上",scene:"格局",tags:["炎上格","专旺"],quote:"丙丁日遇寅午戌局,柱中须有寅字带印为入格,无寅止是九流近贵之命,若火自旺,无亥水相济,不贵。喜东北方运,忌见辰丑戊己,晦火光明,多主眼疾,或患风气,柱有木制成贵,忌水金乡,怕冲。",plain:"炎上格要火局成方(寅午戌)且带寅字为印才入格;无寅只是偏贵的命。火自旺还要一点水相济,过燥不贵;行运喜东北、忌湿土晦火,也怕冲。原文另带「多主眼疾」一句,属于旧说,本插件只记原文、不作健康判断。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7631.html"},{id:"smt-congge",book:"sanming",chapter:"卷六·从革",scene:"格局",tags:["从革格","专旺"],quote:"庚辛日见巳酉丑局,须带丙丁巳午一二位方成其器,但不可火多。如辛巳、辛酉、辛丑三日不喜五月生,被火所伤,宜八月或水土养育食神印绶为吉。",plain:"从革格是金局成方(巳酉丑),但金要火炼才成器:须带丙丁或巳午一二位,火又不能多。辛巳、辛酉、辛丑三日出身在五月(火旺)被伤,原文说宜八月或水土养育。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7632.html"},{id:"smt-runxia",book:"sanming",chapter:"卷六·润下",scene:"格局",tags:["润下格","专旺"],quote:"壬癸日见申子辰全,忌引卯巳死绝之地,三刑四冲之乡,死绝则不流,冲刑则横流,岁运同。或曰水太泛须柱有土神一两位制之,得成堤岸,既有土怕会木为凶,如有木伤土要金印救解,终是一生成败。",plain:"润下格是水局三合全(申子辰),最忌卯巳死绝与三刑四冲:死绝水不流,冲刑水横流,行运也一样看。水太泛要一两位土作堤,有土又怕木来破堤,木伤土再用金印解救——原文把成败条件摊开讲。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7633.html"},{id:"smt-jiasi",book:"sanming",chapter:"卷六·稼穑",scene:"格局",tags:["稼穑格","专旺"],quote:"赋云:戊己忻逢四季,乃为稼穑之名。是戊己生逢季月,喜见木为官,止得一木为妙,木多则土虚,主虚诈为破家不仁之人。",plain:"稼穑格取戊己生于四季月(辰戌丑未)。原文说喜见一木为官,木多则土虚;后半对木多之人的评语是旧说的重话,本插件只照录条件、不拿来评价人。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7634.html"},{id:"smt-congsha",book:"sanming",chapter:"卷五·弃命从煞",scene:"格局",tags:["从杀格"],quote:"《独步》云:弃命从煞,须要会煞从财,忌煞从煞。盖言从煞格,以煞神太重,身无所归,不得已从之,要行煞旺及财乡,四柱无一点比肩印绶方论,如遇运扶身旺,与煞为敌,从煞不专,故为祸患。",plain:"从煞格是煞太重、日主无所归才「弃命」相从:条件是四柱没有一点比肩印绶扶身,行运喜煞旺与财乡;一旦走扶身之运,与煞为敌,就从得不专。本插件只作结构说明,不据此断寿夭。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7598.html"},{id:"smt-congcai",book:"sanming",chapter:"卷六·弃命从财",scene:"格局",tags:["从财格"],quote:"《独步》云:弃命从财,须要会财,若逢根气,命损无猜。假如丁生酉月,柱多庚辛,日干无气,只得弃命相从,运入北方财官旺地,乃为入格,南行灾。",plain:"从财格要财会成局、日干无气;一见根气就破格,原文用「命损无猜」这种重话写明。以丁生酉月、柱多庚辛为例:只能弃命相从,行北方财官旺地为入格,南行则灾。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7652.html"},{id:"smt-suiyun",book:"sanming",chapter:"卷二·总论岁运",scene:"岁运",tags:[],quote:"行运以生月为运元,最怕行运与太岁冲克,若岁运冲月必祸;若岁运与日相对,谓之返吟,岁运压日,谓之伏吟,二者不利六亲,非横破财,不为吉兆。",plain:"大运以生月为起点,最怕与流年(太岁)冲克:原文说岁运冲月为祸,又把「岁运与日柱相对」叫返吟、「岁运压日」叫伏吟。这两句是按「对日柱」说的,与本插件「干支相同为伏吟、天克地冲为反吟」不是同一套定义(本插件取后者);末句「不利六亲、破财」是旧说的重话,只作变动提示,不作断语。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7539.html"},{id:"smt-renyuan",book:"sanming",chapter:"卷二·论人元司事",scene:"人元",tags:[],quote:"故支吕所藏者主命,谓之人元,名为司事之神,以命术言之为月令。如正月建寅,寅中有艮土用事五日,丙火长生五日,甲木二十日;二月建卯,卯中有甲木用事七日,乙木二十三日;",plain:"地支所藏为「人元」,按月令分日轮值。三命通会这一本给的是另一套日数:寅月艮土(戊土)五日、丙火五日、甲木二十日,卯月甲七日、乙二十三日。它与本插件采用的通行 30 日表(寅月戊7丙7甲16,即 7/7/16;卯月甲10乙20,即 10/20)不是同一套分法;两表各照原样并列,本插件仍按通行表给「第几日谁当权」,不改取格。",url:"https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7529.html"}],q=_.reduce((p,z)=>(p[z.id]=z,p),{}),M={正官格:"正官",七杀格:"七杀",偏官格:"偏官",正财格:"正财",偏财格:"偏财",正印格:"印",偏印格:"印",食神格:"食神",伤官格:"伤官",阳刃格:"阳刃",月劫格:"月劫",建禄格:"建禄"},L={曲直格:"smt-quzhi",炎上格:"smt-yanshang",从革格:"smt-congge",润下格:"smt-runxia",稼穑格:"smt-jiasi",从财格:"smt-congcai",从杀格:"smt-congsha"};function S(p){return q[p]||null}function b(p){return(p&&Array.isArray(p.liunian)?p.liunian:[]).some(m=>m&&m.suiyun&&Array.isArray(m.suiyun.signals)&&m.suiyun.signals.length)?S("smt-suiyun"):null}function F(p){const z=String(p||"");if(M[z])return M[z];const D=z.replace(/格$/,"");return M[D+"格"]||D}function h(p,z){return _.find(D=>D.scene==="格局"&&D.tags.includes(p)&&(!z||D.book===z))||null}function y(p){return p.chapter.replace(/^.*[、·]/,"").replace(/^论/,"")}function x(p,z=5){if(!p)return[];const D=[],m=new Set,g=(A,Y)=>{!A||m.has(A.id)||D.length>=z||(m.add(A.id),D.push({...A,why:Y}))},r=Array.isArray(p.geju)?p.geju:p.frame&&Array.isArray(p.frame.geju)?p.frame.geju:[],l=r.some(A=>A&&A.kind==="化气格");for(const A of r){if(A&&A.status==="破格"||l&&A&&A.status==="假从")continue;const Y=A&&L[A.name]?S(L[A.name]):null;Y&&g(Y,`本盘列有「${A.name}」,故取${E[Y.book].name}「${y(Y)}」一条`)}for(const A of r){if(!A||A.kind&&A.kind!=="月令格")continue;const Y=F(A.name),X=h(Y,"ziping")||h(Y);X&&g(X,`你的月令格局是「${A.name}」,故取${E[X.book].name}「${y(X)}」一条`);const ne=_.find(oe=>oe.scene==="格局"&&oe.tags.includes(Y)&&(!X||oe.book!==X.book));ne&&g(ne,`同是「${A.name}」,${E[ne.book].name}「${y(ne)}」另有取法,可对照读`)}const a=p.climate||p.frame&&p.frame.yongshen&&(p.frame.yongshen.climate||p.frame.yongshen.tiaohou),s=p.frame&&p.frame.yongshen&&p.frame.yongshen.tongguan,u=s&&s.usable?S("dt-tongguan"):null;if(a&&a.kind&&a.kind!=="平和"){const A=!!(a.cold||a.kind.indexOf("寒")>=0),Y=!!(a.hot||a.kind.indexOf("热")>=0);g(S(A?"dt-hannuan":"dt-zaoshi"),`本盘气候判为「${a.kind}」,故取${E.ditian.name}寒暖燥湿一条`),u||g(S("zp-qihou"),"气候与月令用神要互参,故取子平真诠「用神配气候」一条"),Y&&g(S("dt-hannuan"),"本盘偏热,寒暖一条正对")}u&&g(u,`本盘忌${s.foe}克用${s.use},局中${s.bridge}${s.weight}分可作通关,故取${E.ditian.name}「通关」一条`);const c=r.find(A=>A&&A.kind==="化气格"),w=r.find(A=>A&&A.kind==="组合"),N=p.monthBranch||p.frame&&p.frame.monthBranch||p.pillars&&p.pillars.month&&p.pillars.month.branch,T=["辰","未","戌","丑"].includes(N);return c?g(S("zp-bianhua"),`本盘列有「${c.name}」:用神由月令合化而变,总纲一位改取${E.ziping.name}论用神变化`):T?g(S("zp-zaji"),`月令${N}属四墓杂气,取用先看透干、再看会支,总纲一位取${E.ziping.name}论杂气如何取用`):w?g(S("zp-chengbai"),`本盘另有「${w.name}」组合:成格还要看带忌与救应,总纲一位改取${E.ziping.name}论用神成败救应`):g(S("zp-yongshen"),"用神从月令取、四吉顺用四凶逆用,是通用总纲"),D}function $(p){return!p||!p.length?"":p.map(z=>`《${E[z.book].name}·${z.chapter}》「${z.quote}」`).join(`
|
|
68
68
|
`)}return{CLASSIC_BOOKS:E,CLASSICS:_,classicOf:S,suiyunClassicOf:b,classicsFor:x,classicsText:$}})(),O.mbti=(function(){const{fail:E}=O.fail||{},_=[{key:"EI",left:"E",right:"I",name:"能量方向",leftSay:"向外:和人打交道时来电,边说边想",rightSay:"向内:独处时回血,先想清楚再开口",tie:"I",note:"不是「会不会社交」,而是社交之后你更有电还是更耗电。"},{key:"SN",left:"S",right:"N",name:"信息接收",leftSay:"具体:先看事实、细节和已有经验",rightSay:"联想:先看模式、隐喻和下一步可能",tie:"N",note:"不是「聪明与否」,而是你先抓住哪一头。"},{key:"TF",left:"T",right:"F",name:"决策依据",leftSay:"逻辑:先看是否站得住、是否一致",rightSay:"价值:先看人在其中会不会被伤到",tie:"F",note:"不是「冷血或情绪化」,而是权衡时先放哪把尺子。"},{key:"JP",left:"J",right:"P",name:"生活节奏",leftSay:"收束:先定计划,喜欢事情有个了结",rightSay:"开放:先留着口子,喜欢事情还能变",tie:"P",note:"不是「勤快或懒散」,而是面对不确定时更愿意钉死还是留着。"}],q=[{id:"e1",dim:"EI",side:"E",text:"在一个都是陌生人的场合,你会主动找几个人聊起来。"},{id:"s1",dim:"SN",side:"S",text:"别人讲一件事,你更关心具体发生了什么、细节对不对得上。"},{id:"t1",dim:"TF",side:"T",text:"朋友来问你两难的选择,你会先把利弊摆清楚再谈感受。"},{id:"j1",dim:"JP",side:"J",text:"出门前你习惯把行程和要带的东西先定下来。"},{id:"e2",dim:"EI",side:"I",text:"忙完一整天,你更想一个人安静待着,而不是再约一轮。"},{id:"s2",dim:"SN",side:"N",text:"你常从一个现象跳到「再往下可能还会怎样」的联想上。"},{id:"t2",dim:"TF",side:"F",text:"做决定时,你更在意这件事对身边人的实际影响。"},{id:"j2",dim:"JP",side:"P",text:"计划临时被打乱,你多半能顺势改,不太难受。"},{id:"e3",dim:"EI",side:"E",text:"想事情的时候,你更习惯说给人听,说着说着就清楚了。"},{id:"s3",dim:"SN",side:"S",text:"你更信「做过、验证过」的办法,而不是听起来很新的办法。"},{id:"t3",dim:"TF",side:"T",text:"规则一旦定了,哪怕对自己不方便,你也倾向照着走。"},{id:"j3",dim:"JP",side:"J",text:"有一件事没做完,你心里会一直悬着,想先把它收尾。"},{id:"e4",dim:"EI",side:"I",text:"电话响了或有人临时找来,你第一反应是先缓一下再应对。"},{id:"s4",dim:"SN",side:"N",text:"你容易被「这背后是什么道理」这类问题勾住。"},{id:"t4",dim:"TF",side:"F",text:"别人情绪不好时,你直觉是先接住情绪,而不是先讲道理。"},{id:"j4",dim:"JP",side:"P",text:"你常常边走边看,事到临头再定具体怎么做。"},{id:"e5",dim:"EI",side:"E",text:"人多的场合待久了,你通常越待越有精神。"},{id:"s5",dim:"SN",side:"S",text:"你记事情偏向记「原话、原样、当时的情形」。"},{id:"t5",dim:"TF",side:"T",text:"和人争论时,你更在意谁的推理有漏洞,而不是谁伤了面子。"},{id:"j5",dim:"JP",side:"J",text:"你喜欢把待办列出来,一条条划掉。"},{id:"e6",dim:"EI",side:"I",text:"有新想法时,你更愿意先自己消化一轮,再拿出去讲。"},{id:"s6",dim:"SN",side:"N",text:"比起照现状做好,你更享受把现状改成一个更好的样子。"},{id:"t6",dim:"TF",side:"F",text:"要做取舍时,你会想「这样是不是对人不公平」。"},{id:"j6",dim:"JP",side:"P",text:"临出发才收拾行李,你也觉得没什么问题。"}],M={ISTJ:["Si","Te","Fi","Ne"],ISFJ:["Si","Fe","Ti","Ne"],INFJ:["Ni","Fe","Ti","Se"],INTJ:["Ni","Te","Fi","Se"],ISTP:["Ti","Se","Ni","Fe"],ISFP:["Fi","Se","Ni","Te"],INFP:["Fi","Ne","Si","Te"],INTP:["Ti","Ne","Si","Fe"],ESTP:["Se","Ti","Fe","Ni"],ESFP:["Se","Fi","Te","Ni"],ENFP:["Ne","Fi","Te","Si"],ENTP:["Ne","Ti","Fe","Si"],ESTJ:["Te","Si","Ne","Fi"],ESFJ:["Fe","Si","Ne","Ti"],ENFJ:["Fe","Ni","Se","Ti"],ENTJ:["Te","Ni","Se","Fi"]},L={Si:"内感觉:拿过去的经验当尺子,稳、细、记得住。",Se:"外感觉:对眼前的具体变化反应快,先动手再说。",Ni:"内直觉:把零碎线索收成一个方向感,先看到终局。",Ne:"外直觉:从一个点炸开很多可能,擅长另起一条路。",Ti:"内思考:要自己把逻辑盘通,讲得出为什么才认。",Te:"外思考:要事情跑起来,讲流程、指标和结果。",Fi:"内情感:先问「这符不符合我在意的东西」,价值感很强。",Fe:"外情感:先读空气、先顾关系,擅长把人和在一起。"},S={ISTJ:{title:"检查者",keywords:"稳、准、守得住",oneLine:"答应的事会做完,讨厌临时改口和半成品。",strengths:["流程感强,细节不漏","说到做到,扛得住长期重复","遇到混乱先立规矩"],blindspots:["对「新办法」先起疑,容易错过转弯的机会","把责任揽太多,难受也说不出口"],work:"适合规则清楚、可累积经验的岗位:审计、运维、法务、工程管理。",love:"表达朴素但稳定,重视承诺;需要对方把需求说明白,别指望你自己猜。",study:"靠体系与刷题推进,把知识整理成清单会明显提速。",growth:"练一件「没有标准答案」的事,容许自己在过程中改主意。"},ISFJ:{title:"守护者",keywords:"暖、细、记得住人",oneLine:"会默默把别人的需要记在心里,然后提前做好。",strengths:["照顾细节与情绪","记性好,了解身边人的习惯","愿意做没人愿意做的收尾"],blindspots:["习惯先委屈自己,之后积成怨","对方没察觉你的付出时容易失落"],work:"适合需要耐心与责任心的岗位:护理、教育、行政、客户成功、人事。",love:"用做事表达感情,需要被明确看见与感谢;也要练习直接要。",study:"喜欢有例题、有反馈的学习方式,做学习小组的稳定输出者很合适。",growth:"练习说「这件事我做不到」,先照顾自己的电量。"},INFJ:{title:"提倡者",keywords:"深、理想、看穿人心",oneLine:"关心人为什么这么活,愿意为一个「值得」的目标长期投入。",strengths:["能从细节里读出动机","表达有感染力,适合讲清意义","对长期方向有耐心"],blindspots:["标准高,容易对现实失望","想得太深而迟迟不开口,外人看不出你在乎"],work:"适合内容、咨询、教育、公益、产品策略这类「讲清一件事」的岗位。",love:"要的是深谈与理解,浅社交会耗电;需要对方给得起精神上的回应。",study:"适合主题式深挖,写读书笔记与建立自己的框架比刷题更有效。",growth:"把理想拆成这周能交付的一小步,别只在脑子里完成它。"},INTJ:{title:"建筑师",keywords:"远、冷静、自己搭系统",oneLine:"先看清全局再动手,讨厌无效沟通和低效流程。",strengths:["长期规划清晰","能独立啃下复杂问题","对标准挑剔,产品因此更硬"],blindspots:["说话直,容易让人觉得被否定","对「慢」和「情绪」耐心不足"],work:"适合战略、研发、系统设计、投资研究这类需要独立判断的岗位。",love:"表达感情偏克制,用解决问题的方式示好;需要对方接受你的独处需求。",study:"自学效率高,适合先建框架再补细节;警惕只读不产出。",growth:"在给方案之前先接一句对方的感受,合作阻力会小很多。"},ISTP:{title:"巧匠",keywords:"手快、冷静、先修再说",oneLine:"遇到问题先上手拆开看,不爱开长会。",strengths:["动手能力强,现场判断快","压力下不慌,能抓住关键","讲实际,不绕弯"],blindspots:["对长期计划不感兴趣,容易拖到最后","话少,别人不知道你在想什么"],work:"适合现场性强的岗位:工程、设备、急救、运维、技术支持、手艺型工作。",love:"不擅长说,但会用行动帮忙;需要对方接受你「不解释」的习惯。",study:"边做边学最快,先碰真实设备或真实项目,再回头补理论。",growth:"给重要的事留一个检查点,别全靠临场反应。"},ISFP:{title:"探险家",keywords:"真、敏感、跟着感觉走",oneLine:"在意「这件事对不对味」,不喜欢被安排得太死。",strengths:["审美与体感准","待人温和,不强加于人","在真实情境里学得快"],blindspots:["不愿冲突,把不满压着","长期目标容易停在「想」这一步"],work:"适合与美、身体、具体对象打交道的岗位:设计、摄影、餐饮、康复、手作。",love:"用陪伴和小惊喜表达在意,讨厌被审问;需要空间也需要被确认。",study:"先看示例、先动手,理论放在用到的时候补,效率更高。",growth:"给在意的事定一个可交付的日期,把感觉变成作品。"},INFP:{title:"调停者",keywords:"柔、较真、心里有一杆秤",oneLine:"对人真诚,对自己在意的事格外较真,讨厌虚伪。",strengths:["共情与想象力都好","写与表达有个人味道","能为价值观长期坚持"],blindspots:["容易把「不够好」归到自己身上","计划性弱,想法多而落地慢"],work:"适合创作、教育、心理、内容、公益这类能表达价值的岗位;强规则环境会耗电。",love:"看重真诚与被理解,愿意为对方调整;需要明确的回应,别长期猜。",study:"靠兴趣驱动,给自己找「为什么学」比逼自己更有效;用短周期输出防拖延。",growth:"把心里的标准写下来,分「必须有」和「有更好」,少一点全或无。"},INTP:{title:"逻辑家",keywords:"想透、好问、自己盘逻辑",oneLine:"喜欢把问题拆到原理层,讨厌「一直这样所以就这样」。",strengths:["抽象思考强,能发现系统里的漏洞","学新领域快","不轻易被权威说服"],blindspots:["想得多做得少,收尾困难","指出问题时不修饰,容易树敌"],work:"适合研究、算法、架构、分析、写作这类需要反复推演的岗位。",love:"用分享想法表达亲近,需要对方能聊得深;别让讨论变成辩论。",study:"先弄清原理再练,适合自己搭知识树;给自己设「讲给别人听」的交付点。",growth:"给探索设时间盒,到点就交出一个能用的版本。"},ESTP:{title:"企业家",keywords:"快、敢、临场能打",oneLine:"看到机会先动手,比开会讨论更信现场反馈。",strengths:["行动快,敢试错","会看人、会周旋","压力下反而清醒"],blindspots:["耐心不足,容易留一堆半成品","对长期代价估计偏轻"],work:"适合销售、商务、创业、现场运营、竞技类岗位;文牍型工作会闷。",love:"热烈直接,喜欢一起做事;需要对方接受你「说到就到」的节奏。",study:"靠实战与竞赛驱动,做项目比听课有效;需要有人帮你收尾。",growth:"动手前多问一句「三个月后这件事还成立吗」。"},ESFP:{title:"表演者",keywords:"热、会带气氛、活在当下",oneLine:"在人群里自带气氛,喜欢真实可感的体验。",strengths:["感染力强,能把场子撑起来","对人和现场的细节敏感","愿意尝试新鲜事"],blindspots:["对长期枯燥的事耐力有限","不太愿意面对冲突背后的结构问题"],work:"适合面向人的岗位:活动、销售、主持、文旅、服务、内容出镜。",love:"表达直接,喜欢一起玩;需要对方给你稳定感,也别把自由当借口。",study:"边玩边学最有效,把知识做成游戏、演示或小组活动。",growth:"留一件「不好玩但重要」的事,按周推进。"},ENFP:{title:"竞选者",keywords:"亮、点子多、对人好奇",oneLine:"对人和可能性都很好奇,容易同时点亮很多盏灯。",strengths:["联想快,能给人新视角","真诚热情,容易建立信任","擅长起头与鼓舞"],blindspots:["兴趣转移快,收尾吃力","情绪起伏大,容易被细节拖垮"],work:"适合创意、品牌、内容、培训、早期项目这类需要不断开新局的地方。",love:"需要新鲜感与被看见,愿意为对方想很多;要练习把承诺落到实处。",study:"用主题和讨论驱动,找学习搭子比一个人硬啃有效。",growth:"同时只开三条线,其余写进「以后再说」清单。"},ENTP:{title:"辩论家",keywords:"机敏、爱拆、想法往外冒",oneLine:"喜欢把既有说法掰开看,享受把问题换个角度。",strengths:["反应快,能现场找到漏洞","对新领域上手快","擅长把复杂事讲得好玩"],blindspots:["为辩而辩,容易伤人","起头多、收尾少"],work:"适合咨询、产品、创业、策略、媒体这类需要不断破局的地方。",love:"用斗嘴表达亲近,需要对方接得住;别把关系也当成辩论场。",study:"讨论与质疑中理解最快,适合做分享者;给自己定交付时间。",growth:"挑一件「不新但重要」的事,把它做完再开下一个。"},ESTJ:{title:"总经理",keywords:"务实、能扛、把事推到底",oneLine:"目标定了就拆任务、定人、定时间,讨厌含糊。",strengths:["组织与推进力强","标准清楚,团队知道该做什么","对结果负责"],blindspots:["节奏太紧,忽视人的感受","对新方法的容忍度低"],work:"适合管理、运营、项目、供应链、政务这类要「把事办成」的岗位。",love:"用承担责任表达在意,需要对方直接说需求;记得留不安排的时间。",study:"目标拆解 + 打卡推进最有效,适合带小组复习。",growth:"在下判断前多问一句「有没有我没想到的难处」。"},ESFJ:{title:"执政官",keywords:"周到、热络、把人放在心上",oneLine:"习惯先照顾气氛和关系,让事情在人情里办成。",strengths:["组织人际与活动","记得住每个人的状况","愿意为集体做脏活累活"],blindspots:["太在意别人评价,容易内耗","对「不合群」的选项排斥"],work:"适合人力、行政、教育、客户、医护、社群运营这类以人为中心的岗位。",love:"投入、周到,需要明确的回应与稳定;别把照顾变成控制。",study:"在小组里学得最好,讲给别人听会记得更牢。",growth:"练习在不解释的情况下做一次自己的选择。"},ENFJ:{title:"主人公",keywords:"暖、会带人、看得见潜力",oneLine:"天然想把人和事往好的方向推,愿意为别人多走一步。",strengths:["洞察他人需求","善于组织与鼓舞","把长期关系经营得住"],blindspots:["过度承担别人的情绪","为了和谐压下自己的判断"],work:"适合教育、管理、培训、公益、品牌这类「带人成长」的岗位。",love:"投入且会照顾,需要对方也主动;别把付出当成默认义务。",study:"教别人是最好的学法,适合做学习小组的组织者。",growth:"把「我该帮」和「不该我扛」分开,先照顾自己的电量。"},ENTJ:{title:"指挥官",keywords:"决断、看清、把盘做大",oneLine:"看得远也敢拍板,喜欢把资源调到最该去的地方。",strengths:["目标与路径清楚","能在压力下决断","擅长组织复杂局面"],blindspots:["节奏压人,忽略情绪成本","把「效率」当成唯一标准"],work:"适合管理、创业、投资、战略、大型项目这类要定方向并扛结果的岗位。",love:"用规划和承担表达在意,需要对方能对话;记得把「安排」换成「商量」。",study:"先建目标与评估标准,按里程碑推进;警惕只搭框架不落细节。",growth:"定期问自己「这件事赢了,人会怎样」,把人的成本算进去。"}},b={1:"完全不像",2:"不太像",3:"说不准",4:"有点像",5:"很像我"};function F(){return{system:"mbti",needAnswers:!0,scale:b,total:q.length,dimensions:_.map($=>({key:$.key,name:$.name,left:$.left,right:$.right,leftSay:$.leftSay,rightSay:$.rightSay,note:$.note})),questions:q.map(($,p)=>({no:p+1,id:$.id,dim:$.dim,text:$.text})),note:"这是一份 MBTI 风格的问卷(不是官方 MBTI 量表):每题按 1(完全不像我)到 5(很像我)打分,把 24 个分数按顺序交给 answers 即可出类型。题目只作自我参照,不适合用来评价别人的能力或做招聘、晋升等决定。"}}function h($){if(!Array.isArray($))throw E("E_INPUT","answers 必须是数组:每题 1–5 分,按 questions 的顺序给;答题前先不带 answers 调一次,拿到题目");if($.length>q.length)throw E("E_INPUT",`answers 最多 ${q.length} 个(对应 ${q.length} 题),收到 ${$.length} 个`);const p=[];for(let z=0;z<q.length;z+=1){const D=$[z];if(D==null||D===""){p.push(null);continue}const m=Number(D);if(!Number.isInteger(m)||m<1||m>5)throw E("E_RANGE",`第 ${z+1} 题的分值必须是 1–5 的整数(1 完全不像,5 很像我),收到「${D}」`);p.push(m)}return p}function y($,p){return p?$<=.12?"临界":$<=.3?"轻微":$<=.6?"明显":"很强":"未作答"}function x($={}){const p=h($.answers),z=p.filter(l=>l!==null).length;if(z<12)throw E("E_INPUT",`至少答 12 题才能出口径(现答 ${z} 题);可以先不带 answers 调一次,把题目发给用户逐题打分`);const D=_.map(l=>{let a=0,s=0;q.forEach((N,T)=>{const A=p[T];A===null||N.dim!==l.key||(s+=1,a+=(A-3)*(N.side===l.left?1:-1))});const u=s*2,c=u?Math.abs(a)/u:0,w=a>0?l.left:a<0?l.right:l.tie;return{key:l.key,name:l.name,left:l.left,right:l.right,leftSay:l.leftSay,rightSay:l.rightSay,note:l.note,sum:a,answered:s,maxAbs:u,pct:Math.round(c*1e3)/1e3,picked:w,strength:y(c,s),tie:a===0}}),m=D.map(l=>l.picked).join(""),g=S[m];if(!g)throw E("E_SYSTEM",`内部错误:类型 ${m} 没有对应文案`);const r=(M[m]||[]).map(l=>({code:l,say:L[l]||""}));return{system:"mbti",type:m,title:g.title,keywords:g.keywords,oneLine:g.oneLine,dims:D.map(({sum:l,maxAbs:a,answered:s,...u})=>({...u,sum:l,maxAbs:a,answered:s})),profile:{title:g.title,keywords:g.keywords,oneLine:g.oneLine,strengths:g.strengths.slice(),blindspots:g.blindspots.slice(),work:g.work,love:g.love,study:g.study,growth:g.growth,stack:r},answered:z,skipped:q.length-z,total:q.length,note:"四维各 6 题、李克特 1–5 计分,按维度净分取字母(平手时取 I / N / F / P 一侧并标「临界」)。这是 MBTI 风格的问卷测算,不是官方量表;类型只作自我参照,不是能力评价,也不用它给人下结论。"}}return{DIMENSIONS:_,QUESTIONS:q,FUNCTION_STACKS:M,FUNCTIONS:L,TYPES:S,mbtiPaper:F,buildMbti:x}})(),O.followup=(function(){const{ZIWEI_STARS:E}=O["interpret-data"]||{},_=[{key:"career",label:"事业",words:["事业","工作","跳槽","升职","创业","职业","岗位","离职","加薪","面试","offer"]},{key:"wealth",label:"财富",words:["财","钱","收入","投资","买房","存款","亏","赚","分红"]},{key:"love",label:"感情",words:["感情","婚","恋","对象","分手","复合","姻缘","结婚","桃花"]},{key:"health",label:"健康",words:["健康","病","身体","手术","失眠","体检","医院"]},{key:"study",label:"学业",words:["学业","考试","学习","考研","考公","证书","升学"]},{key:"travel",label:"出行",words:["出行","搬家","旅行","出国","迁","远行"]}],q={career:"官禄",wealth:"财帛",love:"夫妻",health:"疾厄",study:"官禄",travel:"迁移",overall:"命宫"},M=(m,g)=>{const r=String(m).match(/(20\d{2})\s*年?/);if(r)return Number(r[1]);const l=Array.isArray(g.liunian)&&g.liunian[0]?Number(g.liunian[0].year):null;return l?/明年/.test(m)?l+1:/后年/.test(m)?l+2:/去年/.test(m)?l-1:/今年|本年/.test(m)?l:null:null},L=m=>_.find(g=>g.words.some(r=>String(m).includes(r)))||null;function S(m,g){const r=M(g,m),l=L(g),a=Array.isArray(m.liunian)?m.liunian:[],s=Array.isArray(m.dayun?.list)?m.dayun.list:[],u=a.map(c=>c.year);if(r&&!a.some(c=>Number(c.year)===r))return{ok:!1,year:r,topic:l,answer:`这一盘已排的流年范围是 ${u[0]}–${u[u.length-1]},没有 ${r} 年。可以把问题改到范围内,或用 asOf 指定你想看的年份重新排盘。`,evidence:[`已排流年:${u.join("、")}`],confidence:"弱"};if(r){const c=a.find(X=>Number(X.year)===r),w=s.find(X=>Number(X.startAge)<=Number(c.age)&&Number(c.age)<=Number(X.startAge)+9)||null,N=c.luck?.tier||"平",T=(c.luck?.reasons||[]).slice(0,3),A=(c.relations||[]).join("、"),Y=l?F(m,l.key):"";return{ok:!0,year:r,topic:l,answer:`${r} 年(${c.ganzhi})流年,十神为${c.stemTenGod||"—"},档位「${N}」;所行大运 ${w?`${w.ganzhi}(${w.luck?.tier||"平"})`:"未取到"}。${T.length?`理由:${T.join(",")}。`:""}${A?`与该年地支相关的原局关系:${A}。`:""}${Y}`,evidence:[`流年 ${c.year} ${c.ganzhi}·${c.stemTenGod||""}·${N}`,w?`大运 ${w.ganzhi}·${w.luck?.tier||"平"}`:"",A?`原局关系 ${A}`:"",l?`问题方向:${l.label}`:""].filter(Boolean),confidence:w&&T.length?"强":"中"}}if(l){const c={wealth:"overall",study:"work",travel:"overall"}[l.key]||l.key,w=(m.interpret?.dimensions||[]).find(N=>N.key===l.key||N.key===c);if(w){const N=m.frame&&m.frame.godStats&&m.frame.godStats.groups||{},T=l.key==="wealth"?` 财星权重 ${Number(N.财||0)}(只作结构参考,不含金额)。`:"";return{ok:!0,year:null,topic:l,answer:`按${l.label}这条线看:${w.text}${T}${w.advice?` 建议:${w.advice}`:""}`,evidence:(w.evidence||[]).slice(0,4),confidence:w.confidence||"中"}}}return{ok:!1,year:null,topic:l,answer:`这个问题里没有识别到具体的年份或方面。可以这样问:「2027 年事业怎么样」「财运如何」「感情在 2028 年」;已排流年是 ${u[0]}–${u[u.length-1]}。`,evidence:[`可问年份:${u.join("、")}`],confidence:"弱"}}function b(m,g){const r=M(g,m),l=L(g),a=Array.isArray(m.liunian)?m.liunian:[];if(r&&!a.some(s=>Number(s.year)===r))return{ok:!1,year:r,topic:l,answer:`这一盘的流年表覆盖 ${a[0]?.year}–${a[a.length-1]?.year},没有 ${r} 年;可以换一个年份,或用 asOf 指定起点重新排盘。`,evidence:[`流年表:${a.map(s=>s.year).join("、")}`],confidence:"弱"};if(r){const s=a.find(c=>Number(c.year)===r),u=s.daxian||{};return{ok:!0,year:r,topic:l,answer:`${r} 年(${s.ganzhi},${s.age} 岁)流年命宫落在「${s.lifePalace?s.lifePalace.palace:"—"}」,四化为 ${(s.mutagen||[]).join("、")||"不明显"};所行大限${u.palace?`在${u.palace}(${u.start}–${u.end} 岁)`:"未取到"}。${l?`与「${l.label}」对应的宫位信号见下条依据。`:""}`,evidence:[`流年命宫 ${s.lifePalace?s.lifePalace.palace:"—"}(${s.lifePalace?s.lifePalace.branch:"—"})`,`四化 ${(s.mutagen||[]).join("、")||"不明显"}`,u.palace?`大限 ${u.palace}·${u.start}–${u.end}岁`:""].filter(Boolean),confidence:(s.mutagen||[]).length>=3?"强":"中"}}if(l){const s=q[l.key]||"命宫",u=(m.palaces||[]).find(c=>c.palace===s);if(u){const c=(u.stars||[]).filter(N=>N.type==="主星").map(N=>N.name),w=c.map(N=>E[N]?.trait).filter(Boolean).slice(0,2).join(";");return{ok:!0,year:null,topic:l,answer:`「${l.label}」看${s}:主星${c.length?c.join("、"):"无正曜(借对宫)"}${w?`——${w}`:""}。宫支${u.branch},${u.stems,""}生年四化与煞星的影响需结合报告里的对应分节一起看。`,evidence:[`${s} ${u.branch}·${c.join("、")||"无正曜"}`,...(u.shensha||[]).slice(0,3)],confidence:c.length?"强":"弱"}}}return{ok:!1,year:null,topic:l,answer:"没有识别到具体年份或方面。可以问「2028 年事业」「感情怎么样」「财运在 2030 年」;也可以直接问某个宫位,如「夫妻宫」。",evidence:[],confidence:"弱"}}function F(m,g){return`这段时间可以重点对照报告里「${{career:"事业",wealth:"财富",love:"感情",health:"健康",study:"学业",travel:"出行"}[g]||"整体"}」一节看。`}function h(m,g){const r=L(g),l=Array.isArray(m.interpret?.sections)?m.interpret.sections:[],a=r?l.find(u=>u.label.includes(r.label)||u.text.includes(r.label)):null;if(a)return{ok:!0,year:null,topic:r,answer:a.text,evidence:[`引用分节:${a.label}`],confidence:"中"};const s=l[0];return{ok:!1,year:null,topic:r,answer:s?`这一盘的追问需要落到具体方面(事业 / 财富 / 感情 / 健康 / 学业 / 出行)。先看「${s.label}」这一节,或把问题说得更具体一点。`:"这一盘暂时没有可追问的分节;先看完整解析,再问具体方面。",evidence:[],confidence:"弱"}}function y(m,g){const r=String(g||"").trim(),l=m&&m.system==="bazi"?S(m,r):m&&m.system==="ziwei"?b(m,r):h(m,r);return{question:r,...l}}const x={bazi:"八字(四柱)",ziwei:"紫微斗数",liuyao:"六爻",meihua:"梅花易数",daliuren:"大六壬",qimen:"奇门遁甲",tarot:"塔罗",hepan:"合盘",chenggu:"称骨",almanac:"黄历",zeri:"择日",star:"星座",numerology:"生命数字",mbti:"十六型人格",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历互转"},$=Object.freeze({bazi:["基本信息","四柱(日主/十神/藏干)","旺衰·格局·用神","合冲·神煞","起运·大运·流年","古籍依据"],ziwei:["基本信息","命宫/身宫与五行局","十二宫(主星/辅煞/四化)","格局与三方四正","大限/流年","古籍依据"],liuyao:["所问与用神","本卦/变卦(世应/动爻/六亲)","月建日辰(旺衰/空破)","应期线索","卦辞与依据"],meihua:["所问与体用","本卦/互卦/变卦","五行生克","应期与依据"],daliuren:["天地盘(月将/贵人)","四课","三传","课体与神将","依据"],qimen:["四柱与局数","九宫(星门神/天盘干)","用神落宫","门宫·干宫·十干克应","旺衰·击刑入墓","依据"],tarot:["问题与牌阵","逐牌(正逆/元素)","牌间关系","综合倾向","边界"],fengshui:["坐向与元运","运盘/山盘/向盘","旺山旺向","取象与边界"]}),p=Object.freeze(["基本信息","盘面事实","结构与关系","倾向","边界"]);function z(m){return $[m]||p}function D(m,g={}){const r=x[m&&m.system]||m&&m.system||"未知体系",a=String(g&&g.question||"").trim()||"请先用一句白话讲清这张盘的主线,再指出最值得注意的一两处,并说明每处的具体依据。",s=Number.isFinite(g&&g.maxChars)&&g.maxChars>=400?g.maxChars:3e3,u=String(m&&m.summary||"").trim(),c=u.length>s,w=c?`${u.slice(0,s)}…(摘要已截断)`:u,N=g&&typeof g.interpret=="object"&&g.interpret||m&&typeof m.interpret=="object"&&m.interpret||null,T=String(N&&N.answer||"").trim(),A=String(N&&N.plain||"").trim(),Y=[];T&&Y.push(`直答:${T}`),A&&Y.push(`说人话:${A}`);const ne=["【命理追问】下面这张盘是命理插件刚排好的,请就着它回答我的问题;不用重新排盘,盘面字段已经够用。",`体系:${r}`,`所问:${a}`,"",...Y.length?["——开场结论(插件已按同一套规则算好,开场先沿用这句;措辞可改,口径别换)——",...Y,""]:[],"——盘面层次(从上到下读,别跳层)——",`${r}:${z(m&&m.system).join(" → ")}`,"先复述事实,再讲结构与时间;上一层没交代清楚,不要跳到下一层。","","——盘面摘要——",w||"(这张盘没有摘要字段,请先让我重新排一次。)","","——回答要求——","读者不懂命理。按下面的骨架答;任何一句他看不懂,就算没写完:",Y.length?"1) 开头一句结论:先沿用上面的「开场结论」,再用一句不用术语的话说清这张盘的主线——只读这一句也该有收获;":"1) 开头一句结论:不用术语,一句话说清这张盘的主线,只读这一句也该有收获;","2) 第二段只复述盘面骨架:按上面的层次用 2–4 行写事实(如四柱、格局、用神、大运),不掺倾向,让读者知道后面的判断从哪来;","3) 判断最多两条,按重要性排序,每条分四行写:"," 盘面|只引盘面已有的字(具体的柱、宫或爻、字段名),不掺解释;"," 白话|把上一行的术语当场翻成日常话——调候 / 化气 / 通关 / 空亡 / 争合 这类词必须落地,一个词只翻一次,不连续堆三个以上;"," 倾向|说「更可能……」,讲清它在现实里大概意味着什么,用概率语气;"," 边界|这条在什么情况下不成立;盘面没给的,直接写「这盘里看不出来」;","4) 收尾一句「如果只记一件事」:给一条能核对、能动手的观察点,并说明它出自上面哪条盘面依据;","5) 别把传统说法当成已证实的事实:不下绝对断言,也不用「肯定」「绝对」这类词,更不写「格局很好」「运程不顺」这种没有信息的空话。"].join(`
|
|
69
|
-
`);return{text:ne,question:a,system:m&&m.system||"",label:r,chars:ne.length,truncated:c}}return{followup:y,READING_ORDERS:$,READING_ORDER_FALLBACK:p,readingOrderOf:z,askPrompt:D}})(),O.revise=(function(){const E=[{key:"ziwei",label:"紫微",re:/紫微|斗数/},{key:"bazi",label:"八字",re:/八字|四柱/},{key:"liuyao",label:"六爻",re:/六爻|摇卦/},{key:"qimen",label:"奇门",re:/奇门/},{key:"daliuren",label:"大六壬",re:/大六壬|六壬/},{key:"tarot",label:"塔罗",re:/塔罗|抽牌/},{key:"meihua",label:"梅花",re:/梅花/},{key:"hepan",label:"合盘",re:/合盘|合婚/},{key:"almanac",label:"黄历",re:/黄历|老黄历/},{key:"zeri",label:"择日",re:/择日|挑日子/},{key:"fengshui",label:"风水",re:/风水/},{key:"name",label:"起名",re:/起名|取名/},{key:"chenggu",label:"称骨",re:/称骨/},{key:"xiaoliuren",label:"小六壬",re:/小六壬/},{key:"star",label:"星座",re:/星座/},{key:"numerology",label:"生命数字",re:/生命数字|生命灵数/},{key:"mbti",label:"MBTI",re:/mbti|人格测试|十六型/i},{key:"trend",label:"人生 K 线",re:/k\s*线|人生曲线/i},{key:"convert",label:"公农历互转",re:/农历转公历|公历转农历|公农历/}],_=[{key:"love",label:"感情",re:/感情|婚姻|恋爱|对象|夫妻/},{key:"wealth",label:"财运",re:/财运|财富|赚钱|收入|破财/},{key:"career",label:"事业",re:/事业|工作|升职|跳槽/},{key:"health",label:"健康",re:/健康|身体|疾病|病/},{key:"study",label:"学业",re:/学业|考试|考研|升学|读书/},{key:"travel",label:"出行",re:/出行|搬家|迁移|旅行|外地/}],q=/换成|改成|改为|换到|改看|再看|再看一下|换一套|排一?张|用|按|看/,M=h=>String(h||"").replace(/(出生|出生地|所在地|人)$/,"").replace(/[的了].*$/,"").trim();function L(h){const y=String(h??"").trim(),x={},$=[],p=[];if(!y)return{text:"",patch:x,labels:$,ignored:p};if(q.test(y)){for(const m of E)if(m.re.test(y)){x.system=m.key,$.push({key:"system",label:"体系",value:m.key,display:m.label});break}}/女命|女性|换成女|改成女|女盘/.test(y)?(x.gender="female",$.push({key:"gender",label:"性别",value:"female",display:"女"})):/男命|男性|换成男|改成男|男盘/.test(y)&&(x.gender="male",$.push({key:"gender",label:"性别",value:"male",display:"男"})),/晚子时/.test(y)&&(/不换日|不换天|算当日|归当日|按当日|当天/.test(y)?(x.lateZi=!1,$.push({key:"lateZi",label:"晚子时",value:!1,display:"23:00 后仍算当日"})):/换日|算次日|归次日|按次日|第二天|次日/.test(y)&&(x.lateZi=!0,$.push({key:"lateZi",label:"晚子时",value:!0,display:"23:00 后算次日"}))),/真太阳时/.test(y)&&(/不用|不要|关闭|关掉|取消|不算/.test(y)?(x.trueSolar=!1,$.push({key:"trueSolar",label:"真太阳时",value:!1,display:"用东八区平太阳时"})):(x.trueSolar=!0,$.push({key:"trueSolar",label:"真太阳时",value:!0,display:"按出生地经度校正"}))),/夏令时/.test(y)&&(/不用|不要|关闭|关掉|取消|不校正/.test(y)?(x.dst=!1,$.push({key:"dst",label:"夏令时",value:!1,display:"不自动校正 1986–1991 夏令时"})):(x.dst=!0,$.push({key:"dst",label:"夏令时",value:!0,display:"自动校正 1986–1991 夏令时"})));const z=y.match(/出生在\s*([\u4e00-\u9fa5]{2,12})/)||y.match(/出生地(?:改成|改为|换成|换到|是|为)?\s*([\u4e00-\u9fa5]{2,12})/)||y.match(/改到\s*([\u4e00-\u9fa5]{2,12})\s*出生/);if(z){const m=M(z[1]);m.length>=2&&(x.address=m,$.push({key:"address",label:"出生地",value:m,display:m}))}const D=y.match(/(?:看|查|问|到|到了|临近)\s*((?:19|20)\d{2})\s*年/)||y.match(/((?:19|20)\d{2})\s*年(?:的)?(?:运势|怎么样|如何|会怎样|流年)/);if(D){const m=Number(D[1]);x.asOf=`${m}-01-01T00:00`,$.push({key:"asOf",label:"流年基准",value:x.asOf,display:`${m} 年`})}else/(出生|生年)/.test(y)&&/(19|20)\d{2}\s*年/.test(y)&&p.push("出生年份没改:一句话改不出日与时辰,请直接传 datetime(如 1993-04-08T06:20)");for(const m of _)if(m.re.test(y)){x.direction=m.key,$.push({key:"direction",label:"询问方向",value:m.key,display:m.label});break}return/解读|详解|详细说|说人话/.test(y)&&!/不要解读|不用解读|别解读/.test(y)&&(x.withInterpret=!0,$.push({key:"withInterpret",label:"解读",value:!0,display:"附解析与详解"})),{text:y,patch:x,labels:$,ignored:p}}const S=E,b=_;function F(h,y){if(y==null)return null;if(h==="system"){const x=E.find($=>$.key===y);return x?x.label:String(y)}if(h==="gender")return y==="female"?"女":y==="male"?"男":String(y);if(h==="direction"){const x=_.find($=>$.key===y);return x?x.label:String(y)}if(typeof y=="boolean")return y?"开":"关";if(h==="asOf"){const x=String(y).match(/^(\d{4})/);return x?`${x[1]} 年`:String(y)}return String(y)}return{parseRevision:L,REVISE_SYSTEMS:S,REVISE_DIRECTIONS:b,displayValue:F}})(),O.handle=(function(){const{fail:E}=O.fail||{},_="mc1.",q=new Set(["handle","trace","shadow","shadowVersion","diff","withInterpret","cross","verifyPast","rectify","events","ask","followup","question","geocode","caliber","revise"]),M=r=>r!==null&&typeof r=="object"&&!Array.isArray(r);function L(r){if(Array.isArray(r))return`[${r.map(a=>L(a===void 0?null:a)).join(",")}]`;if(M(r))return`{${Object.keys(r).filter(s=>r[s]!==void 0).sort().map(s=>`${JSON.stringify(s)}:${L(r[s])}`).join(",")}}`;const l=JSON.stringify(r===void 0?null:r);return l===void 0?"null":l}function S(r){let l=2166136261;for(let a=0;a<r.length;a++)l^=r.charCodeAt(a),l=Math.imul(l,16777619)>>>0;return l.toString(16).padStart(8,"0")}const b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function F(r){const l=[];for(const a of String(r)){let s=a.codePointAt(0);s<128?l.push(s):s<2048?l.push(192|s>>6,128|s&63):s<65536?l.push(224|s>>12,128|s>>6&63,128|s&63):l.push(240|s>>18,128|s>>12&63,128|s>>6&63,128|s&63)}return l}function h(r){let l="";for(let a=0;a<r.length;){const s=r[a];let u,c;s<128?(u=s,c=1):s<224?(u=s&31,c=2):s<240?(u=s&15,c=3):(u=s&7,c=4);for(let w=1;w<c;w++)u=u<<6|r[a+w]&63;a+=c,l+=String.fromCodePoint(u)}return l}function y(r){const l=F(r);let a="";for(let s=0;s<l.length;s+=3){const u=l[s],c=l[s+1],w=l[s+2];if(a+=b[u>>2],a+=b[(u&3)<<4|(c===void 0?0:c)>>4],c===void 0||(a+=b[(c&15)<<2|(w===void 0?0:w)>>6],w===void 0))break;a+=b[w&63]}return a}function x(r){const l=[];let a=0,s=0;for(const u of r){const c=b.indexOf(u);if(c<0)throw new Error(`不是 base64url 字符:${u}`);a=a<<6|c,s+=6,s>=8&&(s-=8,l.push(a>>s&255))}return h(l)}function $(r={}){const l={};for(const[a,s]of Object.entries(r||{}))q.has(a)||s===void 0||(l[a]=s);return l}function p(r={}){const l=$(r);if(!Object.keys(l).length)return"";const a=y(L(l));return`${_}${a}.${S(a)}`}function z(r){if(typeof r!="string"||!r.trim())throw E("E_HANDLE","handle 必须是非空字符串;没拿到句柄时照常传 system + datetime 等原始参数即可");const l=r.trim();if(!l.startsWith(_))throw E("E_HANDLE",`handle 前缀不对(应以 ${_} 开头):句柄来自旧版本或复制不全,重新排一次盘取新的 handle`);const a=l.slice(_.length),s=a.lastIndexOf(".");if(s<=0)throw E("E_HANDLE","handle 缺少校验位:复制时可能被截断,重新取一次");const u=a.slice(0,s),c=a.slice(s+1);if(S(u)!==c)throw E("E_HANDLE","handle 校验不通过:内容被改动或截断,重新排一次盘取新的 handle");let w;try{w=JSON.parse(x(u))}catch{throw E("E_HANDLE","handle 内容无法解析(不是本插件生成的句柄),重新排一次盘取新的 handle")}if(!M(w))throw E("E_HANDLE","handle 内容不是参数对象,重新排一次盘取新的 handle");return w}function D(r={}){if(!M(r))return r;const{handle:l,...a}=r;if(l==null||l==="")return{...a};const u={...z(l)};for(const[c,w]of Object.entries(a))w!==void 0&&(u[c]=w);return u}return{handlePayload:$,encodeHandle:p,decodeHandle:z,resolveHandle:D,HANDLE_PREFIX:_,handleChecksum:S}})(),O.bridge=(function(){const{encodeHandle:E,decodeHandle:_,HANDLE_PREFIX:q}=O.handle||{},{askPrompt:M}=O.followup||{},L=200,S=60,b={bazi:"八字",ziwei:"紫微",liuyao:"六爻",meihua:"梅花",daliuren:"大六壬",qimen:"奇门",hepan:"合盘",tarot:"塔罗",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"},F=l=>b[l]||l||"未知体系";function h(l){const a=String(l||""),s=a.indexOf("#");return s<0?a:a.slice(0,s)}function y(l){try{return encodeURIComponent(l)}catch{return""}}function x(l){try{return decodeURIComponent(l)}catch{return String(l||"")}}function $(l={},a={}){const s=a||{},c=String(s.handle||l&&l.handle||"").trim()||E(l||{});if(!c||!c.startsWith(q))return"";const w=String(s.question||"").trim().slice(0,L),N=[`mp=${c}`];return w&&N.push(`q=${y(w)}`),`${h(s.base)}#${N.join("&")}`}function p(l){const a=String(l||"").trim();if(!a)return{ok:!1,code:"E_LINK",message:"没有链接内容:请粘贴带 #mp= 的完整链接"};let s="";const u=a.indexOf("#");if(u>=0&&a.slice(u+1).trim())s=a.slice(u+1).trim();else{const T=a.indexOf("?");T>=0&&a.slice(T+1).trim()?s=a.slice(T+1).trim():/^mp=/.test(a)&&(s=a)}if(!s)return{ok:!1,code:"E_LINK",message:"链接里没有 #mp= 片段:这不是本插件生成的深链"};const c={};for(const T of s.split("&")){if(!T)continue;const A=T.indexOf("=");if(A<=0)continue;const Y=T.slice(0,A),X=T.slice(A+1);Y==="mp"?c.mp=X:Y==="q"&&(c.q=X)}if(!c.mp)return{ok:!1,code:"E_LINK",message:"链接里没有 mp 参数(只有问题没有盘):无法还原盘面"};let w;try{w=_(c.mp)}catch(T){return{ok:!1,code:T&&T.code||"E_HANDLE",message:T&&T.message||"句柄无法解析"}}const N=c.q?x(c.q).slice(0,L):"";return{ok:!0,handle:c.mp,args:w,question:N,system:w.system||"",label:F(w.system)}}const z=l=>{const a=/^(\d{4}-\d{1,2}-\d{1,2})[T ](\d{1,2}:\d{2})/.exec(String(l||"").trim());if(!a)return{date:"",time:""};const[s,u,c]=a[1].split("-");return{date:`${s}-${String(u).padStart(2,"0")}-${String(c).padStart(2,"0")}`,time:a[2].padStart(5,"0")}},D=["gender","address","trueSolar","lateZi","lines"];function m(l){const a=l&&l.ok?l:null,s=a&&a.args||{},u=z(s.datetime),c={tab:s.system||"",date:u.date,time:u.time,question:a&&a.question||"",restored:[],rest:{}};c.tab&&c.restored.push("system"),u.date&&c.restored.push("datetime");for(const w of D)s[w]===void 0||s[w]===null||(c[w]=s[w],c.restored.push(w));c.question&&c.restored.push("question");for(const[w,N]of Object.entries(s))w==="system"||w==="datetime"||D.includes(w)||(c.rest[w]=N);return c}function g(l){const a=Object.keys(l&&l.rest||{});return a.length?`链接里还有 ${a.length} 项没填回表单(${a.join("、")}):这些只在引擎调用里生效,页面上按默认值显示。`:""}function r(l,a={}){const s=a||{},u=l||{},c=u.system||"",w=F(c),N=String(s.question||"").trim(),T=String(u.handle||"").trim();let A="";try{const se=M(u,{question:N,interpret:s.interpret});A=se&&se.text||String(u.summary||"")}catch{A=String(u.summary||"")}const Y=N?N.length>S?`${N.slice(0,S)}…`:N:"(未填问题:按摘要讲主线)",X=T?`【命理追问】${w}|${T}|问:${Y}`:`【命理追问】${w}|问:${Y}`,ne={};T&&(ne.handle=T),c&&(ne.system=c),N&&(ne.question=N);const oe=JSON.stringify({tool:"metaphysics",v:1,args:ne},null,2),ie=T?$({handle:T},{question:N,base:s.base}):"";return{system:c,label:w,handle:T,question:N,full:A,brief:X,structured:oe,link:ie}}return{LINK_MAX_QUESTION:L,askLink:$,parseAskLink:p,formOf:m,restNote:g,askPackages:r}})(),O.index=(function(){const{buildBazi:E}=O.bazi||{},{buildLiuyao:_,tossLines:q,bodyLabels:M,yongshenOf:L,yongshenStrength:S,fushenAccess:b,hexagramStrength:F,jinTuiPower:h,yingqiWindow:y}=O.liuyao||{},{buildZiwei:x,BRIGHTNESS:$,flowOf:p,asOfParts:z,ZIWEI_SCHOOL_DEFAULTS:D}=O.ziwei||{},{drawTarot:m}=O.tarot||{},{buildMeihua:g}=O.meihua||{},{buildDaliuren:r}=O.daliuren||{},{buildHepan:l,tripleOf:a}=O.hepan||{},{buildZiweiHepan:s}=O["ziwei-hepan"]||{},{buildQimen:u,buildSnapshot:c}=O.qimen||{},{geocodeAddress:w,resolveAddress:N}=O.geo||{},{toJDN:T,ganzhiName:A,dayGanzhiIndex:Y}=O.calendar||{},{randomOf:X,isSeed:ne}=O.random||{},{encodeHandle:oe,decodeHandle:ie,resolveHandle:se}=O.handle||{},{askLink:de,parseAskLink:ge,formOf:$e,restNote:ye,askPackages:P}=O.bridge||{},{parseRevision:C,displayValue:I}=O.revise||{},{interpret:B,DIRECTIONS:G,DIRECTION_DEFAULT:W}=O.interpret||{},{followup:V,askPrompt:ce}=O.followup||{},{crossCheck:he,crossText:xe,crossSection:be}=O.crosscheck||{},{pastSignals:pe,verifyFit:Te}=O.verify||{},{rectifyBirth:qe}=O.rectify||{},{buildAlmanac:ve}=O.almanac||{},{buildZeri:_e}=O.zeri||{},{buildChenggu:Le}=O.chenggu||{},{buildXiaoliuren:Pe}=O.xiaoliuren||{},{buildStar:Ce}=O.star||{},{buildNumerology:Fe}=O.numerology||{},{buildMbti:on,mbtiPaper:sn}=O.mbti||{},{buildConvert:Ee}=O.convert||{},{classicsFor:rn,classicsText:ln,suiyunClassicOf:De,classicOf:Ze,CLASSIC_BOOKS:je}=O.classics||{},{diffObjects:Re,summarize:Ye,sortDiffs:Ge,labelOf:He,rootOf:Je,categoryOf:Be,formatValue:ke,CALIBER_SWITCHES:un,viewRows:cn}=O.diff||{},{canonicalJson:Vn,fingerprintOf:dn}=O.fingerprint||{},{buildTrend:Ue}=O.trend||{},{buildFengshui:ze}=O.fengshui||{},{buildName:We}=O.name||{},{buildTrace:Xe,traceMarkdown:Ke,SYSTEM_LABEL:hn}=O.trace||{},{fail:K}=O.fail||{},{assertCivil:et}=O.validate||{},nt=e=>String(e).padStart(2,"0"),mn=["male","female"];function Qe(e,t){return t===2?e%4===0&&e%100!==0||e%400===0?29:28:[31,28,31,30,31,30,31,31,30,31,30,31][t-1]}function me(e,t=""){if(mn.includes(e))return e;const i=e==null||e===""?"(未提供)":`「${e}」`;throw K("E_INPUT",`${t?t+"的":""}gender 必须是 male 或 female${i};性别决定大运/大限顺逆,不能靠默认值`)}const fn=["brightnessSchool","gengYearSihua","tianmaSchool","tiankongSchool","jiekongSchool","kuiyueSchool","tianshiTianshang","changshengSchool","lateZishi","shenzhuSchool"];function Ve(e){const t={};for(const i of fn)e[i]!==void 0&&(t[i]=e[i]);return e.schools&&typeof e.schools=="object"&&(t.schools=e.schools),t}function ee(e){if(typeof e!="string"||!e.trim())throw K("E_INPUT","缺少 datetime(公历日期时间),例如 1990-05-12T14:30");const t=e.trim().match(/^(\d{4})-(\d{1,2})-(\d{1,2})(?:[T\s](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?$/);if(!t)throw K("E_INPUT",`无法解析 datetime:「${e}」,请用 1990-05-12T14:30 这种格式`);const i={year:Number(t[1]),month:Number(t[2]),day:Number(t[3]),hour:Number(t[4]??0),minute:Number(t[5]??0)};if(i.month<1||i.month>12)throw K("E_INPUT",`月份超出范围:${i.month}`);const n=Qe(i.year,i.month);if(i.day<1||i.day>n)throw K("E_INPUT",`日期不存在:${i.year}-${i.month}-${i.day}(${i.year} 年 ${i.month} 月只有 ${n} 天)`);if(i.hour>23||i.minute>59)throw K("E_INPUT",`时间超出范围:${i.hour}:${i.minute}`);if(i.year<1600||i.year>2400)throw K("E_RANGE",`年份 ${i.year} 超出可计算范围(1600–2400)`);return(i.year<1900||i.year>2100)&&(i.precision={level:"approx",note:`ΔT 模型仅覆盖 1900–2100,${i.year} 年按端点值外推,节气与朔望时刻可能有分钟级偏差,月柱在交节前后需复核`}),i}function $n(e){const t=e.pillars,i=(J,te)=>`${J}:${te.ganzhi} ${te.stemTenGod?`十神 ${te.stemTenGod} `:""}藏干 ${te.hidden.map(fe=>`${fe.stem}(${fe.tenGod})`).join(" ")} 纳音 ${te.nayin} 地势 ${te.dishi} 自坐 ${te.zizuo} 空亡 ${te.kongwang.join("")}`+(te.shensha&&te.shensha.length?` 神煞 ${te.shensha.join("、")}`:""),n=Object.entries(e.wuxing).map(([J,te])=>`${J}${te}`).join(" "),o=e.palaces?`【胎元】${e.palaces.taiyuan.ganzhi} 胎息 ${e.palaces.taixi?e.palaces.taixi.ganzhi:"—"} 命宫 ${e.palaces.minggong.ganzhi} 身宫 ${e.palaces.shengong.ganzhi}`:"",d=e.dayun.list.slice(0,8).map(J=>`${J.startAge}岁 ${J.ganzhi}(${J.stemTenGod})${J.luck?`·${J.luck.tier}`:""}${J.relations&&J.relations.length?`[${J.relations.join("")}]`:""}`).join(" "),f=e.dayun.jiao&&e.dayun.jiao.at?`;交运 ${e.dayun.jiao.at}(${e.dayun.jiao.frame},距${e.dayun.jiao.from.name} ${e.dayun.jiao.spanDays} 天,三日折一年)`:"",j=e.jieqi.nearBoundaryMinutes<20?`
|
|
70
|
-
⚠ 出生时刻距「节」仅 ${e.jieqi.nearBoundaryMinutes} 分钟,而节气时刻本身有最多约 14 分钟的偏差,月柱与年柱建议人工复核。`:"",R={year:"年",month:"月",day:"日",hour:"时"},U=e.shensha&&e.shensha.groups&&e.shensha.groups.length?`神煞(${e.shensha.count} 见):`+e.shensha.groups.map(J=>`${J.cat}|`+J.items.map(te=>`${te.name}(${te.pillars.map(fe=>R[fe]).join("")})`).join("、")).join(";"):"神煞:—",v=e.renyuan,H=Ze("smt-renyuan"),k=v?`人元:${v.month}月第${v.day}日,${v.active}${v.activeElement}司权(${v.segments.map(J=>`${J.stem}${J.from}–${J.to}`).join(" ")})${v.beyond?";已过 30 日表,按本气算":""}${H?`|原文见《${je[H.book].name}·${H.chapter}》`:""}`:"",Z=e.frame&&e.frame.yongshen&&e.frame.yongshen.disputed||[],ae=Z.length?` 有争议:${Z.map(J=>`${J.element}(${J.favorRole};${J.climate}盘调候忌${J.element})`).join("、")}`:"",ue=new Set(Z.map(J=>J.element)),Q=e.frame&&e.frame.yongshen&&e.frame.yongshen.neutral||[],le=Q.length?` 中性偏忌:${Q.map(J=>`${J.element} ${J.weight} 分`).join("、")}(近零,不作实忌)`:"",Se=e.frame?[`格局:${e.frame.primary?`${e.frame.primary.name}(${e.frame.primary.evidence})`:"—"}`,` ${e.frame.geju.map(J=>`${J.name}[${J.kind}${J.status?`·${J.status}`:""}]`).join(" ")}`,`用神:喜${e.frame.yongshen.favor.join("")}(${e.frame.yongshen.favorTenGods.join("、")}) 忌${e.frame.yongshen.avoid.join("")}(${e.frame.yongshen.avoidTenGods.join("、")})${ae}${le} ${e.frame.yongshen.method}`,` ${e.frame.yongshen.detail}`,`寒暖:${e.climate?`${e.climate.label}(${(e.climate.evidence||[]).join("、")})${e.climate.need?` 调候取${e.climate.need.stem}${e.climate.need.element} 忌${e.climate.avoidElement}${ue.has(e.climate.avoidElement)?"(有争议)":""}`:""}`:"—"}`+(e.frame.yongshen.qt?` 穷通:${e.frame.yongshen.qt.month}${e.frame.yongshen.qt.stem}取${e.frame.yongshen.qt.yong.join("、")}(首取${e.frame.yongshen.qt.primary})`:""),`十神权重:${Object.entries(e.frame.godStats.groups).map(([J,te])=>`${J}${te}`).join(" ")}`]:[];return[`【四柱】${t.year.ganzhi} ${t.month.ganzhi} ${t.day.ganzhi} ${t.hour.ganzhi}`,`日主:${e.dayMaster.stem}${e.dayMaster.element}(${e.dayMaster.yinYang}) 空亡:${e.kongwang.join("")}`,i("年柱",t.year),i("月柱",t.month),i("日柱",t.day),i("时柱",t.hour),`五行:${n}`,...o?[o]:[],`日主强弱:${e.strength.level}(${e.strength.score}) ${e.strength.detail}`,...Se,`天干关系:${e.relations&&e.relations.stems.length?e.relations.stems.join(" "):"—"}`,`地支关系:${e.relations&&e.relations.branches.length?e.relations.branches.join(" "):"—"}`,U,`真太阳时:${e.solarTime.trueSolarText}(${e.input.geo?e.input.geo.note+";":""}${e.solarTime.note}) 晚子时:${e.input.lateZi?"23:00 后算次日":"23:00 后仍算当日"}`,`节气:上一节 ${e.jieqi.previous.name} ${e.jieqi.previous.time} 下一节 ${e.jieqi.next.name} ${e.jieqi.next.time}`,...k?[k]:[],`大运:${e.dayun.rule}(${e.dayun.direction}),${e.dayun.startAge.years}岁${e.dayun.startAge.months}个月起运${f}`,` ${d}`,`流年:${e.liunian.slice(0,10).map(J=>`${J.year}${J.ganzhi}(${J.stemTenGod})${J.luck?`·${J.luck.tier}`:""}`).join(" ")}`,(()=>{const J=e.liunian.filter(re=>re.suiyun&&re.suiyun.signals&&re.suiyun.signals.length);if(!J.length)return"岁运提示:近十年无岁运并临、运年反吟或大运/流年伏吟、反吟(只标干支,不判吉凶)";const te=re=>`${re.type}${(re.type.startsWith("流年")||re.type.startsWith("大运"))&&re.target?`(${re.target})`:""}`,fe=De(e),
|
|
69
|
+
`);return{text:ne,question:a,system:m&&m.system||"",label:r,chars:ne.length,truncated:c}}return{followup:y,READING_ORDERS:$,READING_ORDER_FALLBACK:p,readingOrderOf:z,askPrompt:D}})(),O.revise=(function(){const E=[{key:"ziwei",label:"紫微",re:/紫微|斗数/},{key:"bazi",label:"八字",re:/八字|四柱/},{key:"liuyao",label:"六爻",re:/六爻|摇卦/},{key:"qimen",label:"奇门",re:/奇门/},{key:"daliuren",label:"大六壬",re:/大六壬|六壬/},{key:"tarot",label:"塔罗",re:/塔罗|抽牌/},{key:"meihua",label:"梅花",re:/梅花/},{key:"hepan",label:"合盘",re:/合盘|合婚/},{key:"almanac",label:"黄历",re:/黄历|老黄历/},{key:"zeri",label:"择日",re:/择日|挑日子/},{key:"fengshui",label:"风水",re:/风水/},{key:"name",label:"起名",re:/起名|取名/},{key:"chenggu",label:"称骨",re:/称骨/},{key:"xiaoliuren",label:"小六壬",re:/小六壬/},{key:"star",label:"星座",re:/星座/},{key:"numerology",label:"生命数字",re:/生命数字|生命灵数/},{key:"mbti",label:"MBTI",re:/mbti|人格测试|十六型/i},{key:"trend",label:"人生 K 线",re:/k\s*线|人生曲线/i},{key:"convert",label:"公农历互转",re:/农历转公历|公历转农历|公农历/}],_=[{key:"love",label:"感情",re:/感情|婚姻|恋爱|对象|夫妻/},{key:"wealth",label:"财运",re:/财运|财富|赚钱|收入|破财/},{key:"career",label:"事业",re:/事业|工作|升职|跳槽/},{key:"health",label:"健康",re:/健康|身体|疾病|病/},{key:"study",label:"学业",re:/学业|考试|考研|升学|读书/},{key:"travel",label:"出行",re:/出行|搬家|迁移|旅行|外地/}],q=/换成|改成|改为|换到|改看|再看|再看一下|换一套|排一?张|用|按|看/,M=h=>String(h||"").replace(/(出生|出生地|所在地|人)$/,"").replace(/[的了].*$/,"").trim();function L(h){const y=String(h??"").trim(),x={},$=[],p=[];if(!y)return{text:"",patch:x,labels:$,ignored:p};if(q.test(y)){for(const m of E)if(m.re.test(y)){x.system=m.key,$.push({key:"system",label:"体系",value:m.key,display:m.label});break}}/女命|女性|换成女|改成女|女盘/.test(y)?(x.gender="female",$.push({key:"gender",label:"性别",value:"female",display:"女"})):/男命|男性|换成男|改成男|男盘/.test(y)&&(x.gender="male",$.push({key:"gender",label:"性别",value:"male",display:"男"})),/晚子时/.test(y)&&(/不换日|不换天|算当日|归当日|按当日|当天/.test(y)?(x.lateZi=!1,$.push({key:"lateZi",label:"晚子时",value:!1,display:"23:00 后仍算当日"})):/换日|算次日|归次日|按次日|第二天|次日/.test(y)&&(x.lateZi=!0,$.push({key:"lateZi",label:"晚子时",value:!0,display:"23:00 后算次日"}))),/真太阳时/.test(y)&&(/不用|不要|关闭|关掉|取消|不算/.test(y)?(x.trueSolar=!1,$.push({key:"trueSolar",label:"真太阳时",value:!1,display:"用东八区平太阳时"})):(x.trueSolar=!0,$.push({key:"trueSolar",label:"真太阳时",value:!0,display:"按出生地经度校正"}))),/夏令时/.test(y)&&(/不用|不要|关闭|关掉|取消|不校正/.test(y)?(x.dst=!1,$.push({key:"dst",label:"夏令时",value:!1,display:"不自动校正 1986–1991 夏令时"})):(x.dst=!0,$.push({key:"dst",label:"夏令时",value:!0,display:"自动校正 1986–1991 夏令时"})));const z=y.match(/出生在\s*([\u4e00-\u9fa5]{2,12})/)||y.match(/出生地(?:改成|改为|换成|换到|是|为)?\s*([\u4e00-\u9fa5]{2,12})/)||y.match(/改到\s*([\u4e00-\u9fa5]{2,12})\s*出生/);if(z){const m=M(z[1]);m.length>=2&&(x.address=m,$.push({key:"address",label:"出生地",value:m,display:m}))}const D=y.match(/(?:看|查|问|到|到了|临近)\s*((?:19|20)\d{2})\s*年/)||y.match(/((?:19|20)\d{2})\s*年(?:的)?(?:运势|怎么样|如何|会怎样|流年)/);if(D){const m=Number(D[1]);x.asOf=`${m}-01-01T00:00`,$.push({key:"asOf",label:"流年基准",value:x.asOf,display:`${m} 年`})}else/(出生|生年)/.test(y)&&/(19|20)\d{2}\s*年/.test(y)&&p.push("出生年份没改:一句话改不出日与时辰,请直接传 datetime(如 1993-04-08T06:20)");for(const m of _)if(m.re.test(y)){x.direction=m.key,$.push({key:"direction",label:"询问方向",value:m.key,display:m.label});break}return/解读|详解|详细说|说人话/.test(y)&&!/不要解读|不用解读|别解读/.test(y)&&(x.withInterpret=!0,$.push({key:"withInterpret",label:"解读",value:!0,display:"附解析与详解"})),{text:y,patch:x,labels:$,ignored:p}}const S=E,b=_;function F(h,y){if(y==null)return null;if(h==="system"){const x=E.find($=>$.key===y);return x?x.label:String(y)}if(h==="gender")return y==="female"?"女":y==="male"?"男":String(y);if(h==="direction"){const x=_.find($=>$.key===y);return x?x.label:String(y)}if(typeof y=="boolean")return y?"开":"关";if(h==="asOf"){const x=String(y).match(/^(\d{4})/);return x?`${x[1]} 年`:String(y)}return String(y)}return{parseRevision:L,REVISE_SYSTEMS:S,REVISE_DIRECTIONS:b,displayValue:F}})(),O.handle=(function(){const{fail:E}=O.fail||{},_="mc1.",q=new Set(["handle","trace","shadow","shadowVersion","diff","withInterpret","cross","verifyPast","rectify","events","ask","followup","question","geocode","caliber","revise"]),M=r=>r!==null&&typeof r=="object"&&!Array.isArray(r);function L(r){if(Array.isArray(r))return`[${r.map(a=>L(a===void 0?null:a)).join(",")}]`;if(M(r))return`{${Object.keys(r).filter(s=>r[s]!==void 0).sort().map(s=>`${JSON.stringify(s)}:${L(r[s])}`).join(",")}}`;const l=JSON.stringify(r===void 0?null:r);return l===void 0?"null":l}function S(r){let l=2166136261;for(let a=0;a<r.length;a++)l^=r.charCodeAt(a),l=Math.imul(l,16777619)>>>0;return l.toString(16).padStart(8,"0")}const b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function F(r){const l=[];for(const a of String(r)){let s=a.codePointAt(0);s<128?l.push(s):s<2048?l.push(192|s>>6,128|s&63):s<65536?l.push(224|s>>12,128|s>>6&63,128|s&63):l.push(240|s>>18,128|s>>12&63,128|s>>6&63,128|s&63)}return l}function h(r){let l="";for(let a=0;a<r.length;){const s=r[a];let u,c;s<128?(u=s,c=1):s<224?(u=s&31,c=2):s<240?(u=s&15,c=3):(u=s&7,c=4);for(let w=1;w<c;w++)u=u<<6|r[a+w]&63;a+=c,l+=String.fromCodePoint(u)}return l}function y(r){const l=F(r);let a="";for(let s=0;s<l.length;s+=3){const u=l[s],c=l[s+1],w=l[s+2];if(a+=b[u>>2],a+=b[(u&3)<<4|(c===void 0?0:c)>>4],c===void 0||(a+=b[(c&15)<<2|(w===void 0?0:w)>>6],w===void 0))break;a+=b[w&63]}return a}function x(r){const l=[];let a=0,s=0;for(const u of r){const c=b.indexOf(u);if(c<0)throw new Error(`不是 base64url 字符:${u}`);a=a<<6|c,s+=6,s>=8&&(s-=8,l.push(a>>s&255))}return h(l)}function $(r={}){const l={};for(const[a,s]of Object.entries(r||{}))q.has(a)||s===void 0||(l[a]=s);return l}function p(r={}){const l=$(r);if(!Object.keys(l).length)return"";const a=y(L(l));return`${_}${a}.${S(a)}`}function z(r){if(typeof r!="string"||!r.trim())throw E("E_HANDLE","handle 必须是非空字符串;没拿到句柄时照常传 system + datetime 等原始参数即可");const l=r.trim();if(!l.startsWith(_))throw E("E_HANDLE",`handle 前缀不对(应以 ${_} 开头):句柄来自旧版本或复制不全,重新排一次盘取新的 handle`);const a=l.slice(_.length),s=a.lastIndexOf(".");if(s<=0)throw E("E_HANDLE","handle 缺少校验位:复制时可能被截断,重新取一次");const u=a.slice(0,s),c=a.slice(s+1);if(S(u)!==c)throw E("E_HANDLE","handle 校验不通过:内容被改动或截断,重新排一次盘取新的 handle");let w;try{w=JSON.parse(x(u))}catch{throw E("E_HANDLE","handle 内容无法解析(不是本插件生成的句柄),重新排一次盘取新的 handle")}if(!M(w))throw E("E_HANDLE","handle 内容不是参数对象,重新排一次盘取新的 handle");return w}function D(r={}){if(!M(r))return r;const{handle:l,...a}=r;if(l==null||l==="")return{...a};const u={...z(l)};for(const[c,w]of Object.entries(a))w!==void 0&&(u[c]=w);return u}return{handlePayload:$,encodeHandle:p,decodeHandle:z,resolveHandle:D,HANDLE_PREFIX:_,handleChecksum:S}})(),O.bridge=(function(){const{encodeHandle:E,decodeHandle:_,HANDLE_PREFIX:q}=O.handle||{},{askPrompt:M}=O.followup||{},L=200,S=60,b={bazi:"八字",ziwei:"紫微",liuyao:"六爻",meihua:"梅花",daliuren:"大六壬",qimen:"奇门",hepan:"合盘",tarot:"塔罗",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"},F=l=>b[l]||l||"未知体系";function h(l){const a=String(l||""),s=a.indexOf("#");return s<0?a:a.slice(0,s)}function y(l){try{return encodeURIComponent(l)}catch{return""}}function x(l){try{return decodeURIComponent(l)}catch{return String(l||"")}}function $(l={},a={}){const s=a||{},c=String(s.handle||l&&l.handle||"").trim()||E(l||{});if(!c||!c.startsWith(q))return"";const w=String(s.question||"").trim().slice(0,L),N=[`mp=${c}`];return w&&N.push(`q=${y(w)}`),`${h(s.base)}#${N.join("&")}`}function p(l){const a=String(l||"").trim();if(!a)return{ok:!1,code:"E_LINK",message:"没有链接内容:请粘贴带 #mp= 的完整链接"};let s="";const u=a.indexOf("#");if(u>=0&&a.slice(u+1).trim())s=a.slice(u+1).trim();else{const T=a.indexOf("?");T>=0&&a.slice(T+1).trim()?s=a.slice(T+1).trim():/^mp=/.test(a)&&(s=a)}if(!s)return{ok:!1,code:"E_LINK",message:"链接里没有 #mp= 片段:这不是本插件生成的深链"};const c={};for(const T of s.split("&")){if(!T)continue;const A=T.indexOf("=");if(A<=0)continue;const Y=T.slice(0,A),X=T.slice(A+1);Y==="mp"?c.mp=X:Y==="q"&&(c.q=X)}if(!c.mp)return{ok:!1,code:"E_LINK",message:"链接里没有 mp 参数(只有问题没有盘):无法还原盘面"};let w;try{w=_(c.mp)}catch(T){return{ok:!1,code:T&&T.code||"E_HANDLE",message:T&&T.message||"句柄无法解析"}}const N=c.q?x(c.q).slice(0,L):"";return{ok:!0,handle:c.mp,args:w,question:N,system:w.system||"",label:F(w.system)}}const z=l=>{const a=/^(\d{4}-\d{1,2}-\d{1,2})[T ](\d{1,2}:\d{2})/.exec(String(l||"").trim());if(!a)return{date:"",time:""};const[s,u,c]=a[1].split("-");return{date:`${s}-${String(u).padStart(2,"0")}-${String(c).padStart(2,"0")}`,time:a[2].padStart(5,"0")}},D=["gender","address","trueSolar","lateZi","lines"];function m(l){const a=l&&l.ok?l:null,s=a&&a.args||{},u=z(s.datetime),c={tab:s.system||"",date:u.date,time:u.time,question:a&&a.question||"",restored:[],rest:{}};c.tab&&c.restored.push("system"),u.date&&c.restored.push("datetime");for(const w of D)s[w]===void 0||s[w]===null||(c[w]=s[w],c.restored.push(w));c.question&&c.restored.push("question");for(const[w,N]of Object.entries(s))w==="system"||w==="datetime"||D.includes(w)||(c.rest[w]=N);return c}function g(l){const a=Object.keys(l&&l.rest||{});return a.length?`链接里还有 ${a.length} 项没填回表单(${a.join("、")}):这些只在引擎调用里生效,页面上按默认值显示。`:""}function r(l,a={}){const s=a||{},u=l||{},c=u.system||"",w=F(c),N=String(s.question||"").trim(),T=String(u.handle||"").trim();let A="";try{const se=M(u,{question:N,interpret:s.interpret});A=se&&se.text||String(u.summary||"")}catch{A=String(u.summary||"")}const Y=N?N.length>S?`${N.slice(0,S)}…`:N:"(未填问题:按摘要讲主线)",X=T?`【命理追问】${w}|${T}|问:${Y}`:`【命理追问】${w}|问:${Y}`,ne={};T&&(ne.handle=T),c&&(ne.system=c),N&&(ne.question=N);const oe=JSON.stringify({tool:"metaphysics",v:1,args:ne},null,2),ie=T?$({handle:T},{question:N,base:s.base}):"";return{system:c,label:w,handle:T,question:N,full:A,brief:X,structured:oe,link:ie}}return{LINK_MAX_QUESTION:L,askLink:$,parseAskLink:p,formOf:m,restNote:g,askPackages:r}})(),O.index=(function(){const{buildBazi:E}=O.bazi||{},{buildLiuyao:_,tossLines:q,bodyLabels:M,yongshenOf:L,yongshenStrength:S,fushenAccess:b,hexagramStrength:F,jinTuiPower:h,yingqiWindow:y}=O.liuyao||{},{buildZiwei:x,BRIGHTNESS:$,flowOf:p,asOfParts:z,ZIWEI_SCHOOL_DEFAULTS:D}=O.ziwei||{},{drawTarot:m}=O.tarot||{},{buildMeihua:g}=O.meihua||{},{buildDaliuren:r}=O.daliuren||{},{buildHepan:l,tripleOf:a}=O.hepan||{},{buildZiweiHepan:s}=O["ziwei-hepan"]||{},{buildQimen:u,buildSnapshot:c}=O.qimen||{},{geocodeAddress:w,resolveAddress:N}=O.geo||{},{toJDN:T,ganzhiName:A,dayGanzhiIndex:Y}=O.calendar||{},{randomOf:X,isSeed:ne}=O.random||{},{encodeHandle:oe,decodeHandle:ie,resolveHandle:se}=O.handle||{},{askLink:de,parseAskLink:ge,formOf:$e,restNote:ye,askPackages:P}=O.bridge||{},{parseRevision:C,displayValue:I}=O.revise||{},{interpret:B,DIRECTIONS:G,DIRECTION_DEFAULT:W}=O.interpret||{},{followup:V,askPrompt:ce}=O.followup||{},{crossCheck:he,crossText:xe,crossSection:be}=O.crosscheck||{},{pastSignals:pe,verifyFit:Te}=O.verify||{},{rectifyBirth:qe}=O.rectify||{},{buildAlmanac:ve}=O.almanac||{},{buildZeri:_e}=O.zeri||{},{buildChenggu:Le}=O.chenggu||{},{buildXiaoliuren:Pe}=O.xiaoliuren||{},{buildStar:Ce}=O.star||{},{buildNumerology:Fe}=O.numerology||{},{buildMbti:on,mbtiPaper:sn}=O.mbti||{},{buildConvert:Ee}=O.convert||{},{classicsFor:rn,classicsText:ln,suiyunClassicOf:De,classicOf:Ze,CLASSIC_BOOKS:je}=O.classics||{},{diffObjects:Re,summarize:Ye,sortDiffs:Ge,labelOf:He,rootOf:Je,categoryOf:Be,formatValue:ke,CALIBER_SWITCHES:un,viewRows:cn}=O.diff||{},{canonicalJson:nt,fingerprintOf:dn}=O.fingerprint||{},{buildTrend:Ue}=O.trend||{},{buildFengshui:ze}=O.fengshui||{},{buildName:We}=O.name||{},{buildTrace:Xe,traceMarkdown:Ke,SYSTEM_LABEL:hn}=O.trace||{},{fail:K}=O.fail||{},{assertCivil:tt}=O.validate||{},it=e=>String(e).padStart(2,"0"),mn=["male","female"];function Qe(e,t){return t===2?e%4===0&&e%100!==0||e%400===0?29:28:[31,28,31,30,31,30,31,31,30,31,30,31][t-1]}function me(e,t=""){if(mn.includes(e))return e;const i=e==null||e===""?"(未提供)":`「${e}」`;throw K("E_INPUT",`${t?t+"的":""}gender 必须是 male 或 female${i};性别决定大运/大限顺逆,不能靠默认值`)}const fn=["brightnessSchool","gengYearSihua","tianmaSchool","tiankongSchool","jiekongSchool","kuiyueSchool","tianshiTianshang","changshengSchool","lateZishi","shenzhuSchool"];function Ve(e){const t={};for(const i of fn)e[i]!==void 0&&(t[i]=e[i]);return e.schools&&typeof e.schools=="object"&&(t.schools=e.schools),t}function ee(e){if(typeof e!="string"||!e.trim())throw K("E_INPUT","缺少 datetime(公历日期时间),例如 1990-05-12T14:30");const t=e.trim().match(/^(\d{4})-(\d{1,2})-(\d{1,2})(?:[T\s](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?$/);if(!t)throw K("E_INPUT",`无法解析 datetime:「${e}」,请用 1990-05-12T14:30 这种格式`);const i={year:Number(t[1]),month:Number(t[2]),day:Number(t[3]),hour:Number(t[4]??0),minute:Number(t[5]??0)};if(i.month<1||i.month>12)throw K("E_INPUT",`月份超出范围:${i.month}`);const n=Qe(i.year,i.month);if(i.day<1||i.day>n)throw K("E_INPUT",`日期不存在:${i.year}-${i.month}-${i.day}(${i.year} 年 ${i.month} 月只有 ${n} 天)`);if(i.hour>23||i.minute>59)throw K("E_INPUT",`时间超出范围:${i.hour}:${i.minute}`);if(i.year<1600||i.year>2400)throw K("E_RANGE",`年份 ${i.year} 超出可计算范围(1600–2400)`);return(i.year<1900||i.year>2100)&&(i.precision={level:"approx",note:`ΔT 模型仅覆盖 1900–2100,${i.year} 年按端点值外推,节气与朔望时刻可能有分钟级偏差,月柱在交节前后需复核`}),i}function $n(e){const t=e.pillars,i=(J,te)=>`${J}:${te.ganzhi} ${te.stemTenGod?`十神 ${te.stemTenGod} `:""}藏干 ${te.hidden.map(fe=>`${fe.stem}(${fe.tenGod})`).join(" ")} 纳音 ${te.nayin} 地势 ${te.dishi} 自坐 ${te.zizuo} 空亡 ${te.kongwang.join("")}`+(te.shensha&&te.shensha.length?` 神煞 ${te.shensha.join("、")}`:""),n=Object.entries(e.wuxing).map(([J,te])=>`${J}${te}`).join(" "),o=e.palaces?`【胎元】${e.palaces.taiyuan.ganzhi} 胎息 ${e.palaces.taixi?e.palaces.taixi.ganzhi:"—"} 命宫 ${e.palaces.minggong.ganzhi} 身宫 ${e.palaces.shengong.ganzhi}`:"",d=e.dayun.list.slice(0,8).map(J=>`${J.startAge}岁 ${J.ganzhi}(${J.stemTenGod})${J.luck?`·${J.luck.tier}`:""}${J.relations&&J.relations.length?`[${J.relations.join("")}]`:""}`).join(" "),f=e.dayun.jiao&&e.dayun.jiao.at?`;交运 ${e.dayun.jiao.at}(${e.dayun.jiao.frame},距${e.dayun.jiao.from.name} ${e.dayun.jiao.spanDays} 天,三日折一年)`:"",j=e.jieqi.nearBoundaryMinutes<20?`
|
|
70
|
+
⚠ 出生时刻距「节」仅 ${e.jieqi.nearBoundaryMinutes} 分钟,而节气时刻本身有最多约 14 分钟的偏差,月柱与年柱建议人工复核。`:"",R={year:"年",month:"月",day:"日",hour:"时"},U=e.shensha&&e.shensha.groups&&e.shensha.groups.length?`神煞(${e.shensha.count} 见):`+e.shensha.groups.map(J=>`${J.cat}|`+J.items.map(te=>`${te.name}(${te.pillars.map(fe=>R[fe]).join("")})`).join("、")).join(";"):"神煞:—",v=e.renyuan,H=Ze("smt-renyuan"),k=v?`人元:${v.month}月第${v.day}日,${v.active}${v.activeElement}司权(${v.segments.map(J=>`${J.stem}${J.from}–${J.to}`).join(" ")})${v.beyond?";已过 30 日表,按本气算":""}${H?`|原文见《${je[H.book].name}·${H.chapter}》`:""}`:"",Z=e.frame&&e.frame.yongshen&&e.frame.yongshen.disputed||[],ae=Z.length?` 有争议:${Z.map(J=>`${J.element}(${J.favorRole};${J.climate}盘调候忌${J.element})`).join("、")}`:"",ue=new Set(Z.map(J=>J.element)),Q=e.frame&&e.frame.yongshen&&e.frame.yongshen.neutral||[],le=Q.length?` 中性偏忌:${Q.map(J=>`${J.element} ${J.weight} 分`).join("、")}(近零,不作实忌)`:"",Se=e.frame?[`格局:${e.frame.primary?`${e.frame.primary.name}(${e.frame.primary.evidence})`:"—"}`,` ${e.frame.geju.map(J=>`${J.name}[${J.kind}${J.status?`·${J.status}`:""}]`).join(" ")}`,`用神:喜${e.frame.yongshen.favor.join("")}(${e.frame.yongshen.favorTenGods.join("、")}) 忌${e.frame.yongshen.avoid.join("")}(${e.frame.yongshen.avoidTenGods.join("、")})${ae}${le} ${e.frame.yongshen.method}`,` ${e.frame.yongshen.detail}`,`寒暖:${e.climate?`${e.climate.label}(${(e.climate.evidence||[]).join("、")})${e.climate.need?` 调候取${e.climate.need.stem}${e.climate.need.element} 忌${e.climate.avoidElement}${ue.has(e.climate.avoidElement)?"(有争议)":""}`:""}`:"—"}`+(e.frame.yongshen.qt?` 穷通:${e.frame.yongshen.qt.month}${e.frame.yongshen.qt.stem}取${e.frame.yongshen.qt.yong.join("、")}(首取${e.frame.yongshen.qt.primary})`:""),`十神权重:${Object.entries(e.frame.godStats.groups).map(([J,te])=>`${J}${te}`).join(" ")}`]:[];return[`【四柱】${t.year.ganzhi} ${t.month.ganzhi} ${t.day.ganzhi} ${t.hour.ganzhi}`,`日主:${e.dayMaster.stem}${e.dayMaster.element}(${e.dayMaster.yinYang}) 空亡:${e.kongwang.join("")}`,i("年柱",t.year),i("月柱",t.month),i("日柱",t.day),i("时柱",t.hour),`五行:${n}`,...o?[o]:[],`日主强弱:${e.strength.level}(${e.strength.score}) ${e.strength.detail}`,...Se,`天干关系:${e.relations&&e.relations.stems.length?e.relations.stems.join(" "):"—"}`,`地支关系:${e.relations&&e.relations.branches.length?e.relations.branches.join(" "):"—"}`,U,`真太阳时:${e.solarTime.trueSolarText}(${e.input.geo?e.input.geo.note+";":""}${e.solarTime.note}) 晚子时:${e.input.lateZi?"23:00 后算次日":"23:00 后仍算当日"}`,`节气:上一节 ${e.jieqi.previous.name} ${e.jieqi.previous.time} 下一节 ${e.jieqi.next.name} ${e.jieqi.next.time}`,...k?[k]:[],`大运:${e.dayun.rule}(${e.dayun.direction}),${e.dayun.startAge.years}岁${e.dayun.startAge.months}个月起运${f}`,` ${d}`,`流年:${e.liunian.slice(0,10).map(J=>`${J.year}${J.ganzhi}(${J.stemTenGod})${J.luck?`·${J.luck.tier}`:""}`).join(" ")}`,(()=>{const J=e.liunian.filter(re=>re.suiyun&&re.suiyun.signals&&re.suiyun.signals.length);if(!J.length)return"岁运提示:近十年无岁运并临、运年反吟或大运/流年伏吟、反吟(只标干支,不判吉凶)";const te=re=>`${re.type}${(re.type.startsWith("流年")||re.type.startsWith("大运"))&&re.target?`(${re.target})`:""}`,fe=De(e),Vn=fe?`|古籍见《${je[fe.book].name}·${fe.chapter}》`:"";return"岁运提示(只标干支变动,不判吉凶):"+J.map(re=>`${re.year}${re.ganzhi} ${re.suiyun.signals.map(te).join("/")}`).join(";")+Vn})(),"(格局、用神、行运吉凶为扶抑+简化调候的量化提示,非断语。)"].join(`
|
|
71
71
|
`)+j}function yn(e){const t=e.lunar.monthRaw||e.lunar.month,i=`${e.lunar.year}年${e.lunar.isLeap?`闰${t}`:e.lunar.month}月${e.lunar.day}日`+(e.lunar.isLeap&&e.lunar.month!==t?`(按${e.lunar.month}月起盘)`:""),n=(()=>{if(!e.schools)return"";const Z=Object.entries({brightnessSchool:"亮度",gengYearSihua:"庚干四化",tianmaSchool:"天马",tiankongSchool:"天空",jiekongSchool:"截空",kuiyueSchool:"魁钺",tianshiTianshang:"天伤天使",changshengSchool:"长生",lateZishi:"晚子时",shenzhuSchool:"身主"}).filter(([ae])=>e.schools[ae]&&e.schools[ae]!==D[ae]).map(([ae,ue])=>`${ue} ${e.schools[ae]}`);return Z.length?`【流派】${Z.join(" ")}`:""})(),o=k=>k.length?k.map(Z=>`${Z.name}${Z.mutagen?`化${Z.mutagen}`:""}`).join(" "):"—",d=k=>`神煞:长生(${k.changsheng}) 博士(${k.boshi}) 将前(${k.jiangqian}) 岁前(${k.suiqi})`,f=[];for(const k of e.palaces){const Z=k.isSoul?"【命】":k.isBody?"【身】":" ";f.push(` ${k.palace} ${k.branch} ${k.ganzhi} ${Z} 大限${String(k.daxian.start).padStart(2)}-${k.daxian.end} 小限${String(k.xiaoxian.age).padStart(2)} ${o(k.stars)}`),f.push(` ${d(k.shensha)}`)}const j=(e.liunian??[]).slice(0,6).map(k=>` ${k.year} ${k.ganzhi} ${String(k.age).padStart(2)}岁 命宫${k.lifePalace.branch}(${k.lifePalace.palace}) 流禄${k.liulu} 流羊${k.liuyang} 流陀${k.liutuo} | ${k.mutagen.map(Z=>Z.replace("化","")).join(" ")}`+(k.mutagenHits?` 四化落宫 ${k.mutagenHits.map(Z=>`${Z.star}${Z.type}→${Z.palace||"未上盘"}`).join("、")}`:"")+(k.sanfangMainStars?` 三方主星 ${k.sanfangMainStars.join("")}`:"")),R=(e.patterns??[]).length?e.patterns.map(k=>`${k.name}(${k.tone==="good"?"吉格":k.tone==="bad"?"忌格":"中"}:${k.evidence})`).join(";"):"无明显格局(按内置规则)",U=(e.daxianList??[]).slice(0,8).map(k=>` ${k.branch}宫(${k.palace})${k.ages[0]}-${k.ages[1]}岁 ${k.ganzhi} 会${k.mainStars.join("")||"—"} 化 ${k.mutagenHits.map(Z=>`${Z.star}${Z.type}→${Z.palace||"未上盘"}`).join("、")}`),v=(()=>{const k=e.flyChains;if(!k)return"";const Z=ue=>{const Q=k[ue];return!Q||!Q.steps.length?"":`${ue}:${Q.path.join("→")}${Q.closed?"(成环)":""}`},ae=["禄","权","科","忌"].map(Z).filter(Boolean).join(" ");return ae?`【命宫飞星】${ae}`:""})(),H=(()=>{const k=e.flyComposite;if(!k||!Array.isArray(k.sources)||!k.sources.length)return"";const Z=k.labels.length?k.labels.join(" · "):"无同宫会聚",ae=["禄","权","科","忌"].map(ue=>{const Q=(k.byType&&k.byType[ue]||[]).filter(Se=>!Se.self),le=[...new Set(Q.map(Se=>String(Se.to).replace(/宫$/,"")))];return le.length?`${ue}→${le.join("/")}`:""}).filter(Boolean).join(" ");return`【三方四正飞化】${k.sanfang.join("·")}:${Z}${ae?` ${ae}`:""}`})();return[`【农历】${i}(月首 ${e.lunar.monthStart}) 时支:${e.hourBranch} 年干支:${e.yearGanzhi}`,`【时刻】${e.solarTime?`${e.solarTime.civilText} → 真太阳时 ${e.solarTime.trueSolarText}${e.input.geo?"("+e.input.geo.note+")":""}`:""}`,`【命宫】${e.soul.branch}(${e.soul.ganzhi}·${e.soul.nayin}) 【身宫】${e.body.branch}(落${e.body.lands}) 【五行局】${e.bureau.name}`,`【紫微】${e.ziwei} 【天府】${e.tianfu} 【命主】${e.lifeMaster} 【身主】${e.bodyMaster}${e.bodyMasterNote?`(${e.bodyMasterSchool==="common"?"子午皆火星":"子铃午火"})`:""}`,`【大限】${e.daxian.rule},${e.daxian.startAge}岁起 【小限】${e.xiaoxianRule.direction}`,n,`【昌曲】文昌${e.changqu.wenchang.branch}(${e.changqu.wenchang.palace}${e.changqu.wenchang.mutagen?"·化"+e.changqu.wenchang.mutagen:""}) 文曲${e.changqu.wenqu.branch}(${e.changqu.wenqu.palace}${e.changqu.wenqu.mutagen?"·化"+e.changqu.wenqu.mutagen:""})`,` ${e.changqu.relation} 入命三方:${e.changqu.inSoulSanfang?"是":"否"} 吸收面:${e.changqu.absorb.label}(${e.changqu.absorb.reason})`,v,H,"十二宫:",...f,"大限(按起运年龄排序,前 8 限,宫干四化落宫):",...U,"流年(前 6 年,完整 12 年在结构化数据里):",...j,`【格局】${R}`,e.patternSummary?`【结构统计】吉格 ${e.patternSummary.good.length}、中性 ${e.patternSummary.neutral.length}、忌格 ${e.patternSummary.bad.length}${e.patternSummary.broken.length?`、破格 ${e.patternSummary.broken.length}(${e.patternSummary.broken.join("、")})`:""};${e.patternSummary.note}`:"",e.lunar.note?`注:${e.lunar.note}`:""].filter(Boolean).join(`
|
|
72
72
|
`)}const pn=["旺","相","休","囚","死"];function gn(e){const t=e.states,i=e.month;if(!t||!i)return"无月令数据";const n=o=>pn.filter(d=>o&&Array.isArray(o[d])&&o[d].length).map(d=>`${d} ${o[d].join("/")}`).join(" ");return`月令 ${i.branch}(${i.element}) 门 ${n(t.gate)||"—"} 星 ${n(t.star)||"—"} 干 ${n(t.stem)||"—"}`}function bn(e){const t=e.palaces,i=n=>`${n.palace}宫 ${n.star||"—"}/${n.gate||"—"}/${n.god||"—"}${n.kong?" 空":""}${n.ma?" 马":""}`;return[`【四柱】${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`,`【局数】${e.ju} 节气 ${e.jieqi}(${e.jieqiTime})`,`【值符】${e.zhiFu.star}(${e.zhiFu.gong}宫) 【值使】${e.zhiShi.gate}(${e.zhiShi.gong}宫) 旬首 ${e.xunshou}`,`【空亡】${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}(${e.ma.gong||"—"}宫)`,`【宫位条件】击刑 ${(e.conditions&&e.conditions.jiXing||[]).map(n=>`${n.palace}宫${n.stem}`).join("、")||"无"} 三奇入墓 ${(e.conditions&&e.conditions.ruMu||[]).map(n=>`${n.palace}宫${n.stem}`).join("、")||"无"} 六仪入墓 ${(e.conditions&&e.conditions.liuYiRuMu||[]).map(n=>`${n.palace}宫${n.stem}`).join("、")||"无"}`,`【十干克应】${[...t,e.centerPalace].filter(n=>n&&n.ganYing).map(n=>`${n.palace}宫 ${n.ganYing.tian}加${n.ganYing.di} ${n.ganYing.name}`).join(" ")||"—"}`,`【旺衰】${gn(e)}`,`【九宫】${t.map(i).join(" ")}`,`※ 晚子时:${e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"}(可用 lateZiHourMode / lateZi 指定)`,`※ ${e.rules[e.rules.length-1]}`].join(`
|
|
73
73
|
`)}function en(e){if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return[];const t=["【三方合盘】三对两两并列,不合成「三人总分」",...e.pairs.map(i=>`· ${i.a}–${i.b}:${i.level||"—"}(${i.total==null?"—":`${i.total}/100`})`)];return e.best&&(e.spread>=3?t.push(` 最顺:${e.best.a}–${e.best.b}(${e.best.total}/100)`+(e.hardest?`;最需磨合:${e.hardest.a}–${e.hardest.b}(${e.hardest.total}/100)`:"")):t.push(` 三对分数接近(最高与最低相差 ${e.spread} 分),不排名`)),e.focus&&e.focus.spread>=3&&t.push(` 差异最大的一维:${e.focus.label}(三对相差 ${e.focus.spread} 分)`),e.note&&t.push(`※ ${e.note}`),t}function wn(e){if(e.chart==="ziwei"){const n=o=>`${o.label}:${o.score>=0?"+":""}${o.score} ${o.text}`;return[`【紫微合盘】${e.score.level}(${e.score.total}/100)`,`你 命宫 ${e.a.soul.branch}(${e.a.soulStars.join("、")||"无主星"}) 夫妻 ${e.a.spouseStars.join("、")||"无主星"} ${e.a.bureau}`,`对方 命宫 ${e.b.soul.branch}(${e.b.soulStars.join("、")||"无主星"}) 夫妻 ${e.b.spouseStars.join("、")||"无主星"} ${e.b.bureau}`,...e.dimensions.map(n),...e.interactions.map(o=>` · ${o.text}`),...en(e.triple),...e.notes.map(o=>`※ ${o}`)].join(`
|
|
@@ -84,7 +84,8 @@ ${n.summary}`),n&&(n.system==="bazi"||n.system==="ziwei")&&n.input&&n.input.long
|
|
|
84
84
|
${n.summary}`),t.withInterpret&&(n.interpret=B(n,{question:typeof t.question=="string"?t.question:"",direction:typeof t.direction=="string"?t.direction:"general"})),t.cross===!0&&(n.system==="bazi"||n.system==="ziwei")){const d={...ee(t.datetime),gender:me(t.gender),longitude:typeof t.longitude=="number"?t.longitude:void 0,address:typeof t.address=="string"?t.address:void 0,geo:t.geo&&typeof t.geo=="object"?t.geo:void 0,trueSolar:t.trueSolar!==!1,dst:t.dst!==!1},f=we(t.asOf),j=n.system==="bazi"?x({...d,leapMonth:t.leapMonth,leapAsNext:t.leapAsNext===!0,...Ve(t),asOf:f}):E({...d,lateZi:t.lateZi!==!1,nowYear:f?f.year:void 0});n.cross=he(n.system==="bazi"?n:j,n.system==="ziwei"?n:j),n.interpret&&n.interpret.sections.push(be(n.cross))}if(Number.isInteger(t.verifyPast)&&t.verifyPast>0&&n.system==="bazi"){const o=Math.min(Math.max(t.verifyPast,1),10),d=Number(n.liunianFrom)-o,f=E({...ee(t.datetime),gender:me(t.gender),lateZi:t.lateZi!==!1,trueSolar:t.trueSolar!==!1,longitude:typeof t.longitude=="number"?t.longitude:void 0,address:typeof t.address=="string"?t.address:void 0,geo:t.geo&&typeof t.geo=="object"?t.geo:void 0,dst:t.dst!==!1,nowYear:d});n.past={rows:pe(f,Number(n.liunianFrom)-1),years:o,until:Number(n.liunianFrom)-1}}if(t.rectify===!0&&n.system==="bazi"){const o=ee(t.datetime);n.rectify=qe({base:{year:o.year,month:o.month,day:o.day,minute:o.minute},gender:me(t.gender),events:Array.isArray(t.events)?t.events:[],hours:Array.isArray(t.rectifyHours)?t.rectifyHours:void 0,lateZi:t.lateZi!==!1,trueSolar:t.trueSolar!==!1,dst:t.dst!==!1,longitude:typeof t.longitude=="number"?t.longitude:void 0,address:typeof t.address=="string"?t.address:void 0,geo:t.geo&&typeof t.geo=="object"?t.geo:void 0})}if(typeof t.ask=="string"&&t.ask.trim()&&(n.followup=V(n,t.ask)),t.trace===!0)try{const o=Xe(n,{direction:t.direction,gender:t.gender});o&&(n.trace=o,n.traceText=Ke(o,{system:n.system}))}catch(o){n.traceError=String(o&&o.message||o)}if(t.shadow===!0)try{n.shadow=nn(t,{result:n,version:t.shadowVersion})}catch(o){n.shadow={error:String(o&&o.message||o)}}try{const o=oe(t);o&&(n.handle=o)}catch(o){n.handleError=String(o&&o.message||o)}return n}function an(e){if(!e)return"";const t=[`【${e.title||"解析与详解"}】${e.ask&&e.ask.echo?e.ask.echo:""}`];e.answer&&t.push(`▶ ${e.ask&&e.ask.question?"先答所问":"先看结论"}:${e.answer}`),e.plain&&t.push(`▶ 说人话:${e.plain}`),e.lead&&t.push(e.lead),Array.isArray(e.outline)&&e.outline.length&&t.push("一页读懂:"+e.outline.map(i=>`${i.label}·${i.text}`).join(" ")),e.error&&t.push(`⚠ 解析生成失败:${e.error}(上方盘面数据本身可用)`);for(const i of e.dimensions||[]){const n=Array.isArray(i.evidence)&&i.evidence.length?`
|
|
85
85
|
依据:${i.evidence.join(";")}${i.confidence?` 置信度:${i.confidence}`:""}`:"",o=i.plain?`(${i.plain})`:"",d=(i.knowledge||[]).map(f=>`
|
|
86
86
|
规则·${f.gist}〔${f.statusLabel}〕${f.detail} 出处:${f.source}${f.note?` 注:${f.note}`:""}`).join("");t.push(`${i.label}:${o}${i.text}${i.advice?` 建议:${i.advice}`:""}${n}${d}`)}for(const i of e.sections||[])t.push(`${i.label}:${i.text}`);for(const i of e.tables||[])!Array.isArray(i.rows)||!i.rows.length||(t.push(`【${i.title}】`),t.push([i.columns.join(" | "),...i.rows.map(n=>n.join(" | "))].join(`
|
|
87
|
-
`)));return Array.isArray(e.followups)&&e.followups.length&&t.push("还可以这样追问:"+e.followups.map(i=>`「${i}」`).join(" ")),Array.isArray(e.glossary)&&e.glossary.length&&t.push("名词解释:"+e.glossary.map(i=>`${i.term}=${i.plain}`).join(" ")),e.
|
|
87
|
+
`)));return Array.isArray(e.followups)&&e.followups.length&&t.push("还可以这样追问:"+e.followups.map(i=>`「${i}」`).join(" ")),Array.isArray(e.glossary)&&e.glossary.length&&t.push("名词解释:"+e.glossary.map(i=>`${i.term}=${i.plain}`).join(" ")),Array.isArray(e.limits)&&e.limits.length&&t.push("【本插件不回答什么】"+e.limits.map(i=>`${i.title}——${i.text}`).join(`
|
|
88
|
+
`)),e.disclaimer&&t.push(e.disclaimer),t.join(`
|
|
88
89
|
`)}const qn=["cross","verifyPast","withInterpret","question","direction","ask","geocode","rectify","events","shadow","trace"];function vn(e={},t={}){const i=t.system||e.system,n=t.switches||un[i]||[];if(!n.length)return{system:i,switches:[],affected:0,total:0};const o={...e};for(const f of qn)delete o[f];const d=n.map(f=>{const j=f.read(o),R=f.alt(j);let U=[],v="",H=null,k=null;try{H=Ie({...o,[f.key]:j}),k=Ie({...o,[f.key]:R}),U=Re(H,k)}catch(Q){v=Q&&Q.message||String(Q)}const Z=Ge(U.filter(Q=>Je(Q.path))).map(Q=>({path:Q.path,label:He(Q.path),from:ke(Q.from),to:ke(Q.to)})),ae=new Map;for(const Q of U){const le=Be(Q.path)||"其他";ae.set(le,(ae.get(le)||0)+1)}const ue=[...ae.entries()].map(([Q,le])=>({name:Q,count:le})).sort((Q,le)=>le.count-Q.count||Q.name.localeCompare(le.name,"zh-Hans-CN"));return{key:f.key,title:f.title,short:f.short,current:j,alt:R,currentLabel:f.label(j),altLabel:f.label(R),total:U.length,summary:v?"":Ye(U),views:v?[]:cn(i,H,k),roots:Z,categories:ue,error:v}});return{system:i,switches:d,affected:d.filter(f=>!f.error&&f.total>0).length,total:d.reduce((f,j)=>f+j.total,0)}}const _n=["chaibu","chaoshen","zhirun"],Ln=[1,3,5],Pn=["same-day","next-day"];function we(e){if(e==null||e==="")return;const t=z(e);if(!t)throw K("E_ASOF",`无法解析 asOf:「${e}」,请用 2026-10-22T16:00 这种格式`);const{year:i,month:n,day:o}=t;if(!(n>=1&&n<=12)||!(o>=1&&o<=Qe(i,n)))throw K("E_ASOF",`asOf 指向的日期不存在:${e}`);return t}function Cn(e={}){const t=e.system;if(t==="bazi"){const i=ee(e.datetime),n=we(e.asOf),o=E({...i,gender:me(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:n?n.year:void 0});return{...o,...n?{asOf:n}:{},precision:i.precision,summary:$n(o)}}if(t==="ziwei"){const i=ee(e.datetime),n=we(e.asOf),o=x({...i,gender:me(e.gender),leapMonth:e.leapMonth,leapAsNext:e.leapAsNext===!0,...Ve(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:n});return{...o,precision:i.precision,summary:yn(o)}}if(t==="tarot"){const i=e.count===void 0||e.count===null||e.count===""?3:Number(e.count);if(!Ln.includes(i))throw K("E_COUNT",`塔罗张数只能是 1 / 3 / 5,收到「${e.count}」`);if(!ne(e.seed))throw K("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);const n=we(e.asOf),o=m({count:i,question:e.question,at:e.asOf,random:X(e.seed)});return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(o.seed=Number(e.seed)),{...o,...n?{asOf:n}:{},summary:jn(o)}}if(t==="daliuren"){const i=ee(e.datetime),n=e.lateZi!==!1,o=r({...i,lateZi:n});return o.lateZi=n,{...o,precision:i.precision,summary:Sn(o)}}if(t==="qimen"){const i=ee(e.datetime);if(e.juMethod!==void 0&&!_n.includes(e.juMethod))throw K("E_INPUT",`juMethod 只能是 chaibu / chaoshen / zhirun,收到「${e.juMethod}」`);const n=e.lateZiHourMode!==void 0?e.lateZiHourMode:e.lateZi===!0?"next-day":e.lateZi===!1?"same-day":void 0;if(n!==void 0&&!Pn.includes(n))throw K("E_INPUT",`lateZiHourMode 只能是 same-day / next-day,收到「${n}」`);const o=n==="next-day"?"next-day":"same-day",d=u({...i,lateZiHourMode:o,juMethod:e.juMethod});return d.lateZiHourMode=o,{...d,summary:bn(d)}}if(t==="hepan"){const i=e.partner;if(!i||typeof i!="object")throw K("E_PARTNER","合盘需要 partner:{ datetime, gender, address? },其中 partner.datetime 是对方的公历出生时间");if(!i.datetime)throw K("E_PARTNER",'缺少 partner.datetime(对方的公历出生时间),例如 partner: {"datetime":"1992-03-03T10:00","gender":"female"}');const n=e.partner2;if(n!=null){if(typeof n!="object"||Array.isArray(n))throw K("E_PARTNER","partner2 需要 { datetime, gender, address? };不想看三方就整段省略(null 视同未传)");if(!n.datetime)throw K("E_PARTNER",'缺少 partner2.datetime(第三方的公历出生时间),例如 partner2: {"datetime":"1988-09-09T08:00","gender":"male"}')}const o=e.chart==="ziwei"?"ziwei":"bazi",d=(v,H)=>({...ee(v.datetime),gender:me(v.gender,H),trueSolar:v.trueSolar,lateZi:v.lateZi,dst:v.dst!==!1,address:typeof v.address=="string"?v.address:void 0,longitude:typeof v.longitude=="number"?v.longitude:void 0,geo:v.geo&&typeof v.geo=="object"?v.geo:void 0}),f=d(e,"你(主方)"),j=d(i,"对方"),R=(v,H)=>o==="ziwei"?s({a:v,b:H}):l({a:v,b:H}),U=R(f,j);if(n){const v=d(n,"第三方");U.triple=a([{key:"a-b",a:"你",b:"对方",result:U},{key:"a-c",a:"你",b:"第三方",result:R(f,v)},{key:"b-c",a:"对方",b:"第三方",result:R(j,v)}])}return{...U,summary:wn(U)}}if(t==="meihua"){let i;try{i=g({mode:e.mode==="number"?"number":"time",datetime:e.datetime,upper:e.upper,lower:e.lower,changing:e.changing})}catch(n){throw K("E_INPUT",`梅花起卦参数不完整:${n&&n.message?n.message:n}`)}return{...i,summary:xn(i)}}if(t==="liuyao"){if(!ne(e.seed))throw K("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);let i;if(e.lines===void 0||e.lines===null)i=q(X(e.seed));else{if(!Array.isArray(e.lines))throw K("E_LINES","lines 必须是数组:自下而上 6 个爻值(6 老阴 / 7 少阳 / 8 少阴 / 9 老阳)");if(e.lines.length!==6)throw K("E_LINES",`六爻需要正好 6 个爻值(自下而上),收到 ${e.lines.length} 个;留空则由引擎随机摇卦`);i=e.lines.map(Number)}let n,o=null;const d=e.datetime?ee(e.datetime):we(e.asOf);if(d){e.datetime||(o=d);const H=A(Y(T(d.year,d.month,d.day)));n={stem:H.stem,branch:H.branch,name:H.name}}let f;try{f=_({lines:i,question:e.question,dayGanZhi:n})}catch(H){throw K("E_LINES",H&&H.message?H.message:H)}const j=L(f,{direction:e.direction,gender:e.gender});j.liuqin&&(f.useGod=j);let R=null;if(d)try{R=(c({year:d.year,month:d.month,day:d.day,hour:d.hour,minute:d.minute}).monthGanZhi||"")[1]||null}catch{R=null}const U=F(f,{monthBranch:R,dayBranch:f.dayGanZhi.branch});U&&(f.hexStrength=U);const v=h(f,{monthBranch:R,dayBranch:f.dayGanZhi.branch});if(v&&(f.jinTuiPower=v),j.liuqin){const H=S(f,j,{monthBranch:R,dayBranch:f.dayGanZhi.branch});H&&(f.useGodStrength=H);const k=b(f,j,{monthBranch:R,dayBranch:f.dayGanZhi.branch});k&&(f.fushenAccess=k);const Z=y(f,j,{monthBranch:R});Z&&(f.yingqi=Z)}return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(f.seed=Number(e.seed)),{...f,...o?{asOf:o}:{},summary:kn(f)}}if(t==="almanac"){const i=ee(e.datetime),n=ve({year:i.year,month:i.month,day:i.day});return{...n,summary:Fn(n)}}if(t==="zeri"){if(!(e.candidates!==void 0&&e.candidates!==null)&&(typeof e.startDate!="string"||!e.startDate.trim()))throw K("E_INPUT",'择日需要 startDate(公历 YYYY-MM-DD,起算日);可另给 days(1–60,默认 30)与 shengXiao(当事人属相)。只想比几天,改给 candidates: ["2026-12-01","2026-12-08"]');let n;try{n=_e({task:e.task,startDate:e.startDate,days:e.days,shengXiao:e.shengXiao,candidates:e.candidates})}catch(o){throw K("E_INPUT",o&&o.message||String(o))}return{...n,summary:Dn(n)}}if(t==="chenggu"){const i=ee(e.datetime),n=/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime)),o=Number.isInteger(e.hour)?e.hour:n?i.hour:null;if(o===null||o<0||o>23)throw K("E_INPUT","称骨必须给时辰:datetime 带时分(如 1990-08-15T10:00),或额外给 hour(0–23)——缺时辰四柱不齐");const d=Le({year:i.year,month:i.month,day:i.day,hour:o,minute:n?i.minute:0});return{...d,summary:Zn(d)}}if(t==="convert"){const i=e.mode==="lunar2solar"?"lunar2solar":"solar2lunar";let n;if(i==="lunar2solar"){if(e.lunarYear==null||e.lunarMonth==null||e.lunarDay==null)throw K("E_INPUT","农历转公历需要 lunarYear / lunarMonth / lunarDay(闰月另加 isLeapMonth: true)");n=Ee({mode:i,lunarYear:Number(e.lunarYear),lunarMonth:Number(e.lunarMonth),lunarDay:Number(e.lunarDay),isLeapMonth:e.isLeapMonth===!0})}else{const o=ee(e.datetime);n=Ee({mode:i,year:o.year,month:o.month,day:o.day})}return{...n,summary:Gn(n)}}if(t==="xiaoliuren"){const i=e.datetime?ee(e.datetime):null,n=Pe({mode:e.mode==="number"?"number":"time",date:typeof e.date=="string"&&e.date.trim()?e.date:i?`${i.year}-${i.month}-${i.day}`:void 0,hour:Number.isInteger(e.hour)?e.hour:i&&/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime))?i.hour:void 0,num1:e.num1,num2:e.num2,num3:e.num3,question:e.question});return{...n,summary:Rn(n)}}if(t==="star"){const i=ee(e.datetime),n=Ce({year:i.year,month:i.month,day:i.day});return{...n,summary:Yn(n)}}if(t==="numerology"){const i=ee(e.datetime),n=Fe({year:i.year,month:i.month,day:i.day});return{...n,summary:Hn(n)}}if(t==="mbti"){if(e.answers===void 0||e.answers===null){const n=sn();return{...n,summary:Bn(n)}}const i=on({answers:e.answers});return{...i,summary:Jn(i)}}if(t==="trend"){const i=ee(e.datetime),n=Ue({...i,gender:me(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});return{...n,precision:i.precision,summary:Un(n)}}if(t==="fengshui"){const i=e.action==="advise"?"advise":e.action==="xuankong"?"xuankong":"natal";if(i==="xuankong"){const d=ze({action:i,sitting:e.sitting,facing:e.facing,...e.period!==void 0?{period:e.period}:{},...Number.isInteger(e.fortuneYear)?{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{...d,summary:Oe(d)}}if(i==="advise"){const d=ze({action:i,sitting:e.sitting,facing:e.facing,...e.datetime?ee(e.datetime):{},...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},dst:e.dst!==!1});return{...d,summary:Oe(d)}}const n=ee(e.datetime),o=ze({action:"natal",year:n.year,month:n.month,day:n.day,gender:me(e.gender),fortuneYear:Number.isInteger(e.fortuneYear)?e.fortuneYear:void 0,dst:e.dst!==!1});return{...o,summary:Oe(o)}}if(t==="name"){const i=e.action==="generate"?"generate":"assess",n=e.datetime?ee(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}:{}}:{},o=We({action:i,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,...n,...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{...o,summary:Wn(o)}}throw t?K("E_SYSTEM",`未知体系「${t}」,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。`):K("E_INPUT","缺少 system,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。")}function Fn(e){const t=e.ganzhi,i=e.jieQi&&e.jieQi.next?` 下一节:${e.jieQi.next.name} ${e.jieQi.next.date}`:"",n=e.dayGod?`值日:${e.dayGod.name}(${e.dayGod.type}·${e.dayGod.luck})`:"",o=e.xiu?`二十八宿:${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",d=e.taiShen?`胎神:${e.taiShen}`:"",f=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:"—"}`:"",j=e.lucky?`吉配生肖:六合${e.lucky.liuhe||"—"} 三合${(e.lucky.sanhe||[]).join("、")||"—"}`:"",R=e.nayin&&e.nayin.day?`日柱纳音:${e.nayin.day.name}`:"",U=(e.hours||[]).map(v=>`${v.zhi}${v.ganZhi.slice(0,1)}·${v.shen}${v.luck==="吉"?"吉":"凶"}`).join(" ");return[`【黄历】${e.meta.date} ${e.meta.weekday} ${e.lunar.text}`,`干支:${t.year}年 ${t.month}月 ${t.day}日 属${t.shengXiao}`,...e.meta.boundaryNote?[` ${e.meta.boundaryNote}`]:[],`建除:${e.zhiXing}日 冲:${e.chong.text}${e.chong.sha?`(${e.chong.sha})`:""} ${n}`,[o,R,d].filter(Boolean).join(" "),`宜:${e.yi.join("、")}`,`忌:${e.ji.join("、")}`,f,j,U?`时辰吉凶:${U}`:"",`节气:上一节 ${e.jieQi.prev?`${e.jieQi.prev.name} ${e.jieQi.prev.date}`:"—"}${i}`,e.dailyHexagram?`每日一卦:${e.dailyHexagram.name} ${e.dailyHexagram.meaning||""}`:"",`口径:${e.meta.scope}`].filter(Boolean).join(`
|
|
89
90
|
`)}function Dn(e){const t=e.compare&&e.compare.mode==="candidates",i=t?`【择日·${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}`:"(未给属相,未做冲煞排除)"}`,n=e.days.slice().sort((d,f)=>f.score-d.score).slice(0,t?12:5).map(d=>`· ${d.date} ${d.weekday} ${d.verdict}(${d.score}分) 宜${d.yi.slice(0,3).join("/")} ${d.reasons.join(";")||"无特别加减分"}`),o=t?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(d=>d!==e.compare.best.date).join("、")}`:""):"这一组都因冲属相被排除,没有可用的日子":`推荐日:${e.best.length?e.best.join("、"):"本期无(都不够推荐分)"}`;return[i,o,`推荐日:${e.best.length?e.best.join("、"):"无"}`,`可用日:${e.usable.length?e.usable.join("、"):"无"}`,`回避日:${e.avoid.length?e.avoid.slice(0,6).join("、"):"无"}`,t?"候选日逐日:":"逐日排序:",...n,...t?[`比较口径:${e.compare.note}`]:[],`口径:${e.meta.scope}`].join(`
|
|
90
91
|
`)}function Zn(e){const t=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}):${t.text||"—"}`,`释义:${t.plain||"—"}`,`分档白话:${e.verdict.text}`,"口径:骨重与歌诀为通行本口径(各版本歌诀有异文),释义为白话自撰,属民俗娱乐参考。"].join(`
|
|
@@ -131,4 +132,4 @@ ${n.answer}${n.evidence&&n.evidence.length?`
|
|
|
131
132
|
`)+`
|
|
132
133
|
${n.note}`)}return i.filter(Boolean).join(`
|
|
133
134
|
|
|
134
|
-
`)}return{interpret:B,DIRECTIONS:G,DIRECTION_DEFAULT:W,BRIGHTNESS:$,flowOf:p,geocodeAddress:w,resolveAddress:N,buildBazi:E,buildLiuyao:_,tossLines:q,followup:V,askPrompt:ce,pastSignals:pe,verifyFit:Te,rectifyBirth:qe,crossCheck:he,crossText:xe,crossSection:be,buildAlmanac:ve,buildZeri:_e,buildChenggu:Le,buildXiaoliuren:Pe,buildStar:Ce,buildNumerology:Fe,buildConvert:Ee,buildTrend:Ue,buildFengshui:ze,buildName:We,buildTrace:Xe,traceMarkdown:Ke,encodeHandle:oe,decodeHandle:ie,resolveHandle:se,askLink:de,parseAskLink:ge,formOf:$e,restNote:ye,askPackages:P,parseDateTime:ee,chartFingerprint:nn,shadowSnapshot:In,shadowDiff:On,compute:Ie,interpretText:an,caliberCompare:vn,renderText:Xn}})(),{Engine:O.index}}});
|
|
135
|
+
`)}const{buildEventPrompt:Kn,ASK_KINDS:Qn}=O["event-prompt"]||{};return{interpret:B,DIRECTIONS:G,DIRECTION_DEFAULT:W,BRIGHTNESS:$,flowOf:p,geocodeAddress:w,resolveAddress:N,buildBazi:E,buildLiuyao:_,tossLines:q,followup:V,askPrompt:ce,pastSignals:pe,verifyFit:Te,rectifyBirth:qe,crossCheck:he,crossText:xe,crossSection:be,buildAlmanac:ve,buildZeri:_e,buildChenggu:Le,buildXiaoliuren:Pe,buildStar:Ce,buildNumerology:Fe,buildConvert:Ee,buildTrend:Ue,buildFengshui:ze,buildName:We,buildTrace:Xe,traceMarkdown:Ke,encodeHandle:oe,decodeHandle:ie,resolveHandle:se,askLink:de,parseAskLink:ge,formOf:$e,restNote:ye,askPackages:P,buildEventPrompt:Kn,ASK_KINDS:Qn,parseDateTime:ee,chartFingerprint:nn,shadowSnapshot:In,shadowDiff:On,compute:Ie,interpretText:an,caliberCompare:vn,renderText:Xn}})(),{Engine:O.index}}});
|