@noteplanco/noteplan-mcp 1.1.1

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 (155) hide show
  1. package/README.md +257 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +8 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/noteplan/embeddings.d.ts +170 -0
  7. package/dist/noteplan/embeddings.d.ts.map +1 -0
  8. package/dist/noteplan/embeddings.js +684 -0
  9. package/dist/noteplan/embeddings.js.map +1 -0
  10. package/dist/noteplan/file-reader.d.ts +77 -0
  11. package/dist/noteplan/file-reader.d.ts.map +1 -0
  12. package/dist/noteplan/file-reader.js +488 -0
  13. package/dist/noteplan/file-reader.js.map +1 -0
  14. package/dist/noteplan/file-writer.d.ts +108 -0
  15. package/dist/noteplan/file-writer.d.ts.map +1 -0
  16. package/dist/noteplan/file-writer.js +621 -0
  17. package/dist/noteplan/file-writer.js.map +1 -0
  18. package/dist/noteplan/filter-store.d.ts +28 -0
  19. package/dist/noteplan/filter-store.d.ts.map +1 -0
  20. package/dist/noteplan/filter-store.js +180 -0
  21. package/dist/noteplan/filter-store.js.map +1 -0
  22. package/dist/noteplan/frontmatter-parser.d.ts +45 -0
  23. package/dist/noteplan/frontmatter-parser.d.ts.map +1 -0
  24. package/dist/noteplan/frontmatter-parser.js +259 -0
  25. package/dist/noteplan/frontmatter-parser.js.map +1 -0
  26. package/dist/noteplan/fuzzy-search.d.ts +7 -0
  27. package/dist/noteplan/fuzzy-search.d.ts.map +1 -0
  28. package/dist/noteplan/fuzzy-search.js +66 -0
  29. package/dist/noteplan/fuzzy-search.js.map +1 -0
  30. package/dist/noteplan/markdown-parser.d.ts +87 -0
  31. package/dist/noteplan/markdown-parser.d.ts.map +1 -0
  32. package/dist/noteplan/markdown-parser.js +519 -0
  33. package/dist/noteplan/markdown-parser.js.map +1 -0
  34. package/dist/noteplan/preferences.d.ts +44 -0
  35. package/dist/noteplan/preferences.d.ts.map +1 -0
  36. package/dist/noteplan/preferences.js +156 -0
  37. package/dist/noteplan/preferences.js.map +1 -0
  38. package/dist/noteplan/ripgrep-search.d.ts +29 -0
  39. package/dist/noteplan/ripgrep-search.d.ts.map +1 -0
  40. package/dist/noteplan/ripgrep-search.js +110 -0
  41. package/dist/noteplan/ripgrep-search.js.map +1 -0
  42. package/dist/noteplan/sqlite-reader.d.ts +77 -0
  43. package/dist/noteplan/sqlite-reader.d.ts.map +1 -0
  44. package/dist/noteplan/sqlite-reader.js +605 -0
  45. package/dist/noteplan/sqlite-reader.js.map +1 -0
  46. package/dist/noteplan/sqlite-writer.d.ts +63 -0
  47. package/dist/noteplan/sqlite-writer.d.ts.map +1 -0
  48. package/dist/noteplan/sqlite-writer.js +574 -0
  49. package/dist/noteplan/sqlite-writer.js.map +1 -0
  50. package/dist/noteplan/types.d.ts +97 -0
  51. package/dist/noteplan/types.d.ts.map +1 -0
  52. package/dist/noteplan/types.js +33 -0
  53. package/dist/noteplan/types.js.map +1 -0
  54. package/dist/noteplan/unified-store.d.ts +289 -0
  55. package/dist/noteplan/unified-store.d.ts.map +1 -0
  56. package/dist/noteplan/unified-store.js +1308 -0
  57. package/dist/noteplan/unified-store.js.map +1 -0
  58. package/dist/server.d.ts +4 -0
  59. package/dist/server.d.ts.map +1 -0
  60. package/dist/server.js +2468 -0
  61. package/dist/server.js.map +1 -0
  62. package/dist/tools/calendar.d.ts +311 -0
  63. package/dist/tools/calendar.d.ts.map +1 -0
  64. package/dist/tools/calendar.js +504 -0
  65. package/dist/tools/calendar.js.map +1 -0
  66. package/dist/tools/embeddings.d.ts +244 -0
  67. package/dist/tools/embeddings.d.ts.map +1 -0
  68. package/dist/tools/embeddings.js +226 -0
  69. package/dist/tools/embeddings.js.map +1 -0
  70. package/dist/tools/events.d.ts +176 -0
  71. package/dist/tools/events.d.ts.map +1 -0
  72. package/dist/tools/events.js +326 -0
  73. package/dist/tools/events.js.map +1 -0
  74. package/dist/tools/filters.d.ts +205 -0
  75. package/dist/tools/filters.d.ts.map +1 -0
  76. package/dist/tools/filters.js +347 -0
  77. package/dist/tools/filters.js.map +1 -0
  78. package/dist/tools/memory.d.ts +6 -0
  79. package/dist/tools/memory.d.ts.map +1 -0
  80. package/dist/tools/memory.js +161 -0
  81. package/dist/tools/memory.js.map +1 -0
  82. package/dist/tools/notes.d.ts +1221 -0
  83. package/dist/tools/notes.d.ts.map +1 -0
  84. package/dist/tools/notes.js +1868 -0
  85. package/dist/tools/notes.js.map +1 -0
  86. package/dist/tools/plugins.d.ts +140 -0
  87. package/dist/tools/plugins.d.ts.map +1 -0
  88. package/dist/tools/plugins.js +782 -0
  89. package/dist/tools/plugins.js.map +1 -0
  90. package/dist/tools/reminders.d.ts +207 -0
  91. package/dist/tools/reminders.d.ts.map +1 -0
  92. package/dist/tools/reminders.js +323 -0
  93. package/dist/tools/reminders.js.map +1 -0
  94. package/dist/tools/search.d.ts +58 -0
  95. package/dist/tools/search.d.ts.map +1 -0
  96. package/dist/tools/search.js +373 -0
  97. package/dist/tools/search.js.map +1 -0
  98. package/dist/tools/spaces.d.ts +484 -0
  99. package/dist/tools/spaces.d.ts.map +1 -0
  100. package/dist/tools/spaces.js +870 -0
  101. package/dist/tools/spaces.js.map +1 -0
  102. package/dist/tools/tasks.d.ts +313 -0
  103. package/dist/tools/tasks.d.ts.map +1 -0
  104. package/dist/tools/tasks.js +690 -0
  105. package/dist/tools/tasks.js.map +1 -0
  106. package/dist/tools/themes.d.ts +91 -0
  107. package/dist/tools/themes.d.ts.map +1 -0
  108. package/dist/tools/themes.js +294 -0
  109. package/dist/tools/themes.js.map +1 -0
  110. package/dist/tools/ui.d.ts +89 -0
  111. package/dist/tools/ui.d.ts.map +1 -0
  112. package/dist/tools/ui.js +137 -0
  113. package/dist/tools/ui.js.map +1 -0
  114. package/dist/utils/applescript.d.ts +5 -0
  115. package/dist/utils/applescript.d.ts.map +1 -0
  116. package/dist/utils/applescript.js +27 -0
  117. package/dist/utils/applescript.js.map +1 -0
  118. package/dist/utils/confirmation-tokens.d.ts +19 -0
  119. package/dist/utils/confirmation-tokens.d.ts.map +1 -0
  120. package/dist/utils/confirmation-tokens.js +58 -0
  121. package/dist/utils/confirmation-tokens.js.map +1 -0
  122. package/dist/utils/date-filters.d.ts +15 -0
  123. package/dist/utils/date-filters.d.ts.map +1 -0
  124. package/dist/utils/date-filters.js +129 -0
  125. package/dist/utils/date-filters.js.map +1 -0
  126. package/dist/utils/date-utils.d.ts +113 -0
  127. package/dist/utils/date-utils.d.ts.map +1 -0
  128. package/dist/utils/date-utils.js +341 -0
  129. package/dist/utils/date-utils.js.map +1 -0
  130. package/dist/utils/folder-matcher.d.ts +14 -0
  131. package/dist/utils/folder-matcher.d.ts.map +1 -0
  132. package/dist/utils/folder-matcher.js +191 -0
  133. package/dist/utils/folder-matcher.js.map +1 -0
  134. package/dist/utils/version.d.ts +10 -0
  135. package/dist/utils/version.d.ts.map +1 -0
  136. package/dist/utils/version.js +88 -0
  137. package/dist/utils/version.js.map +1 -0
  138. package/docs/plugin-api/Calendar.md +448 -0
  139. package/docs/plugin-api/CalendarItem.md +198 -0
  140. package/docs/plugin-api/Clipboard.md +101 -0
  141. package/docs/plugin-api/CommandBar.md +251 -0
  142. package/docs/plugin-api/DataStore.md +700 -0
  143. package/docs/plugin-api/Editor.md +982 -0
  144. package/docs/plugin-api/HTMLView.md +337 -0
  145. package/docs/plugin-api/NoteObject.md +588 -0
  146. package/docs/plugin-api/NotePlan.md +398 -0
  147. package/docs/plugin-api/ParagraphObject.md +242 -0
  148. package/docs/plugin-api/RangeObject.md +56 -0
  149. package/docs/plugin-api/getting-started.md +545 -0
  150. package/docs/plugin-api/plugin-api-condensed.md +526 -0
  151. package/docs/plugin-api/plugin.json +26 -0
  152. package/docs/plugin-api/script.js +542 -0
  153. package/package.json +60 -0
  154. package/scripts/calendar-helper +0 -0
  155. package/scripts/reminders-helper +0 -0
