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,229 @@
1
+ /** #789 · 「分析与洞察」域的族级页内自造件(本域页内自造件与样式常量的唯一住处)。
2
+ *
3
+ * 为什么住这里(写得出哪几处在用):本票三张页上有三处公共层给不出的形状——
4
+ * · **7 维差异柱**(老侧 f03「作息记录·对比」的必现块):同一条维度上两个区间并排对照 + 差值。
5
+ * 公共层八种图(`CHART_KINDS`)给不出这一形状;`renderDistributionRows` 是「一行一段」,
6
+ * 两段要并排就得自己摆栅格。
7
+ * · **7 维雷达**(老侧 f05「异常检测」的必现块):`CHART_KINDS` 里没有雷达这一项。
8
+ * · **红框与黄框的异常条目**(老侧 f05 的另一个必现块):公共层没有「按严重度整条套框」的列表件
9
+ * (`renderListRows` 的左槽是给 `▲` 这类小标记的,套不上整条框)。
10
+ * 三处都只在本域用,故照 `src/write/writeParts.ts`/`src/plan/planParts.ts` 的先例,把本域的
11
+ * 自造件落在本域的族级件文件里,**不往共用位塞**(共用位不是各域的样式收容所)。
12
+ *
13
+ * **只认形状,不认领域**:进来的是摆好的读数(哪一维、两段各多少分钟、格式化后的字串),
14
+ * 出去是 HTML 串——本件不引 `policy`,也不认一级分类那八个名字。
15
+ *
16
+ * **样式纪律(本票的代码层窄判据)**:本文件是族级样式常量的唯一住处——CSS 里的长度一律取
17
+ * 下面那组具名常量(`px()` 是唯一的拼接处)、颜色一律取公共层冻结 token(`var(--…)`)与冻结色板
18
+ * `CHART_PALETTE`,`px` 字面量一处也不写。断点只用仓内既有值 **820**(页内自造件那一档),不新造。
19
+ */
20
+ import { CHART_PALETTE } from 'base-paint';
21
+ /* ─────────────────────────── 风格常量(本域 CSS 所有长度的出处) ─────────────────────────── */
22
+ const FS_TITLE = 15;
23
+ const FS_BODY = 13;
24
+ const FS_SMALL = 12;
25
+ /* #893 正文类下限 12px(PAGE_LIMITS.textMinPx):TINY 不许低于 12,与 SMALL 同值是刻意的。 */
26
+ const FS_TINY = 12;
27
+ const GAP = 8;
28
+ const ROW_GAP = 10;
29
+ const PAD_Y = 12;
30
+ const PAD_X = 14;
31
+ const RADIUS = 12;
32
+ const HAIRLINE = 1;
33
+ const RAIL = 4;
34
+ const NAME_W = 92;
35
+ const DELTA_W = 76;
36
+ const TAG_W = 22;
37
+ const BAR_H = 10;
38
+ const BAR_RADIUS = 5;
39
+ const FRAME_RADIUS = 10;
40
+ /** 雷达几何(viewBox 的边长与中心、半径、环数与标签外扩——`SVG` 侧的长度全取这里)。 */
41
+ const RADAR_W = 400;
42
+ const RADAR_H = 430;
43
+ const RADAR_CX = 200;
44
+ const RADAR_CY = 205;
45
+ const RADAR_R = 118;
46
+ const RADAR_LABEL_GAP = 16;
47
+ const RADAR_MAX_W = 420;
48
+ const STROKE_HAIRLINE = 0.5;
49
+ const STROKE_CURVE = 2;
50
+ const STROKE_FILL = 1;
51
+ const OPACITY_BASE = 0.18;
52
+ const OPACITY_CURVE = 0.28;
53
+ /** 环(由外到内;比例相对半径)。 */
54
+ const RADAR_RINGS = [1, 0.75, 0.5, 0.25];
55
+ const NARROW = 820;
56
+ /** 取色只此一处:两段对照走「主色 对 橙」,框与差值走冻结色板的绿/红/灰。 */
57
+ const COLOR_A = 'var(--blue)';
58
+ const COLOR_B = CHART_PALETTE[2];
59
+ const COLOR_RED = CHART_PALETTE[3];
60
+ const COLOR_UP = CHART_PALETTE[1];
61
+ const COLOR_DOWN = CHART_PALETTE[3];
62
+ const COLOR_FLAT = 'var(--fg3)';
63
+ const px = (n) => n + 'px';
64
+ const LF = String.fromCharCode(10);
65
+ /** 五字符转义(与公共层 `blocks.ts` 同口径;本件不引区块层内部件)。 */
66
+ function esc(value) {
67
+ return value.replace(/[&<>"']/g, (ch) => {
68
+ if (ch === '&')
69
+ return '&amp;';
70
+ if (ch === '<')
71
+ return '&lt;';
72
+ if (ch === '>')
73
+ return '&gt;';
74
+ if (ch === '"')
75
+ return '&quot;';
76
+ return '&#39;';
77
+ });
78
+ }
79
+ /** 域内段名(页上一段的标题)。老侧每个区块都有自己的名字,出页门与探针按名字认块,
80
+ * 故段名由一处产出:本件。 */
81
+ export function renderSectionTitle(text) {
82
+ return '<h2 class="sch-an-h2">' + esc(text) + '</h2>';
83
+ }
84
+ /** 一条维度一行:名字 + 差值 / A 与 B 各一条柱子与读数。柱长按**本行两段的较大者**比
85
+ * (逐行归一:一维与另一维的量级差一个数量级时,跨行归一会把小维度压成看不见的一条线)。 */
86
+ export function renderDiffBars(rows) {
87
+ if (rows.length === 0)
88
+ return '';
89
+ const max = Math.max(1, ...rows.map((row) => Math.max(row.aValue, row.bValue)));
90
+ const line = (tag, cls, value, text) => '<div class="sch-an-diff-line">'
91
+ + '<span class="sch-an-diff-tag">' + esc(tag) + '</span>'
92
+ + '<span class="sch-an-diff-bar"><i class="' + cls + '" style="width:'
93
+ + String(Math.round((value / max) * 100)) + '%"></i></span>'
94
+ + '<span class="sch-an-diff-val">' + esc(text) + '</span>'
95
+ + '</div>';
96
+ return '<div class="sch-an-diff">' + rows.map((row) => '<div class="sch-an-diff-item">'
97
+ + '<div class="sch-an-diff-head">'
98
+ + '<span class="sch-an-diff-name">' + esc(row.glyph === '' ? row.label : row.glyph + ' ' + row.label) + '</span>'
99
+ + '<span class="sch-an-diff-delta" style="color:' + toneColor(row.tone) + '">' + esc(row.deltaText) + '</span>'
100
+ + '</div>'
101
+ + line('A', 'sch-an-diff-fill-a', row.aValue, row.aText)
102
+ + line('B', 'sch-an-diff-fill-b', row.bValue, row.bText)
103
+ + '</div>').join('') + '</div>';
104
+ }
105
+ /** 差值取色(涨绿降红平灰,与老侧 `build_diff_table` 的 `color` 同一条口径)。 */
106
+ function toneColor(tone) {
107
+ if (tone === 'up')
108
+ return COLOR_UP;
109
+ if (tone === 'down')
110
+ return COLOR_DOWN;
111
+ return COLOR_FLAT;
112
+ }
113
+ /** 七维雷达:一张多边形图,两个面=当前段与基线段。少于三维不出(画不成面)。
114
+ *
115
+ * **每一个轴按这一维里两段的较大者铺满**(与「7 维差异柱」同一条:柱长按本行两段的较大者比)。
116
+ * 为什么不按七维共用一个最大值:作息那七维的量级差着一个数量级(睡眠十小时对「日常」二十分钟),
117
+ * 共用一个最大值会把六个维度压成一个点——老侧那一版就是共用最大值,图上只剩睡眠那一根。 */
118
+ export function renderRadar(input) {
119
+ const n = input.dims.length;
120
+ if (n < 3)
121
+ return '';
122
+ const angle = (i) => -Math.PI / 2 + (i * 2 * Math.PI) / n;
123
+ const at = (i, ratio, radius) => (RADAR_CX + radius * ratio * Math.cos(angle(i))).toFixed(1) + ','
124
+ + (RADAR_CY + radius * ratio * Math.sin(angle(i))).toFixed(1);
125
+ const axisMax = (dim) => Math.max(1, dim.current, dim.baseline);
126
+ const rings = RADAR_RINGS.map((ratio) => '<polygon class="sch-an-radar-ring" points="'
127
+ + input.dims.map((_, i) => at(i, ratio, RADAR_R)).join(' ') + '"/>').join('');
128
+ const axes = input.dims.map((dim, i) => {
129
+ const a = angle(i);
130
+ const x = (RADAR_CX + RADAR_R * Math.cos(a)).toFixed(1);
131
+ const y = (RADAR_CY + RADAR_R * Math.sin(a)).toFixed(1);
132
+ const lx = (RADAR_CX + (RADAR_R + RADAR_LABEL_GAP) * Math.cos(a)).toFixed(1);
133
+ const ly = (RADAR_CY + (RADAR_R + RADAR_LABEL_GAP) * Math.sin(a)).toFixed(1);
134
+ return '<line class="sch-an-radar-axis" x1="' + String(RADAR_CX) + '" y1="' + String(RADAR_CY)
135
+ + '" x2="' + x + '" y2="' + y + '"/>'
136
+ + '<text class="sch-an-radar-label" x="' + lx + '" y="' + ly + '">' + esc(dim.label) + '</text>';
137
+ }).join('');
138
+ const face = (pick, cls) => '<polygon class="' + cls + '" points="'
139
+ + input.dims.map((dim, i) => at(i, pick(dim) / axisMax(dim), RADAR_R)).join(' ') + '"/>';
140
+ return '<figure class="sch-an-radar">'
141
+ + '<svg class="sch-an-radar-svg" viewBox="0 0 ' + String(RADAR_W) + ' ' + String(RADAR_H)
142
+ + '" role="img" aria-label="' + esc(input.caption) + '">'
143
+ + rings
144
+ + axes
145
+ + face((dim) => dim.baseline, 'sch-an-radar-face-baseline')
146
+ + face((dim) => dim.current, 'sch-an-radar-face-current')
147
+ + '</svg>'
148
+ + '<figcaption class="sch-an-radar-caption">' + esc(input.caption) + '</figcaption>'
149
+ + '</figure>';
150
+ }
151
+ /** 红框(过两成)与黄框(过一成)的条目列表;一条都没有=一行空态文案(不留空壳)。 */
152
+ export function renderAnomalyFrames(items, emptyText) {
153
+ if (items.length === 0) {
154
+ return '<p class="sch-an-empty">' + esc(emptyText) + '</p>';
155
+ }
156
+ return '<div class="sch-an-frames">' + items.map((item) => {
157
+ const red = item.level === 'red';
158
+ return '<div class="sch-an-frame ' + (red ? 'sch-an-frame-red' : 'sch-an-frame-yellow') + '">'
159
+ + '<div class="sch-an-frame-head">'
160
+ + '<span class="sch-an-frame-badge">' + (red ? '红框' : '黄框') + '</span>'
161
+ + '<span class="sch-an-frame-title">' + esc(item.headline) + '</span>'
162
+ + '</div>'
163
+ + '<div class="sch-an-frame-detail">' + esc(item.detail) + '</div>'
164
+ + '</div>';
165
+ }).join('') + '</div>';
166
+ }
167
+ /* ─────────────────────────── 样式唯一产出者 ─────────────────────────── */
168
+ /** 本处族级件的样式(只对用上它们的页面有作用)。
169
+ * 颜色只取冻结 token 与 `CHART_PALETTE`;长度只取上面那组常量——本串里不出现 `px` 字面量。 */
170
+ export function analyzePartsCss() {
171
+ return [
172
+ '/* #789 分析与洞察域·族级件(断点只用仓内既有值 820) */',
173
+ '.sch-an-h2 { margin: 0 0 ' + px(GAP) + '; font-size: ' + px(FS_TITLE) + '; font-weight: 600; color: var(--fg); }',
174
+ '.sch-an-note { margin: 0 0 ' + px(GAP) + '; color: var(--fg2); font-size: ' + px(FS_BODY) + '; line-height: 1.7; }',
175
+ '.sch-an-empty { margin: 0; padding: ' + px(PAD_Y) + ' ' + px(PAD_X) + '; border: ' + px(HAIRLINE) + ' solid var(--line);',
176
+ ' border-left: ' + px(RAIL) + ' solid var(--fg3); border-radius: ' + px(FRAME_RADIUS) + '; background: var(--soft);',
177
+ ' color: var(--fg2); font-size: ' + px(FS_BODY) + '; line-height: 1.7; }',
178
+ '/* ① 7 维差异柱 */',
179
+ '.sch-an-diff { display: flex; flex-direction: column; gap: ' + px(ROW_GAP) + '; margin: 0 0 ' + px(GAP) + '; }',
180
+ '.sch-an-diff-item { padding: ' + px(PAD_Y) + ' ' + px(PAD_X) + '; border: ' + px(HAIRLINE) + ' solid var(--line);',
181
+ ' border-radius: ' + px(RADIUS) + '; background: var(--card); }',
182
+ '.sch-an-diff-head { display: flex; align-items: baseline; justify-content: space-between; gap: ' + px(GAP) + ';',
183
+ ' margin-bottom: ' + px(GAP) + '; }',
184
+ '.sch-an-diff-name { color: var(--fg); font-size: ' + px(FS_BODY) + '; font-weight: 600; }',
185
+ '.sch-an-diff-delta { font-size: ' + px(FS_SMALL) + '; font-variant-numeric: tabular-nums; white-space: nowrap; }',
186
+ // 第三栏取 `minmax(最小值, auto)`:读数串长了自己长,柱子那栏跟着缩——不靠 nowrap 顶出容器外
187
+ // (`nowrap` 的定宽栏在窄屏是横向溢出的一条真路,出页门量的就是它)。
188
+ '.sch-an-diff-line { display: grid; grid-template-columns: ' + px(TAG_W) + ' minmax(0, 1fr) minmax(' + px(DELTA_W) + ', auto);',
189
+ ' align-items: center; gap: ' + px(GAP) + '; margin-top: ' + px(GAP) + '; }',
190
+ '.sch-an-diff-tag { color: var(--fg3); font-size: ' + px(FS_TINY) + '; }',
191
+ '.sch-an-diff-bar { display: block; height: ' + px(BAR_H) + '; border-radius: ' + px(BAR_RADIUS) + ';',
192
+ ' background: var(--soft); overflow: hidden; }',
193
+ '.sch-an-diff-bar i { display: block; height: 100%; border-radius: ' + px(BAR_RADIUS) + '; }',
194
+ '.sch-an-diff-fill-a { background: ' + COLOR_A + '; }',
195
+ '.sch-an-diff-fill-b { background: ' + COLOR_B + '; }',
196
+ '.sch-an-diff-val { color: var(--fg2); font-size: ' + px(FS_TINY) + '; text-align: right;',
197
+ ' font-variant-numeric: tabular-nums; white-space: nowrap; }',
198
+ '/* ② 7 维雷达 */',
199
+ // 宽度上限挂在**figure**上、不挂在 svg 上:公共层 `pageUi` 有一条 `.ilife-page-ui svg{max-width:100%}`
200
+ // (类选择器+类型选择器,比单个类名更具体),挂在 svg 上的上限会被它压掉——实测那一版雷达被拉成
201
+ // 壳宽那么大(#789 目视抓出)。挂在容器上就不与它争:svg 只负责填满容器。
202
+ '.sch-an-radar { margin: 0 auto; max-width: ' + px(RADAR_MAX_W) + '; }',
203
+ '.sch-an-radar-svg { display: block; width: 100%; height: auto; }',
204
+ '.sch-an-radar-ring, .sch-an-radar-axis { fill: none; stroke: var(--line); }',
205
+ '.sch-an-radar-ring { stroke-width: ' + String(STROKE_HAIRLINE) + '; }',
206
+ '.sch-an-radar-axis { stroke-width: ' + String(STROKE_HAIRLINE) + '; }',
207
+ '.sch-an-radar-label { fill: var(--fg2); font-size: ' + px(FS_TINY) + '; text-anchor: middle; }',
208
+ '.sch-an-radar-face-baseline { fill: var(--fg3); fill-opacity: ' + String(OPACITY_BASE) + '; stroke: var(--fg3); stroke-width: ' + String(STROKE_FILL) + '; }',
209
+ '.sch-an-radar-face-current { fill: var(--blue); fill-opacity: ' + String(OPACITY_CURVE) + '; stroke: var(--blue); stroke-width: ' + String(STROKE_CURVE) + '; }',
210
+ '.sch-an-radar-caption { margin: ' + px(GAP) + ' 0 0; color: var(--fg2); font-size: ' + px(FS_SMALL) + '; text-align: center; }',
211
+ '/* ③ 红框与黄框 */',
212
+ '.sch-an-frames { display: flex; flex-direction: column; gap: ' + px(GAP) + '; }',
213
+ '.sch-an-frame { padding: ' + px(PAD_Y) + ' ' + px(PAD_X) + '; border: ' + px(HAIRLINE) + ' solid var(--line);',
214
+ ' border-radius: ' + px(FRAME_RADIUS) + '; background: var(--soft); }',
215
+ '.sch-an-frame-red { border-left: ' + px(RAIL) + ' solid ' + COLOR_RED + '; }',
216
+ '.sch-an-frame-yellow { border-left: ' + px(RAIL) + ' solid ' + COLOR_B + '; }',
217
+ '.sch-an-frame-head { display: flex; align-items: baseline; gap: ' + px(GAP) + '; }',
218
+ '.sch-an-frame-badge { font-size: ' + px(FS_TINY) + '; font-weight: 600; color: var(--fg2);',
219
+ ' border: ' + px(HAIRLINE) + ' solid var(--line); border-radius: ' + px(FRAME_RADIUS) + '; padding: 0 ' + px(GAP) + '; }',
220
+ '.sch-an-frame-red .sch-an-frame-badge { color: ' + COLOR_RED + '; }',
221
+ '.sch-an-frame-yellow .sch-an-frame-badge { color: ' + COLOR_B + '; }',
222
+ '.sch-an-frame-title { color: var(--fg); font-size: ' + px(FS_BODY) + '; font-weight: 600; }',
223
+ '.sch-an-frame-detail { margin-top: ' + px(GAP) + '; color: var(--fg2); font-size: ' + px(FS_SMALL) + '; line-height: 1.7; }',
224
+ '@media (max-width: ' + px(NARROW) + ') {',
225
+ ' .sch-an-diff-val { font-size: ' + px(FS_TINY) + '; }',
226
+ '}',
227
+ ].join(LF);
228
+ }
229
+ //# sourceMappingURL=analyzeParts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeParts.js","sourceRoot":"","sources":["../../src/analyze/analyzeParts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/analyze/handlers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D,eAAO,MAAM,iBAAiB,EAAE,WAuC/B,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/analyze/handlers.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D,eAAO,MAAM,iBAAiB,EAAE,WAgE/B,CAAC"}
@@ -1,10 +1,22 @@
1
1
  /** 分析与洞察的处理函数(命令事实的执行一半;声明在 `./commands.ts`)。
2
2
  *
3
3
  * 逐字搬自 `src/cli/cmd_read.ts` 的 switch 一臂 + `monthRange`(行为零改动)。
4
+ *
5
+ * **#789 起这一域多出「出页」那一半**(照 #783–#788 的先例):三张真页各由
6
+ * `./analyzeDocs.ts` 装配(形状与族级件见 `src/shared/` 与 `./analyzeParts.ts`):
7
+ * · 作息对比(`kind=months`/`kind=ranges`)→ 四卡对照 + 7 维差异柱 + AI 思考钩子;
8
+ * · 类别深挖(`kind=category`)→ 24h × N 天热力图 + 分类总览 + 记录明细;
9
+ * · 异常检测(`kind=anomaly`)→ 红框与黄框的条目 + 7 维雷达。
10
+ * **三个 `data` 载荷一行不改**:那是机器读的那一份,页只把 HTML 交回出口(落点由出口按 #843 的通式算)。
11
+ *
12
+ * **一处口径修正(本票)**:`kind=category` 的类别名先按 `policy` 的 `l1Of` 归到**一级分类**再筛
13
+ * (老侧 `render_record_category` 的 `l1_of` 同一条)。此前把用户说的二级词直接当类别比,`健身`
14
+ * 这类二级词一条也命中不了(记录里存的是 `健康.运动`)——归一之后页与载荷读的是同一批记录。
4
15
  */
