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.
Files changed (93) hide show
  1. package/dist/cli/cmd_read.d.ts +3 -0
  2. package/dist/cli/cmd_read.d.ts.map +1 -0
  3. package/dist/cli/cmd_read.js +312 -0
  4. package/dist/cli/cmd_read.js.map +1 -0
  5. package/dist/fetch/db.d.ts +97 -0
  6. package/dist/fetch/db.d.ts.map +1 -0
  7. package/dist/fetch/db.js +382 -0
  8. package/dist/fetch/db.js.map +1 -0
  9. package/dist/fetch/errors.d.ts +13 -0
  10. package/dist/fetch/errors.d.ts.map +1 -0
  11. package/dist/fetch/errors.js +18 -0
  12. package/dist/fetch/errors.js.map +1 -0
  13. package/dist/fetch/feishu.d.ts +36 -0
  14. package/dist/fetch/feishu.d.ts.map +1 -0
  15. package/dist/fetch/feishu.js +141 -0
  16. package/dist/fetch/feishu.js.map +1 -0
  17. package/dist/fetch/index.d.ts +7 -0
  18. package/dist/fetch/index.d.ts.map +1 -0
  19. package/dist/fetch/index.js +5 -0
  20. package/dist/fetch/index.js.map +1 -0
  21. package/dist/fetch/paths.d.ts +6 -0
  22. package/dist/fetch/paths.d.ts.map +1 -0
  23. package/dist/fetch/paths.js +31 -0
  24. package/dist/fetch/paths.js.map +1 -0
  25. package/dist/help/index.d.ts +3 -0
  26. package/dist/help/index.d.ts.map +1 -0
  27. package/dist/help/index.js +2 -0
  28. package/dist/help/index.js.map +1 -0
  29. package/dist/help/lookup.d.ts +11 -0
  30. package/dist/help/lookup.d.ts.map +1 -0
  31. package/dist/help/lookup.js +39 -0
  32. package/dist/help/lookup.js.map +1 -0
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +6 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/policy/category.d.ts +29 -0
  38. package/dist/policy/category.d.ts.map +1 -0
  39. package/dist/policy/category.js +168 -0
  40. package/dist/policy/category.js.map +1 -0
  41. package/dist/policy/index.d.ts +10 -0
  42. package/dist/policy/index.d.ts.map +1 -0
  43. package/dist/policy/index.js +6 -0
  44. package/dist/policy/index.js.map +1 -0
  45. package/dist/policy/plan.d.ts +26 -0
  46. package/dist/policy/plan.d.ts.map +1 -0
  47. package/dist/policy/plan.js +124 -0
  48. package/dist/policy/plan.js.map +1 -0
  49. package/dist/policy/record.d.ts +36 -0
  50. package/dist/policy/record.d.ts.map +1 -0
  51. package/dist/policy/record.js +189 -0
  52. package/dist/policy/record.js.map +1 -0
  53. package/dist/policy/routing.d.ts +13 -0
  54. package/dist/policy/routing.d.ts.map +1 -0
  55. package/dist/policy/routing.js +72 -0
  56. package/dist/policy/routing.js.map +1 -0
  57. package/dist/policy/wakewords.d.ts +14 -0
  58. package/dist/policy/wakewords.d.ts.map +1 -0
  59. package/dist/policy/wakewords.js +85 -0
  60. package/dist/policy/wakewords.js.map +1 -0
  61. package/dist/render/envelope.d.ts +6 -0
  62. package/dist/render/envelope.d.ts.map +1 -0
  63. package/dist/render/envelope.js +48 -0
  64. package/dist/render/envelope.js.map +1 -0
  65. package/dist/render/errors.d.ts +5 -0
  66. package/dist/render/errors.d.ts.map +1 -0
  67. package/dist/render/errors.js +9 -0
  68. package/dist/render/errors.js.map +1 -0
  69. package/dist/render/html.d.ts +13 -0
  70. package/dist/render/html.d.ts.map +1 -0
  71. package/dist/render/html.js +68 -0
  72. package/dist/render/html.js.map +1 -0
  73. package/dist/render/index.d.ts +8 -0
  74. package/dist/render/index.d.ts.map +1 -0
  75. package/dist/render/index.js +6 -0
  76. package/dist/render/index.js.map +1 -0
  77. package/dist/render/templates.d.ts +5 -0
  78. package/dist/render/templates.d.ts.map +1 -0
  79. package/dist/render/templates.js +42 -0
  80. package/dist/render/templates.js.map +1 -0
  81. package/dist/render/views.d.ts +78 -0
  82. package/dist/render/views.d.ts.map +1 -0
  83. package/dist/render/views.js +145 -0
  84. package/dist/render/views.js.map +1 -0
  85. package/package.json +32 -0
  86. package/templates/help.html +16 -0
  87. package/templates/plan_day.html +16 -0
  88. package/templates/plan_receipt.html +16 -0
  89. package/templates/record_compare.html +16 -0
  90. package/templates/record_day.html +16 -0
  91. package/templates/record_detail.html +16 -0
  92. package/templates/record_range.html +16 -0
  93. package/templates/record_receipt.html +16 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cmd_read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd_read.d.ts","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":""}
