dsh-metaphysics 0.67.0 → 0.68.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 +2158 -2072
- package/README.md +16 -9
- package/client.almanac.js +73 -67
- package/client.chart.js +152 -146
- package/client.chenggu.js +73 -67
- package/client.constitution.js +154 -0
- package/client.convert.js +67 -61
- package/client.daliuren.js +141 -135
- package/client.fengshui.js +66 -60
- package/client.js +457 -310
- package/client.liuyao.js +141 -135
- package/client.mbti.js +74 -68
- package/client.name.js +78 -72
- package/client.numerology.js +74 -68
- package/client.qimen.js +130 -124
- package/client.star.js +73 -67
- package/client.taiyi.js +154 -0
- package/client.tarot.js +135 -129
- package/client.wuyunliuqi.js +154 -0
- package/client.xiaoliuren.js +71 -65
- package/client.zeri.js +60 -54
- package/engine/bridge.js +3 -0
- package/engine/constitution.js +324 -0
- package/engine/index.js +109 -8
- package/engine/liuyao.js +1 -1
- package/engine/plain-summary.js +101 -0
- package/engine/random.js +32 -7
- package/engine/taiyi.js +216 -0
- package/engine/tarot.js +77 -8
- package/engine/wuyunliuqi.js +426 -0
- package/index.js +25 -13
- package/locale/en.json +1 -1
- package/locale/zh.json +1 -1
- package/package.json +2 -2
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +1791 -42
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
// 五运六气(运气学说)· 本地确定性 · 通行口径
|
|
2
|
+
//
|
|
3
|
+
// 提供:运气年(大寒界)、年干支、岁运(中运)太过/不及、司天与在泉、主运/客运五步、
|
|
4
|
+
// 主气/客气六步、当前所处的运与气、天符/岁会/同天符/同岁会/太乙天符,以及气候与病位倾向。
|
|
5
|
+
//
|
|
6
|
+
// 诚实边界:本文件只做「按规则推盘」这一层。运气学说里的方药、运气合参、
|
|
7
|
+
// 《素问·六元正纪大论》六十年逐年全文与「刚柔失守」「升降不前」等推演未收录(见 scope)。
|
|
8
|
+
// 病位与气候倾向照传统说法转述,是象征与经验归纳,不是医学判断。
|
|
9
|
+
import { fail } from './fail.js';
|
|
10
|
+
import {
|
|
11
|
+
STEMS, BRANCHES, termInstantJd, ganzhiName, formatJd,
|
|
12
|
+
} from './calendar.js';
|
|
13
|
+
import { assertCivil, daysInMonth } from './validate.js';
|
|
14
|
+
|
|
15
|
+
/** 主气六步的固定次序(《素问·六微旨大论》):厥阴 → 少阴 → 少阳 → 太阴 → 阳明 → 太阳。 */
|
|
16
|
+
export const ZHU_QI_ORDER = ['厥阴风木', '少阴君火', '少阳相火', '太阴湿土', '阳明燥金', '太阳寒水'];
|
|
17
|
+
|
|
18
|
+
/** 客气(三阴三阳)的轮转次序:厥阴 → 少阴 → 太阴 → 少阳 → 阳明 → 太阳。 */
|
|
19
|
+
export const QI_ORDER = ['厥阴风木', '少阴君火', '太阴湿土', '少阳相火', '阳明燥金', '太阳寒水'];
|
|
20
|
+
|
|
21
|
+
/** 主运五步的固定次序:木(角)→ 火(徵)→ 土(宫)→ 金(商)→ 水(羽)。 */
|
|
22
|
+
export const ZHU_YUN_ORDER = ['木', '火', '土', '金', '水'];
|
|
23
|
+
|
|
24
|
+
/** 天干化五运(《素问·天元纪大论》):甲己化土、乙庚化金、丙辛化水、丁壬化木、戊癸化火。 */
|
|
25
|
+
export const YUN_OF_STEM = {
|
|
26
|
+
甲: '土', 己: '土',
|
|
27
|
+
乙: '金', 庚: '金',
|
|
28
|
+
丙: '水', 辛: '水',
|
|
29
|
+
丁: '木', 壬: '木',
|
|
30
|
+
戊: '火', 癸: '火',
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** 地支化六气之「司天」(子午少阴、丑未太阴、寅申少阳、卯酉阳明、辰戌太阳、巳亥厥阴)。 */
|
|
34
|
+
export const SITIAN_INDEX_OF_BRANCH = [1, 2, 3, 4, 5, 0];
|
|
35
|
+
|
|
36
|
+
/** 五运的乐音与所主脏腑、气候(传统对应,只作命名与取象)。 */
|
|
37
|
+
export const YUN_INFO = {
|
|
38
|
+
木: { tone: '角', organ: '肝', nature: '风', text: '木运' },
|
|
39
|
+
火: { tone: '徵', organ: '心', nature: '热', text: '火运' },
|
|
40
|
+
土: { tone: '宫', organ: '脾', nature: '湿', text: '土运' },
|
|
41
|
+
金: { tone: '商', organ: '肺', nature: '燥', text: '金运' },
|
|
42
|
+
水: { tone: '羽', organ: '肾', nature: '寒', text: '水运' },
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/** 六气所主脏腑与气候。 */
|
|
46
|
+
export const QI_INFO = {
|
|
47
|
+
厥阴风木: { wuxing: '木', organ: '肝', nature: '风', short: '风木' },
|
|
48
|
+
少阴君火: { wuxing: '火', organ: '心', nature: '热', short: '君火' },
|
|
49
|
+
太阴湿土: { wuxing: '土', organ: '脾', nature: '湿', short: '湿土' },
|
|
50
|
+
少阳相火: { wuxing: '火', organ: '三焦', nature: '火', short: '相火' },
|
|
51
|
+
阳明燥金: { wuxing: '金', organ: '肺', nature: '燥', short: '燥金' },
|
|
52
|
+
太阳寒水: { wuxing: '水', organ: '肾', nature: '寒', short: '寒水' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 岁运太过/不及的取象:太过则本气偏胜、克其所胜;不及则本气不足、所不胜乘之。
|
|
57
|
+
* 每条都只写「传统上常这样描述」,不写「必然出现」。
|
|
58
|
+
*/
|
|
59
|
+
export const YUN_EFFECT = {
|
|
60
|
+
木: {
|
|
61
|
+
tai: { climate: '风气偏胜,草木早荣', organ: '肝气偏旺,脾土受克', sign: '易怒、胁胀、食少、肢体震颤' },
|
|
62
|
+
bu: { climate: '风气不足,燥气乘之', organ: '肝木不及,肺金偏胜', sign: '筋脉拘急、目干、情绪低落' },
|
|
63
|
+
},
|
|
64
|
+
火: {
|
|
65
|
+
tai: { climate: '火气偏胜,暑热早至', organ: '心火偏旺,肺金受克', sign: '心烦、失眠、咳喘、口疮' },
|
|
66
|
+
bu: { climate: '火气不足,寒气乘之', organ: '心火不及,肾水偏胜', sign: '心悸、畏寒、胸闷、精神不振' },
|
|
67
|
+
},
|
|
68
|
+
土: {
|
|
69
|
+
tai: { climate: '雨湿偏多,土气壅滞', organ: '脾湿偏胜,肾水受克', sign: '腹胀、身重、大便黏、四肢困倦' },
|
|
70
|
+
bu: { climate: '土气不足,风气乘之', organ: '脾土不及,肝木偏胜', sign: '飧泄、乏力、腹鸣、食后胀' },
|
|
71
|
+
},
|
|
72
|
+
金: {
|
|
73
|
+
tai: { climate: '燥气偏胜,天气清凉', organ: '肺燥偏胜,肝木受克', sign: '干咳、鼻干、皮肤干、筋急' },
|
|
74
|
+
bu: { climate: '金气不足,火气乘之', organ: '肺金不及,心火偏胜', sign: '咳逆、鼻塞、咽干、易感外邪' },
|
|
75
|
+
},
|
|
76
|
+
水: {
|
|
77
|
+
tai: { climate: '寒气偏胜,冰霜早降', organ: '肾寒偏胜,心火受克', sign: '畏寒、水肿、腰冷、心悸' },
|
|
78
|
+
bu: { climate: '水气不足,湿土乘之', organ: '肾水不及,脾土偏胜', sign: '腰膝无力、小便不利、下肢沉' },
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/** 六气司天时传统上说的气候与病位(《素问·五常政大论》《至真要大论》通行转述)。 */
|
|
83
|
+
export const QI_CLIMATE = {
|
|
84
|
+
厥阴风木: { climate: '风气流行,草木动摇', sign: '眩晕、抽搐、胁痛、过敏类症状偏多' },
|
|
85
|
+
少阴君火: { climate: '热气偏胜,暑热早来', sign: '心烦、口疮、失眠、咽痛偏多' },
|
|
86
|
+
太阴湿土: { climate: '湿气偏胜,阴雨多', sign: '腹胀、身重、泄泻、关节酸沉偏多' },
|
|
87
|
+
少阳相火: { climate: '火气偏胜,炎热', sign: '头痛、目赤、耳鸣、疮疡偏多' },
|
|
88
|
+
阳明燥金: { climate: '燥气偏胜,干燥少雨', sign: '干咳、鼻干、皮肤裂、便秘偏多' },
|
|
89
|
+
太阳寒水: { climate: '寒气偏胜,霜雪多', sign: '畏寒、关节痛、腹痛、水肿偏多' },
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/** 本文件覆盖到哪一层。 */
|
|
93
|
+
export const WUYUNLIUQI_SCOPE = {
|
|
94
|
+
covered: [
|
|
95
|
+
'运气年(大寒为界)与年干支',
|
|
96
|
+
'岁运(中运)五行与太过/不及、五音太少',
|
|
97
|
+
'司天、在泉',
|
|
98
|
+
'主运五步与客运五步(含每步起止时刻)',
|
|
99
|
+
'主气六步与客气六步(含每步起止时刻)',
|
|
100
|
+
'当前时刻所处的运与气',
|
|
101
|
+
'天符 / 岁会 / 同天符 / 同岁会 / 太乙天符',
|
|
102
|
+
],
|
|
103
|
+
notCovered: [
|
|
104
|
+
'《素问·六元正纪大论》六十年逐年全文与「先立其年,以明其气」的逐气病证条辨',
|
|
105
|
+
'刚柔失守、升降不前、不迁正、不退位等岁气交司推演',
|
|
106
|
+
'运气合参的方药与针灸取穴',
|
|
107
|
+
'地域与体质差异对运气的修正',
|
|
108
|
+
],
|
|
109
|
+
note: '病位、气候与症状倾向都是传统说法的转述,用来对照季节与身体感受,不是诊断结论。',
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const YUN_DAYS = 365.25 / 5; // 73.05 日一运
|
|
113
|
+
const QI_DAYS = 365.25 / 6; // 60.875 日一气
|
|
114
|
+
|
|
115
|
+
function stemIndex(stem) {
|
|
116
|
+
const i = STEMS.indexOf(stem);
|
|
117
|
+
if (i < 0) throw fail('E_INPUT', `天干「${stem}」不在十干之内`);
|
|
118
|
+
return i;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function branchIndex(branch) {
|
|
122
|
+
const i = BRANCHES.indexOf(branch);
|
|
123
|
+
if (i < 0) throw fail('E_INPUT', `地支「${branch}」不在十二支之内`);
|
|
124
|
+
return i;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** 公历年 → 该年干支(甲子起 1984,年界按立春,与八字侧同源)。 */
|
|
128
|
+
export function yearGanzhiOf(year) {
|
|
129
|
+
const idx = (((year - 4) % 60) + 60) % 60;
|
|
130
|
+
return ganzhiName(idx);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** 中运(岁运):由年干化运,阳干太过、阴干不及。 */
|
|
134
|
+
export function zhongyunOf(stem) {
|
|
135
|
+
const si = stemIndex(stem);
|
|
136
|
+
const wuxing = YUN_OF_STEM[stem];
|
|
137
|
+
const tai = si % 2 === 0; // 甲丙戊庚壬为阳干(索引 0/2/4/6/8)
|
|
138
|
+
const info = YUN_INFO[wuxing];
|
|
139
|
+
return {
|
|
140
|
+
gan: stem,
|
|
141
|
+
wuxing,
|
|
142
|
+
tone: info.tone,
|
|
143
|
+
tai,
|
|
144
|
+
name: `${wuxing}运${tai ? '太过' : '不及'}`,
|
|
145
|
+
taiShao: `${tai ? '太' : '少'}${info.tone}`,
|
|
146
|
+
organ: info.organ,
|
|
147
|
+
nature: info.nature,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** 司天与在泉:由年支定,在泉为司天的对宫(相隔三步)。 */
|
|
152
|
+
export function sitianOf(branch) {
|
|
153
|
+
const bi = branchIndex(branch);
|
|
154
|
+
const sitIdx = SITIAN_INDEX_OF_BRANCH[bi % 6];
|
|
155
|
+
const zaiIdx = (sitIdx + 3) % 6;
|
|
156
|
+
return {
|
|
157
|
+
sitIdx,
|
|
158
|
+
zaiIdx,
|
|
159
|
+
sitian: QI_ORDER[sitIdx],
|
|
160
|
+
zaiquan: QI_ORDER[zaiIdx],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** 主运五步:初运木,按相生序,每步 73.05 日,从大寒起算。 */
|
|
165
|
+
function zhuYunSteps(startJd) {
|
|
166
|
+
return ZHU_YUN_ORDER.map((wuxing, i) => {
|
|
167
|
+
const info = YUN_INFO[wuxing];
|
|
168
|
+
const start = startJd + i * YUN_DAYS;
|
|
169
|
+
const end = start + YUN_DAYS;
|
|
170
|
+
return {
|
|
171
|
+
no: i + 1,
|
|
172
|
+
wuxing,
|
|
173
|
+
name: `${wuxing}运`,
|
|
174
|
+
tone: info.tone,
|
|
175
|
+
taiShao: `太${info.tone}`,
|
|
176
|
+
startJd: start,
|
|
177
|
+
endJd: end,
|
|
178
|
+
startTime: formatJd(start),
|
|
179
|
+
endTime: formatJd(end),
|
|
180
|
+
days: Math.round(YUN_DAYS * 100) / 100,
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** 客运五步:以岁运为初运,按五行相生轮转,太少相生(太过生不及、不及生太过)。 */
|
|
186
|
+
function keYunSteps(zhongyun, startJd) {
|
|
187
|
+
const startIdx = ZHU_YUN_ORDER.indexOf(zhongyun.wuxing);
|
|
188
|
+
return Array.from({ length: 5 }, (_, i) => {
|
|
189
|
+
const wuxing = ZHU_YUN_ORDER[(startIdx + i) % 5];
|
|
190
|
+
const info = YUN_INFO[wuxing];
|
|
191
|
+
const tai = i % 2 === 0 ? zhongyun.tai : !zhongyun.tai;
|
|
192
|
+
const start = startJd + i * YUN_DAYS;
|
|
193
|
+
const end = start + YUN_DAYS;
|
|
194
|
+
return {
|
|
195
|
+
no: i + 1,
|
|
196
|
+
wuxing,
|
|
197
|
+
tai,
|
|
198
|
+
name: `${wuxing}运${tai ? '太过' : '不及'}`,
|
|
199
|
+
tone: info.tone,
|
|
200
|
+
taiShao: `${tai ? '太' : '少'}${info.tone}`,
|
|
201
|
+
startTime: formatJd(start),
|
|
202
|
+
endTime: formatJd(end),
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** 主气六步:初之气厥阴风木,按固定次序,每步 60.875 日。 */
|
|
208
|
+
function zhuQiSteps(startJd) {
|
|
209
|
+
return ZHU_QI_ORDER.map((qi, i) => {
|
|
210
|
+
const info = QI_INFO[qi];
|
|
211
|
+
const start = startJd + i * QI_DAYS;
|
|
212
|
+
const end = start + QI_DAYS;
|
|
213
|
+
return {
|
|
214
|
+
no: i + 1,
|
|
215
|
+
qi,
|
|
216
|
+
wuxing: info.wuxing,
|
|
217
|
+
organ: info.organ,
|
|
218
|
+
nature: info.nature,
|
|
219
|
+
name: `${qi}`,
|
|
220
|
+
startTime: formatJd(start),
|
|
221
|
+
endTime: formatJd(end),
|
|
222
|
+
days: Math.round(QI_DAYS * 100) / 100,
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** 客气六步:三之气为司天、终之气为在泉,初之气由司天倒退两步。 */
|
|
228
|
+
function keQiSteps(sitIdx, startJd) {
|
|
229
|
+
const first = ((sitIdx - 2) % 6 + 6) % 6;
|
|
230
|
+
return Array.from({ length: 6 }, (_, i) => {
|
|
231
|
+
const qi = QI_ORDER[(first + i) % 6];
|
|
232
|
+
const info = QI_INFO[qi];
|
|
233
|
+
const start = startJd + i * QI_DAYS;
|
|
234
|
+
const end = start + QI_DAYS;
|
|
235
|
+
return {
|
|
236
|
+
no: i + 1,
|
|
237
|
+
qi,
|
|
238
|
+
wuxing: info.wuxing,
|
|
239
|
+
organ: info.organ,
|
|
240
|
+
nature: info.nature,
|
|
241
|
+
name: qi,
|
|
242
|
+
sitian: i === 2,
|
|
243
|
+
zaiquan: i === 5,
|
|
244
|
+
startTime: formatJd(start),
|
|
245
|
+
endTime: formatJd(end),
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** 年支的「本位五行」:子水午火卯木酉金、辰戌丑未土;寅申巳亥为长生位,不参与岁会。 */
|
|
251
|
+
const BRANCH_BENWEI = {
|
|
252
|
+
子: '水', 午: '火', 卯: '木', 酉: '金',
|
|
253
|
+
辰: '土', 戌: '土', 丑: '土', 未: '土',
|
|
254
|
+
寅: null, 申: null, 巳: null, 亥: null,
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* 五运六气的「运气年」:以大寒为界(不是立春、不是正月初一)。
|
|
259
|
+
* 交大寒之前仍算上一运气年。
|
|
260
|
+
*/
|
|
261
|
+
export function yunYearOf(year, jd) {
|
|
262
|
+
const daHan = termInstantJd(year, 1);
|
|
263
|
+
if (jd >= daHan) {
|
|
264
|
+
return { nian: year, startJd: daHan, endJd: termInstantJd(year + 1, 1) };
|
|
265
|
+
}
|
|
266
|
+
return { nian: year - 1, startJd: termInstantJd(year - 1, 1), endJd: daHan };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** 特殊格局:天符 / 岁会 / 同天符 / 同岁会 / 太乙天符。 */
|
|
270
|
+
export function specialOf(zhongyun, sitian, zaiquan, branch) {
|
|
271
|
+
const yunWx = zhongyun.wuxing;
|
|
272
|
+
const sitWx = QI_INFO[sitian].wuxing;
|
|
273
|
+
const zaiWx = QI_INFO[zaiquan].wuxing;
|
|
274
|
+
const benwei = BRANCH_BENWEI[branch] || null;
|
|
275
|
+
const tianFu = yunWx === sitWx;
|
|
276
|
+
const suiHui = !!benwei && yunWx === benwei;
|
|
277
|
+
const tongTianFu = zhongyun.tai && yunWx === zaiWx;
|
|
278
|
+
const tongSuiHui = !zhongyun.tai && yunWx === zaiWx;
|
|
279
|
+
const taiYi = tianFu && suiHui;
|
|
280
|
+
const notes = [];
|
|
281
|
+
if (taiYi) {
|
|
282
|
+
notes.push('太乙天符:中运与司天同气、又与年支本位同气,传统上视为六十年里最「重」的一类年份之一,气候与病气的变化都容易被放大。');
|
|
283
|
+
} else if (tianFu) {
|
|
284
|
+
notes.push('天符:中运与司天同气。传统上说这一年本气专一而偏胜,气候变化来得整齐。');
|
|
285
|
+
}
|
|
286
|
+
if (suiHui) {
|
|
287
|
+
notes.push('岁会:中运与年支本位同气。传统上说这一年气令与地域相应,来得比较「正」。');
|
|
288
|
+
}
|
|
289
|
+
if (tongTianFu) {
|
|
290
|
+
notes.push('同天符:阳年太过之运与在泉同气,下半年(在泉主事)容易延续上半年的偏胜。');
|
|
291
|
+
}
|
|
292
|
+
if (tongSuiHui) {
|
|
293
|
+
notes.push('同岁会:阴年不及之运与在泉同气,本气本已不足,下半年又被同一气拖住,恢复更慢。');
|
|
294
|
+
}
|
|
295
|
+
return { tianFu, suiHui, tongTianFu, tongSuiHui, taiYi, notes };
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* 排一年的五运六气。
|
|
300
|
+
* @param {{year:number, month:number, day:number, hour?:number, minute?:number}} input
|
|
301
|
+
*/
|
|
302
|
+
export function buildWuyunliuqi(input) {
|
|
303
|
+
assertCivil(input, '五运六气');
|
|
304
|
+
const { year, month, day } = input;
|
|
305
|
+
if (day > daysInMonth(year, month)) {
|
|
306
|
+
throw fail('E_INPUT', `非法日期:${year} 年 ${month} 月没有 ${day} 日`);
|
|
307
|
+
}
|
|
308
|
+
const hour = Number.isInteger(input.hour) ? input.hour : 12;
|
|
309
|
+
const minute = Number.isInteger(input.minute) ? input.minute : 0;
|
|
310
|
+
if (hour < 0 || hour > 23) throw fail('E_INPUT', 'hour 要在 0–23 之间');
|
|
311
|
+
if (minute < 0 || minute > 59) throw fail('E_INPUT', 'minute 要在 0–59 之间');
|
|
312
|
+
|
|
313
|
+
// 当日正午的 jd 作参考点;有具体时刻时用它,判断「当前在第几气」更准
|
|
314
|
+
const jd = termInstantJd(year, 1) * 0
|
|
315
|
+
+ (function () {
|
|
316
|
+
// 用公历日期构造本地时间轴 jd:以当日 00:00 为整数、按 24 小时折算
|
|
317
|
+
const jdn = (function (y, m, d) {
|
|
318
|
+
const a = Math.floor((14 - m) / 12);
|
|
319
|
+
const yy = y + 4800 - a;
|
|
320
|
+
const mm = m + 12 * a - 3;
|
|
321
|
+
return d + Math.floor((153 * mm + 2) / 5) + 365 * yy + Math.floor(yy / 4)
|
|
322
|
+
- Math.floor(yy / 100) + Math.floor(yy / 400) - 32045;
|
|
323
|
+
})(year, month, day);
|
|
324
|
+
return jdn - 0.5 + (hour * 60 + minute) / 1440;
|
|
325
|
+
})();
|
|
326
|
+
|
|
327
|
+
const yun = yunYearOf(year, jd);
|
|
328
|
+
const gz = yearGanzhiOf(yun.nian);
|
|
329
|
+
const zhongyun = zhongyunOf(gz.stem);
|
|
330
|
+
const sit = sitianOf(gz.branch);
|
|
331
|
+
|
|
332
|
+
const zhuYun = zhuYunSteps(yun.startJd);
|
|
333
|
+
const keYun = keYunSteps(zhongyun, yun.startJd);
|
|
334
|
+
const zhuQi = zhuQiSteps(yun.startJd);
|
|
335
|
+
const keQi = keQiSteps(sit.sitIdx, yun.startJd);
|
|
336
|
+
|
|
337
|
+
const dayInYear = jd - yun.startJd;
|
|
338
|
+
const yunNo = Math.min(5, Math.max(1, Math.floor(dayInYear / YUN_DAYS) + 1));
|
|
339
|
+
const qiNo = Math.min(6, Math.max(1, Math.floor(dayInYear / QI_DAYS) + 1));
|
|
340
|
+
const curZhuYun = zhuYun[yunNo - 1];
|
|
341
|
+
const curKeYun = keYun[yunNo - 1];
|
|
342
|
+
const curZhuQi = zhuQi[qiNo - 1];
|
|
343
|
+
const curKeQi = keQi[qiNo - 1];
|
|
344
|
+
|
|
345
|
+
const eff = YUN_EFFECT[zhongyun.wuxing][zhongyun.tai ? 'tai' : 'bu'];
|
|
346
|
+
const sitClimate = QI_CLIMATE[sit.sitian];
|
|
347
|
+
const zaiClimate = QI_CLIMATE[sit.zaiquan];
|
|
348
|
+
const special = specialOf(zhongyun, sit.sitian, sit.zaiquan, gz.branch);
|
|
349
|
+
|
|
350
|
+
// 客气加临主气:只看「同气 / 相生 / 相克」,给一层很轻的提示,不做病证条辨
|
|
351
|
+
const curKeQx = QI_INFO[curKeQi.qi].wuxing;
|
|
352
|
+
const curZhuQx = QI_INFO[curZhuQi.qi].wuxing;
|
|
353
|
+
const sheng = { 木: '火', 火: '土', 土: '金', 金: '水', 水: '木' };
|
|
354
|
+
const ke = { 木: '土', 土: '水', 水: '火', 火: '金', 金: '木' };
|
|
355
|
+
let lin = '相安';
|
|
356
|
+
if (curKeQx === curZhuQx) lin = '同气';
|
|
357
|
+
else if (sheng[curKeQx] === curZhuQx) lin = '客生主(顺)';
|
|
358
|
+
else if (sheng[curZhuQx] === curKeQx) lin = '主生客(泄)';
|
|
359
|
+
else if (ke[curKeQx] === curZhuQx) lin = '客克主(逆)';
|
|
360
|
+
else if (ke[curZhuQx] === curKeQx) lin = '主克客(从)';
|
|
361
|
+
|
|
362
|
+
const comboName = `${sit.sitian}司天 · ${zhongyun.name}`;
|
|
363
|
+
const comboText = `这一运气年是「${gz.name}」年:中运${zhongyun.name}(${zhongyun.taiShao}),${sit.sitian}司天、${sit.zaiquan}在泉。`
|
|
364
|
+
+ `传统上把这样的组合读成「${eff.climate}」,司天一侧偏「${sitClimate.climate}」,在泉一侧偏「${zaiClimate.climate}」。`;
|
|
365
|
+
|
|
366
|
+
return {
|
|
367
|
+
system: 'wuyunliuqi',
|
|
368
|
+
meta: {
|
|
369
|
+
datetime: `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`,
|
|
370
|
+
nian: yun.nian,
|
|
371
|
+
ganzhi: gz.name,
|
|
372
|
+
stem: gz.stem,
|
|
373
|
+
branch: gz.branch,
|
|
374
|
+
isYang: zhongyun.tai,
|
|
375
|
+
startTime: formatJd(yun.startJd),
|
|
376
|
+
endTime: formatJd(yun.endJd),
|
|
377
|
+
dayInYear: Math.round(dayInYear * 100) / 100,
|
|
378
|
+
},
|
|
379
|
+
year: {
|
|
380
|
+
ganzhi: gz.name,
|
|
381
|
+
stem: gz.stem,
|
|
382
|
+
branch: gz.branch,
|
|
383
|
+
nian: yun.nian,
|
|
384
|
+
startTime: formatJd(yun.startJd),
|
|
385
|
+
endTime: formatJd(yun.endJd),
|
|
386
|
+
note: '运气年以大寒为界:交大寒之前仍算上一运气年,与八字按立春定年柱不同。',
|
|
387
|
+
},
|
|
388
|
+
zhongyun: {
|
|
389
|
+
...zhongyun,
|
|
390
|
+
effect: eff,
|
|
391
|
+
text: `中运${zhongyun.name}(${zhongyun.taiShao}),主${zhongyun.organ},气候偏${zhongyun.nature}。`,
|
|
392
|
+
},
|
|
393
|
+
sitian: {
|
|
394
|
+
qi: sit.sitian,
|
|
395
|
+
...QI_INFO[sit.sitian],
|
|
396
|
+
climate: sitClimate,
|
|
397
|
+
text: `${sit.sitian}司天:上半年(三之气起)主事,气候偏${QI_INFO[sit.sitian].nature}。`,
|
|
398
|
+
},
|
|
399
|
+
zaiquan: {
|
|
400
|
+
qi: sit.zaiquan,
|
|
401
|
+
...QI_INFO[sit.zaiquan],
|
|
402
|
+
climate: zaiClimate,
|
|
403
|
+
text: `${sit.zaiquan}在泉:下半年(终之气)主事,气候偏${QI_INFO[sit.zaiquan].nature}。`,
|
|
404
|
+
},
|
|
405
|
+
zhuYun,
|
|
406
|
+
keYun,
|
|
407
|
+
zhuQi,
|
|
408
|
+
keQi,
|
|
409
|
+
current: {
|
|
410
|
+
dayInYear: Math.round(dayInYear * 100) / 100,
|
|
411
|
+
yunNo,
|
|
412
|
+
qiNo,
|
|
413
|
+
zhuYun: curZhuYun,
|
|
414
|
+
keYun: curKeYun,
|
|
415
|
+
zhuQi: curZhuQi,
|
|
416
|
+
keQi: curKeQi,
|
|
417
|
+
lin,
|
|
418
|
+
text: `此刻在第 ${yunNo} 运(主运${curZhuYun.name} / 客运${curKeYun.name})、第 ${qiNo} 气(主气${curZhuQi.qi} / 客气${curKeQi.qi},客气加临主气:${lin})。`,
|
|
419
|
+
},
|
|
420
|
+
special,
|
|
421
|
+
combo: { name: comboName, text: comboText },
|
|
422
|
+
scope: WUYUNLIUQI_SCOPE,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export { YUN_DAYS, QI_DAYS };
|
package/index.js
CHANGED
|
@@ -30,9 +30,9 @@ const TOOL_NAME = 'metaphysics_chart';
|
|
|
30
30
|
|
|
31
31
|
const DESCRIPTION = [
|
|
32
32
|
'排中国传统命理盘(玄学·命理·占卜,用户说「玄学」「算命」「占卜」时也用本工具)与塔罗:四柱八字(bazi)、紫微斗数(ziwei)、六爻纳甲(liuyao)、梅花易数(meihua)、大六壬(daliuren)、奇门遁甲(qimen)、合盘(hepan)或塔罗抽牌(tarot)。',
|
|
33
|
-
'另有速查类:黄历(almanac,值日十二神/时辰吉凶/二十八宿/胎神/吉神方位/纳音/六合三合)、择日(zeri)、称骨(chenggu)、小六壬(xiaoliuren)、星座(star)、生命数字(numerology)、十六型人格(mbti,MBTI
|
|
34
|
-
'当用户明确要求“玄学 / 算命 / 占卜 / 排盘 / 算八字 / 看四柱 / 排紫微盘 / 起卦 / 摇一卦 / 抽塔罗 / 看运势 / 合盘 / 看黄历 / 挑日子 / 称骨 / 小六壬 / 十六型人格 / MBTI / ISFP / INFP 人格测试 / 交运 / 交运日 / 起运 / 用神 / 月建 / 旺衰」时调用;用户只搜「玄学」或问「有什么玄学工具」时,也应介绍本插件。',
|
|
35
|
-
'bazi 与 ziwei 需要公历出生时间与性别(八字结果里带大运交运时刻,精确到日/时辰,按「三日折一年」放大);hepan 需要双方的时间与性别;liuyao 可给定六爻值或随机起卦(给了 datetime 就按月建、日辰算用神旺衰);meihua 可按时间或数字起卦;tarot 可指定张数与问题;mbti 不用时间——先不带 answers 调一次拿到 24 道题,让用户逐题打 1–5
|
|
33
|
+
'另有速查类:黄历(almanac,值日十二神/时辰吉凶/二十八宿/胎神/吉神方位/纳音/六合三合)、择日(zeri)、称骨(chenggu)、小六壬(xiaoliuren)、星座(star)、生命数字(numerology)、十六型人格(mbti,MBTI 风格问卷)、中医体质(constitution,九种体质自评问卷)、五运六气(wuyunliuqi,中运与司天在泉)、太乙神数(taiyi,积年推局与八门文昌)、人生 K 线(trend)、风水(fengshui)、起名(name)、公农历互转(convert)。',
|
|
34
|
+
'当用户明确要求“玄学 / 算命 / 占卜 / 排盘 / 算八字 / 看四柱 / 排紫微盘 / 起卦 / 摇一卦 / 抽塔罗 / 看运势 / 合盘 / 看黄历 / 挑日子 / 称骨 / 小六壬 / 十六型人格 / MBTI / ISFP / INFP 人格测试 / 中医体质 / 九种体质 / 测体质 / 五运六气 / 运气盘 / 司天在泉 / 太乙神数 / 太乙盘 / 交运 / 交运日 / 起运 / 用神 / 月建 / 旺衰」时调用;用户只搜「玄学」或问「有什么玄学工具」时,也应介绍本插件。',
|
|
35
|
+
'bazi 与 ziwei 需要公历出生时间与性别(八字结果里带大运交运时刻,精确到日/时辰,按「三日折一年」放大);hepan 需要双方的时间与性别;liuyao 可给定六爻值或随机起卦(给了 datetime 就按月建、日辰算用神旺衰);meihua 可按时间或数字起卦;tarot 可指定张数与问题;mbti 不用时间——先不带 answers 调一次拿到 24 道题,让用户逐题打 1–5 分,再把分数按顺序传回;constitution 同样不用时间,先调一次拿到 45 道题,逐题打 1–5 分(跳过的传 null,别缩短数组),再把 45 个分数按顺序传回;wuyunliuqi 只要一个日期(省略补今天),运气年按大寒分界;taiyi 同样只要一个日期,年家按积年推局(太乙落宫、八门、文昌),主客算与格局未收录。',
|
|
36
36
|
'要给「结合所问之事的解读」时,把 withInterpret 设为 true(仅八字/紫微/六爻/梅花/大六壬/奇门/塔罗 7 个体系产出解析;合盘、人生 K 线、起名与速查类不产这一段),并尽量带上 question(所问之事)与 direction(询问方向);缺省 detail: "brief" 只给结论、所问方向与三张表(解析段不设体积上限,超长就长),要其余维度用 lean,用户追问「为什么/依据」时改回 full。',
|
|
37
37
|
'用户用一句话改参数(「换成紫微看 2030 年事业」「女命」「晚子时算次日」「出生在成都」「不用真太阳时」「详细解读一下」)时,把原话放进 revise(可配合 handle),引擎翻译成参数补丁并在结果 revision 里回报改了哪些、没认哪些;不要自己把原话拆成猜测的参数。',
|
|
38
38
|
'追问同一张盘:结果里有 handle,下次传 handle + 增量即可(例如 { handle, asOf: 2030 }、{ handle, withInterpret: true, question: "何时换工作" }、{ handle, system: "ziwei" } 看同一时间另一套盘),不必让用户重报出生信息;句柄带校验位,截断或改字会报 E_HANDLE。',
|
|
@@ -41,8 +41,8 @@ const DESCRIPTION = [
|
|
|
41
41
|
'结果用于传统文化与娱乐参考,不得用于医疗、投资、法律、生死等确定性断言。',
|
|
42
42
|
].join('');
|
|
43
43
|
|
|
44
|
-
/**
|
|
45
|
-
const SYSTEM_ENUM = ['bazi', 'ziwei', 'liuyao', 'tarot', 'meihua', 'daliuren', 'hepan', 'qimen', 'almanac', 'zeri', 'chenggu', 'xiaoliuren', 'star', 'numerology', 'mbti', 'trend', 'fengshui', 'name', 'convert'];
|
|
44
|
+
/** 22 个体系的固定顺序:system 枚举与 help 索引共用 */
|
|
45
|
+
const SYSTEM_ENUM = ['bazi', 'ziwei', 'liuyao', 'tarot', 'meihua', 'daliuren', 'hepan', 'qimen', 'almanac', 'zeri', 'chenggu', 'xiaoliuren', 'star', 'numerology', 'mbti', 'constitution', 'wuyunliuqi', 'taiyi', 'trend', 'fengshui', 'name', 'convert'];
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* 顶层只留通用参数:出生信息、解读开关、句柄与多数体系共用的分析项。
|
|
@@ -62,7 +62,7 @@ const OPTION_KEYS = [
|
|
|
62
62
|
'lines', 'task', 'startDate', 'days', 'candidates', 'shengXiao',
|
|
63
63
|
'lunarYear', 'lunarMonth', 'lunarDay', 'isLeapMonth', 'num1', 'num2', 'num3',
|
|
64
64
|
'juMethod', 'lateZiHourMode', 'partner2', 'chart', 'rectifyHours',
|
|
65
|
-
'upper', 'lower', 'changing', 'count',
|
|
65
|
+
'upper', 'lower', 'changing', 'count', 'spread',
|
|
66
66
|
'leapMonth', 'leapAsNext', 'brightnessSchool', 'gengYearSihua', 'tianmaSchool',
|
|
67
67
|
'tiankongSchool', 'jiekongSchool', 'kuiyueSchool', 'tianshiTianshang',
|
|
68
68
|
'changshengSchool', 'lateZishi', 'shenzhuSchool', 'mingzhuSchool', 'zuoyaoSchool', 'liunianSihua',
|
|
@@ -97,7 +97,8 @@ const OPTION_HINTS = {
|
|
|
97
97
|
upper: '仅 meihua 数字起卦:定上卦的数,与 lower 成对',
|
|
98
98
|
lower: '仅 meihua 数字起卦:定下卦的数',
|
|
99
99
|
changing: '仅 meihua 数字起卦:手动指定动爻 1–6',
|
|
100
|
-
count: '仅 tarot:牌数 1 / 3 / 5,默认 3',
|
|
100
|
+
count: '仅 tarot:牌数 1 / 3 / 5,默认 3;给了 spread 时以 spread 为准',
|
|
101
|
+
spread: '仅 tarot:牌阵 one 单张 / three 过去现在未来 / five 五张局势 / celtic 凯尔特十字(10) / either 二选一(5) / relation 关系阵(7) / timeflow 时间流(3)',
|
|
101
102
|
leapMonth: '仅 ziwei:闰月口径 split / next / prev',
|
|
102
103
|
leapAsNext: '仅 ziwei:旧写法,true 等同 leapMonth=next',
|
|
103
104
|
brightnessSchool: '仅 ziwei:十四主星亮度流派 default/QS/XD1/ZZ/XD2',
|
|
@@ -137,7 +138,7 @@ const OPTION_HINTS = {
|
|
|
137
138
|
year: '仅 name:公历出生年,配合 month/day/hour',
|
|
138
139
|
month: '仅 name:公历出生月 1–12',
|
|
139
140
|
day: '仅 name:公历出生日 1–31',
|
|
140
|
-
answers: '仅 mbti
|
|
141
|
+
answers: '仅 mbti / constitution:按题目顺序的 1–5 分(mbti 24 题、体质 45 题),跳过传 null',
|
|
141
142
|
};
|
|
142
143
|
|
|
143
144
|
const BIRTH_KEYS = ['datetime', 'gender', 'address', 'geocode', 'longitude', 'trueSolar', 'lateZi', 'dst', 'asOf', 'shadow'];
|
|
@@ -148,7 +149,7 @@ const SYSTEM_PARAMS = {
|
|
|
148
149
|
bazi: [...BIRTH_KEYS, 'hourUnknown', 'verifyPast', 'rectify', 'events', 'rectifyHours', 'cross', 'diff', 'trace', ...READ_KEYS],
|
|
149
150
|
ziwei: [...BIRTH_KEYS, 'leapMonth', 'leapAsNext', 'brightnessSchool', 'gengYearSihua', 'tianmaSchool', 'tiankongSchool', 'jiekongSchool', 'kuiyueSchool', 'tianshiTianshang', 'changshengSchool', 'lateZishi', 'shenzhuSchool', 'mingzhuSchool', 'zuoyaoSchool', 'liunianSihua', 'sihuaVariant', 'jieluSchool', 'suipoSchool', 'cross', 'diff', 'trace', ...READ_KEYS],
|
|
150
151
|
liuyao: ['datetime', 'lines', 'seed', 'trace', ...READ_KEYS],
|
|
151
|
-
tarot: ['count', 'seed', ...READ_KEYS],
|
|
152
|
+
tarot: ['spread', 'count', 'seed', ...READ_KEYS],
|
|
152
153
|
meihua: ['datetime', 'mode', 'upper', 'lower', 'changing', ...READ_KEYS],
|
|
153
154
|
daliuren: ['datetime', 'trace', ...READ_KEYS],
|
|
154
155
|
hepan: [...BIRTH_KEYS, 'partner', 'partner2', 'chart', 'leapMonth', 'ask'],
|
|
@@ -159,7 +160,10 @@ const SYSTEM_PARAMS = {
|
|
|
159
160
|
xiaoliuren: ['datetime', 'date', 'hour', 'mode', 'num1', 'num2', 'num3', 'lateZi', 'question', 'shadow'],
|
|
160
161
|
star: ['datetime', 'shadow'],
|
|
161
162
|
numerology: ['datetime', 'shadow'],
|
|
162
|
-
mbti: ['answers', 'shadow'],
|
|
163
|
+
mbti: ['answers', 'shadow'],
|
|
164
|
+
constitution: ['answers', 'shadow'],
|
|
165
|
+
wuyunliuqi: ['datetime', 'shadow'],
|
|
166
|
+
taiyi: ['datetime', 'shadow'],
|
|
163
167
|
trend: ['datetime', 'gender', 'address', 'geocode', 'longitude', 'trueSolar', 'hourUnknown', 'toAge', 'asOf', 'shadow', 'ask'],
|
|
164
168
|
fengshui: ['action', 'datetime', 'gender', 'sitting', 'facing', 'fortuneYear', 'period', 'sittingOffset', 'sittingDegree', 'facingOffset', 'facingDegree', 'fortuneDate', 'fortuneTime', 'dst', 'shadow'],
|
|
165
169
|
name: ['action', 'datetime', 'surname', 'givenName', 'limit', 'charElements', 'strokeOverrides', 'surnameStrokes', 'year', 'month', 'day', 'hour', 'minute', 'gender', 'address', 'geocode', 'longitude', 'trueSolar', 'dst', 'shadow'],
|
|
@@ -181,7 +185,10 @@ const SYSTEM_REQUIRED = {
|
|
|
181
185
|
xiaoliuren: 'time 模式 datetime/date+hour;number 模式 num1–num3',
|
|
182
186
|
star: '无(省略补今天)',
|
|
183
187
|
numerology: '无(省略补今天)',
|
|
184
|
-
mbti: '无(先不带 answers 拿题)',
|
|
188
|
+
mbti: '无(先不带 answers 拿题)',
|
|
189
|
+
constitution: '无(先不带 answers 拿 45 道题)',
|
|
190
|
+
wuyunliuqi: '无(省略则用今天;要算别的年份就传那年的日期)',
|
|
191
|
+
taiyi: '无(省略则用今天;年家按积年推局,给哪一年的日期就算哪一年)',
|
|
185
192
|
trend: 'datetime、gender',
|
|
186
193
|
fengshui: 'natal 要 datetime + gender;advise/xuankong 要 sitting 或 facing',
|
|
187
194
|
name: 'assess 要 surname + givenName;generate 要生辰(datetime 或 year/month/day)',
|
|
@@ -558,7 +565,7 @@ export function apply(ctx) {
|
|
|
558
565
|
system: {
|
|
559
566
|
type: 'string',
|
|
560
567
|
enum: SYSTEM_ENUM,
|
|
561
|
-
description: 'bazi =
|
|
568
|
+
description: 'bazi = 四柱八字(含调候与《穷通宝鉴》用神);ziwei = 紫微斗数;liuyao = 六爻(纳甲、用神与旺衰);tarot = 塔罗;meihua = 梅花易数;daliuren = 大六壬;hepan = 合盘(合婚),需给 partner;qimen = 奇门遁甲(时家转盘,拆补法);almanac = 黄历(某日宜忌/冲煞/建除/节气);zeri = 择日(区间或候选日逐日打分;宜忌依《协纪辨方书》用事与六等轻重);chenggu = 袁天罡称骨(骨重 + 称骨歌 + 白话);xiaoliuren = 小六壬(时间或报数);star = 星座当日基调;numerology = 生命数字;mbti = 十六型人格(24 题:给 answers 出类型,不给先返回题目);constitution = 中医体质(九种各 5 题:给 answers 出主次,不给先返回题目);wuyunliuqi = 五运六气(大寒界;中运太过不及、司天在泉、客运客气六步);taiyi = 太乙神数(积年推局;太乙落宫、八门、文昌);trend = 人生 K 线(大运/流年走势);fengshui = 风水(八宅/飞星/门主灶/玄空,action 三选一);name = 起名(391 字库五行评估与候选;未收录字传 charElements);convert = 公农历互转(solar2lunar / lunar2solar)。',
|
|
562
569
|
},
|
|
563
570
|
datetime: {
|
|
564
571
|
type: 'string',
|
|
@@ -771,7 +778,12 @@ export function apply(ctx) {
|
|
|
771
778
|
count: {
|
|
772
779
|
type: 'number',
|
|
773
780
|
enum: [1, 3, 5],
|
|
774
|
-
description: '塔罗张数:1 单张指引、3 过去现在未来、5
|
|
781
|
+
description: '塔罗张数:1 单张指引、3 过去现在未来、5 五张局势。默认 3。给了 spread 时以 spread 为准。',
|
|
782
|
+
},
|
|
783
|
+
spread: {
|
|
784
|
+
type: 'string',
|
|
785
|
+
enum: ['one', 'three', 'five', 'celtic', 'either', 'relation', 'timeflow'],
|
|
786
|
+
description: '塔罗牌阵(按问法选,张数由牌阵决定):one 单张指引|three 过去现在未来|five 五张局势|celtic 凯尔特十字 10 张|either 二选一 5 张(A 的发展/结果、B 的发展/结果)|relation 关系阵 7 张(你/对方/现状/双方期待/阻碍/走向)|timeflow 时间流 3 张(眼下/这阵子/往后)。不给则按 count。',
|
|
775
787
|
},
|
|
776
788
|
leapMonth: {
|
|
777
789
|
type: 'string',
|
package/locale/en.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"title": "Metaphysics Charts (Xuanxue)",
|
|
4
|
-
"description": "Chinese metaphysics (xuanxue) —
|
|
4
|
+
"description": "Chinese metaphysics (xuanxue) — twenty-two systems in one plugin: eight chart systems plus eleven quick references (almanac, solar–lunar conversion, date selection, bone-weight fortune, Xiao Liu Ren, horoscope, numerology, MBTI-style 16-type questionnaire, life-curve, feng shui, name analysis), plus a nine-type TCM body-constitution questionnaire, five-movements-six-qi (wuyun liuqi) yearly chart, and Taiyi Shenshu (accumulated-year ju, palace, eight gates, Wen Chang). Chart systems: BaZi (hidden stems, ten gods, 12 stages, 42 shensha, strength, pattern and useful-god, luck scoring), Zi Wei Dou Shu (49 stars with brightness, four 12-god cycles, 34 patterns, decade and annual/monthly/daily/hourly mutagen), LiuYao, MeiHua YiShu, Da Liu Ren, Qi Men Dun Jia (three ju-selection schools), compatibility charts (BaZi and Zi Wei), and Tarot, plus an ask-driven interpretation layer. Computed locally with networking off by default, exposed as an agent tool with a Web panel."
|
|
5
5
|
}
|
|
6
6
|
}
|
package/locale/zh.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"title": "命理排盘(玄学)· 八字紫微六爻梅花六壬奇门合盘塔罗",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "玄学命理排盘:二十二套体系一站排盘——既有的八套排盘(八字、紫微、六爻、梅花、大六壬、奇门、合盘、塔罗)之外,另有十一套速查(黄历、农历互转、择日、称骨、小六壬、星座、生命数字、人生K线、风水、起名、十六型人格),以及中医体质问卷、五运六气与太乙神数:八字(藏干十神、十二长生、42 神煞、旺衰、格局用神、大运流年吉凶评分)、紫微斗数(49 星曜与主星庙旺、四层十二神、34 格局、大限、流年流月流日流时四化)、六爻纳甲、梅花易数、大六壬(天地盘/四课/三传)、奇门遁甲(拆补/超神接气/置闰三派取局)、合盘(八字与紫微两套)与塔罗;另有所问之事驱动的解析与详解。纯本地计算、默认不联网,作为 Agent 工具供对话调用,并提供可切换本命/大限/流年视图的 Web 面板。紫微含飞星串连与三方四正复合飞化,六爻含用神旺衰与全卦逐爻旺衰。"
|
|
5
5
|
}
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-metaphysics",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.68.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "命理排盘(玄学 xuanxue)for DeepSeek Harness:
|
|
5
|
+
"description": "命理排盘(玄学 xuanxue)for DeepSeek Harness: twenty-two systems and eleven quick references (almanac, solar–lunar conversion, …), with climate adjustment (tiaohou), the 120 Qiongtong Baojian entries, 1,062-char name library with per-character pinyin, Kangxi stroke counts, five-grid (五格/三才) analysis and mechanical phonetics checks, a 78-card tarot library on the Rider-Waite-Smith base (per-card English name, image description, core meaning and astrological correspondence, cross-checked against three published sources; court cards carry no zodiac by design and the chart says so), classical quotes (Ziping Zhenquan / Di Tian Sui / San Ming Tong Hui), hexagram body relations (六冲/六合/伏吟/反吟/化进神/化退神) plus yongshen placement (用神落位) with month/day strength (月建日辰旺衰) and whole-hexagram per-line strength (全卦逐爻旺衰) and response-time clues (应期线索:逢值/逢冲/逢合 + 月建五态快慢) for liuyao, plus an MBTI-style 16-type questionnaire and exact dayun handover dates (交运日) with annual suiyun hints (岁运并临/伏吟反吟), palace conditions (击刑/入墓), month states (旺相休囚死) and stem–palace relations (天盘干与宫生克) for qimen, flying four-transformations with chained flights (四化飞星串连), three-way-four-corner composite flights (三方四正复合飞化), switchable leap-month policy (闰月按日切分/整月归次月/整月归本月) eleven school switches (亮度/庚干四化/天马/天空/截空旬空/魁钺/天伤天使/长生/晚子时/身主/杂曜全表) for ziwei, the last one opting in to a 61-star minor-star (杂曜) table where each of the twelve extra stars carries its placement verse and the palace it landed in (verses accepted only when at least two independent published editions give the same table, homonymous stars never merged), caliber diffs for bazi/ziwei/qimen (same inputs, one switch, root-field changes), shadow-chart IDs (same normalized params → same ID; version bumps auto-diff chart fields), step-by-step deduction traces (liuyao najia→liuqin→shiying→fushen→strength; bazi strength score and pattern/yongshen; ziwei pattern conditions), and a bundled offline single-file page (命理排盘.html), a panel-to-chat handoff that asks the Harness about a finished chart, per-tab lazy engine chunks so the first-screen client bundle stays under 110KB gzip, and a public verification report (128 classical hexagram cases, 312 Zi Wei charts × 34 patterns, 12 dayun handover cases) generated from the same source that gates CI.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"玄学",
|
|
8
8
|
"玄学排盘",
|