skill-calorie 0.2.2 → 0.2.3
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/SKILL.md +15 -12
- package/dist/analysis/cross.js +3 -3
- package/dist/analysis/cross.js.map +1 -1
- package/dist/analysis/series.js +3 -3
- package/dist/analysis/series.js.map +1 -1
- package/dist/analysis/utils.d.ts +11 -0
- package/dist/analysis/utils.d.ts.map +1 -1
- package/dist/analysis/utils.js +11 -0
- package/dist/analysis/utils.js.map +1 -1
- package/dist/cli/cmd_read.d.ts +5 -0
- package/dist/cli/cmd_read.d.ts.map +1 -1
- package/dist/cli/cmd_read.js +47 -11
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/keys.d.ts +5 -1
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +3 -0
- package/dist/cli/keys.js.map +1 -1
- package/dist/cli/write.d.ts +3 -1
- package/dist/cli/write.d.ts.map +1 -1
- package/dist/cli/write.js +51 -7
- package/dist/cli/write.js.map +1 -1
- package/dist/fetch/body.js +7 -7
- package/dist/fetch/body.js.map +1 -1
- package/dist/fetch/exercise.d.ts.map +1 -1
- package/dist/fetch/exercise.js +7 -3
- package/dist/fetch/exercise.js.map +1 -1
- package/dist/fetch/nutritionGoal.d.ts.map +1 -1
- package/dist/fetch/nutritionGoal.js +15 -4
- package/dist/fetch/nutritionGoal.js.map +1 -1
- package/dist/output.d.ts +15 -10
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +69 -27
- package/dist/output.js.map +1 -1
- package/dist/profile/setup.d.ts +48 -0
- package/dist/profile/setup.d.ts.map +1 -0
- package/dist/profile/setup.js +290 -0
- package/dist/profile/setup.js.map +1 -0
- package/dist/profile/update.d.ts +5 -0
- package/dist/profile/update.d.ts.map +1 -0
- package/dist/profile/update.js +65 -0
- package/dist/profile/update.js.map +1 -0
- package/dist/profile/view.d.ts +33 -0
- package/dist/profile/view.d.ts.map +1 -0
- package/dist/profile/view.js +94 -0
- package/dist/profile/view.js.map +1 -0
- package/dist/render/dietDocs.d.ts.map +1 -1
- package/dist/render/dietDocs.js +86 -49
- package/dist/render/dietDocs.js.map +1 -1
- package/dist/render/helpCenter.d.ts.map +1 -1
- package/dist/render/helpCenter.js +4 -2
- package/dist/render/helpCenter.js.map +1 -1
- package/dist/render/helpFile.d.ts +26 -0
- package/dist/render/helpFile.d.ts.map +1 -0
- package/dist/render/helpFile.js +60 -0
- package/dist/render/helpFile.js.map +1 -0
- package/dist/render/helpPaths.d.ts +22 -0
- package/dist/render/helpPaths.d.ts.map +1 -0
- package/dist/render/helpPaths.js +22 -0
- package/dist/render/helpPaths.js.map +1 -0
- package/dist/render/helpShell.d.ts +16 -0
- package/dist/render/helpShell.d.ts.map +1 -0
- package/dist/render/helpShell.js +27 -0
- package/dist/render/helpShell.js.map +1 -0
- package/dist/render/html.d.ts +1 -1
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/index.d.ts +2 -2
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +3 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/nutritionPortDocs.d.ts.map +1 -1
- package/dist/render/nutritionPortDocs.js +41 -48
- package/dist/render/nutritionPortDocs.js.map +1 -1
- package/dist/render/receipt.d.ts +4 -0
- package/dist/render/receipt.d.ts.map +1 -1
- package/dist/render/receipt.js +4 -1
- package/dist/render/receipt.js.map +1 -1
- package/dist/render/sportDocs.d.ts.map +1 -1
- package/dist/render/sportDocs.js +86 -58
- package/dist/render/sportDocs.js.map +1 -1
- package/dist/render/sportPortDocs.d.ts.map +1 -1
- package/dist/render/sportPortDocs.js +59 -52
- package/dist/render/sportPortDocs.js.map +1 -1
- package/dist/render/trendDocs.d.ts.map +1 -1
- package/dist/render/trendDocs.js +59 -52
- package/dist/render/trendDocs.js.map +1 -1
- package/dist/render/trendMiscPortDocs.d.ts.map +1 -1
- package/dist/render/trendMiscPortDocs.js +77 -56
- package/dist/render/trendMiscPortDocs.js.map +1 -1
- package/dist/render/wizardPortDocs.d.ts.map +1 -1
- package/dist/render/wizardPortDocs.js +41 -51
- package/dist/render/wizardPortDocs.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +11 -0
- package/dist/schema.js.map +1 -1
- package/dist/shared/copyArea.d.ts +54 -0
- package/dist/shared/copyArea.d.ts.map +1 -0
- package/dist/shared/copyArea.js +89 -0
- package/dist/shared/copyArea.js.map +1 -0
- package/dist/shared/docPage.d.ts +20 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +55 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/triggers/routing.d.ts +9 -7
- package/dist/triggers/routing.d.ts.map +1 -1
- package/dist/triggers/routing.js +27 -25
- package/dist/triggers/routing.js.map +1 -1
- package/dist/triggers/scene-07-profile.js +3 -3
- package/dist/triggers/scene-07-profile.js.map +1 -1
- package/dist/triggers/wake-assets.d.ts +47 -0
- package/dist/triggers/wake-assets.d.ts.map +1 -0
- package/dist/triggers/wake-assets.js +4715 -0
- package/dist/triggers/wake-assets.js.map +1 -0
- package/package.json +1 -1
- package/dist/render/profilePlate.d.ts +0 -17
- package/dist/render/profilePlate.d.ts.map +0 -1
- package/dist/render/profilePlate.js +0 -18
- package/dist/render/profilePlate.js.map +0 -1
package/dist/output.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type HtmlLanding } from 'base-paint/save-html';
|
|
1
2
|
export declare const HTML_DIR_NAME = "calorie_html";
|
|
2
3
|
export declare const HTML_EXT = ".html";
|
|
3
4
|
/** 旧版 `_sanitize_filename_part` 逐字复刻:非法字符 → `_`、trim、截断 32 字符(按字符,中文/emoji 安全)。
|
|
@@ -19,8 +20,11 @@ export declare function htmlFileName(command: string, opts: {
|
|
|
19
20
|
/** 旧版 `html_dir()`:`<SKILLS_DB_PATH>/calorie_html`,递归创建。 */
|
|
20
21
|
export declare function htmlDir(dbDir?: string): string;
|
|
21
22
|
/** 旧版 `html_path()`:`<SKILLS_DB_PATH>/calorie_html/<中文command>_<stamp>[_N].html`(完整可写路径)。
|
|
22
|
-
*
|
|
23
|
-
*
|
|
23
|
+
*
|
|
24
|
+
* 这是**初候选**的命名真值(老 `html_name` 的「同秒已有数 + 1」口径),锁在 `output-naming-87`/
|
|
25
|
+
* `output-naming-119`。⚠️ #237 起**落盘名的最终仲裁者是共用件** `saveHtmlFile`(同一通式 + `wx` 独占
|
|
26
|
+
* + 同秒递补),本函数不再参与写盘:串行无撞名时两者逐字同值;只有「基线名被删而 `_N` 留空洞」这类
|
|
27
|
+
* 畸形目录态下,计数 hint 会指向与递补不同的槽位(本票按「甲」只做减法,未把这段计数口径一并收进共用件)。 */
|
|
24
28
|
export declare function resolveDefaultHtmlPath(key: string, opts?: {
|
|
25
29
|
now?: Date;
|
|
26
30
|
dbDir?: string;
|
|
@@ -44,21 +48,22 @@ export type HtmlDelivery = {
|
|
|
44
48
|
readonly bytes: number;
|
|
45
49
|
};
|
|
46
50
|
/** 交付一次 HTML 产物(**唯一落盘点**):
|
|
47
|
-
* - `target
|
|
48
|
-
*
|
|
51
|
+
* - `target`(HELP 文件/速查台/回执的落点意图)→ **独占创建 + 同秒递补**(共用件缺省 `succession`);
|
|
52
|
+
* `explicit`(`--output`/`--html`)为用户逐字指定 → **覆盖写**(共用件 `onExists:'overwrite'`,语义不变);
|
|
53
|
+
* 否则默认 `<SKILLS_DB_PATH>/calorie_html/<中文command>_<TS>[_N].html` → **独占创建 + 同秒递补**;
|
|
49
54
|
* - 只读类失败 → `{mode:'inline'}`(调用方把产物随 envelope 回传);其余失败**原样抛出**(走回执)。
|
|
50
|
-
* 落点**解析**与写入同在一个 try 内:`calorie_html` 被同名文件占位等解析期失败同样归类(#87 返修 F4)。
|
|
55
|
+
* 落点**解析**与写入同在一个 try 内:`calorie_html` 被同名文件占位等解析期失败同样归类(#87 返修 F4)。
|
|
56
|
+
* #237:`bytes` 由共用件**写后回读**给出(实际落盘字节数);`inline` 态无文件可读,仍按 UTF-8 期望值算。 */
|
|
51
57
|
export declare function deliverHtml(input: {
|
|
52
58
|
key: string;
|
|
53
59
|
params: Record<string, unknown>;
|
|
54
60
|
explicit?: string;
|
|
55
|
-
target?:
|
|
61
|
+
target?: HtmlLanding;
|
|
56
62
|
html: string;
|
|
57
|
-
now?: Date;
|
|
58
63
|
}): HtmlDelivery;
|
|
59
|
-
/** #83 ·
|
|
60
|
-
*
|
|
61
|
-
export declare function resolveReceiptHtmlPath(command?: string
|
|
64
|
+
/** #83 · 回执落点**意图**(#237:名字里的时间戳与递补由共用件钉死,本函数只给目录 + 主体):
|
|
65
|
+
* 主体 `操作失败`(旧 `render_error_receipt.py` 的 `COMMAND_CN` 逐字对齐;回执本身也走三态,写不进去即内联)。 */
|
|
66
|
+
export declare function resolveReceiptHtmlPath(command?: string): HtmlLanding;
|
|
62
67
|
/** #119 · 旧 `html_scene_path()` 的「类型中文」段真值(`html_paths.py` OUTPUT_TYPE_LABELS)。 */
|
|
63
68
|
export declare const OUTPUT_TYPE_LABELS: Record<string, string>;
|
|
64
69
|
/** #119 · 该键的旧版类型段:写键一律 `receipt`(旧 `render_*_receipt.py` 全部走 `html_scene_path(..., 'receipt')`);
|
package/dist/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/dist/output.js
CHANGED
|
@@ -17,9 +17,17 @@
|
|
|
17
17
|
* 2. 同秒冲突用 `readdirSync` + `startsWith` 计数,不用 `glob`——命令名已 sanitize,无 `[]` 元字符,
|
|
18
18
|
* 语义等价且不引入依赖;
|
|
19
19
|
* 3. 显式 `--output` 路径自动建父目录(老家直接 `open()` 会 ENOENT);对旧行为是超集。
|
|
20
|
+
*
|
|
21
|
+
* #237 迁移(维护者 2026-09-12 裁决 8「放在 base-paint 吧,是绘制出 html 后的相关操作」+ 地图 #208 的 Q7
|
|
22
|
+
* 裁「乙」=收成共用位):**独占创建 + 同秒递补那一小块收进共用件** `base-paint/save-html` 的
|
|
23
|
+
* `saveHtmlFile`(本模块原先自持的 `nextExclusiveCandidate`/`writeFileExclusiveWithRetry` 与
|
|
24
|
+
* `skill-bill/src/output.ts` 的同名件逐行等价=铁律二禁止的两份实现)。本件**保留**卡路里特有的三态交付
|
|
25
|
+
* (`file`/`inline`/`text`)与只读回退(`READONLY_WRITE_CODES`)——那是本技能既有的对外行为,
|
|
26
|
+
* 不并入共用件(记账线有意**不**做回退,两者的取舍正面不同,见 `skill-bill/src/output.ts` 尾注)。
|
|
20
27
|
*/
|
|
21
|
-
import { mkdirSync, readdirSync
|
|
22
|
-
import { dirname, join, resolve } from 'node:path';
|
|
28
|
+
import { mkdirSync, readdirSync } from 'node:fs';
|
|
29
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
30
|
+
import { saveHtmlFile } from 'base-paint/save-html';
|
|
23
31
|
import { CALORIE_COMBOS } from './cli/keys.js';
|
|
24
32
|
import { CalorieRenderError } from './render/errors.js';
|
|
25
33
|
import { resolveDbDir } from './paths.js';
|
|
@@ -93,10 +101,10 @@ export function htmlDir(dbDir = resolveDbDir()) {
|
|
|
93
101
|
mkdirSync(d, { recursive: true });
|
|
94
102
|
return d;
|
|
95
103
|
}
|
|
96
|
-
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
|
|
104
|
+
/** #119 · 缺省落点的**段拼接**:`<覆盖|title>[_回执][_动态段][_内容标识]`
|
|
105
|
+
* (旧 `html_scene_path()` 类型段 + `_cmd_maps.py` 动态段 + `html_name(suffix=)` 内容标识段)。
|
|
106
|
+
* #237 起它只出**落点意图**(目录 + 文件名主体):时间戳与同秒递补由共用件钉死。 */
|
|
107
|
+
function defaultLanding(key, opts = {}) {
|
|
100
108
|
const d = htmlDir(opts.dbDir ?? resolveDbDir());
|
|
101
109
|
const segs = [LEGACY_COMMAND_OVERRIDES[key] ?? chineseCommandFor(key)];
|
|
102
110
|
const type = sceneTypeFor(key);
|
|
@@ -108,13 +116,40 @@ export function resolveDefaultHtmlPath(key, opts = {}) {
|
|
|
108
116
|
const suf = opts.suffix ? sanitizeFilenamePart(opts.suffix) : '';
|
|
109
117
|
if (suf)
|
|
110
118
|
segs.push(suf);
|
|
111
|
-
return
|
|
119
|
+
return { dir: d, stem: segs.join('_') };
|
|
120
|
+
}
|
|
121
|
+
/** 旧版 `html_path()`:`<SKILLS_DB_PATH>/calorie_html/<中文command>_<stamp>[_N].html`(完整可写路径)。
|
|
122
|
+
*
|
|
123
|
+
* 这是**初候选**的命名真值(老 `html_name` 的「同秒已有数 + 1」口径),锁在 `output-naming-87`/
|
|
124
|
+
* `output-naming-119`。⚠️ #237 起**落盘名的最终仲裁者是共用件** `saveHtmlFile`(同一通式 + `wx` 独占
|
|
125
|
+
* + 同秒递补),本函数不再参与写盘:串行无撞名时两者逐字同值;只有「基线名被删而 `_N` 留空洞」这类
|
|
126
|
+
* 畸形目录态下,计数 hint 会指向与递补不同的槽位(本票按「甲」只做减法,未把这段计数口径一并收进共用件)。 */
|
|
127
|
+
export function resolveDefaultHtmlPath(key, opts = {}) {
|
|
128
|
+
const { dir, stem } = defaultLanding(key, opts);
|
|
129
|
+
return join(dir, htmlFileName(stem, { dir, now: opts.now ?? new Date() }));
|
|
112
130
|
}
|
|
113
131
|
/** 显式 `--output` / `--html` 落点:命名规则不参与,只保证父目录存在。 */
|
|
114
132
|
export function resolveExplicitHtmlPath(file) {
|
|
115
133
|
mkdirSync(dirname(file), { recursive: true });
|
|
116
134
|
return file;
|
|
117
135
|
}
|
|
136
|
+
/* ── #128 · 并发原子落盘:独占创建 + 同秒递补(**#237 起收进共用件**) ─────────────────────
|
|
137
|
+
*
|
|
138
|
+
* 根因(照抄保留):默认落点曾是「`readdirSync` 计数选名 → `writeFileSync`(`w` 覆盖)」两步,
|
|
139
|
+
* 两步之间无独占性;多进程并发同秒时都选同一路径 → 后写覆盖先写,
|
|
140
|
+
* 用户按 envelope 的 `data.output` 可能打开另一次调用的产物(#91 红队 3 轮 ×5 实测)。
|
|
141
|
+
* #91 后 `help.center` file 态约 1 MB,写窗口 200–300 ms,撞名概率显著放大。
|
|
142
|
+
*
|
|
143
|
+
* 修法(#128):`flag:'wx'` 独占创建,`EEXIST` 时递增 `_N` 重试(原子,无需锁)。
|
|
144
|
+
* 本模块原先自持 `nextExclusiveCandidate`/`writeFileExclusiveWithRetry`;#237 起这两支由共用件
|
|
145
|
+
* `base-paint/save-html` 的 `saveHtmlFile` 唯一持有(`onExists:'succession'` = 缺省),本模块只给落点意图:
|
|
146
|
+
* - 串行语义不变:首选仍是通式初候选,首试即中 → 路径与旧版逐字一致;
|
|
147
|
+
* - 并发下由文件系统仲裁:败者 `EEXIST` → `_N+1` 递补,保证每个 envelope 的落点内容即本次产物;
|
|
148
|
+
* - 大小写不敏感(Windows `normcase`,#87 F2)由 `wx` 天然覆盖:`.HTML` 占位同样 `EEXIST`;
|
|
149
|
+
* - 仅 `EEXIST` 递补;只读类(`EACCES` 等)仍走 #83 内联回退,其余原样抛出走回执;
|
|
150
|
+
* - 显式 `--output`/`--html` 保持覆盖语义(共用件 `onExists:'overwrite'`),不参与递补:那是用户逐字指定的落点;
|
|
151
|
+
* - `target`(HELP 文件/速查台/回执落点)与默认路径同走独占递补。
|
|
152
|
+
*/
|
|
118
153
|
/* ── #83 · 三态交付:落盘/只读回退(M4「必须渲染并打开」的机械保证) ───────────────────────── */
|
|
119
154
|
/** 只读/沙箱类写失败码 → ② 内联态(产物随 envelope 回传,绝不因写不进去而文字答)。
|
|
120
155
|
* **结构错**(`EEXIST`/`ENOTDIR`/`EISDIR`/`ENAMETOOLONG` 等)**不**回退:那是落点本身非法,
|
|
@@ -125,37 +160,44 @@ export function isReadOnlyWriteFailure(e) {
|
|
|
125
160
|
return typeof code === 'string' && READONLY_WRITE_CODES.includes(code);
|
|
126
161
|
}
|
|
127
162
|
/** 交付一次 HTML 产物(**唯一落盘点**):
|
|
128
|
-
* - `target
|
|
129
|
-
*
|
|
163
|
+
* - `target`(HELP 文件/速查台/回执的落点意图)→ **独占创建 + 同秒递补**(共用件缺省 `succession`);
|
|
164
|
+
* `explicit`(`--output`/`--html`)为用户逐字指定 → **覆盖写**(共用件 `onExists:'overwrite'`,语义不变);
|
|
165
|
+
* 否则默认 `<SKILLS_DB_PATH>/calorie_html/<中文command>_<TS>[_N].html` → **独占创建 + 同秒递补**;
|
|
130
166
|
* - 只读类失败 → `{mode:'inline'}`(调用方把产物随 envelope 回传);其余失败**原样抛出**(走回执)。
|
|
131
|
-
* 落点**解析**与写入同在一个 try 内:`calorie_html` 被同名文件占位等解析期失败同样归类(#87 返修 F4)。
|
|
167
|
+
* 落点**解析**与写入同在一个 try 内:`calorie_html` 被同名文件占位等解析期失败同样归类(#87 返修 F4)。
|
|
168
|
+
* #237:`bytes` 由共用件**写后回读**给出(实际落盘字节数);`inline` 态无文件可读,仍按 UTF-8 期望值算。 */
|
|
132
169
|
export function deliverHtml(input) {
|
|
133
|
-
const bytes = Buffer.byteLength(input.html, 'utf8');
|
|
134
170
|
try {
|
|
135
|
-
|
|
171
|
+
if (input.target !== undefined) {
|
|
172
|
+
return saveHtmlFile({ dir: input.target.dir, stem: input.target.stem, html: input.html });
|
|
173
|
+
}
|
|
174
|
+
if (input.explicit !== undefined) {
|
|
175
|
+
// #83 返修 R-1(红队 S1):落点可为**相对路径**(`SKILLS_DB_PATH` 本身可为相对,`--output` 亦文档化为
|
|
176
|
+
// 「任意路径」),而 `delivery.path` 契约要求绝对路径。此前把原样字符串回传 → `buildDelivery` 抛
|
|
177
|
+
// `bad-input` → **产物已写盘却 exit 2**。共用件回执的 `path` 恒为绝对路径(`resolve(dir)` + 文件名)。
|
|
178
|
+
// #237:走 `file`(确切文件名)而不是把 `basename(abs)` 当 `stem`——两件事各走各的口子。
|
|
179
|
+
const abs = resolve(input.explicit);
|
|
180
|
+
return saveHtmlFile({
|
|
181
|
+
dir: dirname(abs), file: basename(abs), html: input.html, onExists: 'overwrite',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const landing = defaultLanding(input.key, {
|
|
136
185
|
params: input.params,
|
|
137
186
|
suffix: writeSuffixFor(input.key, input.params),
|
|
138
|
-
now: input.now,
|
|
139
187
|
});
|
|
140
|
-
|
|
141
|
-
// 「任意路径」),而 `delivery.path` 契约要求绝对路径。此前把原样字符串回传 → `buildDelivery` 抛
|
|
142
|
-
// `bad-input` → **产物已写盘却 exit 2**。此处与 `writeFileSync` 同口径 `resolve`(写的就是它),
|
|
143
|
-
// 只归一化回传值,落盘行为与旧版逐字一致。
|
|
144
|
-
const written = resolve(target);
|
|
145
|
-
writeFileSync(resolveExplicitHtmlPath(written), input.html, 'utf8');
|
|
146
|
-
return { mode: 'file', path: written, bytes };
|
|
188
|
+
return saveHtmlFile({ dir: landing.dir, stem: landing.stem, html: input.html });
|
|
147
189
|
}
|
|
148
190
|
catch (e) {
|
|
149
|
-
if (isReadOnlyWriteFailure(e))
|
|
150
|
-
return { mode: 'inline', reason: e.message, bytes };
|
|
191
|
+
if (isReadOnlyWriteFailure(e)) {
|
|
192
|
+
return { mode: 'inline', reason: e.message, bytes: Buffer.byteLength(input.html, 'utf8') };
|
|
193
|
+
}
|
|
151
194
|
throw e;
|
|
152
195
|
}
|
|
153
196
|
}
|
|
154
|
-
/** #83 ·
|
|
155
|
-
*
|
|
156
|
-
export function resolveReceiptHtmlPath(command = '操作失败'
|
|
157
|
-
|
|
158
|
-
return join(d, htmlFileName(command, { dir: d, now }));
|
|
197
|
+
/** #83 · 回执落点**意图**(#237:名字里的时间戳与递补由共用件钉死,本函数只给目录 + 主体):
|
|
198
|
+
* 主体 `操作失败`(旧 `render_error_receipt.py` 的 `COMMAND_CN` 逐字对齐;回执本身也走三态,写不进去即内联)。 */
|
|
199
|
+
export function resolveReceiptHtmlPath(command = '操作失败') {
|
|
200
|
+
return { dir: htmlDir(), stem: command };
|
|
159
201
|
}
|
|
160
202
|
/** #119 · 旧 `html_scene_path()` 的「类型中文」段真值(`html_paths.py` OUTPUT_TYPE_LABELS)。 */
|
|
161
203
|
export const OUTPUT_TYPE_LABELS = { process: '过程', result: '结果', receipt: '回执' };
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** #179 · 「设置资料」:设置档案/设活动量/改档案三条写入词共用的写前页(预检确认页)。
|
|
2
|
+
*
|
|
3
|
+
* 一页一事:字段面(身高/年龄/性别/活动量/备注)就是本子功能的题目,
|
|
4
|
+
* 故这一页住本文件,`update.ts` 要用就从同目录取用(设计 §一,铁律五不另起转手件)。
|
|
5
|
+
*
|
|
6
|
+
* 取数:档案现值走 `fetch/profile.getProfile`(**不用** `buildProfileView`——它缺档案即抛
|
|
7
|
+
* `missing-data`,会把预检页变成没有产物);最新体重走同目录 `view.profileSnapshot`
|
|
8
|
+
* 那一份查询(同一个取数不留两处)。页面层不自算口径:活动量系数取
|
|
9
|
+
* `analysis/utils.TDEE_ACTIVITY_FACTORS` 正本,TDEE 走同文件 `calcTdee`(缺身高/年龄/
|
|
10
|
+
* 性别/体重时**不算**,不填默认值冒充)。
|
|
11
|
+
* 未知参数抛 `bad-input`(与 `render/wizardPort.ts` 同字面「不支持字段: 」,出口 exit 2)。
|
|
12
|
+
*/
|
|
13
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
14
|
+
import type { CrudReceipt } from '../render/receipt.js';
|
|
15
|
+
import type { ProfileRow } from '../fetch/profile.js';
|
|
16
|
+
export interface ProfileSettingView {
|
|
17
|
+
/** 参数指定的写入词(三条之一);缺省=三条全列。 */
|
|
18
|
+
wakeWord: string | null;
|
|
19
|
+
/** 改前值(空库为 null,预检页不阻断)。 */
|
|
20
|
+
before: ProfileRow | null;
|
|
21
|
+
/** 参数预填的草稿(AI 已收集的值)。 */
|
|
22
|
+
draft: {
|
|
23
|
+
camel: string;
|
|
24
|
+
label: string;
|
|
25
|
+
value: string;
|
|
26
|
+
}[];
|
|
27
|
+
filledCount: number;
|
|
28
|
+
/** 活动量五档:档位/入库值/系数/TDEE 影响(四要素齐备才算,否则 null)。 */
|
|
29
|
+
activityChoices: {
|
|
30
|
+
level: string;
|
|
31
|
+
label: string;
|
|
32
|
+
factor: number;
|
|
33
|
+
tdee: number | null;
|
|
34
|
+
}[];
|
|
35
|
+
latestWeightKg: number | null;
|
|
36
|
+
prompt: string;
|
|
37
|
+
}
|
|
38
|
+
/** ① 取数:改前值(`getProfile`,可缺)+ 待写草稿+活动量五档+最近体重+复制 prompt。 */
|
|
39
|
+
export declare function buildProfileSettingView(db: DatabaseSync, raw: Record<string, unknown>): ProfileSettingView;
|
|
40
|
+
/** ② 写前页整页:三条写入词各自的字段与槽位 + 改前→改后对照 + 复制 prompt。
|
|
41
|
+
*
|
|
42
|
+
* 复制区(#239):prompt/数据/日志三样一个 `copyArea` 出——复制 prompt 区与今天逐字相同,
|
|
43
|
+
* 数据区多接一颗「复制日志」(日志里写的是产出本页那条命令,本页不写库)。 */
|
|
44
|
+
export declare function buildProfileSettingDoc(v: ProfileSettingView): string;
|
|
45
|
+
/** ③ 两条写命令(设置档案/设活动量)的写后回执页;改档案回执页在 `update.ts`(它的对照区不同)。
|
|
46
|
+
* `command` = AI 真跑那条写命令的原文(`cli/write.ts` 从分派处传进来),进「复制日志」第 4 段。 */
|
|
47
|
+
export declare function buildProfileSettingReceiptDoc(receipt: CrudReceipt, command: string): string;
|
|
48
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/profile/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAiCtD,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4BAA4B;IAC5B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,yBAAyB;IACzB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,eAAe,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IACzF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAoGD,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAgB1G;AA4CD;;;2CAG2C;AAC3C,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAqDpE;AAED;sEACsE;AACtE,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyC3F"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { renderDataTable, renderDisclosure, renderKpiGrid, renderParamForm } from 'base-paint/blocks';
|
|
2
|
+
import { ACTIVITY_LEVELS } from '../kcal.js';
|
|
3
|
+
import { ACTIVITY_LEVEL_LABELS, TDEE_ACTIVITY_FACTORS, calcTdee } from '../analysis/utils.js';
|
|
4
|
+
import { CalorieRenderError } from '../render/errors.js';
|
|
5
|
+
import { nowStamp } from '../render/receipt.js';
|
|
6
|
+
import { assembleDocPage, metricsOf } from '../shared/docPage.js';
|
|
7
|
+
import { copyArea, copyLog } from '../shared/copyArea.js';
|
|
8
|
+
import { profileSnapshot, PROFILE_SOURCE } from './view.js';
|
|
9
|
+
const DOC_VERSION = '0.1.0';
|
|
10
|
+
const DOC_SKILL = 'calorie';
|
|
11
|
+
const DOC_TITLE = '卡路里·档案预检';
|
|
12
|
+
/** 本页由哪条命令产出(写进「复制日志」第 4 段,可照抄重跑)。 */
|
|
13
|
+
const WIZARD_KEY = 'calorie.view.profile-wizard';
|
|
14
|
+
/** 三条写入词(HELP `scene-07-profile.ts` 的 name,逐字)。 */
|
|
15
|
+
const SET_WORD = '设置档案';
|
|
16
|
+
const ACTIVITY_WORD = '设活动量';
|
|
17
|
+
const UPDATE_WORD = '改档案';
|
|
18
|
+
const WAKE_WORDS = [SET_WORD, ACTIVITY_WORD, UPDATE_WORD];
|
|
19
|
+
/** 设置档案 4 项(`scene-07-profile.ts:5` 的 data_fields);参数名与写命令同形。 */
|
|
20
|
+
const SET_FIELDS = [
|
|
21
|
+
{ camel: 'heightCm', label: '身高(cm)' },
|
|
22
|
+
{ camel: 'age', label: '年龄' },
|
|
23
|
+
{ camel: 'gender', label: '性别(male/female 或 男/女)' },
|
|
24
|
+
{ camel: 'activityLevel', label: '活动量(久坐/轻度/中度/活跃/高度活跃)' },
|
|
25
|
+
];
|
|
26
|
+
/** 改档案 5 项(单列,含备注;`scene-07-profile.ts:7`)。 */
|
|
27
|
+
const NOTE_FIELD = { camel: 'note', label: '备注' };
|
|
28
|
+
const UPDATE_FIELDS = [...SET_FIELDS, NOTE_FIELD];
|
|
29
|
+
const NUM_FIELDS = ['heightCm', 'age'];
|
|
30
|
+
function strOrUndef(raw, field) {
|
|
31
|
+
if (raw === undefined || raw === null)
|
|
32
|
+
return undefined;
|
|
33
|
+
if (typeof raw !== 'string')
|
|
34
|
+
throw new CalorieRenderError('bad-input', '参数 ' + field + ' 须为字符串');
|
|
35
|
+
const s = raw.trim();
|
|
36
|
+
return s === '' ? undefined : s;
|
|
37
|
+
}
|
|
38
|
+
function numOrUndef(raw, field) {
|
|
39
|
+
if (raw === undefined || raw === null || raw === '')
|
|
40
|
+
return undefined;
|
|
41
|
+
const n = typeof raw === 'number' ? raw : Number(String(raw).trim());
|
|
42
|
+
if (!Number.isFinite(n))
|
|
43
|
+
throw new CalorieRenderError('bad-input', '参数 ' + field + ' 须为 number:' + String(raw));
|
|
44
|
+
return n;
|
|
45
|
+
}
|
|
46
|
+
/** 参数 → 草稿(键名与写命令同形;值只为展示,写入仍由三条写命令各自校验)。 */
|
|
47
|
+
function draftOf(raw) {
|
|
48
|
+
const allowed = new Set(['wakeWord', 'key', ...UPDATE_FIELDS.map((f) => f.camel)]);
|
|
49
|
+
for (const k of Object.keys(raw)) {
|
|
50
|
+
if (!allowed.has(k))
|
|
51
|
+
throw new CalorieRenderError('bad-input', '不支持字段: ' + k);
|
|
52
|
+
}
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const f of UPDATE_FIELDS) {
|
|
55
|
+
const v = NUM_FIELDS.includes(f.camel) ? numOrUndef(raw[f.camel], f.camel) : strOrUndef(raw[f.camel], f.camel);
|
|
56
|
+
if (v !== undefined)
|
|
57
|
+
out.push({ camel: f.camel, label: f.label, value: String(v) });
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/** 参数名(camel)→ 档案行取值:`heightCm`/`activityLevel` 与库列名不同,逐条映射(不用宽化断言)。 */
|
|
62
|
+
function profileField(camel, p) {
|
|
63
|
+
if (!p)
|
|
64
|
+
return null;
|
|
65
|
+
switch (camel) {
|
|
66
|
+
case 'heightCm': return p.height_cm;
|
|
67
|
+
case 'activityLevel': return p.activity_level;
|
|
68
|
+
case 'age': return p.age;
|
|
69
|
+
case 'gender': return p.gender;
|
|
70
|
+
case 'note': return p.note;
|
|
71
|
+
default: return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** TDEE 影响:草稿优先于库值;四要素缺一即 null(不拿默认值算)。 */
|
|
75
|
+
function tdeeChoices(before, draft, latestWeightKg) {
|
|
76
|
+
const pick = (camel) => draft.find((d) => d.camel === camel)?.value ?? profileField(camel, before);
|
|
77
|
+
const height = Number(pick('heightCm'));
|
|
78
|
+
const age = Number(pick('age'));
|
|
79
|
+
const gender = pick('gender');
|
|
80
|
+
const ready = Number.isFinite(height) && height > 0 && Number.isFinite(age) && age > 0
|
|
81
|
+
&& typeof gender === 'string' && gender !== '' && latestWeightKg !== null;
|
|
82
|
+
return ACTIVITY_LEVELS.map((level) => ({
|
|
83
|
+
level,
|
|
84
|
+
label: ACTIVITY_LEVEL_LABELS[level],
|
|
85
|
+
factor: TDEE_ACTIVITY_FACTORS[level],
|
|
86
|
+
tdee: ready ? calcTdee(latestWeightKg, height, age, gender, level) : null,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
/** 该写入词要写的字段(设置档案不含备注;设活动量只写活动量)。 */
|
|
90
|
+
function fieldsForWord(wakeWord) {
|
|
91
|
+
if (wakeWord === SET_WORD)
|
|
92
|
+
return SET_FIELDS;
|
|
93
|
+
if (wakeWord === ACTIVITY_WORD)
|
|
94
|
+
return [SET_FIELDS[3]];
|
|
95
|
+
return UPDATE_FIELDS;
|
|
96
|
+
}
|
|
97
|
+
/** 写命令段(确认后跑哪条;三条单命令入口,参数名与写命令同形)。 */
|
|
98
|
+
function writeCommand(wakeWord, picked) {
|
|
99
|
+
const json = JSON.stringify(picked);
|
|
100
|
+
if (wakeWord === UPDATE_WORD)
|
|
101
|
+
return 'calorie-cmd-read calorie.profile.update --params \'{"fields":' + json + '}\'';
|
|
102
|
+
if (wakeWord === ACTIVITY_WORD)
|
|
103
|
+
return 'calorie-cmd-read calorie.profile.activity --params \'' + json + '\'';
|
|
104
|
+
return 'calorie-cmd-read calorie.profile.set --params \'' + json + '\'';
|
|
105
|
+
}
|
|
106
|
+
function settingPrompt(wakeWord, draft, before) {
|
|
107
|
+
if (draft.length === 0) {
|
|
108
|
+
return '// 请至少填 1 项(设置档案 4 项:身高/年龄/性别/活动量;改档案 5 项另含备注;设活动量 5 档见下方对照表)';
|
|
109
|
+
}
|
|
110
|
+
const lines = draft.map((d) => '- ' + d.label.replace(/(.*)$/, '') + ':' + d.value);
|
|
111
|
+
const head = '请帮我' + (wakeWord ?? '写档案') + '到卡路里\n\n参数:'
|
|
112
|
+
+ (wakeWord ? '\n- 写入词:' + wakeWord : '')
|
|
113
|
+
+ '\n' + lines.join('\n');
|
|
114
|
+
const beforeNote = before
|
|
115
|
+
? '\n\n改前值已在页面「档案现值(改前值)」区列出;写库前与库内现值核对,不一致停下问我。'
|
|
116
|
+
: '\n\n库内还没有档案(空库):本次是首次设置,无改前值可比对。';
|
|
117
|
+
if (!wakeWord)
|
|
118
|
+
return head + beforeNote;
|
|
119
|
+
const keep = fieldsForWord(wakeWord).map((f) => f.camel);
|
|
120
|
+
const picked = {};
|
|
121
|
+
for (const d of draft) {
|
|
122
|
+
if (!keep.includes(d.camel))
|
|
123
|
+
continue;
|
|
124
|
+
picked[d.camel] = d.camel === 'note' ? d.value : (NUM_FIELDS.includes(d.camel) ? Number(d.value) : d.value);
|
|
125
|
+
}
|
|
126
|
+
if (Object.keys(picked).length === 0)
|
|
127
|
+
return head + beforeNote;
|
|
128
|
+
return head + beforeNote + '\n\n命令:\n```bash\n' + writeCommand(wakeWord, picked) + '\n```\n完成后返回写库回执。';
|
|
129
|
+
}
|
|
130
|
+
/** ① 取数:改前值(`getProfile`,可缺)+ 待写草稿+活动量五档+最近体重+复制 prompt。 */
|
|
131
|
+
export function buildProfileSettingView(db, raw) {
|
|
132
|
+
const draft = draftOf(raw);
|
|
133
|
+
const rawWord = strOrUndef(raw['wakeWord'], 'wakeWord');
|
|
134
|
+
if (rawWord !== undefined && !WAKE_WORDS.includes(rawWord)) {
|
|
135
|
+
throw new CalorieRenderError('bad-input', '参数 wakeWord 非法(' + WAKE_WORDS.join('/') + '):' + rawWord);
|
|
136
|
+
}
|
|
137
|
+
const { profile, latestWeightKg } = profileSnapshot(db);
|
|
138
|
+
return {
|
|
139
|
+
wakeWord: rawWord ?? null,
|
|
140
|
+
before: profile,
|
|
141
|
+
draft,
|
|
142
|
+
filledCount: draft.length,
|
|
143
|
+
activityChoices: tdeeChoices(profile, draft, latestWeightKg),
|
|
144
|
+
latestWeightKg,
|
|
145
|
+
prompt: settingPrompt(rawWord ?? null, draft, profile),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function beforeTable(v) {
|
|
149
|
+
if (!v.before)
|
|
150
|
+
return renderDataTable({
|
|
151
|
+
columns: [{ key: 'field', label: '字段' }, { key: 'value', label: '改前值' }],
|
|
152
|
+
rows: [],
|
|
153
|
+
emptyText: '尚无档案(空库;本次为首次设置,无改前值)',
|
|
154
|
+
});
|
|
155
|
+
const b = v.before;
|
|
156
|
+
return renderDataTable({
|
|
157
|
+
columns: [{ key: 'field', label: '字段' }, { key: 'before', label: '改前值' }, { key: 'after', label: '本次拟写' }],
|
|
158
|
+
rows: UPDATE_FIELDS.map((f) => {
|
|
159
|
+
const hit = v.draft.find((d) => d.camel === f.camel);
|
|
160
|
+
const prev = profileField(f.camel, b);
|
|
161
|
+
return { field: f.label.replace(/(.*)$/, ''), before: prev ?? '—', after: hit ? hit.value : '(未改)' };
|
|
162
|
+
}),
|
|
163
|
+
caption: '改档案 5 项:改前 → 改后对照(改前值取自 user_profile#1)',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function activityTable(v) {
|
|
167
|
+
return renderDataTable({
|
|
168
|
+
columns: [
|
|
169
|
+
{ key: 'label', label: '档位' }, { key: 'level', label: '入库值' },
|
|
170
|
+
{ key: 'factor', label: '系数' }, { key: 'tdee', label: 'TDEE 影响' },
|
|
171
|
+
],
|
|
172
|
+
rows: v.activityChoices.map((c) => ({
|
|
173
|
+
label: c.label, level: c.level, factor: c.factor,
|
|
174
|
+
tdee: c.tdee === null ? '—(缺身高/年龄/性别/体重,不算)' : c.tdee + ' 卡',
|
|
175
|
+
})),
|
|
176
|
+
caption: '设活动量 5 档:TDEE = 基础代谢(Mifflin-St Jeor)× 系数'
|
|
177
|
+
+ (v.latestWeightKg === null ? ';最近体重缺,故只列系数' : ';体重取最近一次 ' + v.latestWeightKg + ' kg'),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function formOf(v, fields) {
|
|
181
|
+
return renderParamForm({
|
|
182
|
+
fields: fields.map((f) => {
|
|
183
|
+
const hit = v.draft.find((d) => d.camel === f.camel);
|
|
184
|
+
return { name: f.camel, label: f.label, value: hit ? hit.value : '' };
|
|
185
|
+
}),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/** ② 写前页整页:三条写入词各自的字段与槽位 + 改前→改后对照 + 复制 prompt。
|
|
189
|
+
*
|
|
190
|
+
* 复制区(#239):prompt/数据/日志三样一个 `copyArea` 出——复制 prompt 区与今天逐字相同,
|
|
191
|
+
* 数据区多接一颗「复制日志」(日志里写的是产出本页那条命令,本页不写库)。 */
|
|
192
|
+
export function buildProfileSettingDoc(v) {
|
|
193
|
+
const current = v.before?.activity_level ?? null;
|
|
194
|
+
const currentRow = v.activityChoices.find((c) => c.level === current);
|
|
195
|
+
const envelope = {
|
|
196
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: WIZARD_KEY,
|
|
197
|
+
data: {
|
|
198
|
+
metrics: metricsOf({
|
|
199
|
+
filledCount: v.filledCount,
|
|
200
|
+
hasProfile: v.before ? 1 : 0,
|
|
201
|
+
latestWeightKg: v.latestWeightKg,
|
|
202
|
+
activityLevels: v.activityChoices.length,
|
|
203
|
+
tdeeReady: v.activityChoices[0]?.tdee === null ? 0 : 1,
|
|
204
|
+
}),
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
const content = [
|
|
208
|
+
renderKpiGrid([
|
|
209
|
+
// #179 内容级排版:KPI 卡的 value 槽是给一个**短值**的(28px 粗体),19 字长句塞进去
|
|
210
|
+
// 在 390px 下会折成 4 行、把整排卡片一起拉高 → 值只写入词本身,长句落 12px 的 detail。
|
|
211
|
+
{
|
|
212
|
+
label: '写入词',
|
|
213
|
+
value: v.wakeWord ?? '三条全列',
|
|
214
|
+
detail: v.wakeWord ? '填表 → 复制 prompt → AI 写库' : '设置档案/改档案/设活动量',
|
|
215
|
+
},
|
|
216
|
+
{ label: '已填', value: v.filledCount + ' 项', detail: '至少 1 项才有 prompt' },
|
|
217
|
+
{ label: '改前值', value: v.before ? '有' : '无', detail: v.before ? '档案已在库' : '空库:首次设置' },
|
|
218
|
+
{ label: '当前活动量', value: current ? (currentRow?.label ?? current) : '—', detail: current && currentRow ? '系数 ' + currentRow.factor : '' },
|
|
219
|
+
{ label: '最近体重', value: v.latestWeightKg === null ? '—' : v.latestWeightKg + ' kg', detail: '推荐活动量与 TDEE 用它' },
|
|
220
|
+
]),
|
|
221
|
+
renderDisclosure({ title: '档案现值(改前值,user_profile#1)', contentHtml: beforeTable(v), open: true }),
|
|
222
|
+
renderDisclosure({ title: '设置档案 4 项(身高/年龄/性别/活动量)', contentHtml: formOf(v, SET_FIELDS), open: true }),
|
|
223
|
+
renderDisclosure({ title: '改档案 5 项(另含备注;空库无改前值)', contentHtml: formOf(v, UPDATE_FIELDS) }),
|
|
224
|
+
renderDisclosure({ title: '设活动量 5 档(系数与 TDEE 影响)', contentHtml: activityTable(v) }),
|
|
225
|
+
copyArea({
|
|
226
|
+
title: '复制数据',
|
|
227
|
+
prompt: v.prompt,
|
|
228
|
+
data: { envelope },
|
|
229
|
+
log: {
|
|
230
|
+
envelope,
|
|
231
|
+
copyLog: copyLog({
|
|
232
|
+
command: 'calorie-cmd-read ' + WIZARD_KEY, source: PROFILE_SOURCE,
|
|
233
|
+
actionAt: nowStamp(), version: DOC_VERSION,
|
|
234
|
+
}),
|
|
235
|
+
},
|
|
236
|
+
}),
|
|
237
|
+
].join('');
|
|
238
|
+
return assembleDocPage({
|
|
239
|
+
docTitle: DOC_TITLE,
|
|
240
|
+
title: '档案预检',
|
|
241
|
+
eyebrow: '基础信息 · 写前预检(填表→复制 prompt→AI 写库)',
|
|
242
|
+
subtitle: '改前值取自库内现值;写入仍走三条写命令,本页不写库',
|
|
243
|
+
content,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
/** ③ 两条写命令(设置档案/设活动量)的写后回执页;改档案回执页在 `update.ts`(它的对照区不同)。
|
|
247
|
+
* `command` = AI 真跑那条写命令的原文(`cli/write.ts` 从分派处传进来),进「复制日志」第 4 段。 */
|
|
248
|
+
export function buildProfileSettingReceiptDoc(receipt, command) {
|
|
249
|
+
const envelope = {
|
|
250
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: receipt.meta.wakeWord,
|
|
251
|
+
data: { ok: true, message: receipt.summary },
|
|
252
|
+
};
|
|
253
|
+
const content = [
|
|
254
|
+
renderKpiGrid([
|
|
255
|
+
{ label: '动作', value: receipt.scene, detail: 'op=' + receipt.op },
|
|
256
|
+
{ label: '影响行数', value: receipt.affectedRows + ' 行', detail: receipt.affectedRowsSource },
|
|
257
|
+
{ label: '写入字段', value: receipt.writtenFields.length + ' 项', detail: receipt.writtenFields.join('、') || '—' },
|
|
258
|
+
]),
|
|
259
|
+
renderDataTable({
|
|
260
|
+
columns: [{ key: 'k', label: '项' }, { key: 'v', label: '值' }],
|
|
261
|
+
rows: [
|
|
262
|
+
{ k: '摘要', v: receipt.summary },
|
|
263
|
+
{ k: '记录 id', v: receipt.recordId === null ? 'n/a' : String(receipt.recordId) },
|
|
264
|
+
{ k: 'id 口径', v: receipt.idSource },
|
|
265
|
+
{ k: '写入时刻', v: receipt.meta.actionAt },
|
|
266
|
+
{ k: '无变化', v: receipt.noChange ? '是' : '否' },
|
|
267
|
+
],
|
|
268
|
+
caption: receipt.meta.entityType + '(写库回执)',
|
|
269
|
+
}),
|
|
270
|
+
copyArea({
|
|
271
|
+
title: '复制数据',
|
|
272
|
+
data: { envelope },
|
|
273
|
+
log: {
|
|
274
|
+
envelope,
|
|
275
|
+
copyLog: copyLog({
|
|
276
|
+
command, source: receipt.meta.source, m5Line: receipt.m5Line,
|
|
277
|
+
actionAt: receipt.meta.actionAt, version: DOC_VERSION,
|
|
278
|
+
}),
|
|
279
|
+
},
|
|
280
|
+
}),
|
|
281
|
+
].join('');
|
|
282
|
+
return assembleDocPage({
|
|
283
|
+
docTitle: DOC_TITLE,
|
|
284
|
+
title: receipt.scene + ' · 回执',
|
|
285
|
+
eyebrow: '基础信息 · 写后回执(M5 契约 v' + receipt.m5Contract + ')',
|
|
286
|
+
subtitle: receipt.m5Line,
|
|
287
|
+
content,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=setup.js.map
|