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,54 @@
1
+ /** 用户语言映射(**唯一定义地**):把内部标识符换成记账人看得懂的说法,页面、回执、复制载荷一律走这里。
2
+ *
3
+ * 谁在用(两个调用点,指名):
4
+ * ① `src/record/` 的 16 件场景件——类型徽章的唤醒词与状态说明、字段名的中文标签都取自本件;
5
+ * ② `src/shared/` 的同层共用件(`typeBadge.ts`/`summaryRow.ts`/`blockedSlots.ts` 这批)——同一句话不各写一份。
6
+ * 本票实测:本包 `src/` 下真引用本件的就是这两个去处,再无第三处。
7
+ *
8
+ * 为什么另立一件:内部标识符与用户说法是**一对多**的映射(同一个 `amount` 在金额格叫「金额」、在缺口清单里叫「金额」、
9
+ * 在字段表里叫「金额」),散在各页各写一句就会走散;本件把这张对照表只写一遍,别处只引用。
10
+ *
11
+ * 对外五件(铁律五「不多于五个」):
12
+ * - `wakeWordOf`——内部型名 → 唤醒词(`expense` → 记支出);
13
+ * - `statusNoteOf`——内部状态串 → 用户说法(`软删打标(deleted_at = now,不物理删)` → 已撤销,记录还在,随时可恢复);
14
+ * - `fieldLabelOf`——库列名 → 中文列名(`deleted_at` → 撤销标记);
15
+ * - `nextStepOf`——这一页现在该做什么(「下一步动作」那枚形状的取值)。
16
+ * - `badgeTextOf`——摆进徽标前把行内 `·` 换成全角空格(版式位收口,只做标点替换)。
17
+ *
18
+ * **不进用户可见处**的两类(照上级裁定第 1 条):命令名 `bill.record.add`/`bill.record.update` 与
19
+ * `data-t` 复制载荷里那一行「场景标识」——它们只活在复制给助手的载荷里,页面正文与徽章一个字都不印。
20
+ *
21
+ * 口径出处:`docs/skills/skill-bill/t407-文字审查.md` 第二节逐条(页/位置/原文逐字/最小改法字面)
22
+ * + `docs/skills/skill-bill/t407-机审读数.md` 第三节(英文裸词那一列逐行)。
23
+ */
24
+ /** 内部状态串 → 用户说法;认不得的原样返回(**不猜、不静默抹掉**)。空串=这一句不上屏。 */
25
+ export declare function statusNoteOf(state: string): string;
26
+ /** 内部型名 → 唤醒词;认不得的型名与空串都给「记一笔」(通用词那一件,与 `src/record/scene.ts` 的兜底同口径)。 */
27
+ export declare function wakeWordOf(kind: unknown): string;
28
+ /** 库列名 → 中文列名;认不得的原样返回(照实印出,不假装认得出)。 */
29
+ export declare function fieldLabelOf(name: string): string;
30
+ /** 一句要摆进**徽标**的话(候选依据、分段现状这类):把行内那个 `·` 换成全角空格。
31
+ *
32
+ * 为什么单立这一件:徽标是版式位,行内拿 `·` 当版式就是「分隔符懒政」那一列命中的根源
33
+ * (`docs/skills/skill-bill/t407-机审读数.md` 第三节)。徽标里的话由上游各页拼出来、写法各异,
34
+ * 与其在十几个调用点各改一遍,不如在**摆进徽标的那一刻**统一收口——这里是那唯一的一处。
35
+ * 只换 `·`(U+00B7):`·` 两边的半角空格一并吃掉(`甲 · 乙` 与 `甲·乙` 都收成 `甲 乙`),
36
+ * 别的标点一律不碰:句末分号、顿号、括号都是正经标点。 */
37
+ export declare function badgeTextOf(text: string): string;
38
+ /** 这一页现在该做什么(「下一步动作」那枚形状的取值)。
39
+ *
40
+ * 四档按「这一页缺什么」选,**不按内部状态选**:
41
+ * - `missing > 0`:还差 `missing` 项,补齐了再说一遍唤醒词(`wakeWord` 为空串=不点唤醒词,只剩前半句);
42
+ * - 采集页(`page: 'collect'`)不缺项:核一眼就可以照着下面那句复制;
43
+ * - 回执页(`page: 'receipt'`):这一笔已经记下了,不用再做什么;
44
+ * - 回执页带 `exit`:还想反悔就用下面那颗「撤销这一笔」。
45
+ * R3 改形状:回执带退出口那档原先一句拿分号串两件事
46
+ * (`…不用再做什么;要反悔就点下面的「撤销这一笔」。`,回执 7 页同句)。
47
+ * 现写成两句整句(句号断开),由 `typeBadge` 按句分行各出一行口径;不再用分号串版式。 */
48
+ export declare function nextStepOf(input: {
49
+ readonly page: 'collect' | 'receipt';
50
+ readonly missing?: number;
51
+ readonly wakeWord?: string;
52
+ readonly exit?: boolean;
53
+ }): string;
54
+ //# sourceMappingURL=userWording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userWording.d.ts","sourceRoot":"","sources":["../../src/shared/userWording.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA4DH,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAGhD;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;iCAMiC;AACjC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;;;uDASuD;AACvD,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CAST"}
@@ -0,0 +1,131 @@
1
+ /** 用户语言映射(**唯一定义地**):把内部标识符换成记账人看得懂的说法,页面、回执、复制载荷一律走这里。
2
+ *
3
+ * 谁在用(两个调用点,指名):
4
+ * ① `src/record/` 的 16 件场景件——类型徽章的唤醒词与状态说明、字段名的中文标签都取自本件;
5
+ * ② `src/shared/` 的同层共用件(`typeBadge.ts`/`summaryRow.ts`/`blockedSlots.ts` 这批)——同一句话不各写一份。
6
+ * 本票实测:本包 `src/` 下真引用本件的就是这两个去处,再无第三处。
7
+ *
8
+ * 为什么另立一件:内部标识符与用户说法是**一对多**的映射(同一个 `amount` 在金额格叫「金额」、在缺口清单里叫「金额」、
9
+ * 在字段表里叫「金额」),散在各页各写一句就会走散;本件把这张对照表只写一遍,别处只引用。
10
+ *
11
+ * 对外五件(铁律五「不多于五个」):
12
+ * - `wakeWordOf`——内部型名 → 唤醒词(`expense` → 记支出);
13
+ * - `statusNoteOf`——内部状态串 → 用户说法(`软删打标(deleted_at = now,不物理删)` → 已撤销,记录还在,随时可恢复);
14
+ * - `fieldLabelOf`——库列名 → 中文列名(`deleted_at` → 撤销标记);
15
+ * - `nextStepOf`——这一页现在该做什么(「下一步动作」那枚形状的取值)。
16
+ * - `badgeTextOf`——摆进徽标前把行内 `·` 换成全角空格(版式位收口,只做标点替换)。
17
+ *
18
+ * **不进用户可见处**的两类(照上级裁定第 1 条):命令名 `bill.record.add`/`bill.record.update` 与
19
+ * `data-t` 复制载荷里那一行「场景标识」——它们只活在复制给助手的载荷里,页面正文与徽章一个字都不印。
20
+ *
21
+ * 口径出处:`docs/skills/skill-bill/t407-文字审查.md` 第二节逐条(页/位置/原文逐字/最小改法字面)
22
+ * + `docs/skills/skill-bill/t407-机审读数.md` 第三节(英文裸词那一列逐行)。
23
+ */
24
+ /** 内部标识符 → 用户说法。四张表都**只在这里定义一次**,别处不许再写第二份。 */
25
+ /** ① 库列名 → 中文列名(字段表、缺口清单、回执明细都读它)。 */
26
+ const FIELD_LABELS = {
27
+ id: '记录编号',
28
+ category: '分类',
29
+ amount: '金额',
30
+ time: '时间',
31
+ account: '账户',
32
+ ledger: '账本',
33
+ currency: '币种',
34
+ note: '备注',
35
+ source_id: '原记录编号',
36
+ who: '往来对象',
37
+ total: '总额',
38
+ periods: '期数',
39
+ start_date: '首期日',
40
+ deleted_at: '撤销标记',
41
+ op: '这一步做什么',
42
+ };
43
+ /** ② 内部型名 → 唤醒词(类型徽章第一枚形状、回执页页标题都读它)。 */
44
+ const WAKE_WORDS = {
45
+ expense: '记支出',
46
+ income: '记收入',
47
+ photo: '拍账单',
48
+ batch: '批量录入',
49
+ refund: '记退款',
50
+ reimburse: '记报销',
51
+ 'reimburse-done': '报销到账',
52
+ lend: '记借出',
53
+ borrow: '记借入',
54
+ collect: '记收回',
55
+ repay: '记偿还',
56
+ installment: '记分期',
57
+ plain: '记一笔',
58
+ };
59
+ /** ③ 内部状态串 → 用户说法。表里的名字逐字取自页面现状(`docs/skills/skill-bill/t407-机审读数.md` 第三节的原文)。
60
+ * 撤销/恢复两态照上级口径逐字:`deleted_at=now` →「已撤销,记录还在,随时可恢复」、
61
+ * 置 NULL →「已恢复」;「本仓尚未定额的型」→「分类按三级挂靠」(人话,不隐藏)。 */
62
+ const STATUS_NOTES = {
63
+ '软删打标(deleted_at = now,不物理删)': '已撤销,记录还在,随时可恢复',
64
+ '软删打标(deleted_at = now,行还在)': '已撤销,记录还在,随时可恢复',
65
+ '置 NULL(deleted_at 清空)': '已恢复',
66
+ '三形态之一:缺记录编号 · 先挑一条': '先挑一条记录',
67
+ '落库回执': '这一笔已保存',
68
+ '批量·现单笔化': '一次只落一笔',
69
+ '本仓尚未定额的型': '分类按三级挂靠',
70
+ '按金额符号判支出/收入': '方向按金额符号判',
71
+ '待补槽位 · 未写库(已阻断)': '还没写库',
72
+ '待补槽位 · 未写库': '还没写库',
73
+ '待核对 · 未写库': '还没写库',
74
+ '写库成功': '这一笔已保存',
75
+ '写库成功(收入取正数)': '这一笔已保存',
76
+ '写库成功(方向按金额符号判)': '这一笔已保存',
77
+ };
78
+ /** 内部状态串 → 用户说法;认不得的原样返回(**不猜、不静默抹掉**)。空串=这一句不上屏。 */
79
+ export function statusNoteOf(state) {
80
+ if (typeof state !== 'string')
81
+ return '';
82
+ const hit = STATUS_NOTES[state.trim()];
83
+ return hit === undefined ? state.trim() : hit;
84
+ }
85
+ /** 内部型名 → 唤醒词;认不得的型名与空串都给「记一笔」(通用词那一件,与 `src/record/scene.ts` 的兜底同口径)。 */
86
+ export function wakeWordOf(kind) {
87
+ const k = typeof kind === 'string' ? kind.trim() : '';
88
+ return k === '' ? '记一笔' : (WAKE_WORDS[k] ?? '记一笔');
89
+ }
90
+ /** 库列名 → 中文列名;认不得的原样返回(照实印出,不假装认得出)。 */
91
+ export function fieldLabelOf(name) {
92
+ if (typeof name !== 'string')
93
+ return '';
94
+ const k = name.trim();
95
+ if (k === '')
96
+ return '';
97
+ return FIELD_LABELS[k] ?? k;
98
+ }
99
+ /** 一句要摆进**徽标**的话(候选依据、分段现状这类):把行内那个 `·` 换成全角空格。
100
+ *
101
+ * 为什么单立这一件:徽标是版式位,行内拿 `·` 当版式就是「分隔符懒政」那一列命中的根源
102
+ * (`docs/skills/skill-bill/t407-机审读数.md` 第三节)。徽标里的话由上游各页拼出来、写法各异,
103
+ * 与其在十几个调用点各改一遍,不如在**摆进徽标的那一刻**统一收口——这里是那唯一的一处。
104
+ * 只换 `·`(U+00B7):`·` 两边的半角空格一并吃掉(`甲 · 乙` 与 `甲·乙` 都收成 `甲 乙`),
105
+ * 别的标点一律不碰:句末分号、顿号、括号都是正经标点。 */
106
+ export function badgeTextOf(text) {
107
+ return typeof text === 'string' ? text.replace(/[ \t]*·[ \t]*/g, ' ').trim() : '';
108
+ }
109
+ /** 这一页现在该做什么(「下一步动作」那枚形状的取值)。
110
+ *
111
+ * 四档按「这一页缺什么」选,**不按内部状态选**:
112
+ * - `missing > 0`:还差 `missing` 项,补齐了再说一遍唤醒词(`wakeWord` 为空串=不点唤醒词,只剩前半句);
113
+ * - 采集页(`page: 'collect'`)不缺项:核一眼就可以照着下面那句复制;
114
+ * - 回执页(`page: 'receipt'`):这一笔已经记下了,不用再做什么;
115
+ * - 回执页带 `exit`:还想反悔就用下面那颗「撤销这一笔」。
116
+ * R3 改形状:回执带退出口那档原先一句拿分号串两件事
117
+ * (`…不用再做什么;要反悔就点下面的「撤销这一笔」。`,回执 7 页同句)。
118
+ * 现写成两句整句(句号断开),由 `typeBadge` 按句分行各出一行口径;不再用分号串版式。 */
119
+ export function nextStepOf(input) {
120
+ const n = input.missing ?? 0;
121
+ if (n > 0) {
122
+ const word = input.wakeWord === undefined || input.wakeWord === '' ? '' : ',再说一遍「' + input.wakeWord + '」';
123
+ return '还差 ' + n + ' 项:补齐了' + word + '。';
124
+ }
125
+ if (input.page === 'collect')
126
+ return '这一页先不写库;看准了就照下面那句复制。';
127
+ if (input.exit === true)
128
+ return '这一笔已经记下了,不用再做什么。要反悔就点下面的「撤销这一笔」。';
129
+ return '这一笔已经记下了,不用再做什么。';
130
+ }
131
+ //# sourceMappingURL=userWording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userWording.js","sourceRoot":"","sources":["../../src/shared/userWording.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /** 写命令回执的共用件(**唯一定义地**):回执事实的形状(`BillReceipt`)+ 影响行数口径(`totalChanges`)
2
+ * + 页面的 `<section>` 段(`writeSection`)+ 命令原文(`commandLine`)。**对外五件**;三字符转义(`esc`)只在本件内部
3
+ * 给 `writeSection` 用,不转出去(铁律五:接口小、里面厚)。
4
+ *
5
+ * 谁在用(两个能力,指名):
6
+ * ① `src/record/`——写入域:两条写命令的处理体(影响行数取前后差、回执事实在这里装配、命令原文在这里拼),
7
+ * 过程型采集页与结果型回执整页的 `<section>` 段;
8
+ * ② `src/query/`——查询域:四条读命令的处理体用 `commandLine` 拼复制载荷与日志的命令原文,
9
+ * 通用查询列表页的 `<section>` 段同走 `writeSection`(槽位 `list`)。
10
+ * (页面三个公共标识另立 `./pageIdentity.ts`:那是另一件活——标识取值,不是回执与 `<section>` 段。)
11
+ * (页面三个公共标识另立 `./pageIdentity.ts`:那是另一件活——标识取值,不是回执与 `<section>` 段。)
12
+ *
13
+ * 口径出处:
14
+ * - 影响行数=SQLite `total_changes()` 在本次写库前后的增量(`INSERT`/`UPDATE`/软删标记一律计),
15
+ * 与 `packages/skill-calorie/src/shared/writeParts.ts:38` 同一口径,**非自报**;
16
+ * - 回执 `<section>` 的槽位取值照卡路里同件的 `ilife:<技能>:<槽位>` 形状。
17
+ *
18
+ * 转义口径(**不得与公共层 `escapeHtml` 互换**):本件 `esc` 只转 `&`/`<`/`>` 三字符;
19
+ * 公共层 `escapeHtml`(`base-paint`)与 `src/render/html.ts:7` 的那份都转五字符(多 `"`/`'`)。
20
+ * 两者混用会静默改产物(`docs/skills/skill-bill/t406-共用件依赖与提升改造清单.md` 第二节 `esc` 行)。
21
+ */
22
+ import type { DatabaseSync } from 'node:sqlite';
23
+ import type { RecordOp } from '../policy/record.js';
24
+ /** 一次写库的事实(回执页与复制日志都读它)。
25
+ * 形状照卡路里同件的收据对象,只留饼干用得上的:操作/记录号/摘要/影响行数/写入字段/有无改动/来源/时刻。
26
+ * `noChange` 承接「值与改前一致」那一格,一页只出现这一处。 */
27
+ export interface BillReceipt {
28
+ readonly op: RecordOp;
29
+ readonly recordId: number | null;
30
+ readonly summary: string;
31
+ readonly affectedRows: number;
32
+ readonly writtenFields: readonly string[];
33
+ readonly noChange: boolean;
34
+ /** 本次数据从哪里来(复制日志第 3 段;库文件名逐字由调用方给,共用件不取本包文件名)。 */
35
+ readonly source: string;
36
+ /** 写入时刻(本地时钟,`YYYY-MM-DD HH:MM:SS`)。 */
37
+ readonly actionAt: string;
38
+ }
39
+ /** 回执格式串(页尾对账折叠区那一行);本票口径 `v1`。 */
40
+ export declare const RECEIPT_FORMAT = "v1\uFF08\u5199\u5E93\u56DE\u6267\uFF09";
41
+ /** 影响行数口径:SQLite `total_changes()` 的当前值;调用方取「写库前」与「写库后」两次之差。 */
42
+ export declare function totalChanges(db: DatabaseSync): number;
43
+ /** 本次执行的命令原文(复制 prompt 区与复制日志第 4 段共用):与助手实跑那条同形,含本次 `--params`,可照抄重跑。
44
+ * 参数值里若出现半角单引号,原文会在此处被截断——真要照抄重跑请自行转义(本仓命令原文一贯用单引号包 JSON)。 */
45
+ export declare function commandLine(key: string, params: Record<string, unknown>): string;
46
+ /** 页面域内的 `<section>` 段:`data-slot`(`receipt`=结果型回执整页、`collect`=过程型采集页、
47
+ * `list`=查询域列表页)+ 四个机器标记 + 正文。
48
+ * 标记:`data-skill`(技能名,取值同页标识)/`data-slot`(页型槽位,取值见上)
49
+ * /`data-shape`(=本次 envelope 的形状,与老回执页同一枚,**是契约、不随页型改**)
50
+ * /`data-page`(**选页用这一枚**:`collect`/`receipt`/`list`;回执页与采集页共用 `shape=receipt`,靠 shape 选页会选错)
51
+ * /`data-key`(**场景名**,过 `sceneKeyOf`:`bill.record.add` → `record.add`)。
52
+ * R4 收口(写域):`bill.` 只许出现在复制载荷区(`pre`/复制块/`data-t`),页面标记一律写场景名;
53
+ * 要整名时 `data-skill` + `.` + `data-key` 仍拼得回来。
54
+ * H1 与副标题**不在这里**:那是页面模板(`base-paint/blocks` 的 `renderPageShell`)的活,一处只出一次。 */
55
+ export declare function writeSection(input: {
56
+ readonly slot: 'receipt' | 'collect' | 'list';
57
+ readonly page: 'receipt' | 'collect' | 'list';
58
+ readonly shape: string;
59
+ readonly key: string;
60
+ readonly content: string;
61
+ }): string;
62
+ //# sourceMappingURL=writeParts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeParts.d.ts","sourceRoot":"","sources":["../../src/shared/writeParts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;yCAEyC;AACzC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,mCAAmC;AACnC,eAAO,MAAM,cAAc,2CAAa,CAAC;AAOzC,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAGrD;AAED;+DAC+D;AAC/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEhF;AAUD;;;;;;;;gFAQgF;AAChF,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAIT"}
@@ -0,0 +1,39 @@
1
+ import { DOC_SKILL, sceneKeyOf } from './pageIdentity.js';
2
+ /** 回执格式串(页尾对账折叠区那一行);本票口径 `v1`。 */
3
+ export const RECEIPT_FORMAT = 'v1(写库回执)';
4
+ /** 三字符转义:只转 `&`/`<`/`>`。**不得与五字符的 `escapeHtml` 互换**(见文件头);只给本件的 `<section>` 段用。 */
5
+ function esc(s) {
6
+ return String(s ?? '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
7
+ }
8
+ /** 影响行数口径:SQLite `total_changes()` 的当前值;调用方取「写库前」与「写库后」两次之差。 */
9
+ export function totalChanges(db) {
10
+ const row = db.prepare('SELECT total_changes() AS n').get();
11
+ return row && typeof row.n === 'number' ? Number(row.n) : 0;
12
+ }
13
+ /** 本次执行的命令原文(复制 prompt 区与复制日志第 4 段共用):与助手实跑那条同形,含本次 `--params`,可照抄重跑。
14
+ * 参数值里若出现半角单引号,原文会在此处被截断——真要照抄重跑请自行转义(本仓命令原文一贯用单引号包 JSON)。 */
15
+ export function commandLine(key, params) {
16
+ return 'bill-cmd-read ' + key + " --params '" + JSON.stringify(params) + "'";
17
+ }
18
+ /** `<section>` 上的类名(按槽位取值)。写域两页沿用已交付产物上的 `ilife-write`(32 份产物与验收墙按它,
19
+ * 本票一字不动);查询域列表页用自己那一枚 `ilife-list`——同一份整页不该顶着「write」这个类名走。 */
20
+ const SECTION_CLASS = {
21
+ receipt: 'ilife-write',
22
+ collect: 'ilife-write',
23
+ list: 'ilife-list',
24
+ };
25
+ /** 页面域内的 `<section>` 段:`data-slot`(`receipt`=结果型回执整页、`collect`=过程型采集页、
26
+ * `list`=查询域列表页)+ 四个机器标记 + 正文。
27
+ * 标记:`data-skill`(技能名,取值同页标识)/`data-slot`(页型槽位,取值见上)
28
+ * /`data-shape`(=本次 envelope 的形状,与老回执页同一枚,**是契约、不随页型改**)
29
+ * /`data-page`(**选页用这一枚**:`collect`/`receipt`/`list`;回执页与采集页共用 `shape=receipt`,靠 shape 选页会选错)
30
+ * /`data-key`(**场景名**,过 `sceneKeyOf`:`bill.record.add` → `record.add`)。
31
+ * R4 收口(写域):`bill.` 只许出现在复制载荷区(`pre`/复制块/`data-t`),页面标记一律写场景名;
32
+ * 要整名时 `data-skill` + `.` + `data-key` 仍拼得回来。
33
+ * H1 与副标题**不在这里**:那是页面模板(`base-paint/blocks` 的 `renderPageShell`)的活,一处只出一次。 */
34
+ export function writeSection(input) {
35
+ return '<section class="' + SECTION_CLASS[input.slot] + '" data-skill="' + DOC_SKILL + '" data-slot="ilife:bill:' + input.slot
36
+ + '" data-page="' + input.page + '" data-shape="' + esc(input.shape) + '" data-key="' + esc(sceneKeyOf(input.key)) + '">'
37
+ + input.content + '</section>';
38
+ }
39
+ //# sourceMappingURL=writeParts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeParts.js","sourceRoot":"","sources":["../../src/shared/writeParts.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkB1D,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,mFAAmF;AACnF,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5F,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,EAAgB;IAC3C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAAgC,CAAC;IAC1F,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;+DAC+D;AAC/D,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,MAA+B;IACtE,OAAO,gBAAgB,GAAG,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC/E,CAAC;AAED;gEACgE;AAChE,MAAM,aAAa,GAA6D;IAC9E,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;;;;;;;gFAQgF;AAChF,MAAM,UAAU,YAAY,CAAC,KAM5B;IACC,OAAO,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,GAAG,SAAS,GAAG,0BAA0B,GAAG,KAAK,CAAC,IAAI;UAC1H,eAAe,GAAG,KAAK,CAAC,IAAI,GAAG,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;UACvH,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;AACnC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /** 徽章类型词(老实物用到的全集;共享 help 模板 `TYPE_DEFAULT` 认得这些词,缺席即配色表要改)。 */
2
+ export type WakeSceneType = '采集' | '查看' | '选择' | '向导' | '回执';
3
+ export interface WakeSceneAsset {
4
+ readonly id: string;
5
+ readonly title: string;
6
+ readonly wake_word: string;
7
+ /** 老实物 71/71 为空串(可用);`【待开发】` 为本仓预留态。 */
8
+ readonly status: string;
9
+ /** 「复制指令」按钮按出来的正文,逐字保留。 */
10
+ readonly prompt_template: string;
11
+ readonly types: readonly WakeSceneType[];
12
+ }
13
+ export interface WakeSubgroupAsset {
14
+ readonly id: string;
15
+ readonly label: string;
16
+ readonly scenes: readonly WakeSceneAsset[];
17
+ }
18
+ export interface WakeGroupAsset {
19
+ readonly id: string;
20
+ readonly icon: string;
21
+ readonly label: string;
22
+ readonly subgroups: readonly WakeSubgroupAsset[];
23
+ }
24
+ /** 7 域/20 二级组/74 场景(老 71 逐字 + 新增 3 条接在对应二级组末尾)。 */
25
+ export declare const WAKE_GROUPS: readonly WakeGroupAsset[];
26
+ /** 扁平 74 条(顺序与 HELP 分组一致;单源派生,不重复落词)。 */
27
+ export declare const WAKE_ASSETS: readonly WakeSceneAsset[];
28
+ /** id → 场景(74/74 唯一)。 */
29
+ export declare const SCENE_BY_ID: Readonly<Record<string, WakeSceneAsset>>;
30
+ /** 资产总数(由 `WAKE_ASSETS` 派生,单源不复写第二遍数;改资产即跟变,测试仍钉 74)。 */
31
+ export declare const WAKE_ASSET_TOTAL: number;
32
+ /** HELP 自身的唤醒词(老实物 `meta_blocks.help_wake_words` 那一块;4 条,不进场景目录)。
33
+ *
34
+ * 从口径层 `WAKE_TABLE` **派生**而非复写:口径层是唤醒词的单一事实源,本文件只投影。
35
+ * (老实物写的是「饼干记账 帮助」(带空格),现表口径为「饼干记账帮助」——以现表为准。) */
36
+ export declare const HELP_WAKE_WORDS: readonly string[];
37
+ //# sourceMappingURL=wake-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wake-assets.d.ts","sourceRoot":"","sources":["../../src/triggers/wake-assets.ts"],"names":[],"mappings":"AA0BA,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7D,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,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C;AAED,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,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,mDAAmD;AACnD,eAAO,MAAM,WAAW,EAAE,SAAS,cAAc,EA84BhD,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,WAAW,EAAE,SAAS,cAAc,EAEhD,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEhE,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,EAAE,MAA2B,CAAC;AAE3D;;;kDAGkD;AAClD,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAEtB,CAAC"}