skill-schedule 0.3.3 → 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 (187) hide show
  1. package/SKILL.md +12 -3
  2. package/dist/.gen-inputs.json +4 -4
  3. package/dist/admin/adminDocs.d.ts +57 -0
  4. package/dist/admin/adminDocs.d.ts.map +1 -0
  5. package/dist/admin/adminDocs.js +190 -0
  6. package/dist/admin/adminDocs.js.map +1 -0
  7. package/dist/admin/adminParts.d.ts +37 -0
  8. package/dist/admin/adminParts.d.ts.map +1 -0
  9. package/dist/admin/adminParts.js +83 -0
  10. package/dist/admin/adminParts.js.map +1 -0
  11. package/dist/admin/handlers.d.ts.map +1 -1
  12. package/dist/admin/handlers.js +196 -6
  13. package/dist/admin/handlers.js.map +1 -1
  14. package/dist/admin/routes.d.ts +10 -1
  15. package/dist/admin/routes.d.ts.map +1 -1
  16. package/dist/admin/routes.js +2 -0
  17. package/dist/admin/routes.js.map +1 -1
  18. package/dist/analyze/analyzeDocs.d.ts +51 -0
  19. package/dist/analyze/analyzeDocs.d.ts.map +1 -0
  20. package/dist/analyze/analyzeDocs.js +442 -0
  21. package/dist/analyze/analyzeDocs.js.map +1 -0
  22. package/dist/analyze/analyzeParts.d.ts +53 -0
  23. package/dist/analyze/analyzeParts.d.ts.map +1 -0
  24. package/dist/analyze/analyzeParts.js +229 -0
  25. package/dist/analyze/analyzeParts.js.map +1 -0
  26. package/dist/analyze/handlers.d.ts.map +1 -1
  27. package/dist/analyze/handlers.js +41 -4
  28. package/dist/analyze/handlers.js.map +1 -1
  29. package/dist/cli/cmd_read.js +8 -2
  30. package/dist/cli/cmd_read.js.map +1 -1
  31. package/dist/cli/config.d.ts +0 -9
  32. package/dist/cli/config.d.ts.map +1 -1
  33. package/dist/cli/config.js +20 -1
  34. package/dist/cli/config.js.map +1 -1
  35. package/dist/fetch/feishu.d.ts +6 -0
  36. package/dist/fetch/feishu.d.ts.map +1 -1
  37. package/dist/fetch/feishu.js +18 -7
  38. package/dist/fetch/feishu.js.map +1 -1
  39. package/dist/fetch/index.d.ts +1 -1
  40. package/dist/fetch/index.d.ts.map +1 -1
  41. package/dist/fetch/index.js +1 -1
  42. package/dist/fetch/index.js.map +1 -1
  43. package/dist/health.d.ts +11 -0
  44. package/dist/health.d.ts.map +1 -1
  45. package/dist/health.js +48 -22
  46. package/dist/health.js.map +1 -1
  47. package/dist/help/index.d.ts +1 -0
  48. package/dist/help/index.d.ts.map +1 -1
  49. package/dist/help/index.js +3 -0
  50. package/dist/help/index.js.map +1 -1
  51. package/dist/plan/discussDocs.d.ts +8 -0
  52. package/dist/plan/discussDocs.d.ts.map +1 -0
  53. package/dist/plan/discussDocs.js +321 -0
  54. package/dist/plan/discussDocs.js.map +1 -0
  55. package/dist/plan/feishuDocs.d.ts +19 -0
  56. package/dist/plan/feishuDocs.d.ts.map +1 -0
  57. package/dist/plan/feishuDocs.js +257 -0
  58. package/dist/plan/feishuDocs.js.map +1 -0
  59. package/dist/plan/handlers.d.ts.map +1 -1
  60. package/dist/plan/handlers.js +107 -3
  61. package/dist/plan/handlers.js.map +1 -1
  62. package/dist/plan/index.d.ts +2 -0
  63. package/dist/plan/index.d.ts.map +1 -1
  64. package/dist/plan/index.js +16 -9
  65. package/dist/plan/index.js.map +1 -1
  66. package/dist/plan/iso.d.ts +2 -0
  67. package/dist/plan/iso.d.ts.map +1 -1
  68. package/dist/plan/iso.js +6 -2
  69. package/dist/plan/iso.js.map +1 -1
  70. package/dist/plan/planDocs.d.ts +47 -0
  71. package/dist/plan/planDocs.d.ts.map +1 -0
  72. package/dist/plan/planDocs.js +159 -0
  73. package/dist/plan/planDocs.js.map +1 -0
  74. package/dist/plan/planParts.d.ts +38 -0
  75. package/dist/plan/planParts.d.ts.map +1 -0
  76. package/dist/plan/planParts.js +96 -0
  77. package/dist/plan/planParts.js.map +1 -0
  78. package/dist/plan/probe.d.ts +28 -0
  79. package/dist/plan/probe.d.ts.map +1 -0
  80. package/dist/plan/probe.js +114 -0
  81. package/dist/plan/probe.js.map +1 -0
  82. package/dist/plan/receipt.d.ts +12 -0
  83. package/dist/plan/receipt.d.ts.map +1 -1
  84. package/dist/plan/receipt.js +17 -0
  85. package/dist/plan/receipt.js.map +1 -1
  86. package/dist/plan/receiptDocs.d.ts +26 -0
  87. package/dist/plan/receiptDocs.d.ts.map +1 -0
  88. package/dist/plan/receiptDocs.js +341 -0
  89. package/dist/plan/receiptDocs.js.map +1 -0
  90. package/dist/plan/replayDocs.d.ts +165 -0
  91. package/dist/plan/replayDocs.d.ts.map +1 -0
  92. package/dist/plan/replayDocs.js +226 -0
  93. package/dist/plan/replayDocs.js.map +1 -0
  94. package/dist/plan/replaySections.d.ts +5 -0
  95. package/dist/plan/replaySections.d.ts.map +1 -0
  96. package/dist/plan/replaySections.js +471 -0
  97. package/dist/plan/replaySections.js.map +1 -0
  98. package/dist/plan/reviewDocs.d.ts +4 -0
  99. package/dist/plan/reviewDocs.d.ts.map +1 -0
  100. package/dist/plan/reviewDocs.js +130 -0
  101. package/dist/plan/reviewDocs.js.map +1 -0
  102. package/dist/plan/sync.d.ts.map +1 -1
  103. package/dist/plan/sync.js +5 -0
  104. package/dist/plan/sync.js.map +1 -1
  105. package/dist/policy/index.d.ts +1 -1
  106. package/dist/policy/index.d.ts.map +1 -1
  107. package/dist/policy/index.js +1 -1
  108. package/dist/policy/index.js.map +1 -1
  109. package/dist/policy/plan.d.ts +8 -0
  110. package/dist/policy/plan.d.ts.map +1 -1
  111. package/dist/policy/plan.js +20 -0
  112. package/dist/policy/plan.js.map +1 -1
  113. package/dist/query/handlers.d.ts +3 -0
  114. package/dist/query/handlers.d.ts.map +1 -1
  115. package/dist/query/handlers.js +86 -12
  116. package/dist/query/handlers.js.map +1 -1
  117. package/dist/query/queryDocs.d.ts +64 -0
  118. package/dist/query/queryDocs.d.ts.map +1 -0
  119. package/dist/query/queryDocs.js +554 -0
  120. package/dist/query/queryDocs.js.map +1 -0
  121. package/dist/query/routes.d.ts +11 -1
  122. package/dist/query/routes.d.ts.map +1 -1
  123. package/dist/query/routes.js +5 -1
  124. package/dist/query/routes.js.map +1 -1
  125. package/dist/render/copyArea.d.ts +61 -0
  126. package/dist/render/copyArea.d.ts.map +1 -0
  127. package/dist/render/copyArea.js +80 -0
  128. package/dist/render/copyArea.js.map +1 -0
  129. package/dist/render/html.d.ts.map +1 -1
  130. package/dist/render/html.js +3 -1
  131. package/dist/render/html.js.map +1 -1
  132. package/dist/render/index.d.ts +3 -0
  133. package/dist/render/index.d.ts.map +1 -1
  134. package/dist/render/index.js +2 -0
  135. package/dist/render/index.js.map +1 -1
  136. package/dist/shared/dayPage.d.ts +67 -0
  137. package/dist/shared/dayPage.d.ts.map +1 -0
  138. package/dist/shared/dayPage.js +92 -0
  139. package/dist/shared/dayPage.js.map +1 -0
  140. package/dist/shared/detailPage.d.ts +55 -0
  141. package/dist/shared/detailPage.d.ts.map +1 -0
  142. package/dist/shared/detailPage.js +65 -0
  143. package/dist/shared/detailPage.js.map +1 -0
  144. package/dist/shared/docPage.d.ts +22 -0
  145. package/dist/shared/docPage.d.ts.map +1 -0
  146. package/dist/shared/docPage.js +52 -0
  147. package/dist/shared/docPage.js.map +1 -0
  148. package/dist/shared/overviewPage.d.ts +52 -0
  149. package/dist/shared/overviewPage.d.ts.map +1 -0
  150. package/dist/shared/overviewPage.js +65 -0
  151. package/dist/shared/overviewPage.js.map +1 -0
  152. package/dist/shared/pageNav.d.ts +24 -0
  153. package/dist/shared/pageNav.d.ts.map +1 -0
  154. package/dist/shared/pageNav.js +70 -0
  155. package/dist/shared/pageNav.js.map +1 -0
  156. package/dist/shared/pageParts.d.ts +45 -0
  157. package/dist/shared/pageParts.d.ts.map +1 -0
  158. package/dist/shared/pageParts.js +154 -0
  159. package/dist/shared/pageParts.js.map +1 -0
  160. package/dist/shared/planPage.d.ts +49 -0
  161. package/dist/shared/planPage.d.ts.map +1 -0
  162. package/dist/shared/planPage.js +48 -0
  163. package/dist/shared/planPage.js.map +1 -0
  164. package/dist/shared/rangePage.d.ts +44 -0
  165. package/dist/shared/rangePage.d.ts.map +1 -0
  166. package/dist/shared/rangePage.js +50 -0
  167. package/dist/shared/rangePage.js.map +1 -0
  168. package/dist/shared/weekPage.d.ts +36 -0
  169. package/dist/shared/weekPage.d.ts.map +1 -0
  170. package/dist/shared/weekPage.js +42 -0
  171. package/dist/shared/weekPage.js.map +1 -0
  172. package/dist/triggers/routes.generated.d.ts +23 -1
  173. package/dist/triggers/routes.generated.d.ts.map +1 -1
  174. package/dist/triggers/routes.generated.js +4 -1
  175. package/dist/triggers/routes.generated.js.map +1 -1
  176. package/dist/write/handlers.d.ts.map +1 -1
  177. package/dist/write/handlers.js +101 -5
  178. package/dist/write/handlers.js.map +1 -1
  179. package/dist/write/writeDocs.d.ts +27 -0
  180. package/dist/write/writeDocs.d.ts.map +1 -0
  181. package/dist/write/writeDocs.js +423 -0
  182. package/dist/write/writeDocs.js.map +1 -0
  183. package/dist/write/writeParts.d.ts +54 -0
  184. package/dist/write/writeParts.d.ts.map +1 -0
  185. package/dist/write/writeParts.js +117 -0
  186. package/dist/write/writeParts.js.map +1 -0
  187. package/package.json +3 -3
