skill-schedule 0.3.1 → 0.3.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 (135) hide show
  1. package/SKILL.md +9 -7
  2. package/dist/.gen-inputs.json +45 -0
  3. package/dist/admin/commands.d.ts +10 -0
  4. package/dist/admin/commands.d.ts.map +1 -0
  5. package/dist/admin/commands.js +5 -0
  6. package/dist/admin/commands.js.map +1 -0
  7. package/dist/admin/handlers.d.ts +3 -0
  8. package/dist/admin/handlers.d.ts.map +1 -0
  9. package/dist/admin/handlers.js +66 -0
  10. package/dist/admin/handlers.js.map +1 -0
  11. package/dist/admin/index.d.ts +3 -0
  12. package/dist/admin/index.d.ts.map +1 -0
  13. package/dist/admin/index.js +3 -0
  14. package/dist/admin/index.js.map +1 -0
  15. package/dist/admin/routes.d.ts +8 -0
  16. package/dist/admin/routes.d.ts.map +1 -0
  17. package/dist/admin/routes.js +7 -0
  18. package/dist/admin/routes.js.map +1 -0
  19. package/dist/analyze/commands.d.ts +10 -0
  20. package/dist/analyze/commands.d.ts.map +1 -0
  21. package/dist/analyze/commands.js +5 -0
  22. package/dist/analyze/commands.js.map +1 -0
  23. package/dist/analyze/handlers.d.ts +3 -0
  24. package/dist/analyze/handlers.d.ts.map +1 -0
  25. package/dist/analyze/handlers.js +57 -0
  26. package/dist/analyze/handlers.js.map +1 -0
  27. package/dist/analyze/index.d.ts +3 -0
  28. package/dist/analyze/index.d.ts.map +1 -0
  29. package/dist/analyze/index.js +3 -0
  30. package/dist/analyze/index.js.map +1 -0
  31. package/dist/analyze/routes.d.ts +8 -0
  32. package/dist/analyze/routes.d.ts.map +1 -0
  33. package/dist/analyze/routes.js +8 -0
  34. package/dist/analyze/routes.js.map +1 -0
  35. package/dist/cli/cmd_read.js +46 -249
  36. package/dist/cli/cmd_read.js.map +1 -1
  37. package/dist/cli/keys.d.ts +5 -0
  38. package/dist/cli/keys.d.ts.map +1 -0
  39. package/dist/cli/keys.js +21 -0
  40. package/dist/cli/keys.js.map +1 -0
  41. package/dist/cli/registry.d.ts +4 -0
  42. package/dist/cli/registry.d.ts.map +1 -0
  43. package/dist/cli/registry.js +12 -0
  44. package/dist/cli/registry.js.map +1 -0
  45. package/dist/config.d.ts +7 -1
  46. package/dist/config.d.ts.map +1 -1
  47. package/dist/config.js +9 -3
  48. package/dist/config.js.map +1 -1
  49. package/dist/delivery/index.d.ts +8 -0
  50. package/dist/delivery/index.d.ts.map +1 -0
  51. package/dist/delivery/index.js +7 -0
  52. package/dist/delivery/index.js.map +1 -0
  53. package/dist/delivery/naming.d.ts +24 -0
  54. package/dist/delivery/naming.d.ts.map +1 -0
  55. package/dist/delivery/naming.js +8 -0
  56. package/dist/delivery/naming.js.map +1 -0
  57. package/dist/delivery/output.d.ts +22 -0
  58. package/dist/delivery/output.d.ts.map +1 -0
  59. package/dist/delivery/output.js +83 -0
  60. package/dist/delivery/output.js.map +1 -0
  61. package/dist/fetch/paths.d.ts +19 -5
  62. package/dist/fetch/paths.d.ts.map +1 -1
  63. package/dist/fetch/paths.js +26 -8
  64. package/dist/fetch/paths.js.map +1 -1
  65. package/dist/health.d.ts.map +1 -1
  66. package/dist/health.js +2 -1
  67. package/dist/health.js.map +1 -1
  68. package/dist/help/helpPaths.d.ts +11 -13
  69. package/dist/help/helpPaths.d.ts.map +1 -1
  70. package/dist/help/helpPaths.js +9 -39
  71. package/dist/help/helpPaths.js.map +1 -1
  72. package/dist/plan/commands.d.ts +9 -0
  73. package/dist/plan/commands.d.ts.map +1 -0
  74. package/dist/plan/commands.js +5 -0
  75. package/dist/plan/commands.js.map +1 -0
  76. package/dist/plan/handlers.d.ts +3 -0
  77. package/dist/plan/handlers.d.ts.map +1 -0
  78. package/dist/plan/handlers.js +31 -0
  79. package/dist/plan/handlers.js.map +1 -0
  80. package/dist/plan/index.d.ts +2 -0
  81. package/dist/plan/index.d.ts.map +1 -1
  82. package/dist/plan/index.js +4 -2
  83. package/dist/plan/index.js.map +1 -1
  84. package/dist/plan/routes.d.ts +8 -0
  85. package/dist/plan/routes.d.ts.map +1 -0
  86. package/dist/plan/routes.js +18 -0
  87. package/dist/plan/routes.js.map +1 -0
  88. package/dist/policy/wakewords.d.ts.map +1 -1
  89. package/dist/policy/wakewords.js +9 -59
  90. package/dist/policy/wakewords.js.map +1 -1
  91. package/dist/query/commands.d.ts +26 -0
  92. package/dist/query/commands.d.ts.map +1 -0
  93. package/dist/query/commands.js +8 -0
  94. package/dist/query/commands.js.map +1 -0
  95. package/dist/query/handlers.d.ts +6 -0
  96. package/dist/query/handlers.d.ts.map +1 -0
  97. package/dist/query/handlers.js +67 -0
  98. package/dist/query/handlers.js.map +1 -0
  99. package/dist/query/index.d.ts +3 -0
  100. package/dist/query/index.d.ts.map +1 -0
  101. package/dist/query/index.js +3 -0
  102. package/dist/query/index.js.map +1 -0
  103. package/dist/query/routes.d.ts +9 -0
  104. package/dist/query/routes.d.ts.map +1 -0
  105. package/dist/query/routes.js +20 -0
  106. package/dist/query/routes.js.map +1 -0
  107. package/dist/render/envelope.d.ts +2 -1
  108. package/dist/render/envelope.d.ts.map +1 -1
  109. package/dist/render/envelope.js +5 -11
  110. package/dist/render/envelope.js.map +1 -1
  111. package/dist/shared/commandSpec.d.ts +83 -0
  112. package/dist/shared/commandSpec.d.ts.map +1 -0
  113. package/dist/shared/commandSpec.js +2 -0
  114. package/dist/shared/commandSpec.js.map +1 -0
  115. package/dist/triggers/routes.generated.d.ts +297 -0
  116. package/dist/triggers/routes.generated.d.ts.map +1 -0
  117. package/dist/triggers/routes.generated.js +52 -0
  118. package/dist/triggers/routes.generated.js.map +1 -0
  119. package/dist/write/commands.d.ts +9 -0
  120. package/dist/write/commands.d.ts.map +1 -0
  121. package/dist/write/commands.js +5 -0
  122. package/dist/write/commands.js.map +1 -0
  123. package/dist/write/handlers.d.ts +3 -0
  124. package/dist/write/handlers.d.ts.map +1 -0
  125. package/dist/write/handlers.js +24 -0
  126. package/dist/write/handlers.js.map +1 -0
  127. package/dist/write/index.d.ts +3 -0
  128. package/dist/write/index.d.ts.map +1 -0
  129. package/dist/write/index.js +3 -0
  130. package/dist/write/index.js.map +1 -0
  131. package/dist/write/routes.d.ts +8 -0
  132. package/dist/write/routes.d.ts.map +1 -0
  133. package/dist/write/routes.js +10 -0
  134. package/dist/write/routes.js.map +1 -0
  135. package/package.json +3 -3
