skill-memo-ilife 0.3.2 → 0.3.13

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 (320) hide show
  1. package/SKILL.md +33 -34
  2. package/dist/checkin/index.d.ts +8 -0
  3. package/dist/checkin/index.d.ts.map +1 -0
  4. package/dist/checkin/index.js +8 -0
  5. package/dist/checkin/index.js.map +1 -0
  6. package/dist/checkin/receipt.d.ts +17 -0
  7. package/dist/checkin/receipt.d.ts.map +1 -0
  8. package/dist/checkin/receipt.js +63 -0
  9. package/dist/checkin/receipt.js.map +1 -0
  10. package/dist/checkin/routes.d.ts +4 -0
  11. package/dist/checkin/routes.d.ts.map +1 -1
  12. package/dist/checkin/routes.js +2 -2
  13. package/dist/checkin/routes.js.map +1 -1
  14. package/dist/cli/cmd_read.js +19 -53
  15. package/dist/cli/cmd_read.js.map +1 -1
  16. package/dist/cli/config.d.ts +4 -4
  17. package/dist/cli/config.d.ts.map +1 -1
  18. package/dist/cli/config.js +25 -4
  19. package/dist/cli/config.js.map +1 -1
  20. package/dist/cli/health/items.js +2 -2
  21. package/dist/cli/health/items.js.map +1 -1
  22. package/dist/cli/health.d.ts.map +1 -1
  23. package/dist/cli/health.js +3 -2
  24. package/dist/cli/health.js.map +1 -1
  25. package/dist/cli/keys.d.ts +6 -3
  26. package/dist/cli/keys.d.ts.map +1 -1
  27. package/dist/cli/keys.js +2 -5
  28. package/dist/cli/keys.js.map +1 -1
  29. package/dist/cli/registry.d.ts +1 -1
  30. package/dist/{fetch/db.d.ts → db/readonly.d.ts} +1 -1
  31. package/dist/db/readonly.d.ts.map +1 -0
  32. package/dist/{fetch/db.js → db/readonly.js} +5 -5
  33. package/dist/db/readonly.js.map +1 -0
  34. package/dist/help/lookup.d.ts +18 -1
  35. package/dist/help/lookup.d.ts.map +1 -1
  36. package/dist/help/lookup.js +53 -37
  37. package/dist/help/lookup.js.map +1 -1
  38. package/dist/help/sceneData.js +1 -1
  39. package/dist/help/scenes/checkin.d.ts +1 -1
  40. package/dist/help/scenes/checkin.js +1 -1
  41. package/dist/help/scenes/init.d.ts +1 -1
  42. package/dist/help/scenes/init.js +1 -1
  43. package/dist/help/scenes/memo.d.ts +1 -1
  44. package/dist/help/scenes/memo.js +1 -1
  45. package/dist/help/scenes/mood.d.ts +1 -1
  46. package/dist/help/scenes/mood.js +1 -1
  47. package/dist/help/scenes/remind.d.ts +1 -1
  48. package/dist/help/scenes/remind.js +2 -2
  49. package/dist/help/scenes/remind.js.map +1 -1
  50. package/dist/help/scenes/search.d.ts +1 -1
  51. package/dist/help/scenes/search.js +1 -1
  52. package/dist/help/scenes/sync.d.ts +1 -1
  53. package/dist/help/scenes/sync.js +1 -1
  54. package/dist/help/scenes/wish.d.ts +1 -1
  55. package/dist/help/scenes/wish.js +1 -1
  56. package/dist/index.d.ts +11 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +11 -5
  59. package/dist/index.js.map +1 -1
  60. package/dist/init/diagnosis.d.ts +2 -1
  61. package/dist/init/diagnosis.d.ts.map +1 -1
  62. package/dist/init/diagnosis.js.map +1 -1
  63. package/dist/init/page.d.ts +3 -2
  64. package/dist/init/page.d.ts.map +1 -1
  65. package/dist/init/page.js +20 -10
  66. package/dist/init/page.js.map +1 -1
  67. package/dist/init/routes.d.ts +4 -1
  68. package/dist/init/routes.d.ts.map +1 -1
  69. package/dist/init/routes.js +14 -0
  70. package/dist/init/routes.js.map +1 -1
  71. package/dist/init/run.d.ts.map +1 -1
  72. package/dist/init/run.js +7 -1
  73. package/dist/init/run.js.map +1 -1
  74. package/dist/{fetch → memo}/batch.d.ts +6 -2
  75. package/dist/memo/batch.d.ts.map +1 -0
  76. package/dist/{fetch → memo}/batch.js +8 -4
  77. package/dist/memo/batch.js.map +1 -0
  78. package/dist/memo/category.d.ts.map +1 -0
  79. package/dist/{policy → memo}/category.js +1 -1
  80. package/dist/memo/category.js.map +1 -0
  81. package/dist/memo/commands.d.ts +3 -12
  82. package/dist/memo/commands.d.ts.map +1 -1
  83. package/dist/memo/commands.js +1 -9
  84. package/dist/memo/commands.js.map +1 -1
  85. package/dist/{policy → memo}/crud.d.ts +1 -1
  86. package/dist/memo/crud.d.ts.map +1 -0
  87. package/dist/{policy → memo}/crud.js +22 -7
  88. package/dist/memo/crud.js.map +1 -0
  89. package/dist/memo/index.d.ts +4 -2
  90. package/dist/memo/index.d.ts.map +1 -1
  91. package/dist/memo/index.js +4 -2
  92. package/dist/memo/index.js.map +1 -1
  93. package/dist/memo/media.d.ts.map +1 -0
  94. package/dist/{policy → memo}/media.js +2 -2
  95. package/dist/memo/media.js.map +1 -0
  96. package/dist/memo/receipt.d.ts +35 -0
  97. package/dist/memo/receipt.d.ts.map +1 -0
  98. package/dist/memo/receipt.js +62 -0
  99. package/dist/memo/receipt.js.map +1 -0
  100. package/dist/memo/receiptPage.d.ts +44 -0
  101. package/dist/memo/receiptPage.d.ts.map +1 -0
  102. package/dist/memo/receiptPage.js +50 -0
  103. package/dist/memo/receiptPage.js.map +1 -0
  104. package/dist/memo/routes.d.ts.map +1 -1
  105. package/dist/memo/routes.js +32 -0
  106. package/dist/memo/routes.js.map +1 -1
  107. package/dist/memo/run.d.ts +9 -8
  108. package/dist/memo/run.d.ts.map +1 -1
  109. package/dist/memo/run.js +140 -97
  110. package/dist/memo/run.js.map +1 -1
  111. package/dist/mood/routes.d.ts.map +1 -1
  112. package/dist/mood/routes.js +36 -0
  113. package/dist/mood/routes.js.map +1 -1
  114. package/dist/remind/index.d.ts +5 -2
  115. package/dist/remind/index.d.ts.map +1 -1
  116. package/dist/remind/index.js +5 -2
  117. package/dist/remind/index.js.map +1 -1
  118. package/dist/{policy/reminder.d.ts → remind/policy.d.ts} +1 -1
  119. package/dist/remind/policy.d.ts.map +1 -0
  120. package/dist/{policy/reminder.js → remind/policy.js} +2 -2
  121. package/dist/remind/policy.js.map +1 -0
  122. package/dist/remind/routes.d.ts +1 -2
  123. package/dist/remind/routes.d.ts.map +1 -1
  124. package/dist/remind/routes.js +32 -2
  125. package/dist/remind/routes.js.map +1 -1
  126. package/dist/remind/run.d.ts +1 -1
  127. package/dist/remind/run.d.ts.map +1 -1
  128. package/dist/remind/run.js +112 -7
  129. package/dist/remind/run.js.map +1 -1
  130. package/dist/{fetch/reminders.d.ts → remind/store.d.ts} +2 -2
  131. package/dist/remind/store.d.ts.map +1 -0
  132. package/dist/{fetch/reminders.js → remind/store.js} +3 -3
  133. package/dist/remind/store.js.map +1 -0
  134. package/dist/render/envelope.d.ts.map +1 -1
  135. package/dist/render/envelope.js +3 -2
  136. package/dist/render/envelope.js.map +1 -1
  137. package/dist/render/html.js +1 -1
  138. package/dist/render/html.js.map +1 -1
  139. package/dist/render/index.d.ts +4 -1
  140. package/dist/render/index.d.ts.map +1 -1
  141. package/dist/render/index.js +5 -3
  142. package/dist/render/index.js.map +1 -1
  143. package/dist/render/listPage.d.ts +34 -0
  144. package/dist/render/listPage.d.ts.map +1 -0
  145. package/dist/render/listPage.js +39 -0
  146. package/dist/render/listPage.js.map +1 -0
  147. package/dist/render/memoPageAssets.d.ts +32 -0
  148. package/dist/render/memoPageAssets.d.ts.map +1 -0
  149. package/dist/render/memoPageAssets.js +320 -0
  150. package/dist/render/memoPageAssets.js.map +1 -0
  151. package/dist/render/pageAssets.js +3 -3
  152. package/dist/render/pageAssets.js.map +1 -1
  153. package/dist/render/pages.d.ts +9 -2
  154. package/dist/render/pages.d.ts.map +1 -1
  155. package/dist/render/pages.js +8 -16
  156. package/dist/render/pages.js.map +1 -1
  157. package/dist/render/receipt.d.ts +12 -3
  158. package/dist/render/receipt.d.ts.map +1 -1
  159. package/dist/render/receipt.js +55 -10
  160. package/dist/render/receipt.js.map +1 -1
  161. package/dist/search/routes.d.ts.map +1 -1
  162. package/dist/search/routes.js +1 -0
  163. package/dist/search/routes.js.map +1 -1
  164. package/dist/search/run.d.ts +11 -3
  165. package/dist/search/run.d.ts.map +1 -1
  166. package/dist/search/run.js +130 -11
  167. package/dist/search/run.js.map +1 -1
  168. package/dist/shared/commandSpec.d.ts +4 -5
  169. package/dist/shared/commandSpec.d.ts.map +1 -1
  170. package/dist/shared/errors.d.ts.map +1 -0
  171. package/dist/shared/errors.js.map +1 -0
  172. package/dist/{fetch → shared}/paths.d.ts +1 -1
  173. package/dist/shared/paths.d.ts.map +1 -0
  174. package/dist/{fetch → shared}/paths.js +3 -3
  175. package/dist/shared/paths.js.map +1 -0
  176. package/dist/shared/validators.d.ts +3 -0
  177. package/dist/shared/validators.d.ts.map +1 -0
  178. package/dist/shared/validators.js +15 -0
  179. package/dist/shared/validators.js.map +1 -0
  180. package/dist/sync/auth.d.ts.map +1 -0
  181. package/dist/{fetch → sync}/auth.js +3 -3
  182. package/dist/sync/auth.js.map +1 -0
  183. package/dist/sync/commands.d.ts.map +1 -1
  184. package/dist/sync/commands.js.map +1 -1
  185. package/dist/sync/feishu.d.ts.map +1 -0
  186. package/dist/{fetch → sync}/feishu.js +9 -9
  187. package/dist/sync/feishu.js.map +1 -0
  188. package/dist/sync/index.d.ts +5 -2
  189. package/dist/sync/index.d.ts.map +1 -1
  190. package/dist/sync/index.js +4 -2
  191. package/dist/sync/index.js.map +1 -1
  192. package/dist/sync/run.d.ts +1 -1
  193. package/dist/sync/run.d.ts.map +1 -1
  194. package/dist/sync/run.js +2 -1
  195. package/dist/sync/run.js.map +1 -1
  196. package/dist/{fetch → sync}/sentinel.d.ts +1 -1
  197. package/dist/sync/sentinel.d.ts.map +1 -0
  198. package/dist/{fetch → sync}/sentinel.js +1 -2
  199. package/dist/sync/sentinel.js.map +1 -0
  200. package/dist/triggers/routes.generated.d.ts +1 -1
  201. package/dist/triggers/routes.generated.d.ts.map +1 -1
  202. package/dist/triggers/routes.generated.js +19 -6
  203. package/dist/triggers/routes.generated.js.map +1 -1
  204. package/dist/triggers/routing.d.ts +7 -0
  205. package/dist/triggers/routing.d.ts.map +1 -0
  206. package/dist/triggers/routing.js +35 -0
  207. package/dist/triggers/routing.js.map +1 -0
  208. package/dist/wish/complete.d.ts +1 -1
  209. package/dist/wish/complete.d.ts.map +1 -1
  210. package/dist/wish/complete.js +1 -1
  211. package/dist/wish/complete.js.map +1 -1
  212. package/dist/wish/due.d.ts +1 -1
  213. package/dist/wish/due.d.ts.map +1 -1
  214. package/dist/wish/due.js +1 -1
  215. package/dist/wish/due.js.map +1 -1
  216. package/dist/wish/ensure.d.ts +2 -2
  217. package/dist/wish/ensure.d.ts.map +1 -1
  218. package/dist/wish/ensure.js +2 -2
  219. package/dist/wish/ensure.js.map +1 -1
  220. package/dist/wish/gate.d.ts +1 -1
  221. package/dist/wish/gate.d.ts.map +1 -1
  222. package/dist/wish/gate.js +1 -1
  223. package/dist/wish/gate.js.map +1 -1
  224. package/dist/wish/index.d.ts +4 -0
  225. package/dist/wish/index.d.ts.map +1 -1
  226. package/dist/wish/index.js +7 -0
  227. package/dist/wish/index.js.map +1 -1
  228. package/dist/{policy/wish.d.ts → wish/policy.d.ts} +1 -1
  229. package/dist/wish/policy.d.ts.map +1 -0
  230. package/dist/{policy/wish.js → wish/policy.js} +3 -3
  231. package/dist/wish/policy.js.map +1 -0
  232. package/dist/wish/receipt.d.ts +45 -0
  233. package/dist/wish/receipt.d.ts.map +1 -0
  234. package/dist/wish/receipt.js +68 -0
  235. package/dist/wish/receipt.js.map +1 -0
  236. package/dist/wish/reconcile.d.ts +1 -1
  237. package/dist/wish/reconcile.d.ts.map +1 -1
  238. package/dist/wish/reconcile.js +2 -2
  239. package/dist/wish/reconcile.js.map +1 -1
  240. package/dist/wish/routes.d.ts.map +1 -1
  241. package/dist/wish/routes.js +11 -1
  242. package/dist/wish/routes.js.map +1 -1
  243. package/dist/wish/run.d.ts +11 -3
  244. package/dist/wish/run.d.ts.map +1 -1
  245. package/dist/wish/run.js +75 -7
  246. package/dist/wish/run.js.map +1 -1
  247. package/dist/wish/taskRemove.js +2 -2
  248. package/dist/wish/taskRemove.js.map +1 -1
  249. package/dist/wish/taskSync.d.ts +1 -1
  250. package/dist/wish/taskSync.d.ts.map +1 -1
  251. package/dist/wish/taskSync.js +3 -3
  252. package/dist/wish/taskSync.js.map +1 -1
  253. package/dist/wish/taskWrite.d.ts.map +1 -0
  254. package/dist/{fetch → wish}/taskWrite.js +2 -2
  255. package/dist/wish/taskWrite.js.map +1 -0
  256. package/dist/wish/tasks.d.ts.map +1 -0
  257. package/dist/{fetch → wish}/tasks.js +2 -2
  258. package/dist/wish/tasks.js.map +1 -0
  259. package/dist/wish/wizards.d.ts +1 -1
  260. package/dist/wish/wizards.d.ts.map +1 -1
  261. package/dist/wish/wizards.js +1 -1
  262. package/dist/wish/wizards.js.map +1 -1
  263. package/package.json +4 -7
  264. package/templates/change_category.html +52 -28
  265. package/templates/init_report.html +15 -14
  266. package/templates/memo_query.html +59 -24
  267. package/templates/receipt.html +97 -27
  268. package/templates/sync_report.html +106 -98
  269. package/templates/wish_complete.html +48 -30
  270. package/templates/wish_plan.html +35 -20
  271. package/dist/fetch/auth.d.ts.map +0 -1
  272. package/dist/fetch/auth.js.map +0 -1
  273. package/dist/fetch/batch.d.ts.map +0 -1
  274. package/dist/fetch/batch.js.map +0 -1
  275. package/dist/fetch/db.d.ts.map +0 -1
  276. package/dist/fetch/db.js.map +0 -1
  277. package/dist/fetch/errors.d.ts.map +0 -1
  278. package/dist/fetch/errors.js.map +0 -1
  279. package/dist/fetch/feishu.d.ts.map +0 -1
  280. package/dist/fetch/feishu.js.map +0 -1
  281. package/dist/fetch/index.d.ts +0 -19
  282. package/dist/fetch/index.d.ts.map +0 -1
  283. package/dist/fetch/index.js +0 -13
  284. package/dist/fetch/index.js.map +0 -1
  285. package/dist/fetch/paths.d.ts.map +0 -1
  286. package/dist/fetch/paths.js.map +0 -1
  287. package/dist/fetch/reminders.d.ts.map +0 -1
  288. package/dist/fetch/reminders.js.map +0 -1
  289. package/dist/fetch/sentinel.d.ts.map +0 -1
  290. package/dist/fetch/sentinel.js.map +0 -1
  291. package/dist/fetch/taskWrite.d.ts.map +0 -1
  292. package/dist/fetch/taskWrite.js.map +0 -1
  293. package/dist/fetch/tasks.d.ts.map +0 -1
  294. package/dist/fetch/tasks.js.map +0 -1
  295. package/dist/policy/category.d.ts.map +0 -1
  296. package/dist/policy/category.js.map +0 -1
  297. package/dist/policy/crud.d.ts.map +0 -1
  298. package/dist/policy/crud.js.map +0 -1
  299. package/dist/policy/index.d.ts +0 -11
  300. package/dist/policy/index.d.ts.map +0 -1
  301. package/dist/policy/index.js +0 -8
  302. package/dist/policy/index.js.map +0 -1
  303. package/dist/policy/media.d.ts.map +0 -1
  304. package/dist/policy/media.js.map +0 -1
  305. package/dist/policy/reminder.d.ts.map +0 -1
  306. package/dist/policy/reminder.js.map +0 -1
  307. package/dist/policy/wakewords.d.ts +0 -14
  308. package/dist/policy/wakewords.d.ts.map +0 -1
  309. package/dist/policy/wakewords.js +0 -68
  310. package/dist/policy/wakewords.js.map +0 -1
  311. package/dist/policy/wish.d.ts.map +0 -1
  312. package/dist/policy/wish.js.map +0 -1
  313. /package/dist/{policy → memo}/category.d.ts +0 -0
  314. /package/dist/{policy → memo}/media.d.ts +0 -0
  315. /package/dist/{fetch → shared}/errors.d.ts +0 -0
  316. /package/dist/{fetch → shared}/errors.js +0 -0
  317. /package/dist/{fetch → sync}/auth.d.ts +0 -0
  318. /package/dist/{fetch → sync}/feishu.d.ts +0 -0
  319. /package/dist/{fetch → wish}/taskWrite.d.ts +0 -0
  320. /package/dist/{fetch → wish}/tasks.d.ts +0 -0
