skill-calorie 0.2.0 → 0.2.2

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.
Files changed (130) hide show
  1. package/SKILL.md +54 -26
  2. package/dist/analysis/anomaly/common.d.ts.map +1 -1
  3. package/dist/analysis/anomaly/common.js +2 -1
  4. package/dist/analysis/anomaly/common.js.map +1 -1
  5. package/dist/analysis/cross.d.ts.map +1 -1
  6. package/dist/analysis/cross.js +3 -2
  7. package/dist/analysis/cross.js.map +1 -1
  8. package/dist/analysis/deficit.d.ts.map +1 -1
  9. package/dist/analysis/deficit.js +4 -0
  10. package/dist/analysis/deficit.js.map +1 -1
  11. package/dist/analysis/diet.js +2 -2
  12. package/dist/analysis/diet.js.map +1 -1
  13. package/dist/analysis/exercise.js +5 -5
  14. package/dist/analysis/exercise.js.map +1 -1
  15. package/dist/analysis/review.js +2 -2
  16. package/dist/analysis/review.js.map +1 -1
  17. package/dist/analysis/series.d.ts +7 -1
  18. package/dist/analysis/series.d.ts.map +1 -1
  19. package/dist/analysis/series.js +22 -6
  20. package/dist/analysis/series.js.map +1 -1
  21. package/dist/analysis/utils.d.ts +7 -0
  22. package/dist/analysis/utils.d.ts.map +1 -1
  23. package/dist/analysis/utils.js +7 -0
  24. package/dist/analysis/utils.js.map +1 -1
  25. package/dist/analysis/weightCompare3.js +2 -2
  26. package/dist/analysis/weightCompare3.js.map +1 -1
  27. package/dist/cli/cmd_read.d.ts +21 -3
  28. package/dist/cli/cmd_read.d.ts.map +1 -1
  29. package/dist/cli/cmd_read.js +460 -54
  30. package/dist/cli/cmd_read.js.map +1 -1
  31. package/dist/cli/keys.d.ts +89 -1
  32. package/dist/cli/keys.d.ts.map +1 -1
  33. package/dist/cli/keys.js +30 -0
  34. package/dist/cli/keys.js.map +1 -1
  35. package/dist/cli/write.d.ts +12 -9
  36. package/dist/cli/write.d.ts.map +1 -1
  37. package/dist/cli/write.js +133 -48
  38. package/dist/cli/write.js.map +1 -1
  39. package/dist/output.d.ts +55 -1
  40. package/dist/output.d.ts.map +1 -1
  41. package/dist/output.js +203 -5
  42. package/dist/output.js.map +1 -1
  43. package/dist/render/dietDocs.d.ts +45 -0
  44. package/dist/render/dietDocs.d.ts.map +1 -0
  45. package/dist/render/dietDocs.js +561 -0
  46. package/dist/render/dietDocs.js.map +1 -0
  47. package/dist/render/envelope.d.ts +32 -6
  48. package/dist/render/envelope.d.ts.map +1 -1
  49. package/dist/render/envelope.js +71 -0
  50. package/dist/render/envelope.js.map +1 -1
  51. package/dist/render/exercisePort.d.ts +161 -0
  52. package/dist/render/exercisePort.d.ts.map +1 -0
  53. package/dist/render/exercisePort.js +395 -0
  54. package/dist/render/exercisePort.js.map +1 -0
  55. package/dist/render/goal.d.ts.map +1 -1
  56. package/dist/render/goal.js +13 -2
  57. package/dist/render/goal.js.map +1 -1
  58. package/dist/render/goalPlate.d.ts +1 -1
  59. package/dist/render/goalPlate.d.ts.map +1 -1
  60. package/dist/render/goalPlate.js +5 -1
  61. package/dist/render/goalPlate.js.map +1 -1
  62. package/dist/render/helpCenter.d.ts +104 -0
  63. package/dist/render/helpCenter.d.ts.map +1 -0
  64. package/dist/render/helpCenter.js +386 -0
  65. package/dist/render/helpCenter.js.map +1 -0
  66. package/dist/render/html.d.ts.map +1 -1
  67. package/dist/render/html.js +2 -1
  68. package/dist/render/html.js.map +1 -1
  69. package/dist/render/index.d.ts +3 -0
  70. package/dist/render/index.d.ts.map +1 -1
  71. package/dist/render/index.js +2 -0
  72. package/dist/render/index.js.map +1 -1
  73. package/dist/render/nutritionPort.d.ts +89 -0
  74. package/dist/render/nutritionPort.d.ts.map +1 -0
  75. package/dist/render/nutritionPort.js +183 -0
  76. package/dist/render/nutritionPort.js.map +1 -0
  77. package/dist/render/nutritionPortDocs.d.ts +6 -0
  78. package/dist/render/nutritionPortDocs.d.ts.map +1 -0
  79. package/dist/render/nutritionPortDocs.js +317 -0
  80. package/dist/render/nutritionPortDocs.js.map +1 -0
  81. package/dist/render/photo.d.ts.map +1 -1
  82. package/dist/render/photo.js +5 -1
  83. package/dist/render/photo.js.map +1 -1
  84. package/dist/render/planPlate.d.ts +2 -1
  85. package/dist/render/planPlate.d.ts.map +1 -1
  86. package/dist/render/planPlate.js +6 -1
  87. package/dist/render/planPlate.js.map +1 -1
  88. package/dist/render/receipt.d.ts +47 -1
  89. package/dist/render/receipt.d.ts.map +1 -1
  90. package/dist/render/receipt.js +67 -3
  91. package/dist/render/receipt.js.map +1 -1
  92. package/dist/render/sportDocs.d.ts +14 -0
  93. package/dist/render/sportDocs.d.ts.map +1 -0
  94. package/dist/render/sportDocs.js +540 -0
  95. package/dist/render/sportDocs.js.map +1 -0
  96. package/dist/render/sportPortDocs.d.ts +8 -0
  97. package/dist/render/sportPortDocs.d.ts.map +1 -0
  98. package/dist/render/sportPortDocs.js +468 -0
  99. package/dist/render/sportPortDocs.js.map +1 -0
  100. package/dist/render/trendDocs.d.ts +11 -0
  101. package/dist/render/trendDocs.d.ts.map +1 -0
  102. package/dist/render/trendDocs.js +445 -0
  103. package/dist/render/trendDocs.js.map +1 -0
  104. package/dist/render/trendMiscPort.d.ts +127 -0
  105. package/dist/render/trendMiscPort.d.ts.map +1 -0
  106. package/dist/render/trendMiscPort.js +277 -0
  107. package/dist/render/trendMiscPort.js.map +1 -0
  108. package/dist/render/trendMiscPortDocs.d.ts +10 -0
  109. package/dist/render/trendMiscPortDocs.d.ts.map +1 -0
  110. package/dist/render/trendMiscPortDocs.js +397 -0
  111. package/dist/render/trendMiscPortDocs.js.map +1 -0
  112. package/dist/render/wizardPort.d.ts +125 -0
  113. package/dist/render/wizardPort.d.ts.map +1 -0
  114. package/dist/render/wizardPort.js +393 -0
  115. package/dist/render/wizardPort.js.map +1 -0
  116. package/dist/render/wizardPortDocs.d.ts +6 -0
  117. package/dist/render/wizardPortDocs.d.ts.map +1 -0
  118. package/dist/render/wizardPortDocs.js +274 -0
  119. package/dist/render/wizardPortDocs.js.map +1 -0
  120. package/dist/triggers/routing.d.ts +21 -21
  121. package/dist/triggers/routing.d.ts.map +1 -1
  122. package/dist/triggers/routing.js +60 -30
  123. package/dist/triggers/routing.js.map +1 -1
  124. package/package.json +2 -2
  125. package/templates/diet.html +2 -2
  126. package/templates/exercise.html +2 -2
  127. package/templates/goal.html +2 -2
  128. package/templates/help.html +2 -2
  129. package/templates/home.html +2 -2
  130. package/templates/photo-gallery.html +2 -2
