@fbdo/smart-agentic-calendar 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/README.md +195 -0
- package/dist/analytics/allocation.d.ts +9 -0
- package/dist/analytics/allocation.d.ts.map +1 -0
- package/dist/analytics/allocation.js +27 -0
- package/dist/analytics/allocation.js.map +1 -0
- package/dist/analytics/analytics-engine.d.ts +17 -0
- package/dist/analytics/analytics-engine.d.ts.map +1 -0
- package/dist/analytics/analytics-engine.js +33 -0
- package/dist/analytics/analytics-engine.js.map +1 -0
- package/dist/analytics/estimation.d.ts +9 -0
- package/dist/analytics/estimation.d.ts.map +1 -0
- package/dist/analytics/estimation.js +74 -0
- package/dist/analytics/estimation.js.map +1 -0
- package/dist/analytics/health.d.ts +14 -0
- package/dist/analytics/health.d.ts.map +1 -0
- package/dist/analytics/health.js +146 -0
- package/dist/analytics/health.js.map +1 -0
- package/dist/analytics/period.d.ts +9 -0
- package/dist/analytics/period.d.ts.map +1 -0
- package/dist/analytics/period.js +41 -0
- package/dist/analytics/period.js.map +1 -0
- package/dist/analytics/productivity.d.ts +9 -0
- package/dist/analytics/productivity.d.ts.map +1 -0
- package/dist/analytics/productivity.js +34 -0
- package/dist/analytics/productivity.js.map +1 -0
- package/dist/common/constants.d.ts +13 -0
- package/dist/common/constants.d.ts.map +1 -0
- package/dist/common/constants.js +19 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/id.d.ts +2 -0
- package/dist/common/id.d.ts.map +1 -0
- package/dist/common/id.js +5 -0
- package/dist/common/id.js.map +1 -0
- package/dist/common/time.d.ts +11 -0
- package/dist/common/time.d.ts.map +1 -0
- package/dist/common/time.js +67 -0
- package/dist/common/time.js.map +1 -0
- package/dist/engine/conflict-detector.d.ts +22 -0
- package/dist/engine/conflict-detector.d.ts.map +1 -0
- package/dist/engine/conflict-detector.js +194 -0
- package/dist/engine/conflict-detector.js.map +1 -0
- package/dist/engine/dependency-resolver.d.ts +8 -0
- package/dist/engine/dependency-resolver.d.ts.map +1 -0
- package/dist/engine/dependency-resolver.js +160 -0
- package/dist/engine/dependency-resolver.js.map +1 -0
- package/dist/engine/recurrence-manager.d.ts +24 -0
- package/dist/engine/recurrence-manager.d.ts.map +1 -0
- package/dist/engine/recurrence-manager.js +140 -0
- package/dist/engine/recurrence-manager.js.map +1 -0
- package/dist/engine/replan-coordinator.d.ts +24 -0
- package/dist/engine/replan-coordinator.d.ts.map +1 -0
- package/dist/engine/replan-coordinator.js +107 -0
- package/dist/engine/replan-coordinator.js.map +1 -0
- package/dist/engine/scheduler.d.ts +65 -0
- package/dist/engine/scheduler.d.ts.map +1 -0
- package/dist/engine/scheduler.js +368 -0
- package/dist/engine/scheduler.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +25 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +421 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/analytics-tools.d.ts +45 -0
- package/dist/mcp/tools/analytics-tools.d.ts.map +1 -0
- package/dist/mcp/tools/analytics-tools.js +27 -0
- package/dist/mcp/tools/analytics-tools.js.map +1 -0
- package/dist/mcp/tools/config-tools.d.ts +55 -0
- package/dist/mcp/tools/config-tools.d.ts.map +1 -0
- package/dist/mcp/tools/config-tools.js +47 -0
- package/dist/mcp/tools/config-tools.js.map +1 -0
- package/dist/mcp/tools/event-tools.d.ts +50 -0
- package/dist/mcp/tools/event-tools.d.ts.map +1 -0
- package/dist/mcp/tools/event-tools.js +48 -0
- package/dist/mcp/tools/event-tools.js.map +1 -0
- package/dist/mcp/tools/schedule-tools.d.ts +80 -0
- package/dist/mcp/tools/schedule-tools.d.ts.map +1 -0
- package/dist/mcp/tools/schedule-tools.js +103 -0
- package/dist/mcp/tools/schedule-tools.js.map +1 -0
- package/dist/mcp/tools/task-tools.d.ts +106 -0
- package/dist/mcp/tools/task-tools.d.ts.map +1 -0
- package/dist/mcp/tools/task-tools.js +161 -0
- package/dist/mcp/tools/task-tools.js.map +1 -0
- package/dist/mcp/validators.d.ts +231 -0
- package/dist/mcp/validators.d.ts.map +1 -0
- package/dist/mcp/validators.js +405 -0
- package/dist/mcp/validators.js.map +1 -0
- package/dist/models/analytics.d.ts +55 -0
- package/dist/models/analytics.d.ts.map +1 -0
- package/dist/models/analytics.js +2 -0
- package/dist/models/analytics.js.map +1 -0
- package/dist/models/config.d.ts +32 -0
- package/dist/models/config.d.ts.map +1 -0
- package/dist/models/config.js +2 -0
- package/dist/models/config.js.map +1 -0
- package/dist/models/conflict.d.ts +21 -0
- package/dist/models/conflict.d.ts.map +1 -0
- package/dist/models/conflict.js +2 -0
- package/dist/models/conflict.js.map +1 -0
- package/dist/models/dependency.d.ts +5 -0
- package/dist/models/dependency.d.ts.map +1 -0
- package/dist/models/dependency.js +2 -0
- package/dist/models/dependency.js.map +1 -0
- package/dist/models/errors.d.ts +19 -0
- package/dist/models/errors.d.ts.map +1 -0
- package/dist/models/errors.js +29 -0
- package/dist/models/errors.js.map +1 -0
- package/dist/models/event.d.ts +11 -0
- package/dist/models/event.d.ts.map +1 -0
- package/dist/models/event.js +2 -0
- package/dist/models/event.js.map +1 -0
- package/dist/models/recurrence.d.ts +22 -0
- package/dist/models/recurrence.d.ts.map +1 -0
- package/dist/models/recurrence.js +2 -0
- package/dist/models/recurrence.js.map +1 -0
- package/dist/models/schedule.d.ts +16 -0
- package/dist/models/schedule.d.ts.map +1 -0
- package/dist/models/schedule.js +2 -0
- package/dist/models/schedule.js.map +1 -0
- package/dist/models/task.d.ts +21 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +9 -0
- package/dist/models/task.js.map +1 -0
- package/dist/storage/analytics-repository.d.ts +17 -0
- package/dist/storage/analytics-repository.d.ts.map +1 -0
- package/dist/storage/analytics-repository.js +99 -0
- package/dist/storage/analytics-repository.js.map +1 -0
- package/dist/storage/config-repository.d.ts +20 -0
- package/dist/storage/config-repository.d.ts.map +1 -0
- package/dist/storage/config-repository.js +145 -0
- package/dist/storage/config-repository.js.map +1 -0
- package/dist/storage/database.d.ts +6 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +160 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/event-repository.d.ts +16 -0
- package/dist/storage/event-repository.d.ts.map +1 -0
- package/dist/storage/event-repository.js +120 -0
- package/dist/storage/event-repository.js.map +1 -0
- package/dist/storage/recurrence-repository.d.ts +18 -0
- package/dist/storage/recurrence-repository.d.ts.map +1 -0
- package/dist/storage/recurrence-repository.js +99 -0
- package/dist/storage/recurrence-repository.js.map +1 -0
- package/dist/storage/schedule-repository.d.ts +13 -0
- package/dist/storage/schedule-repository.d.ts.map +1 -0
- package/dist/storage/schedule-repository.js +53 -0
- package/dist/storage/schedule-repository.js.map +1 -0
- package/dist/storage/task-repository.d.ts +29 -0
- package/dist/storage/task-repository.d.ts.map +1 -0
- package/dist/storage/task-repository.js +235 -0
- package/dist/storage/task-repository.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface ProductivityStats {
|
|
2
|
+
period: "day" | "week" | "month";
|
|
3
|
+
tasksCompleted: number;
|
|
4
|
+
tasksOverdue: number;
|
|
5
|
+
tasksCancelled: number;
|
|
6
|
+
completionRate: number;
|
|
7
|
+
onTimeRate: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ScheduleHealth {
|
|
10
|
+
healthScore: number;
|
|
11
|
+
utilizationPercentage: number;
|
|
12
|
+
overdueCount: number;
|
|
13
|
+
atRiskCount: number;
|
|
14
|
+
freeHoursThisWeek: number;
|
|
15
|
+
busiestDay: string | null;
|
|
16
|
+
lightestDay: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface EstimationAccuracy {
|
|
19
|
+
averageAccuracyPercentage: number | null;
|
|
20
|
+
overestimateCount: number;
|
|
21
|
+
underestimateCount: number;
|
|
22
|
+
averageOverestimateMinutes: number | null;
|
|
23
|
+
averageUnderestimateMinutes: number | null;
|
|
24
|
+
accuracyByCategory: Record<string, number> | null;
|
|
25
|
+
}
|
|
26
|
+
export interface CategoryAllocation {
|
|
27
|
+
category: string;
|
|
28
|
+
hours: number;
|
|
29
|
+
percentage: number;
|
|
30
|
+
}
|
|
31
|
+
export interface TimeAllocation {
|
|
32
|
+
period: "day" | "week" | "month";
|
|
33
|
+
categories: CategoryAllocation[];
|
|
34
|
+
}
|
|
35
|
+
export interface CompletedTaskRecord {
|
|
36
|
+
taskId: string;
|
|
37
|
+
title: string;
|
|
38
|
+
category: string | null;
|
|
39
|
+
estimatedDuration: number;
|
|
40
|
+
actualDuration: number | null;
|
|
41
|
+
completedAt: string;
|
|
42
|
+
wasOnTime: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface DurationRecord {
|
|
45
|
+
taskId: string;
|
|
46
|
+
category: string | null;
|
|
47
|
+
estimatedMinutes: number;
|
|
48
|
+
actualMinutes: number;
|
|
49
|
+
}
|
|
50
|
+
export interface CategorySummary {
|
|
51
|
+
category: string;
|
|
52
|
+
totalMinutes: number;
|
|
53
|
+
taskCount: number;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/models/analytics.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/models/analytics.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type TaskPriority } from "./task.js";
|
|
2
|
+
export type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
3
|
+
export interface DayAvailability {
|
|
4
|
+
day: DayOfWeek;
|
|
5
|
+
startTime: string;
|
|
6
|
+
endTime: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Availability {
|
|
9
|
+
windows: DayAvailability[];
|
|
10
|
+
}
|
|
11
|
+
export interface FocusBlock {
|
|
12
|
+
day: DayOfWeek;
|
|
13
|
+
startTime: string;
|
|
14
|
+
endTime: string;
|
|
15
|
+
}
|
|
16
|
+
export interface FocusTime {
|
|
17
|
+
blocks: FocusBlock[];
|
|
18
|
+
minimumBlockMinutes: number;
|
|
19
|
+
}
|
|
20
|
+
export interface Preferences {
|
|
21
|
+
bufferTimeMinutes: number;
|
|
22
|
+
defaultPriority: TaskPriority;
|
|
23
|
+
defaultDuration: number;
|
|
24
|
+
schedulingHorizonWeeks: number;
|
|
25
|
+
minimumBlockMinutes: number;
|
|
26
|
+
}
|
|
27
|
+
export interface UserConfig {
|
|
28
|
+
availability: Availability;
|
|
29
|
+
focusTime: FocusTime;
|
|
30
|
+
preferences: Preferences;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,YAAY,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type TaskPriority } from "./task.js";
|
|
2
|
+
export type ConflictReason = "insufficient_time" | "dependency_chain" | "overdue";
|
|
3
|
+
export interface DeprioritizationSuggestion {
|
|
4
|
+
taskId: string;
|
|
5
|
+
currentPriority: TaskPriority;
|
|
6
|
+
freedMinutes: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Conflict {
|
|
9
|
+
taskId: string;
|
|
10
|
+
reason: ConflictReason;
|
|
11
|
+
deadline: string | null;
|
|
12
|
+
requiredMinutes: number;
|
|
13
|
+
availableMinutes: number;
|
|
14
|
+
competingTaskIds: string[];
|
|
15
|
+
suggestions: DeprioritizationSuggestion[];
|
|
16
|
+
}
|
|
17
|
+
export interface AtRiskTask {
|
|
18
|
+
taskId: string;
|
|
19
|
+
reason: string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=conflict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/models/conflict.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,YAAY,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,0BAA0B,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/models/conflict.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../../src/models/dependency.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.js","sourceRoot":"","sources":["../../src/models/dependency.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type ErrorCode = "VALIDATION_ERROR" | "NOT_FOUND" | "CIRCULAR_DEPENDENCY" | "INVALID_STATE";
|
|
2
|
+
export declare class AppError extends Error {
|
|
3
|
+
readonly code: ErrorCode;
|
|
4
|
+
constructor(code: ErrorCode, message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class ValidationError extends AppError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class NotFoundError extends AppError {
|
|
10
|
+
constructor(entity: string, id: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class CircularDependencyError extends AppError {
|
|
13
|
+
constructor(cyclePath: string[]);
|
|
14
|
+
}
|
|
15
|
+
export declare class InvalidStateError extends AppError {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,kBAAkB,GAAG,WAAW,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAE5F,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;gBAEpB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAED,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAGvC;AAED,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,SAAS,EAAE,MAAM,EAAE;CAGhC;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM;CAG5B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export class AppError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.name = "AppError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class ValidationError extends AppError {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super("VALIDATION_ERROR", message);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class NotFoundError extends AppError {
|
|
15
|
+
constructor(entity, id) {
|
|
16
|
+
super("NOT_FOUND", `${entity} not found: ${id}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class CircularDependencyError extends AppError {
|
|
20
|
+
constructor(cyclePath) {
|
|
21
|
+
super("CIRCULAR_DEPENDENCY", `circular dependency detected: ${cyclePath.join(" → ")}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class InvalidStateError extends AppError {
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super("INVALID_STATE", message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAY;IAEhC,YAAY,IAAe,EAAE,OAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,MAAc,EAAE,EAAU;QACpC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,eAAe,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,SAAmB;QAC7B,KAAK,CAAC,qBAAqB,EAAE,iCAAiC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/models/event.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/models/event.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Task } from "./task.js";
|
|
2
|
+
export interface RecurrenceTemplate {
|
|
3
|
+
id: string;
|
|
4
|
+
taskData: Omit<Task, "id" | "createdAt" | "updatedAt" | "status" | "actualDuration" | "isRecurring" | "recurrenceTemplateId">;
|
|
5
|
+
rrule: string;
|
|
6
|
+
isActive: boolean;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RecurrenceInstance {
|
|
10
|
+
id: string;
|
|
11
|
+
templateId: string;
|
|
12
|
+
taskId: string;
|
|
13
|
+
scheduledDate: string;
|
|
14
|
+
isException: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface RecurrenceException {
|
|
17
|
+
templateId: string;
|
|
18
|
+
date: string;
|
|
19
|
+
type: "skip" | "modify";
|
|
20
|
+
overrides: Partial<Task> | null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=recurrence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recurrence.d.ts","sourceRoot":"","sources":["../../src/models/recurrence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,IAAI,CACZ,IAAI,EACF,IAAI,GACJ,WAAW,GACX,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,aAAa,GACb,sBAAsB,CACzB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/models/recurrence.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TimeBlock {
|
|
2
|
+
id: string;
|
|
3
|
+
taskId: string;
|
|
4
|
+
startTime: string;
|
|
5
|
+
endTime: string;
|
|
6
|
+
date: string;
|
|
7
|
+
blockIndex: number;
|
|
8
|
+
totalBlocks: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ScheduleResult {
|
|
11
|
+
timeBlocks: TimeBlock[];
|
|
12
|
+
conflicts: import("./conflict.js").Conflict[];
|
|
13
|
+
atRiskTasks: import("./conflict.js").AtRiskTask[];
|
|
14
|
+
}
|
|
15
|
+
export type ScheduleStatus = "up_to_date" | "replan_in_progress";
|
|
16
|
+
//# sourceMappingURL=schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/models/schedule.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC9C,WAAW,EAAE,OAAO,eAAe,EAAE,UAAU,EAAE,CAAC;CACnD;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/models/schedule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type TaskPriority = "P1" | "P2" | "P3" | "P4";
|
|
2
|
+
export type TaskStatus = "pending" | "scheduled" | "completed" | "cancelled" | "at_risk";
|
|
3
|
+
export declare const VALID_TASK_PRIORITIES: TaskPriority[];
|
|
4
|
+
export declare const VALID_TASK_STATUSES: TaskStatus[];
|
|
5
|
+
export interface Task {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
duration: number;
|
|
10
|
+
deadline: string | null;
|
|
11
|
+
priority: TaskPriority;
|
|
12
|
+
status: TaskStatus;
|
|
13
|
+
category: string | null;
|
|
14
|
+
tags: string[];
|
|
15
|
+
isRecurring: boolean;
|
|
16
|
+
recurrenceTemplateId: string | null;
|
|
17
|
+
actualDuration: number | null;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
updatedAt: string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAEzF,eAAO,MAAM,qBAAqB,EAAE,YAAY,EAA6B,CAAC;AAE9E,eAAO,MAAM,mBAAmB,EAAE,UAAU,EAM3C,CAAC;AAEF,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,qBAAqB,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Task } from "../models/task.js";
|
|
2
|
+
import type { CompletedTaskRecord, DurationRecord, CategorySummary } from "../models/analytics.js";
|
|
3
|
+
import type { Database } from "./database.js";
|
|
4
|
+
export declare class AnalyticsRepository {
|
|
5
|
+
private readonly db;
|
|
6
|
+
constructor(db: Database);
|
|
7
|
+
getCompletedTasks(start: string, end: string): CompletedTaskRecord[];
|
|
8
|
+
getOverdueTasks(referenceTime: string): Task[];
|
|
9
|
+
getCancelledTasks(start: string, end: string): Task[];
|
|
10
|
+
getTasksByCategory(start: string, end: string): CategorySummary[];
|
|
11
|
+
getDurationRecords(start: string, end: string): DurationRecord[];
|
|
12
|
+
private rowToCompletedTaskRecord;
|
|
13
|
+
private rowToDurationRecord;
|
|
14
|
+
private rowToCategorySummary;
|
|
15
|
+
private rowToTask;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=analytics-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-repository.d.ts","sourceRoot":"","sources":["../../src/storage/analytics-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA0C9C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,EAAE,EAAE,QAAQ;IAIxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAcpE,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE;IAY9C,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE;IAYrD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE;IAiBjE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE;IAahE,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,SAAS;CAkBlB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export class AnalyticsRepository {
|
|
2
|
+
db;
|
|
3
|
+
constructor(db) {
|
|
4
|
+
this.db = db;
|
|
5
|
+
}
|
|
6
|
+
getCompletedTasks(start, end) {
|
|
7
|
+
const rows = this.db
|
|
8
|
+
.prepare(`SELECT id AS task_id, title, category, duration AS estimated_duration, actual_duration, updated_at AS completed_at,
|
|
9
|
+
CASE WHEN deadline IS NOT NULL AND updated_at <= deadline THEN 1 ELSE 0 END AS was_on_time
|
|
10
|
+
FROM tasks
|
|
11
|
+
WHERE status = 'completed' AND updated_at >= ? AND updated_at < ?
|
|
12
|
+
ORDER BY updated_at ASC`)
|
|
13
|
+
.all(start, end);
|
|
14
|
+
return rows.map((row) => this.rowToCompletedTaskRecord(row));
|
|
15
|
+
}
|
|
16
|
+
getOverdueTasks(referenceTime) {
|
|
17
|
+
const rows = this.db
|
|
18
|
+
.prepare(`SELECT * FROM tasks
|
|
19
|
+
WHERE deadline IS NOT NULL AND deadline < ? AND status NOT IN ('completed', 'cancelled')
|
|
20
|
+
ORDER BY deadline ASC`)
|
|
21
|
+
.all(referenceTime);
|
|
22
|
+
return rows.map((row) => this.rowToTask(row));
|
|
23
|
+
}
|
|
24
|
+
getCancelledTasks(start, end) {
|
|
25
|
+
const rows = this.db
|
|
26
|
+
.prepare(`SELECT * FROM tasks
|
|
27
|
+
WHERE status = 'cancelled' AND updated_at >= ? AND updated_at < ?
|
|
28
|
+
ORDER BY updated_at ASC`)
|
|
29
|
+
.all(start, end);
|
|
30
|
+
return rows.map((row) => this.rowToTask(row));
|
|
31
|
+
}
|
|
32
|
+
getTasksByCategory(start, end) {
|
|
33
|
+
const rows = this.db
|
|
34
|
+
.prepare(`SELECT
|
|
35
|
+
COALESCE(category, 'uncategorized') AS category,
|
|
36
|
+
SUM(COALESCE(actual_duration, duration)) AS total_minutes,
|
|
37
|
+
COUNT(*) AS task_count
|
|
38
|
+
FROM tasks
|
|
39
|
+
WHERE status = 'completed' AND updated_at >= ? AND updated_at < ?
|
|
40
|
+
GROUP BY COALESCE(category, 'uncategorized')
|
|
41
|
+
ORDER BY total_minutes DESC`)
|
|
42
|
+
.all(start, end);
|
|
43
|
+
return rows.map((row) => this.rowToCategorySummary(row));
|
|
44
|
+
}
|
|
45
|
+
getDurationRecords(start, end) {
|
|
46
|
+
const rows = this.db
|
|
47
|
+
.prepare(`SELECT id AS task_id, category, duration AS estimated_minutes, actual_duration AS actual_minutes
|
|
48
|
+
FROM tasks
|
|
49
|
+
WHERE status = 'completed' AND actual_duration IS NOT NULL AND updated_at >= ? AND updated_at < ?
|
|
50
|
+
ORDER BY updated_at ASC`)
|
|
51
|
+
.all(start, end);
|
|
52
|
+
return rows.map((row) => this.rowToDurationRecord(row));
|
|
53
|
+
}
|
|
54
|
+
rowToCompletedTaskRecord(row) {
|
|
55
|
+
return {
|
|
56
|
+
taskId: row.task_id,
|
|
57
|
+
title: row.title,
|
|
58
|
+
category: row.category,
|
|
59
|
+
estimatedDuration: row.estimated_duration,
|
|
60
|
+
actualDuration: row.actual_duration,
|
|
61
|
+
completedAt: row.completed_at,
|
|
62
|
+
wasOnTime: !!row.was_on_time,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
rowToDurationRecord(row) {
|
|
66
|
+
return {
|
|
67
|
+
taskId: row.task_id,
|
|
68
|
+
category: row.category,
|
|
69
|
+
estimatedMinutes: row.estimated_minutes,
|
|
70
|
+
actualMinutes: row.actual_minutes,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
rowToCategorySummary(row) {
|
|
74
|
+
return {
|
|
75
|
+
category: row.category,
|
|
76
|
+
totalMinutes: row.total_minutes,
|
|
77
|
+
taskCount: row.task_count,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
rowToTask(row) {
|
|
81
|
+
return {
|
|
82
|
+
id: row.id,
|
|
83
|
+
title: row.title,
|
|
84
|
+
description: row.description,
|
|
85
|
+
duration: row.duration,
|
|
86
|
+
deadline: row.deadline,
|
|
87
|
+
priority: row.priority,
|
|
88
|
+
status: row.status,
|
|
89
|
+
category: row.category,
|
|
90
|
+
tags: JSON.parse(row.tags),
|
|
91
|
+
isRecurring: !!row.is_recurring,
|
|
92
|
+
recurrenceTemplateId: row.recurrence_template_id,
|
|
93
|
+
actualDuration: row.actual_duration,
|
|
94
|
+
createdAt: row.created_at,
|
|
95
|
+
updatedAt: row.updated_at,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=analytics-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-repository.js","sourceRoot":"","sources":["../../src/storage/analytics-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Availability, FocusTime, Preferences, UserConfig } from "../models/config.js";
|
|
2
|
+
import type { Database } from "./database.js";
|
|
3
|
+
export declare class ConfigRepository {
|
|
4
|
+
private readonly db;
|
|
5
|
+
constructor(db: Database);
|
|
6
|
+
getAvailability(): Availability;
|
|
7
|
+
setAvailability(availability: Availability): void;
|
|
8
|
+
getFocusTime(): FocusTime;
|
|
9
|
+
setFocusTime(focusTime: FocusTime): void;
|
|
10
|
+
getPreferences(): Preferences;
|
|
11
|
+
setPreferences(preferences: Partial<Preferences>): void;
|
|
12
|
+
getFullConfig(): UserConfig;
|
|
13
|
+
private validateDayAndTime;
|
|
14
|
+
private rowToAvailabilityWindow;
|
|
15
|
+
private rowToFocusBlock;
|
|
16
|
+
private rowToDayTimeRange;
|
|
17
|
+
private parsePref;
|
|
18
|
+
private preferencesFromRows;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=config-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-repository.d.ts","sourceRoot":"","sources":["../../src/storage/config-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAIZ,SAAS,EACT,WAAW,EACX,UAAU,EACX,MAAM,qBAAqB,CAAC;AAe7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAmB9C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,EAAE,EAAE,QAAQ;IAIxB,eAAe,IAAI,YAAY;IAY/B,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAgBjD,YAAY,IAAI,SAAS;IAqBzB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAmBxC,cAAc,IAAI,WAAW;IAU7B,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IA8CvD,aAAa,IAAI,UAAU;IAQ3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,mBAAmB;CAmB5B"}
|