@@ -0,0 +1,347 @@
1
+ import { z } from 'zod';
2
+ import * as filterStore from '../noteplan/filter-store.js';
3
+ import * as taskTools from './tasks.js';
4
+ function toBoundedInt(value, defaultValue, min, max) {
5
+ const numeric = typeof value === 'number' ? value : Number(value);
6
+ if (!Number.isFinite(numeric))
7
+ return defaultValue;
8
+ return Math.min(max, Math.max(min, Math.floor(numeric)));
9
+ }
10
+ const BOOLEAN_FILTER_PARAMS = new Set([
11
+ 'fp_open',
12
+ 'fp_done',
13
+ 'fp_scheduled',
14
+ 'fp_canceled',
15
+ 'fp_event',
16
+ 'fp_reminder',
17
+ 'fp_noStatus',
18
+ 'fp_noteItem',
19
+ 'fp_datedNoteItem',
20
+ 'fp_calendarItem',
21
+ 'fp_sortPastFuture',
22
+ 'fp_showMonthly',
23
+ 'fp_showWeekly',
24
+ 'fp_showTimeBlockedEvents',
25
+ 'fp_hidePastEvents',
26
+ 'fp_listReminders',
27
+ 'fp_checklist',
28
+ 'fp_checklistDone',
29
+ 'fp_checklistScheduled',
30
+ 'fp_checklistCancelled',
31
+ 'fp_excludeArchive',
32
+ 'fp_excludeTeamspaces',
33
+ ]);
34
+ const FILTER_PARAMETER_DEFINITIONS = [
35
+ { param: 'fp_open', type: 'boolean', description: 'Include open tasks' },
36
+ { param: 'fp_done', type: 'boolean', description: 'Include completed tasks' },
37
+ { param: 'fp_scheduled', type: 'boolean', description: 'Include scheduled tasks' },
38
+ { param: 'fp_canceled', type: 'boolean', description: 'Include cancelled tasks' },
39
+ { param: 'fp_noStatus', type: 'boolean', description: 'Include non-task lines (NotePlan UI behavior)' },
40
+ { param: 'fp_timeframe', type: 'timeframe', description: 'Timeframe key (e.g. fptf_thisWeek, fptf_future)' },
41
+ { param: 'fp_startDate', type: 'string', description: 'Custom timeframe start date (yyyy-MM-dd HH:mm:ss)' },
42
+ { param: 'fp_endDate', type: 'string', description: 'Custom timeframe end date (yyyy-MM-dd HH:mm:ss)' },
43
+ { param: 'fp_keyword', type: 'string', description: 'Keyword search text' },
44
+ { param: 'fp_filename', type: 'string', description: 'Filename filter text' },
45
+ { param: 'fp_underHeading', type: 'string', description: 'Heading constraint for task views' },
46
+ { param: 'fp_noteItem', type: 'boolean', description: 'Include project-note tasks' },
47
+ { param: 'fp_datedNoteItem', type: 'boolean', description: 'Include calendar-note tasks' },
48
+ { param: 'fp_calendarItem', type: 'boolean', description: 'Include calendar note items' },
49
+ { param: 'fp_teamspaces', type: 'string[]', description: 'TeamSpace IDs joined with $$::$$ in storage' },
50
+ { param: 'fp_checklist', type: 'boolean', description: 'Include open checklist items' },
51
+ { param: 'fp_checklistDone', type: 'boolean', description: 'Include completed checklist items' },
52
+ { param: 'fp_checklistScheduled', type: 'boolean', description: 'Include scheduled checklist items' },
53
+ { param: 'fp_checklistCancelled', type: 'boolean', description: 'Include cancelled checklist items' },
54
+ ];
55
+ const FILTER_TIMEFRAME_VALUES = [
56
+ 'fptf_allTime',
57
+ 'fptf_allTimeCappedPast',
58
+ 'fptf_rolling30Days',
59
+ 'fptf_today',
60
+ 'fptf_pastAndToday',
61
+ 'fptf_past',
62
+ 'fptf_future',
63
+ 'fptf_lastWeek',
64
+ 'fptf_thisWeek',
65
+ 'fptf_nextWeek',
66
+ 'fptf_lastMonth',
67
+ 'fptf_thisMonth',
68
+ 'fptf_nextMonth',
69
+ 'fptf_lastYear',
70
+ 'fptf_thisYear',
71
+ 'fptf_nextYear',
72
+ 'fptf_custom',
73
+ ];
74
+ function parseFilterItemValue(param, value) {
75
+ if (BOOLEAN_FILTER_PARAMS.has(param)) {
76
+ if (value === 'true')
77
+ return true;
78
+ if (value === 'false')
79
+ return false;
80
+ }
81
+ if (param === 'fp_teamspaces') {
82
+ return value.length > 0 ? value.split('$$::$$').filter((entry) => entry.length > 0) : [];
83
+ }
84
+ return value;
85
+ }
86
+ function boolParam(items, param) {
87
+ const raw = items.find((item) => item.param === param)?.value;
88
+ if (raw === 'true')
89
+ return true;
90
+ if (raw === 'false')
91
+ return false;
92
+ return undefined;
93
+ }
94
+ function stringParam(items, param) {
95
+ const raw = items.find((item) => item.param === param)?.value;
96
+ if (typeof raw !== 'string')
97
+ return undefined;
98
+ const trimmed = raw.trim();
99
+ return trimmed.length > 0 ? trimmed : undefined;
100
+ }
101
+ function mapFilterToTaskQuery(items) {
102
+ const unsupportedRules = [];
103
+ const statuses = [];
104
+ if (boolParam(items, 'fp_open') === true)
105
+ statuses.push('open');
106
+ if (boolParam(items, 'fp_done') === true)
107
+ statuses.push('done');
108
+ if (boolParam(items, 'fp_scheduled') === true)
109
+ statuses.push('scheduled');
110
+ if (boolParam(items, 'fp_canceled') === true)
111
+ statuses.push('cancelled');
112
+ const includeProject = boolParam(items, 'fp_noteItem');
113
+ const includeCalendar = boolParam(items, 'fp_datedNoteItem') === true || boolParam(items, 'fp_calendarItem') === true;
114
+ const noteTypes = [];
115
+ if (includeProject === true)
116
+ noteTypes.push('note');
117
+ if (includeCalendar)
118
+ noteTypes.push('calendar');
119
+ const keyword = stringParam(items, 'fp_keyword');
120
+ const query = keyword ?? '*';
121
+ const periodicOnly = boolParam(items, 'fp_showWeekly') === true || boolParam(items, 'fp_showMonthly') === true;
122
+ const preferCalendar = includeCalendar || periodicOnly;
123
+ const timeframe = stringParam(items, 'fp_timeframe');
124
+ if (timeframe && timeframe !== 'fptf_allTime' && timeframe !== 'fptf_custom') {
125
+ unsupportedRules.push(`timeframe (${timeframe}) is not fully mapped yet`);
126
+ }
127
+ if (stringParam(items, 'fp_underHeading')) {
128
+ unsupportedRules.push('underHeading is not mapped in global task search');
129
+ }
130
+ if (boolParam(items, 'fp_noStatus') === true) {
131
+ unsupportedRules.push('noStatus includes non-task lines in NotePlan UI and is not represented in MCP task search');
132
+ }
133
+ if (boolParam(items, 'fp_event') === true || boolParam(items, 'fp_reminder') === true || boolParam(items, 'fp_listReminders') === true) {
134
+ unsupportedRules.push('event/reminder filter rules are not included in noteplan_get_filter_tasks');
135
+ }
136
+ return {
137
+ query,
138
+ status: statuses.length > 0 ? statuses : undefined,
139
+ noteTypes: noteTypes.length > 0 ? noteTypes : undefined,
140
+ preferCalendar,
141
+ periodicOnly,
142
+ unsupportedRules,
143
+ };
144
+ }
145
+ export const listFiltersSchema = z.object({
146
+ query: z.string().optional().describe('Filter names by substring'),
147
+ limit: z.number().min(1).max(200).optional().default(50).describe('Maximum filters to return'),
148
+ offset: z.number().min(0).optional().default(0).describe('Pagination offset'),
149
+ cursor: z.string().optional().describe('Cursor token from previous page (preferred over offset)'),
150
+ });
151
+ export const getFilterSchema = z.object({
152
+ name: z.string().describe('Filter name'),
153
+ });
154
+ export const saveFilterSchema = z.object({
155
+ name: z.string().describe('Filter name'),
156
+ overwrite: z.boolean().optional().default(true).describe('Overwrite existing filter with the same name'),
157
+ items: z
158
+ .array(z.object({
159
+ param: z.string().describe('Filter parameter key, e.g. fp_open, fp_keyword'),
160
+ value: z
161
+ .union([z.string(), z.boolean(), z.number(), z.array(z.string())])
162
+ .describe('Stored filter value. Arrays are joined using $$::$$ for teamspaces'),
163
+ display: z.boolean().optional().describe('Whether this item is shown in UI (default: true)'),
164
+ }))
165
+ .min(1)
166
+ .describe('Filter items to persist'),
167
+ });
168
+ export const renameFilterSchema = z.object({
169
+ oldName: z.string().describe('Existing filter name'),
170
+ newName: z.string().describe('New filter name'),
171
+ overwrite: z.boolean().optional().default(false).describe('Allow replacing an existing target name'),
172
+ });
173
+ export const getFilterTasksSchema = z.object({
174
+ name: z.string().describe('Filter name to execute against note tasks'),
175
+ maxNotes: z.number().min(1).max(2000).optional().default(500).describe('Maximum notes to scan'),
176
+ limit: z.number().min(1).max(300).optional().default(30).describe('Maximum matches to return'),
177
+ offset: z.number().min(0).optional().default(0).describe('Pagination offset'),
178
+ cursor: z.string().optional().describe('Cursor token from previous page (preferred over offset)'),
179
+ space: z.string().optional().describe('Optional space name or ID scope'),
180
+ folder: z.string().optional().describe('Optional folder scope'),
181
+ });
182
+ export function listFilters(params) {
183
+ try {
184
+ const query = typeof params.query === 'string' ? params.query.trim().toLowerCase() : '';
185
+ const all = filterStore.listFilters();
186
+ const filtered = query
187
+ ? all.filter((entry) => entry.name.toLowerCase().includes(query))
188
+ : all;
189
+ const offset = toBoundedInt(params.cursor ?? params.offset, 0, 0, Number.MAX_SAFE_INTEGER);
190
+ const limit = toBoundedInt(params.limit, 50, 1, 200);
191
+ const page = filtered.slice(offset, offset + limit);
192
+ const hasMore = offset + page.length < filtered.length;
193
+ const nextCursor = hasMore ? String(offset + page.length) : null;
194
+ return {
195
+ success: true,
196
+ count: page.length,
197
+ totalCount: filtered.length,
198
+ offset,
199
+ limit,
200
+ hasMore,
201
+ nextCursor,
202
+ filters: page.map((entry) => ({
203
+ name: entry.name,
204
+ createdAt: entry.createdAt?.toISOString(),
205
+ modifiedAt: entry.modifiedAt?.toISOString(),
206
+ })),
207
+ };
208
+ }
209
+ catch (error) {
210
+ return {
211
+ success: false,
212
+ error: error instanceof Error ? error.message : 'Failed to list filters',
213
+ };
214
+ }
215
+ }
216
+ export function getFilter(params) {
217
+ try {
218
+ const filter = filterStore.getFilter(params.name);
219
+ if (!filter) {
220
+ return {
221
+ success: false,
222
+ error: `Filter not found: ${params.name}`,
223
+ };
224
+ }
225
+ return {
226
+ success: true,
227
+ filter: {
228
+ name: filter.name,
229
+ createdAt: filter.createdAt?.toISOString(),
230
+ modifiedAt: filter.modifiedAt?.toISOString(),
231
+ itemCount: filter.items.length,
232
+ items: filter.items.map((item) => ({
233
+ param: item.param,
234
+ value: item.value,
235
+ parsedValue: parseFilterItemValue(item.param, item.value),
236
+ display: item.display,
237
+ })),
238
+ },
239
+ };
240
+ }
241
+ catch (error) {
242
+ return {
243
+ success: false,
244
+ error: error instanceof Error ? error.message : 'Failed to get filter',
245
+ };
246
+ }
247
+ }
248
+ export function saveFilter(params) {
249
+ try {
250
+ const stored = filterStore.saveFilter(params.name, params.items, {
251
+ overwrite: params.overwrite !== false,
252
+ });
253
+ return {
254
+ success: true,
255
+ message: `Filter saved: ${stored.name}`,
256
+ filter: {
257
+ name: stored.name,
258
+ createdAt: stored.createdAt?.toISOString(),
259
+ modifiedAt: stored.modifiedAt?.toISOString(),
260
+ itemCount: stored.items.length,
261
+ items: stored.items,
262
+ },
263
+ };
264
+ }
265
+ catch (error) {
266
+ return {
267
+ success: false,
268
+ error: error instanceof Error ? error.message : 'Failed to save filter',
269
+ };
270
+ }
271
+ }
272
+ export function renameFilter(params) {
273
+ try {
274
+ const stored = filterStore.renameFilter(params.oldName, params.newName, params.overwrite === true);
275
+ return {
276
+ success: true,
277
+ message: `Filter renamed to ${stored.name}`,
278
+ filter: {
279
+ name: stored.name,
280
+ createdAt: stored.createdAt?.toISOString(),
281
+ modifiedAt: stored.modifiedAt?.toISOString(),
282
+ itemCount: stored.items.length,
283
+ },
284
+ };
285
+ }
286
+ catch (error) {
287
+ return {
288
+ success: false,
289
+ error: error instanceof Error ? error.message : 'Failed to rename filter',
290
+ };
291
+ }
292
+ }
293
+ export function getFilterTasks(params) {
294
+ try {
295
+ const filter = filterStore.getFilter(params.name);
296
+ if (!filter) {
297
+ return {
298
+ success: false,
299
+ error: `Filter not found: ${params.name}`,
300
+ };
301
+ }
302
+ const mapped = mapFilterToTaskQuery(filter.items);
303
+ const searchResult = taskTools.searchTasksGlobal({
304
+ query: mapped.query,
305
+ status: mapped.status,
306
+ noteTypes: mapped.noteTypes,
307
+ preferCalendar: mapped.preferCalendar,
308
+ periodicOnly: mapped.periodicOnly,
309
+ maxNotes: params.maxNotes,
310
+ limit: params.limit,
311
+ offset: params.offset,
312
+ cursor: params.cursor,
313
+ space: params.space,
314
+ folder: params.folder,
315
+ });
316
+ return {
317
+ ...searchResult,
318
+ filter: {
319
+ name: filter.name,
320
+ itemCount: filter.items.length,
321
+ },
322
+ mappedQuery: {
323
+ query: mapped.query,
324
+ status: mapped.status,
325
+ noteTypes: mapped.noteTypes,
326
+ preferCalendar: mapped.preferCalendar,
327
+ periodicOnly: mapped.periodicOnly,
328
+ },
329
+ unsupportedRules: mapped.unsupportedRules,
330
+ };
331
+ }
332
+ catch (error) {
333
+ return {
334
+ success: false,
335
+ error: error instanceof Error ? error.message : 'Failed to execute filter tasks',
336
+ };
337
+ }
338
+ }
339
+ export function listFilterParameters() {
340
+ return {
341
+ success: true,
342
+ count: FILTER_PARAMETER_DEFINITIONS.length,
343
+ parameters: FILTER_PARAMETER_DEFINITIONS,
344
+ timeframeValues: FILTER_TIMEFRAME_VALUES,
345
+ };
346
+ }
347
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/tools/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function getMemoryCount(): number;
2
+ export declare function saveMemory(args: unknown): Record<string, unknown>;
3
+ export declare function listMemories(args: unknown): Record<string, unknown>;
4
+ export declare function updateMemory(args: unknown): Record<string, unknown>;
5
+ export declare function deleteMemory(args: unknown): Record<string, unknown>;
6
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AA+CA,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAgCD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgCnE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BnE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBnE"}
@@ -0,0 +1,161 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import crypto from 'crypto';
5
+ import { z } from 'zod';
6
+ const MEMORY_DIR = path.join(os.homedir(), '.noteplan-mcp');
7
+ const MEMORY_FILE_PATH = path.join(MEMORY_DIR, 'memories.json');
8
+ function generateId() {
9
+ return `m_${Date.now()}_${crypto.randomBytes(2).toString('hex')}`;
10
+ }
11
+ function readStore() {
12
+ try {
13
+ const data = fs.readFileSync(MEMORY_FILE_PATH, 'utf-8');
14
+ const parsed = JSON.parse(data);
15
+ if (parsed && typeof parsed === 'object' && Array.isArray(parsed.memories)) {
16
+ return parsed;
17
+ }
18
+ return { version: 1, memories: [] };
19
+ }
20
+ catch {
21
+ return { version: 1, memories: [] };
22
+ }
23
+ }
24
+ let cachedCount = null;
25
+ function writeStore(store) {
26
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
27
+ fs.writeFileSync(MEMORY_FILE_PATH, JSON.stringify(store, null, 2), 'utf-8');
28
+ cachedCount = store.memories.length;
29
+ }
30
+ export function getMemoryCount() {
31
+ if (cachedCount !== null)
32
+ return cachedCount;
33
+ cachedCount = readStore().memories.length;
34
+ return cachedCount;
35
+ }
36
+ // --- Schemas ---
37
+ const saveMemorySchema = z.object({
38
+ content: z.string().min(1).max(2000).describe('The memory content to save (1-2000 characters)'),
39
+ tags: z
40
+ .array(z.string())
41
+ .max(10)
42
+ .optional()
43
+ .describe('Optional tags for categorizing the memory (max 10)'),
44
+ });
45
+ const listMemoriesSchema = z.object({
46
+ tag: z.string().optional().describe('Filter by exact tag (case-insensitive)'),
47
+ query: z.string().optional().describe('Search content by substring (case-insensitive)'),
48
+ limit: z.number().min(1).max(200).optional().default(50).describe('Maximum memories to return (default: 50)'),
49
+ offset: z.number().min(0).optional().default(0).describe('Pagination offset (default: 0)'),
50
+ });
51
+ const updateMemorySchema = z.object({
52
+ id: z.string().describe('The memory ID to update'),
53
+ content: z.string().min(1).max(2000).optional().describe('New content for the memory'),
54
+ tags: z.array(z.string()).max(10).optional().describe('New tags for the memory'),
55
+ });
56
+ const deleteMemorySchema = z.object({
57
+ id: z.string().describe('The memory ID to delete'),
58
+ });
59
+ // --- CRUD functions ---
60
+ export function saveMemory(args) {
61
+ const parsed = saveMemorySchema.safeParse(args);
62
+ if (!parsed.success) {
63
+ return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };
64
+ }
65
+ const { content, tags: rawTags } = parsed.data;
66
+ const tags = (rawTags ?? []).map((t) => t.trim().toLowerCase()).filter(Boolean);
67
+ const now = new Date().toISOString();
68
+ const memory = {
69
+ id: generateId(),
70
+ content,
71
+ tags,
72
+ createdAt: now,
73
+ updatedAt: now,
74
+ };
75
+ const store = readStore();
76
+ store.memories.push(memory);
77
+ writeStore(store);
78
+ return {
79
+ success: true,
80
+ message: `Memory saved with ID ${memory.id}`,
81
+ memory,
82
+ totalMemories: store.memories.length,
83
+ };
84
+ }
85
+ export function listMemories(args) {
86
+ const parsed = listMemoriesSchema.safeParse(args ?? {});
87
+ if (!parsed.success) {
88
+ return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };
89
+ }
90
+ const { tag, query, limit, offset } = parsed.data;
91
+ const store = readStore();
92
+ let filtered = store.memories;
93
+ if (tag) {
94
+ const lowerTag = tag.toLowerCase();
95
+ filtered = filtered.filter((m) => m.tags.some((t) => t.toLowerCase() === lowerTag));
96
+ }
97
+ if (query) {
98
+ const lowerQuery = query.toLowerCase();
99
+ filtered = filtered.filter((m) => m.content.toLowerCase().includes(lowerQuery));
100
+ }
101
+ const totalCount = filtered.length;
102
+ const paged = filtered.slice(offset, offset + limit);
103
+ return {
104
+ success: true,
105
+ count: paged.length,
106
+ totalCount,
107
+ offset,
108
+ limit,
109
+ hasMore: offset + limit < totalCount,
110
+ memories: paged,
111
+ };
112
+ }
113
+ export function updateMemory(args) {
114
+ const parsed = updateMemorySchema.safeParse(args);
115
+ if (!parsed.success) {
116
+ return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };
117
+ }
118
+ const { id, content, tags: rawTags } = parsed.data;
119
+ if (content === undefined && rawTags === undefined) {
120
+ return { success: false, error: 'At least one of content or tags must be provided' };
121
+ }
122
+ const store = readStore();
123
+ const memory = store.memories.find((m) => m.id === id);
124
+ if (!memory) {
125
+ return { success: false, error: `Memory not found: ${id}` };
126
+ }
127
+ if (content !== undefined) {
128
+ memory.content = content;
129
+ }
130
+ if (rawTags !== undefined) {
131
+ memory.tags = rawTags.map((t) => t.trim().toLowerCase()).filter(Boolean);
132
+ }
133
+ memory.updatedAt = new Date().toISOString();
134
+ writeStore(store);
135
+ return {
136
+ success: true,
137
+ message: `Memory ${id} updated`,
138
+ memory,
139
+ };
140
+ }
141
+ export function deleteMemory(args) {
142
+ const parsed = deleteMemorySchema.safeParse(args);
143
+ if (!parsed.success) {
144
+ return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };
145
+ }
146
+ const { id } = parsed.data;
147
+ const store = readStore();
148
+ const index = store.memories.findIndex((m) => m.id === id);
149
+ if (index === -1) {
150
+ return { success: false, error: `Memory not found: ${id}` };
151
+ }
152
+ store.memories.splice(index, 1);
153
+ writeStore(store);
154
+ return {
155
+ success: true,
156
+ message: `Memory ${id} deleted`,
157
+ deletedId: id,
158
+ remainingCount: store.memories.length,
159
+ };
160
+ }
161
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAEhE,SAAS,UAAU;IACjB,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,OAAO,MAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,IAAI,WAAW,GAAkB,IAAI,CAAC;AAEtC,SAAS,UAAU,CAAC,KAAkB;IACpC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC7C,WAAW,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAkB;AAElB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC/F,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;CAClE,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC7E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC7G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACtF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACjF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACnD,CAAC,CAAC;AAEH,yBAAyB;AAEzB,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAW;QACrB,EAAE,EAAE,UAAU,EAAE;QAChB,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,UAAU,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,wBAAwB,MAAM,CAAC,EAAE,EAAE;QAC5C,MAAM;QACN,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAE9B,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAErD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,UAAU;QACV,MAAM;QACN,KAAK;QACL,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU;QACpC,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,UAAU,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,UAAU,EAAE,UAAU;QAC/B,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChC,UAAU,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,UAAU,EAAE,UAAU;QAC/B,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;KACtC,CAAC;AACJ,CAAC"}