@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.
Files changed (154) hide show
  1. package/README.md +195 -0
  2. package/dist/analytics/allocation.d.ts +9 -0
  3. package/dist/analytics/allocation.d.ts.map +1 -0
  4. package/dist/analytics/allocation.js +27 -0
  5. package/dist/analytics/allocation.js.map +1 -0
  6. package/dist/analytics/analytics-engine.d.ts +17 -0
  7. package/dist/analytics/analytics-engine.d.ts.map +1 -0
  8. package/dist/analytics/analytics-engine.js +33 -0
  9. package/dist/analytics/analytics-engine.js.map +1 -0
  10. package/dist/analytics/estimation.d.ts +9 -0
  11. package/dist/analytics/estimation.d.ts.map +1 -0
  12. package/dist/analytics/estimation.js +74 -0
  13. package/dist/analytics/estimation.js.map +1 -0
  14. package/dist/analytics/health.d.ts +14 -0
  15. package/dist/analytics/health.d.ts.map +1 -0
  16. package/dist/analytics/health.js +146 -0
  17. package/dist/analytics/health.js.map +1 -0
  18. package/dist/analytics/period.d.ts +9 -0
  19. package/dist/analytics/period.d.ts.map +1 -0
  20. package/dist/analytics/period.js +41 -0
  21. package/dist/analytics/period.js.map +1 -0
  22. package/dist/analytics/productivity.d.ts +9 -0
  23. package/dist/analytics/productivity.d.ts.map +1 -0
  24. package/dist/analytics/productivity.js +34 -0
  25. package/dist/analytics/productivity.js.map +1 -0
  26. package/dist/common/constants.d.ts +13 -0
  27. package/dist/common/constants.d.ts.map +1 -0
  28. package/dist/common/constants.js +19 -0
  29. package/dist/common/constants.js.map +1 -0
  30. package/dist/common/id.d.ts +2 -0
  31. package/dist/common/id.d.ts.map +1 -0
  32. package/dist/common/id.js +5 -0
  33. package/dist/common/id.js.map +1 -0
  34. package/dist/common/time.d.ts +11 -0
  35. package/dist/common/time.d.ts.map +1 -0
  36. package/dist/common/time.js +67 -0
  37. package/dist/common/time.js.map +1 -0
  38. package/dist/engine/conflict-detector.d.ts +22 -0
  39. package/dist/engine/conflict-detector.d.ts.map +1 -0
  40. package/dist/engine/conflict-detector.js +194 -0
  41. package/dist/engine/conflict-detector.js.map +1 -0
  42. package/dist/engine/dependency-resolver.d.ts +8 -0
  43. package/dist/engine/dependency-resolver.d.ts.map +1 -0
  44. package/dist/engine/dependency-resolver.js +160 -0
  45. package/dist/engine/dependency-resolver.js.map +1 -0
  46. package/dist/engine/recurrence-manager.d.ts +24 -0
  47. package/dist/engine/recurrence-manager.d.ts.map +1 -0
  48. package/dist/engine/recurrence-manager.js +140 -0
  49. package/dist/engine/recurrence-manager.js.map +1 -0
  50. package/dist/engine/replan-coordinator.d.ts +24 -0
  51. package/dist/engine/replan-coordinator.d.ts.map +1 -0
  52. package/dist/engine/replan-coordinator.js +107 -0
  53. package/dist/engine/replan-coordinator.js.map +1 -0
  54. package/dist/engine/scheduler.d.ts +65 -0
  55. package/dist/engine/scheduler.d.ts.map +1 -0
  56. package/dist/engine/scheduler.js +368 -0
  57. package/dist/engine/scheduler.js.map +1 -0
  58. package/dist/index.d.ts +19 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +69 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/mcp/server.d.ts +25 -0
  63. package/dist/mcp/server.d.ts.map +1 -0
  64. package/dist/mcp/server.js +421 -0
  65. package/dist/mcp/server.js.map +1 -0
  66. package/dist/mcp/tools/analytics-tools.d.ts +45 -0
  67. package/dist/mcp/tools/analytics-tools.d.ts.map +1 -0
  68. package/dist/mcp/tools/analytics-tools.js +27 -0
  69. package/dist/mcp/tools/analytics-tools.js.map +1 -0
  70. package/dist/mcp/tools/config-tools.d.ts +55 -0
  71. package/dist/mcp/tools/config-tools.d.ts.map +1 -0
  72. package/dist/mcp/tools/config-tools.js +47 -0
  73. package/dist/mcp/tools/config-tools.js.map +1 -0
  74. package/dist/mcp/tools/event-tools.d.ts +50 -0
  75. package/dist/mcp/tools/event-tools.d.ts.map +1 -0
  76. package/dist/mcp/tools/event-tools.js +48 -0
  77. package/dist/mcp/tools/event-tools.js.map +1 -0
  78. package/dist/mcp/tools/schedule-tools.d.ts +80 -0
  79. package/dist/mcp/tools/schedule-tools.d.ts.map +1 -0
  80. package/dist/mcp/tools/schedule-tools.js +103 -0
  81. package/dist/mcp/tools/schedule-tools.js.map +1 -0
  82. package/dist/mcp/tools/task-tools.d.ts +106 -0
  83. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  84. package/dist/mcp/tools/task-tools.js +161 -0
  85. package/dist/mcp/tools/task-tools.js.map +1 -0
  86. package/dist/mcp/validators.d.ts +231 -0
  87. package/dist/mcp/validators.d.ts.map +1 -0
  88. package/dist/mcp/validators.js +405 -0
  89. package/dist/mcp/validators.js.map +1 -0
  90. package/dist/models/analytics.d.ts +55 -0
  91. package/dist/models/analytics.d.ts.map +1 -0
  92. package/dist/models/analytics.js +2 -0
  93. package/dist/models/analytics.js.map +1 -0
  94. package/dist/models/config.d.ts +32 -0
  95. package/dist/models/config.d.ts.map +1 -0
  96. package/dist/models/config.js +2 -0
  97. package/dist/models/config.js.map +1 -0
  98. package/dist/models/conflict.d.ts +21 -0
  99. package/dist/models/conflict.d.ts.map +1 -0
  100. package/dist/models/conflict.js +2 -0
  101. package/dist/models/conflict.js.map +1 -0
  102. package/dist/models/dependency.d.ts +5 -0
  103. package/dist/models/dependency.d.ts.map +1 -0
  104. package/dist/models/dependency.js +2 -0
  105. package/dist/models/dependency.js.map +1 -0
  106. package/dist/models/errors.d.ts +19 -0
  107. package/dist/models/errors.d.ts.map +1 -0
  108. package/dist/models/errors.js +29 -0
  109. package/dist/models/errors.js.map +1 -0
  110. package/dist/models/event.d.ts +11 -0
  111. package/dist/models/event.d.ts.map +1 -0
  112. package/dist/models/event.js +2 -0
  113. package/dist/models/event.js.map +1 -0
  114. package/dist/models/recurrence.d.ts +22 -0
  115. package/dist/models/recurrence.d.ts.map +1 -0
  116. package/dist/models/recurrence.js +2 -0
  117. package/dist/models/recurrence.js.map +1 -0
  118. package/dist/models/schedule.d.ts +16 -0
  119. package/dist/models/schedule.d.ts.map +1 -0
  120. package/dist/models/schedule.js +2 -0
  121. package/dist/models/schedule.js.map +1 -0
  122. package/dist/models/task.d.ts +21 -0
  123. package/dist/models/task.d.ts.map +1 -0
  124. package/dist/models/task.js +9 -0
  125. package/dist/models/task.js.map +1 -0
  126. package/dist/storage/analytics-repository.d.ts +17 -0
  127. package/dist/storage/analytics-repository.d.ts.map +1 -0
  128. package/dist/storage/analytics-repository.js +99 -0
  129. package/dist/storage/analytics-repository.js.map +1 -0
  130. package/dist/storage/config-repository.d.ts +20 -0
  131. package/dist/storage/config-repository.d.ts.map +1 -0
  132. package/dist/storage/config-repository.js +145 -0
  133. package/dist/storage/config-repository.js.map +1 -0
  134. package/dist/storage/database.d.ts +6 -0
  135. package/dist/storage/database.d.ts.map +1 -0
  136. package/dist/storage/database.js +160 -0
  137. package/dist/storage/database.js.map +1 -0
  138. package/dist/storage/event-repository.d.ts +16 -0
  139. package/dist/storage/event-repository.d.ts.map +1 -0
  140. package/dist/storage/event-repository.js +120 -0
  141. package/dist/storage/event-repository.js.map +1 -0
  142. package/dist/storage/recurrence-repository.d.ts +18 -0
  143. package/dist/storage/recurrence-repository.d.ts.map +1 -0
  144. package/dist/storage/recurrence-repository.js +99 -0
  145. package/dist/storage/recurrence-repository.js.map +1 -0
  146. package/dist/storage/schedule-repository.d.ts +13 -0
  147. package/dist/storage/schedule-repository.d.ts.map +1 -0
  148. package/dist/storage/schedule-repository.js +53 -0
  149. package/dist/storage/schedule-repository.js.map +1 -0
  150. package/dist/storage/task-repository.d.ts +29 -0
  151. package/dist/storage/task-repository.d.ts.map +1 -0
  152. package/dist/storage/task-repository.js +235 -0
  153. package/dist/storage/task-repository.js.map +1 -0
  154. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analytics.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/models/conflict.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface DependencyEdge {
2
+ taskId: string;
3
+ dependsOnId: string;
4
+ }
5
+ //# sourceMappingURL=dependency.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dependency.js.map
@@ -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,11 @@
1
+ export interface Event {
2
+ id: string;
3
+ title: string;
4
+ startTime: string | null;
5
+ endTime: string | null;
6
+ isAllDay: boolean;
7
+ date: string | null;
8
+ createdAt: string;
9
+ updatedAt: string;
10
+ }
11
+ //# sourceMappingURL=event.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recurrence.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schedule.js.map
@@ -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,9 @@
1
+ export const VALID_TASK_PRIORITIES = ["P1", "P2", "P3", "P4"];
2
+ export const VALID_TASK_STATUSES = [
3
+ "pending",
4
+ "scheduled",
5
+ "completed",
6
+ "cancelled",
7
+ "at_risk",
8
+ ];
9
+ //# sourceMappingURL=task.js.map
@@ -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":"AA4CA,MAAM,OAAO,mBAAmB;IACb,EAAE,CAAW;IAE9B,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,GAAW;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;iCAIyB,CAC1B;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,CAAuB,CAAC;QAEzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,aAAqB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;+BAEuB,CACxB;aACA,GAAG,CAAC,aAAa,CAAc,CAAC;QAEnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,GAAW;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;iCAEyB,CAC1B;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,CAAc,CAAC;QAEhC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,GAAW;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;;;qCAO6B,CAC9B;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,CAAkB,CAAC;QAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,GAAW;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;iCAGyB,CAC1B;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,CAAkB,CAAC;QAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,wBAAwB,CAAC,GAAqB;QACpD,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,iBAAiB,EAAE,GAAG,CAAC,kBAAkB;YACzC,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW;SAC7B,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,GAAgB;QAC1C,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;YACvC,aAAa,EAAE,GAAG,CAAC,cAAc;SAClC,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,GAAgB;QAC3C,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,GAAY;QAC5B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAA4B;YAC1C,MAAM,EAAE,GAAG,CAAC,MAAwB;YACpC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAa;YACtC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY;YAC/B,oBAAoB,EAAE,GAAG,CAAC,sBAAsB;YAChD,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC;CACF"}
@@ -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"}