@@ -13,8 +13,30 @@
13
13
  */
14
14
  import { bookletFileStem } from '../help/booklet.js';
15
15
  import { pageEnvelope, fillMemoPage } from './pages.js';
16
- /** 场景 id → 本族页(`mood` 域三条;本族其余 16 格由各自域票照此调用)。 */
17
- export const RECEIPT_SCENES = ['memo_add_mood', 'memo_delete_mood', 'memo_update_mood'];
16
+ /** 场景 id → 本族页。逐域**追加**,不改别人的行(写集互斥):
17
+ * mood 域三条 ← #831;remind 域两条 ← #828;wish 域五条 ← #829;memo 域六条 ← #826;
18
+ * checkin 域三条 ← #830(本族 19 格至此齐)。 */
19
+ export const RECEIPT_SCENES = [
20
+ 'memo_add_mood',
21
+ 'memo_delete_mood',
22
+ 'memo_update_mood',
23
+ 'memo_remind_with_note',
24
+ 'memo_remind_existing',
25
+ 'memo_add_wish',
26
+ 'memo_update_wish',
27
+ 'memo_delete_wish',
28
+ 'memo_complete_wish',
29
+ 'memo_wish_schedule',
30
+ 'memo_add_basic',
31
+ 'memo_update_basic',
32
+ 'memo_delete_basic',
33
+ 'memo_change_category_single',
34
+ 'memo_change_subcategory',
35
+ 'memo_batch_change_category',
36
+ 'memo_add_checkin',
37
+ 'memo_delete_checkin',
38
+ 'memo_update_checkin',
39
+ ];
18
40
  /** 本地侧做了什么 → 人话(`WishReceipt['local']` 的六个取值,一处定义)。 */