@@ -0,0 +1,44 @@
1
+ /** #785 · 「区间汇总」的**页型配方**(形状维度的唯一定义地)。
2
+ *
3
+ * 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f02「作息记录·区间」这一族
4
+ * 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
5
+ * 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
6
+ *
7
+ * 形状=件序列(照老侧 f02 的必现块摆位,一块不少,只换主次):
8
+ *
9
+ * 读数卡 → 结论条 → 分类聚合(分布行)→ 7 维趋势(图表块)→ 睡眠统计(事实条)→ 每日明细(行列表)→ 复制区
10
+ *
11
+ * 老侧 f02 的必现块:**分类聚合**=分布行、**7 维趋势**=图表块、**睡眠统计**=事实条;
12
+ * 另有老侧同页的 4 卡摘要(这里=读数卡)与每日明细(这里=行列表),健康分落读数卡之一。
13
+ *
14
+ * **本件只认形状,不认口径**:哪 7 维、每格多少分钟、分布行怎么排序、睡眠取哪几类,都由 `query` 侧
15
+ * 算好再进来(与 `weekPage.ts` 同一分工)。
16
+ *
17
+ * #891 补的**页内定位**(不动件序列):本页**小节恒 3 颗**(`分类聚合`/`7 维趋势`/`复制与留档`),
18
+ * 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页是长页**,页首出页内目录。
19
+ */
20
+ import { type ChartBlockInput, type DistributionRowInput, type KpiCardInput, type ListRowInput } from 'base-paint/blocks';
21
+ import { type FactItemInput } from 'base-paint';
22
+ import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
23
+ import { type PageHead } from './docPage.js';
24
+ /** 「区间汇总」一页要的全部东西(8 个字段)。 */
25
+ export interface RangePageData {
26
+ readonly head: PageHead;
27
+ /** 读数卡:块数/覆盖/覆盖天数/健康分(老侧同页的「4 卡摘要」)。 */
28
+ readonly kpis: readonly KpiCardInput[];
29
+ readonly conclusion: string;
30
+ /** **分类聚合**:一级分类的时长与占比(标签是给人看的一级分类名,不是 `l1.x` 那种原始键)。 */
31
+ readonly distribution: readonly DistributionRowInput[];
32
+ /** 分布行上色要的顺序(一级分类的权威顺序,由调用方从 `policy` 取)。 */
33
+ readonly order: readonly string[];
34
+ /** **7 维趋势**:图表块的 kind + 入参(本件只补段名,不挑 kind——单日区间与多日区间的画法不同)。 */
35
+ readonly trend: Omit<ChartBlockInput, 'title'>;
36
+ /** **睡眠统计**:夜间睡眠/午睡/合计。 */
37
+ readonly sleep: readonly FactItemInput[];
38
+ /** 每日明细(一行一天:日期/块数/当天时长)。 */
39
+ readonly daily: readonly ListRowInput[];
40
+ readonly copy: ScheduleCopyAreaInput;
41
+ }
42
+ /** 出「区间汇总」整页。 */
43
+ export declare function renderRangePage(data: RangePageData): string;
44
+ //# sourceMappingURL=rangePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangePage.d.ts","sourceRoot":"","sources":["../../src/shared/rangePage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAE0B,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAC9E,KAAK,YAAY,EAAE,KAAK,YAAY,EACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI9D,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC/C,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED,iBAAiB;AACjB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAsB3D"}
@@ -0,0 +1,50 @@
1
+ /** #785 · 「区间汇总」的**页型配方**(形状维度的唯一定义地)。
2
+ *
3
+ * 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f02「作息记录·区间」这一族
4
+ * 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
5
+ * 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
6
+ *
7
+ * 形状=件序列(照老侧 f02 的必现块摆位,一块不少,只换主次):
8
+ *
9
+ * 读数卡 → 结论条 → 分类聚合(分布行)→ 7 维趋势(图表块)→ 睡眠统计(事实条)→ 每日明细(行列表)→ 复制区
10
+ *
11
+ * 老侧 f02 的必现块:**分类聚合**=分布行、**7 维趋势**=图表块、**睡眠统计**=事实条;
12
+ * 另有老侧同页的 4 卡摘要(这里=读数卡)与每日明细(这里=行列表),健康分落读数卡之一。
13
+ *
14
+ * **本件只认形状,不认口径**:哪 7 维、每格多少分钟、分布行怎么排序、睡眠取哪几类,都由 `query` 侧
15
+ * 算好再进来(与 `weekPage.ts` 同一分工)。
16
+ *
17
+ * #891 补的**页内定位**(不动件序列):本页**小节恒 3 颗**(`分类聚合`/`7 维趋势`/`复制与留档`),
18
+ * 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页是长页**,页首出页内目录。
19
+ */
20
+ import { renderChartBlock, renderConclusionBar, renderDistributionRows, renderKpiGrid, renderListRows, } from 'base-paint/blocks';
21
+ import { renderFactStrip } from 'base-paint';
22
+ import { scheduleCopyArea } from '../render/copyArea.js';
23
+ import { assembleDocPage } from './docPage.js';
24
+ import { pageSections } from './pageNav.js';
25
+ import { categoryColor } from './pageParts.js';
26
+ /** 出「区间汇总」整页。 */
27
+ export function renderRangePage(data) {
28
+ const { toc, body } = pageSections([
29
+ { html: renderKpiGrid(data.kpis) },
30
+ { html: renderConclusionBar(data.conclusion) },
31
+ // 分类聚合这一段要有名字(老侧 f02 的必现块就叫「分类聚合」):段名走 `heat-title` 这个公共层
32
+ // 已有的段名类(今天总结页的「作息库现状」与周视图的矩阵段名都走它),不新造类名、不新添 CSS。
33
+ { navText: '分类聚合', html: '<h2 class="heat-title">分类聚合</h2>'
34
+ // 分布行按名上色(与色带/矩阵同一算式):不给色就一律落 `--blue`,八行一样看不出分别。
35
+ + renderDistributionRows({
36
+ rows: data.distribution.map((row) => ({ ...row, color: categoryColor(row.label, data.order) })),
37
+ }) },
38
+ { navText: '7 维趋势', html: renderChartBlock({ ...data.trend, title: '7 维趋势' }) },
39
+ { html: renderFactStrip({ items: data.sleep }) },
40
+ { html: renderListRows({ items: data.daily, emptyText: '这一区间没有记录' }) },
41
+ { navText: '复制与留档', html: scheduleCopyArea({
42
+ title: '复制与留档',
43
+ dataActionId: 'ilife-sch-range-copy-data',
44
+ logActionId: 'ilife-sch-range-copy-log',
45
+ ...data.copy,
46
+ }) },
47
+ ]);
48
+ return assembleDocPage({ head: data.head, content: toc + body });
49
+ }
50
+ //# sourceMappingURL=rangePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangePage.js","sourceRoot":"","sources":["../../src/shared/rangePage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,gBAAgB,EAAE,mBAAmB,EAAE,sBAAsB,EAC7D,aAAa,EAAE,cAAc,GAE9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAqB/C,iBAAiB;AACjB,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACjC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClC,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC9C,0DAA0D;QAC1D,mDAAmD;QACnD,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC;gBACzD,kDAAkD;kBAChD,sBAAsB,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBAChG,CAAC,EAAE;QACN,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QAC/E,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;QAChD,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;QACtE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC;gBACzC,KAAK,EAAE,OAAO;gBACd,YAAY,EAAE,2BAA2B;gBACzC,WAAW,EAAE,0BAA0B;gBACvC,GAAG,IAAI,CAAC,IAAI;aACb,CAAC,EAAE;KACL,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /** #782 · 「周视图」的**页型配方**(形状维度的唯一定义地)。
2
+ *
3
+ * 形状=人裁过的 **A · 矩阵为主**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
4
+ * 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
5
+ *
6
+ * 读数卡 → 7×24 热力矩阵(页主体)→ 图例 → 分类总览 → 每日汇总列表 → 复制区
7
+ *
8
+ * 老侧 f08「周视图」的五个必现块:**7×24 全分类热力图**=矩阵(页主体)、**分类总览**=分布行、
9
+ * **每日汇总**=列表行、**健康分**=读数卡之一、**复制 prompt 位**=复制区。
10
+ *
11
+ * **本件只认形状,不认口径**:格子取哪个分类、健康分怎么算、顺序表从哪来,都由 `query` 侧给。
12
+ *
13
+ * #891 补的**页内定位**(不动件序列):本页**小节恒 2 颗**(`7×24 全分类热力图`/`复制给 AI`),
14
+ * 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页被判为短页**,页首不出页内目录;
15
+ * 两颗段名照旧各包一层带 `id` 的 `<section>`(锚点仍在,只有目录不出)。
16
+ */
17
+ import { type DistributionRowInput, type KpiCardInput, type ListRowInput } from 'base-paint/blocks';
18
+ import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
19
+ import { type PageHead } from './docPage.js';
20
+ import { type HeatRow } from './pageParts.js';
21
+ /** 「周视图」一页要的全部东西(7 个字段)。 */
22
+ export interface WeekPageData {
23
+ readonly head: PageHead;
24
+ readonly kpis: readonly KpiCardInput[];
25
+ /** 七天各一行(每行 24 格);行尾合计由调用方格式化好(`sum`)。 */
26
+ readonly rows: readonly HeatRow[];
27
+ readonly order: readonly string[];
28
+ /** 分类总览。 */
29
+ readonly distribution: readonly DistributionRowInput[];
30
+ /** 每日汇总(一行一天)。 */
31
+ readonly daily: readonly ListRowInput[];
32
+ readonly copy: ScheduleCopyAreaInput;
33
+ }
34
+ /** 出「周视图」整页。 */
35
+ export declare function renderWeekPage(data: WeekPageData): string;
36
+ //# sourceMappingURL=weekPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weekPage.d.ts","sourceRoot":"","sources":["../../src/shared/weekPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAEL,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAChE,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE/E,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,YAAY;IACZ,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkBzD"}
@@ -0,0 +1,42 @@
1
+ /** #782 · 「周视图」的**页型配方**(形状维度的唯一定义地)。
2
+ *
3
+ * 形状=人裁过的 **A · 矩阵为主**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
4
+ * 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
5
+ *
6
+ * 读数卡 → 7×24 热力矩阵(页主体)→ 图例 → 分类总览 → 每日汇总列表 → 复制区
7
+ *
8
+ * 老侧 f08「周视图」的五个必现块:**7×24 全分类热力图**=矩阵(页主体)、**分类总览**=分布行、
9
+ * **每日汇总**=列表行、**健康分**=读数卡之一、**复制 prompt 位**=复制区。
10
+ *
11
+ * **本件只认形状,不认口径**:格子取哪个分类、健康分怎么算、顺序表从哪来,都由 `query` 侧给。
12
+ *
13
+ * #891 补的**页内定位**(不动件序列):本页**小节恒 2 颗**(`7×24 全分类热力图`/`复制给 AI`),
14
+ * 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页被判为短页**,页首不出页内目录;
15
+ * 两颗段名照旧各包一层带 `id` 的 `<section>`(锚点仍在,只有目录不出)。
16
+ */
17
+ import { renderDistributionRows, renderKpiGrid, renderListRows, } from 'base-paint/blocks';
18
+ import { scheduleCopyArea } from '../render/copyArea.js';
19
+ import { assembleDocPage } from './docPage.js';
20
+ import { pageSections } from './pageNav.js';
21
+ import { categoryColor, renderHeatMatrix } from './pageParts.js';
22
+ /** 出「周视图」整页。 */
23
+ export function renderWeekPage(data) {
24
+ const { toc, body } = pageSections([
25
+ { html: renderKpiGrid(data.kpis) },
26
+ // 段名是「7×24 全分类热力图」;目录项逐字用它。
27
+ { navText: '7×24 全分类热力图', html: renderHeatMatrix(data.rows, { order: data.order, id: 'week-heat', title: '7×24 全分类热力图', legend: true }) },
28
+ // 分类总览按名上色(与矩阵同一算式):不给色就一律落 `--blue`,八行一样看不出分别。
29
+ { html: renderDistributionRows({
30
+ rows: data.distribution.map((row) => ({ ...row, color: categoryColor(row.label, data.order) })),
31
+ }) },
32
+ { html: renderListRows({ items: data.daily, emptyText: '这一周没有记录' }) },
33
+ { navText: '复制给 AI', html: scheduleCopyArea({
34
+ title: '复制给 AI',
35
+ dataActionId: 'ilife-sch-week-copy-data',
36
+ logActionId: 'ilife-sch-week-copy-log',
37
+ ...data.copy,
38
+ }) },
39
+ ]);
40
+ return assembleDocPage({ head: data.head, content: toc + body });
41
+ }
42
+ //# sourceMappingURL=weekPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weekPage.js","sourceRoot":"","sources":["../../src/shared/weekPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,sBAAsB,EAAE,aAAa,EAAE,cAAc,GAEtD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAgB/E,gBAAgB;AAChB,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACjC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClC,4BAA4B;QAC5B,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;QACzI,gDAAgD;QAChD,EAAE,IAAI,EAAE,sBAAsB,CAAC;gBAC7B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAChG,CAAC,EAAE;QACJ,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE;QACrE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC;gBAC1C,KAAK,EAAE,QAAQ;gBACf,YAAY,EAAE,0BAA0B;gBACxC,WAAW,EAAE,yBAAyB;gBACtC,GAAG,IAAI,CAAC,IAAI;aACb,CAAC,EAAE;KACL,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -40,7 +40,10 @@ export declare const SCHEDULE_ROUTES: readonly [{
40
40
  readonly order: 9;
