skill-schedule 0.1.0
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/dist/cli/cmd_read.d.ts +3 -0
- package/dist/cli/cmd_read.d.ts.map +1 -0
- package/dist/cli/cmd_read.js +312 -0
- package/dist/cli/cmd_read.js.map +1 -0
- package/dist/fetch/db.d.ts +97 -0
- package/dist/fetch/db.d.ts.map +1 -0
- package/dist/fetch/db.js +382 -0
- package/dist/fetch/db.js.map +1 -0
- package/dist/fetch/errors.d.ts +13 -0
- package/dist/fetch/errors.d.ts.map +1 -0
- package/dist/fetch/errors.js +18 -0
- package/dist/fetch/errors.js.map +1 -0
- package/dist/fetch/feishu.d.ts +36 -0
- package/dist/fetch/feishu.d.ts.map +1 -0
- package/dist/fetch/feishu.js +141 -0
- package/dist/fetch/feishu.js.map +1 -0
- package/dist/fetch/index.d.ts +7 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/index.js +5 -0
- package/dist/fetch/index.js.map +1 -0
- package/dist/fetch/paths.d.ts +6 -0
- package/dist/fetch/paths.d.ts.map +1 -0
- package/dist/fetch/paths.js +31 -0
- package/dist/fetch/paths.js.map +1 -0
- package/dist/help/index.d.ts +3 -0
- package/dist/help/index.d.ts.map +1 -0
- package/dist/help/index.js +2 -0
- package/dist/help/index.js.map +1 -0
- package/dist/help/lookup.d.ts +11 -0
- package/dist/help/lookup.d.ts.map +1 -0
- package/dist/help/lookup.js +39 -0
- package/dist/help/lookup.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/policy/category.d.ts +29 -0
- package/dist/policy/category.d.ts.map +1 -0
- package/dist/policy/category.js +168 -0
- package/dist/policy/category.js.map +1 -0
- package/dist/policy/index.d.ts +10 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +6 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/plan.d.ts +26 -0
- package/dist/policy/plan.d.ts.map +1 -0
- package/dist/policy/plan.js +124 -0
- package/dist/policy/plan.js.map +1 -0
- package/dist/policy/record.d.ts +36 -0
- package/dist/policy/record.d.ts.map +1 -0
- package/dist/policy/record.js +189 -0
- package/dist/policy/record.js.map +1 -0
- package/dist/policy/routing.d.ts +13 -0
- package/dist/policy/routing.d.ts.map +1 -0
- package/dist/policy/routing.js +72 -0
- package/dist/policy/routing.js.map +1 -0
- package/dist/policy/wakewords.d.ts +14 -0
- package/dist/policy/wakewords.d.ts.map +1 -0
- package/dist/policy/wakewords.js +85 -0
- package/dist/policy/wakewords.js.map +1 -0
- package/dist/render/envelope.d.ts +6 -0
- package/dist/render/envelope.d.ts.map +1 -0
- package/dist/render/envelope.js +48 -0
- package/dist/render/envelope.js.map +1 -0
- package/dist/render/errors.d.ts +5 -0
- package/dist/render/errors.d.ts.map +1 -0
- package/dist/render/errors.js +9 -0
- package/dist/render/errors.js.map +1 -0
- package/dist/render/html.d.ts +13 -0
- package/dist/render/html.d.ts.map +1 -0
- package/dist/render/html.js +68 -0
- package/dist/render/html.js.map +1 -0
- package/dist/render/index.d.ts +8 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +6 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/templates.d.ts +5 -0
- package/dist/render/templates.d.ts.map +1 -0
- package/dist/render/templates.js +42 -0
- package/dist/render/templates.js.map +1 -0
- package/dist/render/views.d.ts +78 -0
- package/dist/render/views.d.ts.map +1 -0
- package/dist/render/views.js +145 -0
- package/dist/render/views.js.map +1 -0
- package/package.json +32 -0
- package/templates/help.html +16 -0
- package/templates/plan_day.html +16 -0
- package/templates/plan_receipt.html +16 -0
- package/templates/record_compare.html +16 -0
- package/templates/record_day.html +16 -0
- package/templates/record_detail.html +16 -0
- package/templates/record_range.html +16 -0
- package/templates/record_receipt.html +16 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const DATE_RE: RegExp;
|
|
2
|
+
export declare const TIME_RE: RegExp;
|
|
3
|
+
export declare const MONTH_RE: RegExp;
|
|
4
|
+
export declare function normalizeDate(d: unknown, field?: string): string;
|
|
5
|
+
export declare function normalizeMonth(m: unknown, field?: string): string;
|
|
6
|
+
export declare function normalizeTime(t: unknown, field?: string): string;
|
|
7
|
+
export declare function toMinutes(hhmm: string): number;
|
|
8
|
+
export declare function resolveDateParam(params: Record<string, unknown>, today?: Date): string;
|
|
9
|
+
export declare function resolveRangeParam(params: Record<string, unknown>, today?: Date): {
|
|
10
|
+
start: string;
|
|
11
|
+
end: string;
|
|
12
|
+
};
|
|
13
|
+
export interface AddInput {
|
|
14
|
+
date: string;
|
|
15
|
+
time_start: string;
|
|
16
|
+
time_end: string;
|
|
17
|
+
duration_minutes: number;
|
|
18
|
+
activity: string;
|
|
19
|
+
category: string;
|
|
20
|
+
source_contents?: string | null;
|
|
21
|
+
source_timestamps?: string | null;
|
|
22
|
+
analysis_reasoning?: string | null;
|
|
23
|
+
}
|
|
24
|
+
export declare function validateAddInput(params: Record<string, unknown>): AddInput;
|
|
25
|
+
export declare function validateAmendInput(params: Record<string, unknown>): {
|
|
26
|
+
id: number;
|
|
27
|
+
patch: Record<string, unknown>;
|
|
28
|
+
};
|
|
29
|
+
export declare function validateSummaryInput(params: Record<string, unknown>): {
|
|
30
|
+
date: string;
|
|
31
|
+
category: string;
|
|
32
|
+
totalMinutes: number;
|
|
33
|
+
};
|
|
34
|
+
export type CompareKind = 'months' | 'ranges' | 'category' | 'anomaly';
|
|
35
|
+
export declare function validateCompareInput(params: Record<string, unknown>): CompareKind & Record<string, unknown>;
|
|
36
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/policy/record.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,QAAwB,CAAC;AAC7C,eAAO,MAAM,OAAO,QAAgC,CAAC;AACrD,eAAO,MAAM,QAAQ,QAAkB,CAAC;AAExC,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAS,GAAG,MAAM,CAehE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,MAAM,CAKlE;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAS,GAAG,MAAM,CAMhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAMtF;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAkB/G;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAC7E,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxG;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CA+B1E;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA8BlH;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAQ9H;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAGvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+B3G"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// 口径层·作息记录 params 校验(老家 add/amend-record/add-summary/compare 入参对应)。
|
|
2
|
+
// 日期容错 YYYYMMDD/slash/dot(老家 _normalize_date);24:00→23:59(老家 normalize_time)。
|
|
3
|
+
import { SchedulePolicyError } from '../fetch/errors.js';
|
|
4
|
+
import { normalizeCategory } from './category.js';
|
|
5
|
+
import { RELATIVE_DATES, RELATIVE_RANGES, relativeToDate, relativeToRange, recentNDays } from './routing.js';
|
|
6
|
+
export const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
7
|
+
export const TIME_RE = /^([01]\d|2[0-4]):([0-5]\d)$/;
|
|
8
|
+
export const MONTH_RE = /^\d{4}-\d{2}$/;
|
|
9
|
+
export function normalizeDate(d, field = 'date') {
|
|
10
|
+
if (typeof d !== 'string' || d.trim().length === 0) {
|
|
11
|
+
throw new SchedulePolicyError('POLICY_BAD_DATE', field + ' 须为日期字符串(期望 YYYY-MM-DD 或 YYYYMMDD)');
|
|
12
|
+
}
|
|
13
|
+
let s = d.trim().replace(/\//g, '-').replace(/\./g, '-');
|
|
14
|
+
if (/^\d{8}$/.test(s))
|
|
15
|
+
s = s.slice(0, 4) + '-' + s.slice(4, 6) + '-' + s.slice(6);
|
|
16
|
+
if (!DATE_RE.test(s)) {
|
|
17
|
+
throw new SchedulePolicyError('POLICY_BAD_DATE', field + ' 格式非法:' + JSON.stringify(d) + '(期望 YYYY-MM-DD 或 YYYYMMDD)');
|
|
18
|
+
}
|
|
19
|
+
const [y, m, day] = s.split('-').map(Number);
|
|
20
|
+
const dt = new Date(y, m - 1, day);
|
|
21
|
+
if (dt.getFullYear() !== y || dt.getMonth() !== m - 1 || dt.getDate() !== day) {
|
|
22
|
+
throw new SchedulePolicyError('POLICY_BAD_DATE', field + ' 非真实日期:' + JSON.stringify(s));
|
|
23
|
+
}
|
|
24
|
+
return s;
|
|
25
|
+
}
|
|
26
|
+
export function normalizeMonth(m, field = 'month') {
|
|
27
|
+
if (typeof m !== 'string' || !MONTH_RE.test(m.trim())) {
|
|
28
|
+
throw new SchedulePolicyError('POLICY_BAD_DATE', field + ' 格式非法:' + JSON.stringify(m) + '(期望 YYYY-MM)');
|
|
29
|
+
}
|
|
30
|
+
return m.trim();
|
|
31
|
+
}
|
|
32
|
+
// 飞书 ISO 不接受 24:00:统一转 23:59(老家 normalize_time)。
|
|
33
|
+
export function normalizeTime(t, field = 'time') {
|
|
34
|
+
if (typeof t !== 'string' || !TIME_RE.test(t.trim())) {
|
|
35
|
+
throw new SchedulePolicyError('POLICY_BAD_TIME', field + ' 格式非法:' + JSON.stringify(t) + '(期望 HH:MM,00:00~24:00)');
|
|
36
|
+
}
|
|
37
|
+
const s = t.trim();
|
|
38
|
+
return s === '24:00' ? '23:59' : s;
|
|
39
|
+
}
|
|
40
|
+
export function toMinutes(hhmm) {
|
|
41
|
+
const [h, m] = hhmm.split(':').map(Number);
|
|
42
|
+
return h * 60 + m;
|
|
43
|
+
}
|
|
44
|
+
// 单日期 param:绝对日期或相对表达(今天/昨天/…);缺省今天。
|
|
45
|
+
export function resolveDateParam(params, today) {
|
|
46
|
+
const v = params.date;
|
|
47
|
+
if (v === undefined || v === null || v === '')
|
|
48
|
+
return relativeToDate('今天', today);
|
|
49
|
+
if (typeof v !== 'string')
|
|
50
|
+
throw new SchedulePolicyError('POLICY_BAD_DATE', 'date 须为字符串');
|
|
51
|
+
if (RELATIVE_DATES.includes(v.trim()))
|
|
52
|
+
return relativeToDate(v, today);
|
|
53
|
+
return normalizeDate(v);
|
|
54
|
+
}
|
|
55
|
+
// 区间 param:显式 start/end,或 range 相对表达(本周/上月…),或 recentDays N。
|
|
56
|
+
export function resolveRangeParam(params, today) {
|
|
57
|
+
if (typeof params.range === 'string' && RELATIVE_RANGES.includes(params.range.trim())) {
|
|
58
|
+
return relativeToRange(params.range, today);
|
|
59
|
+
}
|
|
60
|
+
if (params.recentDays !== undefined) {
|
|
61
|
+
const n = params.recentDays;
|
|
62
|
+
if (!Number.isInteger(n) || n < 1 || n > 366) {
|
|
63
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'recentDays 须为 1~366 的整数');
|
|
64
|
+
}
|
|
65
|
+
return recentNDays(n, today);
|
|
66
|
+
}
|
|
67
|
+
if (params.start === undefined || params.end === undefined) {
|
|
68
|
+
throw new SchedulePolicyError('POLICY_MISSING_SLOT', '缺槽位 start/end(或改用 range=本周/上月… 或 recentDays=N)');
|
|
69
|
+
}
|
|
70
|
+
const start = normalizeDate(params.start, 'start');
|
|
71
|
+
const end = normalizeDate(params.end, 'end');
|
|
72
|
+
if (start > end)
|
|
73
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'start 不得晚于 end:' + start + '~' + end);
|
|
74
|
+
return { start, end };
|
|
75
|
+
}
|
|
76
|
+
// #0 记作息:9 字段强校验(date/time_start/time_end/activity/category 必填;duration 自算可复核)。
|
|
77
|
+
export function validateAddInput(params) {
|
|
78
|
+
const date = normalizeDate(params.date, 'date');
|
|
79
|
+
const timeStart = normalizeTime(params.time_start, 'time_start');
|
|
80
|
+
const timeEnd = normalizeTime(params.time_end, 'time_end');
|
|
81
|
+
if (toMinutes(timeEnd) <= toMinutes(timeStart)) {
|
|
82
|
+
throw new SchedulePolicyError('POLICY_BAD_TIME', 'time_end 必须晚于 time_start:' + timeStart + '~' + timeEnd);
|
|
83
|
+
}
|
|
84
|
+
const activity = params.activity;
|
|
85
|
+
if (typeof activity !== 'string' || activity.trim().length === 0) {
|
|
86
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'activity 不能为空');
|
|
87
|
+
}
|
|
88
|
+
const category = normalizeCategory(params.category);
|
|
89
|
+
const duration = toMinutes(timeEnd) - toMinutes(timeStart);
|
|
90
|
+
if (params.duration_minutes !== undefined && params.duration_minutes !== duration) {
|
|
91
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'duration_minutes 对不上起止(期望 ' + duration + ',实际 ' + String(params.duration_minutes) + ')');
|
|
92
|
+
}
|
|
93
|
+
const opt = (k) => {
|
|
94
|
+
const v = params[k];
|
|
95
|
+
if (v === undefined || v === null)
|
|
96
|
+
return null;
|
|
97
|
+
if (typeof v !== 'string')
|
|
98
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', k + ' 须为字符串');
|
|
99
|
+
return v;
|
|
100
|
+
};
|
|
101
|
+
return {
|
|
102
|
+
date, time_start: timeStart, time_end: timeEnd, duration_minutes: duration,
|
|
103
|
+
activity: activity.trim(), category,
|
|
104
|
+
source_contents: opt('source_contents'), source_timestamps: opt('source_timestamps'),
|
|
105
|
+
analysis_reasoning: opt('analysis_reasoning'),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// #26 修正:id 必填 + 至少改一个字段(改后 edit_count 自增由 db 层做)。
|
|
109
|
+
export function validateAmendInput(params) {
|
|
110
|
+
const id = params.id;
|
|
111
|
+
if (!Number.isInteger(id) || id <= 0) {
|
|
112
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'amend 须给正整数 id');
|
|
113
|
+
}
|
|
114
|
+
const patch = {};
|
|
115
|
+
if (params.date !== undefined)
|
|
116
|
+
patch.date = normalizeDate(params.date, 'date');
|
|
117
|
+
if (params.time_start !== undefined)
|
|
118
|
+
patch.time_start = normalizeTime(params.time_start, 'time_start');
|
|
119
|
+
if (params.time_end !== undefined)
|
|
120
|
+
patch.time_end = normalizeTime(params.time_end, 'time_end');
|
|
121
|
+
if (patch.time_start !== undefined && patch.time_end !== undefined &&
|
|
122
|
+
toMinutes(patch.time_end) <= toMinutes(patch.time_start)) {
|
|
123
|
+
throw new SchedulePolicyError('POLICY_BAD_TIME', 'time_end 必须晚于 time_start');
|
|
124
|
+
}
|
|
125
|
+
if (params.activity !== undefined) {
|
|
126
|
+
if (typeof params.activity !== 'string' || !params.activity.trim()) {
|
|
127
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'activity 不能为空');
|
|
128
|
+
}
|
|
129
|
+
patch.activity = params.activity.trim();
|
|
130
|
+
}
|
|
131
|
+
if (params.category !== undefined)
|
|
132
|
+
patch.category = normalizeCategory(params.category);
|
|
133
|
+
for (const k of ['source_contents', 'source_timestamps', 'analysis_reasoning']) {
|
|
134
|
+
if (params[k] !== undefined) {
|
|
135
|
+
if (typeof params[k] !== 'string')
|
|
136
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', k + ' 须为字符串');
|
|
137
|
+
patch[k] = params[k];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (!Object.keys(patch).length) {
|
|
141
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'amend 至少改一个字段(date/time_start/time_end/activity/category/来源三字段)');
|
|
142
|
+
}
|
|
143
|
+
return { id: id, patch };
|
|
144
|
+
}
|
|
145
|
+
// #24 写作息摘要:date+category+total_minutes(≥0)。
|
|
146
|
+
export function validateSummaryInput(params) {
|
|
147
|
+
const date = normalizeDate(params.date, 'date');
|
|
148
|
+
const category = normalizeCategory(params.category);
|
|
149
|
+
const m = params.total_minutes;
|
|
150
|
+
if (!Number.isInteger(m) || m < 0 || m > 1440) {
|
|
151
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'total_minutes 须为 0~1440 的整数');
|
|
152
|
+
}
|
|
153
|
+
return { date, category, totalMinutes: m };
|
|
154
|
+
}
|
|
155
|
+
// #25/T4/T5 对比 family:months(两 YYYY-MM)/ ranges(两起止+标签)/ category(区间+分类)/ anomaly(窗口天)。
|
|
156
|
+
export function validateCompareInput(params) {
|
|
157
|
+
const kind = params.kind;
|
|
158
|
+
if (kind === 'months') {
|
|
159
|
+
const a = normalizeMonth(params.monthA, 'monthA');
|
|
160
|
+
const b = normalizeMonth(params.monthB, 'monthB');
|
|
161
|
+
return { kind, monthA: a, monthB: b };
|
|
162
|
+
}
|
|
163
|
+
if (kind === 'ranges') {
|
|
164
|
+
const aS = normalizeDate(params.startA, 'startA');
|
|
165
|
+
const aE = normalizeDate(params.endA, 'endA');
|
|
166
|
+
const bS = normalizeDate(params.startB, 'startB');
|
|
167
|
+
const bE = normalizeDate(params.endB, 'endB');
|
|
168
|
+
if (aS > aE || bS > bE)
|
|
169
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', '对比区间起止倒置');
|
|
170
|
+
const labelA = typeof params.labelA === 'string' && params.labelA ? params.labelA : aS + '~' + aE;
|
|
171
|
+
const labelB = typeof params.labelB === 'string' && params.labelB ? params.labelB : bS + '~' + bE;
|
|
172
|
+
return { kind, startA: aS, endA: aE, startB: bS, endB: bE, labelA, labelB };
|
|
173
|
+
}
|
|
174
|
+
if (kind === 'category') {
|
|
175
|
+
const { start, end } = resolveRangeParam(params);
|
|
176
|
+
const category = normalizeCategory(params.category);
|
|
177
|
+
return { kind, start, end, category };
|
|
178
|
+
}
|
|
179
|
+
if (kind === 'anomaly') {
|
|
180
|
+
const w = params.windowDays === undefined ? 7 : params.windowDays;
|
|
181
|
+
if (!Number.isInteger(w) || w < 2 || w > 90) {
|
|
182
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'windowDays 须为 2~90 的整数');
|
|
183
|
+
}
|
|
184
|
+
const end = params.end === undefined ? relativeToDate('今天') : normalizeDate(params.end, 'end');
|
|
185
|
+
return { kind, windowDays: w, end };
|
|
186
|
+
}
|
|
187
|
+
throw new SchedulePolicyError('POLICY_BAD_INPUT', 'kind 非法(期望 months/ranges/category/anomaly):' + JSON.stringify(kind));
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/policy/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function todayStr(today?: Date): string;
|
|
2
|
+
export declare function relativeToDate(expr: string, today?: Date): string;
|
|
3
|
+
export declare function relativeToRange(expr: string, today?: Date): {
|
|
4
|
+
start: string;
|
|
5
|
+
end: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function recentNDays(n: number, today?: Date): {
|
|
8
|
+
start: string;
|
|
9
|
+
end: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const RELATIVE_DATES: string[];
|
|
12
|
+
export declare const RELATIVE_RANGES: string[];
|
|
13
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/policy/routing.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAE7C;AAeD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAWjE;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAwB1F;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAInF;AAED,eAAO,MAAM,cAAc,UAA+C,CAAC;AAC3E,eAAO,MAAM,eAAe,UAAsD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// 口径层·相对时间换算(老家 scripts/routing.py 逐行对应)。
|
|
2
|
+
// 纯函数无副作用;today 参数可注入(测试钉死跨月/跨年/闰年边界)。
|
|
3
|
+
// 周一起始(中国习惯);最近 N 天含今天共 N 天。
|
|
4
|
+
export function todayStr(today) {
|
|
5
|
+
return iso(today || new Date());
|
|
6
|
+
}
|
|
7
|
+
function iso(d) {
|
|
8
|
+
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
9
|
+
const day = String(d.getDate()).padStart(2, '0');
|
|
10
|
+
return d.getFullYear() + '-' + m + '-' + day;
|
|
11
|
+
}
|
|
12
|
+
function addDays(d, n) {
|
|
13
|
+
const c = new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
14
|
+
c.setDate(c.getDate() + n);
|
|
15
|
+
return c;
|
|
16
|
+
}
|
|
17
|
+
// 7 个相对日期表达式:今天/昨天/前天/大前天/明天/后天/大后天。
|
|
18
|
+
export function relativeToDate(expr, today) {
|
|
19
|
+
const t = today || new Date();
|
|
20
|
+
const e = expr.trim();
|
|
21
|
+
if (e === '今天')
|
|
22
|
+
return iso(t);
|
|
23
|
+
if (e === '昨天')
|
|
24
|
+
return iso(addDays(t, -1));
|
|
25
|
+
if (e === '前天')
|
|
26
|
+
return iso(addDays(t, -2));
|
|
27
|
+
if (e === '大前天')
|
|
28
|
+
return iso(addDays(t, -3));
|
|
29
|
+
if (e === '明天')
|
|
30
|
+
return iso(addDays(t, 1));
|
|
31
|
+
if (e === '后天')
|
|
32
|
+
return iso(addDays(t, 2));
|
|
33
|
+
if (e === '大后天')
|
|
34
|
+
return iso(addDays(t, 3));
|
|
35
|
+
throw new Error('未知相对日期表达式:' + JSON.stringify(expr) + '(支持:今天/昨天/前天/大前天/明天/后天/大后天)');
|
|
36
|
+
}
|
|
37
|
+
// 7 个相对范围表达式:本周/这周/上周/上上周/本月/这个月/上个月/上月。
|
|
38
|
+
export function relativeToRange(expr, today) {
|
|
39
|
+
const t = today || new Date();
|
|
40
|
+
const e = expr.trim();
|
|
41
|
+
const weekday = (t.getDay() + 6) % 7; // 周一=0
|
|
42
|
+
if (e === '本周' || e === '这周') {
|
|
43
|
+
return { start: iso(addDays(t, -weekday)), end: iso(addDays(t, 6 - weekday)) };
|
|
44
|
+
}
|
|
45
|
+
if (e === '上周') {
|
|
46
|
+
return { start: iso(addDays(t, -weekday - 7)), end: iso(addDays(t, -weekday - 1)) };
|
|
47
|
+
}
|
|
48
|
+
if (e === '上上周') {
|
|
49
|
+
return { start: iso(addDays(t, -weekday - 14)), end: iso(addDays(t, -weekday - 8)) };
|
|
50
|
+
}
|
|
51
|
+
if (e === '本月' || e === '这个月') {
|
|
52
|
+
const start = new Date(t.getFullYear(), t.getMonth(), 1);
|
|
53
|
+
const end = new Date(t.getFullYear(), t.getMonth() + 1, 0);
|
|
54
|
+
return { start: iso(start), end: iso(end) };
|
|
55
|
+
}
|
|
56
|
+
if (e === '上个月' || e === '上月') {
|
|
57
|
+
const start = new Date(t.getFullYear(), t.getMonth() - 1, 1);
|
|
58
|
+
const end = new Date(t.getFullYear(), t.getMonth(), 0);
|
|
59
|
+
return { start: iso(start), end: iso(end) };
|
|
60
|
+
}
|
|
61
|
+
throw new Error('未知相对范围表达式:' + JSON.stringify(expr) + '(支持:本周/这周/上周/上上周/本月/这个月/上个月/上月)');
|
|
62
|
+
}
|
|
63
|
+
// 最近 N 天:今天-(N-1) ~ 今天(N≥1)。
|
|
64
|
+
export function recentNDays(n, today) {
|
|
65
|
+
if (!Number.isInteger(n) || n < 1)
|
|
66
|
+
throw new Error('n 必须≥1 的整数,实际 ' + String(n));
|
|
67
|
+
const t = today || new Date();
|
|
68
|
+
return { start: iso(addDays(t, -(n - 1))), end: iso(t) };
|
|
69
|
+
}
|
|
70
|
+
export const RELATIVE_DATES = ['今天', '昨天', '前天', '大前天', '明天', '后天', '大后天'];
|
|
71
|
+
export const RELATIVE_RANGES = ['本周', '这周', '上周', '上上周', '本月', '这个月', '上个月', '上月'];
|
|
72
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/policy/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ScheduleKey = 'schedule.record.today' | 'schedule.record.range' | 'schedule.record.detail' | 'schedule.record.write' | 'schedule.record.compare' | 'schedule.plan.today' | 'schedule.plan.write' | 'schedule.help.lookup';
|
|
2
|
+
export interface WakeRoute {
|
|
3
|
+
key: ScheduleKey;
|
|
4
|
+
params: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface WakeEntry {
|
|
7
|
+
phrase: string;
|
|
8
|
+
key: ScheduleKey;
|
|
9
|
+
needs?: string[];
|
|
10
|
+
preset?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export declare const WAKE_TABLE: WakeEntry[];
|
|
13
|
+
export declare function routeWakeword(text: string, ctx?: Record<string, unknown>): WakeRoute;
|
|
14
|
+
//# sourceMappingURL=wakewords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wakewords.d.ts","sourceRoot":"","sources":["../../src/policy/wakewords.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GACnB,uBAAuB,GAAG,uBAAuB,GAAG,wBAAwB,GAC5E,uBAAuB,GAAG,yBAAyB,GACnD,qBAAqB,GAAG,qBAAqB,GAC7C,sBAAsB,CAAC;AAE3B,MAAM,WAAW,SAAS;IAAG,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AACjF,MAAM,WAAW,SAAS;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAEpH,eAAO,MAAM,UAAU,EAAE,SAAS,EAyDjC,CAAC;AAKF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,SAAS,CAiBxF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// 口径层·唤醒词路由:自然语言 → 8 联动 key;最长匹配;废弃词(同步作息/作息计划表等)无命中。
|
|
2
|
+
// HELP 速查唯一上游;改这里,HELP 构建期跟进。
|
|
3
|
+
import { SchedulePolicyError } from '../fetch/errors.js';
|
|
4
|
+
export const WAKE_TABLE = [
|
|
5
|
+
// HELP(§07 契约 4 条,不在自身 HELP 展示中列出自身,查询走 lookup)。
|
|
6
|
+
{ phrase: '作息管家 HELP', key: 'schedule.help.lookup' },
|
|
7
|
+
{ phrase: '作息管家帮助', key: 'schedule.help.lookup' },
|
|
8
|
+
{ phrase: '作息管家能做什么', key: 'schedule.help.lookup' },
|
|
9
|
+
{ phrase: '作息管家使用说明', key: 'schedule.help.lookup' },
|
|
10
|
+
// record.today(#4/#6/#8/#11/#22:单日查 + 状态 + 初始化即开库验证;#43 S1 别名今日作息/今日总结/今天作息)。
|
|
11
|
+
{ phrase: '今天总结', key: 'schedule.record.today' },
|
|
12
|
+
{ phrase: '今日作息', key: 'schedule.record.today' },
|
|
13
|
+
{ phrase: '今日总结', key: 'schedule.record.today' },
|
|
14
|
+
{ phrase: '今天作息', key: 'schedule.record.today' },
|
|
15
|
+
{ phrase: '查作息时间轴', key: 'schedule.record.today' },
|
|
16
|
+
{ phrase: '查作息状态', key: 'schedule.record.today' },
|
|
17
|
+
{ phrase: '初始化数据库', key: 'schedule.record.today' },
|
|
18
|
+
{ phrase: '查作息', key: 'schedule.record.today' },
|
|
19
|
+
// record.range(#5/#9:汇总 + 范围)。
|
|
20
|
+
{ phrase: '汇总作息', key: 'schedule.record.range', needs: ['start', 'end'] },
|
|
21
|
+
{ phrase: '查作息范围', key: 'schedule.record.range', needs: ['start', 'end'] },
|
|
22
|
+
{ phrase: '查作息游标', key: 'schedule.record.range', needs: ['start', 'end'] },
|
|
23
|
+
// record.detail(#7/#23:详情 + 按 ID)。
|
|
24
|
+
{ phrase: '查作息详情', key: 'schedule.record.detail' },
|
|
25
|
+
{ phrase: '按ID查记录', key: 'schedule.record.detail', needs: ['id'] },
|
|
26
|
+
// record.write(#0/#26/#24:记 + 修正 + 写摘要)。
|
|
27
|
+
{ phrase: '补一条作息', key: 'schedule.record.write', preset: { op: 'add' } },
|
|
28
|
+
{ phrase: '录作息', key: 'schedule.record.write', preset: { op: 'add' } },
|
|
29
|
+
{ phrase: '修正作息', key: 'schedule.record.write', preset: { op: 'amend' }, needs: ['id'] },
|
|
30
|
+
{ phrase: '改作息', key: 'schedule.record.write', preset: { op: 'amend' }, needs: ['id'] },
|
|
31
|
+
{ phrase: '这条记错了', key: 'schedule.record.write', preset: { op: 'amend' }, needs: ['id'] },
|
|
32
|
+
{ phrase: '写作息摘要', key: 'schedule.record.write', preset: { op: 'summary' } },
|
|
33
|
+
{ phrase: '记作息', key: 'schedule.record.write', preset: { op: 'add' } },
|
|
34
|
+
// record.compare(#25/T4/T5:对比 + 类别深挖 + 异常)。
|
|
35
|
+
{ phrase: '对比两个月', key: 'schedule.record.compare', preset: { kind: 'months' } },
|
|
36
|
+
{ phrase: '月份对比', key: 'schedule.record.compare', preset: { kind: 'months' } },
|
|
37
|
+
{ phrase: '跨月对比', key: 'schedule.record.compare', preset: { kind: 'months' } },
|
|
38
|
+
{ phrase: '类别深挖', key: 'schedule.record.compare', preset: { kind: 'category' } },
|
|
39
|
+
{ phrase: '异常检测', key: 'schedule.record.compare', preset: { kind: 'anomaly' } },
|
|
40
|
+
// plan.today(#12/#15/#16:查日程 + 概览 + 多日)。
|
|
41
|
+
{ phrase: '查多日计划', key: 'schedule.plan.today' },
|
|
42
|
+
{ phrase: '24h 概览', key: 'schedule.plan.today' },
|
|
43
|
+
{ phrase: '查日程', key: 'schedule.plan.today' },
|
|
44
|
+
{ phrase: '看日程', key: 'schedule.plan.today' },
|
|
45
|
+
// plan.write(#13/#14/#17/#18/#19/#20/#21 + 复盘 4 粒度)。
|
|
46
|
+
{ phrase: '商量计划', key: 'schedule.plan.write', preset: { op: 'preview' } },
|
|
47
|
+
{ phrase: '一起规划', key: 'schedule.plan.write', preset: { op: 'preview' } },
|
|
48
|
+
{ phrase: '规划明天', key: 'schedule.plan.write', preset: { op: 'preview' } },
|
|
49
|
+
{ phrase: '规划一天', key: 'schedule.plan.write', preset: { op: 'preview' } },
|
|
50
|
+
{ phrase: '讨论计划', key: 'schedule.plan.write', preset: { op: 'preview' } },
|
|
51
|
+
{ phrase: '补计划', key: 'schedule.plan.write', preset: { op: 'ensure' } },
|
|
52
|
+
{ phrase: '改计划', key: 'schedule.plan.write', preset: { op: 'update' }, needs: ['id'] },
|
|
53
|
+
{ phrase: '删计划', key: 'schedule.plan.write', preset: { op: 'deactivate' }, needs: ['id'] },
|
|
54
|
+
{ phrase: '复盘今日', key: 'schedule.plan.write', preset: { op: 'review', granularity: 'day' } },
|
|
55
|
+
{ phrase: '复盘本周', key: 'schedule.plan.write', preset: { op: 'review', granularity: 'week' } },
|
|
56
|
+
{ phrase: '复盘本月', key: 'schedule.plan.write', preset: { op: 'review', granularity: 'month' } },
|
|
57
|
+
{ phrase: '复盘区间', key: 'schedule.plan.write', preset: { op: 'review', granularity: 'range' } },
|
|
58
|
+
{ phrase: '日程管家同步', key: 'schedule.plan.write', preset: { op: 'sync' } },
|
|
59
|
+
{ phrase: '飞书探测', key: 'schedule.plan.write', preset: { op: 'sync', dryRun: true } },
|
|
60
|
+
{ phrase: '复盘', key: 'schedule.plan.write', preset: { op: 'review' } },
|
|
61
|
+
];
|
|
62
|
+
// 最长匹配优先(“查作息时间轴”不落入“查作息”,“复盘今日”不落入“复盘”)。
|
|
63
|
+
const SORTED = [...WAKE_TABLE].sort((a, b) => b.phrase.length - a.phrase.length);
|
|
64
|
+
export function routeWakeword(text, ctx = {}) {
|
|
65
|
+
if (typeof text !== 'string' || text.length === 0) {
|
|
66
|
+
throw new SchedulePolicyError('POLICY_NO_MATCH', '唤醒词为空');
|
|
67
|
+
}
|
|
68
|
+
const hit = SORTED.find((e) => text.includes(e.phrase));
|
|
69
|
+
if (!hit) {
|
|
70
|
+
throw new SchedulePolicyError('POLICY_NO_MATCH', '无命中唤醒词:' + text + '(废弃词如同步作息/作息计划表不再路由;定时任务/早睡提醒等出 scope,以外置为准,HELP q 为空看全表)');
|
|
71
|
+
}
|
|
72
|
+
for (const s of hit.needs || []) {
|
|
73
|
+
if (ctx[s] === undefined || ctx[s] === null || ctx[s] === '') {
|
|
74
|
+
throw new SchedulePolicyError('POLICY_MISSING_SLOT', '缺槽位 ' + s + ':' + hit.phrase);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { key: hit.key, params: { ...(hit.preset || {}), ...pickCtx(ctx, hit.needs || []) } };
|
|
78
|
+
}
|
|
79
|
+
function pickCtx(ctx, needs) {
|
|
80
|
+
const o = {};
|
|
81
|
+
for (const k of needs)
|
|
82
|
+
o[k] = ctx[k];
|
|
83
|
+
return o;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=wakewords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wakewords.js","sourceRoot":"","sources":["../../src/policy/wakewords.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Envelope, type EnvelopeShape } from 'base-link-core';
|
|
2
|
+
export declare const SCHEDULE_KEY_SHAPES: Record<string, EnvelopeShape>;
|
|
3
|
+
export declare function scheduleShapeFor(key: string): EnvelopeShape;
|
|
4
|
+
export declare function buildScheduleEnvelope(key: string, data: unknown): Envelope;
|
|
5
|
+
export declare function parseScheduleEnvelope(input: unknown): Envelope;
|
|
6
|
+
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAmD,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAS7D,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAI3D;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAa1E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAG9D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// 渲染层·envelope:8 联动 key×shape 映射(拆分表);key 字符串后续票落表时冻结,此处只做形状分配与全字段校验。
|
|
2
|
+
import { createEnvelope, parseEnvelope, parseRegistryKey } from 'base-link-core';
|
|
3
|
+
import { ScheduleRenderError } from './errors.js';
|
|
4
|
+
export const SCHEDULE_KEY_SHAPES = {
|
|
5
|
+
'schedule.record.today': 'list',
|
|
6
|
+
'schedule.record.range': 'stat',
|
|
7
|
+
'schedule.record.detail': 'detail',
|
|
8
|
+
'schedule.record.write': 'receipt',
|
|
9
|
+
'schedule.record.compare': 'analysis',
|
|
10
|
+
'schedule.plan.today': 'list',
|
|
11
|
+
'schedule.plan.write': 'receipt',
|
|
12
|
+
'schedule.help.lookup': 'list',
|
|
13
|
+
};
|
|
14
|
+
export function scheduleShapeFor(key) {
|
|
15
|
+
const s = SCHEDULE_KEY_SHAPES[key];
|
|
16
|
+
if (!s)
|
|
17
|
+
throw new ScheduleRenderError('SCHEDULE_UNKNOWN_KEY', '未知联动 key:' + key);
|
|
18
|
+
return s;
|
|
19
|
+
}
|
|
20
|
+
// 建 envelope:key 先过命名空间,再按分配形状做全字段校验;错形状载荷即 throw。
|
|
21
|
+
export function buildScheduleEnvelope(key, data) {
|
|
22
|
+
let parsedKey = '';
|
|
23
|
+
try {
|
|
24
|
+
parsedKey = parseRegistryKey(key).key;
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
throw new ScheduleRenderError('SCHEDULE_UNKNOWN_KEY', '非法 key:' + e.message);
|
|
28
|
+
}
|
|
29
|
+
const shape = scheduleShapeFor(parsedKey);
|
|
30
|
+
if (typeof data !== 'object' || data === null || Array.isArray(data)) {
|
|
31
|
+
throw new ScheduleRenderError('SCHEDULE_BAD_PAYLOAD', '载荷须为对象:' + parsedKey);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return createEnvelope({ skill: 'schedule', shape, key: parsedKey, data: data });
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
throw new ScheduleRenderError('SCHEDULE_SHAPE_MISMATCH', shape + ' 全字段未过:' + e.message);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function parseScheduleEnvelope(input) {
|
|
41
|
+
try {
|
|
42
|
+
return parseEnvelope(input);
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
throw new ScheduleRenderError('SCHEDULE_BAD_PAYLOAD', 'envelope 非法:' + e.message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAqC,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,uBAAuB,EAAE,MAAM;IAC/B,uBAAuB,EAAE,MAAM;IAC/B,wBAAwB,EAAE,QAAQ;IAClC,uBAAuB,EAAE,SAAS;IAClC,yBAAyB,EAAE,UAAU;IACrC,qBAAqB,EAAE,MAAM;IAC7B,qBAAqB,EAAE,SAAS;IAChC,sBAAsB,EAAE,MAAM;CAC/B,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IACjF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,IAAa;IAC9D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACtG,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,EAAE,KAAK,GAAG,SAAS,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,cAAc,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare class ScheduleRenderError extends Error {
|
|
2
|
+
readonly code: 'SCHEDULE_UNKNOWN_KEY' | 'SCHEDULE_BAD_PAYLOAD' | 'SCHEDULE_SHAPE_MISMATCH' | 'SCHEDULE_TEMPLATE_MISSING' | 'SCHEDULE_MARKER_INVALID' | 'SCHEDULE_HTML_TOO_LARGE';
|
|
3
|
+
constructor(code: ScheduleRenderError['code'], message: string);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,sBAAsB,GAAG,yBAAyB,GAAG,2BAA2B,GAAG,yBAAyB,GAAG,yBAAyB,CAAC;gBACrK,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAK/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/render/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAoK;IACjL,YAAY,IAAiC,EAAE,OAAe;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Envelope } from 'base-link-core';
|
|
2
|
+
export declare const SCHEDULE_HTML_MAX_BYTES: number;
|
|
3
|
+
export declare function escapeHtml(s: string): string;
|
|
4
|
+
export declare function renderEnvelopeHtml(env: Envelope): string;
|
|
5
|
+
export declare function estimateBytes(html: string): number;
|
|
6
|
+
export declare function assertHtmlSize(html: string, max?: number): void;
|
|
7
|
+
export declare const SHARED_CSS_MARKER = "<!--SHARED-CSS-->";
|
|
8
|
+
export declare const SHARED_HELPERS_MARKER = "<!--SHARED-HELPERS-->";
|
|
9
|
+
export declare const CONTENT_MARKER = "<!--CONTENT-->";
|
|
10
|
+
export declare const SHARED_CSS = ".page{font-family:system-ui,sans-serif;max-width:720px;margin:0 auto;padding:12px}.item{border:1px solid #ddd;border-radius:8px;padding:8px;margin:8px 0}.item-head{display:flex;gap:8px;align-items:center}.badge{background:#eee;border-radius:4px;padding:0 6px}.receipt{background:#f0fff0;border:1px solid #090;border-radius:8px;padding:12px}.stat{display:flex;gap:8px}.analysis{white-space:pre-wrap}.hm-empty{color:#888}";
|
|
11
|
+
export declare const SHARED_HELPERS = "<script>function copyItem(id){var e=document.getElementById(id);if(e&&navigator.clipboard){navigator.clipboard.writeText(e.innerText);}}</script>";
|
|
12
|
+
export declare function fillTemplate(template: string, contentHtml: string): string;
|
|
13
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AA0BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAexD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA4C;AAG/F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAA0B,GAAG,IAAI,CAIhF;AAGD,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C,eAAO,MAAM,UAAU,waAAwa,CAAC;AAChc,eAAO,MAAM,cAAc,sJAAsJ,CAAC;AAElL,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAU1E"}
|