19
41
  const LOCAL_LABEL = {
20
42
  created: '已新建',
@@ -34,16 +56,39 @@ const REMOTE_LABEL = {
34
56
  failed: '飞书同步失败',
35
57
  'not-applicable': '不适用(这条没有飞书任务)',
36
58
  };
37
- /** 回执三行:本地侧/远端侧/远端标识。取值不认得的原样透出,不静默吞掉。 */
59
+ /** 「对象」那一行的后半(#882):数字=记录号,加 `#`;字符串=域侧自述,原样上屏、不吃 `#`
60
+ * (不这么分,批量那一格会被拼成 `#1 条` —— `#` 后面跟的不是记录号)。 */
61
+ function objectRowTailOf(entityId) {
62
+ if (typeof entityId === 'number')
63
+ return ' #' + String(entityId);
64
+ return ' ' + entityId;
65
+ }
66
+ /** 三格里的**前三行**:对象(本地记录号/域侧自述)/本地侧/远端侧——屏上与数据面共用过一段,一处定义。
67
+ * 取值不认得的原样透出,不静默吞掉。 */
68
+ function receiptUserRows(r) {
69
+ return [
70
+ '对象:' + r.entityLabel + objectRowTailOf(r.entityId),
71
+ '本地侧:' + (LOCAL_LABEL[r.local] ?? r.local),
72
+ '远端侧:' + (REMOTE_LABEL[r.remote] ?? r.remote),
73
+ ];
74
+ }
75
+ /** 数据面(#876):三格里的**第四行「远端标识」只进 `snapshot.sections`(页内载荷),不上屏**。
76
+ *
77
+ * 为什么屏上没有它:那一格装的是**远端平台的机器值**(`tk_done` 这类 guid),用户既认不出、
78
+ * 也拿它做不了任何事;而「飞书那边成了没有」这件事,`远端侧` 那一行已经用人话说全了
79
+ * (`已在飞书新建任务`/`已同步飞书`/`飞书同步失败`/`不适用(这条没有飞书任务)`)——
80
+ * 再印一串 guid 就是同一事实一页两遍,且两遍里有一遍是黑话。
81
+ * 用户真要用标识指代对象时,给的是**本地记录号**(`对象` 那一行的 `#N`),不是远端 guid。
82
+ *
83
+ * 收掉不等于丢掉:#657/#658 合成写契约要求的三格(本地侧/远端侧/远端标识)**仍逐格读得到** ——
84
+ * 它仍在下面这份载荷里,仍是命令出口回执 JSON 的 `local`/`remote`/`remoteId`
85
+ * (`docs/agents/合成写判据.md` §一判据 4 的「机器读在哪」逐字写的是**出口回执行**;
86
+ * 契约管的是那份 JSON,不是页面形状)。模板侧 `renderRows()` 按 heading「处理结果」把这整段滤掉,
87
+ * 故本段只作数据面,一个字都不上屏。 */
38
88
  function receiptSection(r) {
39
89
  return {
40
90
  heading: '处理结果',
41
- rows: [
42
- '对象:' + r.entityLabel + ' #' + String(r.entityId),
43
- '本地侧:' + (LOCAL_LABEL[r.local] ?? r.local),
44
- '远端侧:' + (REMOTE_LABEL[r.remote] ?? r.remote),
45
- '远端标识:' + (r.remoteId === null || r.remoteId === '' ? '无' : r.remoteId),
46
- ],
91
+ rows: [...receiptUserRows(r), '远端标识:' + (r.remoteId === null || r.remoteId === '' ? '无' : r.remoteId)],
47
92
  };
48
93
  }
49
94
  /** 整页组装:槽位 → 信封(`pageEnvelope`)→ 模板填充(`fillMemoPage`)+ 文件名主体(册子唯一定义)。
@@ -64,7 +109,7 @@ export function buildReceiptPage(input) {
64
109
  message: input.message,
65
110
  category: input.badges.category,
66
111
  sub: input.badges.sub ?? '',
67
- rows: receiptSection(input.receipt).rows,
112
+ rows: receiptUserRows(input.receipt),
68
113
  retry_prompt: input.retryPrompt,
69
114
  },
70
115
  },
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/render/receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAuC,MAAM,YAAY,CAAC;AAE7F,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,CAAU,CAAC;AA8BjG,uDAAuD;AACvD,MAAM,WAAW,GAA2B;IAC1C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,aAAa;CACvB,CAAC;AAEF,wDAAwD;AACxD,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,iBAAiB;IAC9B,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,eAAe;CAClC,CAAC;AAEF,0CAA0C;AAC1C,SAAS,cAAc,CAAC,CAAc;IACpC,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE;YACJ,KAAK,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjD,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAC1C,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SACxE;KACF,CAAC;AACJ,CAAC;AAED;;;8DAG8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC;QAC3B,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,OAAO,EAAE,KAAK,CAAC,KAAK;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE;YACL,OAAO,EAAE;gBACP,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAC/B,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;gBAC3B,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;gBACxC,YAAY,EAAE,KAAK,CAAC,WAAW;aAChC;SACF;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACxF,CAAC"}
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/render/receipt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAsD7C,CAAC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAuD7C,CAAC"}
@@ -51,6 +51,7 @@ export const SEARCH_ROUTES = [
51
51
  scene: 'memo_search_wish',
52
52
  key: 'memo.wish',
53
53
  cli: 'memo-cmd-read memo.wish',
54
+ preset: { category: '心愿' },
54
55
  },
55
56
  ];
56
57
  //# sourceMappingURL=routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,mDAAmD;KACzD;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,mBAAmB;QAC1B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,2BAA2B;KACjC;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,iBAAiB;QACxB,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,iDAAiD;QACtD,KAAK,EAAE,CAAC,IAAI,CAAC;KACd;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,kFAAkF;QACvF,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;KACxB;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,0DAA0D;QAC/D,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC3B;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,kBAAkB;QACzB,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,4DAA4D;QACjE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC7B;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,kBAAkB;QACzB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,yBAAyB;KAC/B;CACF,CAAC"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,mDAAmD;KACzD;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,mBAAmB;QAC1B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,2BAA2B;KACjC;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,iBAAiB;QACxB,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,iDAAiD;QACtD,KAAK,EAAE,CAAC,IAAI,CAAC;KACd;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,kFAAkF;QACvF,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;KACxB;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,0DAA0D;QAC/D,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC3B;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,kBAAkB;QACzB,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,4DAA4D;QACjE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC7B;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,kBAAkB;QACzB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,yBAAyB;QAC9B,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC3B;CACF,CAAC"}
@@ -7,11 +7,19 @@
7
7
  * 搬迁判据:`node docs/skills/skill-memo-ilife/t855-产物基线.mjs --check` 逐条一致(行为字节不变)。
8
8
  *
9
9
  * 区间参数的三件校验(`needRangeDate`/`rangeLimitOf`/`categoryFilterOf`)只有本域在用,随命令一起搬——不留第二份。
10
+ *
11
+ * ── #827 · 本域的产物(册子 seq 7–13 的 6 格)────────────────────────────────────────────────
12
+ * 一条 `memo.search` 服务 5 个 HELP 场景、`memo.detail` 服务 1 个,而册子给每个场景各冻一格文件;
13
+ * 故本件多两件事:**判这一次是哪一格**(`params.scene` 显式给,缺省按参数推断)与**按格组装列表页**。
14
+ * 页形状不在本件:走「列表查询」族唯一定义地 `src/render/listPage.ts`(#828 首建),本件只填槽位。
15
+ * 文件名主体不在本件:由 `bookletFileStem(sceneId)` 查册子(`src/help/booklet.ts` 是唯一定义地)。
16
+ *
17
+ * `scene` 只收本域这 5 格;给别的格(如 `memo_search_wish`——那条命令属心愿域)即参数错,不静默改判。
10
18
  */
11
19
  import type { CommandOut } from '../shared/commandSpec.js';
12
- import type { MemoDb } from '../fetch/db.js';
13
- /** `memo.search`:区间/关键词/分类/排期四种过滤(区间与排期正交可叠)。 */
20
+ import type { MemoDb } from '../db/readonly.js';
21
+ /** `memo.search`:区间/关键词/分类/排期四种过滤(区间与排期正交可叠)+ 列表页随行。 */
14
22
  export declare function runSearch(params: Record<string, unknown>, db: MemoDb): CommandOut;
15
- /** `memo.detail`:单条详情(缺 id 即槽位错,exit 2)。 */
23
+ /** `memo.detail`:单条详情(缺 id 即槽位错,exit 2)+ 「看备忘」那一格随行。 */
16
24
  export declare function runDetail(params: Record<string, unknown>, db: MemoDb): CommandOut;
17
25
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA+B7C,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAqBjF;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAEjF"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA6GhD,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAwDjF;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAiBjF"}
@@ -1,7 +1,10 @@
1
1
  import { fail } from '../shared/exit.js';
