skill-schedule 0.3.2 → 0.3.12

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 (186) 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/fetch/feishu.d.ts +6 -0
  32. package/dist/fetch/feishu.d.ts.map +1 -1
  33. package/dist/fetch/feishu.js +18 -7
  34. package/dist/fetch/feishu.js.map +1 -1
  35. package/dist/fetch/index.d.ts +1 -1
  36. package/dist/fetch/index.d.ts.map +1 -1
  37. package/dist/fetch/index.js +1 -1
  38. package/dist/fetch/index.js.map +1 -1
  39. package/dist/fetch/paths.d.ts +17 -4
  40. package/dist/fetch/paths.d.ts.map +1 -1
  41. package/dist/fetch/paths.js +25 -7
  42. package/dist/fetch/paths.js.map +1 -1
  43. package/dist/health.d.ts.map +1 -1
  44. package/dist/health.js +12 -8
  45. package/dist/health.js.map +1 -1
  46. package/dist/help/index.d.ts +1 -0
  47. package/dist/help/index.d.ts.map +1 -1
  48. package/dist/help/index.js +3 -0
  49. package/dist/help/index.js.map +1 -1
  50. package/dist/plan/discussDocs.d.ts +8 -0
  51. package/dist/plan/discussDocs.d.ts.map +1 -0
  52. package/dist/plan/discussDocs.js +321 -0
  53. package/dist/plan/discussDocs.js.map +1 -0
  54. package/dist/plan/feishuDocs.d.ts +19 -0
  55. package/dist/plan/feishuDocs.d.ts.map +1 -0
  56. package/dist/plan/feishuDocs.js +257 -0
  57. package/dist/plan/feishuDocs.js.map +1 -0
  58. package/dist/plan/handlers.d.ts.map +1 -1
  59. package/dist/plan/handlers.js +107 -3
  60. package/dist/plan/handlers.js.map +1 -1
  61. package/dist/plan/index.d.ts +2 -0
  62. package/dist/plan/index.d.ts.map +1 -1
  63. package/dist/plan/index.js +16 -9
  64. package/dist/plan/index.js.map +1 -1
  65. package/dist/plan/iso.d.ts +2 -0
  66. package/dist/plan/iso.d.ts.map +1 -1
  67. package/dist/plan/iso.js +6 -2
  68. package/dist/plan/iso.js.map +1 -1
  69. package/dist/plan/planDocs.d.ts +47 -0
  70. package/dist/plan/planDocs.d.ts.map +1 -0
  71. package/dist/plan/planDocs.js +159 -0
  72. package/dist/plan/planDocs.js.map +1 -0
  73. package/dist/plan/planParts.d.ts +38 -0
  74. package/dist/plan/planParts.d.ts.map +1 -0
  75. package/dist/plan/planParts.js +96 -0
  76. package/dist/plan/planParts.js.map +1 -0
  77. package/dist/plan/probe.d.ts +28 -0
  78. package/dist/plan/probe.d.ts.map +1 -0
  79. package/dist/plan/probe.js +114 -0
  80. package/dist/plan/probe.js.map +1 -0
  81. package/dist/plan/receipt.d.ts +12 -0
  82. package/dist/plan/receipt.d.ts.map +1 -1
  83. package/dist/plan/receipt.js +17 -0
  84. package/dist/plan/receipt.js.map +1 -1
  85. package/dist/plan/receiptDocs.d.ts +26 -0
  86. package/dist/plan/receiptDocs.d.ts.map +1 -0
  87. package/dist/plan/receiptDocs.js +341 -0
  88. package/dist/plan/receiptDocs.js.map +1 -0
  89. package/dist/plan/replayDocs.d.ts +165 -0
  90. package/dist/plan/replayDocs.d.ts.map +1 -0
  91. package/dist/plan/replayDocs.js +226 -0
  92. package/dist/plan/replayDocs.js.map +1 -0
  93. package/dist/plan/replaySections.d.ts +5 -0
  94. package/dist/plan/replaySections.d.ts.map +1 -0
  95. package/dist/plan/replaySections.js +471 -0
  96. package/dist/plan/replaySections.js.map +1 -0
  97. package/dist/plan/reviewDocs.d.ts +4 -0
  98. package/dist/plan/reviewDocs.d.ts.map +1 -0
  99. package/dist/plan/reviewDocs.js +130 -0
  100. package/dist/plan/reviewDocs.js.map +1 -0
  101. package/dist/plan/sync.d.ts.map +1 -1
  102. package/dist/plan/sync.js +5 -0
  103. package/dist/plan/sync.js.map +1 -1
  104. package/dist/policy/index.d.ts +1 -1
  105. package/dist/policy/index.d.ts.map +1 -1
  106. package/dist/policy/index.js +1 -1
  107. package/dist/policy/index.js.map +1 -1
  108. package/dist/policy/plan.d.ts +8 -0
  109. package/dist/policy/plan.d.ts.map +1 -1
  110. package/dist/policy/plan.js +20 -0
  111. package/dist/policy/plan.js.map +1 -1
  112. package/dist/query/handlers.d.ts +3 -0
  113. package/dist/query/handlers.d.ts.map +1 -1
  114. package/dist/query/handlers.js +86 -12
  115. package/dist/query/handlers.js.map +1 -1
  116. package/dist/query/queryDocs.d.ts +64 -0
  117. package/dist/query/queryDocs.d.ts.map +1 -0
  118. package/dist/query/queryDocs.js +554 -0
  119. package/dist/query/queryDocs.js.map +1 -0
  120. package/dist/query/routes.d.ts +11 -1
  121. package/dist/query/routes.d.ts.map +1 -1
  122. package/dist/query/routes.js +5 -1
  123. package/dist/query/routes.js.map +1 -1
  124. package/dist/render/copyArea.d.ts +61 -0
  125. package/dist/render/copyArea.d.ts.map +1 -0
  126. package/dist/render/copyArea.js +80 -0
  127. package/dist/render/copyArea.js.map +1 -0
  128. package/dist/render/html.d.ts.map +1 -1
  129. package/dist/render/html.js +3 -1
  130. package/dist/render/html.js.map +1 -1
  131. package/dist/render/index.d.ts +3 -0
  132. package/dist/render/index.d.ts.map +1 -1
  133. package/dist/render/index.js +2 -0
  134. package/dist/render/index.js.map +1 -1
  135. package/dist/shared/dayPage.d.ts +67 -0
  136. package/dist/shared/dayPage.d.ts.map +1 -0
  137. package/dist/shared/dayPage.js +92 -0
  138. package/dist/shared/dayPage.js.map +1 -0
  139. package/dist/shared/detailPage.d.ts +55 -0
  140. package/dist/shared/detailPage.d.ts.map +1 -0
  141. package/dist/shared/detailPage.js +65 -0
  142. package/dist/shared/detailPage.js.map +1 -0
  143. package/dist/shared/docPage.d.ts +22 -0
  144. package/dist/shared/docPage.d.ts.map +1 -0
  145. package/dist/shared/docPage.js +52 -0
  146. package/dist/shared/docPage.js.map +1 -0
  147. package/dist/shared/overviewPage.d.ts +52 -0
  148. package/dist/shared/overviewPage.d.ts.map +1 -0
  149. package/dist/shared/overviewPage.js +65 -0
  150. package/dist/shared/overviewPage.js.map +1 -0
  151. package/dist/shared/pageNav.d.ts +24 -0
  152. package/dist/shared/pageNav.d.ts.map +1 -0
  153. package/dist/shared/pageNav.js +70 -0
  154. package/dist/shared/pageNav.js.map +1 -0
  155. package/dist/shared/pageParts.d.ts +45 -0
  156. package/dist/shared/pageParts.d.ts.map +1 -0
  157. package/dist/shared/pageParts.js +154 -0
  158. package/dist/shared/pageParts.js.map +1 -0
  159. package/dist/shared/planPage.d.ts +49 -0
  160. package/dist/shared/planPage.d.ts.map +1 -0
  161. package/dist/shared/planPage.js +48 -0
  162. package/dist/shared/planPage.js.map +1 -0
  163. package/dist/shared/rangePage.d.ts +44 -0
  164. package/dist/shared/rangePage.d.ts.map +1 -0
  165. package/dist/shared/rangePage.js +50 -0
  166. package/dist/shared/rangePage.js.map +1 -0
  167. package/dist/shared/weekPage.d.ts +36 -0
  168. package/dist/shared/weekPage.d.ts.map +1 -0
  169. package/dist/shared/weekPage.js +42 -0
  170. package/dist/shared/weekPage.js.map +1 -0
  171. package/dist/triggers/routes.generated.d.ts +23 -1
  172. package/dist/triggers/routes.generated.d.ts.map +1 -1
  173. package/dist/triggers/routes.generated.js +4 -1
  174. package/dist/triggers/routes.generated.js.map +1 -1
  175. package/dist/write/handlers.d.ts.map +1 -1
  176. package/dist/write/handlers.js +101 -5
  177. package/dist/write/handlers.js.map +1 -1
  178. package/dist/write/writeDocs.d.ts +27 -0
  179. package/dist/write/writeDocs.d.ts.map +1 -0
  180. package/dist/write/writeDocs.js +423 -0
  181. package/dist/write/writeDocs.js.map +1 -0
  182. package/dist/write/writeParts.d.ts +54 -0
  183. package/dist/write/writeParts.d.ts.map +1 -0
  184. package/dist/write/writeParts.js +117 -0
  185. package/dist/write/writeParts.js.map +1 -0
  186. package/package.json +3 -3
