skill-bill 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.
Files changed (298) hide show
  1. package/SKILL.md +127 -0
  2. package/dist/.gen-inputs.json +14 -0
  3. package/dist/cli/cmd_read.js +133 -142
  4. package/dist/cli/cmd_read.js.map +1 -1
  5. package/dist/cli/registry.d.ts +15 -0
  6. package/dist/cli/registry.d.ts.map +1 -0
  7. package/dist/cli/registry.js +22 -0
  8. package/dist/cli/registry.js.map +1 -0
  9. package/dist/fetch/db.d.ts +4 -0
  10. package/dist/fetch/db.d.ts.map +1 -1
  11. package/dist/fetch/db.js +12 -0
  12. package/dist/fetch/db.js.map +1 -1
  13. package/dist/fetch/index.d.ts +1 -1
  14. package/dist/fetch/index.d.ts.map +1 -1
  15. package/dist/fetch/index.js +1 -1
  16. package/dist/fetch/index.js.map +1 -1
  17. package/dist/help/index.d.ts +1 -0
  18. package/dist/help/index.d.ts.map +1 -1
  19. package/dist/help/index.js +1 -0
  20. package/dist/help/index.js.map +1 -1
  21. package/dist/help/lookup.d.ts.map +1 -1
  22. package/dist/help/lookup.js +3 -2
  23. package/dist/help/lookup.js.map +1 -1
  24. package/dist/help/writeWire.d.ts +16 -0
  25. package/dist/help/writeWire.d.ts.map +1 -0
  26. package/dist/help/writeWire.js +109 -0
  27. package/dist/help/writeWire.js.map +1 -0
  28. package/dist/output.d.ts +21 -0
  29. package/dist/output.d.ts.map +1 -0
  30. package/dist/output.js +48 -0
  31. package/dist/output.js.map +1 -0
  32. package/dist/policy/category.d.ts +5 -0
  33. package/dist/policy/category.d.ts.map +1 -1
  34. package/dist/policy/category.js +9 -2
  35. package/dist/policy/category.js.map +1 -1
  36. package/dist/policy/index.d.ts +1 -1
  37. package/dist/policy/index.d.ts.map +1 -1
  38. package/dist/policy/index.js +1 -1
  39. package/dist/policy/index.js.map +1 -1
  40. package/dist/policy/record.d.ts +12 -0
  41. package/dist/policy/record.d.ts.map +1 -1
  42. package/dist/policy/record.js +27 -0
  43. package/dist/policy/record.js.map +1 -1
  44. package/dist/policy/wakewords.d.ts +4 -0
  45. package/dist/policy/wakewords.d.ts.map +1 -1
  46. package/dist/policy/wakewords.js +12 -7
  47. package/dist/policy/wakewords.js.map +1 -1
  48. package/dist/query/commands.d.ts +19 -0
  49. package/dist/query/commands.d.ts.map +1 -0
  50. package/dist/query/commands.js +40 -0
  51. package/dist/query/commands.js.map +1 -0
  52. package/dist/query/detail.d.ts +26 -0
  53. package/dist/query/detail.d.ts.map +1 -0
  54. package/dist/query/detail.js +115 -0
  55. package/dist/query/detail.js.map +1 -0
  56. package/dist/query/index.d.ts +13 -0
  57. package/dist/query/index.d.ts.map +1 -0
  58. package/dist/query/index.js +12 -0
  59. package/dist/query/index.js.map +1 -0
  60. package/dist/query/list.d.ts +78 -0
  61. package/dist/query/list.d.ts.map +1 -0
  62. package/dist/query/list.js +110 -0
  63. package/dist/query/list.js.map +1 -0
  64. package/dist/query/read.d.ts +21 -0
  65. package/dist/query/read.d.ts.map +1 -0
  66. package/dist/query/read.js +301 -0
  67. package/dist/query/read.js.map +1 -0
  68. package/dist/record/collect.d.ts +18 -0
  69. package/dist/record/collect.d.ts.map +1 -0
  70. package/dist/record/collect.js +15 -0
  71. package/dist/record/collect.js.map +1 -0
  72. package/dist/record/collectBody.d.ts +29 -0
  73. package/dist/record/collectBody.d.ts.map +1 -0
  74. package/dist/record/collectBody.js +196 -0
  75. package/dist/record/collectBody.js.map +1 -0
  76. package/dist/record/commands.d.ts +11 -0
  77. package/dist/record/commands.d.ts.map +1 -0
  78. package/dist/record/commands.js +22 -0
  79. package/dist/record/commands.js.map +1 -0
  80. package/dist/record/index.d.ts +14 -0
  81. package/dist/record/index.d.ts.map +1 -0
  82. package/dist/record/index.js +12 -0
  83. package/dist/record/index.js.map +1 -0
  84. package/dist/record/receipt.d.ts +16 -0
  85. package/dist/record/receipt.d.ts.map +1 -0
  86. package/dist/record/receipt.js +11 -0
  87. package/dist/record/receipt.js.map +1 -0
  88. package/dist/record/receiptBody.d.ts +5 -0
  89. package/dist/record/receiptBody.d.ts.map +1 -0
  90. package/dist/record/receiptBody.js +112 -0
  91. package/dist/record/receiptBody.js.map +1 -0
  92. package/dist/record/scene-batch.d.ts +3 -0
  93. package/dist/record/scene-batch.d.ts.map +1 -0
  94. package/dist/record/scene-batch.js +211 -0
  95. package/dist/record/scene-batch.js.map +1 -0
  96. package/dist/record/scene-borrow.d.ts +3 -0
  97. package/dist/record/scene-borrow.d.ts.map +1 -0
  98. package/dist/record/scene-borrow.js +285 -0
  99. package/dist/record/scene-borrow.js.map +1 -0
  100. package/dist/record/scene-collect.d.ts +3 -0
  101. package/dist/record/scene-collect.d.ts.map +1 -0
  102. package/dist/record/scene-collect.js +294 -0
  103. package/dist/record/scene-collect.js.map +1 -0
  104. package/dist/record/scene-expense.d.ts +3 -0
  105. package/dist/record/scene-expense.d.ts.map +1 -0
  106. package/dist/record/scene-expense.js +21 -0
  107. package/dist/record/scene-expense.js.map +1 -0
  108. package/dist/record/scene-income.d.ts +3 -0
  109. package/dist/record/scene-income.d.ts.map +1 -0
  110. package/dist/record/scene-income.js +219 -0
  111. package/dist/record/scene-income.js.map +1 -0
  112. package/dist/record/scene-installment.d.ts +3 -0
  113. package/dist/record/scene-installment.d.ts.map +1 -0
  114. package/dist/record/scene-installment.js +248 -0
  115. package/dist/record/scene-installment.js.map +1 -0
  116. package/dist/record/scene-lend.d.ts +3 -0
  117. package/dist/record/scene-lend.d.ts.map +1 -0
  118. package/dist/record/scene-lend.js +273 -0
  119. package/dist/record/scene-lend.js.map +1 -0
  120. package/dist/record/scene-photo.d.ts +3 -0
  121. package/dist/record/scene-photo.d.ts.map +1 -0
  122. package/dist/record/scene-photo.js +262 -0
  123. package/dist/record/scene-photo.js.map +1 -0
  124. package/dist/record/scene-plain.d.ts +3 -0
  125. package/dist/record/scene-plain.d.ts.map +1 -0
  126. package/dist/record/scene-plain.js +221 -0
  127. package/dist/record/scene-plain.js.map +1 -0
  128. package/dist/record/scene-refund.d.ts +3 -0
  129. package/dist/record/scene-refund.d.ts.map +1 -0
  130. package/dist/record/scene-refund.js +281 -0
  131. package/dist/record/scene-refund.js.map +1 -0
  132. package/dist/record/scene-reimburse-done.d.ts +3 -0
  133. package/dist/record/scene-reimburse-done.d.ts.map +1 -0
  134. package/dist/record/scene-reimburse-done.js +288 -0
  135. package/dist/record/scene-reimburse-done.js.map +1 -0
  136. package/dist/record/scene-reimburse.d.ts +3 -0
  137. package/dist/record/scene-reimburse.d.ts.map +1 -0
  138. package/dist/record/scene-reimburse.js +224 -0
  139. package/dist/record/scene-reimburse.js.map +1 -0
  140. package/dist/record/scene-repay.d.ts +3 -0
  141. package/dist/record/scene-repay.d.ts.map +1 -0
  142. package/dist/record/scene-repay.js +294 -0
  143. package/dist/record/scene-repay.js.map +1 -0
  144. package/dist/record/scene-restore.d.ts +3 -0
  145. package/dist/record/scene-restore.d.ts.map +1 -0
  146. package/dist/record/scene-restore.js +250 -0
  147. package/dist/record/scene-restore.js.map +1 -0
  148. package/dist/record/scene-undo.d.ts +3 -0
  149. package/dist/record/scene-undo.d.ts.map +1 -0
  150. package/dist/record/scene-undo.js +262 -0
  151. package/dist/record/scene-undo.js.map +1 -0
  152. package/dist/record/scene-update.d.ts +3 -0
  153. package/dist/record/scene-update.d.ts.map +1 -0
  154. package/dist/record/scene-update.js +249 -0
  155. package/dist/record/scene-update.js.map +1 -0
  156. package/dist/record/scene.d.ts +79 -0
  157. package/dist/record/scene.d.ts.map +1 -0
  158. package/dist/record/scene.js +39 -0
  159. package/dist/record/scene.js.map +1 -0
  160. package/dist/record/slots.d.ts +16 -0
  161. package/dist/record/slots.d.ts.map +1 -0
  162. package/dist/record/slots.js +72 -0
  163. package/dist/record/slots.js.map +1 -0
  164. package/dist/record/write.d.ts +9 -0
  165. package/dist/record/write.d.ts.map +1 -0
  166. package/dist/record/write.js +186 -0
  167. package/dist/record/write.js.map +1 -0
  168. package/dist/render/envelope.d.ts.map +1 -1
  169. package/dist/render/envelope.js +21 -8
  170. package/dist/render/envelope.js.map +1 -1
  171. package/dist/render/errors.d.ts +1 -1
  172. package/dist/render/errors.d.ts.map +1 -1
  173. package/dist/render/errors.js.map +1 -1
  174. package/dist/render/helpFile.d.ts +85 -0
  175. package/dist/render/helpFile.d.ts.map +1 -0
  176. package/dist/render/helpFile.js +110 -0
  177. package/dist/render/helpFile.js.map +1 -0
  178. package/dist/render/helpPaths.d.ts +19 -0
  179. package/dist/render/helpPaths.d.ts.map +1 -0
  180. package/dist/render/helpPaths.js +19 -0
  181. package/dist/render/helpPaths.js.map +1 -0
  182. package/dist/render/html.js +1 -1
  183. package/dist/render/html.js.map +1 -1
  184. package/dist/render/index.d.ts +5 -1
  185. package/dist/render/index.d.ts.map +1 -1
  186. package/dist/render/index.js +4 -1
  187. package/dist/render/index.js.map +1 -1
  188. package/dist/render/templates.js +1 -1
  189. package/dist/render/templates.js.map +1 -1
  190. package/dist/render/views.d.ts +0 -22
  191. package/dist/render/views.d.ts.map +1 -1
  192. package/dist/render/views.js +1 -16
  193. package/dist/render/views.js.map +1 -1
  194. package/dist/shared/blockedSlots.d.ts +39 -0
  195. package/dist/shared/blockedSlots.d.ts.map +1 -0
  196. package/dist/shared/blockedSlots.js +105 -0
  197. package/dist/shared/blockedSlots.js.map +1 -0
  198. package/dist/shared/candidatePick.d.ts +50 -0
  199. package/dist/shared/candidatePick.d.ts.map +1 -0
  200. package/dist/shared/candidatePick.js +115 -0
  201. package/dist/shared/candidatePick.js.map +1 -0
  202. package/dist/shared/collectFrame.d.ts +15 -0
  203. package/dist/shared/collectFrame.d.ts.map +1 -0
  204. package/dist/shared/collectFrame.js +34 -0
  205. package/dist/shared/collectFrame.js.map +1 -0
  206. package/dist/shared/commandSpec.d.ts +72 -0
  207. package/dist/shared/commandSpec.d.ts.map +1 -0
  208. package/dist/shared/commandSpec.js +2 -0
  209. package/dist/shared/commandSpec.js.map +1 -0
  210. package/dist/shared/copyArea.d.ts +51 -0
  211. package/dist/shared/copyArea.d.ts.map +1 -0
  212. package/dist/shared/copyArea.js +122 -0
  213. package/dist/shared/copyArea.js.map +1 -0
  214. package/dist/shared/diffTable.d.ts +26 -0
  215. package/dist/shared/diffTable.d.ts.map +1 -0
  216. package/dist/shared/diffTable.js +77 -0
  217. package/dist/shared/diffTable.js.map +1 -0
  218. package/dist/shared/docPage.d.ts +17 -0
  219. package/dist/shared/docPage.d.ts.map +1 -0
  220. package/dist/shared/docPage.js +111 -0
  221. package/dist/shared/docPage.js.map +1 -0
  222. package/dist/shared/duplicateNote.d.ts +40 -0
  223. package/dist/shared/duplicateNote.d.ts.map +1 -0
  224. package/dist/shared/duplicateNote.js +96 -0
  225. package/dist/shared/duplicateNote.js.map +1 -0
  226. package/dist/shared/emptyNote.d.ts +15 -0
  227. package/dist/shared/emptyNote.d.ts.map +1 -0
  228. package/dist/shared/emptyNote.js +27 -0
  229. package/dist/shared/emptyNote.js.map +1 -0
  230. package/dist/shared/errorReceipt.d.ts +21 -0
  231. package/dist/shared/errorReceipt.d.ts.map +1 -0
  232. package/dist/shared/errorReceipt.js +37 -0
  233. package/dist/shared/errorReceipt.js.map +1 -0
  234. package/dist/shared/flowSteps.d.ts +25 -0
  235. package/dist/shared/flowSteps.d.ts.map +1 -0
  236. package/dist/shared/flowSteps.js +49 -0
  237. package/dist/shared/flowSteps.js.map +1 -0
  238. package/dist/shared/installmentPreview.d.ts +23 -0
  239. package/dist/shared/installmentPreview.d.ts.map +1 -0
  240. package/dist/shared/installmentPreview.js +144 -0
  241. package/dist/shared/installmentPreview.js.map +1 -0
  242. package/dist/shared/outsideScan.d.ts +34 -0
  243. package/dist/shared/outsideScan.d.ts.map +1 -0
  244. package/dist/shared/outsideScan.js +116 -0
  245. package/dist/shared/outsideScan.js.map +1 -0
  246. package/dist/shared/pageIdentity.d.ts +30 -0
  247. package/dist/shared/pageIdentity.d.ts.map +1 -0
  248. package/dist/shared/pageIdentity.js +33 -0
  249. package/dist/shared/pageIdentity.js.map +1 -0
  250. package/dist/shared/pageShell.d.ts +24 -0
  251. package/dist/shared/pageShell.d.ts.map +1 -0
  252. package/dist/shared/pageShell.js +42 -0
  253. package/dist/shared/pageShell.js.map +1 -0
  254. package/dist/shared/photoEscape.d.ts +53 -0
  255. package/dist/shared/photoEscape.d.ts.map +1 -0
  256. package/dist/shared/photoEscape.js +139 -0
  257. package/dist/shared/photoEscape.js.map +1 -0
  258. package/dist/shared/prefillNote.d.ts +21 -0
  259. package/dist/shared/prefillNote.d.ts.map +1 -0
  260. package/dist/shared/prefillNote.js +78 -0
  261. package/dist/shared/prefillNote.js.map +1 -0
  262. package/dist/shared/receiptParts.d.ts +12 -0
  263. package/dist/shared/receiptParts.d.ts.map +1 -0
  264. package/dist/shared/receiptParts.js +38 -0
  265. package/dist/shared/receiptParts.js.map +1 -0
  266. package/dist/shared/recentPicks.d.ts +26 -0
  267. package/dist/shared/recentPicks.d.ts.map +1 -0
  268. package/dist/shared/recentPicks.js +41 -0
  269. package/dist/shared/recentPicks.js.map +1 -0
  270. package/dist/shared/recordPicker.d.ts +32 -0
  271. package/dist/shared/recordPicker.d.ts.map +1 -0
  272. package/dist/shared/recordPicker.js +201 -0
  273. package/dist/shared/recordPicker.js.map +1 -0
  274. package/dist/shared/rowEditorTable.d.ts +31 -0
  275. package/dist/shared/rowEditorTable.d.ts.map +1 -0
  276. package/dist/shared/rowEditorTable.js +103 -0
  277. package/dist/shared/rowEditorTable.js.map +1 -0
  278. package/dist/shared/summaryRow.d.ts +44 -0
  279. package/dist/shared/summaryRow.d.ts.map +1 -0
  280. package/dist/shared/summaryRow.js +82 -0
  281. package/dist/shared/summaryRow.js.map +1 -0
  282. package/dist/shared/typeBadge.d.ts +21 -0
  283. package/dist/shared/typeBadge.d.ts.map +1 -0
  284. package/dist/shared/typeBadge.js +68 -0
  285. package/dist/shared/typeBadge.js.map +1 -0
  286. package/dist/shared/userWording.d.ts +54 -0
  287. package/dist/shared/userWording.d.ts.map +1 -0
  288. package/dist/shared/userWording.js +131 -0
  289. package/dist/shared/userWording.js.map +1 -0
  290. package/dist/shared/writeParts.d.ts +62 -0
  291. package/dist/shared/writeParts.d.ts.map +1 -0
  292. package/dist/shared/writeParts.js +39 -0
  293. package/dist/shared/writeParts.js.map +1 -0
  294. package/dist/triggers/wake-assets.d.ts +37 -0
  295. package/dist/triggers/wake-assets.d.ts.map +1 -0
  296. package/dist/triggers/wake-assets.js +951 -0
  297. package/dist/triggers/wake-assets.js.map +1 -0
  298. package/package.json +10 -4