@@ -0,0 +1,312 @@
1
+ #!/usr/bin/env node
2
+ // 作息管家唯一出口 cmd_read:argv+JSON(stdout)+exit;非 0 走 stderr;超时 terminate+TOAST 降级标记。
3
+ // 退出码对齐 skilllink 冻结:0 ok;1 预检;2 用法/参数;3 key;4 取数/超时;5 envelope/渲染/落盘。
4
+ // stdout 纯净:成功只打 envelope JSON 一行。
5
+ import { writeFileSync } from 'node:fs';
6
+ import { ScheduleFetchError, SchedulePolicyError, resolveDbPath, openScheduleDb, closeScheduleDb, listRecordsByDate, listRecordsRange, getRecordById, getStatus, addRecord, amendRecord, addSummary, listPlanEvents, getPlanEventsRange, searchPlanEvent, ensurePlanEvent, upsertPlanEvents, updatePlanEvent, deactivatePlanEvent, setFeishuEventId, larkReady, searchFeishuEvents, createFeishuEvent, updateFeishuEvent, } from '../fetch/index.js';
7
+ import { resolveDateParam, resolveRangeParam, validateAddInput, validateAmendInput, validateSummaryInput, validateCompareInput, normalizeDate, validateUpsertInput, validateEnsureInput, validateUpdateInput, parsePlanOp, parseRecordOp, VALID_COMPLETIONS, l1Of, toMinutes, } from '../policy/index.js';
8
+ import { scheduleShapeFor, buildScheduleEnvelope, renderEnvelopeHtml, assertHtmlSize, loadTemplate, templateFor, fillTemplate, buildRecordToday, buildRecordRange, buildRecordDetail, buildRecordReceipt, buildRecordCompare, buildCategoryDeep, buildAnomaly, buildPlanToday, buildPlanReceipt, buildHelpItems, ScheduleRenderError, } from '../render/index.js';
9
+ import { buildHelpLookup } from '../help/index.js';
10
+ const DEFAULT_TIMEOUT_MS = 30000;
11
+ function fail(code, msg) { console.error('ERR ' + code + ': ' + msg); process.exit(code); }
12
+ function toast(msg) { console.error('TOAST: ' + msg); }
13
+ function note(msg) { console.error('NOTE: ' + msg); }
14
+ function preflight() {
15
+ const v = process.versions.node.split('.').map(Number);
16
+ if (!(v[0] > 22 || (v[0] === 22 && v[1] >= 13)))
17
+ fail(1, 'node 低于 22.13:' + process.versions.node);
18
+ const p = process.env.SKILLS_DB_PATH;
19
+ if (!p)
20
+ fail(1, 'SKILLS_DB_PATH 未设置(无默认值,必设)');
21
+ return p;
22
+ }
23
+ function needInt(params, name) {
24
+ const v = params[name];
25
+ if (!Number.isInteger(v) || v <= 0)
26
+ fail(2, '缺参数 ' + name + '(须为正整数)');
27
+ return v;
28
+ }
29
+ function monthRange(month) {
30
+ const [y, m] = month.split('-').map(Number);
31
+ const last = new Date(y, m, 0).getDate();
32
+ const dd = String(last).padStart(2, '0');
33
+ return { start: month + '-01', end: month + '-' + dd };
34
+ }
35
+ function toISODateTime(date, time) {
36
+ return date + 'T' + time + ':00';
37
+ }
38
+ function dispatch(key, params) {
39
+ const dbPath = resolveDbPath();
40
+ const handle = openScheduleDb(dbPath);
41
+ try {
42
+ if (handle.initialized)
43
+ note('作息 DB 已初始化:' + dbPath);
44
+ switch (key) {
45
+ case 'schedule.record.today': {
46
+ const date = resolveDateParam(params);
47
+ const records = listRecordsByDate(handle, date);
48
+ const st = getStatus(handle);
49
+ if (st.records === 0)
50
+ note('库空:真实无记录(非故障)');
51
+ return buildRecordToday(date, records);
52
+ }
53
+ case 'schedule.record.range': {
54
+ const { start, end } = resolveRangeParam(params);
55
+ const records = listRecordsRange(handle, start, end);
56
+ if (!records.length) {
57
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '区间无记录:' + start + '~' + end + '(缺失阻断,不返空统计)');
58
+ }
59
+ return buildRecordRange(start, end, records);
60
+ }
61
+ case 'schedule.record.detail': {
62
+ if (params.id !== undefined)
63
+ return buildRecordDetail(getRecordById(handle, needInt(params, 'id')));
64
+ const date = resolveDateParam(params);
65
+ const records = listRecordsByDate(handle, date);
66
+ if (!records.length)
67
+ throw new ScheduleFetchError('SCHEDULE_RECORD_NOT_FOUND', '当日无记录:' + date);
68
+ return buildRecordDetail(records[0]);
69
+ }
70
+ case 'schedule.record.write': {
71
+ const op = parseRecordOp(params);
72
+ if (op === 'add') {
73
+ const input = validateAddInput(params);
74
+ const r = addRecord(handle, input);
75
+ return buildRecordReceipt('已记一条:' + r.id + '(' + r.date + ' ' + r.time_start + '~' + r.time_end + ' ' + r.category + ')');
76
+ }
77
+ if (op === 'amend') {
78
+ const { id, patch } = validateAmendInput(params);
79
+ const r = amendRecord(handle, id, patch);
80
+ return buildRecordReceipt('已修正:' + r.id + '(edit_count=' + r.edit_count + ')');
81
+ }
82
+ const s = validateSummaryInput(params);
83
+ addSummary(handle, s.date, s.category, s.totalMinutes);
84
+ return buildRecordReceipt('已写摘要:' + s.date + ' ' + s.category + '=' + s.totalMinutes + '分钟');
85
+ }
86
+ case 'schedule.record.compare': {
87
+ const c = validateCompareInput(params);
88
+ if (c.kind === 'months') {
89
+ const ra = monthRange(c.monthA);
90
+ const rb = monthRange(c.monthB);
91
+ const a = listRecordsRange(handle, ra.start, ra.end);
92
+ const b = listRecordsRange(handle, rb.start, rb.end);
93
+ if (!a.length || !b.length) {
94
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据:' + c.monthA + '(' + a.length + '块)/' + c.monthB + '(' + b.length + '块)');
95
+ }
96
+ return buildRecordCompare({ labelA: c.monthA, labelB: c.monthB, a, b });
97
+ }
98
+ if (c.kind === 'ranges') {
99
+ const a = listRecordsRange(handle, c.startA, c.endA);
100
+ const b = listRecordsRange(handle, c.startB, c.endB);
101
+ if (!a.length || !b.length)
102
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '对比缺数据(两侧均须有记录)');
103
+ return buildRecordCompare({ labelA: c.labelA, labelB: c.labelB, a, b });
104
+ }
105
+ if (c.kind === 'category') {
106
+ const records = listRecordsRange(handle, c.start, c.end);
107
+ if (!records.length)
108
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '区间无记录:' + c.start + '~' + c.end);
109
+ return buildCategoryDeep(c.start, c.end, c.category, records);
110
+ }
111
+ const w = c.windowDays;
112
+ const end = c.end;
113
+ const d = new Date(end + 'T00:00:00');
114
+ d.setDate(d.getDate() - (w - 1));
115
+ const start = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');
116
+ const records = listRecordsRange(handle, start, end);
117
+ if (!records.length)
118
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '窗口无记录:' + start + '~' + end);
119
+ const byDay = new Map();
120
+ for (const r of records) {
121
+ const m = byDay.get(r.date) || {};
122
+ const k = l1Of(r.category);
123
+ m[k] = (m[k] || 0) + (r.duration_minutes || 0);
124
+ byDay.set(r.date, m);
125
+ }
126
+ const daily = [...byDay.entries()].sort().map(([date, byL1]) => ({ date, byL1 }));
127
+ return buildAnomaly(end, w, daily);
128
+ }
129
+ case 'schedule.plan.today': {
130
+ if (typeof params.title === 'string' && params.title.trim()) {
131
+ const date = resolveDateParam(params);
132
+ const hits = searchPlanEvent(handle, date, params.title.trim(), params.time_start, params.time_end);
133
+ return buildPlanToday(date, hits);
134
+ }
135
+ if (Array.isArray(params.dates) && params.dates.length) {
136
+ const dates = params.dates.map((x) => normalizeDate(x, 'dates[]'));
137
+ const lo = [...dates].sort()[0];
138
+ const hi = [...dates].sort()[dates.length - 1];
139
+ const all = getPlanEventsRange(handle, lo, hi).filter((e) => dates.includes(e.date));
140
+ return { items: all.map((e) => buildPlanToday(e.date, [e]).items[0]), total: all.length, date: lo + '~' + hi };
141
+ }
142
+ const date = resolveDateParam(params);
143
+ return buildPlanToday(date, listPlanEvents(handle, date));
144
+ }
145
+ case 'schedule.plan.write': {
146
+ const op = parsePlanOp(params);
147
+ if (op === 'preview') {
148
+ const { date, events } = validateUpsertInput(params);
149
+ return buildPlanReceipt('预览通过:' + date + ' ' + events.length + ' 个事件 00:00~24:00 连续(确认后 op=upsert 落盘)');
150
+ }
151
+ if (op === 'upsert') {
152
+ const { date, events } = validateUpsertInput(params);
153
+ const out = upsertPlanEvents(handle, date, events);
154
+ return buildPlanReceipt('已落盘:' + date + ' ' + out.length + ' 个事件');
155
+ }
156
+ if (op === 'ensure') {
157
+ const input = validateEnsureInput(params);
158
+ const { event, created } = ensurePlanEvent(handle, input);
159
+ return buildPlanReceipt(created ? '已补计划:' + event.id : '已存在(幂等未重复):' + event.id);
160
+ }
161
+ if (op === 'update') {
162
+ const { id, patch } = validateUpdateInput(params);
163
+ if (patch.time_start !== undefined && patch.time_end !== undefined) {
164
+ if (toMinutes(patch.time_end) <= toMinutes(patch.time_start)) {
165
+ throw new SchedulePolicyError('POLICY_BAD_TIME', 'time_end 必须晚于 time_start');
166
+ }
167
+ }
168
+ updatePlanEvent(handle, id, patch);
169
+ return buildPlanReceipt('已改计划:' + id);
170
+ }
171
+ if (op === 'deactivate') {
172
+ const id = needInt(params, 'id');
173
+ deactivatePlanEvent(handle, id);
174
+ return buildPlanReceipt('已删计划(软删):' + id);
175
+ }
176
+ if (op === 'review') {
177
+ const { start, end } = params.granularity === 'range' || params.start !== undefined
178
+ ? resolveRangeParam(params)
179
+ : { start: resolveDateParam(params), end: resolveDateParam(params) };
180
+ const events = getPlanEventsRange(handle, start, end);
181
+ if (!events.length)
182
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '复盘无日程:' + start + '~' + end);
183
+ const counts = {};
184
+ for (const e of events)
185
+ counts[e.completion || '未复盘'] = (counts[e.completion || '未复盘'] || 0) + 1;
186
+ const parts = VALID_COMPLETIONS.filter((k) => counts[k]).map((k) => k + counts[k]);
187
+ return buildPlanReceipt('已复盘 ' + start + '~' + end + ':' + events.length + ' 个事件(' + parts.join('、') + ')');
188
+ }
189
+ // op === 'sync':飞书四门 + diff(local 无飞书 id→create,有→update;dryRun 只报数)。
190
+ const gate = larkReady();
191
+ const date = resolveDateParam(params);
192
+ const events = listPlanEvents(handle, date, true).filter((e) => e.is_active === 1);
193
+ if (params.dryRun === true) {
194
+ return buildPlanReceipt('飞书就绪:' + gate.openId + '(dryRun 未同步;' + date + ' 待比 ' + events.length + ' 个事件)');
195
+ }
196
+ let created = 0;
197
+ let updated = 0;
198
+ try {
199
+ searchFeishuEvents(gate.cliPath, date, date);
200
+ }
201
+ catch (e) {
202
+ throw new ScheduleFetchError('SCHEDULE_EMPTY_RANGE', '飞书查询失败:' + e.message);
203
+ }
204
+ for (const e of events) {
205
+ const s = toISODateTime(e.date, e.time_start);
206
+ const t = toISODateTime(e.date, e.time_end);
207
+ if (!e.feishu_event_id) {
208
+ const r = createFeishuEvent(gate.cliPath, s, t, e.title, e.notes || '');
209
+ const fid = typeof r.eventId === 'string' ? r.eventId : typeof r.id === 'string' ? r.id : null;
210
+ setFeishuEventId(handle, e.id, fid);
211
+ created++;
212
+ }
213
+ else {
214
+ updateFeishuEvent(gate.cliPath, e.feishu_event_id, s, t, e.title);
215
+ setFeishuEventId(handle, e.id, e.feishu_event_id);
216
+ updated++;
217
+ }
218
+ }
219
+ return buildPlanReceipt('已同步 ' + date + ':新建' + created + ' 更新' + updated + '(' + gate.openId + ')');
220
+ }
221
+ case 'schedule.help.lookup': {
222
+ const q = typeof params.q === 'string' ? params.q : undefined;
223
+ const all = buildHelpLookup().map((h) => ({ phrase: h.phrase, key: h.key, shape: h.shape, cli: h.cli, desc: h.desc }));
224
+ return buildHelpItems(all, q);
225
+ }
226
+ default:
227
+ fail(3, '未知 schedule key:' + key);
228
+ return null;
229
+ }
230
+ }
231
+ finally {
232
+ closeScheduleDb(handle);
233
+ }
234
+ }
235
+ function parseArgs(a) {
236
+ const o = { key: a[0], params: undefined, html: undefined, timeout: DEFAULT_TIMEOUT_MS };
237
+ for (let i = 1; i < a.length; i++) {
238
+ if (a[i] === '--params' && i + 1 < a.length)
239
+ o.params = a[++i];
240
+ else if (a[i] === '--html' && i + 1 < a.length)
241
+ o.html = a[++i];
242
+ else if (a[i] === '--timeout' && i + 1 < a.length) {
243
+ o.timeout = Number(a[++i]);
244
+ if (!Number.isFinite(o.timeout) || o.timeout <= 0)
245
+ fail(2, '--timeout 须为正数毫秒');
246
+ }
247
+ else
248
+ fail(2, '未知参数:' + a[i]);
249
+ }
250
+ return o;
251
+ }
252
+ async function main() {
253
+ const o = parseArgs(process.argv.slice(2));
254
+ if (!o.key)
255
+ fail(2, '用法:schedule-cmd-read <schedule.key> [--params JSON对象] [--html 输出路径] [--timeout 毫秒]');
256
+ preflight();
257
+ let params = {};
258
+ if (o.params !== undefined) {
259
+ try {
260
+ params = JSON.parse(o.params);
261
+ }
262
+ catch (e) {
263
+ fail(2, '--params 须为 JSON');
264
+ }
265
+ if (typeof params !== 'object' || params === null || Array.isArray(params))
266
+ fail(2, '--params 须为 JSON 对象');
267
+ }
268
+ try {
269
+ scheduleShapeFor(o.key);
270
+ }
271
+ catch (e) {
272
+ fail(3, e.message);
273
+ }
274
+ const key = o.key;
275
+ const timer = setTimeout(() => {
276
+ toast('cmd_read 超时 terminate(' + o.timeout + 'ms),已终止取数');
277
+ process.exit(4);
278
+ }, o.timeout);
279
+ if (typeof timer.unref === 'function')
280
+ timer.unref();
281
+ try {
282
+ const data = dispatch(key, params);
283
+ const env = buildScheduleEnvelope(key, data);
284
+ if (o.html !== undefined) {
285
+ try {
286
+ const html = fillTemplate(loadTemplate(templateFor(key)), renderEnvelopeHtml(env));
287
+ assertHtmlSize(html);
288
+ writeFileSync(o.html, html, 'utf8');
289
+ note('HTML 已写:' + o.html + '(utf8)');
290
+ }
291
+ catch (e) {
292
+ if (e instanceof ScheduleRenderError)
293
+ fail(5, e.message);
294
+ fail(5, 'HTML 写盘失败:' + o.html + '(' + e.message + ')');
295
+ }
296
+ }
297
+ process.stdout.write(JSON.stringify(env) + '\n');
298
+ clearTimeout(timer);
299
+ }
300
+ catch (e) {
301
+ clearTimeout(timer);
302
+ if (e instanceof SchedulePolicyError)
303
+ fail(2, e.message);
304
+ if (e instanceof ScheduleFetchError)
305
+ fail(4, e.message);
306
+ if (e instanceof ScheduleRenderError)
307
+ fail(5, e.message);
308
+ fail(4, '取数失败:' + e.message);
309
+ }
310
+ }
311
+ void main();
312
+ //# sourceMappingURL=cmd_read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd_read.js","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ export declare const SCHEMA_VERSION = 1;
3
+ export interface ScheduleRecord {
4
+ id: number;
5
+ date: string;
6
+ time_start: string;
7
+ time_end: string;
8
+ duration_minutes: number | null;
9
+ activity: string;
10
+ category: string;
11
+ source_contents: string | null;
12
+ source_timestamps: string | null;
13
+ analysis_reasoning: string | null;
14
+ created_at: string;
15
+ updated_at: string;
16
+ edit_count: number;
17
+ }
18
+ export interface DailySummary {
19
+ date: string;
20
+ category: string;
21
+ total_minutes: number;
22
+ }
23
+ export interface PlanEvent {
24
+ id: number;
25
+ date: string;
26
+ time_start: string;
27
+ time_end: string;
28
+ title: string;
29
+ notes: string | null;
30
+ category: string | null;
31
+ feishu_event_id: string | null;
32
+ last_synced_at: string | null;
33
+ is_active: number;
34
+ completion: string | null;
35
+ completion_note: string | null;
36
+ created_at: string;
37
+ updated_at: string;
38
+ }
39
+ export interface ScheduleDb {
40
+ db: DatabaseSync;
41
+ path: string;
42
+ /** 本次 open 是否新建了表(初始化语义,供 #22 初始化回执)。 */
43
+ initialized: boolean;
44
+ }
45
+ export declare function openScheduleDb(dbPath: string): ScheduleDb;
46
+ export declare function closeScheduleDb(handle: ScheduleDb): void;
47
+ export declare function addRecord(handle: ScheduleDb, input: {
48
+ date: string;
49
+ time_start: string;
50
+ time_end: string;
51
+ duration_minutes: number;
52
+ activity: string;
53
+ category: string;
54
+ source_contents?: string | null;
55
+ source_timestamps?: string | null;
56
+ analysis_reasoning?: string | null;
57
+ }): ScheduleRecord;
58
+ export declare function amendRecord(handle: ScheduleDb, id: number, patch: Partial<ScheduleRecord>): ScheduleRecord;
59
+ export declare function getRecordById(handle: ScheduleDb, id: number): ScheduleRecord;
60
+ export declare function listRecordsByDate(handle: ScheduleDb, date: string): ScheduleRecord[];
61
+ export declare function listRecordsRange(handle: ScheduleDb, start: string, end: string): ScheduleRecord[];
62
+ export declare function getLastRecord(handle: ScheduleDb): ScheduleRecord | null;
63
+ export declare function getStatus(handle: ScheduleDb): {
64
+ records: number;
65
+ days: number;
66
+ firstDate: string | null;
67
+ lastDate: string | null;
68
+ };
69
+ export declare function addSummary(handle: ScheduleDb, date: string, category: string, totalMinutes: number): DailySummary;
70
+ export declare function getDailySummary(handle: ScheduleDb, date: string): DailySummary[];
71
+ export declare function getSummariesRange(handle: ScheduleDb, start: string, end: string): DailySummary[];
72
+ export declare function listPlanEvents(handle: ScheduleDb, date: string, includeInactive?: boolean): PlanEvent[];
73
+ export declare function getPlanEventsRange(handle: ScheduleDb, start: string, end: string): PlanEvent[];
74
+ export declare function getPlanEvent(handle: ScheduleDb, id: number): PlanEvent;
75
+ export declare function searchPlanEvent(handle: ScheduleDb, date: string, title: string, timeStart?: string, timeEnd?: string): PlanEvent[];
76
+ export declare function ensurePlanEvent(handle: ScheduleDb, input: {
77
+ date: string;
78
+ time_start: string;
79
+ time_end: string;
80
+ title: string;
81
+ notes?: string | null;
82
+ category?: string | null;
83
+ }): {
84
+ event: PlanEvent;
85
+ created: boolean;
86
+ };
87
+ export declare function upsertPlanEvents(handle: ScheduleDb, date: string, events: {
88
+ time_start: string;
89
+ time_end: string;
90
+ title: string;
91
+ notes?: string | null;
92
+ category?: string | null;
93
+ }[]): PlanEvent[];
94
+ export declare function updatePlanEvent(handle: ScheduleDb, id: number, patch: Partial<PlanEvent>): PlanEvent;
95
+ export declare function deactivatePlanEvent(handle: ScheduleDb, id: number): PlanEvent;
96
+ export declare function setFeishuEventId(handle: ScheduleDb, id: number, feishuEventId: string | null): void;
97
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/fetch/db.ts"],"names":[],"mappings":"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"}