@shin1ohno/sage 0.1.0 → 0.2.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 (72) hide show
  1. package/README.md +79 -114
  2. package/dist/config/storage/storage-factory.d.ts +5 -1
  3. package/dist/config/storage/storage-factory.d.ts.map +1 -1
  4. package/dist/config/storage/storage-factory.js +12 -19
  5. package/dist/config/storage/storage-factory.js.map +1 -1
  6. package/dist/core/sage-core.d.ts +10 -5
  7. package/dist/core/sage-core.d.ts.map +1 -1
  8. package/dist/core/sage-core.js +28 -51
  9. package/dist/core/sage-core.js.map +1 -1
  10. package/dist/index.js +335 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/integrations/apple-reminders.d.ts +46 -0
  13. package/dist/integrations/apple-reminders.d.ts.map +1 -1
  14. package/dist/integrations/apple-reminders.js +169 -0
  15. package/dist/integrations/apple-reminders.js.map +1 -1
  16. package/dist/integrations/notion-mcp.d.ts +136 -1
  17. package/dist/integrations/notion-mcp.d.ts.map +1 -1
  18. package/dist/integrations/notion-mcp.js +449 -1
  19. package/dist/integrations/notion-mcp.js.map +1 -1
  20. package/dist/integrations/task-synchronizer.d.ts +124 -0
  21. package/dist/integrations/task-synchronizer.d.ts.map +1 -0
  22. package/dist/integrations/task-synchronizer.js +363 -0
  23. package/dist/integrations/task-synchronizer.js.map +1 -0
  24. package/dist/integrations/todo-list-manager.d.ts +185 -0
  25. package/dist/integrations/todo-list-manager.d.ts.map +1 -0
  26. package/dist/integrations/todo-list-manager.js +581 -0
  27. package/dist/integrations/todo-list-manager.js.map +1 -0
  28. package/dist/platform/adapter-factory.d.ts.map +1 -1
  29. package/dist/platform/adapter-factory.js +4 -8
  30. package/dist/platform/adapter-factory.js.map +1 -1
  31. package/dist/platform/adapters/mcp-adapter.js +1 -1
  32. package/dist/platform/adapters/mcp-adapter.js.map +1 -1
  33. package/dist/platform/adapters/remote-mcp-adapter.d.ts +34 -0
  34. package/dist/platform/adapters/remote-mcp-adapter.d.ts.map +1 -0
  35. package/dist/platform/adapters/remote-mcp-adapter.js +54 -0
  36. package/dist/platform/adapters/remote-mcp-adapter.js.map +1 -0
  37. package/dist/platform/detector.d.ts +5 -16
  38. package/dist/platform/detector.d.ts.map +1 -1
  39. package/dist/platform/detector.js +52 -108
  40. package/dist/platform/detector.js.map +1 -1
  41. package/dist/platform/index.d.ts +0 -2
  42. package/dist/platform/index.d.ts.map +1 -1
  43. package/dist/platform/index.js +0 -2
  44. package/dist/platform/index.js.map +1 -1
  45. package/dist/platform/types.d.ts +20 -62
  46. package/dist/platform/types.d.ts.map +1 -1
  47. package/dist/platform/types.js +6 -11
  48. package/dist/platform/types.js.map +1 -1
  49. package/dist/remote/cloud-config.d.ts +139 -0
  50. package/dist/remote/cloud-config.d.ts.map +1 -0
  51. package/dist/remote/cloud-config.js +229 -0
  52. package/dist/remote/cloud-config.js.map +1 -0
  53. package/dist/remote/hybrid-integration.d.ts +109 -0
  54. package/dist/remote/hybrid-integration.d.ts.map +1 -0
  55. package/dist/remote/hybrid-integration.js +230 -0
  56. package/dist/remote/hybrid-integration.js.map +1 -0
  57. package/dist/remote/remote-mcp-server.d.ts +244 -0
  58. package/dist/remote/remote-mcp-server.d.ts.map +1 -0
  59. package/dist/remote/remote-mcp-server.js +507 -0
  60. package/dist/remote/remote-mcp-server.js.map +1 -0
  61. package/dist/utils/priority.d.ts.map +1 -1
  62. package/dist/utils/priority.js +18 -5
  63. package/dist/utils/priority.js.map +1 -1
  64. package/dist/utils/stakeholders.d.ts +4 -0
  65. package/dist/utils/stakeholders.d.ts.map +1 -1
  66. package/dist/utils/stakeholders.js +45 -4
  67. package/dist/utils/stakeholders.js.map +1 -1
  68. package/dist/utils/task-splitter.d.ts.map +1 -1
  69. package/dist/utils/task-splitter.js +62 -11
  70. package/dist/utils/task-splitter.js.map +1 -1
  71. package/manifest.json +74 -0
  72. package/package.json +2 -1