@@ -0,0 +1,186 @@
1
+ /** 记账写入域两条命令的处理体(**从 `src/cli/cmd_read.ts` 归位到这里**):
2
+ * `bill.record.add`(记一笔)与 `bill.record.update`(改记录,op=改字段/撤销/恢复)。
3
+ *
4
+ * 谁在用(两个调用点,指名):`src/record/commands.ts` 的两条声明各引一支——
5
+ * `writeRecordAdd` 引给 `bill.record.add`,`writeRecordUpdate` 引给 `bill.record.update`;
6
+ * 出口分派 `src/cli/cmd_read.ts` 只查注册表再调 `runRecordWrite`,不再认这两个命令名。
7
+ *
8
+ * 两支的分岔口径(本票的新规矩):
9
+ * **有阻断项不再报参数错退出**,改出过程型采集页(`./collect.ts`),退出码 0、`ok:false`、不写库;
10
+ * 阻断项=必需的槽位没给(`./collect.ts` 的 `missingSlots`)**或**金额符号与这一型的方向不符
11
+ * (`../shared/blockedSlots.ts` 的 `blockedItems`:记支出要负数、记收入要正数)。两件都由 `blockedItems`
12
+ * 合成一张表,**非空即不进写库那一步**——这就是「真阻断」的根,页上那条阻断条只是它的影子。
13
+ * **方向判定只服务录入路径**:`writeRecordAdd`(`bill.record.add`)那一支传 `kind` 才判方向;
14
+ * `writeRecordUpdate`(改字段/撤销/恢复三支)不传方向,那三支只按「缺的必需槽位」阻断。
15
+ * 阻断项清空照旧写库,出结果型回执整页(`./receipt.ts`)。
16
+ * 必需槽位是哪些住 `./collect.ts` 的 `RECORD_SLOTS`(唯一定义地);真值校验仍走 `src/policy`
17
+ * (`validateAddInput`/`validateUpdateInput`/`needId`/`parseRecordOp`),取数写库仍走 `src/fetch`
18
+ * (`addBill`/`updateBill`/`undoBill`/`restoreBill`),本文件只做编排与回执事实装配。
19
+ * 写入字段口径:记一笔写整列全集(含缺省值列);改字段=本次实际变更的列;撤销/恢复写的是 `deleted_at`。
20
+ */
21
+ import { addBill, updateBill, undoBill, restoreBill, getById, listRecent, DB_FILENAME } from '../fetch/index.js';
22
+ import { needId, parseRecordOp, validateAddInput, validateUpdateInput } from '../policy/index.js';
23
+ import { buildRecordReceipt } from '../render/views.js';
24
+ import { blockedItems, blockedMessage } from '../shared/blockedSlots.js';
25
+ import { fieldLabelOf, statusNoteOf, wakeWordOf } from '../shared/userWording.js';
26
+ import { totalChanges } from '../shared/writeParts.js';
27
+ import { actionStamp } from '../shared/copyArea.js';
28
+ import { RECORD_SLOTS, missingSlots, recordCollectDoc } from './collect.js';
29
+ import { recordReceiptDoc } from './receipt.js';
30
+ /** 记一笔写进库的列全集(**由槽位表派生,同一件事实一处定义**):`add` 那一行的七个参数名就是它写进库的七个列
31
+ * (缺省值列也算写入:时间/账户/账本/币种都带缺省)。名单只有 `./collect.ts` 的 `RECORD_SLOTS` 一处。 */
32
+ const ADD_FIELDS = RECORD_SLOTS['bill.record.add'].map((s) => s.name);
33
+ /** 近期记录的回看天数(预填标注/重复检测/三枚选择器的候选都取这一段)。 */
34
+ const RECENT_WINDOW_DAYS = 90;
35
+ /** 本次数据来源(复制日志第 3 段);库文件名逐字取本包常量,共用件不取。**两页各一句**:
36
+ * 回执页那句说的是写库回执,采集页不写库,不许沿用回执页那句(改前两页共用一句,采集页照抄了「写库回执」)。
37
+ * 本轮整改删掉两处内部话(照 `docs/skills/skill-bill/t407-文字审查.md` 第 57、58 条):库内表名 `bills` 与
38
+ * `prompt` 那个英文词都不上屏;`本地时钟` 只留在复制日志的时间戳里(那里是过程证据,正文不印)。 */
39
+ const SOURCE_RECEIPT = DB_FILENAME + '(写库回执)';
40
+ const SOURCE_COLLECT = DB_FILENAME + '(只读:这一页先不写库,只采集)';
41
+ /** 本地时钟时刻串(写入时间与复制日志时间戳)。**取时钟在这一步,不在共用位**——取值口径住
42
+ * `../shared/copyArea.js` 的 `actionStamp`(写域与查询域两种页共用同一份,本件只调它)。 */
43
+ function nowStamp() {
44
+ return actionStamp();
45
+ }
46
+ /** 本页执行那天(`YYYY-MM-DD`):缺省时间的取值与重复检测的比对面用它。 */
47
+ function todayOf() {
48
+ return new Date().toISOString().slice(0, 10);
49
+ }
50
+ /** 库内那一行写进明细表的项名(**库列名不上屏**:行名走 `../shared/userWording.js` 的 `fieldLabelOf`)。 */
51
+ function rowDetail(r) {
52
+ return [
53
+ { k: fieldLabelOf('id'), v: String(r.id) },
54
+ { k: fieldLabelOf('category'), v: r.category },
55
+ { k: fieldLabelOf('amount'), v: r.amount.toFixed(2) },
56
+ { k: fieldLabelOf('time'), v: r.time },
57
+ { k: fieldLabelOf('account'), v: r.account },
58
+ { k: fieldLabelOf('ledger'), v: r.ledger },
59
+ { k: fieldLabelOf('currency'), v: r.currency },
60
+ { k: fieldLabelOf('note'), v: r.note },
61
+ ];
62
+ }
63
+ /** 库内那一列在改前的值。字段名只认 `BillRow` 上真有的列——形状写得出(铁律三),
64
+ * 不拿 `unknown` 中转成宽字典再按变长字符串取字段。`patch` 那一边由 `src/policy` 的
65
+ * `validateUpdateInput` 校验过字段与值,这里只读回来比对。 */
66
+ function preValue(pre, column) {
67
+ return Object.prototype.hasOwnProperty.call(pre, column) ? pre[column] : undefined;
68
+ }
69
+ /** 摘要行的事实:回执页取**库内那一行**(不是拿 params 顶——回执报的是库里的真值)。 */
70
+ function rowFacts(r) {
71
+ return { amount: r.amount, category: r.category, account: r.account, ledger: r.ledger, time: r.time };
72
+ }
73
+ /** 有阻断项时的那一支:出过程型采集页(不写库、`ok:false`)。
74
+ * 取数只此一处:`listRecent` 取回的近期记录,预填标注/重复检测/三枚选择器的候选三处共用。 */
75
+ function collectOut(input) {
76
+ const message = blockedMessage(input.missing, input.blocked);
77
+ const today = todayOf();
78
+ const anchor = typeof input.params['time'] === 'string' ? String(input.params['time']) : today;
79
+ return {
80
+ data: { ok: false, message },
81
+ html: recordCollectDoc({
82
+ key: input.key,
83
+ params: input.params,
84
+ slots: input.slots,
85
+ missing: input.missing,
86
+ source: SOURCE_COLLECT,
87
+ actionAt: nowStamp(),
88
+ today,
89
+ recent: listRecent(input.db, anchor, RECENT_WINDOW_DAYS),
90
+ }),
91
+ };
92
+ }
93
+ /** 写库成功后的收口:回执事实 + envelope 载荷 + 回执整页。 */
94
+ function finish(input) {
95
+ const receipt = {
96
+ op: input.op,
97
+ recordId: input.row.id,
98
+ summary: input.summary,
99
+ affectedRows: totalChanges(input.db.db) - input.before,
100
+ writtenFields: input.fields,
101
+ noChange: input.noChange,
102
+ source: SOURCE_RECEIPT,
103
+ actionAt: nowStamp(),
104
+ };
105
+ return {
106
+ data: { ...buildRecordReceipt(input.summary), receipt },
107
+ html: recordReceiptDoc({
108
+ key: input.key, params: input.params, receipt,
109
+ writtenDetail: input.writtenDetail, detail: input.detail,
110
+ facts: rowFacts(input.row),
111
+ recent: listRecent(input.db, input.row.time, RECENT_WINDOW_DAYS),
112
+ }),
113
+ };
114
+ }
115
+ /** `bill.record.add`(记一笔,**录入路径**):有阻断项(缺分类或金额/金额符号与这一型不符)即出采集页,
116
+ * 清空即写库出回执整页。方向判定只在这一支传 `kind`。 */
117
+ export function writeRecordAdd(params, db) {
118
+ const key = 'bill.record.add';
119
+ const slots = RECORD_SLOTS[key];
120
+ const missing = missingSlots(params, slots);
121
+ const kind = typeof params.kind === 'string' ? params.kind : '';
122
+ const blocked = blockedItems({ params, missing, kind });
123
+ if (blocked.length > 0)
124
+ return collectOut({ key, params, slots, missing, blocked, db });
125
+ const before = totalChanges(db.db);
126
+ const input = validateAddInput(params);
127
+ const r = addBill(db, input);
128
+ // 回执摘要里的型名改唤醒词(本轮整改):`(expense)` 这种内建型名不上屏,
129
+ // 换成「记支出」这类用户自己说过的词;`id=` 换「记录编号」;`prompt` 那个英文词删。
130
+ const extra = kind === 'photo'
131
+ ? '(三要素以外部识别为准)'
132
+ : kind === 'batch' ? '(只落了其中一笔)' : kind ? '(' + wakeWordOf(kind) + ')' : '';
133
+ return finish({
134
+ db, key, params, op: 'add', row: r, fields: ADD_FIELDS, before, noChange: false,
135
+ summary: `已记录:${r.category} ${r.amount.toFixed(2)}${extra}(记录编号 ${r.id},这一页可以复制)`,
136
+ writtenDetail: '这一笔已记进账本',
137
+ detail: rowDetail(r),
138
+ });
139
+ }
140
+ /** `bill.record.update`(改记录):有阻断项(缺 `id`)即出采集页;op 决定改字段/撤销/恢复三支。
141
+ * **这一支不判金额方向**:撤销/恢复本来就不带 `kind`+`amount`,带上也不该被方向判定拦下、改出采集页。 */
142
+ export function writeRecordUpdate(params, db) {
143
+ const key = 'bill.record.update';
144
+ const slots = RECORD_SLOTS[key];
145
+ const missing = missingSlots(params, slots);
146
+ const blocked = blockedItems({ params, missing, kind: '' });
147
+ if (blocked.length > 0)
148
+ return collectOut({ key, params, slots, missing, blocked, db });
149
+ const op = parseRecordOp(params);
150
+ const before = totalChanges(db.db);
151
+ if (op === 'undo') {
152
+ const id = needId(params);
153
+ const r = undoBill(db, id);
154
+ return finish({
155
+ db, key, params, op: 'undo', row: r, fields: ['deleted_at'], before, noChange: false,
156
+ summary: `已撤销,记录还在,随时可恢复(记录编号 ${r.id})`,
157
+ writtenDetail: '已标记撤销(记录还在库里,只是不再算进查询与统计)',
158
+ detail: [{ k: fieldLabelOf('op'), v: statusNoteOf('软删打标(deleted_at = now,不物理删)') }, { k: fieldLabelOf('id'), v: String(r.id) }],
159
+ });
160
+ }
161
+ if (op === 'restore') {
162
+ const id = needId(params);
163
+ const r = restoreBill(db, id);
164
+ return finish({
165
+ db, key, params, op: 'restore', row: r, fields: ['deleted_at'], before, noChange: false,
166
+ summary: `已恢复(记录编号 ${r.id})`,
167
+ writtenDetail: '已恢复(撤销标记清掉,这一笔回到查询与统计里)',
168
+ detail: [{ k: fieldLabelOf('op'), v: statusNoteOf('置 NULL(deleted_at 清空)') }, { k: fieldLabelOf('id'), v: String(r.id) }],
169
+ });
170
+ }
171
+ const { id, patch } = validateUpdateInput(params);
172
+ const pre = getById(db, id);
173
+ const r = updateBill(db, id, patch);
174
+ const fields = Object.keys(patch);
175
+ const noChange = fields.every((f) => preValue(pre, f) === patch[f]);
176
+ return finish({
177
+ db, key, params, op: 'update', row: r, fields, before, noChange,
178
+ summary: `已修改:${r.id}(改了 ${fields.map((f) => fieldLabelOf(f)).join('、')})`,
179
+ writtenDetail: '这一条已改好',
180
+ detail: [
181
+ { k: fieldLabelOf('id'), v: String(r.id) },
182
+ ...fields.map((f) => ({ k: fieldLabelOf(f), v: String(patch[f]) })),
183
+ ],
184
+ });
185
+ }
186
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/record/write.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAmD,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAiBzD,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIvD;AAGD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAatE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAG1D"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmD,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAkCpH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAmB,CAAC;AAE9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIvD;AAGD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAatE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAG1D"}
@@ -1,13 +1,12 @@
1
- // 渲染层·envelope:16 联动 key×shape 映射(拆分表);key 字符串后续票落表时冻结,此处只做形状分配与全字段校验。
1
+ // 页面交付·envelope:16 联动 key×shape 映射(拆分表);key 字符串后续票落表时冻结,此处只做形状分配与全字段校验。
2
+ // 迁移过的命令(写入域两条 + 查询域四条)的形状**不在本文件写死**:从 `src/cli/registry.ts` 运行期派生。
2
3
  import { createEnvelope, parseEnvelope, parseRegistryKey } from 'base-link-core';
