skill-schedule 0.1.0 → 0.2.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/SKILL.md +99 -0
- package/dist/cli/cmd_read.js +87 -21
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/help/helpFile.d.ts +90 -0
- package/dist/help/helpFile.d.ts.map +1 -0
- package/dist/help/helpFile.js +173 -0
- package/dist/help/helpFile.js.map +1 -0
- package/dist/help/helpPaths.d.ts +13 -0
- package/dist/help/helpPaths.d.ts.map +1 -0
- package/dist/help/helpPaths.js +46 -0
- package/dist/help/helpPaths.js.map +1 -0
- package/dist/help/output.d.ts +21 -0
- package/dist/help/output.d.ts.map +1 -0
- package/dist/help/output.js +92 -0
- package/dist/help/output.js.map +1 -0
- package/dist/help/scenes/help-assets.d.ts +97 -0
- package/dist/help/scenes/help-assets.d.ts.map +1 -0
- package/dist/help/scenes/help-assets.js +2148 -0
- package/dist/help/scenes/help-assets.js.map +1 -0
- package/dist/render/html.d.ts +0 -6
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +0 -17
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +2 -1
- 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/shared/templateFill.d.ts +4 -0
- package/dist/shared/templateFill.d.ts.map +1 -0
- package/dist/shared/templateFill.js +20 -0
- package/dist/shared/templateFill.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpFile.js","sourceRoot":"","sources":["../../src/help/helpFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** HELP 产物落点:`<SKILLS_DB_PATH>` 下的两级子目录(老实物两级逐字)。 */
|
|
2
|
+
export declare const HELP_HTML_DIR_PARTS: readonly ["schedule_html", "help"];
|
|
3
|
+
/** 产物扩展名。 */
|
|
4
|
+
export declare const HELP_HTML_EXT: ".html";
|
|
5
|
+
/** 老 `strftime("%Y%m%d_%H%M%S")` 等价物(本地时区,逐段零填充;非法 Date 即抛,缺失阻断不返空)。 */
|
|
6
|
+
export declare function formatHelpStamp(now: Date): string;
|
|
7
|
+
/** 通式文件名 `〈文件名主体〉_<stamp>[_<n>].html`;主体原样拼入,不做清洗(老 `html_name` 同口径)。 */
|
|
8
|
+
export declare function buildHelpFileName(stem: string, date: Date, n?: number): string;
|
|
9
|
+
/** 通式落点**初候选**(绝对路径、零 IO):`<dbDir>/schedule_html/help/〈主体〉_<stamp>.html`。
|
|
10
|
+
* 目录不在此处建:写盘前由 `writeExclusiveWithRetry` 递归创建(老 `html_dir(mkdir=True)` 同效)。
|
|
11
|
+
* `dbDir` 照 `fetch/paths.ts:resolveDbDir` 的原样值收(可以是相对路径),由本函数 `resolve()` 归一成绝对路径。 */
|
|
12
|
+
export declare function resolveStemTarget(dbDir: string, stem: string, now: Date): string;
|
|
13
|
+
//# sourceMappingURL=helpPaths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpPaths.d.ts","sourceRoot":"","sources":["../../src/help/helpPaths.ts"],"names":[],"mappings":"AAiBA,qDAAqD;AACrD,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AACtE,aAAa;AACb,eAAO,MAAM,aAAa,EAAG,OAAgB,CAAC;AAE9C,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAOjD;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED;;uFAEuF;AACvF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAEhF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** #203 · 「作息管家help」的**命名与落点**(零 IO,只出初候选)。
|
|
2
|
+
*
|
|
3
|
+
* 归属=结构裁定 `docs/skills/skill-schedule/t199-structure-verdict.md` §「消费共享 help 模板的技术路线」第 4 条:
|
|
4
|
+
* 落盘另建管线 `help/helpPaths.ts` + `help/output.ts`,照 bill 的 `render/helpPaths.ts` + `output.ts`
|
|
5
|
+
* 最小管线(#147 的裁决:**自持一份**,不上移公共层、不让技能之间互相依赖)。
|
|
6
|
+
*
|
|
7
|
+
* 老命名规则复刻(只读基线 `docs/skills/skill-schedule/t198-old-help-truth.md` 第四节):
|
|
8
|
+
* - 目录 `<SKILLS_DB_PATH>/schedule_html/help/`(老 `scripts/help_render.py` 的落点,不存在则递归创建);
|
|
9
|
+
* - 文件名主体 `作息管家_HELP`(`helpFile.ts:HELP_FILE_STEM`),通式
|
|
10
|
+
* `〈文件名主体〉_<YYYYMMDD>_<HHMMSS>[_<N>].html`;
|
|
11
|
+
* - 时间戳取**本地**时区秒(老 `strftime("%Y%m%d_%H%M%S")`),同名递补。
|
|
12
|
+
*
|
|
13
|
+
* 本模块只出**初候选**(零 IO):最终名由 `output.ts:writeExclusiveWithRetry` 的 `wx` 独占+`EEXIST` 递补仲裁
|
|
14
|
+
* ——判存与写入之间没有独占性,check-then-write 并发同秒必交叉覆盖(#128 的因果,照抄不重演)。
|
|
15
|
+
*/
|
|
16
|
+
import { join, resolve } from 'node:path';
|
|
17
|
+
/** HELP 产物落点:`<SKILLS_DB_PATH>` 下的两级子目录(老实物两级逐字)。 */
|
|
18
|
+
export const HELP_HTML_DIR_PARTS = ['schedule_html', 'help'];
|
|
19
|
+
/** 产物扩展名。 */
|
|
20
|
+
export const HELP_HTML_EXT = '.html';
|
|
21
|
+
/** 老 `strftime("%Y%m%d_%H%M%S")` 等价物(本地时区,逐段零填充;非法 Date 即抛,缺失阻断不返空)。 */
|
|
22
|
+
export function formatHelpStamp(now) {
|
|
23
|
+
if (!(now instanceof Date) || Number.isNaN(now.getTime())) {
|
|
24
|
+
throw new Error('[skill-schedule] HELP 时间戳须为有效 Date(缺失阻断不返空)。');
|
|
25
|
+
}
|
|
26
|
+
const p = (n) => String(n).padStart(2, '0');
|
|
27
|
+
return String(now.getFullYear()) + p(now.getMonth() + 1) + p(now.getDate())
|
|
28
|
+
+ '_' + p(now.getHours()) + p(now.getMinutes()) + p(now.getSeconds());
|
|
29
|
+
}
|
|
30
|
+
/** 通式文件名 `〈文件名主体〉_<stamp>[_<n>].html`;主体原样拼入,不做清洗(老 `html_name` 同口径)。 */
|
|
31
|
+
export function buildHelpFileName(stem, date, n) {
|
|
32
|
+
if (typeof stem !== 'string' || stem.length === 0) {
|
|
33
|
+
throw new Error('[skill-schedule] buildHelpFileName stem 须为非空字符串(缺失阻断不返空)。');
|
|
34
|
+
}
|
|
35
|
+
const stamp = formatHelpStamp(date);
|
|
36
|
+
return n === undefined
|
|
37
|
+
? stem + '_' + stamp + HELP_HTML_EXT
|
|
38
|
+
: stem + '_' + stamp + '_' + String(n) + HELP_HTML_EXT;
|
|
39
|
+
}
|
|
40
|
+
/** 通式落点**初候选**(绝对路径、零 IO):`<dbDir>/schedule_html/help/〈主体〉_<stamp>.html`。
|
|
41
|
+
* 目录不在此处建:写盘前由 `writeExclusiveWithRetry` 递归创建(老 `html_dir(mkdir=True)` 同效)。
|
|
42
|
+
* `dbDir` 照 `fetch/paths.ts:resolveDbDir` 的原样值收(可以是相对路径),由本函数 `resolve()` 归一成绝对路径。 */
|
|
43
|
+
export function resolveStemTarget(dbDir, stem, now) {
|
|
44
|
+
return join(resolve(dbDir), ...HELP_HTML_DIR_PARTS, buildHelpFileName(stem, now));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=helpPaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpPaths.js","sourceRoot":"","sources":["../../src/help/helpPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,qDAAqD;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,MAAM,CAAU,CAAC;AACtE,aAAa;AACb,MAAM,CAAC,MAAM,aAAa,GAAG,OAAgB,CAAC;AAE9C,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,GAAS;IACvC,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;UACvE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAU,EAAE,CAAU;IACpE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,aAAa;QACpC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAC3D,CAAC;AAED;;uFAEuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAY,EAAE,GAAS;IACtE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,mBAAmB,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** 下一独占候选(可单测):`〈stem〉_<YYYYMMDD_HHMMSS>[_N].html` 的 `_N` 递增;无 `_N` 则 `_2`。 */
|
|
2
|
+
export declare function nextExclusiveCandidate(currentAbs: string): string;
|
|
3
|
+
/** 独占写 + 递补(可单测):`wx` 首试,`EEXIST` 则 `_N+1` 重试;目录不存在递归创建。 */
|
|
4
|
+
export declare function writeExclusiveWithRetry(initialAbs: string, html: string): string;
|
|
5
|
+
/** 交付结果(`file` 态唯一;`path` 必为绝对路径;形状=票面第 2 条的顶层 `delivery{mode,path,bytes}`)。 */
|
|
6
|
+
export interface HtmlDelivery {
|
|
7
|
+
readonly mode: 'file';
|
|
8
|
+
readonly path: string;
|
|
9
|
+
readonly bytes: number;
|
|
10
|
+
}
|
|
11
|
+
/** 交付一次 HTML 产物(**唯一落盘点**):
|
|
12
|
+
* - `explicit`(`--html <路径>`,用户逐字指定)→ **覆盖写**(`w`),语义与该参数既有口径一致(票面第 3 条);
|
|
13
|
+
* - `target`(本次产物按通式算出的初候选)→ **独占创建 + 递补**(#128);
|
|
14
|
+
* - 两者都给时 `explicit` 优先(用户指定胜过默认落点;**逐字覆盖写,不带时间戳、不递补**)。
|
|
15
|
+
* 只 `mkdirSync` 父目录,不做任何「写不进去就换形态」的兜底——失败抛错给调用方走 exit 5。 */
|
|
16
|
+
export declare function deliverHtml(input: {
|
|
17
|
+
explicit?: string;
|
|
18
|
+
target?: string;
|
|
19
|
+
html: string;
|
|
20
|
+
}): HtmlDelivery;
|
|
21
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/help/output.ts"],"names":[],"mappings":"AAmCA,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYjE;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBhF;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;6DAI6D;AAC7D,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAkBrG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** #203 · HELP 产物的**唯一落盘点**(独占创建 + `EEXIST` 递补 + 绝对路径回执)。
|
|
2
|
+
*
|
|
3
|
+
* 归属=结构裁定 `docs/skills/skill-schedule/t199-structure-verdict.md` §「消费共享 help 模板的技术路线」
|
|
4
|
+
* 第 4 条:照 bill 的 `src/output.ts` 自持一份最小管线,只抄**需要的那一小块**
|
|
5
|
+
* (`nextExclusiveCandidate`/`writeExclusiveWithRetry` + `file` 态交付),不搬三态交付、分类表、
|
|
6
|
+
* `key→中文 command`/动态段/回执落点——那些都是各自自己的产物模型。
|
|
7
|
+
*
|
|
8
|
+
* #128 的因果(照抄注释,别重演):默认落点曾是「`readdirSync` 计数选名 → `writeFileSync`(`w` 覆盖)」
|
|
9
|
+
* 两步,两步之间无独占性;多进程并发同秒都选同一路径 → 后写覆盖先写,用户按回执路径可能打开
|
|
10
|
+
* 另一次调用的产物。修法:`flag:'wx'` 独占创建,`EEXIST` 时递增 `_N` 重试(原子,无需锁)。
|
|
11
|
+
* - 串行语义不变:首选仍是 `helpPaths.resolveStemTarget` 的初候选,首试即中 → 文件名与老版逐字一致;
|
|
12
|
+
* - 并发下由文件系统仲裁:败者 `EEXIST` → `_N+1` 重试,保证每个回执路径的内容就是本次产物;
|
|
13
|
+
* - 大小写不敏感(Windows `normcase`)由 `wx` 天然覆盖:`.HTML` 占位同样 `EEXIST`;
|
|
14
|
+
* - **仅** `EEXIST` 重试,其余错误原样抛出(不把权限/路径错伪装成「换个名再写一次」)。
|
|
15
|
+
*
|
|
16
|
+
* #83 返修 R-1 的教训(同抄):回执路径必须 `resolve()` 归一为**绝对路径**——`SKILLS_DB_PATH`
|
|
17
|
+
* 本身可以是相对路径,产物已写盘却把相对串回传给调用方,下游按它打开就会找不到(或找到别处的同名文件)。
|
|
18
|
+
*
|
|
19
|
+
* 写失败**不静默降级**(本票面第 3 条):照本包 `src/render/errors.ts` 的既有形状抛
|
|
20
|
+
* `ScheduleRenderError`(`code` 取该类型已有的 `'SCHEDULE_HTML_TOO_LARGE'`=「体积/落盘门」那一条,
|
|
21
|
+
* 不新增错误类、不改既有导出面),由出口 `cmd_read.ts` 走 exit 5 + stderr 回执。
|
|
22
|
+
*/
|
|
23
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
24
|
+
import { dirname, join, resolve } from 'node:path';
|
|
25
|
+
import { ScheduleRenderError } from '../render/errors.js';
|
|
26
|
+
/** 落盘失败一律抛本包渲染层错误(`cause` 保留原始系统错,信息不丢)。 */
|
|
27
|
+
function writeFailed(path, e) {
|
|
28
|
+
if (e instanceof ScheduleRenderError)
|
|
29
|
+
throw e;
|
|
30
|
+
const code = e?.code;
|
|
31
|
+
const detail = e?.message ?? String(e);
|
|
32
|
+
throw new ScheduleRenderError('SCHEDULE_HTML_TOO_LARGE', '[skill-schedule] HELP 落盘失败:' + path + '(' + (code ? code + ':' : '') + detail + ')');
|
|
33
|
+
}
|
|
34
|
+
/** 下一独占候选(可单测):`〈stem〉_<YYYYMMDD_HHMMSS>[_N].html` 的 `_N` 递增;无 `_N` 则 `_2`。 */
|
|
35
|
+
export function nextExclusiveCandidate(currentAbs) {
|
|
36
|
+
const dir = dirname(currentAbs);
|
|
37
|
+
const base = currentAbs.slice(dir.length + 1);
|
|
38
|
+
const m = base.match(/^(.*_\d{8}_\d{6})(?:_(\d+))?(\.html)$/i);
|
|
39
|
+
if (m) {
|
|
40
|
+
const prefix = m[1];
|
|
41
|
+
const n = m[2] !== undefined ? Number.parseInt(m[2], 10) : 1;
|
|
42
|
+
return join(dir, prefix + '_' + String(n + 1) + m[3]);
|
|
43
|
+
}
|
|
44
|
+
const dot = base.lastIndexOf('.');
|
|
45
|
+
const stem = dot >= 0 ? base.slice(0, dot) : base;
|
|
46
|
+
return join(dir, stem + '_2' + (dot >= 0 ? base.slice(dot) : ''));
|
|
47
|
+
}
|
|
48
|
+
/** 独占写 + 递补(可单测):`wx` 首试,`EEXIST` 则 `_N+1` 重试;目录不存在递归创建。 */
|
|
49
|
+
export function writeExclusiveWithRetry(initialAbs, html) {
|
|
50
|
+
let candidate = initialAbs;
|
|
51
|
+
for (let i = 0; i < 1000; i++) {
|
|
52
|
+
try {
|
|
53
|
+
mkdirSync(dirname(candidate), { recursive: true });
|
|
54
|
+
writeFileSync(candidate, html, { flag: 'wx', encoding: 'utf8' });
|
|
55
|
+
return candidate;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
if (e?.code === 'EEXIST') {
|
|
59
|
+
candidate = nextExclusiveCandidate(candidate);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
writeFailed(candidate, e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/* istanbul ignore next — 1000 次独占重试全撞名:真故障,不静默失败。 */
|
|
66
|
+
throw new ScheduleRenderError('SCHEDULE_HTML_TOO_LARGE', '[skill-schedule] HELP 落点独占创建重试超限:' + initialAbs);
|
|
67
|
+
}
|
|
68
|
+
/** 交付一次 HTML 产物(**唯一落盘点**):
|
|
69
|
+
* - `explicit`(`--html <路径>`,用户逐字指定)→ **覆盖写**(`w`),语义与该参数既有口径一致(票面第 3 条);
|
|
70
|
+
* - `target`(本次产物按通式算出的初候选)→ **独占创建 + 递补**(#128);
|
|
71
|
+
* - 两者都给时 `explicit` 优先(用户指定胜过默认落点;**逐字覆盖写,不带时间戳、不递补**)。
|
|
72
|
+
* 只 `mkdirSync` 父目录,不做任何「写不进去就换形态」的兜底——失败抛错给调用方走 exit 5。 */
|
|
73
|
+
export function deliverHtml(input) {
|
|
74
|
+
const bytes = Buffer.byteLength(input.html, 'utf8');
|
|
75
|
+
if (input.explicit !== undefined && input.explicit.length > 0) {
|
|
76
|
+
const written = resolve(input.explicit);
|
|
77
|
+
try {
|
|
78
|
+
mkdirSync(dirname(written), { recursive: true });
|
|
79
|
+
writeFileSync(written, input.html, 'utf8');
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
writeFailed(written, e);
|
|
83
|
+
}
|
|
84
|
+
return { mode: 'file', path: written, bytes };
|
|
85
|
+
}
|
|
86
|
+
if (input.target === undefined || input.target.length === 0) {
|
|
87
|
+
throw new ScheduleRenderError('SCHEDULE_HTML_TOO_LARGE', '[skill-schedule] deliverHtml 缺落点(`explicit` 与 `target` 至少给一个)');
|
|
88
|
+
}
|
|
89
|
+
const finalPath = writeExclusiveWithRetry(resolve(input.target), input.html);
|
|
90
|
+
return { mode: 'file', path: finalPath, bytes };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/help/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** #201 · 作息管家 HELP 内容资产(机器生成,禁手改词)。
|
|
2
|
+
*
|
|
3
|
+
* 唯一内容源:`.scratch/t198/old-scenarios.json`——旧作息管家 HELP 实物里原样取出的场景数据
|
|
4
|
+
* (世代判定与内容骨架见 `docs/skills/skill-schedule/t198-old-help-truth.md`)。
|
|
5
|
+
* 本文件由 `scripts/gen-help-assets.mjs` 生成:5 个一级分组/34 条唤醒词/85 条场景,
|
|
6
|
+
* 分组、唤醒词、场景的先后次序与源数据一致。
|
|
7
|
+
*
|
|
8
|
+
* 载荷契约:`packages/base-render/src/spec/help.ts` 的 `SCENE_DATA_SCHEMA`——`HELP_GROUPS` 就是
|
|
9
|
+
* 共享 help 模板要的 `groups` 参数,分三层:一级分组 → 子功能(=旧唤醒词)→ 场景卡片。
|
|
10
|
+
* 该 schema 各层都是 `additionalProperties:false`,多一个键即校验失败,故本文件里的对象字段是闭集。
|
|
11
|
+
*
|
|
12
|
+
* 三处形状转换(生成器里写死、可复核):
|
|
13
|
+
* 1. 源 `dimensions`(参数名 → 说明的自由对象)→ 契约 `editable_fields`:`name`/`label` 取维度键
|
|
14
|
+
* 原名;`hint` 取维度说明原文(逐字;布尔与数字按其 JSON 字面量文本);`value` 一律空串、
|
|
15
|
+
* `required` 一律 false——理由见生成器的 `toField`。
|
|
16
|
+
* 2. 源 `status` 为空、但唤醒词属「今天没有命令可执行」的 5 条者,标 `【待开发】`:
|
|
17
|
+
* 源自标待开发 1 条,加上这几条下辖的场景,本文件标 `【待开发】` 的共 11 条。
|
|
18
|
+
* 3. 三层对齐:源「分组 → 唤醒词 → 场景」直接对到契约「groups → subgroups → scenes」,
|
|
19
|
+
* 不合并、不新造分组(用户在 HELP 页里看到的分组与旧技能所见一致)。
|
|
20
|
+
*
|
|
21
|
+
* 票面点名的逐场景「类型」字段(`type`)在本文件里不存在——这是有据的偏离,不是漏了:契约里那个位
|
|
22
|
+
* 叫 `types`(复数、无单数别名,`packages/base-render/src/spec/help.ts` 的 `SCENE_TYPE_FIELD`/
|
|
23
|
+
* `Scene.types`),而源数据的场景字段是闭集(生成器 `SOURCE_SCENE_KEYS`=wake_word/scenario_id/scenario_title/dimensions/prompt/status/result)、
|
|
24
|
+
* 里面没有类型位,旧实物 HELP 也没有类型徽章——凭空补一个空 `types` 等于自造内容,故不落该字段;
|
|
25
|
+
* 将来源数据真出现类型位,生成器会因字段闭集断言失败而报错(不会静默丢掉)。要变体徽章另开票。
|
|
26
|
+
*
|
|
27
|
+
* 未决的下游风险(留给渲染票 #202 收口;下面是「未决」,不是「已落地」):契约没有对应位、故不进
|
|
28
|
+
* `HELP_GROUPS` 的两处源信息,今天只有本文件里的伴随表形态——全仓没有消费者,两个渲染出口与
|
|
29
|
+
* `#help-data` 载荷里都取不到 `result`/`desc`:即旧 HELP 页面上用户看得见的「预期 ·」与一级
|
|
30
|
+
* 分组说明,在新产物里今天是不显示的。源场景的 `result` → `HELP_SCENE_RESULTS`;
|
|
31
|
+
* 源一级分组的 `desc` → `HELP_GROUP_NOTES`。#202 要么把它们折进契约既有可见位(例如
|
|
32
|
+
* `meta_blocks[].html`,该位原样透传)渲染出来,要么由用户裁定不显示后把这两张表一并删除;
|
|
33
|
+
* 在那之前不得当作已交付的可见内容。
|
|
34
|
+
* 为什么不塞进载荷:校验器按 `additionalProperties:false` 直接拒收多余键
|
|
35
|
+
* (`packages/base-render/src/help.ts` 的字段闭集判定);并进 `editable_fields[].hint` 会让
|
|
36
|
+
* 「可编辑参数」这个位变浑浊,且没有维度的场景(`first_use`)无处可放。
|
|
37
|
+
*
|
|
38
|
+
* 计数全部由数据算出(见 `HELP_TOTALS`),本文件不写第二个数;改资产即跟变。
|
|
39
|
+
* 改词走生成器:`node packages/skill-schedule/scripts/gen-help-assets.mjs`(`--check` 只比对不落盘)。
|
|
40
|
+
*/
|
|
41
|
+
/** 参数化表单字段(契约 `editable_fields` 的一条)。 */
|
|
42
|
+
export interface HelpSceneField {
|
|
43
|
+
/** 参数名(=源 `dimensions` 的维度键原名)。 */
|
|
44
|
+
readonly name: string;
|
|
45
|
+
/** 显示标签(源里没有更友好的显示名,同 `name`)。 */
|
|
46
|
+
readonly label: string;
|
|
47
|
+
/** 推荐值(源里没有独立的推荐值字段,一律空串)。 */
|
|
48
|
+
readonly value: string;
|
|
49
|
+
/** 源维度说明原文(逐字)。 */
|
|
50
|
+
readonly hint: string;
|
|
51
|
+
/** 必填(源里没有针对该维度自身的必填标记,一律 false)。 */
|
|
52
|
+
readonly required: boolean;
|
|
53
|
+
}
|
|
54
|
+
/** 两态状态(契约 `SCENE_STATUS`:空串=可用,【待开发】=禁用)。写成联合型,
|
|
55
|
+
* 好让 `HELP_GROUPS` 直接就是共享 help 模板 `SceneData['groups']` 的形状,接线上不做二次转换。 */
|
|
56
|
+
export type HelpSceneStatus = '' | '【待开发】';
|
|
57
|
+
/** 场景卡片(契约 `scenes[]` 的一条)。 */
|
|
58
|
+
export interface HelpSceneAsset {
|
|
59
|
+
readonly id: string;
|
|
60
|
+
readonly title: string;
|
|
61
|
+
readonly wake_word: string;
|
|
62
|
+
readonly status: HelpSceneStatus;
|
|
63
|
+
/** 「复制指令」按钮按出来的正文,逐字照搬源 `prompt`。 */
|
|
64
|
+
readonly prompt_template: string;
|
|
65
|
+
readonly editable_fields: readonly HelpSceneField[];
|
|
66
|
+
}
|
|
67
|
+
/** 子功能折叠组(契约 `subgroups[]` 的一条;=旧的一条唤醒词)。 */
|
|
68
|
+
export interface HelpSubgroupAsset {
|
|
69
|
+
readonly id: string;
|
|
70
|
+
readonly label: string;
|
|
71
|
+
readonly scenes: readonly HelpSceneAsset[];
|
|
72
|
+
}
|
|
73
|
+
/** 一级分组(契约 `groups[]` 的一条)。 */
|
|
74
|
+
export interface HelpGroupAsset {
|
|
75
|
+
readonly id: string;
|
|
76
|
+
readonly icon: string;
|
|
77
|
+
readonly label: string;
|
|
78
|
+
readonly subgroups: readonly HelpSubgroupAsset[];
|
|
79
|
+
}
|
|
80
|
+
/** 5 个一级分组/34 条唤醒词/85 条场景(=共享 help 模板要的 `groups` 参数)。 */
|
|
81
|
+
export declare const HELP_GROUPS: readonly HelpGroupAsset[];
|
|
82
|
+
/** 扁平 85 条(顺序与 HELP 分组一致;单源派生,不重复落词)。 */
|
|
83
|
+
export declare const HELP_ASSETS: readonly HelpSceneAsset[];
|
|
84
|
+
/** 源场景 `result` 原文(85/85,键=场景 id)。契约里没有这个位,故不进 `HELP_GROUPS`;
|
|
85
|
+
* 今天无消费者、不进任何渲染出口(见文件头「未决的下游风险」,归 #202)。 */
|
|
86
|
+
export declare const HELP_SCENE_RESULTS: Readonly<Record<string, string>>;
|
|
87
|
+
/** 源一级分组 `desc` 原文(5/5,键=分组 id)。同上:契约里没有这个位,
|
|
88
|
+
* 今天无消费者、不进任何渲染出口(见文件头「未决的下游风险」,归 #202)。 */
|
|
89
|
+
export declare const HELP_GROUP_NOTES: Readonly<Record<string, string>>;
|
|
90
|
+
/** 计数(全部由数据算出;改资产即跟变,内容另由测试里的摘要锁钉住)。 */
|
|
91
|
+
export declare const HELP_TOTALS: Readonly<{
|
|
92
|
+
groups: number;
|
|
93
|
+
subgroups: number;
|
|
94
|
+
scenes: number;
|
|
95
|
+
pending: number;
|
|
96
|
+
}>;
|
|
97
|
+
//# sourceMappingURL=help-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-assets.d.ts","sourceRoot":"","sources":["../../../src/help/scenes/help-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;2EAC2E;AAC3E,MAAM,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,CAAC;AAE3C,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAED,yDAAyD;AACzD,eAAO,MAAM,WAAW,EAAE,SAAS,cAAc,EA88DhD,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,WAAW,EAAE,SAAS,cAAc,EAEhD,CAAC;AAEF;6CAC6C;AAC7C,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsF/D,CAAC;AAEF;6CAC6C;AAC7C,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7D,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,WAAW;;;;;EAKtB,CAAC"}
|