2
- import { getNote, listNotes, searchNotes, searchNotesByCreatedRange } from '../fetch/db.js';
3
- import { needId, normalizeTop } from '../policy/index.js';
2
+ import { getNote, listNotes, searchNotes, searchNotesByCreatedRange } from '../db/readonly.js';
3
+ import { needId } from '../shared/validators.js';
4
+ import { normalizeTop } from '../memo/index.js';
4
5
  import { dueMatches } from '../wish/index.js';
6
+ import { toRows } from '../shared/rows.js';
7
+ import { buildListPage, querySnapshot } from '../render/index.js';
5
8
  // #850 · 创建时间区间参数(HELP `start`+`end`,双 `YYYY-MM-DD`)。双必填:缺一边即缺槽位(exit 2,
6
9
  // 人话);起止倒置即报错;`timeRange` 月份形已退役(无权威出处),给了即指路到 `start`/`end`。
7
10
  const DATE_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
@@ -30,7 +33,73 @@ function categoryFilterOf(value) {
30
33
  return undefined;
31
34
  return normalizeTop(value);
32
35
  }
33
- /** `memo.search`:区间/关键词/分类/排期四种过滤(区间与排期正交可叠)。 */
36
+ // ── #827 · 「这一次是哪一格」──────────────────────────────────────────────────────────────
37
+ //
38
+ // 5 格对应 5 个 HELP 场景(`src/help/scenes/search.ts` 的 3 个二级组),每条场景一个唤醒词:
39
+ // 搜备忘 → memo_search_keyword /查备忘 → memo_search_alias /按时间搜备忘 → memo_search_by_date
40
+ // /查打卡 → memo_search_checkin /查情绪 → memo_search_mood。
41
+ // 「搜备忘/查备忘」是同一件查询的两个词(HELP 记 `查备忘` 为 `搜备忘` 的别名场景),页形相同、**格不同**;
42
+ // 故缺省落主名那一格,别名场景由调用方显式给 `scene`(照提醒域 `memo.remind` 的同一做法)。
43
+ const SEARCH_SCENES = [
44
+ 'memo_search_keyword',
45
+ 'memo_search_alias',
46
+ 'memo_search_by_date',
47
+ 'memo_search_checkin',
48
+ 'memo_search_mood',
49
+ ];
50
+ /** 格 → 页题(一律用 HELP 的场景词,不写内部标识符)。 */
51
+ const SCENE_TITLES = {
52
+ memo_search_keyword: '搜备忘',
53
+ memo_search_alias: '查备忘',
54
+ memo_search_by_date: '按时间搜备忘',
55
+ memo_search_checkin: '查打卡',
56
+ memo_search_mood: '查情绪',
57
+ memo_get_detail: '看备忘',
58
+ };
59
+ /** 显式 `scene` 优先;缺省用本支的老形状那一格。**只认本域 5 格**。 */
60
+ function sceneOf(params, fallback) {
61
+ const s = params.scene;
62
+ if (s === undefined || s === '')
63
+ return fallback;
64
+ if (typeof s === 'string' && SEARCH_SCENES.includes(s))
65
+ return s;
66
+ fail(2, 'scene 只认本域这 5 格:' + SEARCH_SCENES.join('/'));
67
+ }
68
+ /** 列表页交付:快照走列表族共用的 `querySnapshot`,页壳与文件名主体全在族定义地与册子。
69
+ * #820 收尾:`subtitle` 只留**一句话结论**(规模),查询条件另走 `condition`(**一条一枚**)——
70
+ * 屏上落成一排条件胶囊,不再把几件事用逗号或竖线串成一句(那正是「符号顶替设计」)。 */
71
+ function listDeliver(input) {
72
+ const snap = querySnapshot(toRows(input.items));
73
+ return buildListPage({
74
+ scene: input.scene,
75
+ title: SCENE_TITLES[input.scene],
76
+ subtitle: input.subtitle,
77
+ condition: input.condition ?? [],
78
+ summary: snap.summary,
79
+ sections: snap.sections,
80
+ copyLog: input.copyLog,
81
+ items: input.items,
82
+ });
83
+ }
84
+ /** 本次生效的过滤条件 → 人话(只写用户给的那个条件的名字与值)。 */
85
+ function filterWords(params) {
86
+ const category = params.category === undefined ? '' : String(params.category);
87
+ if (category === '打卡')
88
+ return { text: '分类「打卡」', scene: 'memo_search_checkin' };
89
+ if (category === '情绪日记')
90
+ return { text: '分类「情绪日记」', scene: 'memo_search_mood' };
91
+ const bits = [];
92
+ if (params.q !== undefined && String(params.q) !== '')
93
+ bits.push('关键词「' + String(params.q) + '」');
94
+ if (category !== '')
95
+ bits.push('分类「' + category + '」');
96
+ if (params.sub !== undefined && String(params.sub) !== '')
97
+ bits.push('子分类「' + String(params.sub) + '」');
98
+ if (params.due !== undefined && String(params.due) !== '')
99
+ bits.push('排期「' + String(params.due) + '」');
100
+ return { text: bits.join(','), scene: 'memo_search_keyword' };
101
+ }
102
+ /** `memo.search`:区间/关键词/分类/排期四种过滤(区间与排期正交可叠)+ 列表页随行。 */
34
103
  export function runSearch(params, db) {
35
104
  // #850:创建时间区间通道(HELP `start`+`end` 双必填,按 `created_at` 倒序;与排期 `due` 正交可叠加)。
36
105
  // `timeRange` 月份形已退役:给了即指路,不再有两个说法。
@@ -45,18 +114,68 @@ export function runSearch(params, db) {
45
114
  fail(2, '开始日期不能晚于结束日期:' + start + ' > ' + end);
46
115
  const category = categoryFilterOf(params.category);
47
116
  const limit = rangeLimitOf(params.limit);
48
- const items = searchNotesByCreatedRange(db, { start, end, category, limit });
49
- const hit = items.filter((n) => dueMatches(n, params));
50
- return { data: { items: hit, total: hit.length }, exit: 0 };
117
+ const rows = searchNotesByCreatedRange(db, { start, end, category, limit });
118
+ const hit = rows.filter((n) => dueMatches(n, params));
119
+ return {
120
+ data: { items: hit, total: hit.length },
121
+ exit: 0,
122
+ deliver: listDeliver({
123
+ scene: sceneOf(params, 'memo_search_by_date'),
124
+ items: hit,
125
+ subtitle: '共 ' + hit.length + ' 条',
126
+ condition: [
127
+ '创建时间 ' + start + ' 至 ' + end,
128
+ ...(category === undefined ? [] : ['分类「' + category + '」']),
129
+ ...(limit === 20 ? [] : ['最多取前 ' + limit + ' 条']),
130
+ ],
131
+ copyLog: {
132
+ thinking: '按创建时间区间查 · 按 created_at 过滤后倒序,排期条件可另叠',
133
+ data_structure: 'notes 表 · id/content/category/sub_category/due/created_at(按 created_at 倒序)',
134
+ call_chain: 'memo.search → searchNotesByCreatedRange → querySnapshot → buildListPage(memo_query) → deliver 钩子落盘',
135
+ exception: '无',
136
+ },
137
+ }),
138
+ };
51
139
  }
52
- const items = params.q !== undefined
140
+ const words = filterWords(params);
141
+ const rows = params.q !== undefined
53
142
  ? searchNotes(db, String(params.q), { category: params.category, sub: params.sub })
54
143
  : listNotes(db).filter((n) => (params.category === undefined || n.category === params.category));
55
- const hit = items.filter((n) => dueMatches(n, params));
56
- return { data: { items: hit, total: hit.length }, exit: 0 };
144
+ const hit = rows.filter((n) => dueMatches(n, params));
145
+ return {
146
+ data: { items: hit, total: hit.length },
147
+ exit: 0,
148
+ deliver: listDeliver({
149
+ scene: sceneOf(params, words.scene),
150
+ items: hit,
151
+ subtitle: '共 ' + hit.length + ' 条',
152
+ condition: words.text === '' ? [] : [words.text],
153
+ copyLog: {
154
+ thinking: '关键词/分类查 · 命中即列,页内可再筛选与复制',
155
+ data_structure: 'notes 表 · id/content/category/sub_category/due/media_path/created_at',
156
+ call_chain: 'memo.search → searchNotes/listNotes → querySnapshot → buildListPage(memo_query) → deliver 钩子落盘',
157
+ exception: '无',
158
+ },
159
+ }),
160
+ };
57
161
  }