@@ -1,21 +1,13 @@
1
1
  #!/usr/bin/env node
2
- // 作息管家唯一出口 cmd_read:argv+JSON(stdout)+exit;非 0 走 stderr;超时 terminate+TOAST 降级标记。
3
- // 退出码对齐 skilllink 冻结:0 ok;1 预检;2 用法/参数;3 key;4 取数/超时;5 envelope/渲染/落盘。
4
- // stdout 纯净:成功只打 envelope JSON 一行。
5
- import { existsSync } from 'node:fs';
6
- import { ScheduleFetchError, SchedulePolicyError, resolveDbPath, resolveDbDir, openScheduleDb, closeScheduleDb, listRecordsByDate, listRecordsRange, getRecordById, getStatus, addRecord, amendRecord, addSummary, listPlanEvents, getPlanEventsRange, searchPlanEvent, larkReady, } from '../fetch/index.js';
7
- import { resolveDateParam, resolveRangeParam, validateAddInput, validateAmendInput, validateSummaryInput, validateCompareInput, normalizeDate, parsePlanOp, parseRecordOp, parseFeishuMode, parsePlanView, l1Of, } from '../policy/index.js';
8
- import { runPlanOp, buildPlanOverview } from '../plan/index.js';
9
- import { scheduleShapeFor, buildScheduleEnvelope, renderEnvelopeHtml, assertHtmlSize, loadTemplate, templateFor, fillTemplate, buildRecordToday, buildRecordRange, buildRecordDetail, buildRecordReceipt, buildRecordCompare, buildCategoryDeep, buildAnomaly, buildPlanToday, buildHelpItems, ScheduleRenderError, } from '../render/index.js';
10
- import { buildHelpLookup } from '../help/index.js';
11
- import { resolveHelpDir } from '../help/helpPaths.js';
12
- import { helpFileStem, buildHelpFileData, renderHelpFileHtml } from '../help/helpFile.js';
13
- import { HELP_GROUPS } from '../help/scenes/help-assets.js';
14
- import { deliverHtml } from '../help/output.js';
2
+ import { REGISTRY } from './registry.js';
3
+ import { ScheduleFetchError, SchedulePolicyError, resolveDbPath, openScheduleDb, closeScheduleDb, } from '../fetch/index.js';
4
+ import { scheduleShapeFor, buildScheduleEnvelope, renderEnvelopeHtml, assertHtmlSize, loadTemplate, templateFor, fillTemplate, ScheduleRenderError, } from '../render/index.js';
15
5
  import { isConfigKey, runConfigKey } from './config.js';
16
6
  // #706 · 配置体检:设置页专用的一条只读命令,同走「进分派层之前拦下」这条口(判据住 src/health.ts)。
17
7
  import { isHealthCheckKey, runHealthCheckKey } from './health.js';
18
- import { helpReuseWindowOf } from 'base-paint/save-html';
8
+ // #843 · 交付面:落盘唯一那条链(`delivery/output.ts`)+ 文件名主体一处定义(`delivery/naming.ts`)。
9
+ import { deliverHtml, pageStemFor } from '../delivery/index.js';
10
+ import { resolveHtmlDir } from '../fetch/index.js';
19
11
  const DEFAULT_TIMEOUT_MS = 30000;