41
41
  }, {
42
42
  readonly phrase: "初始化数据库";
43
- readonly key: "schedule.record.today";
43
+ readonly key: "schedule.help.lookup";
44
+ readonly preset: {
45
+ readonly view: "init";
46
+ };
44
47
  readonly order: 10;
45
48
  }, {
46
49
  readonly phrase: "查作息";
@@ -293,5 +296,24 @@ export declare const SCHEDULE_ROUTES: readonly [{
293
296
  readonly op: "review";
294
297
  };
295
298
  readonly order: 47;
299
+ }, {
300
+ readonly phrase: "周视图";
301
+ readonly key: "schedule.record.range";
302
+ readonly preset: {
303
+ readonly view: "week";
304
+ };
305
+ readonly order: 48;
306
+ }, {
307
+ readonly phrase: "按 ID 查记录";
308
+ readonly key: "schedule.record.detail";
309
+ readonly needs: readonly ["id"];
310
+ readonly order: 49;
311
+ }, {
312
+ readonly phrase: "首次使用";
313
+ readonly key: "schedule.help.lookup";
314
+ readonly preset: {
315
+ readonly view: "firstUse";
316
+ };
317
+ readonly order: 50;
296
318
  }];
297
319
  //# sourceMappingURL=routes.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.generated.d.ts","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDlB,CAAC"}