@@ -0,0 +1,363 @@
1
+ /**
2
+ * TaskSynchronizer
3
+ * Multi-source task synchronization and conflict resolution
4
+ * Requirement: 12.5, 12.6
5
+ */
6
+ import { TodoListManager, } from './todo-list-manager.js';
7
+ /**
8
+ * TaskSynchronizer
9
+ * Handles synchronization of tasks between Apple Reminders and Notion
10
+ */
11
+ export class TaskSynchronizer {
12
+ todoManager;
13
+ similarityThreshold = 0.85;
14
+ constructor() {
15
+ this.todoManager = new TodoListManager();
16
+ }
17
+ /**
18
+ * Sync all tasks across all sources
19
+ * Requirement: 12.6
20
+ */
21
+ async syncAllTasks() {
22
+ const startTime = Date.now();
23
+ const conflicts = [];
24
+ const errors = [];
25
+ let syncedTasks = 0;
26
+ try {
27
+ // Fetch all tasks
28
+ const todos = await this.todoManager.listTodos();
29
+ const totalTasks = todos.length;
30
+ // Detect duplicates
31
+ const duplicates = this.detectDuplicatesInList(todos);
32
+ // Process each duplicate group
33
+ for (const duplicate of duplicates) {
34
+ try {
35
+ // Check for conflicts between duplicate tasks
36
+ const taskConflicts = this.detectConflicts(duplicate.tasks);
37
+ conflicts.push(...taskConflicts);
38
+ // Mark as synced
39
+ syncedTasks += duplicate.tasks.length;
40
+ }
41
+ catch (error) {
42
+ errors.push({
43
+ taskId: duplicate.tasks[0].id,
44
+ source: duplicate.tasks[0].source,
45
+ error: error.message,
46
+ recoverable: true,
47
+ });
48
+ }
49
+ }
50
+ // Sync unique tasks
51
+ const uniqueTasks = todos.filter((todo) => !duplicates.some((d) => d.tasks.some((t) => t.id === todo.id)));
52
+ syncedTasks += uniqueTasks.length;
53
+ return {
54
+ totalTasks,
55
+ syncedTasks,
56
+ conflicts,
57
+ errors,
58
+ duration: Date.now() - startTime,
59
+ };
60
+ }
61
+ catch (error) {
62
+ return {
63
+ totalTasks: 0,
64
+ syncedTasks: 0,
65
+ conflicts,
66
+ errors: [
67
+ {
68
+ taskId: 'all',
69
+ source: 'manual',
70
+ error: error.message,
71
+ recoverable: false,
72
+ },
73
+ ],
74
+ duration: Date.now() - startTime,
75
+ };
76
+ }
77
+ }
78
+ /**
79
+ * Detect duplicates in a list of tasks
80
+ * Requirement: 12.5
81
+ */
82
+ detectDuplicatesInList(tasks) {
83
+ const duplicates = [];
84
+ const processed = new Set();
85
+ for (let i = 0; i < tasks.length; i++) {
86
+ if (processed.has(tasks[i].id))
87
+ continue;
88
+ const matchingTasks = [tasks[i]];
89
+ for (let j = i + 1; j < tasks.length; j++) {
90
+ if (processed.has(tasks[j].id))
91
+ continue;
92
+ const similarity = this.calculateSimilarity(tasks[i].title, tasks[j].title);
93
+ if (similarity >= this.similarityThreshold) {
94
+ matchingTasks.push(tasks[j]);
95
+ processed.add(tasks[j].id);
96
+ }
97
+ }
98
+ if (matchingTasks.length > 1) {
99
+ processed.add(tasks[i].id);
100
+ const avgSimilarity = matchingTasks.length > 2
101
+ ? this.calculateGroupSimilarity(matchingTasks)
102
+ : this.calculateSimilarity(matchingTasks[0].title, matchingTasks[1].title);
103
+ duplicates.push({
104
+ tasks: matchingTasks,
105
+ similarity: avgSimilarity,
106
+ suggestedMerge: this.createSuggestedMerge(matchingTasks),
107
+ confidence: this.determineConfidence(avgSimilarity),
108
+ });
109
+ }
110
+ }
111
+ return duplicates;
112
+ }
113
+ /**
114
+ * Detect duplicates across all sources
115
+ */
116
+ async detectDuplicates() {
117
+ const todos = await this.todoManager.listTodos();
118
+ return this.detectDuplicatesInList(todos);
119
+ }
120
+ /**
121
+ * Calculate similarity between two strings
122
+ * Uses Levenshtein distance normalized to 0-1 range
123
+ */
124
+ calculateSimilarity(str1, str2) {
125
+ const s1 = str1.toLowerCase().trim();
126
+ const s2 = str2.toLowerCase().trim();
127
+ if (s1 === s2)
128
+ return 1.0;
129
+ const maxLen = Math.max(s1.length, s2.length);
130
+ if (maxLen === 0)
131
+ return 1.0;
132
+ const distance = this.levenshteinDistance(s1, s2);
133
+ return 1 - distance / maxLen;
134
+ }
135
+ /**
136
+ * Calculate Levenshtein distance between two strings
137
+ */
138
+ levenshteinDistance(str1, str2) {
139
+ const m = str1.length;
140
+ const n = str2.length;
141
+ const dp = Array(m + 1)
142
+ .fill(null)
143
+ .map(() => Array(n + 1).fill(0));
144
+ for (let i = 0; i <= m; i++)
145
+ dp[i][0] = i;
146
+ for (let j = 0; j <= n; j++)
147
+ dp[0][j] = j;
148
+ for (let i = 1; i <= m; i++) {
149
+ for (let j = 1; j <= n; j++) {
150
+ if (str1[i - 1] === str2[j - 1]) {
151
+ dp[i][j] = dp[i - 1][j - 1];
152
+ }
153
+ else {
154
+ dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
155
+ }
156
+ }
157
+ }
158
+ return dp[m][n];
159
+ }
160
+ /**
161
+ * Calculate average similarity for a group of tasks
162
+ */
163
+ calculateGroupSimilarity(tasks) {
164
+ let totalSimilarity = 0;
165
+ let comparisons = 0;
166
+ for (let i = 0; i < tasks.length; i++) {
167
+ for (let j = i + 1; j < tasks.length; j++) {
168
+ totalSimilarity += this.calculateSimilarity(tasks[i].title, tasks[j].title);
169
+ comparisons++;
170
+ }
171
+ }
172
+ return comparisons > 0 ? totalSimilarity / comparisons : 0;
173
+ }
174
+ /**
175
+ * Determine confidence level based on similarity
176
+ */
177
+ determineConfidence(similarity) {
178
+ if (similarity >= 0.95)
179
+ return 'high';
180
+ if (similarity >= 0.85)
181
+ return 'medium';
182
+ return 'low';
183
+ }
184
+ /**
185
+ * Create a suggested merge from multiple tasks
186
+ */
187
+ createSuggestedMerge(tasks) {
188
+ // Sort by update time to get the most recent
189
+ const sortedByUpdate = [...tasks].sort((a, b) => new Date(b.updatedDate).getTime() - new Date(a.updatedDate).getTime());
190
+ // Sort by creation time to get the earliest
191
+ const sortedByCreate = [...tasks].sort((a, b) => new Date(a.createdDate).getTime() - new Date(b.createdDate).getTime());
192
+ // Use the highest priority
193
+ const priorities = ['P0', 'P1', 'P2', 'P3'];
194
+ const highestPriority = tasks.reduce((highest, task) => {
195
+ const currentIdx = priorities.indexOf(task.priority);
196
+ const highestIdx = priorities.indexOf(highest);
197
+ return currentIdx < highestIdx ? task.priority : highest;
198
+ }, 'P3');
199
+ // Use the latest status
200
+ const latestStatus = sortedByUpdate[0].status;
201
+ // Combine all tags
202
+ const allTags = [...new Set(tasks.flatMap((t) => t.tags))];
203
+ // Use earliest due date
204
+ const dueDates = tasks.filter((t) => t.dueDate).map((t) => new Date(t.dueDate).getTime());
205
+ const earliestDueDate = dueDates.length > 0 ? new Date(Math.min(...dueDates)).toISOString() : undefined;
206
+ // Combine stakeholders
207
+ const allStakeholders = [...new Set(tasks.flatMap((t) => t.stakeholders || []))];
208
+ // Use longest description
209
+ const descriptions = tasks.filter((t) => t.description).map((t) => t.description);
210
+ const longestDescription = descriptions.length > 0 ? descriptions.reduce((a, b) => (a.length > b.length ? a : b)) : undefined;
211
+ // Use the first task's source and ID as the base
212
+ const baseTask = sortedByCreate[0];
213
+ return {
214
+ id: `merged-${baseTask.id}`,
215
+ title: baseTask.title, // Use the original title
216
+ description: longestDescription,
217
+ priority: highestPriority,
218
+ status: latestStatus,
219
+ dueDate: earliestDueDate,
220
+ createdDate: sortedByCreate[0].createdDate,
221
+ updatedDate: sortedByUpdate[0].updatedDate,
222
+ source: baseTask.source,
223
+ sourceId: baseTask.sourceId,
224
+ tags: allTags,
225
+ estimatedMinutes: tasks.find((t) => t.estimatedMinutes)?.estimatedMinutes,
226
+ stakeholders: allStakeholders.length > 0 ? allStakeholders : undefined,
227
+ };
228
+ }
229
+ /**
230
+ * Merge duplicate tasks
231
+ * Requirement: 12.5
232
+ */
233
+ async mergeDuplicates(duplicates) {
234
+ if (duplicates.length === 0) {
235
+ return {
236
+ success: false,
237
+ mergedTask: {},
238
+ removedTasks: [],
239
+ error: 'No duplicates to merge',
240
+ };
241
+ }
242
+ try {
243
+ const duplicate = duplicates[0];
244
+ const mergedTask = duplicate.suggestedMerge;
245
+ // Get IDs of tasks to be removed (all except the merged one's base)
246
+ const removedTasks = duplicate.tasks.slice(1).map((t) => t.id);
247
+ // TODO: Actually remove duplicates from sources
248
+ // This would require implementing delete operations in Apple Reminders and Notion
249
+ return {
250
+ success: true,
251
+ mergedTask,
252
+ removedTasks,
253
+ };
254
+ }
255
+ catch (error) {
256
+ return {
257
+ success: false,
258
+ mergedTask: {},
259
+ removedTasks: [],
260
+ error: error.message,
261
+ };
262
+ }
263
+ }
264
+ /**
265
+ * Detect conflicts between tasks
266
+ */
267
+ detectConflicts(tasks) {
268
+ const conflicts = [];
269
+ if (tasks.length < 2)
270
+ return conflicts;
271
+ // Compare first two tasks for common conflict fields
272
+ const task1 = tasks[0];
273
+ const task2 = tasks[1];
274
+ // Status conflict
275
+ if (task1.status !== task2.status) {
276
+ conflicts.push({
277
+ field: 'status',
278
+ appleRemindersValue: task1.source === 'apple_reminders' ? task1.status : task2.status,
279
+ notionValue: task1.source === 'notion' ? task1.status : task2.status,
280
+ resolvedValue: this.resolveStatusConflict(task1, task2),
281
+ resolution: this.determineResolution(task1, task2),
282
+ });
283
+ }
284
+ // Priority conflict
285
+ if (task1.priority !== task2.priority) {
286
+ conflicts.push({
287
+ field: 'priority',
288
+ appleRemindersValue: task1.source === 'apple_reminders' ? task1.priority : task2.priority,
289
+ notionValue: task1.source === 'notion' ? task1.priority : task2.priority,
290
+ resolvedValue: this.resolvePriorityConflict(task1, task2),
291
+ resolution: this.determineResolution(task1, task2),
292
+ });
293
+ }
294
+ return conflicts;
295
+ }
296
+ /**
297
+ * Resolve status conflict (use most recently updated)
298
+ */
299
+ resolveStatusConflict(task1, task2) {
300
+ const date1 = new Date(task1.updatedDate).getTime();
301
+ const date2 = new Date(task2.updatedDate).getTime();
302
+ return date1 >= date2 ? task1.status : task2.status;
303
+ }
304
+ /**
305
+ * Resolve priority conflict (use highest priority)
306
+ */
307
+ resolvePriorityConflict(task1, task2) {
308
+ const priorities = ['P0', 'P1', 'P2', 'P3'];
309
+ const idx1 = priorities.indexOf(task1.priority);
310
+ const idx2 = priorities.indexOf(task2.priority);
311
+ return idx1 <= idx2 ? task1.priority : task2.priority;
312
+ }
313
+ /**
314
+ * Determine which source wins for conflict resolution
315
+ */
316
+ determineResolution(task1, task2) {
317
+ const date1 = new Date(task1.updatedDate).getTime();
318
+ const date2 = new Date(task2.updatedDate).getTime();
319
+ if (date1 >= date2) {
320
+ return task1.source === 'apple_reminders' ? 'apple_reminders' : 'notion';
321
+ }
322
+ return task2.source === 'apple_reminders' ? 'apple_reminders' : 'notion';
323
+ }
324
+ /**
325
+ * Resolve conflicts
326
+ * Requirement: 12.6
327
+ */
328
+ async resolveConflicts(conflicts) {
329
+ return conflicts.map((conflict) => {
330
+ let resolvedValue;
331
+ switch (conflict.field) {
332
+ case 'status':
333
+ // Use the specified resolution's value
334
+ resolvedValue =
335
+ conflict.resolution === 'apple_reminders'
336
+ ? conflict.appleRemindersValue
337
+ : conflict.notionValue;
338
+ break;
339
+ case 'priority':
340
+ // Use higher priority
341
+ const priorities = ['P0', 'P1', 'P2', 'P3'];
342
+ const arIdx = priorities.indexOf(conflict.appleRemindersValue);
343
+ const nIdx = priorities.indexOf(conflict.notionValue);
344
+ resolvedValue = arIdx <= nIdx ? conflict.appleRemindersValue : conflict.notionValue;
345
+ break;
346
+ default:
347
+ // Default to the specified resolution
348
+ resolvedValue =
349
+ conflict.resolution === 'apple_reminders'
350
+ ? conflict.appleRemindersValue
351
+ : conflict.notionValue;
352
+ }
353
+ return {
354
+ field: conflict.field,
355
+ appleRemindersValue: conflict.appleRemindersValue,
356
+ notionValue: conflict.notionValue,
357
+ resolvedValue,
358
+ resolution: conflict.resolution,
359
+ };
360
+ });
361
+ }
362
+ }
363
+ //# sourceMappingURL=task-synchronizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-synchronizer.js","sourceRoot":"","sources":["../../src/integrations/task-synchronizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * TodoListManager
3
+ * Unified TODO list management with multi-source integration
4
+ * Requirement: 12.1-12.8
5
+ */
6
+ import { Priority } from '../types/task.js';
7
+ /**
8
+ * Task source types
9
+ */
10
+ export type TaskSource = 'apple_reminders' | 'notion' | 'manual';
11
+ /**
12
+ * Extended task status for TODO list management
13
+ */
14
+ export type TodoStatus = 'not_started' | 'in_progress' | 'completed' | 'cancelled';
15
+ /**
16
+ * Date range filter
17
+ */
18
+ export interface DateRange {
19
+ start?: string;
20
+ end?: string;
21
+ }
22
+ /**
23
+ * Filter options for TODO list
24
+ */
25
+ export interface TodoFilter {
26
+ priority?: Priority[];
27
+ status?: TodoStatus[];
28
+ dueDate?: DateRange;
29
+ source?: TaskSource[];
30
+ tags?: string[];
31
+ }
32
+ /**
33
+ * TODO item structure
34
+ */
35
+ export interface TodoItem {
36
+ id: string;
37
+ title: string;
38
+ description?: string;
39
+ priority: Priority;
40
+ status: TodoStatus;
41
+ dueDate?: string;
42
+ createdDate: string;
43
+ updatedDate: string;
44
+ source: TaskSource;
45
+ sourceId: string;
46
+ tags: string[];
47
+ estimatedMinutes?: number;
48
+ stakeholders?: string[];
49
+ }
50
+ /**
51
+ * Task update result
52
+ */
53
+ export interface UpdateResult {
54
+ success: boolean;
55
+ taskId: string;
56
+ updatedFields: string[];
57
+ syncedSources: TaskSource[];
58
+ error?: string;
59
+ }
60
+ /**
61
+ * Task sync result
62
+ */
63
+ export interface SyncResult {
64
+ success: boolean;
65
+ taskId: string;
66
+ syncedSources: TaskSource[];
67
+ conflicts?: TaskConflict[];
68
+ error?: string;
69
+ }
70
+ /**
71
+ * Task conflict information
72
+ */
73
+ export interface TaskConflict {
74
+ field: string;
75
+ appleRemindersValue: unknown;
76
+ notionValue: unknown;
77
+ resolvedValue: unknown;
78
+ resolution: 'apple_reminders' | 'notion' | 'manual';
79
+ }
80
+ /**
81
+ * TodoListManager configuration
82
+ */
83
+ export interface TodoListManagerConfig {
84
+ notionDatabaseId?: string;
85
+ appleRemindersDefaultList?: string;
86
+ cacheTimeoutMs?: number;
87
+ }
88
+ /**
89
+ * TodoListManager
90
+ * Provides unified TODO list management across Apple Reminders and Notion
91
+ */
92
+ export declare class TodoListManager {
93
+ private appleReminders;
94
+ private notion;
95
+ private notionClient;
96
+ private cachedTodos;
97
+ private lastFetchTime;
98
+ private cacheTimeout;
99
+ private config;
100
+ constructor(config?: TodoListManagerConfig);
101
+ /**
102
+ * Configure Notion integration
103
+ */
104
+ configureNotion(databaseId: string): void;
105
+ /**
106
+ * List all todos with optional filtering
107
+ * Requirement: 12.1, 12.2, 12.3, 12.7
108
+ */
109
+ listTodos(filter?: TodoFilter): Promise<TodoItem[]>;
110
+ /**
111
+ * Get tasks due today
112
+ * Requirement: 12.8
113
+ */
114
+ getTodaysTasks(): Promise<TodoItem[]>;
115
+ /**
116
+ * Update task status
117
+ * Requirement: 12.5, 12.6
118
+ */
119
+ updateTaskStatus(taskId: string, status: TodoStatus, source: TaskSource): Promise<UpdateResult>;
120
+ /**
121
+ * Sync task across all sources
122
+ * Requirement: 12.6
123
+ */
124
+ syncTaskAcrossSources(taskId: string): Promise<SyncResult>;
125
+ /**
126
+ * Filter todos based on criteria
127
+ */
128
+ filterTodos(todos: TodoItem[], filter: TodoFilter): TodoItem[];
129
+ /**
130
+ * Merge todos from different sources
131
+ */
132
+ mergeTodosFromSources(reminders: TodoItem[], notionTasks: TodoItem[]): TodoItem[];
133
+ /**
134
+ * Format todo for display
135
+ */
136
+ formatTodoForDisplay(todo: TodoItem): string;
137
+ /**
138
+ * Fetch all todos from all sources
139
+ */
140
+ private fetchAllTodos;
141
+ /**
142
+ * Fetch todos from Apple Reminders
143
+ * Uses AppleScript to query existing reminders
144
+ */
145
+ private fetchFromAppleReminders;
146
+ /**
147
+ * Map Apple Reminders priority to internal priority
148
+ */
149
+ private mapAppleRemindersPriority;
150
+ /**
151
+ * Fetch todos from Notion
152
+ * Uses MCP client to query the configured database
153
+ */
154
+ private fetchFromNotion;
155
+ /**
156
+ * Map Notion priority to internal priority
157
+ */
158
+ private mapNotionPriority;
159
+ /**
160
+ * Map Notion status to internal status
161
+ */
162
+ private mapNotionStatus;
163
+ /**
164
+ * Update task in its source
165
+ * Requirement: 12.5
166
+ */
167
+ private updateInSource;
168
+ /**
169
+ * Map internal status to Notion status format
170
+ */
171
+ private mapStatusToNotion;
172
+ /**
173
+ * Invalidate cache
174
+ */
175
+ private invalidateCache;
176
+ /**
177
+ * Get emoji for priority level
178
+ */
179
+ private getPriorityEmoji;
180
+ /**
181
+ * Get emoji for status
182
+ */
183
+ private getStatusEmoji;
184
+ }
185
+ //# sourceMappingURL=todo-list-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-list-manager.d.ts","sourceRoot":"","sources":["../../src/integrations/todo-list-manager.ts"],"names":[],"mappings":"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"}