@@ -0,0 +1,471 @@
1
+ /** #788 · 「复盘」一体页的**区块装配**(老侧 `schedule_replay.html` 的四档区块路由,逐档照搬)。
2
+ *
3
+ * 档与区块的对应(口径在 `replayDocs.ts` 的件头,这里只摆件):
4
+ *
5
+ * day 计划 vs 实际对照 → 实际作息 → 计划执行 → 跨域对比 → 健康分 → 亮点与问题(缺计划另有补齐引导)
6
+ * week 7 维趋势 → 24h × N 天热力图 → 健康分 → 亮点与问题
7
+ * month 月度聚合 → 环比对比 → 目标达成 → 健康分 → 亮点与问题
8
+ * 通用 实际作息 → 计划执行 → 跨域对比 → 亮点与问题
9
+ * 全档 4 卡读数 + 结论条 + 页尾「复盘到明天的衔接」+ 复制区
10
+ *
11
+ * **样式纪律(本票的代码层窄判据)**:本件一行 CSS 都不写(样式只住族级样式件 `planParts.ts`),
12
+ * 件全靠公共层区块;段名走 `planParts.renderSectionTitle`(它复用公共层段名类,不新造)。
13
+ *
14
+ * **页上文案纪律**:不出现命令键、库列名、参数名、票号;并列关系用表格列与区块表达,不拿
15
+ * `·`/`;`/`|`/`、`/`~` 顶替(那是分隔符门 #516 点名的那几种);范围一律写「至」。
16
+ */
17
+ import { renderCaliberLine, renderChartBlock, renderConclusionBar, renderDataTable, renderDisclosure, renderDistributionRows, renderFeedbackBlock, renderKpiGrid, renderListRows, renderPreBlock, } from 'base-paint/blocks';
18
+ import { renderFactStrip } from 'base-paint';
19
+ import { LEVEL1_WHITELIST, completionLabelOf, fmtDur, fmtDurShort, fmtPct, l1Of } from '../policy/index.js';
20
+ import { scheduleCopyArea } from '../render/copyArea.js';
21
+ import { assembleDocPage } from '../shared/docPage.js';
22
+ import { pageSections } from '../shared/pageNav.js';
23
+ import { categoryColor, hourCellsOf, renderHeatMatrix, renderHourBand } from '../shared/pageParts.js';
24
+ import { minutesOfDayEnd } from './planDocs.js';
25
+ import { HEAT_DAYS_CAP, LIST_ROWS_CAP, PAIR_ROWS_CAP, replayData } from './replayDocs.js';
26
+ import { renderGoalCards, renderSectionTitle } from './planParts.js';
27
+ import { planCopyArea } from './receipt.js';
28
+ const EYEBROW = '作息管家 日程与计划';
29
+ /** 一级分类的权威顺序(配色与图例都照它),定义只此一处:`policy` 的白名单。 */
30
+ const L1_ORDER = [...LEVEL1_WHITELIST];
31
+ /** 健康分那七维的顺序(= `HEALTH_TARGETS` 的键序,见 `policy`)。 */
32
+ const DIM_ORDER = ['维持', '健康', '工作', '学习', '调整', '日常', '投入'];
33
+ const WEEKDAYS = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
34
+ const GRAN_CN = { day: '今日', week: '本周', month: '本月', range: '区间' };
35
+ const span = (start, end) => start + ' 至 ' + end;
36
+ const weekdayOf = (date) => WEEKDAYS[(new Date(date + 'T00:00:00').getDay() + 6) % 7];
37
+ const pctText = (value) => (value === null ? '—' : String(value) + '%');
38
+ const minutesOf = minutesOfDayEnd;
39
+ /* ─────────────────────────── 各区块 ─────────────────────────── */
40
+ /** 计划 vs 实际对照(老侧 day 档的第一段):逐条计划一行,计划时长与实际时长并排。
41
+ * 通用档(跨了月)只印头几条:逐条那一段是给单日/短区间看的,长区间的账走聚合那几块。 */
42
+ function segPlanActual(data, withDate, capped) {
43
+ const cap = capped ? PAIR_ROWS_CAP : data.cross.pairs.length;
44
+ const rows = data.cross.pairs.slice(0, cap).map((p) => {
45
+ const sign = p.deltaMinutes >= 0 ? '+' : '−';
46
+ return {
47
+ ...(withDate ? { date: p.date.slice(5) } : {}),
48
+ time: p.time,
49
+ title: p.title,
50
+ plan: fmtDurShort(p.planMinutes),
51
+ actual: fmtDurShort(p.actualMinutes),
52
+ delta: sign + fmtDurShort(Math.abs(p.deltaMinutes)),
53
+ completion: completionLabelOf(p.completion),
54
+ };
55
+ });
56
+ const columns = [
57
+ ...(withDate ? [{ key: 'date', label: '日期' }] : []),
58
+ { key: 'time', label: '时段' },
59
+ { key: 'title', label: '计划' },
60
+ { key: 'plan', label: '计划时长' },
61
+ { key: 'actual', label: '实际时长' },
62
+ { key: 'delta', label: '差值' },
63
+ { key: 'completion', label: '完成状态' },
64
+ ];
65
+ const rest = data.cross.pairs.length - rows.length;
66
+ return [{ navText: '计划 vs 实际对照', html: renderSectionTitle('计划 vs 实际对照')
67
+ + renderDataTable({
68
+ columns, rows,
69
+ emptyText: data.plans.length === 0
70
+ ? '这一段没有日程计划,无从对照'
71
+ : '这一段排了计划,但每一条的时段里都没有作息记录',
72
+ })
73
+ + (rest <= 0 ? '' : '<p class="sch-pl-note">计划与记录相交的一共 ' + String(data.cross.pairs.length)
74
+ + ' 条,这里印的是头 ' + String(rows.length) + ' 条,另有 ' + String(rest) + ' 条。</p>')
75
+ + renderCaliberLine('实际时长按记录与计划时段相交的部分累加,同一时段记了多条就一起算进去') }];
76
+ }
77
+ /** 实际作息(老侧 day/month/通用档的第一段):分类聚合分布行;单日另给 24 小时色带。
78
+ * #891:这一段里有**两颗**段名(`实际作息`/`这一天的 24 小时`),故拆成两小节,
79
+ * 另加第三小节 `分类聚合`——一节一条目录条目,件序列与顺序一处未动。 */
80
+ function segRecord(data) {
81
+ const ranked = Object.keys(data.byL1).sort((a, b) => (data.byL1[b] ?? 0) - (data.byL1[a] ?? 0));
82
+ const distribution = ranked.map((name) => ({
83
+ label: name,
84
+ value: fmtDurShort(data.byL1[name]),
85
+ pct: fmtPct(data.byL1[name], data.totalMinutes),
86
+ color: categoryColor(name, L1_ORDER),
87
+ }));
88
+ const band = data.win.effective !== 'day' ? '' : renderHourBand(hourCellsOf(data.records.map((r) => ({
89
+ start: minutesOf(r.time_start), end: minutesOf(r.time_end), key: l1Of(r.category),
90
+ }))), { order: L1_ORDER, title: '这一天的 24 小时', height: 120 });
91
+ return [
92
+ { navText: '实际作息', html: renderSectionTitle('实际作息') },
93
+ // 段名是「这一天的 24 小时」;目录项逐字用它。
94
+ { navText: band === '' ? '' : '这一天的 24 小时', html: band },
95
+ { navText: '分类聚合', html: renderSectionTitle('分类聚合') + renderDistributionRows({ rows: distribution }) },
96
+ ];
97
+ }
98
+ /** 7 维趋势(老侧 week/通用档):一维一条折线,一天一个点。 */
99
+ function segTrend(data) {
100
+ const days = data.days.filter((d) => d.records.length > 0);
101
+ if (days.length < 2)
102
+ return [];
103
+ const labels = days.map((d) => d.date.slice(5));
104
+ return [{ navText: '7 维趋势', html: renderChartBlock({
105
+ kind: 'line',
106
+ title: '7 维趋势',
107
+ input: {
108
+ items: labels.map((label) => ({ label, value: 0 })),
109
+ options: {
110
+ series: DIM_ORDER.map((dim) => ({
111
+ name: dim,
112
+ color: categoryColor(dim, L1_ORDER),
113
+ items: days.map((d, i) => ({ label: labels[i], value: d.byL1[dim] ?? 0 })),
114
+ })),
115
+ legend: true, height: 190, labels: 'select', showValues: false,
116
+ },
117
+ },
118
+ }) }];
119
+ }
120
+ /** 24h × N 天热力图(老侧 week/通用档):一行一天,行尾当日合计。
121
+ * 通用档只印最近那几天(上界见 `replayDocs.HEAT_DAYS_CAP`,口径行里写明)。 */
122
+ function segHeat(data) {
123
+ const all = data.days;
124
+ const days = data.win.effective === 'week' ? all : all.filter((d) => d.records.length > 0);
125
+ if (days.length === 0)
126
+ return [];
127
+ const capped = days.length > HEAT_DAYS_CAP ? days.slice(days.length - HEAT_DAYS_CAP) : days;
128
+ const rows = capped.map((d) => ({
129
+ label: weekdayOf(d.date),
130
+ date: d.date,
131
+ cells: hourCellsOf(d.records.map((r) => ({
132
+ start: minutesOf(r.time_start), end: minutesOf(r.time_end), key: l1Of(r.category),
133
+ }))),
134
+ sum: d.minutes > 0 ? fmtDurShort(d.minutes) : '无记录',
135
+ }));
136
+ // 段名是「24h × N 天热力图」;目录项逐字用它。
137
+ return [{ navText: '24h × N 天热力图', html: renderHeatMatrix(rows, {
138
+ order: L1_ORDER, id: 'replay-heat', title: '24h × N 天热力图', legend: true, withTotal: true,
139
+ }) + (capped.length === days.length ? ''
140
+ : renderCaliberLine('这一段跨了 ' + String(days.length) + ' 天,热力图只印最近 ' + String(capped.length)
141
+ + ' 天,整段的读数看上面的分类聚合与 7 维趋势')) }];
142
+ }
143
+ /** 计划执行(老侧 day/月/通用档):六态分布 + 按一级分类拆解。 */
144
+ function segPlan(data) {
145
+ const counts = data.completionCounts.map((c) => ({ state: completionLabelOf(c.state), count: String(c.count) }));
146
+ const byCat = data.completionByL1.map((c) => ({
147
+ name: c.name, total: String(c.total), done: String(c.done), rate: pctText(c.rate),
148
+ }));
149
+ return [{ navText: '计划执行', html: renderSectionTitle('计划执行')
150
+ + '<p class="sch-pl-note">这一段排了 ' + String(data.plans.length) + ' 条计划,其中 '
151
+ + String(data.marked) + ' 条标过完成状态,完成率 ' + pctText(data.completionRate)
152
+ + '(分母是标过的那些,还没标的不算输)。</p>'
153
+ + renderDataTable({
154
+ caption: '完成状态分布',
155
+ columns: [{ key: 'state', label: '完成状态' }, { key: 'count', label: '件数', align: 'right' }],
156
+ rows: counts,
157
+ emptyText: '这一段没有计划',
158
+ })
159
+ + renderDataTable({
160
+ caption: '按分类拆解',
161
+ columns: [
162
+ { key: 'name', label: '分类' }, { key: 'total', label: '件数', align: 'right' },
163
+ { key: 'done', label: '已完成', align: 'right' }, { key: 'rate', label: '完成率', align: 'right' },
164
+ ],
165
+ rows: byCat,
166
+ emptyText: '这一段没有计划',
167
+ }) }];
168
+ }
169
+ /** 跨域对比(老侧 day/通用档):未执行、超计划、计划外记录三张清单。
170
+ * `aggregate`(通用档跨了月)=逐条那几张只给头几条并写明另有几条,计划外那一张改成按一级分类聚合。 */
171
+ function segCross(data, withDate, aggregate) {
172
+ const tag = (date) => (withDate ? date.slice(5) + ' ' : '');
173
+ const limited = (rows) => (aggregate ? { rows: rows.slice(0, LIST_ROWS_CAP), rest: Math.max(0, rows.length - LIST_ROWS_CAP) } : { rows, rest: 0 });
174
+ const u = limited(data.cross.unexecuted);
175
+ const o = limited(data.cross.overrun);
176
+ const unexecuted = u.rows.map((p) => ({
177
+ left: tag(p.date) + p.time_start + ' 至 ' + p.time_end,
178
+ main: p.title,
179
+ right: p.completion === null || p.completion === '' ? '未复盘' : completionLabelOf(p.completion),
180
+ }));
181
+ const overrun = o.rows.map((x) => ({
182
+ left: tag(x.date),
183
+ main: x.title,
184
+ right: '时段外多花了 ' + fmtDurShort(x.spillMinutes),
185
+ }));
186
+ const unexpectedRows = data.cross.unexpected.map((r) => ({
187
+ left: tag(r.date) + r.time_start + ' 至 ' + r.time_end,
188
+ main: r.activity,
189
+ right: l1Of(r.category),
190
+ }));
191
+ const byCat = {};
192
+ for (const r of data.cross.unexpected)
193
+ byCat[l1Of(r.category)] = (byCat[l1Of(r.category)] ?? 0) + 1;
194
+ const ranked = Object.keys(byCat).sort((a, b) => byCat[b] - byCat[a]);
195
+ const unexpectedHtml = aggregate
196
+ ? renderDistributionRows({
197
+ rows: ranked.map((name) => ({
198
+ label: name, value: String(byCat[name]) + ' 块', pct: fmtPct(byCat[name], data.cross.unexpected.length),
199
+ color: categoryColor(name, L1_ORDER),
200
+ })),
201
+ }) + (data.cross.unexpected.length === 0 ? '' : '<p class="sch-pl-note">计划外记录一共 '
202
+ + String(data.cross.unexpected.length) + ' 块,这里按一级分类聚着看,另有 '
203
+ + String(limited(data.cross.unexpected).rest) + ' 块没逐条印。</p>')
204
+ : renderListRows({ items: limited(unexpectedRows).rows, emptyText: '这一段的记录都落在某条计划的时段里' });
205
+ const restLine = (n) => (n === 0 ? '' : '<p class="sch-pl-note">另有 ' + String(n) + ' 条没印出来。</p>');
206
+ return [{ navText: '跨域对比', html: renderSectionTitle('跨域对比')
207
+ + renderCaliberLine('计划外=这天没有任何计划与它时段相交的记录。溢出=与计划搭边的记录里,落在计划时段之外的那部分合计到了计划时长的两成以上。')
208
+ + renderDisclosure({
209
+ title: '没做成的计划',
210
+ open: true,
211
+ contentHtml: renderListRows({ items: unexecuted, emptyText: '这一段没有「部分完成」与「未完成」的计划' }) + restLine(u.rest),
212
+ })
213
+ + renderDisclosure({
214
+ title: '时段溢出',
215
+ open: true,
216
+ contentHtml: renderListRows({ items: overrun, emptyText: '这一段没有明显溢出计划时段的记录' }) + restLine(o.rest),
217
+ })
218
+ + renderDisclosure({
219
+ title: '计划之外的记录',
220
+ open: true,
221
+ contentHtml: unexpectedHtml,
222
+ }) }];
223
+ }
224
+ /** 健康分(全档):单日给当天分,多日给均值与逐日曲线,七维明细逐条给。
225
+ * #891:这一段里有**两颗**段名(`健康分`/逐日曲线那颗 `逐日健康分`),故拆成两小节。 */
226
+ function segHealth(data) {
227
+ const single = data.win.effective === 'day';
228
+ const dims = DIM_ORDER.map((dim) => ({
229
+ label: dim,
230
+ value: String(data.dimScores[dim] ?? 0),
231
+ pct: data.dimScores[dim] ?? 0,
232
+ color: categoryColor(dim, L1_ORDER),
233
+ }));
234
+ const series = data.healthSeries;
235
+ const chart = series.length < 2 ? '' : renderChartBlock({
236
+ kind: 'line',
237
+ title: '逐日健康分',
238
+ input: {
239
+ items: series.map((h) => ({ label: h.date.slice(5), value: h.score })),
240
+ options: { height: 170, labels: 'select', showValues: false },
241
+ },
242
+ });
243
+ return [
244
+ { navText: '健康分', html: renderSectionTitle('健康分')
245
+ + renderFactStrip({
246
+ items: single
247
+ ? [{ label: '这一天', value: String(data.healthScore) }]
248
+ : [
249
+ { label: '均值', value: String(data.healthMean) },
250
+ { label: '有记录的天数', value: String(data.activeDays) + ' 天' },
251
+ { label: '最高的一天', value: series.length === 0 ? '—' : String(Math.max(...series.map((h) => h.score))) },
252
+ { label: '最低的一天', value: series.length === 0 ? '—' : String(Math.min(...series.map((h) => h.score))) },
253
+ ],
254
+ })
255
+ + renderCaliberLine('七个维度各自按目标时长给分再取均(创作不参评),单日与整段都是这一条算式')
256
+ + renderDistributionRows({ rows: dims }) },
257
+ { navText: chart === '' ? '' : '逐日健康分', html: chart },
258
+ ];
259
+ }
260
+ /** 环比对比(老侧 month 档):本月与上月同期逐分类并排。 */
261
+ function segMonthCompare(data) {
262
+ const rows = data.monthCompare.map((m) => ({
263
+ name: m.name,
264
+ cur: fmtDurShort(m.cur),
265
+ prev: fmtDurShort(m.prev),
266
+ delta: m.deltaPct === null ? '上月没有' : (m.deltaPct >= 0 ? '+' : '−') + String(Math.abs(m.deltaPct)) + '%',
267
+ }));
268
+ const rate = data.monthRateCompare;
269
+ return [{ navText: '环比对比', html: renderSectionTitle('环比对比')
270
+ + '<p class="sch-pl-note">对照窗口是 ' + span(data.prevSpan.start, data.prevSpan.end)
271
+ + '(起止各往前挪一个自然月)。</p>'
272
+ + renderDataTable({
273
+ columns: [
274
+ { key: 'name', label: '分类' }, { key: 'cur', label: '本月', align: 'right' },
275
+ { key: 'prev', label: '上月同期', align: 'right' }, { key: 'delta', label: '环比', align: 'right' },
276
+ ],
277
+ rows,
278
+ emptyText: '本月与上月同期都没有记录',
279
+ })
280
+ + (rate === null ? '' : '<p class="sch-pl-note">计划完成率:本月 ' + String(rate.cur) + '%,上月同期 '
281
+ + String(rate.prev) + '%,差 ' + (rate.deltaPct >= 0 ? '+' : '−') + String(Math.abs(rate.deltaPct)) + ' 个百分点。</p>') }];
282
+ }
283
+ /** 目标达成(老侧 month 档):完成率、维持(睡眠)占比、记录覆盖三格。 */
284
+ function segGoals(data) {
285
+ const maintain = data.byL1['维持'] ?? 0;
286
+ const lastDay = data.win.end;
287
+ return [{ navText: '目标达成', html: renderSectionTitle('目标达成')
288
+ + renderGoalCards([
289
+ {
290
+ label: '计划完成率',
291
+ value: pctText(data.completionRate),
292
+ hint: '已完成 ' + String(data.plans.filter((p) => p.completion === '已完成').length) + ' 条,这一段一共排了 '
293
+ + String(data.plans.length) + ' 条,标过完成状态的有 ' + String(data.marked) + ' 条',
294
+ },
295
+ {
296
+ label: '维持占比',
297
+ value: String(fmtPct(maintain, data.totalMinutes)) + '%',
298
+ hint: '维持(睡眠与起居那一类)共 ' + fmtDur(maintain) + ',目标是一天 10 小时',
299
+ },
300
+ {
301
+ label: '记录覆盖',
302
+ value: String(data.activeDays) + ' 天',
303
+ hint: '本月至 ' + lastDay + ' 一共有记录的天数,日历天数是 ' + String(data.win.days) + ' 天',
304
+ },
305
+ {
306
+ label: '健康分',
307
+ value: String(data.healthScore),
308
+ hint: '整段按七个维度取均,逐日曲线在下面那一段',
309
+ },
310
+ ]) }];
311
+ }
312
+ /** 亮点与问题(老侧那一段 AI 洞察的位置):拿前一段等长区间做对照,红黄逐条点名。
313
+ * #891:这一段里有**两颗**段名(`亮点与问题`/`与上一段比`),故拆成两小节。 */
314
+ function segInsights(data) {
315
+ const red = data.anomalies.filter((a) => a.level === 'red');
316
+ const yellow = data.anomalies.filter((a) => a.level === 'yellow');
317
+ const line = (a) => {
318
+ const arrow = a.deltaPct >= 0 ? '多了' : '少了';
319
+ const pct = String(Math.abs(a.deltaPct));
320
+ return a.dim + ' ' + arrow + ' ' + pct + '%(上一段 ' + fmtDurShort(a.prev) + ',这一段 ' + fmtDurShort(a.cur) + ')';
321
+ };
322
+ const none = data.anomalies.length === 0;
323
+ return [
324
+ { navText: '亮点与问题', html: renderSectionTitle('亮点与问题') },
325
+ { navText: '与上一段比', html: renderFeedbackBlock({
326
+ title: '与上一段比',
327
+ toast: none
328
+ ? {
329
+ icon: 'ok',
330
+ msg: '对照 ' + span(data.prevSpan.start, data.prevSpan.end)
331
+ + ',这一段各维度的变化都在平常波动范围内(不到 10%)。',
332
+ }
333
+ : {
334
+ icon: red.length > 0 ? 'warn' : 'info',
335
+ msg: '对照 ' + span(data.prevSpan.start, data.prevSpan.end) + ':' + String(red.length)
336
+ + ' 处变化超过 20%,' + String(yellow.length) + ' 处在 10% 到 20% 之间。',
337
+ lines: [...red, ...yellow].slice(0, 6).map(line),
338
+ },
339
+ staticNotice: true,
340
+ }) },
341
+ ];
342
+ }
343
+ /** 缺计划补齐引导(老侧 day 档):这一天没有计划可对照时给这一块,**不降级**成一句空话。 */
344
+ function segPlanGuide(data) {
345
+ if (data.win.effective !== 'day' || data.plans.length > 0)
346
+ return [];
347
+ return [{ navText: '缺计划补齐引导', html: renderSectionTitle('缺计划补齐引导')
348
+ + renderFeedbackBlock({
349
+ title: '这一天还没有计划',
350
+ toast: {
351
+ icon: 'info',
352
+ msg: '这一天没有日程计划,所以「计划 vs 实际对照」没有可比的对象。先把这一天的计划排出来,再回来看这一页。',
353
+ },
354
+ staticNotice: true,
355
+ })
356
+ + renderPreBlock({
357
+ label: '先排计划就说这一句',
358
+ command: '商量一下 ' + data.win.start + ' 这一天的计划',
359
+ actionId: 'ilife-sch-replay-copy-plan',
360
+ copyLabel: '复制这句话',
361
+ }) }];
362
+ }
363
+ /** 页尾那一段(全档):复盘接计划(老侧跨场景约定 C)。 */
364
+ function segNext(data) {
365
+ return [{ navText: '复盘到明天的衔接', html: renderSectionTitle('复盘到明天的衔接')
366
+ + '<p class="sch-pl-note">复盘看完了,下一步是给 ' + data.nextDay
367
+ + ' 排日程:说「商量计划」或「规划明天」,也可以把下面这一句复制给 AI 接着走。</p>'
368
+ + renderPreBlock({
369
+ label: '下一步说这一句',
370
+ command: '商量一下 ' + data.nextDay + ' 的计划',
371
+ actionId: 'ilife-sch-replay-copy-next',
372
+ copyLabel: '复制这句话',
373
+ }) }];
374
+ }
375
+ /* ─────────────────────────── 整页 ─────────────────────────── */
376
+ /** 各档的区块序列(本页档路由的唯一定义地,与 `replayDocs.ts` 的窗口路由分开住两处职能)。
377
+ * #891:每一支返回的是**小节清单**(一段一条目录条目),不再是拼好的字符串——
378
+ * 段名与目录条目同住一处,不会走散。 */
379
+ function sectionsOf(data) {
380
+ const g = data.win.effective;
381
+ const multi = data.win.days > 1;
382
+ if (g === 'day') {
383
+ return [...segPlanActual(data, multi, false), ...segPlanGuide(data), ...segRecord(data), ...segPlan(data), ...segCross(data, multi, false), ...segHealth(data), ...segInsights(data)];
384
+ }
385
+ if (g === 'week')
386
+ return [...segTrend(data), ...segHeat(data), ...segHealth(data), ...segInsights(data)];
387
+ if (g === 'month')
388
+ return [...segRecord(data), ...segMonthCompare(data), ...segGoals(data), ...segHealth(data), ...segInsights(data)];
389
+ return [...segRecord(data), ...segTrend(data), ...segHeat(data), ...segPlan(data), ...segPlanActual(data, multi, true), ...segCross(data, multi, true), ...segHealth(data), ...segInsights(data)];
390
+ }
391
+ function kpisOf(data) {
392
+ const total = data.totalMinutes;
393
+ const score = data.win.effective === 'day' ? data.healthScore : data.healthMean;
394
+ return [
395
+ { label: '总时长', value: fmtDurShort(total), detail: String(data.records.length) + ' 块记录' },
396
+ {
397
+ label: '记录天数', value: String(data.activeDays), unit: '天',
398
+ detail: span(data.win.start, data.win.end) + ' 一共 ' + String(data.win.days) + ' 天',
399
+ },
400
+ {
401
+ label: '完成率', value: pctText(data.completionRate),
402
+ detail: data.plans.length === 0 ? '这一段没有计划' : '这一段排了 ' + String(data.plans.length) + ' 条计划',
403
+ ...(data.completionRate === null ? {} : { bar: { pct: Math.min(100, Math.max(0, data.completionRate)) } }),
404
+ },
405
+ {
406
+ label: '健康分', value: String(score),
407
+ detail: data.win.effective === 'day' ? '单日七个维度取均' : '这一段逐日均值',
408
+ bar: { pct: Math.min(100, Math.max(0, score)) },
409
+ },
410
+ ];
411
+ }
412
+ /** 复制区载荷(#887):复盘四档共用这一支,都在 `schedule.plan.write` 上,形状是回执——
413
+ * 数据位=这一趟那句话,日志位=这一趟的 2–6 段(口径只此一处,见 `receipt.ts` 的 `planCopyArea`)。 */
414
+ function copyOf(data) {
415
+ const g = data.win.effective;
416
+ const ranked = Object.keys(data.byL1).sort((a, b) => (data.byL1[b] ?? 0) - (data.byL1[a] ?? 0));
417
+ const lines = [
418
+ '复盘' + GRAN_CN[g] + ':' + span(data.win.start, data.win.end) + ',' + String(data.win.days) + ' 天,记录 '
419
+ + String(data.records.length) + ' 块共 ' + fmtDur(data.totalMinutes) + ',健康分 '
420
+ + String(g === 'day' ? data.healthScore : data.healthMean),
421
+ '计划 ' + String(data.plans.length) + ' 条,完成率 ' + pctText(data.completionRate),
422
+ ...ranked.map((name) => name + ' ' + fmtDur(data.byL1[name])),
423
+ ...data.anomalies.map((a) => a.dim + ' 比上一段 ' + (a.deltaPct >= 0 ? '+' : '') + String(a.deltaPct) + '%'),
424
+ ];
425
+ return planCopyArea({
426
+ message: lines.join(','),
427
+ command: 'schedule-cmd-read schedule.plan.write --params {"op":"review","granularity":"' + g
428
+ + '","start":"' + data.win.start + '","end":"' + data.win.end + '"}',
429
+ source: '作息记录表 ' + String(data.records.length) + ' 行与日程计划表 ' + String(data.plans.length) + ' 行',
430
+ });
431
+ }
432
+ /** 「复盘」一体页整页(四档共用这一支,区块按档取)。 */
433
+ export function replayPage(handle, win) {
434
+ const data = replayData(handle, win);
435
+ const g = win.effective;
436
+ const head = {
437
+ docTitle: '作息管家 复盘' + GRAN_CN[g],
438
+ eyebrow: EYEBROW,
439
+ title: '复盘' + GRAN_CN[g],
440
+ subtitle: span(win.start, win.end) + ' 这一段:记录 ' + String(data.records.length) + ' 块,共 '
441
+ + fmtDur(data.totalMinutes) + '。计划 ' + String(data.plans.length) + ' 条,完成率 '
442
+ + pctText(data.completionRate) + '。'
443
+ + (win.requested === 'range' && g !== 'range' ? '这一段的跨度是 ' + String(win.days) + ' 天,按' + GRAN_CN[g] + '档画。' : ''),
444
+ };
445
+ const content = pageSections([
446
+ { navText: '这一段的总览', html: renderKpiGrid(kpisOf(data), { title: '这一段的总览' }) },
447
+ { html: renderConclusionBar(conclusionOf(data)) },
448
+ ...sectionsOf(data),
449
+ ...segNext(data),
450
+ { navText: '复制与留档', html: scheduleCopyArea({
451
+ title: '复制与留档',
452
+ dataActionId: 'ilife-sch-replay-copy-data',
453
+ logActionId: 'ilife-sch-replay-copy-log',
454
+ ...copyOf(data),
455
+ }) },
456
+ ]);
457
+ return assembleDocPage({ head, content: content.toc + content.body });
458
+ }
459
+ /** 结论条那一句:这一段干了什么、对照下来的结论是什么。 */
460
+ function conclusionOf(data) {
461
+ const g = data.win.effective;
462
+ const top = Object.keys(data.byL1).sort((a, b) => (data.byL1[b] ?? 0) - (data.byL1[a] ?? 0))[0];
463
+ const base = span(data.win.start, data.win.end) + ' 记了 ' + String(data.records.length) + ' 块,共 ' + fmtDur(data.totalMinutes) + '。';
464
+ const plan = data.plans.length === 0 ? '这一段没有排计划。' : '排了 ' + String(data.plans.length) + ' 条计划,完成率 ' + pctText(data.completionRate) + '。';
465
+ const cross = g !== 'day' ? '' : (data.cross.pairs.length === 0
466
+ ? '计划与记录没有时段相交,对照表是空的。'
467
+ : '计划与记录相交的有 ' + String(data.cross.pairs.length) + ' 条,计划之外另有 ' + String(data.cross.unexpected.length) + ' 块记录。');
468
+ const health = (g === 'day' ? '这天健康分 ' + String(data.healthScore) : '这段健康分均值 ' + String(data.healthMean)) + '。';
469
+ return base + plan + cross + (top === undefined ? '' : '投入最多的是「' + top + '」。') + health;
470
+ }
471
+ //# sourceMappingURL=replaySections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaySections.js","sourceRoot":"","sources":["../../src/plan/replaySections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ScheduleDb } from '../fetch/db.js';
2
+ /** 「复盘」(单日、逐条标记)整页:逐条 completion + 讨论区。 */
3
+ export declare function reviewPage(handle: ScheduleDb, date: string): string;
4
+ //# sourceMappingURL=reviewDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewDocs.d.ts","sourceRoot":"","sources":["../../src/plan/reviewDocs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiB5D,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgGnE"}