1
+ {"version":3,"file":"routes.generated.d.ts","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDlB,CAAC"}
@@ -10,7 +10,7 @@ export const SCHEDULE_ROUTES = [
10
10
  { phrase: '今天作息', key: 'schedule.record.today', order: 7 },
11
11
  { phrase: '查作息时间轴', key: 'schedule.record.today', order: 8 },
12
12
  { phrase: '查作息状态', key: 'schedule.record.today', order: 9 },
13
- { phrase: '初始化数据库', key: 'schedule.record.today', order: 10 },
13
+ { phrase: '初始化数据库', key: 'schedule.help.lookup', preset: { "view": "init" }, order: 10 },
14
14
  { phrase: '查作息', key: 'schedule.record.today', order: 11 },
15
15
  { phrase: '汇总作息', key: 'schedule.record.range', needs: ['start', 'end'], order: 12 },
16
16
  { phrase: '查作息范围', key: 'schedule.record.range', needs: ['start', 'end'], order: 13 },
@@ -48,5 +48,8 @@ export const SCHEDULE_ROUTES = [
48
48
  { phrase: '日程管家同步', key: 'schedule.plan.write', preset: { "op": "sync" }, order: 45 },
49
49
  { phrase: '飞书探测', key: 'schedule.plan.write', preset: { "op": "sync", "dryRun": true }, order: 46 },
50
50
  { phrase: '复盘', key: 'schedule.plan.write', preset: { "op": "review" }, order: 47 },
51
+ { phrase: '周视图', key: 'schedule.record.range', preset: { "view": "week" }, order: 48 },
52
+ { phrase: '按 ID 查记录', key: 'schedule.record.detail', needs: ['id'], order: 49 },
53
+ { phrase: '首次使用', key: 'schedule.help.lookup', preset: { "view": "firstUse" }, order: 50 },
51
54
  ];
52
55
  //# sourceMappingURL=routes.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.generated.js","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.generated.js","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,eAAO,MAAM,WAAW,EAAE,YAezB,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiG7D,eAAO,MAAM,WAAW,EAAE,YA2BzB,CAAC"}
@@ -1,24 +1,120 @@
1
1
  /** 写入与同步的处理函数(命令事实的执行一半;声明在 `./commands.ts`)。
2
2
  *
3
- * 逐字搬自 `src/cli/cmd_read.ts` 的 switch 一臂(行为零改动)。
3
+ * 逐字搬自 `src/cli/cmd_read.ts` 的 switch 一臂(行为零改动)——**#783 起这一臂多出「出页」那一半**:
4
+ * 写库之后各支出一张真页(`./writeDocs.ts` 装配,形状与件序列见该件头),回执载荷(`data`)与
5
+ * 退出码口径一行不改(顶层 `ok`/`message` 照旧,追加的分字段只多不少)。
6
+ *
7
+ * 批量导入(`records[]`,老侧 `batch-add` 的 ok/partial 语义):逐条走同一条 add 校验与写库函数,
8
+ * 单条不过不打断其余;没通过的原因在**载荷里**给原文(给 AI 看),在**页上**给中文短因(给人看)。
4
9
  */
5
- import { addRecord, amendRecord, addSummary, } from '../fetch/index.js';
10
+ import { addRecord, amendRecord, addSummary, getRecordById, } from '../fetch/index.js';
6
11
  import { parseRecordOp, validateAddInput, validateAmendInput, validateSummaryInput } from '../policy/index.js';
7
12
  import { buildRecordReceipt } from '../render/index.js';
13
+ import { amendReceiptPage, batchReceiptPage, recordResultPage, summaryReceiptPage } from './writeDocs.js';
14
+ /** 校验失败的原因 → 页上那句中文短因(库列名与命令参数名都不上屏;载荷里仍留原文给 AI)。 */
15
+ const REASON_ZH = {
16
+ POLICY_BAD_CATEGORY: '分类不在白名单',
17
+ POLICY_BAD_TIME: '起止时间不对',
18
+ POLICY_BAD_DATE: '日期不对',
19
+ POLICY_MISSING_SLOT: '缺了必填字段',
20
+ POLICY_BAD_INPUT: '字段值不对',
21
+ };
22
+ function reasonOf(error) {
23
+ const code = error?.code;
24
+ return (code !== undefined ? REASON_ZH[code] : undefined) ?? '没通过校验';
25
+ }
26
+ const cellText = (value) => (typeof value === 'string' ? value : '');
27
+ /** 批量导入:逐条校验、逐条写库,单条不过不打断(老侧 `batch-add` 的口径)。 */
28
+ function runBatch(params, handle) {
29
+ const raw = Array.isArray(params.records) ? params.records : [];
30
+ if (raw.length === 0) {
31
+ const message = '批量导入须给非空 records 数组(每条含 date/time_start/time_end/activity/category)';
32
+ return { data: { ok: false, message, items: [], total: 0, success: 0, failed: 0 }, html: '' };
33
+ }
34
+ const items = [];
35
+ for (let i = 0; i < raw.length; i += 1) {
36
+ const seq = i + 1;
37
+ const one = raw[i];
38
+ const record = typeof one === 'object' && one !== null ? one : {};
39
+ try {
40
+ const input = validateAddInput(record);
41
+ const written = addRecord(handle, input);
42
+ items.push({
43
+ seq, date: written.date, time: written.time_start + ' 至 ' + written.time_end,
44
+ activity: written.activity, category: written.category,
45
+ ok: true, result: '已写入', message: '', id: written.id,
46
+ });
47
+ }
48
+ catch (e) {
49
+ items.push({
50
+ seq,
51
+ date: cellText(record.date),
52
+ time: cellText(record.time_start) === '' || cellText(record.time_end) === ''
53
+ ? '—'
54
+ : cellText(record.time_start) + ' 至 ' + cellText(record.time_end),
55
+ activity: cellText(record.activity) === '' ? '—' : cellText(record.activity),
56
+ category: cellText(record.category) === '' ? '—' : cellText(record.category),
57
+ ok: false, result: reasonOf(e), message: e.message ?? String(e), id: null,
58
+ });
59
+ }
60
+ }
61
+ const done = items.filter((it) => it.ok).length;
62
+ const failed = items.length - done;
63
+ const dates = [...new Set(items.map((it) => it.date).filter((d) => d !== ''))].sort();
64
+ const dateText = dates.length === 0
65
+ ? '—'
66
+ : (dates.length === 1 ? dates[0] : dates[0] + ' 至 ' + dates[dates.length - 1]);
67
+ const rows = items.map((it) => ({
68
+ seq: it.seq, time: it.time, activity: it.activity, category: it.category, result: it.result, ok: it.ok,
69
+ }));
70
+ const message = failed === 0
71
+ ? '已批量写入 ' + items.length + ' 条(全部成功)'
72
+ : '已批量写入 ' + done + ' 条,另有 ' + failed + ' 条没通过校验(见 items[] 的 message)';
73
+ return {
74
+ data: {
75
+ ok: failed === 0,
76
+ message,
77
+ total: items.length,
78
+ success: done,
79
+ failed,
80
+ date: dateText,
81
+ items: items.map((it) => ({
82
+ seq: it.seq, ok: it.ok, id: it.id, date: it.date, time: it.time,
83
+ activity: it.activity, category: it.category,
84
+ ...(it.ok ? {} : { reason: it.result, message: it.message }),
85
+ })),
86
+ },
87
+ html: batchReceiptPage({ date: dateText, rows }),
88
+ ...(failed === 0 ? {} : { exitCode: 1 }),
89
+ };
90
+ }
8
91
  export const writeRecord = (params, handle) => {
92
+ // 批量那一支先认(`records[]` 出现即批量;op 缺省仍是 add,见 `parseRecordOp`)。
93
+ if (Array.isArray(params.records))
94
+ return runBatch(params, handle);
9
95
  const op = parseRecordOp(params);
10
96
  if (op === 'add') {
11
97
  const input = validateAddInput(params);
12
98
  const r = addRecord(handle, input);
13
- return { data: buildRecordReceipt('已记一条:' + r.id + '(' + r.date + ' ' + r.time_start + '~' + r.time_end + ' ' + r.category + ')'), html: '' };
99
+ return {
100
+ data: buildRecordReceipt('已记一条:' + r.id + '(' + r.date + ' ' + r.time_start + '~' + r.time_end + ' ' + r.category + ')'),
101
+ html: recordResultPage(handle, r),
102
+ };
14
103
  }
15
104
  if (op === 'amend') {
16
105
  const { id, patch } = validateAmendInput(params);
106
+ const before = getRecordById(handle, id);
17
107
  const r = amendRecord(handle, id, patch);
18
- return { data: buildRecordReceipt('已修正:' + r.id + '(edit_count=' + r.edit_count + ')'), html: '' };
108
+ return {
109
+ data: buildRecordReceipt('已修正:' + r.id + '(edit_count=' + r.edit_count + ')'),
110
+ html: amendReceiptPage(before, r, Object.keys(patch)),
111
+ };
19
112
  }
20
113
  const s = validateSummaryInput(params);
21
114
  addSummary(handle, s.date, s.category, s.totalMinutes);
22
- return { data: buildRecordReceipt('已写摘要:' + s.date + ' ' + s.category + '=' + s.totalMinutes + '分钟'), html: '' };
115
+ return {
116
+ data: buildRecordReceipt('已写摘要:' + s.date + ' ' + s.category + '=' + s.totalMinutes + '分钟'),
117
+ html: summaryReceiptPage(handle, s),
118
+ };
23
119
  };
24
120
  //# sourceMappingURL=handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,SAAS,EAAE,WAAW,EAAE,UAAU,GACnC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,CAAC,MAAM,WAAW,GAAiB,CAAC,MAAM,EAAE,MAAkB,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAChJ,CAAC;IACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,KAAgC,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,cAAc,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACvD,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnH,CAAC,CAAC"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ScheduleDb, ScheduleRecord } from '../fetch/db.js';
2
+ /** 「记作息结果」整页:状态总览 + 全天时间轴 + 过去几小时推断回溯(老侧三件套),只记一级时加提示。 */
3
+ export declare function recordResultPage(handle: ScheduleDb, record: ScheduleRecord, now?: Date): string;
4
+ /** 「修正作息回执」整页:蓝调 diff + 多字段前后对照 + 这条记录现在的样子。 */
5
+ export declare function amendReceiptPage(before: ScheduleRecord, after: ScheduleRecord, patchKeys: readonly string[], now?: Date): string;
6
+ /** 批量里的一条结果(口径见 `handlers.ts`;原因一律中文,库列名与命令参数名不上屏)。 */
7
+ export interface BatchRow {
8
+ readonly seq: number;
9
+ readonly time: string;
10
+ readonly activity: string;
11
+ readonly category: string;
12
+ /** 写入成功那一格写「已写入」,没通过的写中文原因。 */
13
+ readonly result: string;
14
+ readonly ok: boolean;
15
+ }
16
+ /** 「批量导入回执」整页:收到条数/写入成功/没通过 + 逐条结果。 */
17
+ export declare function batchReceiptPage(input: {
18
+ readonly date: string;
19
+ readonly rows: readonly BatchRow[];
20
+ }): string;
21
+ /** 「写作息摘要回执」整页:这次写了什么 + 当日这一支的现状(老侧这条无产物,新给一份真页)。 */
22
+ export declare function summaryReceiptPage(handle: ScheduleDb, summary: {
23
+ date: string;
24
+ category: string;
25
+ totalMinutes: number;
26
+ }): string;
27
+ //# sourceMappingURL=writeDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeDocs.d.ts","sourceRoot":"","sources":["../../src/write/writeDocs.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA+HjE,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAoF3G;AAWD,gDAAgD;AAChD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,GAAE,IAAiB,GAClG,MAAM,CAqER;AAID,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;CACpC,GAAG,MAAM,CAkET;AAID,qDAAqD;AACrD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpF,MAAM,CA4CR"}