58
- /** `memo.detail`:单条详情(缺 id 即槽位错,exit 2)。 */
162
+ /** `memo.detail`:单条详情(缺 id 即槽位错,exit 2)+ 「看备忘」那一格随行。 */
59
163
  export function runDetail(params, db) {
60
- return { data: { item: getNote(db, needId(params.id, '详情')) }, exit: 0 };
164
+ const item = getNote(db, needId(params.id, '详情'));
165
+ return {
166
+ data: { item },
167
+ exit: 0,
168
+ deliver: listDeliver({
169
+ scene: 'memo_get_detail',
170
+ items: [item],
171
+ subtitle: '笔记 #' + String(item.id) + ' 的全部内容',
172
+ copyLog: {
173
+ thinking: '单条详情 · 按 id 直取一行(老 detail 口径)',
174
+ data_structure: 'notes 表 · id/content/category/sub_category/due/media_path/created_at/updated_at',
175
+ call_chain: 'memo.detail → getNote → querySnapshot → buildListPage(memo_query) → deliver 钩子落盘',
176
+ exception: '无',
177
+ },
178
+ }),
179
+ };
61
180
  }
62
181
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,10 @@
11
11
  * - `pre-open` 开库前分派:不拿库句柄(HELP 交付与初始化渲染要在「库还没建好」时也能跑),