20
12
  function fail(code, msg) { console.error('ERR ' + code + ': ' + msg); process.exit(code); }
21
13
  function toast(msg) { console.error('TOAST: ' + msg); }
@@ -27,227 +19,14 @@ function preflight() {
27
19
  if (!(v[0] > 22 || (v[0] === 22 && v[1] >= 13)))
28
20
  fail(1, 'node 低于 22.13:' + process.versions.node);
29
21
  }
30
- function needInt(params, name) {
31
- const v = params[name];
32
- if (!Number.isInteger(v) || v <= 0)
33
- fail(2, '缺参数 ' + name + '(须为正整数)');
34
- return v;
35
- }
36
- function monthRange(month) {
37
- const [y, m] = month.split('-').map(Number);
38
- const last = new Date(y, m, 0).getDate();
39
- const dd = String(last).padStart(2, '0');
40
- return { start: month + '-01', end: month + '-' + dd };
41
- }
42
- function toISODateTime(date, time) {
43
- return date + 'T' + time + ':00';
44
- }
45
- // ── #203 · 「作息管家help」的交付装配(**在开库之前**走,照 skill-bill/src/cli/cmd_read.ts:493-495)────
46
- //
47
- // 缺省(不给任何参数)= 全量 HELP 文件:`<库目录>/schedule_html/help/作息管家_HELP_<YYYYMMDD_HHMMSS>[_N].html`
48
- // (库目录=配置项 `db.dir`,空串即数据目录;两级子目录与主体名从配置取,默认逐字等于老常量,
49
- // `t198-old-help-truth.md` 第四节),独占落盘 + **绝对路径**回执
50
- // (`delivery{mode,path,bytes}` 顶层追加,序在既有五字段之后)。
51
- // 显式 `q` = 现找:只回命中(stdout),不落盘(检索式问答不刷目录);`--html <路径>` 给了才写那个路径。
52
- // 全程**不开库**:初始化判据=「DB 文件存在」(照老 `render_help._is_initialized`);
53
- // 否则「看帮助」会 `new DatabaseSync` 出来并跑 DDL 自愈,把库建在用户还没开始用的目录里。
54
- const HELP_MODE_FILE = 'file';
55
- /** HELP 产物吃的复用窗口(毫秒):缺省**一天**、`reuseHours` 可改(`0`=每次都落新的)。
56
- * 换算与坏参判定都在共用件(`helpReuseWindowOf` 把坏参 `RangeError` 交给这里给的处理器)⇒ 归到出口的
57
- * 「参数错」那一档(exit 2),与其余四家同档:坏参绝不静默当 0。 */
58
- const helpWindowOrFail = helpReuseWindowOf((m) => fail(2, m));
59
- /** 初始化状态:DB **文件存在**=已初始化(照老 `render_help._is_initialized` 与 bill `helpInitialized`)。
60
- * 判定本身异常 ⇒ `false`=横幅照显(fail-open:误显只多一条提示,误藏会让新用户找不到入口)。 */
61
- function helpInitialized() {
62
- try {
63
- return existsSync(resolveDbPath());
64
- }
65
- catch {
66
- return false;
67
- }
68
- }
69
- /** 交付索引(`list` 形,`schedule.help.lookup` 的缺省载荷):一级分组一行,计数全**派生**自内容资产
70
- * (改资产即跟变,不写第二份 5/34/85)。行形状照 bill `HelpIndexItem`,不下重口。 */
71
- function buildHelpIndex() {
72
- const items = HELP_GROUPS.map((g) => ({
73
- id: g.id,
74
- icon: g.icon,
75
- label: g.label,
76
- subgroupCount: g.subgroups.length,
77
- sceneCount: g.subgroups.reduce((n, s) => n + s.scenes.length, 0),
78
- }));
79
- return {
80
- items,
81
- total: items.length,
82
- sceneTotal: items.reduce((n, it) => n + it.sceneCount, 0),
83
- subgroupTotal: items.reduce((n, it) => n + it.subgroupCount, 0),
84
- };
85
- }
86
- function dispatchHelp(params) {
87
- const dbDir = resolveDbDir();
88
- const now = new Date();
89
- const q = params.q === undefined ? undefined : String(params.q);
90
- if (q !== undefined) {
91
- // 现找:只回命中;落盘只有用户显式给 `--html <路径>` 才发生(main 里那支)。
92
- const all = buildHelpLookup().map((h) => ({ phrase: h.phrase, key: h.key, shape: h.shape, cli: h.cli, desc: h.desc }));
93
- return { data: { ...buildHelpItems(all, q), mode: 'lookup', query: q } };
94
- }
95
- // #245:HELP 产物吃复用窗口(缺省一天内只留一份,`reuseHours` 可改);坏参在这里就抛(出口归 exit 2)。
96
- const reuseMs = helpWindowOrFail(params);
97
- const html = renderHelpFileHtml(buildHelpFileData(now, { initialized: helpInitialized() }));
98
- assertHtmlSize(html);
99
- return {
100
- data: { ...buildHelpIndex(), mode: HELP_MODE_FILE, bytes: Buffer.byteLength(html, 'utf8') },
101
- deliver: { html, targetDir: resolveHelpDir(dbDir), stem: helpFileStem(), reuseMs },
102
- };
103
- }
104
- /** 哪些 op 要碰远端(其余 op 连 lark-cli 都不探——探测本身是三次子进程)。 */
105
- const REMOTE_OPS = ['ensure', 'upsert', 'update', 'deactivate', 'sync', 'check'];
106
- /** 远端门:过了给 cliPath;没过给「为什么不在场」——**不拦本地写**,只如实进回执与退出码。 */
107
- function remoteGate(op, params) {
108
- if (!REMOTE_OPS.includes(op))
109
- return { cli: null, why: null };
110
- // sync/check 本身就是远端命令:`feishu:'skip'` 对它们不成立,照探(探不到即阻断/降级)。
111
- if (op !== 'sync' && op !== 'check' && parseFeishuMode(params) === 'skip')
112
- return { cli: null, why: null };
113
- try {
114
- return { cli: larkReady().cliPath, why: null };
115
- }
116
- catch (e) {
117
- return { cli: null, why: e.message };
118
- }
119
- }
120
- function dispatch(key, params) {
22
+ /** 开库跑一条非 HELP 命令:DB 已初始化提示与库句柄生命周期住这里(stderr 字节与旧 dispatch 一致)。 */
23
+ function runWithDb(spec, params) {
121
24
  const dbPath = resolveDbPath();
122
25
  const handle = openScheduleDb(dbPath);
123
26
  try {
124
27
  if (handle.initialized)
125
28
  note('作息 DB 已初始化:' + dbPath);
126
- switch (key) {
127
- case 'schedule.record.today': {
128
- const date = resolveDateParam(params);
129
- const records = listRecordsByDate(handle, date);
130
- const st = getStatus(handle);
131
- if (st.records === 0)
132
- note('库空:真实无记录(非故障)');
133
- return { data: buildRecordToday(date, records), exitCode: 0 };
134
- }
135
- case 'schedule.record.range': {
136
- const { start, end } = resolveRangeParam(params);
137
- const records = listRecordsRange(handle, start, end);
138
- if (!records.length) {
139
- throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '区间无记录:' + start + '~' + end + '(缺失阻断,不返空统计)');
140
- }
141
- return { data: buildRecordRange(start, end, records), exitCode: 0 };
142
- }
143
- case 'schedule.record.detail': {
144
- if (params.id !== undefined)
145
- return { data: buildRecordDetail(getRecordById(handle, needInt(params, 'id'))), exitCode: 0 };
146
- const date = resolveDateParam(params);
147
- const records = listRecordsByDate(handle, date);
148
- if (!records.length)
149
- throw new ScheduleFetchError('SCHEDULE_RECORD_NOT_FOUND', '当日无记录:' + date);
150
- return { data: buildRecordDetail(records[0]), exitCode: 0 };
151
- }
152
- case 'schedule.record.write': {
153
- const op = parseRecordOp(params);
154
- if (op === 'add') {
155
- const input = validateAddInput(params);
156
- const r = addRecord(handle, input);
157
- return { data: buildRecordReceipt('已记一条:' + r.id + '(' + r.date + ' ' + r.time_start + '~' + r.time_end + ' ' + r.category + ')'), exitCode: 0 };
158
- }
159
- if (op === 'amend') {
160
- const { id, patch } = validateAmendInput(params);
161
- const r = amendRecord(handle, id, patch);
162
- return { data: buildRecordReceipt('已修正:' + r.id + '(edit_count=' + r.edit_count + ')'), exitCode: 0 };
163
- }
164
- const s = validateSummaryInput(params);
165
- addSummary(handle, s.date, s.category, s.totalMinutes);
166
- return { data: buildRecordReceipt('已写摘要:' + s.date + ' ' + s.category + '=' + s.totalMinutes + '分钟'), exitCode: 0 };
167
- }
168
- case 'schedule.record.compare': {
169
- const c = validateCompareInput(params);
170
- if (c.kind === 'months') {
171
- const ra = monthRange(c.monthA);
172
- const rb = monthRange(c.monthB);
173
- const a = listRecordsRange(handle, ra.start, ra.end);
174
- const b = listRecordsRange(handle, rb.start, rb.end);
175
- if (!a.length || !b.length) {
176
- throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据:' + c.monthA + '(' + a.length + '块)/' + c.monthB + '(' + b.length + '块)');
177
- }
178
- return { data: buildRecordCompare({ labelA: c.monthA, labelB: c.monthB, a, b }), exitCode: 0 };
179
- }
180
- if (c.kind === 'ranges') {
181
- const a = listRecordsRange(handle, c.startA, c.endA);
182
- const b = listRecordsRange(handle, c.startB, c.endB);
183
- if (!a.length || !b.length)
184
- throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据(两侧均须有记录)');
185
- return { data: buildRecordCompare({ labelA: c.labelA, labelB: c.labelB, a, b }), exitCode: 0 };
186
- }
187
- if (c.kind === 'category') {
188
- const records = listRecordsRange(handle, c.start, c.end);
189
- if (!records.length)
190
- throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '区间无记录:' + c.start + '~' + c.end);
191
- return { data: buildCategoryDeep(c.start, c.end, c.category, records), exitCode: 0 };
192
- }
193
- const w = c.windowDays;
194
- const end = c.end;
195
- const d = new Date(end + 'T00:00:00');
196
- d.setDate(d.getDate() - (w - 1));
197
- const start = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');
198
- const records = listRecordsRange(handle, start, end);
199
- if (!records.length)
200
- throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '窗口无记录:' + start + '~' + end);
201
- const byDay = new Map();
202
- for (const r of records) {
203
- const m = byDay.get(r.date) || {};
204
- const k = l1Of(r.category);
205
- m[k] = (m[k] || 0) + (r.duration_minutes || 0);
206
- byDay.set(r.date, m);
207
- }
208
- const daily = [...byDay.entries()].sort().map(([date, byL1]) => ({ date, byL1 }));
209
- return { data: buildAnomaly(end, w, daily), exitCode: 0 };
210
- }
211
- case 'schedule.plan.today': {
212
- // #15/#16:24h 聚合视图(分桶 + 多日)走 `view=aggregate`;#12 查日程走全字段 list。
213
- if (parsePlanView(params) === 'aggregate') {
214
- const dates = Array.isArray(params.dates) && params.dates.length
215
- ? params.dates.map((x) => normalizeDate(x, 'dates[]'))
216
- : [resolveDateParam(params)];
217
- return { data: buildPlanOverview(handle, dates), exitCode: 0 };
218
- }
219
- if (typeof params.title === 'string' && params.title.trim()) {
220
- const date = resolveDateParam(params);
221
- const hits = searchPlanEvent(handle, date, params.title.trim(), params.time_start, params.time_end);
222
- return { data: buildPlanToday(date, hits), exitCode: 0 };
223
- }
224
- if (Array.isArray(params.dates) && params.dates.length) {
225
- const dates = params.dates.map((x) => normalizeDate(x, 'dates[]'));
226
- const lo = [...dates].sort()[0];
227
- const hi = [...dates].sort()[dates.length - 1];
228
- const all = getPlanEventsRange(handle, lo, hi).filter((e) => dates.includes(e.date));
229
- return { data: { items: all.map((e) => buildPlanToday(e.date, [e]).items[0]), total: all.length, date: lo + '~' + hi }, exitCode: 0 };
230
- }
231
- const date = resolveDateParam(params);
232
- return { data: buildPlanToday(date, listPlanEvents(handle, date)), exitCode: 0 };
233
- }
234
- case 'schedule.plan.write': {
235
- // 写 op 全部统一成合成写(裁定 A6③):本地 +(可选)远端一条命令走完,回执分字段、退出码报达成与否。
236
- // 各 op 的实现住能力目录 `src/plan/`(#199 的结构裁定:`plan` 是 HELP 一级分组「日程与计划」)。
237
- const op = parsePlanOp(params);
238
- const gate = remoteGate(op, params);
239
- const out = runPlanOp(op, { handle, params, cli: gate.cli, remoteWhy: gate.why });
240
- return { data: out.data, exitCode: out.exitCode };
241
- }
242
- // #203:本键由 `dispatchHelp` 在**开库之前**处理(只读页不建库);走到这里说明 main 的路由被改坏了。
243
- // 照 skill-bill/src/cli/cmd_read.ts:449-451 的同一道内部断言——防的是「改回无条件开库」这个静默回退。
244
- case 'schedule.help.lookup':
245
- fail(1, '内部错误:schedule.help.lookup 须走 dispatchHelp(开库之前)');
246
- return { data: null, exitCode: 0 };
247
- default:
248
- fail(3, '未知 schedule key:' + key);
249
- return { data: null, exitCode: 0 };
250
- }
29
+ return spec.run(params, handle);
251
30
  }
