dsh-metaphysics 0.57.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 +171 -0
- package/README.md +415 -372
- package/client.almanac.js +60 -58
- package/client.bazi.js +113 -103
- package/client.chenggu.js +60 -58
- package/client.convert.js +60 -58
- package/client.daliuren.js +121 -102
- package/client.fengshui.js +59 -57
- package/client.hepan.js +112 -102
- package/client.js +412 -288
- package/client.liuyao.js +121 -102
- package/client.mbti.js +60 -58
- package/client.name.js +46 -44
- package/client.numerology.js +60 -58
- package/client.qimen.js +119 -100
- package/client.star.js +60 -58
- package/client.tarot.js +113 -94
- package/client.trend.js +109 -99
- package/client.xiaoliuren.js +67 -56
- package/client.zeri.js +60 -58
- package/client.ziwei.js +113 -103
- package/engine/bridge.js +211 -0
- package/engine/citations.js +109 -6
- package/engine/diff.js +54 -0
- package/engine/event-prompt.js +238 -0
- package/engine/guide.js +53 -0
- package/engine/hepan.js +43 -0
- package/engine/index.js +1736 -1659
- package/engine/interpret-knowledge.js +20 -8
- 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/trace.js +18 -18
- package/engine/yingqi.js +208 -0
- package/engine/zeri.js +89 -13
- package/index.js +18 -2
- package/package.json +7 -2
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +11035 -9304
package/engine/limits.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// 能力边界:这个插件不回答什么。
|
|
2
|
+
//
|
|
3
|
+
// 写这份清单的理由很具体:命理产品最容易犯的错不是算错,是让用户以为它能回答所有问题。
|
|
4
|
+
// 所以每条都要对应一处**真实的实现状况**,不是免责话术——
|
|
5
|
+
// 「我们可能不准」这种句子没有信息量,用户看完还是不知道该信哪部分。
|
|
6
|
+
// 有用的写法是:这条为什么做不到、做到哪一步就停了、停在哪里的依据是什么。
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 通用边界:所有体系都适用。放在清单最前面,因为它比任何单条技法边界都重要。
|
|
10
|
+
*/
|
|
11
|
+
export const UNIVERSAL_LIMITS = [
|
|
12
|
+
{
|
|
13
|
+
id: 'validity',
|
|
14
|
+
title: '任何技法的预测效度都未经检验',
|
|
15
|
+
text: '能被复核的只有形式层——纳甲、干支关系、十神、宫位这类可由程序重算的部分,错了能查。解释层是各派通行说法,本插件不声称它比别的说法更准,也没有做过能被别人重复的验证。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'same-chart',
|
|
19
|
+
title: '同盘不同命,本插件不解决',
|
|
20
|
+
text: '同一个四柱、同一张命盘对应无数人,从盘面推不出具体某一个人。这是模型的硬缺陷,不是样本不够——换个更大的样本也补不上。所以本插件给的是「这一类盘常见的结构」,不是「你会怎样」。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'advice',
|
|
24
|
+
title: '不给医疗、法律、投资建议',
|
|
25
|
+
text: '不做疾病诊断与用药建议,不判诉讼胜负,不做买卖与借贷决策。三类问题都有各自的专业判断标准,盘面推不出它们。',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 按体系的能力边界。system 为 null 时返回通用三条。
|
|
31
|
+
* 每条都应能追到 engine 里的实际实现,改实现时同步改这里。
|
|
32
|
+
*/
|
|
33
|
+
export const SYSTEM_LIMITS = {
|
|
34
|
+
liuyao: [
|
|
35
|
+
{
|
|
36
|
+
id: 'liuyao-no-date',
|
|
37
|
+
title: '应期不给公历日期',
|
|
38
|
+
text: '只给地支与快慢档(偏速/偏缓/待解/未定),不折算成「某月某日」。原因不是保守:应期可取逢值、逢冲、逢合、出空、填实多种,任一种都能事后对得上,折算成日期只是把不确定性藏进一个具体数字里。回测 15 条规则命中 51.7%,平均要给 3.55 个候选支(随机基线 29.6%)——高于随机,但撑不起一个具体日期。',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'liuyao-yongshen',
|
|
42
|
+
title: '用神多现时,不替你选',
|
|
43
|
+
text: '卦中用神两现时,插件把候选都列出来,不代选。取哪一个直接决定断语方向,各家取舍标准不一,替选等于把一派之见说成唯一答案。',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'liuyao-zhi-date',
|
|
47
|
+
title: '「某支应事」不等于「那天会发生」',
|
|
48
|
+
text: '地支只标方向与快慢,不承诺落点。同一支在一天里对应两个时辰、在一个月里对应多个日子,具体哪一天,本插件不判。',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'liuyao-liuyue',
|
|
52
|
+
title: '不推演流月推进后的二次变化',
|
|
53
|
+
text: '应期按「当下一个月建 + 日辰」静态算,不模拟下一个月到来后「原来的合被冲开、原本被制住的爻复起」这类连锁。实占里有反例:用神伏藏、本来可靠日辰冲开,但进入下个月建后一冲解掉了原月建对制它之爻的合,制者复起,出伏失败,事情没成。跨月推演还没做,所以应期只能作「该留意哪几支」,不能承诺某个月份。',
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
bazi: [
|
|
57
|
+
{
|
|
58
|
+
id: 'bazi-no-event',
|
|
59
|
+
title: '不预测具体年份的事件',
|
|
60
|
+
text: '不判「哪年结婚」「哪年升职」「哪年发财」。岁运并临、运年反吟、伏吟这类只作变动提示、不断吉凶——这些格局在十年里会反复出现,按它们断事,等于每年都能找到一次「应验」。',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'bazi-strength',
|
|
64
|
+
title: '旺衰是分档,不是评分',
|
|
65
|
+
text: '旺衰按五行分量与月令得令情况分档,给出的百分比是相对权重,不是命理学的定量指标。各家对「几分算旺」没有共识,本插件不把档位差当成精确结论。',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'bazi-huagi',
|
|
69
|
+
title: '化气格的真化,仍缺对拍',
|
|
70
|
+
text: '化气格成立条件各家宽严不一(是否要求月令为化神、日主是否允许有根),本插件按从严一路判,并把条件与原文并列摆出;真化/假化的判定还没有实盘对拍集。',
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
ziwei: [
|
|
74
|
+
{
|
|
75
|
+
id: 'ziwei-feixing',
|
|
76
|
+
title: '飞星层只报路径,不判吉凶',
|
|
77
|
+
text: '飞星能做到单一支化逐宫追到成环、三方四正按落宫归堆,但串连与复合飞化叠上大限流年之后的力重还没定,所以只报走到哪、不判好与不好。',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'ziwei-poge',
|
|
81
|
+
title: '格局只判成立,破格条件未做',
|
|
82
|
+
text: '34 条格局按独立谓词逐条复算过成立条件,但「什么情况下这条格局不算」各家破法不一,需先定底本,所以现在只判成不成立。',
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
meihua: [
|
|
86
|
+
{
|
|
87
|
+
id: 'meihua-waiying',
|
|
88
|
+
title: '不取外应',
|
|
89
|
+
text: '只按时间/数字起卦,用体用生克与互变卦推演。外应(当时的声音、来人衣着、路上所见)不纳入——那部分的解释空间几乎没有边界,纳入后任何结论都能凑出来。',
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
daliuren: [
|
|
93
|
+
{
|
|
94
|
+
id: 'daliuren-yingqi',
|
|
95
|
+
title: '三传只给结构,应期未做',
|
|
96
|
+
text: '四课三传按通行起法给出,天将、六亲、旺衰并列;具体应期推演尚未实现,不据此判时间。',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
qimen: [
|
|
100
|
+
{
|
|
101
|
+
id: 'qimen-bamen',
|
|
102
|
+
title: '八门九星入墓未做',
|
|
103
|
+
text: '十干克应与六仪入墓已按通行口径上,八门、九星入墓各家说法不同、需逐条核,暂不实现;用神落宫与击刑入墓的联动只并列条件、不推结论。',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
tarot: [
|
|
107
|
+
{
|
|
108
|
+
id: 'tarot-claim',
|
|
109
|
+
title: '牌义取通行义,不做个人化解读',
|
|
110
|
+
text: '按牌阵位置与正逆位给通行牌义,不做联想式延伸。牌阵与问题的对应关系由你确定,插件不替你判断「该抽几张」「该问什么」。',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/** 取某体系的边界清单:通用三条 + 该体系条目 */
|
|
116
|
+
export function limitsFor(system) {
|
|
117
|
+
return [...UNIVERSAL_LIMITS, ...(SYSTEM_LIMITS[system] || [])];
|
|
118
|
+
}
|
package/engine/liuyao.js
CHANGED
|
@@ -67,6 +67,10 @@ const ZHI_CHONG_PAIRS = [['子', '午'], ['丑', '未'], ['寅', '申'], ['卯',
|
|
|
67
67
|
const ZHI_HE_PAIRS = [['子', '丑'], ['寅', '亥'], ['卯', '戌'], ['辰', '酉'], ['巳', '申'], ['午', '未']];
|
|
68
68
|
const CHONG_OF = Object.fromEntries(ZHI_CHONG_PAIRS.flatMap(([a, b]) => [[a, b], [b, a]]));
|
|
69
69
|
const HE_OF = Object.fromEntries(ZHI_HE_PAIRS.flatMap(([a, b]) => [[a, b], [b, a]]));
|
|
70
|
+
|
|
71
|
+
// 应期规则要算「冲开/合住」,但表只有这一份:导出成函数,别让第二个模块再抄一张表
|
|
72
|
+
export const chongOf = (branch) => CHONG_OF[branch] || null;
|
|
73
|
+
export const heOf = (branch) => HE_OF[branch] || null;
|
|
70
74
|
const TRIGRAM_OPPOSITE = { 乾: '巽', 巽: '乾', 坎: '离', 离: '坎', 艮: '坤', 坤: '艮', 震: '兑', 兑: '震' };
|
|
71
75
|
|
|
72
76
|
// ── 化进神 / 化退神 ────────────────────────────────────────────────
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
// 奇门问事解读提示:把「先问清事 → 再取用神 → 看落宫与组合 → 回到现实核对」固化成一段提示。
|
|
2
|
+
//
|
|
3
|
+
// 为什么要有这个文件:奇门的盘面符号极多(九宫、八门、九星、八神、天地盘干、十干应克),
|
|
4
|
+
// 模型拿到一屏数据后最省力的写法就是「开门临生门,吉」——这不是解读,是把符号念一遍。
|
|
5
|
+
// 所以提示里把「取哪个符号、为什么取它、它落在哪、和谁什么关系、回到现实查什么」写成硬步骤,
|
|
6
|
+
// 并要求先给人话结论,再给依据。文案与取法分开存,取法可测,文案可改。
|
|
7
|
+
export const QIMEN_PROMPT_VERSION = 'qimen-1';
|
|
8
|
+
|
|
9
|
+
/** 九宫序号 → 方位与领域(读「事情落在哪个领域」时用,不直接当吉凶) */
|
|
10
|
+
export const PALACE_FIELD = {
|
|
11
|
+
1: { dir: '正北', field: '坎宫:向内、暗中、流动、基础' },
|
|
12
|
+
2: { dir: '西南', field: '坤宫:承载、家庭、土地、执行方' },
|
|
13
|
+
3: { dir: '正东', field: '震宫:启动、动作、速度、竞争' },
|
|
14
|
+
4: { dir: '东南', field: '巽宫:沟通、文书、渐进、反复' },
|
|
15
|
+
5: { dir: '正中', field: '中宫:枢纽;无门无神,按寄宫(多寄坤二)取用,读时要说清是寄宫' },
|
|
16
|
+
6: { dir: '西北', field: '乾宫:上级、规则、外部权威、主导方' },
|
|
17
|
+
7: { dir: '正西', field: '兑宫:口舌、谈判、交易、愉悦' },
|
|
18
|
+
8: { dir: '东北', field: '艮宫:停滞、门槛、转向、积累' },
|
|
19
|
+
9: { dir: '正南', field: '离宫:显露、名声、扩散、明亮' },
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/** 八门的现实含义。门名只是「这件事的形态」,不是吉凶判决 */
|
|
23
|
+
export const GATE_MEANING = {
|
|
24
|
+
开门: '启动、公开、对外推进、正式场合',
|
|
25
|
+
休门: '休息、等待、缓和、暂缓',
|
|
26
|
+
生门: '生长、收益、资源、可持续',
|
|
27
|
+
伤门: '损耗、冲突、风险、代价',
|
|
28
|
+
杜门: '阻碍、隐藏、不宜张扬、需要绕过',
|
|
29
|
+
景门: '信息、名声、曝光、文书往来',
|
|
30
|
+
死门: '停止、收尾、不可再推、需要换路',
|
|
31
|
+
惊门: '变动、惊吓、口舌、突发',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 问事类型 → 用神清单。subjects 的顺序就是「先讲清对方最关心哪个对象」的顺序:
|
|
36
|
+
* 第一个是本方(我),第二个通常是对方/事体,后面才是环境与条件。
|
|
37
|
+
* how 是取法(可复算),why 是取这个符号的理由(三追问第一问要能答出来)。
|
|
38
|
+
*/
|
|
39
|
+
export const ASK_KINDS = {
|
|
40
|
+
career: {
|
|
41
|
+
label: '工作 / 事业',
|
|
42
|
+
gate: '开门',
|
|
43
|
+
subjects: [
|
|
44
|
+
{ key: 'self', name: '我', how: 'dayStem', why: '日干代表提问者本人;先定位「我现在在哪一宫」,才谈得上后面谁克谁。' },
|
|
45
|
+
{ key: 'job', name: '这份工作本身', how: 'gate:开门', why: '开门的本义是「开启、公开、正式」,对应岗位与正式机会,所以用它代表工作这个对象,而不是代表结果好坏。' },
|
|
46
|
+
{ key: 'boss', name: '上司 / 决策人', how: 'zhiFu', why: '值符是全局主导之神,代表有拍板权的一方;谈成不成,最终看这一宫的状态与它和日干宫的关系。' },
|
|
47
|
+
{ key: 'peer', name: '同事 / 竞争者', how: 'monthStem', why: '月干为同辈;同岗竞争、内部评价这类事落在这里。' },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
love: {
|
|
51
|
+
label: '感情 / 关系',
|
|
52
|
+
gate: '休门',
|
|
53
|
+
subjects: [
|
|
54
|
+
{ key: 'self', name: '我', how: 'dayStem', why: '日干为我。' },
|
|
55
|
+
{ key: 'other', name: '对方', how: 'hourStem', why: '时干代表所问之事与对方;感情里问「他怎么样」,时干就是那个人此刻的状态。' },
|
|
56
|
+
{ key: 'bond', name: '你俩的连接', how: 'god:六合', why: '六合主结合、撮合、连结;看连接本身有没有被冲开或合住,比看单方态度更接近真相。' },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
business: {
|
|
60
|
+
label: '生意 / 合作',
|
|
61
|
+
gate: '生门',
|
|
62
|
+
subjects: [
|
|
63
|
+
{ key: 'self', name: '我方', how: 'dayStem', why: '日干为我方。' },
|
|
64
|
+
{ key: 'partner', name: '对方 / 合作方', how: 'hourStem', why: '时干代表对方与所谈之事。' },
|
|
65
|
+
{ key: 'chance', name: '项目机会', how: 'gate:生门', why: '生门主生长与收益,用它代表「这个机会能不能长出东西」。' },
|
|
66
|
+
{ key: 'resource', name: '资源与条件', how: 'gate:开门', why: '开门代表公开的资源、渠道、正式手续;有没有真资源,看这一宫有没有被制。' },
|
|
67
|
+
{ key: 'deal', name: '契约 / 撮合', how: 'god:六合', why: '六合主合约与中间人;合作最怕的是「六合落空或受冲」,即说了不算。' },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
action: {
|
|
71
|
+
label: '某件事能不能推进',
|
|
72
|
+
gate: '开门',
|
|
73
|
+
subjects: [
|
|
74
|
+
{ key: 'self', name: '我', how: 'dayStem', why: '日干为我。' },
|
|
75
|
+
{ key: 'act', name: '这件事本身', how: 'hourStem', why: '时干为事体:你要问的那件事,当下的状态在时干这一宫。' },
|
|
76
|
+
{ key: 'env', name: '外部条件', how: 'zhiShi', why: '值使门是「当下正在值班的门」,代表这件事所处的执行环境与节奏。' },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
day: {
|
|
80
|
+
label: '挑日子 / 看时机',
|
|
81
|
+
gate: '值使',
|
|
82
|
+
subjects: [
|
|
83
|
+
{ key: 'act', name: '要办的事', how: 'hourStem', why: '时干为事体,先看它落在哪一宫、受不受制。' },
|
|
84
|
+
{ key: 'env', name: '当天的执行环境', how: 'zhiShi', why: '值使门代表当值之门,是这一天的主导形态,不把它当吉凶。' },
|
|
85
|
+
{ key: 'self', name: '办事的人', how: 'dayStem', why: '日干为办事人;人有空亡、受制,日子再好也执行不了。' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
other: {
|
|
89
|
+
label: '其他具体事',
|
|
90
|
+
gate: '开门',
|
|
91
|
+
subjects: [
|
|
92
|
+
{ key: 'self', name: '我', how: 'dayStem', why: '日干为我。' },
|
|
93
|
+
{ key: 'act', name: '所问之事', how: 'hourStem', why: '时干为事体。' },
|
|
94
|
+
{ key: 'env', name: '当下环境', how: 'zhiShi', why: '值使门代表当下的执行节奏。' },
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** 回到现实要核对什么:按类型给具体清单,不写「请结合现实」这种空话 */
|
|
100
|
+
export const REALITY_CHECK = {
|
|
101
|
+
career: ['有没有书面邀约或正式通知?(口头承诺不算)', '岗位职责、汇报对象、试用期写清楚了吗?', '薪酬范围、发放方式、社保口径有没有落到纸面?', '最坏情况是什么:试用不过、岗位撤销,你损失多少?'],
|
|
102
|
+
love: ['对方有没有具体行动:约见、介绍给朋友、共同计划?', '这种投入持续了多久,还是一阵热?', '有没有第三方牵涉(前任、家人、异地)?', '你自己愿意为这段关系让渡什么,底线在哪?'],
|
|
103
|
+
business: ['资源清单能落到具体人、具体钱、具体渠道吗?', '合同条款:出资、分账、违约、退出,哪条没写?', '谁执行?执行人是全职还是顺手帮忙?', '如果对方撤了,你一个人能不能收场?'],
|
|
104
|
+
action: ['这件事有没有截止日期?谁定的?', '实际成本:钱、时间、人情,各多少?', '做错了能不能退回去?可逆性有多高?', '成功的样子长什么样,能不能用一句话说清?'],
|
|
105
|
+
day: ['当天必须到场的人确认了吗?', '场地、材料、审批这些硬约束排除了吗?', '有备选日期吗?排到第几位?', '这一天之前的准备来得及吗?'],
|
|
106
|
+
other: ['这件事成功的样子,能用一件可观察的事描述吗?', '有没有一个明确的时间点可以验证?', '如果没成,你会先怀疑哪一环?', '现在最该做的一件小事是什么?'],
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/** 少用术语、面向提问者的表达要求 */
|
|
110
|
+
export const STYLE_RULES = [
|
|
111
|
+
'开头先用三到五句话回答他问的那件事,全用日常说法:不出现「用神、落宫、值符、生克」这些词。',
|
|
112
|
+
'每个术语第一次出现时,必须紧跟一句人话解释(例:「开门,就是这件事能不能摆到台面上正式推进」)。',
|
|
113
|
+
'不写「吉/凶」二字作结论,改写成人能执行的话:能推进 / 卡在谁那里 / 还缺什么条件 / 大概什么时候会有信号。',
|
|
114
|
+
'盘面给不出的东西(具体金额、对方心里怎么想、某天几点),直接说给不出,不要补。',
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
const HARD_RULES = [
|
|
118
|
+
'只使用下面「盘面事实」里出现的符号。没给的宫、门、星、神,一律不许自己补。',
|
|
119
|
+
'不许说「这是生门所以好」「这是白虎所以凶」。门名与神名只说明形态,吉凶要看它和日干宫、时干宫的关系,以及有没有空亡、受制、入墓。',
|
|
120
|
+
'不给医疗、法律、投资的具体结论;这些只能建议去找对应专业人士。',
|
|
121
|
+
'不给公历日期。奇门这里只谈「什么条件下会有信号」,不谈「几月几号」。',
|
|
122
|
+
'不确定就写不确定,并说明缺哪条信息才能确定。',
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
const stemOf = (siZhu, key) => {
|
|
126
|
+
const v = siZhu && siZhu[key];
|
|
127
|
+
return v ? String(v).charAt(0) : '';
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/** 天盘某干落在哪一宫(日干/时干/月干定位都走这里) */
|
|
131
|
+
function palaceOfStem(q, stem) {
|
|
132
|
+
if (!stem) return null;
|
|
133
|
+
const hit = (q.palaces || []).find((p) => p.tianPan === stem);
|
|
134
|
+
if (hit) return hit;
|
|
135
|
+
// 中五宫不在 palaces 里(它没有门、不参与门宫关系),天盘干可能只在这里。
|
|
136
|
+
// 中宫按「寄坤二宫」取,但要把「这是中宫」说出来,不能让读者以为是坤二本宫。
|
|
137
|
+
const c = q.centerPalace;
|
|
138
|
+
return c && c.tianPan === stem ? c : null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function palaceOfGate(q, gate) {
|
|
142
|
+
if (!gate) return null;
|
|
143
|
+
return (q.palaces || []).find((p) => p.gate === gate) || null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function palaceOfGod(q, god) {
|
|
147
|
+
if (!god) return null;
|
|
148
|
+
return (q.palaces || []).find((p) => p.god === god) || null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** 把 subjects 里的取法解析成 { palace, symbol };解析不到就明确返回缺失原因 */
|
|
152
|
+
export function resolveSubject(q, sub) {
|
|
153
|
+
const si = q.siZhu || {};
|
|
154
|
+
const how = String(sub.how || '');
|
|
155
|
+
if (how === 'dayStem') {
|
|
156
|
+
const s = stemOf(si, 'day');
|
|
157
|
+
return { symbol: `日干 ${s}`, palace: palaceOfStem(q, s), missing: s ? '' : '四柱里没有日干' };
|
|
158
|
+
}
|
|
159
|
+
if (how === 'hourStem') {
|
|
160
|
+
const s = stemOf(si, 'time');
|
|
161
|
+
return { symbol: `时干 ${s}`, palace: palaceOfStem(q, s), missing: s ? '' : '四柱里没有时干' };
|
|
162
|
+
}
|
|
163
|
+
if (how === 'monthStem') {
|
|
164
|
+
const s = stemOf(si, 'month');
|
|
165
|
+
return { symbol: `月干 ${s}`, palace: palaceOfStem(q, s), missing: s ? '' : '四柱里没有月干' };
|
|
166
|
+
}
|
|
167
|
+
if (how === 'zhiFu') {
|
|
168
|
+
const g = q.zhiFu && q.zhiFu.gong;
|
|
169
|
+
return { symbol: `值符(${(q.zhiFu && q.zhiFu.star) || ''})`, palace: (q.palaces || []).find((p) => p.palace === String(g)) || null, missing: g ? '' : '没有值符落宫' };
|
|
170
|
+
}
|
|
171
|
+
if (how === 'zhiShi') {
|
|
172
|
+
const g = q.zhiShi && q.zhiShi.gong;
|
|
173
|
+
return { symbol: `值使(${(q.zhiShi && q.zhiShi.gate) || ''})`, palace: (q.palaces || []).find((p) => p.palace === String(g)) || null, missing: g ? '' : '没有值使落宫' };
|
|
174
|
+
}
|
|
175
|
+
if (how.startsWith('gate:')) {
|
|
176
|
+
const gate = how.slice(5);
|
|
177
|
+
const p = palaceOfGate(q, gate);
|
|
178
|
+
return { symbol: `${gate}`, palace: p, missing: p ? '' : `盘上没有${gate}` };
|
|
179
|
+
}
|
|
180
|
+
if (how.startsWith('god:')) {
|
|
181
|
+
const god = how.slice(4);
|
|
182
|
+
const p = palaceOfGod(q, god);
|
|
183
|
+
return { symbol: `${god}`, palace: p, missing: p ? '' : `盘上没有${god}` };
|
|
184
|
+
}
|
|
185
|
+
return { symbol: how, palace: null, missing: `未知取法 ${how}` };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** 一宫的事实摘要:只写盘面上有的,不做判断 */
|
|
189
|
+
function palaceFacts(p) {
|
|
190
|
+
if (!p) return '(这一项在盘上定位不到)';
|
|
191
|
+
const f = PALACE_FIELD[p.palace] || { dir: '', field: '' };
|
|
192
|
+
const bits = [
|
|
193
|
+
`${p.palace} 宫(${f.dir})`,
|
|
194
|
+
p.center ? '中宫(无门无神,按寄宫取用)' : `门:${p.gate || '—'}${p.gateRelation && p.gateRelation.type ? `(${p.gateRelation.type}:${p.gateRelation.note || ''})` : ''}`,
|
|
195
|
+
`星:${p.star || '—'}`,
|
|
196
|
+
p.center ? '' : `神:${p.god || '—'}`,
|
|
197
|
+
`天盘 ${p.tianPan || '—'} / 地盘 ${p.diPan || '—'}${p.stemRelation && p.stemRelation.type ? `(${p.stemRelation.type})` : ''}`,
|
|
198
|
+
];
|
|
199
|
+
if (p.kong) bits.push('空亡');
|
|
200
|
+
if (p.ma) bits.push('临马星');
|
|
201
|
+
if (p.ganYing && p.ganYing.name) bits.push(`十干应克:${p.ganYing.name}`);
|
|
202
|
+
return bits.join(' ');
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const CHECK_QUESTIONS = [
|
|
206
|
+
'你说「我」是哪个符号?为什么是它,不是别的?',
|
|
207
|
+
'机会在哪一宫、阻碍在哪一宫、对方态度在哪一宫?各自依据哪一条关系(生、克、合、冲、空、墓)?',
|
|
208
|
+
'盘上有没有相反提示?你为什么采信这一边,而不是那一边?',
|
|
209
|
+
];
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* 生成一段可直接交给模型的提示。
|
|
213
|
+
* @param {object} q 奇门盘(compute 结果里的 qimen 部分,或整个 r)
|
|
214
|
+
* @param {{question?:string, kind?:string, timeKnown?:boolean, askedAt?:string}} opts
|
|
215
|
+
* @returns {{version:string, kind:string, blocked:boolean, text:string, subjects:Array}}
|
|
216
|
+
*/
|
|
217
|
+
export function buildQimenPrompt(q, opts = {}) {
|
|
218
|
+
const chart = q && q.palaces ? q : (q && q.qimen);
|
|
219
|
+
const kindKey = ASK_KINDS[opts.kind] ? opts.kind : 'other';
|
|
220
|
+
const kind = ASK_KINDS[kindKey];
|
|
221
|
+
const question = String(opts.question || '').replace(/\s+/g, ' ').trim().slice(0, 200);
|
|
222
|
+
|
|
223
|
+
// 第一步永远是时间:奇门以「起局那一刻」定盘,时刻不明就没有盘,不能默认拿现在起。
|
|
224
|
+
if (opts.timeKnown === false || !chart) {
|
|
225
|
+
return {
|
|
226
|
+
version: QIMEN_PROMPT_VERSION,
|
|
227
|
+
kind: kindKey,
|
|
228
|
+
blocked: true,
|
|
229
|
+
subjects: [],
|
|
230
|
+
text: [
|
|
231
|
+
'先别起局——时间还不确定。',
|
|
232
|
+
'',
|
|
233
|
+
'奇门是按「起局那一刻」排盘的,时刻差一个时辰,九宫里的门、星、神全换一遍。所以先确认:',
|
|
234
|
+
'1)这盘是按现在这一刻起,还是按你打算行动的那一刻起?',
|
|
235
|
+
'2)你说的日期时间,是钟表时间还是农历?在哪个城市(真太阳时会差几分钟到十几分钟)?',
|
|
236
|
+
'',
|
|
237
|
+
'确认之后,再用同一句话把要问的事说清楚:主语 + 时间 + 可验证的结果,例如「下周三之前,这份工作的书面 offer 能不能拿到」。',
|
|
238
|
+
'在那之前,我不排盘,也不猜。',
|
|
239
|
+
].join('\n'),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const subjects = kind.subjects.map((s) => {
|
|
244
|
+
const got = resolveSubject(chart, s);
|
|
245
|
+
return { ...s, symbol: got.symbol, palace: got.palace, missing: got.missing };
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
const si = chart.siZhu || {};
|
|
249
|
+
const head = [
|
|
250
|
+
`# 奇门问事解读(提示版本 ${QIMEN_PROMPT_VERSION})`,
|
|
251
|
+
'',
|
|
252
|
+
'## 你要做的',
|
|
253
|
+
'先把这张盘翻译成「他能拿去用的话」,再给依据。顺序不能反:先结论(人话)→ 再盘面依据 → 再现实核对 → 最后说哪里不确定。',
|
|
254
|
+
'',
|
|
255
|
+
'## 一、先确认问的是哪一件事',
|
|
256
|
+
question
|
|
257
|
+
? `他的问题是:「${question}」`
|
|
258
|
+
: '他还没说清要问什么。第一句先问清:要问的是哪一件具体的事(哪份工作、哪次沟通、哪笔合作),以及他希望看到什么结果。不要笼统答「运势如何」。',
|
|
259
|
+
`已按「${kind.label}」取用神。若他实际问的是别的事,先纠正类型再解读,不要硬套。`,
|
|
260
|
+
'',
|
|
261
|
+
'## 二、盘面事实(只能用这些,不许自行补算)',
|
|
262
|
+
`四柱:${si.year || '—'}年 ${si.month || '—'}月 ${si.day || '—'}日 ${si.time || '—'}时;局:${chart.dun || ''}${chart.juNumber || ''}局(${chart.yuan || ''});值符 ${(chart.zhiFu && chart.zhiFu.star) || '—'} 落 ${(chart.zhiFu && chart.zhiFu.gong) || '—'} 宫;值使 ${(chart.zhiShi && chart.zhiShi.gate) || '—'} 落 ${(chart.zhiShi && chart.zhiShi.gong) || '—'} 宫。`,
|
|
263
|
+
(chart.kongWang && chart.kongWang.length) ? `空亡:${chart.kongWang.join('、')}。` : '',
|
|
264
|
+
'',
|
|
265
|
+
'## 三、取哪个符号代表什么(每一项都要能说出「为什么是它」)',
|
|
266
|
+
...subjects.map((s, i) => `${i + 1}. ${s.name} → ${s.symbol}${s.missing ? `(注意:${s.missing})` : ''}\n - 取法理由:${s.why}\n - 盘面:${palaceFacts(s.palace)}`),
|
|
267
|
+
'',
|
|
268
|
+
'## 四、怎么读状态(这是最容易偷懒的地方)',
|
|
269
|
+
'1. 落宫先说「这件事落在哪个领域」:',
|
|
270
|
+
...subjects.filter((s) => s.palace).map((s) => ` - ${s.name}:${(PALACE_FIELD[s.palace.palace] || {}).field || ''}`),
|
|
271
|
+
'2. 所遇之门说明「这件事现在是什么形态」,不是吉凶:',
|
|
272
|
+
...Object.entries(GATE_MEANING).map(([g, mean]) => ` - ${g}:${mean}`),
|
|
273
|
+
'3. 关系只认四种,且都要指到具体两宫:',
|
|
274
|
+
' - 生:得助(谁生谁,说清方向)',
|
|
275
|
+
' - 克:受制(谁克谁,说清方向)',
|
|
276
|
+
' - 合:连接、聚合(合住也可能意味着被拴住)',
|
|
277
|
+
' - 冲:变动、对立、打破(冲开也可能意味着解脱)',
|
|
278
|
+
'4. 空亡、入墓、门迫、击刑这些「减分项」,要么明确说它压低了什么,要么别提——不要念一遍名字就过去。',
|
|
279
|
+
'',
|
|
280
|
+
'## 五、开口之前先自检这三问',
|
|
281
|
+
...CHECK_QUESTIONS.map((q2, i) => `${i + 1}. ${q2}`),
|
|
282
|
+
'三问答不全,就还没到能下结论的程度,先把答不出的那条写出来。',
|
|
283
|
+
'',
|
|
284
|
+
'## 六、最后必须回到现实核对',
|
|
285
|
+
...REALITY_CHECK[kindKey].map((x, i) => `${i + 1}. ${x}`),
|
|
286
|
+
'盘面只能给方向;上面这些是「他明天可以去查、去问、去要」的东西。核对完再回来谈结论。',
|
|
287
|
+
'',
|
|
288
|
+
'## 七、表达要求',
|
|
289
|
+
...STYLE_RULES.map((x) => `- ${x}`),
|
|
290
|
+
'',
|
|
291
|
+
'## 八、禁止',
|
|
292
|
+
...HARD_RULES.map((x) => `- ${x}`),
|
|
293
|
+
'',
|
|
294
|
+
'## 九、输出格式',
|
|
295
|
+
'1. **先给你要的答案**:三到五句人话,直接回答他问的那件事。',
|
|
296
|
+
'2. **盘上依据**:按「我 / 对方或事体 / 环境」三块列,每块一句符号 + 一句人话解释。',
|
|
297
|
+
'3. **现实里该去核对什么**:抄上面第六节里适用的项,不要全抄。',
|
|
298
|
+
'4. **相反提示与不确定处**:盘上哪些地方指向另一个方向,你为什么这样权衡。',
|
|
299
|
+
'5. **一句提醒**:这是参考,不替代你自己去核实和决定。',
|
|
300
|
+
].filter((x) => x !== '').join('\n');
|
|
301
|
+
|
|
302
|
+
return { version: QIMEN_PROMPT_VERSION, kind: kindKey, blocked: false, subjects, text: head };
|
|
303
|
+
}
|
package/engine/trace.js
CHANGED
|
@@ -56,7 +56,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
56
56
|
['变卦', bian ? `${text(bian.name)}(上${text(bian.upper)}·下${text(bian.lower)})` : '无'],
|
|
57
57
|
],
|
|
58
58
|
lines.map((l) => `${l.position}爻 ${text(l.ganzhi)}${text(l.element)}`).join('|'),
|
|
59
|
-
'
|
|
59
|
+
'京房纳甲(八宫纳甲表);实现:engine/liuyao.js · NAJIA(规则表,本仓未录入古籍章页)',
|
|
60
60
|
);
|
|
61
61
|
|
|
62
62
|
const liuqin = step(
|
|
@@ -69,7 +69,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
69
69
|
['日干起六神', `${text(r.dayGanZhi && r.dayGanZhi.stem)}日`],
|
|
70
70
|
],
|
|
71
71
|
lines.map((l) => `${l.position}爻 ${text(l.liuqin)}(${text(l.element)})`).join('|'),
|
|
72
|
-
'
|
|
72
|
+
'五行生克定六亲;取用可对读《增删卜易》卷一·用神章第八;实现:engine/liuyao.js · liuqin()',
|
|
73
73
|
);
|
|
74
74
|
|
|
75
75
|
const shiying = step(
|
|
@@ -83,7 +83,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
83
83
|
],
|
|
84
84
|
`${text(ben.shi)}爻${shi ? ` ${text(shi.liuqin)}·${text(shi.ganzhi)}${text(shi.element)}` : ''}为世,`
|
|
85
85
|
+ `${text(ben.ying)}爻${ying ? ` ${text(ying.liuqin)}·${text(ying.ganzhi)}${text(ying.element)}` : ''}为应`,
|
|
86
|
-
'
|
|
86
|
+
'八宫世应诀(世爻序与应爻隔三位);实现:engine/liuyao.js · SHI_POSITION(通行动诀,本仓未录入古籍章页)',
|
|
87
87
|
);
|
|
88
88
|
|
|
89
89
|
let fushen;
|
|
@@ -97,7 +97,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
97
97
|
'用神不上卦时,回本宫首卦的同位取伏神;飞伏之间只判生克与助压。',
|
|
98
98
|
[['用神', ug && ug.ask ? ug.ask : '未取']],
|
|
99
99
|
`${why};本层不适用。`,
|
|
100
|
-
'engine/liuyao.js · yongshenOf()',
|
|
100
|
+
'取伏之法参《增删卜易》卷二·飛伏神章第二十八;实现:engine/liuyao.js · yongshenOf()',
|
|
101
101
|
);
|
|
102
102
|
} else if (ug.missing) {
|
|
103
103
|
const hidden = (ug.fushen || []).map((f) => {
|
|
@@ -117,7 +117,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
117
117
|
['月建 / 日辰', `${text(month && month.branch)} / ${text(day && day.branch)}`],
|
|
118
118
|
],
|
|
119
119
|
`${hidden || '本卦无此六亲,首卦同位也未取到伏神'}${access ? `;出伏:${access}` : ''}`,
|
|
120
|
-
'
|
|
120
|
+
'《增删卜易》卷二·飛伏神章第二十八(用神不現,尋得伏神而遇生扶有用);实现:engine/liuyao.js · fushenAccess()',
|
|
121
121
|
);
|
|
122
122
|
} else {
|
|
123
123
|
fushen = step(
|
|
@@ -129,7 +129,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
129
129
|
['在位', list((ug.found || []).map((l) => `${l.position}爻`))],
|
|
130
130
|
],
|
|
131
131
|
`用神 ${ug.liuqin} 已在 ${list((ug.found || []).map((l) => `${l.position}爻`))},无需伏神。`,
|
|
132
|
-
'engine/liuyao.js · yongshenOf()',
|
|
132
|
+
'取伏之法参《增删卜易》卷二·飛伏神章第二十八;实现:engine/liuyao.js · yongshenOf()',
|
|
133
133
|
);
|
|
134
134
|
}
|
|
135
135
|
|
|
@@ -150,7 +150,7 @@ function liuyaoTrace(r, opts = {}) {
|
|
|
150
150
|
useStrength ? `用神:${useStrength}${us.labels && us.labels.length ? `(${us.labels.join('、')})` : ''}` : '用神:未取,只看全卦',
|
|
151
151
|
hs && hs.labels && hs.labels.length ? `全卦:${hs.labels.join('、')}` : '',
|
|
152
152
|
].filter(Boolean).join(';'),
|
|
153
|
-
'
|
|
153
|
+
'《增删卜易》卷一·月將章第十六、日辰章第十七;实现:engine/liuyao.js · yongshenStrength / hexagramStrength',
|
|
154
154
|
);
|
|
155
155
|
|
|
156
156
|
return [najia, liuqin, shiying, fushen, wangsheng];
|
|
@@ -179,7 +179,7 @@ function baziTrace(r) {
|
|
|
179
179
|
['虚透', list(parts.virtualHelpers, '无')],
|
|
180
180
|
],
|
|
181
181
|
`${text(s.level)}(${text(s.score)} 分):${text(s.detail)}`,
|
|
182
|
-
'engine/bazi.js ·
|
|
182
|
+
'本仓量化规则(月令权重 3/2/1/0.5/0、藏干通根、三会/三合/六合折根、虚透减半;非古籍定数);实现:engine/bazi.js · 旺衰量化',
|
|
183
183
|
);
|
|
184
184
|
|
|
185
185
|
const primaryName = text(frame.primaryName || (primary && primary.name), '未取格局');
|
|
@@ -211,7 +211,7 @@ function baziTrace(r) {
|
|
|
211
211
|
['调候', tiaohou && tiaohou.kind ? `${text(tiaohou.kind)}${need && need.element ? ` → ${text(need.element)}` : ''}` : '—'],
|
|
212
212
|
],
|
|
213
213
|
`${resultParts}`,
|
|
214
|
-
'
|
|
214
|
+
'《子平真诠》八、论用神(专求月令);调候参《穷通宝鉴》五行总论;实现:engine/geju.js · yongshenOf()',
|
|
215
215
|
);
|
|
216
216
|
|
|
217
217
|
const p = r.palaces && typeof r.palaces === 'object' ? r.palaces : {};
|
|
@@ -228,7 +228,7 @@ function baziTrace(r) {
|
|
|
228
228
|
['命宫 / 身宫', `${text(p.minggong && p.minggong.ganzhi)} / ${text(p.shengong && p.shengong.ganzhi)}`],
|
|
229
229
|
],
|
|
230
230
|
`胎元 ${text(p.taiyuan.ganzhi)};${p.taixi ? `胎息 ${text(p.taixi.ganzhi)};` : ''}命宫 ${text(p.minggong && p.minggong.ganzhi)};身宫 ${text(p.shengong && p.shengong.ganzhi)}。四宫是辅助坐标,不单独折吉凶。`,
|
|
231
|
-
'Tyme
|
|
231
|
+
'Tyme 1.5.4 四宫口径(与 ziwei.pub 704 组日期对拍);本仓未直接照录古籍章页;实现:engine/bazi.js · palaces',
|
|
232
232
|
) : null;
|
|
233
233
|
|
|
234
234
|
return [strength, geju, ...(palaces ? [palaces] : [])];
|
|
@@ -251,7 +251,7 @@ function ziweiTrace(r) {
|
|
|
251
251
|
['命中数', `${patterns.length} / ${total}`],
|
|
252
252
|
],
|
|
253
253
|
patterns.length ? `命中 ${patterns.length} 条:${hit}` : '未命中已收录的格局条件(不表示命盘无结构,只是不在已收录清单内)。',
|
|
254
|
-
'
|
|
254
|
+
'《紫微斗数全书》卷三·论人命入格、谈星要论;实现:engine/ziwei.js · detectPatterns()',
|
|
255
255
|
)];
|
|
256
256
|
}
|
|
257
257
|
|
|
@@ -277,7 +277,7 @@ function qimenTrace(r, opts = {}) {
|
|
|
277
277
|
['空亡 / 驿马', `${list(r.kongWang)} / ${text(ma.zhi)}${ma.gong ? `(${ma.gong}宫)` : ''}`],
|
|
278
278
|
],
|
|
279
279
|
palaces.map((p) => `${p.palace}宫 天${text(p.tianPan)}·${text(p.star)}·${text(p.gate)}·${text(p.god)}`).join('|') || '无九宫数据',
|
|
280
|
-
'engine/qimen.js · buildQimen()',
|
|
280
|
+
'《奇门遁甲统宗》卷一·奇门秘诀总赋(阴阳二遁、五日换元、超神接气);实现:engine/qimen.js · buildQimen()',
|
|
281
281
|
);
|
|
282
282
|
|
|
283
283
|
const ys = qimenYongshen(r, opts.direction);
|
|
@@ -298,7 +298,7 @@ function qimenTrace(r, opts = {}) {
|
|
|
298
298
|
? `${ys.note};${found.map((x) => `${x.key} 落 ${x.palace.palace}宫(${text(x.palace.star)}·${text(x.palace.gate)}·${text(x.palace.god)})`).join(',')}`
|
|
299
299
|
+ (missing.length ? `;${missing.join('、')} 未上盘` : '')
|
|
300
300
|
: `${ys.label}的用神均未上盘,属未决项;先按值符落宫参照。`,
|
|
301
|
-
'
|
|
301
|
+
'本仓用神表(按所问之事取用,非古籍原文);实现:engine/qimen-interpret.js · qimenYongshen()',
|
|
302
302
|
);
|
|
303
303
|
|
|
304
304
|
const order = ['旺', '相', '休', '囚', '死'];
|
|
@@ -315,7 +315,7 @@ function qimenTrace(r, opts = {}) {
|
|
|
315
315
|
['天盘干', stateLine(states.stem)],
|
|
316
316
|
],
|
|
317
317
|
`门:${stateLine(states.gate)};星:${stateLine(states.star)};天盘干:${stateLine(states.stem)}`,
|
|
318
|
-
'
|
|
318
|
+
'《奇门遁甲统宗》卷三(旺相休囚);实现:engine/qimen.js · groupByState()',
|
|
319
319
|
);
|
|
320
320
|
|
|
321
321
|
const forced = [];
|
|
@@ -354,7 +354,7 @@ function qimenTrace(r, opts = {}) {
|
|
|
354
354
|
['空亡', kongCells.join('、') || '无'],
|
|
355
355
|
],
|
|
356
356
|
`门迫 ${forced.length} 处、宫制门 ${controlled.length} 处;天盘干与宫:${stemLine};击刑 ${jiXing.length} 处、三奇入墓 ${ruMu.length} 处、六仪入墓 ${liuYiRuMu.length} 处、落空 ${kongCells.length} 宫。十干克应:${ganying || '—'}。`,
|
|
357
|
-
'
|
|
357
|
+
'《奇门遁甲统宗》卷二(八门迫制)、卷十一·玄机赋(中)(六仪击刑、三奇入墓);十干克应为本仓表;实现:engine/qimen.js · gatePalaceRelation() / stemPalaceRelation()、engine/qimen-ganying.js',
|
|
358
358
|
);
|
|
359
359
|
|
|
360
360
|
return [facts, yongshen, wangshuai, relations];
|
|
@@ -380,7 +380,7 @@ function daliurenTrace(r) {
|
|
|
380
380
|
['昼夜 / 贵人', `${text(r.dayNight)} / ${text(gr.zhi)}(${gr.reverse ? '逆布' : '顺布'})`],
|
|
381
381
|
],
|
|
382
382
|
pan.map((p) => `${p.di}→${p.tian}${p.jiang ? `(${text(p.jiang)})` : ''}`).join('|') || '无天地盘数据',
|
|
383
|
-
'
|
|
383
|
+
'《大六壬大全》卷二·神将释(月将为十二支神,登明为首逆布);加时布盘属通行口诀,未标卷次;实现:engine/daliuren.js · tianDiPan()',
|
|
384
384
|
);
|
|
385
385
|
|
|
386
386
|
const sike = step(
|
|
@@ -393,7 +393,7 @@ function daliurenTrace(r) {
|
|
|
393
393
|
['四课', ke.map((k) => `${k.position}课 ${text(k.shang)}上${text(k.xia)}下`).join(';') || '—'],
|
|
394
394
|
],
|
|
395
395
|
ke.map((k) => `${k.position}课 ${text(k.shang)}上${text(k.xia)}下${k.jiang ? `·${text(k.jiang)}` : ''}:${text(k.relation)}`).join(';') || '无四课数据',
|
|
396
|
-
'engine/daliuren.js · siKe()',
|
|
396
|
+
'《大六壬大全》卷一·起例(十干寄宫);四课余下三课按通行口诀;实现:engine/daliuren.js · siKe()',
|
|
397
397
|
);
|
|
398
398
|
|
|
399
399
|
const chuanLine = (c) => (c
|
|
@@ -410,7 +410,7 @@ function daliurenTrace(r) {
|
|
|
410
410
|
['末传', chuanLine(sc.mo)],
|
|
411
411
|
],
|
|
412
412
|
`${chuanLine(sc.chu)} → ${chuanLine(sc.zhong)} → ${chuanLine(sc.mo)}`,
|
|
413
|
-
'engine/daliuren.js · chuan()',
|
|
413
|
+
'《大六壬大全》卷一·起例(贼克法为首法,比用、涉害、遥克、昴星、八专、伏吟、返吟依次列后);实现:engine/daliuren.js · chuan()',
|
|
414
414
|
);
|
|
415
415
|
|
|
416
416
|
return [tiandipan, sike, sanchuan];
|