5
16
  import { ScheduleFetchError, listRecordsRange } from '../fetch/index.js';
6
17
  import { l1Of, validateCompareInput } from '../policy/index.js';
7
18
  import { buildAnomaly, buildCategoryDeep, buildRecordCompare } from '../render/index.js';
19
+ import { baselineStartOf, renderAnomalyPage, renderCategoryPage, renderComparePage } from './analyzeDocs.js';
8
20
  function monthRange(month) {
9
21
  const [y, m] = month.split('-').map(Number);
10
22
  const last = new Date(y, m, 0).getDate();
@@ -21,20 +33,39 @@ export const viewRecordCompare = (params, handle) => {
21
33
  if (!a.length || !b.length) {
22
34
  throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据:' + c.monthA + '(' + a.length + '块)/' + c.monthB + '(' + b.length + '块)');
23
35
  }
24
- return { data: buildRecordCompare({ labelA: c.monthA, labelB: c.monthB, a, b }), html: '' };
36
+ return {
37
+ data: buildRecordCompare({ labelA: c.monthA, labelB: c.monthB, a, b }),
38
+ html: renderComparePage({
39
+ labelA: c.monthA, startA: ra.start, endA: ra.end,
40
+ labelB: c.monthB, startB: rb.start, endB: rb.end, a, b,
41
+ }),
42
+ };
25
43
  }
26
44
  if (c.kind === 'ranges') {
27
45
  const a = listRecordsRange(handle, c.startA, c.endA);
28
46
  const b = listRecordsRange(handle, c.startB, c.endB);
29
47
  if (!a.length || !b.length)
30
48
  throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据(两侧均须有记录)');
31
- return { data: buildRecordCompare({ labelA: c.labelA, labelB: c.labelB, a, b }), html: '' };
49
+ return {
50
+ data: buildRecordCompare({ labelA: c.labelA, labelB: c.labelB, a, b }),
51
+ html: renderComparePage({
52
+ labelA: c.labelA, startA: c.startA, endA: c.endA,
53
+ labelB: c.labelB, startB: c.startB, endB: c.endB, a, b,
54
+ }),
55
+ };
32
56
  }
33
57
  if (c.kind === 'category') {
34
58
  const records = listRecordsRange(handle, c.start, c.end);
35
59
  if (!records.length)
36
60
  throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '区间无记录:' + c.start + '~' + c.end);
37
- return { data: buildCategoryDeep(c.start, c.end, c.category, records), html: '' };
61
+ // 归一之后页与载荷读的是同一批记录(见件头那一处口径修正)。
62
+ const level1 = l1Of(c.category);
63
+ return {
64
+ data: buildCategoryDeep(c.start, c.end, level1, records),
65
+ html: renderCategoryPage({
66
+ requested: c.category, level1, start: c.start, end: c.end, records,
67
+ }),
68
+ };
38
69
  }