@@ -0,0 +1,393 @@
1
+ import { listCompositions, listMeasurements, CALIPER_FIELDS } from '../fetch/body.js';
2
+ import { listPhotos } from '../fetch/photos.js';
3
+ import { toCard } from './photo.js';
4
+ import { SOURCE_CHOICES, SOURCE_LABELS } from '../kcal.js';
5
+ import { todayISO } from '../analysis/utils.js';
6
+ import { CalorieRenderError } from './errors.js';
7
+ const ISO_RE = /^\d{4}-\d{2}-\d{2}$/;
8
+ function assertISO(v, field) {
9
+ if (!ISO_RE.test(v) || Number.isNaN(Date.parse(v + 'T12:00:00Z'))) {
10
+ throw new CalorieRenderError('bad-input', field + ' 非法(须 YYYY-MM-DD):' + v);
11
+ }
12
+ }
13
+ function numOrUndef(raw, field) {
14
+ if (raw === undefined || raw === null || raw === '')
15
+ return undefined;
16
+ const n = typeof raw === 'number' ? raw : Number(String(raw).trim());
17
+ if (!Number.isFinite(n))
18
+ throw new CalorieRenderError('bad-input', '参数 ' + field + ' 须为 number:' + String(raw));
19
+ return n;
20
+ }
21
+ function strOrUndef(raw, field) {
22
+ if (raw === undefined || raw === null)
23
+ return undefined;
24
+ if (typeof raw !== 'string')
25
+ throw new CalorieRenderError('bad-input', '参数 ' + field + ' 须为字符串');
26
+ const s = raw.trim();
27
+ return s === '' ? undefined : s;
28
+ }
29
+ /** 写键 camel 口径镜像(cli/write.ts MEASURE_CAMEL;测试钉死键集一致)。 */
30
+ export const WIZARD_MEASURE_CAMEL = {
31
+ chestCm: 'chest_cm', waistCm: 'waist_cm', abdomenCm: 'abdomen_cm', hipCm: 'hip_cm', shoulderCm: 'shoulder_cm',
32
+ leftThighCm: 'left_thigh_cm', rightThighCm: 'right_thigh_cm', leftCalfCm: 'left_calf_cm', rightCalfCm: 'right_calf_cm',
33
+ leftArmCm: 'left_arm_cm', rightArmCm: 'right_arm_cm', leftForearmCm: 'left_forearm_cm', rightForearmCm: 'right_forearm_cm',
34
+ };
35
+ export const WIZARD_MEASURE_LABELS = {
36
+ chestCm: '胸围', waistCm: '腰围', abdomenCm: '腹围', hipCm: '臀围', shoulderCm: '肩围',
37
+ leftThighCm: '左大腿', rightThighCm: '右大腿', leftCalfCm: '左小腿', rightCalfCm: '右小腿',
38
+ leftArmCm: '左上臂', rightArmCm: '右上臂', leftForearmCm: '左前臂', rightForearmCm: '右前臂',
39
+ };
40
+ const MEASURE_UPPER = ['chestCm', 'waistCm', 'abdomenCm', 'hipCm', 'shoulderCm'];
41
+ const MEASURE_LOWER = ['leftThighCm', 'rightThighCm', 'leftCalfCm', 'rightCalfCm'];
42
+ const MEASURE_ARM = ['leftArmCm', 'rightArmCm', 'leftForearmCm', 'rightForearmCm'];
43
+ const MEASURE_ALL = [...MEASURE_UPPER, ...MEASURE_LOWER, ...MEASURE_ARM];
44
+ export const WIZARD_CALIPER_LABELS = {
45
+ caliper_chest_mm: '胸', caliper_abdominal_mm: '腹', caliper_thigh_mm: '大腿',
46
+ caliper_tricep_mm: '三头肌', caliper_subscapular_mm: '肩胛下',
47
+ caliper_suprailiac_mm: '髂上', caliper_midaxillary_mm: '腋中线',
48
+ };
49
+ /** 中文来源别名(cli/write.ts SOURCE_ALIASES 同值,测试钉死)。 */
50
+ const SOURCE_ALIASES = {
51
+ '家测皮褶钳': 'home_caliper', '医院测': 'hospital', '健身房测': 'gym',
52
+ '健身房': 'gym', '医院': 'hospital', '皮褶钳': 'home_caliper',
53
+ };
54
+ function normSource(v) {
55
+ if (v === undefined || v === null || String(v).trim() === '')
56
+ return undefined;
57
+ const s = String(v).trim();
58
+ if (SOURCE_CHOICES.includes(s))
59
+ return s;
60
+ const hit = SOURCE_ALIASES[s];
61
+ if (hit)
62
+ return hit;
63
+ throw new CalorieRenderError('bad-input', '参数 source 非法(home_caliper/hospital/gym 或中文 家测皮褶钳/医院测/健身房测):' + s);
64
+ }
65
+ export function buildMeasureWizardPrompt(date, filled, note) {
66
+ if (filled.length === 0)
67
+ return '// 请至少填 1 个围度(13 项分 3 组,至少 1 项)';
68
+ const byGroup = (group, label) => {
69
+ const items = group
70
+ .map((c) => filled.find((f) => f.camel === c))
71
+ .filter((f) => !!f);
72
+ if (items.length === 0)
73
+ return '';
74
+ return ' ' + label + ': ' + items.map((f) => f.label + ' ' + f.value + 'cm').join(', ');
75
+ };
76
+ const groups = [byGroup(MEASURE_UPPER, '上身'), byGroup(MEASURE_LOWER, '下身'), byGroup(MEASURE_ARM, '手臂')].filter(Boolean).join('\n');
77
+ return '请帮我记录围度到卡路里\n\n参数:\n- 日期:' + date + '\n- 围度(' + filled.length + ' 项 / 共 13):\n' + groups + (note ? '\n- 备注:' + note : '');
78
+ }
79
+ export function buildMeasureWizardView(db, raw) {
80
+ for (const k of Object.keys(raw)) {
81
+ if (!(k in WIZARD_MEASURE_CAMEL) && k !== 'date' && k !== 'note' && k !== 'key') {
82
+ throw new CalorieRenderError('bad-input', '不支持字段: ' + k);
83
+ }
84
+ }
85
+ const date = strOrUndef(raw['date'], 'date') ?? todayISO();
86
+ assertISO(date, 'date');
87
+ const note = strOrUndef(raw['note'], 'note') ?? null;
88
+ const filled = [];
89
+ for (const camel of MEASURE_ALL) {
90
+ const v = numOrUndef(raw[camel], camel);
91
+ if (v !== undefined) {
92
+ filled.push({ camel, snake: WIZARD_MEASURE_CAMEL[camel], label: WIZARD_MEASURE_LABELS[camel], value: v });
93
+ }
94
+ }
95
+ let recent = null;
96
+ try {
97
+ const rows = listMeasurements(db, { days: 36500, limit: 1 });
98
+ if (rows.length > 0) {
99
+ const r = rows[0];
100
+ const values = {};
101
+ for (const camel of MEASURE_ALL) {
102
+ const snake = WIZARD_MEASURE_CAMEL[camel];
103
+ const v = r[snake];
104
+ values[camel] = typeof v === 'number' ? v : null;
105
+ }
106
+ recent = { date: String(r['date'] ?? ''), values };
107
+ }
108
+ }
109
+ catch {
110
+ recent = null;
111
+ }
112
+ return { date, note, filled, filledCount: filled.length, recent, prompt: buildMeasureWizardPrompt(date, filled, note) };
113
+ }
114
+ export function buildCompositionWizardPrompt(v) {
115
+ if (!v.source)
116
+ return '// 请选来源(上方第 1 步:home_caliper/hospital/gym)';
117
+ if (v.bodyFatPct === null)
118
+ return '// 请填体脂率(上方第 3 步;皮褶→体脂换算未移植,直传实测值)';
119
+ if (!(v.bodyFatPct > 0 && v.bodyFatPct < 60))
120
+ return '// 体脂率需在 (0, 60)% 之间,当前 ' + v.bodyFatPct + '% 异常';
121
+ const isCaliper = v.source === 'home_caliper';
122
+ let textBody = '';
123
+ if (isCaliper) {
124
+ if (v.calipers.length < CALIPER_FIELDS.length) {
125
+ const missing = CALIPER_FIELDS.filter((f) => !v.calipers.some((c) => c.field === f));
126
+ return '// 还差 ' + missing.length + ' 项皮褶:' + missing.join(', ');
127
+ }
128
+ const bad = v.calipers.filter((c) => !(c.value > 0 && c.value < 100));
129
+ if (bad.length > 0)
130
+ return '// 皮褶值需在 (0, 100) mm 之间:' + bad.map((c) => c.field).join(', ') + ' 当前异常';
131
+ const by = (f) => v.calipers.find((c) => c.field === f).value;
132
+ const sum7 = CALIPER_FIELDS.reduce((s, f) => s + by(f), 0);
133
+ textBody = '- 7 处皮褶(mm):胸 ' + by('caliper_chest_mm') + ' / 腹 ' + by('caliper_abdominal_mm') +
134
+ ' / 大腿 ' + by('caliper_thigh_mm') + ' / 三头肌 ' + by('caliper_tricep_mm') +
135
+ ' / 肩胛下 ' + by('caliper_subscapular_mm') + ' / 髂上 ' + by('caliper_suprailiac_mm') +
136
+ ' / 腋中线 ' + by('caliper_midaxillary_mm') + '\n- 7 处总和:' + (Math.round(sum7 * 10) / 10) + ' mm\n';
137
+ }
138
+ return '请帮我记一条' + (isCaliper ? '体脂钳测' : '外部测量') + '结果到卡路里\n\n参数:\n- 日期:' + v.date +
139
+ '\n- 来源:' + v.source + (v.age !== null ? '\n- 年龄:' + v.age : '') +
140
+ (v.sex ? '\n- 性别:' + (v.sex === 'male' ? '男' : '女') : '') + '\n' + textBody +
141
+ '- 体脂率:' + v.bodyFatPct + '%' + (v.note ? '\n- 备注:' + v.note : '');
142
+ }
143
+ export function buildCompositionWizardView(db, raw) {
144
+ const allowed = new Set(['date', 'source', 'bodyFatPct', 'age', 'sex', 'note', 'key', ...CALIPER_FIELDS]);
145
+ for (const k of Object.keys(raw)) {
146
+ if (!allowed.has(k))
147
+ throw new CalorieRenderError('bad-input', '不支持字段: ' + k);
148
+ }
149
+ const date = strOrUndef(raw['date'], 'date') ?? todayISO();
150
+ assertISO(date, 'date');
151
+ const source = normSource(raw['source']) ?? null;
152
+ const bodyFatPct = numOrUndef(raw['bodyFatPct'], 'bodyFatPct') ?? null;
153
+ const ageRaw = numOrUndef(raw['age'], 'age') ?? null;
154
+ const age = ageRaw === null ? null : Math.trunc(ageRaw);
155
+ if (age !== null && (!Number.isInteger(age) || age < 1 || age > 120)) {
156
+ throw new CalorieRenderError('bad-input', '参数 age 须为 1..120 整数');
157
+ }
158
+ let sex = null;
159
+ const sexRaw = strOrUndef(raw['sex'], 'sex');
160
+ if (sexRaw !== undefined) {
161
+ if (sexRaw === 'male' || sexRaw === '男')
162
+ sex = 'male';
163
+ else if (sexRaw === 'female' || sexRaw === '女')
164
+ sex = 'female';
165
+ else
166
+ throw new CalorieRenderError('bad-input', '参数 sex 非法(male/female 或 男/女):' + sexRaw);
167
+ }
168
+ const note = strOrUndef(raw['note'], 'note') ?? null;
169
+ const calipers = [];
170
+ for (const f of CALIPER_FIELDS) {
171
+ const v = numOrUndef(raw[f], f);
172
+ if (v !== undefined)
173
+ calipers.push({ field: f, label: WIZARD_CALIPER_LABELS[f], value: v });
174
+ }
175
+ const sum7 = calipers.length === CALIPER_FIELDS.length
176
+ ? Math.round(calipers.reduce((s, c) => s + c.value, 0) * 10) / 10
177
+ : null;
178
+ let recent = null;
179
+ try {
180
+ const rows = listCompositions(db, { days: 36500, limit: 1 });
181
+ if (rows.length > 0) {
182
+ const r = rows[0];
183
+ recent = {
184
+ date: String(r['date'] ?? ''),
185
+ bodyFatPct: typeof r['body_fat_pct'] === 'number' ? r['body_fat_pct'] : null,
186
+ source: typeof r['source'] === 'string' ? r['source'] : null,
187
+ };
188
+ }
189
+ }
190
+ catch {
191
+ recent = null;
192
+ }
193
+ const sourceLabel = source ? (SOURCE_LABELS[source] ?? source) : null;
194
+ const view = {
195
+ date, source, sourceLabel, bodyFatPct, age, sex, note, calipers, sum7, recent, prompt: '',
196
+ };
197
+ view.prompt = buildCompositionWizardPrompt(view);
198
+ return view;
199
+ }
200
+ /* ── 3. 记身材照 wizard(body_photo_log_wizard.html 复刻,纯配置不读库) ── */
201
+ export const PHOTO_LOG_TAGS = ['正面', '背面', '侧面', '正面自然光', '正面灯光', '手臂', '腹部', '腿部'];
202
+ function normSrcPaths(raw) {
203
+ if (raw === undefined || raw === null)
204
+ return [];
205
+ const arr = Array.isArray(raw) ? raw : [raw];
206
+ const out = [];
207
+ for (const s of arr) {
208
+ if (typeof s !== 'string' || s.trim() === '') {
209
+ throw new CalorieRenderError('bad-input', '参数 srcPaths 须为照片路径字符串数组');
210
+ }
211
+ out.push(s.trim());
212
+ }
213
+ if (out.length > 20)
214
+ throw new CalorieRenderError('bad-input', 'srcPaths 至多 20 张');
215
+ return out;
216
+ }
217
+ export function buildPhotoLogWizardPrompt(srcPaths, tag, note) {
218
+ if (srcPaths.length === 0)
219
+ return '// 请先填照片文件路径(srcPaths,至多 20 张)';
220
+ if (!tag)
221
+ return '// 请填 tag(建议:正面/背面/侧面,同一类用同一 tag)';
222
+ const files = srcPaths.map((f) => '"' + f + '"').join(' ');
223
+ const params = { srcPaths, tag, ...(note ? { note } : {}) };
224
+ return '请帮我记录 ' + srcPaths.length + ' 张身材照到卡路里\n\n参数:\n- 照片文件:' + files +
225
+ '\n- tag:' + tag + (note ? '\n- 备注:' + note : '') +
226
+ '\n\n命令:\n```bash\ncalorie-cmd-read calorie.photo.add --params \'' + JSON.stringify(params) + '\'\n```\n\n完成后返回写库回执。';
227
+ }
228
+ export function buildPhotoLogWizardView(raw) {
229
+ const allowed = new Set(['srcPaths', 'srcPath', 'tag', 'note', 'key']);
230
+ for (const k of Object.keys(raw)) {
231
+ if (!allowed.has(k))
232
+ throw new CalorieRenderError('bad-input', '不支持字段: ' + k);
233
+ }
234
+ const srcPaths = normSrcPaths(raw['srcPaths'] ?? raw['srcPath']);
235
+ const tagRaw = strOrUndef(raw['tag'], 'tag');
236
+ if (tagRaw !== undefined && tagRaw.length > 20)
237
+ throw new CalorieRenderError('bad-input', '参数 tag 至多 20 字符');
238
+ const tag = tagRaw ?? null;
239
+ const note = strOrUndef(raw['note'], 'note') ?? null;
240
+ return { srcPaths, tag, note, prompt: buildPhotoLogWizardPrompt(srcPaths, tag, note) };
241
+ }
242
+ function normIdList(raw, field) {
243
+ if (raw === undefined || raw === null)
244
+ return [];
245
+ const arr = Array.isArray(raw) ? raw : String(raw).split(',').map((s) => s.trim()).filter(Boolean);
246
+ const out = [];
247
+ for (const v of arr) {
248
+ const n = typeof v === 'number' ? v : Number(String(v).trim());
249
+ if (!Number.isInteger(n) || n <= 0)
250
+ throw new CalorieRenderError('bad-input', '参数 ' + field + ' 须为正整数 id 数组');
251
+ out.push(n);
252
+ }
253
+ return out;
254
+ }
255
+ function normCrops(raw) {
256
+ if (raw === undefined || raw === null || raw === '')
257
+ return {};
258
+ let obj;
259
+ if (typeof raw === 'string') {
260
+ try {
261
+ obj = JSON.parse(raw);
262
+ }
263
+ catch {
264
+ throw new CalorieRenderError('bad-input', '参数 crops 须为 JSON 对象 {id:[x1,y1,x2,y2]}');
265
+ }
266
+ }
267
+ else if (typeof raw === 'object' && !Array.isArray(raw)) {
268
+ obj = raw;
269
+ }
270
+ else {
271
+ throw new CalorieRenderError('bad-input', '参数 crops 须为 JSON 对象 {id:[x1,y1,x2,y2]}');
272
+ }
273
+ const out = {};
274
+ for (const [id, box] of Object.entries(obj)) {
275
+ if (!Array.isArray(box) || box.length !== 4 || !box.every((n) => typeof n === 'number' && Number.isFinite(n))) {
276
+ throw new CalorieRenderError('bad-input', '参数 crops[' + id + '] 须为 [x1,y1,x2,y2] 四数字');
277
+ }
278
+ const [x1, y1, x2, y2] = box;
279
+ if (!(x2 > x1 && y2 > y1)) {
280
+ throw new CalorieRenderError('bad-input', '参数 crops[' + id + '] 须满足 x2>x1 且 y2>y1');
281
+ }
282
+ out[id] = [x1, y1, x2, y2];
283
+ }
284
+ return out;
285
+ }
286
+ export function buildGifPlannerPrompt(v) {
287
+ if (v.selectedIds.length === 0)
288
+ return '// 未选中任何照片(先按 tag 列出,再给 photoIds 框选)';
289
+ const lines = [];
290
+ lines.push('请帮我生成身材变化 GIF');
291
+ lines.push('');
292
+ lines.push('参数:');
293
+ lines.push('- 已选 ' + v.selectedIds.length + ' 张(按顺序):ID = ' + v.selectedIds.join(' '));
294
+ const cropIds = v.selectedIds.filter((id) => v.crops[String(id)]);
295
+ if (cropIds.length > 0) {
296
+ lines.push('- 裁剪(每张单独):');
297
+ for (const id of cropIds) {
298
+ const [x1, y1, x2, y2] = v.crops[String(id)];
299
+ lines.push(' ' + id + ': (' + x1 + ', ' + y1 + ') ' + (x2 - x1) + '×' + (y2 - y1) + ' → 即 (' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ')');
300
+ }
301
+ }
302
+ else {
303
+ lines.push('- 裁剪:无(整图)');
304
+ }
305
+ lines.push('- 速度:' + v.duration + 'ms/帧');
306
+ lines.push('- 循环:' + (v.loop === 0 ? '无限' : v.loop + ' 次'));
307
+ lines.push('- 尺寸:' + v.width + '×' + v.height);
308
+ if (v.watermark)
309
+ lines.push('- 水印:"' + v.watermark + '"');
310
+ lines.push('- 过渡:' + v.transition);
311
+ if (v.output)
312
+ lines.push('- 输出:' + v.output);
313
+ lines.push('');
314
+ lines.push('命令:');
315
+ lines.push('```bash');
316
+ const gifParams = { tag: v.tag ?? '正面' };
317
+ lines.push('calorie-cmd-read calorie.photo.gif --params \'' + JSON.stringify(gifParams) + '\'');
318
+ lines.push('```');
319
+ lines.push('');
320
+ lines.push('完成后用浏览器打开生成的 GIF 文件让用户确认。');
321
+ return lines.join('\n');
322
+ }
323
+ export function buildGifPlannerView(db, raw, photosDir) {
324
+ const allowed = new Set([
325
+ 'tag', 'start', 'end', 'days', 'photoIds', 'ids', 'crops',
326
+ 'duration', 'loop', 'width', 'height', 'watermark', 'transition', 'output', 'photosDir', 'key',
327
+ ]);
328
+ for (const k of Object.keys(raw)) {
329
+ if (!allowed.has(k))
330
+ throw new CalorieRenderError('bad-input', '不支持字段: ' + k);
331
+ }
332
+ const tag = strOrUndef(raw['tag'], 'tag') ?? null;
333
+ const start = strOrUndef(raw['start'], 'start');
334
+ if (start !== undefined)
335
+ assertISO(start, 'start');
336
+ const end = strOrUndef(raw['end'], 'end');
337
+ if (end !== undefined)
338
+ assertISO(end, 'end');
339
+ if (start !== undefined && end !== undefined && start > end) {
340
+ throw new CalorieRenderError('bad-input', 'start 不得晚于 end');
341
+ }
342
+ const daysRaw = numOrUndef(raw['days'], 'days');
343
+ const days = daysRaw === undefined ? 365 : Math.trunc(daysRaw);
344
+ if (!Number.isInteger(days) || days < 1 || days > 36500)
345
+ throw new CalorieRenderError('bad-input', 'days 须为 1..36500 整数');
346
+ const durationRaw = numOrUndef(raw['duration'], 'duration');
347
+ const duration = durationRaw === undefined ? 500 : Math.trunc(durationRaw);
348
+ if (duration < 50 || duration > 5000)
349
+ throw new CalorieRenderError('bad-input', 'duration 须为 50..5000 毫秒');
350
+ const loopRaw = numOrUndef(raw['loop'], 'loop');
351
+ const loop = loopRaw === undefined ? 0 : Math.trunc(loopRaw);
352
+ if (![0, 1, 3, 5].includes(loop))
353
+ throw new CalorieRenderError('bad-input', 'loop 须为 0/1/3/5(0=无限)');
354
+ const widthRaw = numOrUndef(raw['width'], 'width');
355
+ const width = widthRaw === undefined ? 400 : Math.trunc(widthRaw);
356
+ if (width < 100 || width > 2000)
357
+ throw new CalorieRenderError('bad-input', 'width 须为 100..2000 像素');
358
+ const heightRaw = numOrUndef(raw['height'], 'height');
359
+ const height = heightRaw === undefined ? 600 : Math.trunc(heightRaw);
360
+ if (height < 100 || height > 2000)
361
+ throw new CalorieRenderError('bad-input', 'height 须为 100..2000 像素');
362
+ const watermark = strOrUndef(raw['watermark'], 'watermark') ?? null;
363
+ const transition = strOrUndef(raw['transition'], 'transition') ?? 'cut';
364
+ if (!['cut', 'fade', 'dissolve'].includes(transition)) {
365
+ throw new CalorieRenderError('bad-input', 'transition 须为 cut/fade/dissolve');
366
+ }
367
+ const output = strOrUndef(raw['output'], 'output') ?? null;
368
+ const crops = normCrops(raw['crops']);
369
+ const wanted = normIdList(raw['photoIds'] ?? raw['ids'], 'photoIds');
370
+ const rows = listPhotos(db, {
371
+ ...(tag ? { tag } : {}),
372
+ ...(start !== undefined || end !== undefined ? { dateFrom: start ?? null, dateTo: end ?? null } : { days }),
373
+ limit: 100,
374
+ });
375
+ const byId = new Map(rows.map((r) => [r.id, r]));
376
+ const photos = rows.map((r) => {
377
+ const card = toCard(r, photosDir ?? null);
378
+ const crop = crops[String(r.id)] ?? null;
379
+ return {
380
+ id: r.id, date: r.date, tagList: [...r.tag_list], photoPath: card.photoPath,
381
+ fileExists: card.fileExists, selected: wanted.length === 0 ? true : wanted.includes(r.id), crop,
382
+ };
383
+ });
384
+ const missingIds = wanted.filter((id) => !byId.has(id));
385
+ const selectedIds = photos.filter((p) => p.selected).map((p) => p.id);
386
+ const view = {
387
+ tag, photos, selectedIds, missingIds,
388
+ duration, loop, width, height, watermark, transition, output, prompt: '',
389
+ };
390
+ view.prompt = buildGifPlannerPrompt({ selectedIds, crops, duration, loop, width, height, watermark, transition, output, tag });
391
+ return view;
392
+ }
393
+ //# sourceMappingURL=wizardPort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardPort.js","sourceRoot":"","sources":["../../src/render/wizardPort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CompositionWizardView, GifPlannerView, MeasureWizardView, PhotoLogWizardView } from './wizardPort.js';
2
+ export declare function buildMeasureWizardDoc(v: MeasureWizardView): string;
3
+ export declare function buildCompositionWizardDoc(v: CompositionWizardView): string;
4
+ export declare function buildPhotoLogWizardDoc(v: PhotoLogWizardView): string;
5
+ export declare function buildGifPlannerDoc(v: GifPlannerView): string;
6
+ //# sourceMappingURL=wizardPortDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardPortDocs.d.ts","sourceRoot":"","sources":["../../src/render/wizardPortDocs.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAuGzB,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAkBlE;AAyCD,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAuB1E;AAID,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA2BpE;AA2CD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAwB5D"}