12
12
  * 故它的处理函数只吃参数、自己决定开不开库。
13
13
  *
14
- * 搬迁债务(#855 收尾前有效):库句柄类型今天住 `src/fetch/db.ts`(目标 `src/db/readonly.ts`),
15
- * 故这里按老路径 import type;那个件搬家的那一批里,本行的路径跟着改,别处不动。
14
+ * 库句柄类型住 `src/db/readonly.ts`(#855 起;连接层只读、禁 DDL),本件按新家取。
16
15
  */
17
16
  import type { EnvelopeShape } from 'base-link-core';
18
- import type { MemoDb } from '../fetch/db.js';
17
+ import type { MemoDb } from '../db/readonly.js';
19
18
  /** 整页交付意图:`html`=本次产物的整页,`stem`=册子冻结的文件名主体(`src/help/booklet.ts` 的唯一定义地给出)。 */
20
19
  export interface PageDeliver {
21
20
  readonly html: string;
@@ -39,14 +38,14 @@ export interface ReadCommandSpec {
39
38
  readonly key: string;
40
39
  readonly shape: EnvelopeShape;
41
40
  readonly title: string;
42
- /** 代表唤醒词(生成 SKILL.md 速查表那一列用);**可缺**(如 `memo.stats` 没有词);
41
+ /** 代表唤醒词(生成 SKILL.md 速查表那一列用);**可缺**(如 `memo.auth` 只有诊断两档、没有唤醒词);
43
42
  * 给定时必须是路由声明里真有的词(生成期拦,见 `scripts/gen-cli.mjs`)。 */
44
43
  readonly wakeWord?: string;
45
44
  /** 照抄即能跑的一行(生成 SKILL.md 速查表「例」列用);缺它或为空即生成期抛。 */
46
45
  readonly example: string;
47
46
  readonly run: CommandHandler;
48
47
  }
49
- /** 写命令声明(**不写 `shape`**:写命令一律回执形,唯一定义地在生成器合成的 `MEMO_KEY_SHAPES` 那一行)。 */
48
+ /** 写命令声明(**不写 `shape`**:写命令一律回执形,唯一定义地是生成器合成的 `MEMO_DECLARED_SHAPES` 那一行)。 */
50
49
  export interface WriteCommandSpec {
51
50
  readonly kind: 'write';
52
51
  readonly key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"commandSpec.d.ts","sourceRoot":"","sources":["../../src/shared/commandSpec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;6DAE6D;AAC7D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,wBAAwB;AACxB,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,UAAU,CAAC;AAEzF,mCAAmC;AACnC,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC;AAE7E,aAAa;AACb,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;yDACqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,kBAAkB,CAAC"}
1
+ {"version":3,"file":"commandSpec.d.ts","sourceRoot":"","sources":["../../src/shared/commandSpec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;6DAE6D;AAC7D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,wBAAwB;AACxB,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,UAAU,CAAC;AAEzF,mCAAmC;AACnC,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC;AAE7E,aAAa;AACb,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;yDACqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AACA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EACT,iBAAiB,GAAG,oBAAoB,GAAG,mBAAmB,GAC9D,qBAAqB,GAAG,gBAAgB,GACxC,kBAAkB,GAAG,oBAAoB,GAAG,aAAa,GAAG,cAAc,GAAG,mBAAmB;IAClG,+EAA+E;OAC7E,kBAAkB,CAAC;gBACX,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKzF;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EACT,iBAAiB,GAAG,qBAAqB,GAAG,qBAAqB,GACjE,qBAAqB,GAAG,kBAAkB,CAAC;gBACnC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAK3D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAKU;IACvB,YAAY,IAA4B,EAAE,OAAe,EAAE,OAA6B;QACtF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAEkC;IAC/C,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"}
@@ -21,7 +21,7 @@ export declare function htmlDirOf(dbDir: string, configured: string): string;
21
21
  * 改基=换语义;默认(空串)走数据目录已是新契约,两条在 `mediaDirText` 的人话里各说各的。 */
22
22
  export declare function mediaDirOf(dataDir: string, configured: string): string;
23
23
  /** 附件目录:配置 `media.dir` 的解析结果(算式见 `mediaDirOf`)。只算路径,
24
- * 「必须已存在」的判定归 `src/policy/media.ts` 的 `resolveMediaDir()`。 */
24
+ * 「必须已存在」的判定归 `src/memo/media.ts` 的 `resolveMediaDir()`。 */
25
25
  export declare function resolveMediaDirPath(): string;
26
26
  /** 库文件路径:`<库目录>/<库文件名>`(**不建目录**——备忘的库由用户/老技能建,本包不建空库)。 */
27
27
  export declare function resolveDbPath(filename?: string, dir?: string): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/shared/paths.ts"],"names":[],"mappings":"AAcA,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C;wCACwC;AACxC,eAAO,MAAM,qBAAqB,cAA6B,CAAC;AAEhE,0CAA0C;AAC1C,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED;0DAC0D;AAC1D,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,6BAA6B;AAC7B,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED,uBAAuB;AACvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAOD,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;0DAI0D;AAC1D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;6DAC6D;AAC7D,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,SAAe,EAAE,GAAG,SAAiB,GAAG,MAAM,CAEnF;AAED;yDACyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,mDAAmD;AACnD,wBAAgB,iBAAiB,IAAI,iBAAiB,CASrD"}
@@ -5,8 +5,8 @@
5
5
  // 连接口径不变:新仓直连老库文件 `<库目录>/memo.db`(SQLite、WAL、外键开),连接层禁 DDL。
6
6
  //
7
7
  // **#760 起本件是全部落点算式的唯一定义地**(设置页只读行显示的那一组绝对路径由这里算,
8
- // `src/health.ts` 的体检报告调这里的纯函数,`src/policy/media.ts` 的附件目录调 `mediaDirOf`,
9
- // 三处不许走散;照记账样板 #749 的 `src/fetch/paths.ts`)。
8
+ // `src/cli/health/probe.ts` 的体检探针调这里的纯函数,`src/memo/media.ts` 的附件目录调 `mediaDirOf`,
9
+ // 三处不许走散;照记账样板 #749 的路径件)。
10
10
  // 算式一律是**纯函数**(只拼路径、不读配置、不碰盘),读配置只在下面几个 `resolve*` 薄壳里发生。
11
11
  import { isAbsolute, join, resolve } from 'node:path';
12
12
  import { MEDIA_DIR_NAME, loadMemoConfig } from '../config.js';
@@ -54,7 +54,7 @@ export function mediaDirOf(dataDir, configured) {
54
54
  return isAbsolute(configured) ? configured : resolve(configured);
55
55
  }
56
56
  /** 附件目录:配置 `media.dir` 的解析结果(算式见 `mediaDirOf`)。只算路径,
57
- * 「必须已存在」的判定归 `src/policy/media.ts` 的 `resolveMediaDir()`。 */
57
+ * 「必须已存在」的判定归 `src/memo/media.ts` 的 `resolveMediaDir()`。 */
58
58
  export function resolveMediaDirPath() {
59
59
  const cfg = loadMemoConfig();
60
60
  return mediaDirOf(cfg.dataDir, cfg.values.media.dir);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/shared/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** id 归一:对外接受数字或数字串,统一归一为 number(老 `note_id <= 0` 即错口径)。 */
2
+ export declare function needId(id: unknown, op: string): number;
3
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/shared/validators.ts"],"names":[],"mappings":"AAQA,4DAA4D;AAC5D,wBAAgB,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAItD"}
@@ -0,0 +1,15 @@
1
+ /** 跨域共用 · 参数校验原语(票 #855 从 `memo/crud.ts` 提到共用位)。
2
+ *
3
+ * 谁在用(写得出三个在用):`memo/crud.ts`(增删改查的 id 口)/`src/search/run.ts`(详情 id)/
4
+ * `src/remind/run.ts`(提醒关联笔记 id)——三域同用一个正整数 id 口径,各写一份迟早走散(铁律二)。
5
+ * 本件只做一件事(正整数归一),不碰分类/提醒/附件那些域口径。
6
+ */
7
+ import { MemoPolicyError } from './errors.js';
8
+ /** id 归一:对外接受数字或数字串,统一归一为 number(老 `note_id <= 0` 即错口径)。 */
9
+ export function needId(id, op) {
10
+ const n = typeof id === 'number' ? id : typeof id === 'string' && id.trim() !== '' ? Number(id) : NaN;
11
+ if (!Number.isInteger(n) || n <= 0)
12
+ throw new MemoPolicyError('POLICY_BAD_INPUT', op + ' 须给正整数 id');
13
+ return n;
14
+ }
15
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/shared/validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,4DAA4D;AAC5D,MAAM,UAAU,MAAM,CAAC,EAAW,EAAE,EAAU;IAC5C,MAAM,CAAC,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC;IACpG,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/sync/auth.ts"],"names":[],"mappings":"AAOA,6BAA6B;AAC7B,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUpD"}
@@ -1,14 +1,14 @@
1
1
  // 取数层·飞书授权状态(#760 起只剩检测面):授权三支(发起/发 QR/续轮询)随 `lark.cliPath` 删键退役
2
2
  // (定稿 #759:授权这件事交出去,由复制安装指引那段 prompt 带用户在浏览器里走)。
3
- // 保留的检测面:`authStatus`(面板三档读数与 `larkTierInfo` 的身份真值源)由 `src/fetch/feishu.ts`
3
+ // 保留的检测面:`authStatus`(面板三档读数与 `larkTierInfo` 的身份真值源)由同域的 `./feishu.js`
4
4
  // 的 `findLarkCli`/`runLark` 驱动;四道门(存在→版本→登录→scope)住 `larkReady`。
5
5
  import { findLarkCli, runLark } from './feishu.js';
6
- import { MemoFetchError } from './errors.js';
6
+ import { MemoFetchError } from '../shared/errors.js';
7
7
  /** 当前 lark-cli 授权状态(诊断用)。 */
8
8
  export function authStatus() {
9
9
  const cli = findLarkCli();
10
10
  if (!cli)
11
- throw new MemoFetchError('LARK_UNAVAILABLE', 'lark-cli 未找到:缺失阻断取数');
11
+ throw new MemoFetchError('LARK_UNAVAILABLE', '飞书命令行工具未找到:这一步要它,先按安装指引装好');
12
12
  const r = runLark(cli, ['auth', 'status']);
13
13
  if (!r.ok)
14
14
  throw new MemoFetchError('LARK_TASK_FAILED', '授权状态查询失败:' + r.stderr.slice(0, 300));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/sync/auth.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,iDAAiD;AACjD,uEAAuE;AACvE,iEAAiE;AACjE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,6BAA6B;AAC7B,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAA4B,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/sync/commands.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE5C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;IAiBQ,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/sync/commands.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE5C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;IAiBQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/sync/commands.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,yBAAyB;QAClC,GAAG,EAAE,OAAO;KACb;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,wDAAwD;QACjE,GAAG,EAAE,OAAO;KACb;CAC+B,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/sync/commands.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,yBAAyB;QAClC,GAAG,EAAE,OAAO;KACb;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,wDAAwD;QACjE,GAAG,EAAE,OAAO;KACb;CAC+B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu.d.ts","sourceRoot":"","sources":["../../src/sync/feishu.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAG,kCAA2C,CAAC;AAE5E;+CAC+C;AAC/C,eAAO,MAAM,iBAAiB,EAAG,yEAAoD,CAAC;AAEtF;;0BAE0B;AAC1B,eAAO,MAAM,mBAAmB,wsJAmCe,CAAC;AAEhD,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,mCAAmC;AACnC,wBAAgB,aAAa,IAAI,aAAa,CAE7C;AAQD,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAqC3C;AAED,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AACxD,MAAM,WAAW,aAAa;IAAG,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAKlF,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,SAA0B,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAgBjI;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW9C;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,MAAM,WAAW,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAGhF,wBAAgB,SAAS,CAAC,KAAK,SAAkB,GAAG,SAAS,CAO5D;AAED;gEACgE;AAChE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;6CAE6C;AAC7C,wBAAgB,YAAY,CAAC,KAAK,SAAkB,GAAG,YAAY,CA4BlE;AAED,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAA6B"}
@@ -4,7 +4,7 @@ import { accessSync, constants } from 'node:fs';
4
4
  import { execFileSync } from 'node:child_process';
5
5
  import { homedir } from 'node:os';
6
6
  import { join } from 'node:path';
7
- import { MemoFetchError } from './errors.js';
7
+ import { MemoFetchError } from '../shared/errors.js';
8
8
  export const LARK_DEFAULT_TIMEOUT_MS = 30000;
9
9
  export const LARK_WISH_SCOPE = 'task';
10
10
  /** 飞书 CLI 官网(面板状态行与失败回执的链接目标,逐字显示见 `LARK_WEBSITE_LINE`)。 */
@@ -59,7 +59,7 @@ export function larkSetupInfo() {
59
59
  // 候选=既有 5 档(Windows npm 全局 → where/which → 两条固定路径)+ #760 补注的 4 条
60
60
  // (scoop 家目录派生 exe/cmd、`/opt/homebrew/bin`、家目录 `.npm-global/bin`、家目录 `.local/bin`,
61
61
  // 一律 `os.homedir()` 派生,不读 `%APPDATA%`/`$HOME`);**与作息管家那张表逐条相同**(跨包锁进 #758)。
62
- // `src/health.ts` 里那份只读副本只用前 5 档,不进锁(体检不落盘,调 `loadMemoConfig` 会落默认配置)。
62
+ // `src/cli/health/probe.ts` 里那份只读副本只用前 5 档,不进锁(体检不落盘,调 `loadMemoConfig` 会落默认配置)。
63
63
  // 找不到返 null(不抛,larkReady 抛)。#695 起环境变量读取已删(`LARK_CLI_PATH` 与 `APPDATA` 全删)。
64
64
  export function findLarkCli() {
65
65
  if (process.platform === 'win32') {
@@ -134,9 +134,9 @@ export function runLark(cli, args, timeoutMs = LARK_DEFAULT_TIMEOUT_MS, cwd) {
134
134
  catch (e) {
135
135
  const err = e;
136
136
  if (err.code === 'ENOENT')
137
- throw new MemoFetchError('LARK_UNAVAILABLE', 'lark-cli 不可用:' + cli);
137
+ throw new MemoFetchError('LARK_UNAVAILABLE', '飞书命令行工具不可用:程序无法启动');
138
138
  if (err.code === 'ETIMEDOUT')
139
- throw new MemoFetchError('LARK_TIMEOUT', 'lark-cli 超时:' + args.join(' '));
139
+ throw new MemoFetchError('LARK_TIMEOUT', '飞书命令行工具超时:命令没在时限内返回');
140
140
  return { ok: false, exit: err.status ?? null, stderr: String(err.stderr ?? err.message ?? e) };
141
141
  }
142
142
  }
@@ -150,17 +150,17 @@ export function larkVersion(cli) {
150
150
  export function authOpenId(cli) {
151
151
  const r = runLark(cli, ['auth', 'status']);
152
152
  if (!r.ok)
153
- throw new MemoFetchError('LARK_NOT_LOGGED_IN', 'lark-cli auth status 失败(未登录?)');
153
+ throw new MemoFetchError('LARK_NOT_LOGGED_IN', '飞书登录状态查询失败:可能还没登录,先登录一次');
154
154
  let j = null;
155
155
  try {
156
156
  j = JSON.parse(r.stdout);
157
157
  }
158
158
  catch {
159
- throw new MemoFetchError('LARK_BAD_RESPONSE', 'lark-cli auth status 非 JSON');
159
+ throw new MemoFetchError('LARK_BAD_RESPONSE', '飞书登录状态读不出内容:先按安装指引重新登录一次');
160
160
  }
161
161
  const id = j.identities?.user?.openId;
162
162
  if (typeof id !== 'string' || id.length === 0) {
163
- throw new MemoFetchError('LARK_NOT_LOGGED_IN', 'lark-cli 未登录(无 openId,先 auth login)');
163
+ throw new MemoFetchError('LARK_NOT_LOGGED_IN', '飞书未登录:登录状态里没有你的身份,先登录一次');
164
164
  }
165
165
  return id;
166
166
  }
@@ -172,11 +172,11 @@ export function checkScope(cli, scope) {
172
172
  export function larkReady(scope = LARK_WISH_SCOPE) {
173
173
  const cli = findLarkCli();
174
174
  if (!cli)
175
- throw new MemoFetchError('LARK_UNAVAILABLE', 'lark-cli 未找到:缺失阻断取数');
175
+ throw new MemoFetchError('LARK_UNAVAILABLE', '飞书命令行工具未找到:这一步要它,先按安装指引装好');
176
176
  const version = larkVersion(cli);
177
177
  const openId = authOpenId(cli);
178
178
  if (!checkScope(cli, scope))
179
- throw new MemoFetchError('LARK_DENIED', '缺 scope 授权:' + scope);
179
+ throw new MemoFetchError('LARK_DENIED', '飞书授权不足:这一步要的权限还没给,重新授权时请一并勾上');
180
180
  return { cliPath: cli, version, openId };
181
181
  }
182
182
  /** 探一遍三档:CLI 都不在就停在第 1 档,不往下起子进程试登录。**不抛**——面板与回执要的是状态,不是异常。
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu.js","sourceRoot":"","sources":["../../src/sync/feishu.ts"],"names":[],"mappings":"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"}