39
70
  const w = c.windowDays;
40
71
  const end = c.end;
@@ -52,6 +83,12 @@ export const viewRecordCompare = (params, handle) => {
52
83
  byDay.set(r.date, m);
53
84
  }
54
85
  const daily = [...byDay.entries()].sort().map(([date, byL1]) => ({ date, byL1 }));
55
- return { data: buildAnomaly(end, w, daily), html: '' };
86
+ // 基线段=结束日往前 30 天(老侧 render_record_anomaly 同一段);页按日均比,载荷那一句照旧。
87
+ const baselineStart = baselineStartOf(end);
88
+ const baseline = listRecordsRange(handle, baselineStart, end);
89
+ return {
90
+ data: buildAnomaly(end, w, daily),
91
+ html: renderAnomalyPage({ end, windowDays: w, records, baseline, baselineStart }),
92
+ };
56
93
  };
57
94
  //# sourceMappingURL=handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/analyze/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/analyze/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAI7G,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,MAAM,EAAE,MAAkB,EAAE,EAAE;IAC3E,MAAM,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAA4B,CAAC;IAClE,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAgB,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAgB,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,EAAE,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACxI,CAAC;QACD,OAAO;YACL,IAAI,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1F,IAAI,EAAE,iBAAiB,CAAC;gBACtB,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG;gBAC1D,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;aACjE,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,CAAC,CAAC,IAAc,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,CAAC,CAAC,IAAc,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;QACnG,OAAO;YACL,IAAI,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1F,IAAI,EAAE,iBAAiB,CAAC;gBACtB,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAc;gBAC9E,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAc,EAAE,CAAC,EAAE,CAAC;aACrF,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAe,EAAE,CAAC,CAAC,GAAa,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5G,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,QAAkB,CAAC,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAe,EAAE,CAAC,CAAC,GAAa,EAAE,MAAM,EAAE,OAAO,CAAC;YAC5E,IAAI,EAAE,kBAAkB,CAAC;gBACvB,SAAS,EAAE,CAAC,CAAC,QAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAe,EAAE,GAAG,EAAE,CAAC,CAAC,GAAa,EAAE,OAAO;aACjG,CAAC;SACH,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAC,UAAoB,CAAC;IACjC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAa,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7H,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,EAAE,QAAQ,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACxG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClF,8DAA8D;IAC9D,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;QACjC,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;KAClF,CAAC;AACJ,CAAC,CAAC"}