4
+ import { REGISTRY } from '../cli/registry.js';
3
5
  import { BillRenderError } from './errors.js';
4
- export const BILL_KEY_SHAPES = {
5
- 'bill.record.add': 'receipt',
6
- 'bill.record.update': 'receipt',
7
- 'bill.record.today': 'list',
8
- 'bill.record.range': 'list',
9
- 'bill.record.search': 'list',
10
- 'bill.record.detail': 'detail',
6
+ /** 过渡表是**债务**:10 条尚未搬进能力目录的命令,形状仍写在这里。
7
+ * 迁移过的六条(写入域两条 + 查询域四条)从表里删掉,形状由注册表运行期派生(见下 `keyShapeTable`);
8
+ * 余下待搬迁的域各自成票时,本表跟着变薄,直到「全部命令的形状从注册表派生」。 */
9
+ const TRANSITIONAL_KEY_SHAPES = {
11
10
  'bill.analysis.overview': 'stat',
12
11
  'bill.analysis.compare': 'analysis',
13
12
  'bill.analysis.trend': 'analysis',
@@ -19,6 +18,20 @@ export const BILL_KEY_SHAPES = {
19
18
  'bill.setup.run': 'receipt',
20
19
  'bill.help.lookup': 'list',
21
20
  };
21
+ /** 形状表的组成:过渡表打底 + 注册表里的命令逐条派生(**形状事实只住各能力的 `commands.ts`**)。
22
+ * 过渡表里若还留着同一条命令且形状对不上 → 抛:那就是漏删了过渡表那一行。 */
23
+ function keyShapeTable() {
24
+ const out = { ...TRANSITIONAL_KEY_SHAPES };
25
+ for (const spec of Object.values(REGISTRY)) {
26
+ const prev = out[spec.key];
27
+ if (prev !== undefined && prev !== spec.shape) {
28
+ throw new BillRenderError('BILL_SHAPE_MISMATCH', '形状两处不一致(迁移过的命令要从过渡表里删掉):' + spec.key);
29
+ }
30
+ out[spec.key] = spec.shape;
31
+ }
32
+ return out;
33
+ }
34
+ export const BILL_KEY_SHAPES = keyShapeTable();
22
35
  export function billShapeFor(key) {
23
36
  const s = BILL_KEY_SHAPES[key];
24
37
  if (!s)
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAqC,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAkC;IAC5D,iBAAiB,EAAE,SAAS;IAC5B,oBAAoB,EAAE,SAAS;IAC/B,mBAAmB,EAAE,MAAM;IAC3B,mBAAmB,EAAE,MAAM;IAC3B,oBAAoB,EAAE,MAAM;IAC5B,oBAAoB,EAAE,QAAQ;IAC9B,wBAAwB,EAAE,MAAM;IAChC,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;IACjC,iBAAiB,EAAE,SAAS;IAC5B,iBAAiB,EAAE,MAAM;IACzB,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,MAAM;IAC5B,kBAAkB,EAAE,SAAS;IAC7B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,MAAM;CAC3B,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IACzE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,IAAa;IAC1D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE,KAAK,GAAG,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,cAAc,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAqC,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;6CAE6C;AAC7C,MAAM,uBAAuB,GAAkC;IAC7D,wBAAwB,EAAE,MAAM;IAChC,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;IACjC,iBAAiB,EAAE,SAAS;IAC5B,iBAAiB,EAAE,MAAM;IACzB,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,MAAM;IAC5B,kBAAkB,EAAE,SAAS;IAC7B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,MAAM;CAC3B,CAAC;AAEF;4CAC4C;AAC5C,SAAS,aAAa;IACpB,MAAM,GAAG,GAAkC,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAkC,aAAa,EAAE,CAAC;AAE9E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IACzE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,IAAa;IAC1D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE,KAAK,GAAG,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,cAAc,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACrG,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare class BillRenderError extends Error {
2
- readonly code: 'BILL_UNKNOWN_KEY' | 'BILL_BAD_PAYLOAD' | 'BILL_SHAPE_MISMATCH' | 'BILL_TEMPLATE_MISSING' | 'BILL_MARKER_INVALID' | 'BILL_HTML_TOO_LARGE';
2
+ readonly code: 'BILL_UNKNOWN_KEY' | 'BILL_BAD_PAYLOAD' | 'BILL_SHAPE_MISMATCH' | 'BILL_TEMPLATE_MISSING' | 'BILL_MARKER_INVALID' | 'BILL_HTML_TOO_LARGE' | 'BILL_HELP_MISSING_DATA';
3
3
  constructor(code: BillRenderError['code'], message: string);
4
4
  }
5
5
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EACT,kBAAkB,GAAG,kBAAkB,GAAG,qBAAqB,GAC/D,uBAAuB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;gBAChE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAK3D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EACT,kBAAkB,GAAG,kBAAkB,GAAG,qBAAqB,GAC/D,uBAAuB,GAAG,qBAAqB,GAAG,qBAAqB,GACvE,wBAAwB,CAAC;gBACjB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAK3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAE+D;IAC5E,YAAY,IAA6B,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAGgB;IAC7B,YAAY,IAA6B,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,85 @@
1
+ import { WAKE_GROUPS } from '../triggers/wake-assets.js';
2
+ /** 「饼干记账help」交付文件的文件名主体(接线层写死;调用方不接受外部传入,照 #139 S3-3)。 */
3
+ export declare const HELP_FILE_STEM: "\u997C\u5E72\u8BB0\u8D26_HELP";
4
+ /** 5 键头(老实物逐字)。 */
5
+ export declare const HELP_FILE_SKILL_NAME: "\u997C\u5E72\u8BB0\u8D26";
6
+ export declare const HELP_FILE_TITLE: "\u997C\u5E72\u8BB0\u8D26 \u00B7 \u4F7F\u7528\u624B\u518C(HELP)";
7
+ /** 技能数据世代版本(老口径 `summary.version`,非 npm 包版本)。 */
8
+ export declare const HELP_FILE_VERSION: "2.0";
9
+ /** 首次使用横幅的 prompt 取自该场景(老 `SETUP_INIT_SCENE_ID`)。 */
10
+ export declare const HELP_INIT_SCENE_ID: "setup_init_wizard";
11
+ export interface HelpContactItem {
12
+ readonly label: string;
13
+ readonly value: string;
14
+ /** 标记「可点链接」(老实物该键为真时渲染成 `<a>`)。 */
15
+ readonly url?: true;
16
+ }
17
+ export interface HelpContact {
18
+ readonly items: readonly HelpContactItem[];
19
+ readonly copy_all: true;
20
+ }
21
+ /** 联系作者三项(老 `render_help.py:59-63` 的 CONTACT + `:206-213` 的 items 组法逐字)。 */
22
+ export declare const HELP_CONTACT: HelpContact;
23
+ /** 透传信息块(老契约 `{id,title,html}`)。**自 t202 起共享 help 模板会渲染它**:块 `id` 逐字命中某个
24
+ * 一级分组的 `id` 时,该块渲在那个分组页的页首。本件两块(`help_summary`/`help_wake_words`)与 7 个
25
+ * 分组 id 零碰撞 ⇒ 本件页面上仍**不渲染**(行为同旧版,照旧只作页面外消费的透传位)。
26
+ * 契约=`docs/base/base-render/t202-help-meta-blocks.md`。 */
27
+ export interface HelpMetaBlock {
28
+ readonly id: string;
29
+ readonly title: string;
30
+ readonly html: string;
31
+ }
32
+ /** 首次使用横幅(老 `:221-227` 五键 + 新线追加的显隐开关 `hidden`)。 */
33
+ export interface HelpInitBanner {
34
+ readonly title: string;
35
+ readonly subtitle: string;
36
+ readonly button_text: string;
37
+ readonly prompt: string;
38
+ readonly closable: true;
39
+ readonly hidden: boolean;
40
+ }
41
+ /** 老 5 键 + 三块可选键(共享 help 模板运行时契约的超集)。 */
42
+ export interface HelpFileData {
43
+ readonly skill_name: typeof HELP_FILE_SKILL_NAME;
44
+ readonly title: typeof HELP_FILE_TITLE;
45
+ readonly subtitle: string;
46
+ readonly contact: HelpContact;
47
+ readonly groups: typeof WAKE_GROUPS;
48
+ readonly meta_blocks: readonly HelpMetaBlock[];
49
+ readonly version: typeof HELP_FILE_VERSION;
50
+ readonly init_banner: HelpInitBanner;
51
+ }
52
+ export interface HelpFileOptions {
53
+ /** 库是否已初始化(`true` ⇒ 首次使用横幅隐藏)。缺省 `false`=照显(见模块头:误显的代价小于误藏)。 */
54
+ readonly initialized?: boolean;
55
+ }
56
+ /** 老 `%Y-%m-%d %H:%M` 等价物(本地时区,零填充;非法 Date 即坏参,不返空串)。 */
57
+ export declare function formatHelpMinute(now: Date): string;
58
+ /** 老 `:194-195` 的 `summary_line`:计数与版本**派生**,不写死 7/74(改资产即跟变)。 */
59
+ export declare function deriveSummaryLine(now?: Date): string;
60
+ /** 两块 meta:HELP 汇总(=summaryLine 同源)+ HELP 唤醒词(=口径层那 4 条派生)。 */
61
+ export declare function buildMetaBlocks(summaryLine: string): readonly HelpMetaBlock[];
62
+ /** 首次使用横幅:文案照老实样,`prompt` 取自初始化场景的 `prompt_template`(单源)。
63
+ * 该场景缺位即抛(内容资产被机器生成 + 摘要锁,缺位属真故障,不静默把横幅降级掉)。 */
64
+ export declare function buildInitBanner(initialized: boolean): HelpInitBanner;
65
+ /** 内容资产 + 派生 → 全量 HELP JSON(纯函数;`now` 显式传入以保证可复现)。 */
66
+ export declare function buildHelpFileData(now?: Date, opts?: HelpFileOptions): HelpFileData;
67
+ /** 全量 HELP JSON → 全help模板 HTML(模板唯一实现=共享层 verbatim 老实物;空分组抛 `missing-data`,调用方 exit 5)。 */
68
+ export declare function renderHelpFileHtml(data: HelpFileData): string;
69
+ /** 交付索引(envelope 的 `data` 载荷;`list` 形要 `items`):域级一行,计数全**派生**——
70
+ * 与 `help_summary` 同源思路,改资产即跟变,不回写第二份数字。 */
71
+ export interface HelpIndexItem {
72
+ readonly id: string;
73
+ readonly icon: string;
74
+ readonly label: string;
75
+ readonly subgroupCount: number;
76
+ readonly sceneCount: number;
77
+ }
78
+ export interface HelpIndex {
79
+ readonly items: readonly HelpIndexItem[];
80
+ readonly total: number;
81
+ readonly sceneTotal: number;
82
+ readonly subgroupTotal: number;
83
+ }
84
+ export declare function buildHelpIndex(): HelpIndex;
85
+ //# sourceMappingURL=helpFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpFile.d.ts","sourceRoot":"","sources":["../../src/render/helpFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /** #145 · 「饼干记账help」的交付**内容**:内容资产 + 派生 → 共享 help 模板(`base-paint/help-shell`)全页 HTML。
2
+ *
3
+ * 本模块**零 IO、零落盘**:落点与写盘全在 CLI 交付管线(#144:`render/helpPaths.ts` + `output.ts`)。
4
+ * 逐字对照老口径(只读基线 `D:\2Study\StudyNotes\SKILLS\饼干记账\scripts\render_help.py:build_help_contract`):
5
+ * - `skill_name`/`title`/`contact`/`version` 照老实样(`:197-214`);
6
+ * - `subtitle` 与 `meta_blocks[0]` 同源派生(老 `:194-202` 的 `summary_line` 一处算、两处用);
7
+ * - `groups` 由内容资产直转(`WAKE_GROUPS`,只读引用不 clone);
8
+ * - `init_banner` 文案照老 `INIT_BANNER_TEXT`(`:69-74`),`prompt` 取自 `setup_init_wizard`
9
+ * 场景的 `prompt_template`(老 `:124-132` 同一个「从汇总里取该场景 prompt」的单源做法)。
10
+ *
11
+ * 三块可选键(用户 Q9=B 完整照传;仓内共享 help 模板运行时全量读这些键,TS 类型面只声明 5 键):
12
+ * - `meta_blocks`:两块(`help_summary`/`help_wake_words`),内容全部派生,不写第二份源;
13
+ * - `version`:`'2.0'`——老口径 `str(summary.get("version","2.0"))`,语义是**技能数据世代**
14
+ * (bill 自己的 `init-status` 也自述「v2.0 特征 deleted_at」),**不是** npm 包版本 `0.1.0`;
15
+ * - `init_banner`:显隐由 `hidden` 控。老口径是「未初始化才给这个键」,help模板读的却是 `hidden`
16
+ * (`help-template.html` 的 `INIT_BANNER && !INIT_BANNER.hidden`),故新线**键常在、显隐走 `hidden`**:
17
+ * payload 形状不随状态变,下游用例能断言同一个键集。初始化状态由调用方传入(本模块零 IO)。
18
+ */
19
+ import { renderHelpShellHtml } from 'base-paint/help-shell';
20
+ import { HELP_WAKE_WORDS, SCENE_BY_ID, WAKE_ASSETS, WAKE_GROUPS } from '../triggers/wake-assets.js';
21
+ import { BillRenderError } from './errors.js';
22
+ /** 「饼干记账help」交付文件的文件名主体(接线层写死;调用方不接受外部传入,照 #139 S3-3)。 */
23
+ export const HELP_FILE_STEM = '饼干记账_HELP';
24
+ /** 5 键头(老实物逐字)。 */
25
+ export const HELP_FILE_SKILL_NAME = '饼干记账';
26
+ export const HELP_FILE_TITLE = '饼干记账 · 使用手册(HELP)';
27
+ /** 技能数据世代版本(老口径 `summary.version`,非 npm 包版本)。 */
28
+ export const HELP_FILE_VERSION = '2.0';
29
+ /** 首次使用横幅的 prompt 取自该场景(老 `SETUP_INIT_SCENE_ID`)。 */
30
+ export const HELP_INIT_SCENE_ID = 'setup_init_wizard';
31
+ /** 联系作者三项(老 `render_help.py:59-63` 的 CONTACT + `:206-213` 的 items 组法逐字)。 */
32
+ export const HELP_CONTACT = Object.freeze({
33
+ items: Object.freeze([
34
+ Object.freeze({ label: '邮箱', value: '975559549@qq.com' }),
35
+ Object.freeze({ label: 'GitHub', value: 'https://github.com/FeatherHunter/SKILLS', url: true }),
36
+ Object.freeze({ label: 'Issues', value: 'https://github.com/FeatherHunter/SKILLS/issues', url: true }),
37
+ ]),
38
+ copy_all: true,
39
+ });
40
+ /** 老 `%Y-%m-%d %H:%M` 等价物(本地时区,零填充;非法 Date 即坏参,不返空串)。 */
41
+ export function formatHelpMinute(now) {
42
+ if (!(now instanceof Date) || Number.isNaN(now.getTime())) {
43
+ throw new BillRenderError('BILL_HELP_MISSING_DATA', 'HELP 更新时间须为有效 Date(缺失阻断不返空)。');
44
+ }
45
+ const p = (n) => String(n).padStart(2, '0');
46
+ return String(now.getFullYear()) + '-' + p(now.getMonth() + 1) + '-' + p(now.getDate())
47
+ + ' ' + p(now.getHours()) + ':' + p(now.getMinutes());
48
+ }
49
+ /** 老 `:194-195` 的 `summary_line`:计数与版本**派生**,不写死 7/74(改资产即跟变)。 */
50
+ export function deriveSummaryLine(now = new Date()) {
51
+ return String(WAKE_GROUPS.length) + ' 功能域 · ' + String(WAKE_ASSETS.length)
52
+ + ' 场景 · 版本 ' + HELP_FILE_VERSION + ' · 更新于 ' + formatHelpMinute(now);
53
+ }
54
+ /** 两块 meta:HELP 汇总(=summaryLine 同源)+ HELP 唤醒词(=口径层那 4 条派生)。 */
55
+ export function buildMetaBlocks(summaryLine) {
56
+ return [
57
+ { id: 'help_summary', title: 'HELP 汇总', html: '<p>' + summaryLine + '</p>' },
58
+ { id: 'help_wake_words', title: 'HELP 唤醒词', html: '<p>' + HELP_WAKE_WORDS.join(' / ') + '</p>' },
59
+ ];
60
+ }
61
+ /** 首次使用横幅:文案照老实样,`prompt` 取自初始化场景的 `prompt_template`(单源)。
62
+ * 该场景缺位即抛(内容资产被机器生成 + 摘要锁,缺位属真故障,不静默把横幅降级掉)。 */
63
+ export function buildInitBanner(initialized) {
64
+ const scene = SCENE_BY_ID[HELP_INIT_SCENE_ID];
65
+ const prompt = scene?.prompt_template;
66
+ if (typeof prompt !== 'string' || prompt.length === 0) {
67
+ throw new BillRenderError('BILL_HELP_MISSING_DATA', 'HELP 首次使用横幅缺 prompt:内容资产无场景 ' + HELP_INIT_SCENE_ID);
68
+ }
69
+ return {
70
+ title: '🚀 第一次用饼干记账?',
71
+ subtitle: '从「初始化」开始 — 自动检测环境、确认数据目录、建库、验证,全程零决策。完成初始化后,本区域将不再出现。',
72
+ button_text: '📋 复制初始化 prompt',
73
+ prompt,
74
+ closable: true,
75
+ hidden: initialized === true,
76
+ };
77
+ }
78
+ /** 内容资产 + 派生 → 全量 HELP JSON(纯函数;`now` 显式传入以保证可复现)。 */
79
+ export function buildHelpFileData(now = new Date(), opts = {}) {
80
+ if (WAKE_GROUPS.length === 0 || WAKE_ASSETS.length === 0) {
81
+ throw new BillRenderError('BILL_HELP_MISSING_DATA', 'HELP 内容资产为空(WAKE_GROUPS/WAKE_ASSETS)');
82
+ }
83
+ const summaryLine = deriveSummaryLine(now);
84
+ return {
85
+ skill_name: HELP_FILE_SKILL_NAME,
86
+ title: HELP_FILE_TITLE,
87
+ subtitle: summaryLine,
88
+ contact: HELP_CONTACT,
89
+ groups: WAKE_GROUPS,
90
+ meta_blocks: buildMetaBlocks(summaryLine),
91
+ version: HELP_FILE_VERSION,
92
+ init_banner: buildInitBanner(opts.initialized === true),
93
+ };
94
+ }
95
+ /** 全量 HELP JSON → 全help模板 HTML(模板唯一实现=共享层 verbatim 老实物;空分组抛 `missing-data`,调用方 exit 5)。 */
96
+ export function renderHelpFileHtml(data) {
97
+ return renderHelpShellHtml(data);
98
+ }
99
+ export function buildHelpIndex() {
100
+ let sceneTotal = 0;
101
+ let subgroupTotal = 0;
102
+ const items = WAKE_GROUPS.map((g) => {
103
+ const sceneCount = g.subgroups.reduce((n, s) => n + s.scenes.length, 0);
104
+ sceneTotal += sceneCount;
105
+ subgroupTotal += g.subgroups.length;
106
+ return { id: g.id, icon: g.icon, label: g.label, subgroupCount: g.subgroups.length, sceneCount };
107
+ });
108
+ return { items, total: items.length, sceneTotal, subgroupTotal };
109
+ }
110
+ //# sourceMappingURL=helpFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpFile.js","sourceRoot":"","sources":["../../src/render/helpFile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AACnD,mBAAmB;AACnB,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAe,CAAC;AACpD,MAAM,CAAC,MAAM,eAAe,GAAG,mBAA4B,CAAC;AAC5D,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAc,CAAC;AAChD,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAA4B,CAAC;AAc/D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAgB,MAAM,CAAC,MAAM,CAAC;IACrD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,yCAAyC,EAAE,GAAG,EAAE,IAAa,EAAE,CAAC;QACxG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gDAAgD,EAAE,GAAG,EAAE,IAAa,EAAE,CAAC;KAChH,CAAC;IACF,QAAQ,EAAE,IAAa;CACxB,CAAC,CAAC;AAuCH,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,GAAS;IACxC,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,8BAA8B,CAAC,CAAC;IACtF,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,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;UACnF,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,MAAY,IAAI,IAAI,EAAE;IACtD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;UACtE,WAAW,GAAG,iBAAiB,GAAG,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO;QACL,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,EAAE;QAC5E,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;KACjG,CAAC;AACJ,CAAC;AAED;iDACiD;AACjD,MAAM,UAAU,eAAe,CAAC,WAAoB;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,EAAE,eAAe,CAAC;IACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAChD,8BAA8B,GAAG,kBAAkB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,uDAAuD;QACjE,WAAW,EAAE,iBAAiB;QAC9B,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,WAAW,KAAK,IAAI;KAC7B,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,MAAY,IAAI,IAAI,EAAE,EAAE,OAAwB,EAAE;IAClF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,sCAAsC,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO;QACL,UAAU,EAAE,oBAAoB;QAChC,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC;QACzC,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAmBD,MAAM,UAAU,cAAc;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxE,UAAU,IAAI,UAAU,CAAC;QACzB,aAAa,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IACnG,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** #144 · 「饼干记账help」的**落点值**(目录名与两个文件名主体;零 IO、零逻辑)。
2
+ *
3
+ * #237 改判(**就地改正上一轮 #147 的结论**):#147 曾记「走 **(b) bill 自持一份最小管线**,不上移
4
+ * `base-paint`(那是被 #96 主动冻结的渲染包,落盘是 IO、主题错位)」——该结论**已被维护者 2026-09-12
5
+ * 裁决 8 推翻**,原话「不应该是一个独立的 base 包,放在 `base-paint` 吧,**是绘制出 html 后的相关操作**」
6
+ * (地图 #208 的 Q7 同轮裁「乙」=把命名与落盘收成共用位)。故时间戳格式 `YYYYMMDD_HHMMSS`(本地时间)与
7
+ * 通式 `〈文件名主体〉_<stamp>[_N].html` **不再住这里**:唯一定义地是共用件 `base-paint/save-html` 的
8
+ * `saveHtmlFile`(`packages/base-render/src/output/saveHtml.ts`),本模块只剩「本技能自己的值」。
9
+ *
10
+ * 老命名规则复刻(只读基线 `SKILLS\饼干记账\scripts\html_paths.py` + 实物目录
11
+ * `D:\2Study\StudyNotes\.db\biscuit_accountant_html\` 的四个 HELP 文件):产物目录
12
+ * `<SKILLS_DB_PATH>/biscuit_accountant_html/`,文件名主体 `饼干记账_HELP`(老 `COMMAND_NAMES["help"]`)。
13
+ */
14
+ /** HELP 产物子目录名(老 `SKILL_HTML_NAME + "_html"`)。 */
15
+ export declare const HELP_HTML_DIR_NAME = "biscuit_accountant_html";
16
+ /** 「速查/现找」那一支的产物名主体:与 HELP 文件**分名**(照 #139 判法:别让用户按一个名字
17
+ * 打开到另一个东西)。老技能没有这一支,故无老名可循;取「饼干记账_速查表」与 HELP 并列。 */
18
+ export declare const LOOKUP_FILE_STEM = "\u997C\u5E72\u8BB0\u8D26_\u901F\u67E5\u8868";
19
+ //# sourceMappingURL=helpPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpPaths.d.ts","sourceRoot":"","sources":["../../src/render/helpPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kDAAkD;AAClD,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;sDACsD;AACtD,eAAO,MAAM,gBAAgB,gDAAa,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** #144 · 「饼干记账help」的**落点值**(目录名与两个文件名主体;零 IO、零逻辑)。
2
+ *
3
+ * #237 改判(**就地改正上一轮 #147 的结论**):#147 曾记「走 **(b) bill 自持一份最小管线**,不上移
4
+ * `base-paint`(那是被 #96 主动冻结的渲染包,落盘是 IO、主题错位)」——该结论**已被维护者 2026-09-12
5
+ * 裁决 8 推翻**,原话「不应该是一个独立的 base 包,放在 `base-paint` 吧,**是绘制出 html 后的相关操作**」
6
+ * (地图 #208 的 Q7 同轮裁「乙」=把命名与落盘收成共用位)。故时间戳格式 `YYYYMMDD_HHMMSS`(本地时间)与
7
+ * 通式 `〈文件名主体〉_<stamp>[_N].html` **不再住这里**:唯一定义地是共用件 `base-paint/save-html` 的
8
+ * `saveHtmlFile`(`packages/base-render/src/output/saveHtml.ts`),本模块只剩「本技能自己的值」。
9
+ *
10
+ * 老命名规则复刻(只读基线 `SKILLS\饼干记账\scripts\html_paths.py` + 实物目录
11
+ * `D:\2Study\StudyNotes\.db\biscuit_accountant_html\` 的四个 HELP 文件):产物目录
12
+ * `<SKILLS_DB_PATH>/biscuit_accountant_html/`,文件名主体 `饼干记账_HELP`(老 `COMMAND_NAMES["help"]`)。
13
+ */
14
+ /** HELP 产物子目录名(老 `SKILL_HTML_NAME + "_html"`)。 */
15
+ export const HELP_HTML_DIR_NAME = 'biscuit_accountant_html';
16
+ /** 「速查/现找」那一支的产物名主体:与 HELP 文件**分名**(照 #139 判法:别让用户按一个名字
17
+ * 打开到另一个东西)。老技能没有这一支,故无老名可循;取「饼干记账_速查表」与 HELP 并列。 */
18
+ export const LOOKUP_FILE_STEM = '饼干记账_速查表';
19
+ //# sourceMappingURL=helpPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpPaths.js","sourceRoot":"","sources":["../../src/render/helpPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAE5D;sDACsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC"}
@@ -40,7 +40,7 @@ export function assertHtmlSize(html, max = BILL_HTML_MAX_BYTES) {
40
40
  throw new BillRenderError('BILL_HTML_TOO_LARGE', 'HTML 超体积:' + estimateBytes(html) + ' > ' + max);
41
41
  }
42
42
  }
43
- // 共享标记填充(老家离线注入壳对应):CSS/HELPERS/CONTENT 三标记各恰出现 1 次,否则 throw。
43
+ // 共享标记填充(老家离线注入help模板对应):CSS/HELPERS/CONTENT 三标记各恰出现 1 次,否则 throw。
44
44
  export const SHARED_CSS_MARKER = '<!--SHARED-CSS-->';
45
45
  export const SHARED_HELPERS_MARKER = '<!--SHARED-HELPERS-->';
46
46
  export const CONTENT_MARKER = '<!--CONTENT-->';
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@ export { BILL_KEY_SHAPES, billShapeFor, buildBillEnvelope, parseBillEnvelope } f
3
3
  export { BILL_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, SHARED_CSS_MARKER, SHARED_HELPERS_MARKER, CONTENT_MARKER, SHARED_CSS, SHARED_HELPERS, fillTemplate } from './html.js';
4
4
  export { BILL_TEMPLATES, templateFor, loadTemplate } from './templates.js';
5
5
  export type { BillTemplate } from './templates.js';
6
- export { toBillItem, calcKpi, calcCategories, buildRecordToday, buildRecordRange, buildRecordSearch, buildRecordDetail, buildRecordReceipt, buildOverview, buildCompare, buildTrend, buildGoalQuery, buildAccountQuery, buildHelpItems } from './views.js';
6
+ export { toBillItem, calcKpi, calcCategories, buildRecordReceipt, buildOverview, buildCompare, buildTrend, buildGoalQuery, buildAccountQuery, buildHelpItems } from './views.js';
7
7
  export type { BillItem, HelpItem } from './views.js';
8
+ export { HELP_FILE_STEM, HELP_FILE_SKILL_NAME, HELP_FILE_TITLE, HELP_FILE_VERSION, HELP_INIT_SCENE_ID, HELP_CONTACT, formatHelpMinute, deriveSummaryLine, buildMetaBlocks, buildInitBanner, buildHelpFileData, renderHelpFileHtml, buildHelpIndex, } from './helpFile.js';
9
+ export type { HelpContact, HelpContactItem, HelpMetaBlock, HelpInitBanner, HelpFileData, HelpFileOptions, HelpIndex, HelpIndexItem } from './helpFile.js';
10
+ /** #237:时间戳/通式/初候选已收进共用件 `base-paint/save-html`(本模块只剩本技能自己的落点值)。 */
11
+ export { HELP_HTML_DIR_NAME, LOOKUP_FILE_STEM } from './helpPaths.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3P,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjL,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAC1G,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAC5G,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1J,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -2,5 +2,8 @@ export { BillRenderError } from './errors.js';
2
2
  export { BILL_KEY_SHAPES, billShapeFor, buildBillEnvelope, parseBillEnvelope } from './envelope.js';
3
3
  export { BILL_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, SHARED_CSS_MARKER, SHARED_HELPERS_MARKER, CONTENT_MARKER, SHARED_CSS, SHARED_HELPERS, fillTemplate } from './html.js';
4
4
  export { BILL_TEMPLATES, templateFor, loadTemplate } from './templates.js';
5
- export { toBillItem, calcKpi, calcCategories, buildRecordToday, buildRecordRange, buildRecordSearch, buildRecordDetail, buildRecordReceipt, buildOverview, buildCompare, buildTrend, buildGoalQuery, buildAccountQuery, buildHelpItems } from './views.js';
5
+ export { toBillItem, calcKpi, calcCategories, buildRecordReceipt, buildOverview, buildCompare, buildTrend, buildGoalQuery, buildAccountQuery, buildHelpItems } from './views.js';
6
+ export { HELP_FILE_STEM, HELP_FILE_SKILL_NAME, HELP_FILE_TITLE, HELP_FILE_VERSION, HELP_INIT_SCENE_ID, HELP_CONTACT, formatHelpMinute, deriveSummaryLine, buildMetaBlocks, buildInitBanner, buildHelpFileData, renderHelpFileHtml, buildHelpIndex, } from './helpFile.js';
7
+ /** #237:时间戳/通式/初候选已收进共用件 `base-paint/save-html`(本模块只剩本技能自己的落点值)。 */
8
+ export { HELP_HTML_DIR_NAME, LOOKUP_FILE_STEM } from './helpPaths.js';
6
9
  //# sourceMappingURL=index.js.map