@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,231 @@
1
+ import type { Task, TaskPriority, TaskStatus } from "../models/task.js";
2
+ import type { Event } from "../models/event.js";
3
+ import type { TimeBlock } from "../models/schedule.js";
4
+ import type { Conflict } from "../models/conflict.js";
5
+ import type { ProductivityStats, ScheduleHealth, EstimationAccuracy, TimeAllocation } from "../models/analytics.js";
6
+ import type { Availability, DayOfWeek, FocusTime, Preferences } from "../models/config.js";
7
+ import type { TaskFilters } from "../storage/task-repository.js";
8
+ export interface CreateTaskMcpInput {
9
+ title?: string;
10
+ description?: string;
11
+ estimated_duration?: number;
12
+ deadline?: string;
13
+ priority?: string;
14
+ category?: string;
15
+ tags?: string[];
16
+ recurrence_rule?: string;
17
+ blocked_by?: string[];
18
+ }
19
+ export interface UpdateTaskMcpInput {
20
+ task_id?: string;
21
+ title?: string;
22
+ description?: string;
23
+ estimated_duration?: number;
24
+ deadline?: string;
25
+ priority?: string;
26
+ category?: string;
27
+ tags?: string[];
28
+ blocked_by?: string[];
29
+ }
30
+ export interface CompleteTaskMcpInput {
31
+ task_id?: string;
32
+ actual_duration_minutes?: number;
33
+ }
34
+ export interface DeleteTaskMcpInput {
35
+ task_id: string;
36
+ }
37
+ export interface ListTasksMcpInput {
38
+ status?: string;
39
+ priority?: string;
40
+ deadline_before?: string;
41
+ deadline_after?: string;
42
+ category?: string;
43
+ }
44
+ export interface CreateEventMcpInput {
45
+ title?: string;
46
+ start_time?: string;
47
+ end_time?: string;
48
+ is_all_day?: boolean;
49
+ date?: string;
50
+ }
51
+ export interface UpdateEventMcpInput {
52
+ event_id?: string;
53
+ title?: string;
54
+ start_time?: string;
55
+ end_time?: string;
56
+ is_all_day?: boolean;
57
+ date?: string;
58
+ }
59
+ export interface DeleteEventMcpInput {
60
+ event_id: string;
61
+ }
62
+ export interface ListEventsMcpInput {
63
+ start_date: string;
64
+ end_date: string;
65
+ }
66
+ export interface GetScheduleMcpInput {
67
+ start_date: string;
68
+ end_date: string;
69
+ }
70
+ export interface SetAvailabilityMcpInput {
71
+ windows: {
72
+ day: number;
73
+ start_time: string;
74
+ end_time: string;
75
+ }[];
76
+ }
77
+ export interface SetFocusTimeMcpInput {
78
+ blocks: {
79
+ day: number;
80
+ start_time: string;
81
+ end_time: string;
82
+ }[];
83
+ minimum_block_minutes?: number;
84
+ }
85
+ export interface SetPreferencesMcpInput {
86
+ buffer_time_minutes?: number;
87
+ default_priority?: string;
88
+ default_duration?: number;
89
+ scheduling_horizon_weeks?: number;
90
+ minimum_block_minutes?: number;
91
+ }
92
+ type TaskInput = Omit<Task, "id" | "createdAt" | "updatedAt" | "status" | "actualDuration">;
93
+ type TaskUpdates = Partial<Pick<Task, "title" | "description" | "duration" | "deadline" | "priority" | "category" | "tags">>;
94
+ type EventInput = Omit<Event, "id" | "createdAt" | "updatedAt">;
95
+ type EventUpdates = Partial<Pick<Event, "title" | "startTime" | "endTime" | "isAllDay" | "date">>;
96
+ export declare function validateCreateTaskInput(input: CreateTaskMcpInput): void;
97
+ export declare function validateUpdateTaskInput(input: UpdateTaskMcpInput): void;
98
+ export declare function validateCompleteTaskInput(input: CompleteTaskMcpInput): void;
99
+ export declare function validateCreateEventInput(input: CreateEventMcpInput): void;
100
+ export declare function validateListEventsInput(input: ListEventsMcpInput): void;
101
+ export declare function validateGetScheduleInput(input: GetScheduleMcpInput): void;
102
+ export declare function validatePeriodInput(period: string): void;
103
+ export declare function validateSetAvailabilityInput(input: SetAvailabilityMcpInput): void;
104
+ export declare function validateSetFocusTimeInput(input: SetFocusTimeMcpInput): void;
105
+ export declare function validateSetPreferencesInput(input: SetPreferencesMcpInput): void;
106
+ export declare function mapCreateTaskInput(input: CreateTaskMcpInput): {
107
+ taskData: TaskInput;
108
+ recurrenceRule?: string;
109
+ blockedBy?: string[];
110
+ };
111
+ export declare function mapUpdateTaskInput(input: UpdateTaskMcpInput): {
112
+ id: string;
113
+ updates: TaskUpdates;
114
+ blockedBy?: string[];
115
+ };
116
+ export declare function mapListTasksInput(input: ListTasksMcpInput): TaskFilters;
117
+ export declare function mapCreateEventInput(input: CreateEventMcpInput): EventInput;
118
+ export declare function mapUpdateEventInput(input: UpdateEventMcpInput): {
119
+ id: string;
120
+ updates: EventUpdates;
121
+ };
122
+ export declare function mapSetAvailabilityInput(input: SetAvailabilityMcpInput): Availability;
123
+ export declare function mapSetFocusTimeInput(input: SetFocusTimeMcpInput): FocusTime;
124
+ export declare function mapSetPreferencesInput(input: SetPreferencesMcpInput): Partial<Preferences>;
125
+ export declare function mapTaskOutput(task: Task): {
126
+ id: string;
127
+ title: string;
128
+ description: string | null;
129
+ estimated_duration: number;
130
+ deadline: string | null;
131
+ priority: TaskPriority;
132
+ status: TaskStatus;
133
+ category: string | null;
134
+ tags: string[];
135
+ is_recurring: boolean;
136
+ recurrence_template_id: string | null;
137
+ actual_duration: number | null;
138
+ created_at: string;
139
+ updated_at: string;
140
+ };
141
+ export declare function mapEventOutput(event: Event): {
142
+ id: string;
143
+ title: string;
144
+ start_time: string | null;
145
+ end_time: string | null;
146
+ is_all_day: boolean;
147
+ date: string | null;
148
+ created_at: string;
149
+ updated_at: string;
150
+ };
151
+ export declare function mapTimeBlockOutput(block: TimeBlock, task: Task): {
152
+ id: string;
153
+ task_id: string;
154
+ start_time: string;
155
+ end_time: string;
156
+ date: string;
157
+ block_index: number;
158
+ total_blocks: number;
159
+ task_title: string;
160
+ task_priority: TaskPriority;
161
+ task_category: string | null;
162
+ task_status: TaskStatus;
163
+ };
164
+ export declare function mapConflictOutput(conflict: Conflict): {
165
+ task_id: string;
166
+ reason: import("../models/conflict.js").ConflictReason;
167
+ deadline: string | null;
168
+ required_minutes: number;
169
+ available_minutes: number;
170
+ competing_task_ids: string[];
171
+ suggestions: {
172
+ task_id: string;
173
+ current_priority: TaskPriority;
174
+ freed_minutes: number;
175
+ }[];
176
+ };
177
+ export declare function mapProductivityOutput(stats: ProductivityStats): {
178
+ period: "month" | "day" | "week";
179
+ tasks_completed: number;
180
+ tasks_overdue: number;
181
+ tasks_cancelled: number;
182
+ completion_rate: number;
183
+ on_time_rate: number;
184
+ };
185
+ export declare function mapHealthOutput(health: ScheduleHealth): {
186
+ health_score: number;
187
+ utilization_percentage: number;
188
+ overdue_count: number;
189
+ at_risk_count: number;
190
+ free_hours_this_week: number;
191
+ busiest_day: string | null;
192
+ lightest_day: string | null;
193
+ };
194
+ export declare function mapEstimationOutput(accuracy: EstimationAccuracy): {
195
+ average_accuracy_percentage: number | null;
196
+ overestimate_count: number;
197
+ underestimate_count: number;
198
+ average_overestimate_minutes: number | null;
199
+ average_underestimate_minutes: number | null;
200
+ accuracy_by_category: Record<string, number> | null;
201
+ };
202
+ export declare function mapAllocationOutput(allocation: TimeAllocation): {
203
+ period: "month" | "day" | "week";
204
+ categories: {
205
+ category: string;
206
+ hours: number;
207
+ percentage: number;
208
+ }[];
209
+ };
210
+ export declare function mapAvailabilityOutput(availability: Availability): {
211
+ day: DayOfWeek;
212
+ start_time: string;
213
+ end_time: string;
214
+ }[];
215
+ export declare function mapFocusTimeOutput(focusTime: FocusTime): {
216
+ blocks: {
217
+ day: DayOfWeek;
218
+ start_time: string;
219
+ end_time: string;
220
+ }[];
221
+ minimum_block_minutes: number;
222
+ };
223
+ export declare function mapPreferencesOutput(preferences: Preferences): {
224
+ buffer_time_minutes: number;
225
+ default_priority: TaskPriority;
226
+ default_duration: number;
227
+ scheduling_horizon_weeks: number;
228
+ minimum_block_minutes: number;
229
+ };
230
+ export {};
231
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/mcp/validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,405 @@
1
+ import { ValidationError } from "../models/errors.js";
2
+ import { VALID_PRIORITIES, VALID_PERIODS, DEFAULT_PRIORITY, DEFAULT_FOCUS_TIME_MINIMUM_BLOCK_MINUTES, MAX_SCHEDULING_HORIZON_WEEKS, MIN_MINIMUM_BLOCK_MINUTES, MAX_MINIMUM_BLOCK_MINUTES, } from "../common/constants.js";
3
+ import { isValidISO8601, isValidTimeHHMM } from "../common/time.js";
4
+ const INVALID_PRIORITY_MESSAGE = "invalid priority: must be P1, P2, P3, or P4";
5
+ // ── Validation Functions ─────────────────────────────────────────────
6
+ export function validateCreateTaskInput(input) {
7
+ if (!input.title || !input.title.trim()) {
8
+ throw new ValidationError("title is required");
9
+ }
10
+ if (input.estimated_duration == null) {
11
+ throw new ValidationError("estimated_duration is required");
12
+ }
13
+ if (input.estimated_duration <= 0) {
14
+ throw new ValidationError("duration must be a positive number of minutes");
15
+ }
16
+ if (input.priority !== undefined && !VALID_PRIORITIES.includes(input.priority)) {
17
+ throw new ValidationError(INVALID_PRIORITY_MESSAGE);
18
+ }
19
+ if (input.deadline !== undefined && !isValidISO8601(input.deadline)) {
20
+ throw new ValidationError("deadline must be a valid ISO 8601 date");
21
+ }
22
+ }
23
+ export function validateUpdateTaskInput(input) {
24
+ if (!input.task_id) {
25
+ throw new ValidationError("task_id is required");
26
+ }
27
+ const hasUpdate = input.title !== undefined ||
28
+ input.description !== undefined ||
29
+ input.estimated_duration !== undefined ||
30
+ input.deadline !== undefined ||
31
+ input.priority !== undefined ||
32
+ input.category !== undefined ||
33
+ input.tags !== undefined ||
34
+ input.blocked_by !== undefined;
35
+ if (!hasUpdate) {
36
+ throw new ValidationError("at least one update field is required");
37
+ }
38
+ if (input.estimated_duration !== undefined && input.estimated_duration <= 0) {
39
+ throw new ValidationError("duration must be a positive number of minutes");
40
+ }
41
+ if (input.priority !== undefined && !VALID_PRIORITIES.includes(input.priority)) {
42
+ throw new ValidationError(INVALID_PRIORITY_MESSAGE);
43
+ }
44
+ }
45
+ export function validateCompleteTaskInput(input) {
46
+ if (!input.task_id) {
47
+ throw new ValidationError("task_id is required");
48
+ }
49
+ if (input.actual_duration_minutes !== undefined && input.actual_duration_minutes <= 0) {
50
+ throw new ValidationError("actual_duration_minutes must be a positive number");
51
+ }
52
+ }
53
+ export function validateCreateEventInput(input) {
54
+ if (!input.title || !input.title.trim()) {
55
+ throw new ValidationError("title is required");
56
+ }
57
+ if (input.is_all_day) {
58
+ if (!input.date) {
59
+ throw new ValidationError("date is required for all-day events");
60
+ }
61
+ }
62
+ else {
63
+ if (!input.start_time) {
64
+ throw new ValidationError("start_time is required for timed events");
65
+ }
66
+ if (!input.end_time) {
67
+ throw new ValidationError("end_time is required for timed events");
68
+ }
69
+ if (input.end_time <= input.start_time) {
70
+ throw new ValidationError("end time must be after start time");
71
+ }
72
+ }
73
+ }
74
+ function validateDateRange(input) {
75
+ if (input.end_date <= input.start_date) {
76
+ throw new ValidationError("end_date must be after start_date");
77
+ }
78
+ }
79
+ export function validateListEventsInput(input) {
80
+ validateDateRange(input);
81
+ }
82
+ export function validateGetScheduleInput(input) {
83
+ validateDateRange(input);
84
+ }
85
+ export function validatePeriodInput(period) {
86
+ if (!VALID_PERIODS.includes(period)) {
87
+ throw new ValidationError("invalid period: must be day, week, or month");
88
+ }
89
+ }
90
+ export function validateSetAvailabilityInput(input) {
91
+ if (!input.windows || input.windows.length === 0) {
92
+ throw new ValidationError("windows must not be empty");
93
+ }
94
+ for (const window of input.windows) {
95
+ validateDayAndTime(window.day, window.start_time, window.end_time);
96
+ }
97
+ }
98
+ export function validateSetFocusTimeInput(input) {
99
+ if (!input.blocks || input.blocks.length === 0) {
100
+ throw new ValidationError("blocks must not be empty");
101
+ }
102
+ for (const block of input.blocks) {
103
+ validateDayAndTime(block.day, block.start_time, block.end_time);
104
+ }
105
+ if (input.minimum_block_minutes !== undefined &&
106
+ (input.minimum_block_minutes < MIN_MINIMUM_BLOCK_MINUTES ||
107
+ input.minimum_block_minutes > MAX_MINIMUM_BLOCK_MINUTES)) {
108
+ throw new ValidationError(`minimum_block_minutes must be between ${MIN_MINIMUM_BLOCK_MINUTES} and ${MAX_MINIMUM_BLOCK_MINUTES}`);
109
+ }
110
+ }
111
+ export function validateSetPreferencesInput(input) {
112
+ const hasField = input.buffer_time_minutes !== undefined ||
113
+ input.default_priority !== undefined ||
114
+ input.default_duration !== undefined ||
115
+ input.scheduling_horizon_weeks !== undefined ||
116
+ input.minimum_block_minutes !== undefined;
117
+ if (!hasField) {
118
+ throw new ValidationError("at least one preference field is required");
119
+ }
120
+ if (input.buffer_time_minutes !== undefined && input.buffer_time_minutes < 0) {
121
+ throw new ValidationError("buffer_time_minutes must be non-negative");
122
+ }
123
+ if (input.default_priority !== undefined &&
124
+ !VALID_PRIORITIES.includes(input.default_priority)) {
125
+ throw new ValidationError(INVALID_PRIORITY_MESSAGE);
126
+ }
127
+ if (input.default_duration !== undefined && input.default_duration <= 0) {
128
+ throw new ValidationError("default_duration must be a positive number");
129
+ }
130
+ if (input.scheduling_horizon_weeks !== undefined &&
131
+ (input.scheduling_horizon_weeks < 1 ||
132
+ input.scheduling_horizon_weeks > MAX_SCHEDULING_HORIZON_WEEKS)) {
133
+ throw new ValidationError(`scheduling_horizon_weeks must be between 1 and ${MAX_SCHEDULING_HORIZON_WEEKS}`);
134
+ }
135
+ if (input.minimum_block_minutes !== undefined &&
136
+ (input.minimum_block_minutes < MIN_MINIMUM_BLOCK_MINUTES ||
137
+ input.minimum_block_minutes > MAX_MINIMUM_BLOCK_MINUTES)) {
138
+ throw new ValidationError(`minimum_block_minutes must be between ${MIN_MINIMUM_BLOCK_MINUTES} and ${MAX_MINIMUM_BLOCK_MINUTES}`);
139
+ }
140
+ }
141
+ function validateDayAndTime(day, startTime, endTime) {
142
+ if (day < 0 || day > 6 || !Number.isInteger(day)) {
143
+ throw new ValidationError("invalid day of week");
144
+ }
145
+ if (!isValidTimeHHMM(startTime)) {
146
+ throw new ValidationError("invalid time format");
147
+ }
148
+ if (!isValidTimeHHMM(endTime)) {
149
+ throw new ValidationError("invalid time format");
150
+ }
151
+ if (endTime <= startTime) {
152
+ throw new ValidationError("end time must be after start time");
153
+ }
154
+ }
155
+ // ── Input Mapping Functions (snake_case → camelCase) ─────────────────
156
+ export function mapCreateTaskInput(input) {
157
+ const title = input.title ?? "";
158
+ const estimatedDuration = input.estimated_duration ?? 0;
159
+ return {
160
+ taskData: {
161
+ title: title.trim(),
162
+ description: input.description ?? null,
163
+ duration: estimatedDuration,
164
+ deadline: input.deadline ?? null,
165
+ priority: input.priority ?? DEFAULT_PRIORITY,
166
+ category: input.category ?? null,
167
+ tags: input.tags ?? [],
168
+ isRecurring: input.recurrence_rule != null,
169
+ recurrenceTemplateId: null,
170
+ },
171
+ recurrenceRule: input.recurrence_rule,
172
+ blockedBy: input.blocked_by,
173
+ };
174
+ }
175
+ export function mapUpdateTaskInput(input) {
176
+ const updates = {};
177
+ if (input.title !== undefined)
178
+ updates.title = input.title;
179
+ if (input.description !== undefined)
180
+ updates.description = input.description;
181
+ if (input.estimated_duration !== undefined)
182
+ updates.duration = input.estimated_duration;
183
+ if (input.deadline !== undefined)
184
+ updates.deadline = input.deadline;
185
+ if (input.priority !== undefined)
186
+ updates.priority = input.priority;
187
+ if (input.category !== undefined)
188
+ updates.category = input.category;
189
+ if (input.tags !== undefined)
190
+ updates.tags = input.tags;
191
+ return {
192
+ id: input.task_id ?? "",
193
+ updates,
194
+ blockedBy: input.blocked_by,
195
+ };
196
+ }
197
+ export function mapListTasksInput(input) {
198
+ const filters = {};
199
+ if (input.status !== undefined)
200
+ filters.status = input.status;
201
+ if (input.priority !== undefined)
202
+ filters.priority = input.priority;
203
+ if (input.deadline_before !== undefined)
204
+ filters.deadlineBefore = input.deadline_before;
205
+ if (input.deadline_after !== undefined)
206
+ filters.deadlineAfter = input.deadline_after;
207
+ if (input.category !== undefined)
208
+ filters.category = input.category;
209
+ return filters;
210
+ }
211
+ export function mapCreateEventInput(input) {
212
+ const title = (input.title ?? "").trim();
213
+ if (input.is_all_day) {
214
+ return {
215
+ title,
216
+ startTime: null,
217
+ endTime: null,
218
+ isAllDay: true,
219
+ date: input.date ?? "",
220
+ };
221
+ }
222
+ return {
223
+ title,
224
+ startTime: input.start_time ?? "",
225
+ endTime: input.end_time ?? "",
226
+ isAllDay: false,
227
+ date: null,
228
+ };
229
+ }
230
+ export function mapUpdateEventInput(input) {
231
+ const updates = {};
232
+ if (input.title !== undefined)
233
+ updates.title = input.title;
234
+ if (input.start_time !== undefined)
235
+ updates.startTime = input.start_time;
236
+ if (input.end_time !== undefined)
237
+ updates.endTime = input.end_time;
238
+ if (input.is_all_day !== undefined)
239
+ updates.isAllDay = input.is_all_day;
240
+ if (input.date !== undefined)
241
+ updates.date = input.date;
242
+ return { id: input.event_id ?? "", updates };
243
+ }
244
+ export function mapSetAvailabilityInput(input) {
245
+ return {
246
+ windows: input.windows.map((w) => ({
247
+ day: w.day,
248
+ startTime: w.start_time,
249
+ endTime: w.end_time,
250
+ })),
251
+ };
252
+ }
253
+ export function mapSetFocusTimeInput(input) {
254
+ return {
255
+ blocks: input.blocks.map((b) => ({
256
+ day: b.day,
257
+ startTime: b.start_time,
258
+ endTime: b.end_time,
259
+ })),
260
+ minimumBlockMinutes: input.minimum_block_minutes ?? DEFAULT_FOCUS_TIME_MINIMUM_BLOCK_MINUTES,
261
+ };
262
+ }
263
+ export function mapSetPreferencesInput(input) {
264
+ const result = {};
265
+ if (input.buffer_time_minutes !== undefined)
266
+ result.bufferTimeMinutes = input.buffer_time_minutes;
267
+ if (input.default_priority !== undefined)
268
+ result.defaultPriority = input.default_priority;
269
+ if (input.default_duration !== undefined)
270
+ result.defaultDuration = input.default_duration;
271
+ if (input.scheduling_horizon_weeks !== undefined)
272
+ result.schedulingHorizonWeeks = input.scheduling_horizon_weeks;
273
+ if (input.minimum_block_minutes !== undefined)
274
+ result.minimumBlockMinutes = input.minimum_block_minutes;
275
+ return result;
276
+ }
277
+ // ── Output Mapping Functions (camelCase → snake_case) ────────────────
278
+ export function mapTaskOutput(task) {
279
+ return {
280
+ id: task.id,
281
+ title: task.title,
282
+ description: task.description,
283
+ estimated_duration: task.duration,
284
+ deadline: task.deadline,
285
+ priority: task.priority,
286
+ status: task.status,
287
+ category: task.category,
288
+ tags: task.tags,
289
+ is_recurring: task.isRecurring,
290
+ recurrence_template_id: task.recurrenceTemplateId,
291
+ actual_duration: task.actualDuration,
292
+ created_at: task.createdAt,
293
+ updated_at: task.updatedAt,
294
+ };
295
+ }
296
+ export function mapEventOutput(event) {
297
+ return {
298
+ id: event.id,
299
+ title: event.title,
300
+ start_time: event.startTime,
301
+ end_time: event.endTime,
302
+ is_all_day: event.isAllDay,
303
+ date: event.date,
304
+ created_at: event.createdAt,
305
+ updated_at: event.updatedAt,
306
+ };
307
+ }
308
+ export function mapTimeBlockOutput(block, task) {
309
+ return {
310
+ id: block.id,
311
+ task_id: block.taskId,
312
+ start_time: block.startTime,
313
+ end_time: block.endTime,
314
+ date: block.date,
315
+ block_index: block.blockIndex,
316
+ total_blocks: block.totalBlocks,
317
+ task_title: task.title,
318
+ task_priority: task.priority,
319
+ task_category: task.category,
320
+ task_status: task.status,
321
+ };
322
+ }
323
+ export function mapConflictOutput(conflict) {
324
+ return {
325
+ task_id: conflict.taskId,
326
+ reason: conflict.reason,
327
+ deadline: conflict.deadline,
328
+ required_minutes: conflict.requiredMinutes,
329
+ available_minutes: conflict.availableMinutes,
330
+ competing_task_ids: conflict.competingTaskIds,
331
+ suggestions: conflict.suggestions.map((s) => ({
332
+ task_id: s.taskId,
333
+ current_priority: s.currentPriority,
334
+ freed_minutes: s.freedMinutes,
335
+ })),
336
+ };
337
+ }
338
+ export function mapProductivityOutput(stats) {
339
+ return {
340
+ period: stats.period,
341
+ tasks_completed: stats.tasksCompleted,
342
+ tasks_overdue: stats.tasksOverdue,
343
+ tasks_cancelled: stats.tasksCancelled,
344
+ completion_rate: stats.completionRate,
345
+ on_time_rate: stats.onTimeRate,
346
+ };
347
+ }
348
+ export function mapHealthOutput(health) {
349
+ return {
350
+ health_score: health.healthScore,
351
+ utilization_percentage: health.utilizationPercentage,
352
+ overdue_count: health.overdueCount,
353
+ at_risk_count: health.atRiskCount,
354
+ free_hours_this_week: health.freeHoursThisWeek,
355
+ busiest_day: health.busiestDay,
356
+ lightest_day: health.lightestDay,
357
+ };
358
+ }
359
+ export function mapEstimationOutput(accuracy) {
360
+ return {
361
+ average_accuracy_percentage: accuracy.averageAccuracyPercentage,
362
+ overestimate_count: accuracy.overestimateCount,
363
+ underestimate_count: accuracy.underestimateCount,
364
+ average_overestimate_minutes: accuracy.averageOverestimateMinutes,
365
+ average_underestimate_minutes: accuracy.averageUnderestimateMinutes,
366
+ accuracy_by_category: accuracy.accuracyByCategory,
367
+ };
368
+ }
369
+ export function mapAllocationOutput(allocation) {
370
+ return {
371
+ period: allocation.period,
372
+ categories: allocation.categories.map((c) => ({
373
+ category: c.category,
374
+ hours: c.hours,
375
+ percentage: c.percentage,
376
+ })),
377
+ };
378
+ }
379
+ export function mapAvailabilityOutput(availability) {
380
+ return availability.windows.map((w) => ({
381
+ day: w.day,
382
+ start_time: w.startTime,
383
+ end_time: w.endTime,
384
+ }));
385
+ }
386
+ export function mapFocusTimeOutput(focusTime) {
387
+ return {
388
+ blocks: focusTime.blocks.map((b) => ({
389
+ day: b.day,
390
+ start_time: b.startTime,
391
+ end_time: b.endTime,
392
+ })),
393
+ minimum_block_minutes: focusTime.minimumBlockMinutes,
394
+ };
395
+ }
396
+ export function mapPreferencesOutput(preferences) {
397
+ return {
398
+ buffer_time_minutes: preferences.bufferTimeMinutes,
399
+ default_priority: preferences.defaultPriority,
400
+ default_duration: preferences.defaultDuration,
401
+ scheduling_horizon_weeks: preferences.schedulingHorizonWeeks,
402
+ minimum_block_minutes: preferences.minimumBlockMinutes,
403
+ };
404
+ }
405
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/mcp/validators.ts"],"names":[],"mappings":"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"}