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.
- package/SKILL.md +12 -3
- package/dist/.gen-inputs.json +4 -4
- package/dist/admin/adminDocs.d.ts +57 -0
- package/dist/admin/adminDocs.d.ts.map +1 -0
- package/dist/admin/adminDocs.js +190 -0
- package/dist/admin/adminDocs.js.map +1 -0
- package/dist/admin/adminParts.d.ts +37 -0
- package/dist/admin/adminParts.d.ts.map +1 -0
- package/dist/admin/adminParts.js +83 -0
- package/dist/admin/adminParts.js.map +1 -0
- package/dist/admin/handlers.d.ts.map +1 -1
- package/dist/admin/handlers.js +196 -6
- package/dist/admin/handlers.js.map +1 -1
- package/dist/admin/routes.d.ts +10 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +2 -0
- package/dist/admin/routes.js.map +1 -1
- package/dist/analyze/analyzeDocs.d.ts +51 -0
- package/dist/analyze/analyzeDocs.d.ts.map +1 -0
- package/dist/analyze/analyzeDocs.js +442 -0
- package/dist/analyze/analyzeDocs.js.map +1 -0
- package/dist/analyze/analyzeParts.d.ts +53 -0
- package/dist/analyze/analyzeParts.d.ts.map +1 -0
- package/dist/analyze/analyzeParts.js +229 -0
- package/dist/analyze/analyzeParts.js.map +1 -0
- package/dist/analyze/handlers.d.ts.map +1 -1
- package/dist/analyze/handlers.js +41 -4
- package/dist/analyze/handlers.js.map +1 -1
- package/dist/cli/cmd_read.js +8 -2
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +0 -9
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +20 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/fetch/feishu.d.ts +6 -0
- package/dist/fetch/feishu.d.ts.map +1 -1
- package/dist/fetch/feishu.js +18 -7
- package/dist/fetch/feishu.js.map +1 -1
- package/dist/fetch/index.d.ts +1 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +1 -1
- package/dist/fetch/index.js.map +1 -1
- package/dist/health.d.ts +11 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +48 -22
- package/dist/health.js.map +1 -1
- package/dist/help/index.d.ts +1 -0
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +3 -0
- package/dist/help/index.js.map +1 -1
- package/dist/plan/discussDocs.d.ts +8 -0
- package/dist/plan/discussDocs.d.ts.map +1 -0
- package/dist/plan/discussDocs.js +321 -0
- package/dist/plan/discussDocs.js.map +1 -0
- package/dist/plan/feishuDocs.d.ts +19 -0
- package/dist/plan/feishuDocs.d.ts.map +1 -0
- package/dist/plan/feishuDocs.js +257 -0
- package/dist/plan/feishuDocs.js.map +1 -0
- package/dist/plan/handlers.d.ts.map +1 -1
- package/dist/plan/handlers.js +107 -3
- package/dist/plan/handlers.js.map +1 -1
- package/dist/plan/index.d.ts +2 -0
- package/dist/plan/index.d.ts.map +1 -1
- package/dist/plan/index.js +16 -9
- package/dist/plan/index.js.map +1 -1
- package/dist/plan/iso.d.ts +2 -0
- package/dist/plan/iso.d.ts.map +1 -1
- package/dist/plan/iso.js +6 -2
- package/dist/plan/iso.js.map +1 -1
- package/dist/plan/planDocs.d.ts +47 -0
- package/dist/plan/planDocs.d.ts.map +1 -0
- package/dist/plan/planDocs.js +159 -0
- package/dist/plan/planDocs.js.map +1 -0
- package/dist/plan/planParts.d.ts +38 -0
- package/dist/plan/planParts.d.ts.map +1 -0
- package/dist/plan/planParts.js +96 -0
- package/dist/plan/planParts.js.map +1 -0
- package/dist/plan/probe.d.ts +28 -0
- package/dist/plan/probe.d.ts.map +1 -0
- package/dist/plan/probe.js +114 -0
- package/dist/plan/probe.js.map +1 -0
- package/dist/plan/receipt.d.ts +12 -0
- package/dist/plan/receipt.d.ts.map +1 -1
- package/dist/plan/receipt.js +17 -0
- package/dist/plan/receipt.js.map +1 -1
- package/dist/plan/receiptDocs.d.ts +26 -0
- package/dist/plan/receiptDocs.d.ts.map +1 -0
- package/dist/plan/receiptDocs.js +341 -0
- package/dist/plan/receiptDocs.js.map +1 -0
- package/dist/plan/replayDocs.d.ts +165 -0
- package/dist/plan/replayDocs.d.ts.map +1 -0
- package/dist/plan/replayDocs.js +226 -0
- package/dist/plan/replayDocs.js.map +1 -0
- package/dist/plan/replaySections.d.ts +5 -0
- package/dist/plan/replaySections.d.ts.map +1 -0
- package/dist/plan/replaySections.js +471 -0
- package/dist/plan/replaySections.js.map +1 -0
- package/dist/plan/reviewDocs.d.ts +4 -0
- package/dist/plan/reviewDocs.d.ts.map +1 -0
- package/dist/plan/reviewDocs.js +130 -0
- package/dist/plan/reviewDocs.js.map +1 -0
- package/dist/plan/sync.d.ts.map +1 -1
- package/dist/plan/sync.js +5 -0
- package/dist/plan/sync.js.map +1 -1
- package/dist/policy/index.d.ts +1 -1
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -1
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/plan.d.ts +8 -0
- package/dist/policy/plan.d.ts.map +1 -1
- package/dist/policy/plan.js +20 -0
- package/dist/policy/plan.js.map +1 -1
- package/dist/query/handlers.d.ts +3 -0
- package/dist/query/handlers.d.ts.map +1 -1
- package/dist/query/handlers.js +86 -12
- package/dist/query/handlers.js.map +1 -1
- package/dist/query/queryDocs.d.ts +64 -0
- package/dist/query/queryDocs.d.ts.map +1 -0
- package/dist/query/queryDocs.js +554 -0
- package/dist/query/queryDocs.js.map +1 -0
- package/dist/query/routes.d.ts +11 -1
- package/dist/query/routes.d.ts.map +1 -1
- package/dist/query/routes.js +5 -1
- package/dist/query/routes.js.map +1 -1
- package/dist/render/copyArea.d.ts +61 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +80 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +3 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +2 -0
- package/dist/render/index.js.map +1 -1
- package/dist/shared/dayPage.d.ts +67 -0
- package/dist/shared/dayPage.d.ts.map +1 -0
- package/dist/shared/dayPage.js +92 -0
- package/dist/shared/dayPage.js.map +1 -0
- package/dist/shared/detailPage.d.ts +55 -0
- package/dist/shared/detailPage.d.ts.map +1 -0
- package/dist/shared/detailPage.js +65 -0
- package/dist/shared/detailPage.js.map +1 -0
- package/dist/shared/docPage.d.ts +22 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +52 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/shared/overviewPage.d.ts +52 -0
- package/dist/shared/overviewPage.d.ts.map +1 -0
- package/dist/shared/overviewPage.js +65 -0
- package/dist/shared/overviewPage.js.map +1 -0
- package/dist/shared/pageNav.d.ts +24 -0
- package/dist/shared/pageNav.d.ts.map +1 -0
- package/dist/shared/pageNav.js +70 -0
- package/dist/shared/pageNav.js.map +1 -0
- package/dist/shared/pageParts.d.ts +45 -0
- package/dist/shared/pageParts.d.ts.map +1 -0
- package/dist/shared/pageParts.js +154 -0
- package/dist/shared/pageParts.js.map +1 -0
- package/dist/shared/planPage.d.ts +49 -0
- package/dist/shared/planPage.d.ts.map +1 -0
- package/dist/shared/planPage.js +48 -0
- package/dist/shared/planPage.js.map +1 -0
- package/dist/shared/rangePage.d.ts +44 -0
- package/dist/shared/rangePage.d.ts.map +1 -0
- package/dist/shared/rangePage.js +50 -0
- package/dist/shared/rangePage.js.map +1 -0
- package/dist/shared/weekPage.d.ts +36 -0
- package/dist/shared/weekPage.d.ts.map +1 -0
- package/dist/shared/weekPage.js +42 -0
- package/dist/shared/weekPage.js.map +1 -0
- package/dist/triggers/routes.generated.d.ts +23 -1
- package/dist/triggers/routes.generated.d.ts.map +1 -1
- package/dist/triggers/routes.generated.js +4 -1
- package/dist/triggers/routes.generated.js.map +1 -1
- package/dist/write/handlers.d.ts.map +1 -1
- package/dist/write/handlers.js +101 -5
- package/dist/write/handlers.js.map +1 -1
- package/dist/write/writeDocs.d.ts +27 -0
- package/dist/write/writeDocs.d.ts.map +1 -0
- package/dist/write/writeDocs.js +423 -0
- package/dist/write/writeDocs.js.map +1 -0
- package/dist/write/writeParts.d.ts +54 -0
- package/dist/write/writeParts.d.ts.map +1 -0
- package/dist/write/writeParts.js +117 -0
- package/dist/write/writeParts.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/** #789 · 「分析与洞察」域的**页数据与页装配**(口径层):三张页各自要什么。
|
|
2
|
+
*
|
|
3
|
+
* 为什么口径住这里、不住共用位:共用位不许出现任何一个能力的名字,而「七维是哪七个、日均按谁摊、
|
|
4
|
+
* 基线取哪一段、二级分类怎么归」全是**本域的口径**——摆好再交给 `src/shared/` 的整页装配与
|
|
5
|
+
* 本域的族级件(`./analyzeParts.ts`)。
|
|
6
|
+
*
|
|
7
|
+
* **不重算别家口径**:一级分类映射调 `policy` 的 `l1Of`,健康分调 `policy` 的 `computeHealthScore`,
|
|
8
|
+
* 红黄线的判定调 `policy` 的 `detectAnomalies`(阈值只此一处),时长格式化调 `fmtDur`/`fmtDurShort`,
|
|
9
|
+
* 时间解析调 `toMinutes`;热力矩阵与配色调 `src/shared/pageParts.ts` 的现成件。
|
|
10
|
+
*
|
|
11
|
+
* 三张页(老侧家族 → 哪一条唤醒词):
|
|
12
|
+
* · **作息对比**(老侧 f03)←「对比两个月」(`kind=months` 或 `kind=ranges`):
|
|
13
|
+
* 四卡对照 + 7 维差异柱 + AI 思考钩子;
|
|
14
|
+
* · **类别深挖**(老侧 f04)←「类别深挖」(`kind=category`):
|
|
15
|
+
* 24h × N 天热力图 + 分类总览 + 记录明细;
|
|
16
|
+
* · **异常检测**(老侧 f05)←「异常检测」(`kind=anomaly`):
|
|
17
|
+
* 红框与黄框的异常条目 + 7 维雷达。
|
|
18
|
+
*
|
|
19
|
+
* **载荷不动**:本票只把「真页 HTML」交回出口,三个 `data` 载荷(`buildRecordCompare`/
|
|
20
|
+
* `buildCategoryDeep`/`buildAnomaly`)逐字不变——那是机器读的那一份。页是给人读的那一份,
|
|
21
|
+
* 按老侧家族的信息层级画(老侧逐块的名字与口径见 `docs/skills/skill-schedule/场景清单.json`
|
|
22
|
+
* 的 `families[].blocks_old`)。
|
|
23
|
+
*
|
|
24
|
+
* **页上文案纪律**:不出现命令键、库列名、参数名、英文裸词;并列关系一律用版面表达
|
|
25
|
+
* (卡片格/对照行/框),不拿 `、`/`·`/`|`/`;`/`~` 这些符号顶替设计——范围一律写「至」,
|
|
26
|
+
* 不用波浪号。需要一行里并列两件事时走公共层 `renderCaliberLine`(它按全角竖线拆成两段版面)。
|
|
27
|
+
*
|
|
28
|
+
* #891 补的**页内定位**(不动件序列,只给已有的段名加锚点与页首目录):判据(小节数 ≥ 3 出目录)
|
|
29
|
+
* 与装配的唯一一处定义地在 `shared/pageNav.ts` 的 `SECTION_TOC_MIN`。三张页都是长页:
|
|
30
|
+
* 作息对比 4 小节、类别深挖 5 小节、异常检测 4 小节(段名见各自的件序列;带读数的那两颗段名
|
|
31
|
+
* 〔`24h × N 天热力图`〕在目录里收成短名 `热力图`,读数留在大段名上)。
|
|
32
|
+
*/
|
|
33
|
+
import { renderCaliberLine, renderConclusionBar, renderDataTable, renderDistributionRows, renderKpiGrid, renderProseBlock, } from 'base-paint/blocks';
|
|
34
|
+
import { HEALTH_TARGETS, detectAnomalies, fmtDur, fmtDurShort, fmtPct, getEmojiPrefix, l1Of, parseCategory, toMinutes, } from '../policy/index.js';
|
|
35
|
+
import { buildCategoryDeep, buildRecordCompare } from '../render/index.js';
|
|
36
|
+
import { scheduleCopyArea, scheduleCopyLog, scheduleNowStamp } from '../render/copyArea.js';
|
|
37
|
+
import { assembleDocPage } from '../shared/docPage.js';
|
|
38
|
+
import { pageSections } from '../shared/pageNav.js';
|
|
39
|
+
import { categoryColor, hourCellsOf, renderHeatMatrix } from '../shared/pageParts.js';
|
|
40
|
+
import { analyzePartsCss, renderAnomalyFrames, renderDiffBars, renderRadar, renderSectionTitle, } from './analyzeParts.js';
|
|
41
|
+
/** 页眉那一行域词(三张页同一句)。 */
|
|
42
|
+
const EYEBROW = '作息管家 分析与洞察';
|
|
43
|
+
/** 七个维度=健康分那张表(老侧 `HEALTH_DIMS` 同一组:创作不参评)。 */
|
|
44
|
+
const DIMS = Object.keys(HEALTH_TARGETS);
|
|
45
|
+
/** 基线段长度(老侧 `render_record_anomaly` 的 30 天,不新造)。 */
|
|
46
|
+
const BASELINE_DAYS = 30;
|
|
47
|
+
/** 热力图最多印多少行(再多只印最近这些天,与老侧区间页的上限同量级)。 */
|
|
48
|
+
const HEAT_ROWS_MAX = 31;
|
|
49
|
+
/** 一处「大变化」线:日均差超过这么久(老侧 `ai_questions_for_compare` 的 4h 是**总量**口径的线,
|
|
50
|
+
* 本页把维度读数换成日均之后按同一量级重定:两小时/半小时/一小时)。 */
|
|
51
|
+
const BIG_CHANGE_MINUTES = 2 * 60;
|
|
52
|
+
const WEEKDAY = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
|
53
|
+
/* ─────────────────────────── 小工具(日期与读数) ─────────────────────────── */
|
|
54
|
+
const pad2 = (n) => String(n).padStart(2, '0');
|
|
55
|
+
const fmtDate = (d) => d.getFullYear() + '-' + pad2(d.getMonth() + 1) + '-' + pad2(d.getDate());
|
|
56
|
+
/** `start` 至 `end` 逐日(含两端);起止非法或倒置时给空数组,调用方按空态处理。 */
|
|
57
|
+
export function datesOf(start, end) {
|
|
58
|
+
const out = [];
|
|
59
|
+
const d = new Date(start + 'T00:00:00');
|
|
60
|
+
const last = new Date(end + 'T00:00:00');
|
|
61
|
+
if (Number.isNaN(d.getTime()) || Number.isNaN(last.getTime()) || d.getTime() > last.getTime())
|
|
62
|
+
return out;
|
|
63
|
+
while (d.getTime() <= last.getTime()) {
|
|
64
|
+
out.push(fmtDate(d));
|
|
65
|
+
d.setDate(d.getDate() + 1);
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/** 某天往前推 `n` 天(`n` 取正数)。 */
|
|
70
|
+
export function shiftDays(date, n) {
|
|
71
|
+
const d = new Date(date + 'T00:00:00');
|
|
72
|
+
if (Number.isNaN(d.getTime()))
|
|
73
|
+
return date;
|
|
74
|
+
d.setDate(d.getDate() - n);
|
|
75
|
+
return fmtDate(d);
|
|
76
|
+
}
|
|
77
|
+
/** 基线段的第一天:检测窗口结束日往前数满 30 天(与老侧「基线=结束日往前 30 天」同一段)。 */
|
|
78
|
+
export function baselineStartOf(end) {
|
|
79
|
+
return shiftDays(end, BASELINE_DAYS - 1);
|
|
80
|
+
}
|
|
81
|
+
/** 逐维(一级分类)合计分钟。表外的分类进 `未知` 那一格(与 `l1Of` 同一落点)。 */
|
|
82
|
+
function byDim(records) {
|
|
83
|
+
const out = {};
|
|
84
|
+
for (const r of records) {
|
|
85
|
+
const dim = l1Of(r.category);
|
|
86
|
+
out[dim] = (out[dim] ?? 0) + (r.duration_minutes ?? 0);
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
const totalOf = (dim) => Object.values(dim).reduce((a, b) => a + b, 0);
|
|
91
|
+
/** 带正负号的短时长(卡片与柱子旁那一栏用;`+`/`-` 前置)。 */
|
|
92
|
+
function signedShort(mins) {
|
|
93
|
+
const n = Math.round(mins);
|
|
94
|
+
if (n > 0)
|
|
95
|
+
return '+' + fmtDurShort(n);
|
|
96
|
+
if (n < 0)
|
|
97
|
+
return '-' + fmtDurShort(-n);
|
|
98
|
+
return '0分钟';
|
|
99
|
+
}
|
|
100
|
+
/** 带正负号的长时长(成句的地方用)。 */
|
|
101
|
+
function signedDur(mins) {
|
|
102
|
+
const n = Math.round(mins);
|
|
103
|
+
if (n > 0)
|
|
104
|
+
return '+' + fmtDur(n);
|
|
105
|
+
if (n < 0)
|
|
106
|
+
return '-' + fmtDur(-n);
|
|
107
|
+
return '0分钟';
|
|
108
|
+
}
|
|
109
|
+
/** 带正负号的百分数(一位小数)。 */
|
|
110
|
+
function signedPct(pct) {
|
|
111
|
+
return (pct > 0 ? '+' : '') + String(pct) + '%';
|
|
112
|
+
}
|
|
113
|
+
function minutesOf(records) {
|
|
114
|
+
return records.reduce((a, r) => a + (r.duration_minutes ?? 0), 0);
|
|
115
|
+
}
|
|
116
|
+
/** 按天的时刻片段(热力矩阵那一件要的形状:当天的分钟数 + 一枚不透明键)。 */
|
|
117
|
+
function spansOf(records, key) {
|
|
118
|
+
return records.map((r) => ({ start: toMinutes(r.time_start), end: toMinutes(r.time_end), key }));
|
|
119
|
+
}
|
|
120
|
+
/** 时段写法(页上只用「至」,不用波浪号)。 */
|
|
121
|
+
const spanText = (r) => r.time_start + ' 至 ' + r.time_end;
|
|
122
|
+
/** AI 思考钩子那几句(照老侧 `ai_questions_for_compare` 的骨架重写:大变化、睡眠那一维、工作那一维、兜底)。 */
|
|
123
|
+
function compareQuestions(rows, labelA, labelB) {
|
|
124
|
+
const qs = [];
|
|
125
|
+
const big = rows.filter((row) => Math.abs(row.deltaMinutes) > BIG_CHANGE_MINUTES);
|
|
126
|
+
if (big.length > 0) {
|
|
127
|
+
const top = big[0];
|
|
128
|
+
qs.push(labelA + ' 与 ' + labelB + ' 在「' + top.label + '」这一维的日均差了 ' + signedDur(top.deltaMinutes)
|
|
129
|
+
+ ',这一段变化的主因你想从哪里说起?');
|
|
130
|
+
}
|
|
131
|
+
const keep = rows.find((row) => row.label === '维持');
|
|
132
|
+
if (keep !== undefined && Math.abs(keep.deltaMinutes) > 30) {
|
|
133
|
+
qs.push('「维持」那一维的日均差 ' + signedDur(keep.deltaMinutes) + ',这一段是你主动调整还是被事情推着走的?');
|
|
134
|
+
}
|
|
135
|
+
const work = rows.find((row) => row.label === '工作');
|
|
136
|
+
if (work !== undefined && work.deltaMinutes > 60) {
|
|
137
|
+
qs.push('「工作」那一维的日均多出 ' + signedDur(work.deltaMinutes) + ',多出来的时间是从哪一处挪过来的?');
|
|
138
|
+
}
|
|
139
|
+
if (qs.length === 0) {
|
|
140
|
+
qs.push('两段的日均整体接近,有没有哪一处细小的差别其实更要紧?');
|
|
141
|
+
}
|
|
142
|
+
return qs;
|
|
143
|
+
}
|
|
144
|
+
/** 作息对比整页(老侧 f03:四卡对照 + 7 维差异 + AI 钩子位)。
|
|
145
|
+
*
|
|
146
|
+
* **口径**:七维那一段比的是**按有记录的天数摊平的日均**(老侧 `build_diff_table` 比的是总量——那
|
|
147
|
+
* 口径遇到「一个区间记录到一半」就会把整个区间读成下降,本票按日均比,与「异常检测」那一页同一条)。
|
|
148
|
+
* 四卡里同时给总量差,两个读法都在页上,读者自己看得见差在哪。 */
|
|
149
|
+
export function renderComparePage(input) {
|
|
150
|
+
const dimA = byDim(input.a);
|
|
151
|
+
const dimB = byDim(input.b);
|
|
152
|
+
const datesA = datesOf(input.startA, input.endA);
|
|
153
|
+
const datesB = datesOf(input.startB, input.endB);
|
|
154
|
+
const activeA = Math.max(1, new Set(input.a.map((r) => r.date)).size);
|
|
155
|
+
const activeB = Math.max(1, new Set(input.b.map((r) => r.date)).size);
|
|
156
|
+
const totalA = totalOf(dimA);
|
|
157
|
+
const totalB = totalOf(dimB);
|
|
158
|
+
const avgA = totalA / activeA;
|
|
159
|
+
const avgB = totalB / activeB;
|
|
160
|
+
const rows = DIMS.map((dim) => {
|
|
161
|
+
const aDaily = Math.round((dimA[dim] ?? 0) / activeA);
|
|
162
|
+
const bDaily = Math.round((dimB[dim] ?? 0) / activeB);
|
|
163
|
+
const delta = bDaily - aDaily;
|
|
164
|
+
const pct = aDaily > 0 ? fmtPct(Math.abs(delta), aDaily) : (bDaily > 0 ? 100 : 0);
|
|
165
|
+
return {
|
|
166
|
+
label: dim,
|
|
167
|
+
glyph: getEmojiPrefix(dim),
|
|
168
|
+
aValue: aDaily,
|
|
169
|
+
bValue: bDaily,
|
|
170
|
+
aText: fmtDurShort(aDaily),
|
|
171
|
+
bText: fmtDurShort(bDaily),
|
|
172
|
+
deltaText: signedShort(delta) + ',' + signedPct(delta > 0 ? pct : -pct),
|
|
173
|
+
deltaMinutes: delta,
|
|
174
|
+
aLong: fmtDur(aDaily),
|
|
175
|
+
bLong: fmtDur(bDaily),
|
|
176
|
+
tone: delta > 0 ? 'up' : (delta < 0 ? 'down' : 'flat'),
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
const changed = rows.filter((row) => {
|
|
180
|
+
const base = row.aValue > 0 ? row.aValue : row.bValue;
|
|
181
|
+
return base > 0 && Math.abs(row.deltaMinutes) / base >= 0.1;
|
|
182
|
+
});
|
|
183
|
+
const cards = [
|
|
184
|
+
{
|
|
185
|
+
label: '区间 A', value: input.labelA,
|
|
186
|
+
detail: input.startA + ' 至 ' + input.endA + ',共 ' + String(datesA.length) + ' 天,其中 ' + String(activeA) + ' 天有记录',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
label: '区间 B', value: input.labelB,
|
|
190
|
+
detail: input.startB + ' 至 ' + input.endB + ',共 ' + String(datesB.length) + ' 天,其中 ' + String(activeB) + ' 天有记录',
|
|
191
|
+
},
|
|
192
|
+
{ label: '总时长差', value: signedShort(totalB - totalA), detail: 'B 减 A 的净变化' },
|
|
193
|
+
{ label: '日均差', value: signedShort(avgB - avgA), detail: '按有记录的天数摊平到每一天' },
|
|
194
|
+
];
|
|
195
|
+
const head = {
|
|
196
|
+
docTitle: '作息管家 作息对比',
|
|
197
|
+
eyebrow: EYEBROW,
|
|
198
|
+
title: '作息对比',
|
|
199
|
+
subtitle: input.labelA + '(' + input.startA + ' 至 ' + input.endA + ')与 ' + input.labelB
|
|
200
|
+
+ '(' + input.startB + ' 至 ' + input.endB + ')逐维对照。',
|
|
201
|
+
};
|
|
202
|
+
const conclusion = input.labelA + ' 与 ' + input.labelB + ':总时长从 ' + fmtDur(totalA) + ' 到 ' + fmtDur(totalB)
|
|
203
|
+
+ '。按有记录的天数摊平,日均从 ' + fmtDur(Math.round(avgA)) + ' 到 ' + fmtDur(Math.round(avgB))
|
|
204
|
+
+ '。七个维度里有 ' + String(changed.length) + ' 个的日均变化过了一成。';
|
|
205
|
+
const { toc, body } = pageSections([
|
|
206
|
+
{ navText: '四卡对照', html: renderKpiGrid(cards, { title: '四卡对照' }) },
|
|
207
|
+
{ html: renderConclusionBar(conclusion) },
|
|
208
|
+
{ navText: '7 维差异', html: renderSectionTitle('7 维差异')
|
|
209
|
+
+ renderCaliberLine('A 段=' + input.labelA + ',' + input.startA + ' 至 ' + input.endA
|
|
210
|
+
+ ' | B 段=' + input.labelB + ',' + input.startB + ' 至 ' + input.endB)
|
|
211
|
+
+ renderCaliberLine('柱长按这一维里两段的较大者比 | 差值是 B 减 A,涨绿降红 | 七维按一级分类合计,创作不参评')
|
|
212
|
+
+ renderDiffBars(rows) },
|
|
213
|
+
{ navText: 'AI 思考钩子', html: renderSectionTitle('AI 思考钩子')
|
|
214
|
+
+ renderCaliberLine('这一节是留给 AI 的入口:把下面任意一句复制给 AI,它就着这两个区间往下聊')
|
|
215
|
+
// 逐句一段正文(**不用列表行**:那一件是「一行一格、超出裁掉」的形状,窄屏上问题会被省略号吃掉——
|
|
216
|
+
// #789 的响应式读数在 390 档实测裁掉过四成,见证据件第四节)。
|
|
217
|
+
+ compareQuestions(rows, input.labelA, input.labelB).map((text) => renderProseBlock({ text })).join('') },
|
|
218
|
+
{ navText: '复制与留档', html: scheduleCopyArea({
|
|
219
|
+
title: '复制与留档',
|
|
220
|
+
dataActionId: 'ilife-sch-compare-copy-data',
|
|
221
|
+
logActionId: 'ilife-sch-compare-copy-log',
|
|
222
|
+
key: 'schedule.record.compare',
|
|
223
|
+
payload: buildRecordCompare({ labelA: input.labelA, labelB: input.labelB, a: [...input.a], b: [...input.b] }),
|
|
224
|
+
log: scheduleCopyLog({
|
|
225
|
+
command: 'schedule-cmd-read schedule.record.compare --params {"kind":"ranges","labelA":"' + input.labelA
|
|
226
|
+
+ '","startA":"' + input.startA + '","endA":"' + input.endA + '","labelB":"' + input.labelB
|
|
227
|
+
+ '","startB":"' + input.startB + '","endB":"' + input.endB + '"}',
|
|
228
|
+
source: '作息记录表(' + String(input.a.length + input.b.length) + ' 行)',
|
|
229
|
+
actionAt: scheduleNowStamp(),
|
|
230
|
+
}),
|
|
231
|
+
}) },
|
|
232
|
+
]);
|
|
233
|
+
return assembleDocPage({ head, content: toc + body, extraCss: analyzePartsCss() });
|
|
234
|
+
}
|
|
235
|
+
/** 类别深挖整页(老侧 f04:24h × N 天热力图 + 分类总览 + 记录明细)。 */
|
|
236
|
+
export function renderCategoryPage(input) {
|
|
237
|
+
const hits = input.records.filter((r) => r.date >= input.start && r.date <= input.end
|
|
238
|
+
&& l1Of(r.category) === input.level1);
|
|
239
|
+
const dates = datesOf(input.start, input.end);
|
|
240
|
+
const rows = dates.map((date) => {
|
|
241
|
+
const day = hits.filter((r) => r.date === date);
|
|
242
|
+
const cells = hourCellsOf(spansOf(day, input.level1));
|
|
243
|
+
return {
|
|
244
|
+
label: WEEKDAY[new Date(date + 'T00:00:00').getDay()],
|
|
245
|
+
date,
|
|
246
|
+
cells,
|
|
247
|
+
sum: fmtDurShort(minutesOf(day)),
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
const capped = rows.length > HEAT_ROWS_MAX ? rows.slice(rows.length - HEAT_ROWS_MAX) : rows;
|
|
251
|
+
const active = new Set(hits.map((r) => r.date)).size;
|
|
252
|
+
const total = minutesOf(hits);
|
|
253
|
+
const dailyAvg = active > 0 ? total / active : 0;
|
|
254
|
+
const bySecond = new Map();
|
|
255
|
+
for (const r of hits) {
|
|
256
|
+
const parsed = parseCategory(r.category);
|
|
257
|
+
const key = parsed.level2 === null ? '未分二级' : parsed.level2;
|
|
258
|
+
bySecond.set(key, (bySecond.get(key) ?? 0) + (r.duration_minutes ?? 0));
|
|
259
|
+
}
|
|
260
|
+
const secondKeys = [...bySecond.keys()].sort((x, y) => (bySecond.get(y) ?? 0) - (bySecond.get(x) ?? 0));
|
|
261
|
+
const secondRows = secondKeys.map((key) => ({
|
|
262
|
+
label: key,
|
|
263
|
+
value: fmtDur(bySecond.get(key) ?? 0) + ',占 ' + String(fmtPct(bySecond.get(key) ?? 0, total)) + '%',
|
|
264
|
+
pct: total > 0 ? Math.round(((bySecond.get(key) ?? 0) / total) * 100) : 0,
|
|
265
|
+
color: categoryColor(key, secondKeys),
|
|
266
|
+
}));
|
|
267
|
+
const detailRows = [...hits]
|
|
268
|
+
.sort((x, y) => (x.date + x.time_start).localeCompare(y.date + y.time_start))
|
|
269
|
+
.map((r) => ({
|
|
270
|
+
date: r.date,
|
|
271
|
+
time: spanText(r),
|
|
272
|
+
activity: r.activity,
|
|
273
|
+
category: r.category,
|
|
274
|
+
duration: fmtDur(r.duration_minutes ?? 0),
|
|
275
|
+
}));
|
|
276
|
+
const cards = [
|
|
277
|
+
{
|
|
278
|
+
label: '深挖类别', value: input.level1,
|
|
279
|
+
detail: input.requested === input.level1 ? '你问的就是这一维' : '「' + input.requested + '」按一级分类归到这一维',
|
|
280
|
+
},
|
|
281
|
+
{ label: '总时长', value: fmtDur(total), detail: '这一段里这一维的时长合计' },
|
|
282
|
+
{ label: '活跃天数', value: String(active), unit: '天', detail: '窗里一共 ' + String(dates.length) + ' 天' },
|
|
283
|
+
{ label: '日均', value: fmtDur(Math.round(dailyAvg)), detail: '按有记录的那几天摊平' },
|
|
284
|
+
];
|
|
285
|
+
const head = {
|
|
286
|
+
docTitle: '作息管家 类别深挖',
|
|
287
|
+
eyebrow: EYEBROW,
|
|
288
|
+
title: '类别深挖',
|
|
289
|
+
subtitle: '「' + input.level1 + '」在 ' + input.start + ' 至 ' + input.end + ' 的读数:'
|
|
290
|
+
+ String(active) + ' 天里有记录,共 ' + fmtDur(total) + '。',
|
|
291
|
+
};
|
|
292
|
+
const caliber = input.requested === input.level1
|
|
293
|
+
? '这一维按一级分类算 | 热力一格是一小时 | 没有记录的小时也占格'
|
|
294
|
+
: '「' + input.requested + '」按一级分类归到「' + input.level1 + '」 | 热力一格是一小时 | 没有记录的小时也占格';
|
|
295
|
+
const heatTitle = '24h × ' + String(dates.length) + ' 天热力图';
|
|
296
|
+
const { toc, body } = pageSections([
|
|
297
|
+
{ navText: '这一段的读数', html: renderKpiGrid(cards, { title: '这一段的读数' }) },
|
|
298
|
+
{ html: renderCaliberLine(caliber) },
|
|
299
|
+
// 段名是「24h × N 天热力图」(N 随这一段的天数变);目录项与它逐字同源(同一个常量写两处拼接)。
|
|
300
|
+
{ navText: heatTitle, html: renderHeatMatrix(capped, {
|
|
301
|
+
order: [input.level1],
|
|
302
|
+
id: 'sch-an-heat',
|
|
303
|
+
title: heatTitle,
|
|
304
|
+
legend: true,
|
|
305
|
+
withTotal: true,
|
|
306
|
+
dayLabel: (row) => row.label + ' ' + row.date.slice(5),
|
|
307
|
+
}) },
|
|
308
|
+
{ html: capped.length === rows.length
|
|
309
|
+
? ''
|
|
310
|
+
: renderCaliberLine('这一段跨了 ' + String(rows.length) + ' 天,热力图只印最近 ' + String(capped.length) + ' 天') },
|
|
311
|
+
{ navText: '分类总览', html: renderSectionTitle('分类总览')
|
|
312
|
+
+ renderCaliberLine('这一维下面各二级分类的时长与占比 | 只有一级分类的记录归在「未分二级」')
|
|
313
|
+
+ renderDistributionRows({ rows: secondRows }) },
|
|
314
|
+
{ navText: '记录明细', html: renderSectionTitle('记录明细')
|
|
315
|
+
+ renderDataTable({
|
|
316
|
+
columns: [
|
|
317
|
+
{ key: 'date', label: '日期' },
|
|
318
|
+
{ key: 'time', label: '时段' },
|
|
319
|
+
{ key: 'activity', label: '活动' },
|
|
320
|
+
{ key: 'category', label: '分类' },
|
|
321
|
+
{ key: 'duration', label: '时长', align: 'right' },
|
|
322
|
+
],
|
|
323
|
+
rows: detailRows,
|
|
324
|
+
emptyText: '这一段里这一维没有记录',
|
|
325
|
+
}) },
|
|
326
|
+
{ navText: '复制与留档', html: scheduleCopyArea({
|
|
327
|
+
title: '复制与留档',
|
|
328
|
+
dataActionId: 'ilife-sch-category-copy-data',
|
|
329
|
+
logActionId: 'ilife-sch-category-copy-log',
|
|
330
|
+
key: 'schedule.record.compare',
|
|
331
|
+
payload: buildCategoryDeep(input.start, input.end, input.level1, [...input.records]),
|
|
332
|
+
log: scheduleCopyLog({
|
|
333
|
+
command: 'schedule-cmd-read schedule.record.compare --params {"kind":"category","category":"'
|
|
334
|
+
+ input.level1 + '","start":"' + input.start + '","end":"' + input.end + '"}',
|
|
335
|
+
source: '作息记录表(' + String(hits.length) + ' 行)',
|
|
336
|
+
actionAt: scheduleNowStamp(),
|
|
337
|
+
}),
|
|
338
|
+
}) },
|
|
339
|
+
]);
|
|
340
|
+
return assembleDocPage({ head, content: toc + body, extraCss: analyzePartsCss() });
|
|
341
|
+
}
|
|
342
|
+
/** 异常检测整页(老侧 f05:红框与黄框的条目 + 7 维雷达)。
|
|
343
|
+
*
|
|
344
|
+
* **口径**(老侧 `render_record_anomaly` 同一条):基线段=结束日往前 30 天,窗口=最近 N 天;
|
|
345
|
+
* 两段各自**先摊成日均**再比。红黄线取 `policy` 的 `detectAnomalies`:偏离过两成红框,过一成黄框。
|
|
346
|
+
* (老侧拿两段的总量直接比,窗口比基线短时必然读成降——本票按日均比,不照抄那处口径瑕疵。) */
|
|
347
|
+
export function renderAnomalyPage(input) {
|
|
348
|
+
const cur = byDim(input.records);
|
|
349
|
+
const base = byDim(input.baseline);
|
|
350
|
+
const w = Math.max(1, input.windowDays);
|
|
351
|
+
const curDaily = {};
|
|
352
|
+
const baseDaily = {};
|
|
353
|
+
for (const dim of DIMS) {
|
|
354
|
+
curDaily[dim] = (cur[dim] ?? 0) / w;
|
|
355
|
+
baseDaily[dim] = (base[dim] ?? 0) / BASELINE_DAYS;
|
|
356
|
+
}
|
|
357
|
+
const found = detectAnomalies(curDaily, baseDaily)
|
|
358
|
+
.sort((x, y) => (x.level === y.level ? Math.abs(y.deltaPct) - Math.abs(x.deltaPct) : (x.level === 'red' ? -1 : 1)));
|
|
359
|
+
const frames = found.map((a) => ({
|
|
360
|
+
level: a.level === 'red' ? 'red' : 'yellow',
|
|
361
|
+
headline: a.dim + (a.deltaPct > 0 ? '涨 ' : '降 ') + String(Math.abs(a.deltaPct)) + '%',
|
|
362
|
+
detail: '这一段日均 ' + fmtDur(Math.round(a.cur)) + ',基线日均 ' + fmtDur(Math.round(a.prev))
|
|
363
|
+
+ ',两段差了 ' + signedDur(a.cur - a.prev) + '。',
|
|
364
|
+
}));
|
|
365
|
+
const reds = found.filter((a) => a.level === 'red').length;
|
|
366
|
+
const yellows = found.filter((a) => a.level === 'yellow').length;
|
|
367
|
+
const windowStart = shiftDays(input.end, w - 1);
|
|
368
|
+
const emptyText = w >= BASELINE_DAYS
|
|
369
|
+
? '窗口与基线取的是同一段日子,逐维当然读不出偏离。要看偏离,把窗口开小一点(比如最近 7 天)。'
|
|
370
|
+
: '这一段的日均与基线比,没有哪一维的偏离过了一成。';
|
|
371
|
+
const cards = [
|
|
372
|
+
{ label: '检测窗口', value: String(w), unit: '天', detail: windowStart + ' 至 ' + input.end },
|
|
373
|
+
{
|
|
374
|
+
label: '检出异常', value: String(found.length), unit: '项',
|
|
375
|
+
detail: found.length === 0 ? '这一段没有过线的维度' : '过了一成的维度数',
|
|
376
|
+
},
|
|
377
|
+
{ label: '红框', value: String(reds), unit: '项', detail: '偏离过了两成' },
|
|
378
|
+
{ label: '黄框', value: String(yellows), unit: '项', detail: '偏离过了一成' },
|
|
379
|
+
];
|
|
380
|
+
const head = {
|
|
381
|
+
docTitle: '作息管家 异常检测',
|
|
382
|
+
eyebrow: EYEBROW,
|
|
383
|
+
title: '异常检测',
|
|
384
|
+
subtitle: '最近 ' + String(w) + ' 天(' + windowStart + ' 至 ' + input.end + ')的日均,与 ' + input.baselineStart
|
|
385
|
+
+ ' 至 ' + input.end + ' 这 30 天的日均逐维对照。',
|
|
386
|
+
};
|
|
387
|
+
const radarRows = DIMS.map((dim) => ({
|
|
388
|
+
dim,
|
|
389
|
+
cur: Math.round(curDaily[dim]),
|
|
390
|
+
prev: Math.round(baseDaily[dim]),
|
|
391
|
+
move: signedShort(curDaily[dim] - baseDaily[dim]),
|
|
392
|
+
}));
|
|
393
|
+
const { toc, body } = pageSections([
|
|
394
|
+
{ navText: '这一趟检测的读数', html: renderKpiGrid(cards, { title: '这一趟检测的读数' }) },
|
|
395
|
+
{ navText: '异常详情', html: renderSectionTitle('异常详情')
|
|
396
|
+
+ renderCaliberLine('红框=偏离过两成 | 黄框=偏离过一成 | 基线=' + input.baselineStart
|
|
397
|
+
+ ' 至 ' + input.end + ' 这 30 天的日均')
|
|
398
|
+
+ renderAnomalyFrames(frames, emptyText) },
|
|
399
|
+
{ navText: '7 维雷达', html: renderSectionTitle('7 维雷达')
|
|
400
|
+
+ renderRadar({
|
|
401
|
+
dims: DIMS.map((dim) => ({ label: dim, current: curDaily[dim], baseline: baseDaily[dim] })),
|
|
402
|
+
currentLabel: '最近 ' + String(w) + ' 天',
|
|
403
|
+
baselineLabel: '近 30 天',
|
|
404
|
+
caption: '蓝面=最近 ' + String(w) + ' 天的日均,灰面=近 30 天的日均。每一个轴按这一维里两段的较大者铺满,谁缩进去谁就少。',
|
|
405
|
+
})
|
|
406
|
+
+ renderDataTable({
|
|
407
|
+
columns: [
|
|
408
|
+
{ key: 'dim', label: '维度' },
|
|
409
|
+
{ key: 'cur', label: '这一段日均', align: 'right' },
|
|
410
|
+
{ key: 'prev', label: '基线日均', align: 'right' },
|
|
411
|
+
{ key: 'move', label: '日均变化', align: 'right' },
|
|
412
|
+
],
|
|
413
|
+
rows: radarRows.map((row) => {
|
|
414
|
+
const glyph = getEmojiPrefix(row.dim);
|
|
415
|
+
return { dim: glyph === '' ? row.dim : glyph + ' ' + row.dim, cur: fmtDur(row.cur), prev: fmtDur(row.prev), move: row.move };
|
|
416
|
+
}),
|
|
417
|
+
caption: '七维的日均读数(创作不参评)',
|
|
418
|
+
}) },
|
|
419
|
+
{ navText: '复制与留档', html: scheduleCopyArea({
|
|
420
|
+
title: '复制与留档',
|
|
421
|
+
dataActionId: 'ilife-sch-anomaly-copy-data',
|
|
422
|
+
logActionId: 'ilife-sch-anomaly-copy-log',
|
|
423
|
+
key: 'schedule.record.compare',
|
|
424
|
+
// 这一份摘要从页上那几张读数原样拼(不重跑口径:红黄框与逐维日均就是上面算出来的那几行)。
|
|
425
|
+
payload: {
|
|
426
|
+
summary: '异常检测:最近 ' + String(w) + ' 天(' + windowStart + ' 至 ' + input.end + '),基线 '
|
|
427
|
+
+ input.baselineStart + ' 至 ' + input.end + ' 这 30 天的日均,检出红框 ' + String(reds)
|
|
428
|
+
+ ' 项、黄框 ' + String(yellows) + ' 项。'
|
|
429
|
+
+ radarRows.map((row) => row.dim + ' 这一段日均 ' + fmtDur(row.cur) + ',基线日均 ' + fmtDur(row.prev)
|
|
430
|
+
+ '(' + row.move + ')。').join(''),
|
|
431
|
+
},
|
|
432
|
+
log: scheduleCopyLog({
|
|
433
|
+
command: 'schedule-cmd-read schedule.record.compare --params {"kind":"anomaly","end":"' + input.end
|
|
434
|
+
+ '","windowDays":' + String(w) + '}',
|
|
435
|
+
source: '作息记录表(窗口 ' + String(input.records.length) + ' 行)',
|
|
436
|
+
actionAt: scheduleNowStamp(),
|
|
437
|
+
}),
|
|
438
|
+
}) },
|
|
439
|
+
]);
|
|
440
|
+
return assembleDocPage({ head, content: toc + body, extraCss: analyzePartsCss() });
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=analyzeDocs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeDocs.js","sourceRoot":"","sources":["../../src/analyze/analyzeDocs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** 域内段名(页上一段的标题)。老侧每个区块都有自己的名字,出页门与探针按名字认块,
|
|
2
|
+
* 故段名由一处产出:本件。 */
|
|
3
|
+
export declare function renderSectionTitle(text: string): string;
|
|
4
|
+
export interface DiffBarInput {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
/** 维度名前的字形(由调用方给,本件不认领域)。 */
|
|
7
|
+
readonly glyph: string;
|
|
8
|
+
/** 两段的原始读数(分钟)——只用来算柱长,不上屏。 */
|
|
9
|
+
readonly aValue: number;
|
|
10
|
+
readonly bValue: number;
|
|
11
|
+
/** 两段已格式化的读数(上屏的那两串)。 */
|
|
12
|
+
readonly aText: string;
|
|
13
|
+
readonly bText: string;
|
|
14
|
+
/** 差值已格式化的样子(上屏)。 */
|
|
15
|
+
readonly deltaText: string;
|
|
16
|
+
readonly tone: 'up' | 'down' | 'flat';
|
|
17
|
+
}
|
|
18
|
+
/** 一条维度一行:名字 + 差值 / A 与 B 各一条柱子与读数。柱长按**本行两段的较大者**比
|
|
19
|
+
* (逐行归一:一维与另一维的量级差一个数量级时,跨行归一会把小维度压成看不见的一条线)。 */
|
|
20
|
+
export declare function renderDiffBars(rows: readonly DiffBarInput[]): string;
|
|
21
|
+
export interface RadarDimInput {
|
|
22
|
+
readonly label: string;
|
|
23
|
+
/** 当前段的日均分钟数。 */
|
|
24
|
+
readonly current: number;
|
|
25
|
+
/** 基线段的日均分钟数。 */
|
|
26
|
+
readonly baseline: number;
|
|
27
|
+
}
|
|
28
|
+
export interface RadarInput {
|
|
29
|
+
readonly dims: readonly RadarDimInput[];
|
|
30
|
+
readonly currentLabel: string;
|
|
31
|
+
readonly baselineLabel: string;
|
|
32
|
+
/** 图上那一行的读法(两圈各是什么)。 */
|
|
33
|
+
readonly caption: string;
|
|
34
|
+
}
|
|
35
|
+
/** 七维雷达:一张多边形图,两个面=当前段与基线段。少于三维不出(画不成面)。
|
|
36
|
+
*
|
|
37
|
+
* **每一个轴按这一维里两段的较大者铺满**(与「7 维差异柱」同一条:柱长按本行两段的较大者比)。
|
|
38
|
+
* 为什么不按七维共用一个最大值:作息那七维的量级差着一个数量级(睡眠十小时对「日常」二十分钟),
|
|
39
|
+
* 共用一个最大值会把六个维度压成一个点——老侧那一版就是共用最大值,图上只剩睡眠那一根。 */
|
|
40
|
+
export declare function renderRadar(input: RadarInput): string;
|
|
41
|
+
export interface AnomalyFrameInput {
|
|
42
|
+
readonly level: 'red' | 'yellow';
|
|
43
|
+
/** 一条框的第一行(这一维怎么了)。 */
|
|
44
|
+
readonly headline: string;
|
|
45
|
+
/** 一条框的第二行(读数与怎么读)。 */
|
|
46
|
+
readonly detail: string;
|
|
47
|
+
}
|
|
48
|
+
/** 红框(过两成)与黄框(过一成)的条目列表;一条都没有=一行空态文案(不留空壳)。 */
|
|
49
|
+
export declare function renderAnomalyFrames(items: readonly AnomalyFrameInput[], emptyText: string): string;
|
|
50
|
+
/** 本处族级件的样式(只对用上它们的页面有作用)。
|
|
51
|
+
* 颜色只取冻结 token 与 `CHART_PALETTE`;长度只取上面那组常量——本串里不出现 `px` 字面量。 */
|
|
52
|
+
export declare function analyzePartsCss(): string;
|
|
53
|
+
//# sourceMappingURL=analyzeParts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeParts.d.ts","sourceRoot":"","sources":["../../src/analyze/analyzeParts.ts"],"names":[],"mappings":"AAgFA;mBACmB;AACnB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC;AAED;kDACkD;AAClD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAmBpE;AAWD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iBAAiB;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iBAAiB;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;kDAIkD;AAClD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAiCrD;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAclG;AAID;kEACkE;AAClE,wBAAgB,eAAe,IAAI,MAAM,CA0DxC"}
|