252
31
  finally {
253
32
  closeScheduleDb(handle);
@@ -256,6 +35,7 @@ function dispatch(key, params) {
256
35
  function parseArgs(a) {
257
36
  const o = { key: a[0], params: undefined, html: undefined, timeout: DEFAULT_TIMEOUT_MS };
258
37
  for (let i = 1; i < a.length; i++) {
38
+ // `--html <路径>`=显式落点(逐字覆盖写);不给它=落通式名的缺省产物(#843)。
259
39
  if (a[i] === '--params' && i + 1 < a.length)
260
40
  o.params = a[++i];
261
41
  else if (a[i] === '--html' && i + 1 < a.length)
@@ -273,7 +53,7 @@ function parseArgs(a) {
273
53
  async function main() {
274
54
  const o = parseArgs(process.argv.slice(2));
275
55
  if (!o.key)
276
- fail(2, '用法:schedule-cmd-read <schedule.key> [--params JSON对象] [--html 输出路径] [--timeout 毫秒]');
56
+ fail(2, '用法:schedule-cmd-read <schedule.key> [--params JSON对象] [--html 输出路径] [--timeout 毫秒](不给 --html 即落缺省产物:产物根目录下按通式命名)');
277
57
  let params = {};
278
58
  if (o.params !== undefined) {
279
59
  try {
@@ -316,30 +96,47 @@ async function main() {
316
96
  let exitCode = 0;
317
97
  try {
318
98
  // #203:`schedule.help.lookup` 在**开库之前**分派(只读页不建库);其余 7 键照旧走 dispatch(内部开库)。
319
- const help = key === 'schedule.help.lookup' ? dispatchHelp(params) : null;
320
- const out = help ? { data: help.data, exitCode: 0 } : dispatch(key, params);
321
- env = buildScheduleEnvelope(key, out.data);
322
- exitCode = out.exitCode;
99
+ // 分派只认生成的 `registry.ts`(key → 声明):命中即走能力目录的处理函数。
100
+ const spec = REGISTRY[key];
101
+ if (!spec)
102
+ fail(3, '未知 schedule key:' + key);
103
+ // #203:`schedule.help.lookup` 在**开库之前**走(只读页不建库);其余键走开库分支。
104
+ // 开库与否是基础设施事实(同配置/体检拦截口),不是命令事实,故这一个分支住出口。
105
+ const r = key === 'schedule.help.lookup'
106
+ ? spec.run(params)
107
+ : runWithDb(spec, params);
108
+ for (const n of ('notes' in r ? r.notes ?? [] : []))
109
+ note(n);
110
+ env = buildScheduleEnvelope(key, r.data);
111
+ exitCode = 'exitCode' in r ? r.exitCode ?? 0 : 0;
323
112
  const built = env;
324
- // 既有语义(不破):`--html <路径>` 直写该路径,内容=本包 envelope 片段(模板填充后)。
113
+ // 页面正文=本包 envelope 片段(模板填充后):`--html <路径>` 与「缺省落盘」**同一份正文**,
114
+ // 差别只在落点(逐字 vs 通式)——同一件产物,不因落点不同换形状(#843)。
325
115
  const sectionHtml = () => {
326
116
  const html = fillTemplate(loadTemplate(templateFor(key)), renderEnvelopeHtml(built));
327
117
  assertHtmlSize(html);
328
118
  return html;
329
119
  };
330
- if (help?.deliver !== undefined) {
331
- // 本键的产物:缺省=HELP 全壳页(自带 html),落盘走本包统一管线(独占 + 同名递补)。
332
- const html = help.deliver.html ?? sectionHtml();
333
- if (help.deliver.html !== undefined)
334
- assertHtmlSize(html);
335
- delivery = deliverHtml({
336
- explicit: o.html, targetDir: help.deliver.targetDir, stem: help.deliver.stem, html, reuseMs: help.deliver.reuseMs,
337
- });
338
- note('HTML 已写:' + delivery.path + '(' + delivery.bytes + ' 字节 utf8)');
339
- }
340
- else if (o.html !== undefined) {
341
- delivery = deliverHtml({ explicit: o.html, html: sectionHtml() });
342
- note('HTML 已写:' + delivery.path + '(' + delivery.bytes + ' 字节 utf8)');
120
+ const landing = 'landing' in r ? r.landing : undefined;
121
+ // **缺省即落盘**(#843):每个键都落一份 HTML 并回 `delivery.path` 绝对路径。
122
+ // - 内容=该键自身的产物:HELP 全壳页(`r.html`,处理函数已过体积门)/其余键的模板页(`sectionHtml()`)。
123
+ // - 落点分家:页面落**产物根** `<库目录>/<html.dir>`;HELP 自带 `landing`(落根下的 `html.helpDir` 一支)。
124
+ // - 名字一处定义:页面主体=`pageStemFor(spec)`(技能名 + 命令标题),HELP 主体=`helpFileStem()`。
125
+ // - `--html <路径>`=用户逐字指定的落点,优先级最高(逐字覆盖写、不带时间戳、不递补)——
126
+ // 它也是**唯一**能让「按定义不落盘」的键(HELP 现找 `q`)落盘的路子(#204 ⑤ 锁着)。
127
+ const delivers = ('delivery' in r ? r.delivery : undefined) !== false || o.html !== undefined;
128
+ const receipt = delivers
129
+ ? deliverHtml({
130
+ explicit: o.html,
131
+ html: landing !== undefined ? r.html : sectionHtml(),
132
+ targetDir: landing !== undefined ? landing.targetDir : resolveHtmlDir(),
133
+ stem: landing !== undefined ? landing.stem : pageStemFor(spec),
134
+ ...(landing === undefined ? {} : { reuseMs: landing.reuseMs }),
135
+ })
136
+ : undefined;
137
+ if (receipt !== undefined) {
138
+ delivery = receipt;
139
+ note('HTML 已写:' + receipt.path + '(' + receipt.bytes + ' 字节 utf8)');
343
140
  }
344
141
  clearTimeout(timer);
345
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cmd_read.js","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmd_read.js","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { EnvelopeShape } from 'base-link-core';
2
+ export declare const SCHEDULE_KEYS: readonly ["schedule.plan.write", "schedule.record.write", "schedule.help.lookup", "schedule.plan.today", "schedule.record.compare", "schedule.record.detail", "schedule.record.range", "schedule.record.today"];
3
+ export type ScheduleCommandKey = (typeof SCHEDULE_KEYS)[number];
4
+ export declare const SCHEDULE_KEY_SHAPES: Record<ScheduleCommandKey, EnvelopeShape>;
5
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/cli/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,eAAO,MAAM,aAAa,iNAShB,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,CASzE,CAAC"}
@@ -0,0 +1,21 @@
1
+ export const SCHEDULE_KEYS = [
2
+ 'schedule.plan.write',
3
+ 'schedule.record.write',
4
+ 'schedule.help.lookup',
5
+ 'schedule.plan.today',
6
+ 'schedule.record.compare',
7
+ 'schedule.record.detail',
8
+ 'schedule.record.range',
9
+ 'schedule.record.today',
10
+ ];
11
+ export const SCHEDULE_KEY_SHAPES = {
12
+ 'schedule.plan.write': 'receipt',
13
+ 'schedule.record.write': 'receipt',
14
+ 'schedule.help.lookup': 'list',
15
+ 'schedule.plan.today': 'list',
16
+ 'schedule.record.compare': 'analysis',
17
+ 'schedule.record.detail': 'detail',
18
+ 'schedule.record.range': 'stat',
19
+ 'schedule.record.today': 'list',
20
+ };
21
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/cli/keys.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAA8C;IAC5E,qBAAqB,EAAE,SAAS;IAChC,uBAAuB,EAAE,SAAS;IAClC,sBAAsB,EAAE,MAAM;IAC9B,qBAAqB,EAAE,MAAM;IAC7B,yBAAyB,EAAE,UAAU;IACrC,wBAAwB,EAAE,QAAQ;IAClC,uBAAuB,EAAE,MAAM;IAC/B,uBAAuB,EAAE,MAAM;CAChC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CommandSpec } from '../shared/commandSpec.js';
2
+ export declare const REGISTRY: Record<string, CommandSpec>;
3
+ export declare const REGISTRY_KEYS: string[];
4
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAO5D,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAM,CAAC;AAExD,eAAO,MAAM,aAAa,UAA+B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ADMIN_COMMANDS } from '../admin/index.js';
2
+ import { ANALYZE_COMMANDS } from '../analyze/index.js';
3
+ import { PLAN_COMMANDS } from '../plan/index.js';
4
+ import { QUERY_COMMANDS } from '../query/index.js';
5
+ import { WRITE_COMMANDS } from '../write/index.js';
6
+ const SOURCES = [ADMIN_COMMANDS, ANALYZE_COMMANDS, PLAN_COMMANDS, QUERY_COMMANDS, WRITE_COMMANDS];
7
+ export const REGISTRY = {};
8
+ for (const list of SOURCES)
9
+ for (const s of list)
10
+ REGISTRY[s.key] = s;
11
+ export const REGISTRY_KEYS = Object.keys(REGISTRY).sort();
12
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,MAAM,OAAO,GAAwC,CAAC,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AACvI,MAAM,CAAC,MAAM,QAAQ,GAAgC,EAAE,CAAC;AACxD,KAAK,MAAM,IAAI,IAAI,OAAO;IAAE,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import type { ConfigRecord } from 'base-link-core';
2
2
  /** 配置文件主体名:`<配置目录>/schedule.yaml`。 */
3
3
  export declare const SCHEDULE_CONFIG_STEM: "schedule";
4
- /** 作息管家那份配置表:键即设置页的行,一层嵌套(子集支持范围见 base-link-core README)。 */
4
+ /** 作息管家那份配置表:键即设置页的行,一层嵌套(子集支持范围见 base-link-core README)。
5
+ *
6
+ * **产物落点分家(#843)**:`html.dir`=产物**根目录**(页面落它下面),`html.helpDir`=该根下
7
+ * HELP 那一支的子目录名。两件产物各有各的落点,一个键不当两个用;名字由来——
8
+ * `html.dir` 段串是「库目录下的哪几个子目录」的算料(不绝对化,见 `writableDefaults()`),
9
+ * `html.helpDir` 是**单段**子目录名(算料是段串,单段也是段串)。 */
5
10
  export declare const SCHEDULE_CONFIG_DEFAULTS: {
6
11
  db: {
7
12
  dir: string;
@@ -9,6 +14,7 @@ export declare const SCHEDULE_CONFIG_DEFAULTS: {
9
14
  };
10
15
  html: {
11
16
  dir: string;
17
+ helpDir: string;
12
18
  };
13
19
  };
14
20
  /** **已退休键**(#762 过渡件):我们自己删过、老配置文件里必然还留着的键的叶子全路径。命中的键跳过校验、
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,EAAG,UAAmB,CAAC;AAExD,6DAA6D;AAC7D,eAAO,MAAM,wBAAwB;;;;;;;;CAGpC,CAAC;AAEF;;;;;;yBAMyB;AACzB,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAEzF,gCAAgC;AAChC,MAAM,MAAM,oBAAoB,GAAG,OAAO,wBAAwB,CAAC;AAoCnE,sCAAsC;AACtC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAQD;;;mDAGmD;AACnD,wBAAgB,kBAAkB,IAAI,oBAAoB,CAiBzD;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAIzE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAIjF;AAED;6DAC6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,EAAG,UAAmB,CAAC;AAExD;;;;;gDAKgD;AAChD,eAAO,MAAM,wBAAwB;;;;;;;;;CAGpC,CAAC;AAEF;;;;;;yBAMyB;AACzB,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAEzF,gCAAgC;AAChC,MAAM,MAAM,oBAAoB,GAAG,OAAO,wBAAwB,CAAC;AAoCnE,sCAAsC;AACtC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAQD;;;mDAGmD;AACnD,wBAAgB,kBAAkB,IAAI,oBAAoB,CAiBzD;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAIzE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAIjF;AAED;6DAC6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD"}
package/dist/config.js CHANGED
@@ -10,7 +10,8 @@
10
10
  *
11
11
  * 默认值逐项等于改造前的代码常量(对照读数见 `docs/skills/skill-schedule/t695-证据.md`):
12
12
  * · `db.name`=`schedule_data.db`(原 `src/fetch/paths.ts` 的 `DB_FILENAME`);
13
- * · `html.dir`=`schedule_html/help`(原 `src/help/helpPaths.ts` 的 `HELP_HTML_DIR_PARTS` 两段——
13
+ * · `html.dir`=`schedule_html`/`html.helpDir`=`help`(两段合起来=原 `src/help/helpPaths.ts` 的
14
+ * `HELP_HTML_DIR_PARTS` 那两级 `<库目录>/schedule_html/help`——产物根与 HELP 子目录分家见下;
14
15
  * 配置形状是字符串、段间用 `/` 或 `\` 分隔,因为受限子集不收数组;见 `base-link-core/README.md` §支持范围)。
15
16
  * #764 起 `files.help`/`lark.cliPath` 出表(#761 定稿:文件名回代码常量 `作息管家_HELP`;
16
17
  * 飞书 CLI 路径由新增的「飞书 CLI」状态行替代,它不是配置项),故本表现是 3 键。
@@ -22,10 +23,15 @@
22
23
  import { configPaths, loadConfig, resetConfig, saveConfig } from 'base-link-core';
23
24
  /** 配置文件主体名:`<配置目录>/schedule.yaml`。 */
24
25
  export const SCHEDULE_CONFIG_STEM = 'schedule';
25
- /** 作息管家那份配置表:键即设置页的行,一层嵌套(子集支持范围见 base-link-core README)。 */
26
+ /** 作息管家那份配置表:键即设置页的行,一层嵌套(子集支持范围见 base-link-core README)。
27
+ *
28
+ * **产物落点分家(#843)**:`html.dir`=产物**根目录**(页面落它下面),`html.helpDir`=该根下
29
+ * HELP 那一支的子目录名。两件产物各有各的落点,一个键不当两个用;名字由来——
30
+ * `html.dir` 段串是「库目录下的哪几个子目录」的算料(不绝对化,见 `writableDefaults()`),
31
+ * `html.helpDir` 是**单段**子目录名(算料是段串,单段也是段串)。 */
26
32
  export const SCHEDULE_CONFIG_DEFAULTS = {
27
33
  db: { dir: '', name: 'schedule_data.db' },
28
- html: { dir: 'schedule_html/help' },
34
+ html: { dir: 'schedule_html', helpDir: 'help' },
29
35
  };
30
36
  /** **已退休键**(#762 过渡件):我们自己删过、老配置文件里必然还留着的键的叶子全路径。命中的键跳过校验、
31
37
  * 不进取值、也不会被写回(任何一次保存/重置天然抹掉它);**整组的子项全退休时那一层组名也不写出**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** 交付面的能力门:出口 `src/cli/cmd_read.ts` 只从这里取交付面那三件东西。
2
+ * - `deliverHtml`/`HtmlDelivery`——本包写 HTML 文件的唯一出口(页面与 HELP 一条链);
3
+ * - `pageStemFor`——产物文件名主体的唯一定义地(`./naming.ts`)。
4
+ * 落点目录算法不在这里:它住 `src/fetch/paths.ts`(全部落点算式的唯一定义地)。 */
5
+ export { deliverHtml } from './output.js';
6
+ export type { HtmlDelivery } from './output.js';
7
+ export { pageStemFor, SCHEDULE_SKILL_NAME } from './naming.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA;;;wDAGwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** 交付面的能力门:出口 `src/cli/cmd_read.ts` 只从这里取交付面那三件东西。
2
+ * - `deliverHtml`/`HtmlDelivery`——本包写 HTML 文件的唯一出口(页面与 HELP 一条链);
3
+ * - `pageStemFor`——产物文件名主体的唯一定义地(`./naming.ts`)。
4
+ * 落点目录算法不在这里:它住 `src/fetch/paths.ts`(全部落点算式的唯一定义地)。 */
5
+ export { deliverHtml } from './output.js';
6
+ export { pageStemFor, SCHEDULE_SKILL_NAME } from './naming.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA;;;wDAGwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** 交付面·命名:**产物文件名主体在哪、叫什么**(一处定义,别处引用)。
2
+ *
3
+ * 本件是 #843 的「命名一处定义」那一半:全仓只有这里算得出「某一页的产物叫什么」。
4
+ * 谁能读同一份:
5
+ * · **实现**——`src/delivery/output.ts` 落盘时用它算 `stem`(唯一调用点 `src/cli/cmd_read.ts`);
6
+ * · **探针**——`docs/skills/skill-schedule/tA0-交付面探针.mjs` 把它与真跑出来的 `delivery.path` 对账;
7
+ * · **链路页与墙**(后续票 #791/#792)——**不自己算名字**:读回执里的 `delivery.path` 即可
8
+ * (票面「遗留出口」:链路页读的是本票产出的路径,不自己算名字)。所以本件不派生任何清册文件。
9
+ *
10
+ * 名字通式(时间戳/递补/扩展名**不在本件**):`〈主体〉_<YYYYMMDD_HHMMSS>[_<N>].html`,
11
+ * 由共用件 `base-paint/save-html` 的 `saveHtmlFile` 算——本件只给「主体」。
12
+ *
13
+ * **主体怎么取**:`〈技能名〉_〈页名〉`。技能名与 HELP 产物同一份(同一个技能的产物同前缀);
14
+ * 页名=**命令声明上的标题**(`CommandSpec.title`,只从能力目录的 `commands.ts` 来,
15
+ * 经生成的 `registry.ts` 转出)——同一件事不写第二遍,页面标题与文件名主体同源。
16
+ * 故本件是**纯函数**:给「key + 声明上的标题」,出「文件名主体」。零 IO、不读配置、不碰盘。
17
+ */
18
+ import type { CommandSpec } from '../shared/commandSpec.js';
19
+ /** 技能名(产物名前缀):与 HELP 产物主体 `作息管家_HELP`(`src/help/helpFile.ts` 的
20
+ * `HELP_FILE_STEM`)同一份,这里写一份是**唯一定义地**,别处引用。 */
21
+ export declare const SCHEDULE_SKILL_NAME: "\u4F5C\u606F\u7BA1\u5BB6";
22
+ /** 一条命令的产物**文件名主体**:`〈技能名〉_〈命令标题〉`。 */
23
+ export declare function pageStemFor(spec: CommandSpec): string;
24
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/delivery/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;iDACiD;AACjD,eAAO,MAAM,mBAAmB,EAAG,0BAAe,CAAC;AAEnD,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAErD"}
@@ -0,0 +1,8 @@
1
+ /** 技能名(产物名前缀):与 HELP 产物主体 `作息管家_HELP`(`src/help/helpFile.ts` 的
2
+ * `HELP_FILE_STEM`)同一份,这里写一份是**唯一定义地**,别处引用。 */
3
+ export const SCHEDULE_SKILL_NAME = '作息管家';
4
+ /** 一条命令的产物**文件名主体**:`〈技能名〉_〈命令标题〉`。 */
5
+ export function pageStemFor(spec) {
6
+ return SCHEDULE_SKILL_NAME + '_' + spec.title;
7
+ }
8
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/delivery/naming.ts"],"names":[],"mappings":"AAmBA;iDACiD;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAe,CAAC;AAEnD,uCAAuC;AACvC,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,mBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAChD,CAAC"}