@@ -112,7 +112,13 @@ async function main() {
112
112
  const built = env;
113
113
  // 页面正文=本包 envelope 片段(模板填充后):`--html <路径>` 与「缺省落盘」**同一份正文**,
114
114
  // 差别只在落点(逐字 vs 通式)——同一件产物,不因落点不同换形状(#843)。
115
- const sectionHtml = () => {
115
+ // **#783 起的接缝**:能力目录出的**真页**(处理函数返回的 `r.html`,如写域的「记作息结果」)优先,
116
+ // 没给才回落到本键的薄模板页——回落那一支的字节与接缝之前逐字相同(七个读键今天都走它)。
117
+ const pageHtml = () => {
118
+ if (r.html !== '') {
119
+ assertHtmlSize(r.html);
120
+ return r.html;
121
+ }
116
122
  const html = fillTemplate(loadTemplate(templateFor(key)), renderEnvelopeHtml(built));
117
123
  assertHtmlSize(html);
118
124
  return html;
@@ -128,7 +134,7 @@ async function main() {
128
134
  const receipt = delivers
129
135
  ? deliverHtml({
130
136
  explicit: o.html,
131
- html: landing !== undefined ? r.html : sectionHtml(),
137
+ html: landing !== undefined ? r.html : pageHtml(),
132
138
  targetDir: landing !== undefined ? landing.targetDir : resolveHtmlDir(),
133
139
  stem: landing !== undefined ? landing.stem : pageStemFor(spec),
134
140
  ...(landing === undefined ? {} : { reuseMs: landing.reuseMs }),
@@ -1 +1 @@
1
- {"version":3,"file":"cmd_read.js","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,kBAAkB,EAAE,mBAAmB,EACvC,aAAa,EAAE,cAAc,EAAE,eAAe,GAC/C,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,cAAc,EAC3E,YAAY,EAAE,WAAW,EAAE,YAAY,EACvC,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,+DAA+D;AAC/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,SAAS,IAAI,CAAC,IAAY,EAAE,GAAW,IAAW,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClH,SAAS,KAAK,CAAC,GAAW,IAAU,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,SAAS,IAAI,CAAC,GAAW,IAAU,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnE;iEACiE;AACjE,SAAS,SAAS;IAChB,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrG,CAAC;AAED,oEAAoE;AACpE,SAAS,SAAS,CAAC,IAAiB,EAAE,MAA+B;IACnE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;YAAS,CAAC;QACT,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAGD,SAAS,SAAS,CAAC,CAAW;IAC5B,MAAM,CAAC,GAAuG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC7L,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,iDAAiD;QACjD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAClD,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;gBAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACjF,CAAC;;YACI,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,CAAC,GAAG;QAAE,IAAI,CAAC,CAAC,EAAE,kHAAkH,CAAC,CAAC;IACxI,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAAC,CAAC;QACjF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC7G,CAAC;IACD,iEAAiE;IACjE,4EAA4E;IAC5E,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IACD,iEAAiE;IACjE,kDAAkD;IAClD,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IACD,SAAS,EAAE,CAAC;IACZ,IAAI,CAAC;QAAC,gBAAgB,CAAC,CAAC,CAAC,GAAkB,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,CAAC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAC5F,MAAM,GAAG,GAAG,CAAC,CAAC,GAAa,CAAC;IAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,KAAK,CAAC,wBAAwB,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACd,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrD,IAAI,GAAG,GAAoB,IAAI,CAAC;IAChC,IAAI,QAAkC,CAAC;IACvC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,4EAA4E;QAC5E,iDAAiD;QACjD,MAAM,IAAI,GAA4B,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,GAAG,GAAG,CAAC,CAAC;QAC7C,2DAA2D;QAC3D,2CAA2C;QAC3C,MAAM,CAAC,GAAuB,GAAG,KAAK,sBAAsB;YAC1D,CAAC,CAAE,IAAI,CAAC,GAA+C,CAAC,MAAM,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,GAAG,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,GAAG,CAAC;QAClB,6DAA6D;QAC7D,2CAA2C;QAC3C,MAAM,WAAW,GAAG,GAAW,EAAE;YAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YACrF,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,wDAAwD;QACxD,uEAAuE;QACvE,mFAAmF;QACnF,2EAA2E;QAC3E,sDAAsD;QACtD,yDAAyD;QACzD,MAAM,QAAQ,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QAC9F,MAAM,OAAO,GAAG,QAAQ;YACtB,CAAC,CAAC,WAAW,CAAC;gBACZ,QAAQ,EAAE,CAAC,CAAC,IAAI;gBAChB,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;gBACpD,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE;gBACvE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC9D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;aAC/D,CAAC;YACF,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,QAAQ,GAAG,OAAO,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;QACtE,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,YAAY,mBAAmB;YAAE,IAAI,CAAC,CAAC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,kBAAkB;YAAE,IAAI,CAAC,CAAC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,mBAAmB;YAAE,IAAI,CAAC,CAAC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACpE,wDAAwD;QACxD,8CAA8C;QAC9C,IAAI,kBAAkB,CAAC,IAAI,CAAE,CAAW,CAAC,OAAO,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,CAAC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACvF,IAAI,CAAC,CAAC,EAAE,OAAO,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,kEAAkE;IAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACnF,gDAAgD;IAChD,uEAAuE;IACvE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,iCAAiC,GAAG,QAAQ,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cmd_read.js","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,5 @@ export declare const CONFIG_KEYS: {
6
6
  };
7
7
  /** 是不是配置 key(分派层拦截用)。 */
8
8
  export declare function isConfigKey(key: string): boolean;
9
- /**
10
- * 跑一个配置 key,返回整行 envelope JSON。
11
- *
12
- * 三个 key 的载荷:读 → `{path, dataDir, created, values, resolved}`;写 → 入参 `{values}`,
13
- * 回执 `{path, values}`;重置 → `{path, backupPath}`(`backupPath` 为 null 表示本来就没有配置文件)。
14
- *
15
- * `resolved`(#764,照 #749 样板)=一组**解析后的绝对路径**,给设置页的只读行显示用:库文件/
16
- * HELP 产物目录(算式唯一定义地=`src/fetch/paths.ts`,面板不自己拼路径)。
17
- */
18
9
  export declare function runConfigKey(key: string, params: Record<string, unknown>): string;
19
10
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAgBA,+EAA+E;AAC/E,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,yBAAyB;AACzB,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAgBjF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAiBA,+EAA+E;AAC/E,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,yBAAyB;AACzB,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAiED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAmBjF"}
@@ -12,6 +12,7 @@
12
12
  import { ENVELOPE_VERSION } from 'base-link-core';
13
13
  import { loadScheduleConfig, resetScheduleConfig, saveScheduleConfig } from '../config.js';
14
14
  import { resolvedSchedulePaths } from '../fetch/paths.js';
15
+ import { dbDirAlert } from '../health.js';
15
16
  /** 三个 key 的唯一定义地(插件侧镜像同值,见 `packages/plugin-schedule-ilife/src/bridge.ts`)。 */
16
17
  export const CONFIG_KEYS = {
17
18
  read: 'schedule.config.read',
@@ -67,12 +68,30 @@ function withHumanError(run) {
67
68
  *
68
69
  * `resolved`(#764,照 #749 样板)=一组**解析后的绝对路径**,给设置页的只读行显示用:库文件/
69
70
  * HELP 产物目录(算式唯一定义地=`src/fetch/paths.ts`,面板不自己拼路径)。
71
+ *
72
+ * `alerts`(#915 第二步)=只有 `db.dir` 真用不了时才有这一格(缺席=不亮,面板原样画 `message`)。
70
73
  */
74
+ /**
75
+ * #915 第二步:只给 `db.dir` 的行告警(本家唯一可改目录行、唯一体检判红的格)。
76
+ *
77
+ * 结论复用体检 `db.dir` 那一项(`src/health.ts` 的 `dbDirAlert`,判据与 `dirVerdict` 同源),
78
+ * 红才给,`message` 原样取体检那句故障本身,不合成新句子;绿=缺席(面板不亮)。
79
+ * 注意:这里不调整份体检——体检链带 lark 探测那一支,在家目录落 `.lark-cli`,
80
+ * 跟进读路径会弄脏 `#763` 的家目录纯度口径(`config-695` 钉着它)。
81
+ */
82
+ function scheduleAlerts() {
83
+ const alert = withHumanError(() => dbDirAlert());
84
+ return alert === undefined ? undefined : { 'db.dir': alert };
85
+ }
71
86
  export function runConfigKey(key, params) {
72
87
  if (key === CONFIG_KEYS.read) {
73
88
  const c = withHumanError(() => loadScheduleConfig());
74
89
  const resolved = withHumanError(() => resolvedSchedulePaths());
75
- return envelope(key, 'detail', { path: c.path, dataDir: c.dataDir, created: c.created, values: c.values, resolved });
90
+ const alerts = withHumanError(() => scheduleAlerts());
91
+ const data = { path: c.path, dataDir: c.dataDir, created: c.created, values: c.values, resolved };
92
+ if (alerts !== undefined)
93
+ data['alerts'] = alerts;
94
+ return envelope(key, 'detail', data);
76
95
  }
77
96
  if (key === CONFIG_KEYS.write) {
78
97
  const raw = params['values'];
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,12 @@ export interface LarkRunDenied {
25
25
  }
26
26
  export declare function runLark(cli: string, args: string[], timeoutMs?: number): LarkRunOk | LarkRunDenied;
27
27
  export declare function larkVersion(cli: string): string;
28
+ /** 版本显示口径(唯一定义地):`--version` 首行原文与 `unknown` 都不许上屏,只留首个数字段,无则「读不到」。
29
+ * 取用者:`src/plan/feishuDocs.ts` 版本格、`src/health.ts` 体检绿档。 */
30
+ export declare function shortLarkVersion(raw: string): string;
31
+ /** 工具名遮蔽(唯一定义地):外部串(路径等)里的 `lark-cli` 字样换中文显示用名,原串不动。
32
+ * 取用者:`src/health.ts` 目录显示(scoop 那档目录名本身就含工具名)。 */
33
+ export declare function maskLarkCli(s: string): string;
28
34
  export declare function authOpenId(cli: string): string;
29
35
  export declare function checkCalendar(cli: string): boolean;
30
36
  export interface LarkReady {
@@ -1 +1 @@
1
- {"version":3,"file":"feishu.d.ts","sourceRoot":"","sources":["../../src/fetch/feishu.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,qDAAa,CAAC;AAC5C,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,2CAAa,CAAC;AAgB/C;;;kEAGkE;AAClE,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAc5C;AA6BD,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;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;AAGlF,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,SAAyB,GAAG,SAAS,GAAG,aAAa,CAgBlH;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW9C;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,MAAM,WAAW,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAGhF,wBAAgB,SAAS,IAAI,SAAS,CAOrC;AAGD,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAEhE;AAGD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;CAChB;AAoCD,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAKrF;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAK3F;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAU3E;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAoB9H;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC5B,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,SAAS,CAgBX;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAyB,GAAG,IAAI,CAOzG"}
1
+ {"version":3,"file":"feishu.d.ts","sourceRoot":"","sources":["../../src/fetch/feishu.ts"],"names":[],"mappings":"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"}
@@ -108,9 +108,9 @@ export function runLark(cli, args, timeoutMs = LARK_TIMEOUT_NORMAL_MS) {
108
108
  catch (e) {
109
109
  const err = e;
110
110
  if (err.code === 'ENOENT')
111
- throw new ScheduleFetchError('LARK_UNAVAILABLE', 'lark-cli 不可用:' + cli);
111
+ throw new ScheduleFetchError('LARK_UNAVAILABLE', '飞书命令行不可用:没找到可执行文件');
112
112
  if (err.code === 'ETIMEDOUT')
113
- throw new ScheduleFetchError('LARK_TIMEOUT', 'lark-cli 超时:' + args.join(' '));
113
+ throw new ScheduleFetchError('LARK_TIMEOUT', '飞书命令行超时:等太久没回应,稍后重试');
114
114
  return { ok: false, exit: err.status ?? null, stderr: String(err.stderr ?? err.message ?? e) };
115
115
  }
116
116
  }
@@ -120,21 +120,32 @@ export function larkVersion(cli) {
120
120
  return 'unknown';
121
121
  return r.stdout.trim().split('\n')[0] || 'unknown';
122
122
  }
123
+ /** 版本显示口径(唯一定义地):`--version` 首行原文与 `unknown` 都不许上屏,只留首个数字段,无则「读不到」。
124
+ * 取用者:`src/plan/feishuDocs.ts` 版本格、`src/health.ts` 体检绿档。 */
125
+ export function shortLarkVersion(raw) {
126
+ const m = raw.match(/\d+(?:\.\d+)*/);
127
+ return m ? m[0] : '读不到';
128
+ }
129
+ /** 工具名遮蔽(唯一定义地):外部串(路径等)里的 `lark-cli` 字样换中文显示用名,原串不动。
130
+ * 取用者:`src/health.ts` 目录显示(scoop 那档目录名本身就含工具名)。 */
131
+ export function maskLarkCli(s) {
132
+ return s.replace(/lark-cli/gi, '飞书命令行');
133
+ }
123
134
  // 身份真值源:auth status 输出 identities.user.openId;无 openId 即未登录 throw。
124
135
  export function authOpenId(cli) {
125
136
  const r = runLark(cli, ['auth', 'status'], LARK_TIMEOUT_SHORT_MS);
126
137
  if (!r.ok)
127
- throw new ScheduleFetchError('LARK_NOT_LOGGED_IN', 'lark-cli auth status 失败(未登录?)');
138
+ throw new ScheduleFetchError('LARK_NOT_LOGGED_IN', '还没登录:登录查询没通过');
128
139
  let j = null;
129
140
  try {
130
141
  j = JSON.parse(r.stdout);
131
142
  }
132
143
  catch {
133
- throw new ScheduleFetchError('LARK_BAD_RESPONSE', 'lark-cli auth status 非 JSON');
144
+ throw new ScheduleFetchError('LARK_BAD_RESPONSE', '登录信息读不懂:重登一次再探');
134
145
  }
135
146
  const id = j.identities?.user?.openId;
136
147
  if (typeof id !== 'string' || id.length === 0) {
137
- throw new ScheduleFetchError('LARK_NOT_LOGGED_IN', 'lark-cli 未登录(无 openId,先 auth login)');
148
+ throw new ScheduleFetchError('LARK_NOT_LOGGED_IN', '还没登录:查不到登录身份');
138
149
  }
139
150
  return id;
140
151
  }
@@ -146,11 +157,11 @@ export function checkCalendar(cli) {
146
157
  export function larkReady() {
147
158
  const cli = findLarkCli();
148
159
  if (!cli)
149
- throw new ScheduleFetchError('LARK_UNAVAILABLE', 'lark-cli 未找到:缺失阻断同步');
160
+ throw new ScheduleFetchError('LARK_UNAVAILABLE', '没找到飞书命令行:缺失阻断同步');
150
161
  const version = larkVersion(cli);
151
162
  const openId = authOpenId(cli);
152
163
  if (!checkCalendar(cli))
153
- throw new ScheduleFetchError('LARK_DENIED', '日历不可达(缺授权?先 lark-cli auth login)');
164
+ throw new ScheduleFetchError('LARK_DENIED', '日历拉不动:多半是缺日历授权,补一次授权再探');
154
165
  return { cliPath: cli, version, openId };
155
166
  }
156
167
  // ── 归属锚的读写(唯一口径处)────────────────────────────────────────────────