@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,504 @@
1
+ // Calendar/daily note operations
2
+ import { z } from 'zod';
3
+ import * as store from '../noteplan/unified-store.js';
4
+ import { parseFlexibleDate, formatDateForDisplay, formatDateString, getDateRange, getDatesInRange, getWeekRespectingPreference, } from '../utils/date-utils.js';
5
+ function toBoundedInt(value, defaultValue, min, max) {
6
+ const numeric = typeof value === 'number' ? value : Number(value);
7
+ if (!Number.isFinite(numeric))
8
+ return defaultValue;
9
+ return Math.min(max, Math.max(min, Math.floor(numeric)));
10
+ }
11
+ export const getTodaySchema = z.object({
12
+ space: z.string().optional().describe('Space name or ID to get today from'),
13
+ });
14
+ export const addToTodaySchema = z.object({
15
+ content: z.string().describe('Content to add to today\'s note'),
16
+ position: z
17
+ .enum(['start', 'end'])
18
+ .optional()
19
+ .default('end')
20
+ .describe('Where to add the content'),
21
+ space: z.string().optional().describe('Space name or ID'),
22
+ });
23
+ export const getCalendarNoteSchema = z.object({
24
+ date: z
25
+ .string()
26
+ .describe('Date in YYYYMMDD, YYYY-MM-DD format, or "today", "tomorrow", "yesterday"'),
27
+ space: z.string().optional().describe('Space name or ID'),
28
+ });
29
+ export function getToday(params) {
30
+ const note = store.getTodayNote(params.space);
31
+ if (!note) {
32
+ // Try to create it
33
+ try {
34
+ const createdNote = store.ensureCalendarNote('today', params.space);
35
+ return {
36
+ success: true,
37
+ note: {
38
+ title: createdNote.title,
39
+ filename: createdNote.filename,
40
+ content: createdNote.content,
41
+ type: createdNote.type,
42
+ source: createdNote.source,
43
+ date: createdNote.date,
44
+ displayDate: createdNote.date ? formatDateForDisplay(createdNote.date) : undefined,
45
+ },
46
+ created: true,
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ success: false,
52
+ error: 'Today\'s note not found and could not be created',
53
+ };
54
+ }
55
+ }
56
+ return {
57
+ success: true,
58
+ note: {
59
+ title: note.title,
60
+ filename: note.filename,
61
+ content: note.content,
62
+ type: note.type,
63
+ source: note.source,
64
+ date: note.date,
65
+ displayDate: note.date ? formatDateForDisplay(note.date) : undefined,
66
+ },
67
+ };
68
+ }
69
+ export function addToToday(params) {
70
+ try {
71
+ const note = store.addToToday(params.content, params.position, params.space);
72
+ return {
73
+ success: true,
74
+ message: `Content added to today's note`,
75
+ note: {
76
+ filename: note.filename,
77
+ date: note.date,
78
+ },
79
+ };
80
+ }
81
+ catch (error) {
82
+ return {
83
+ success: false,
84
+ error: error instanceof Error ? error.message : 'Failed to add content to today',
85
+ };
86
+ }
87
+ }
88
+ export function getCalendarNote(params) {
89
+ const dateStr = parseFlexibleDate(params.date);
90
+ const note = store.getCalendarNote(dateStr, params.space);
91
+ if (!note) {
92
+ return {
93
+ success: false,
94
+ error: `Calendar note not found for date: ${params.date}`,
95
+ parsedDate: dateStr,
96
+ displayDate: formatDateForDisplay(dateStr),
97
+ };
98
+ }
99
+ return {
100
+ success: true,
101
+ note: {
102
+ title: note.title,
103
+ filename: note.filename,
104
+ content: note.content,
105
+ type: note.type,
106
+ source: note.source,
107
+ date: note.date,
108
+ displayDate: note.date ? formatDateForDisplay(note.date) : undefined,
109
+ },
110
+ };
111
+ }
112
+ // Periodic note schemas
113
+ export const getPeriodicNoteSchema = z.object({
114
+ type: z.enum(['weekly', 'monthly', 'quarterly', 'yearly']).describe('Type of periodic note'),
115
+ date: z.string().optional().describe('Reference date (defaults to current). Use YYYY-MM-DD format.'),
116
+ week: z.number().optional().describe('For weekly notes: specific week number (1-53). Use with year parameter.'),
117
+ year: z.number().optional().describe('For weekly/yearly notes: specific year (e.g., 2025)'),
118
+ month: z.number().optional().describe('For monthly notes: specific month (1-12). Use with year parameter.'),
119
+ quarter: z.number().optional().describe('For quarterly notes: specific quarter (1-4). Use with year parameter.'),
120
+ space: z.string().optional().describe('Space name or ID'),
121
+ });
122
+ export const getNotesInRangeSchema = z.object({
123
+ period: z
124
+ .enum(['today', 'yesterday', 'this-week', 'last-week', 'this-month', 'last-month', 'custom'])
125
+ .describe('Predefined period or "custom" for date range'),
126
+ startDate: z.string().optional().describe('Start date for custom range (YYYY-MM-DD)'),
127
+ endDate: z.string().optional().describe('End date for custom range (YYYY-MM-DD)'),
128
+ includeContent: z.boolean().optional().describe('Include full note content (default: false for summaries only)'),
129
+ space: z.string().optional().describe('Space name or ID'),
130
+ maxDays: z.number().min(1).max(366).optional().default(90).describe('Maximum number of days to scan'),
131
+ limit: z.number().min(1).max(200).optional().default(50).describe('Maximum number of days to return in this page'),
132
+ offset: z.number().min(0).optional().default(0).describe('Pagination offset within scanned days'),
133
+ cursor: z.string().optional().describe('Cursor token from previous page (preferred over offset)'),
134
+ });
135
+ export const getRecentPeriodicNotesSchema = z.object({
136
+ type: z
137
+ .enum(['weekly', 'monthly', 'quarterly', 'yearly'])
138
+ .optional()
139
+ .default('weekly')
140
+ .describe('Type of periodic note'),
141
+ count: z
142
+ .number()
143
+ .min(1)
144
+ .max(50)
145
+ .optional()
146
+ .default(6)
147
+ .describe('How many matching periodic notes to return'),
148
+ fromDate: z
149
+ .string()
150
+ .optional()
151
+ .describe('Reference date (YYYY-MM-DD). Defaults to today'),
152
+ includeContent: z
153
+ .boolean()
154
+ .optional()
155
+ .default(false)
156
+ .describe('Include full note content (default: false)'),
157
+ includeMissing: z
158
+ .boolean()
159
+ .optional()
160
+ .default(false)
161
+ .describe('Include entries for missing periods (default: false)'),
162
+ maxLookback: z
163
+ .number()
164
+ .min(1)
165
+ .max(260)
166
+ .optional()
167
+ .default(52)
168
+ .describe('Max period slots to inspect while collecting matches'),
169
+ space: z.string().optional().describe('Space name or ID'),
170
+ });
171
+ export const getNotesInFolderSchema = z.object({
172
+ folder: z.string().describe('Folder path (e.g., "Projects", "10 - Projects")'),
173
+ includeContent: z.boolean().optional().describe('Include full note content (default: false)'),
174
+ limit: z.number().min(1).max(200).optional().describe('Maximum number of notes to return (default: 50)'),
175
+ offset: z.number().min(0).optional().default(0).describe('Pagination offset'),
176
+ cursor: z.string().optional().describe('Cursor token from previous page (preferred over offset)'),
177
+ });
178
+ function shiftDateBackByPeriod(date, type) {
179
+ const shifted = new Date(date);
180
+ switch (type) {
181
+ case 'weekly':
182
+ shifted.setDate(shifted.getDate() - 7);
183
+ return shifted;
184
+ case 'monthly':
185
+ shifted.setMonth(shifted.getMonth() - 1);
186
+ return shifted;
187
+ case 'quarterly':
188
+ shifted.setMonth(shifted.getMonth() - 3);
189
+ return shifted;
190
+ case 'yearly':
191
+ shifted.setFullYear(shifted.getFullYear() - 1);
192
+ return shifted;
193
+ }
194
+ }
195
+ /**
196
+ * Get a periodic note (weekly, monthly, quarterly, yearly)
197
+ * Tries multiple paths with both .md and .txt extensions
198
+ */
199
+ export function getPeriodicNote(params) {
200
+ try {
201
+ const refDate = params.date ? new Date(params.date) : new Date();
202
+ const currentYear = new Date().getFullYear();
203
+ let baseFilename; // Without extension
204
+ let displayName;
205
+ let folderYear; // Year to use in folder path
206
+ switch (params.type) {
207
+ case 'weekly': {
208
+ // Allow direct week/year specification, or derive from date
209
+ let weekNum;
210
+ let weekYear;
211
+ if (params.week !== undefined) {
212
+ weekNum = params.week;
213
+ weekYear = params.year || currentYear;
214
+ }
215
+ else {
216
+ // Use week calculation that respects NotePlan's firstDayOfWeek preference
217
+ const weekInfo = getWeekRespectingPreference(refDate);
218
+ weekNum = weekInfo.week;
219
+ weekYear = weekInfo.year;
220
+ }
221
+ const weekStr = String(weekNum).padStart(2, '0');
222
+ baseFilename = `${weekYear}-W${weekStr}`;
223
+ displayName = `Week ${weekNum}, ${weekYear}`;
224
+ folderYear = weekYear;
225
+ break;
226
+ }
227
+ case 'monthly': {
228
+ // Allow direct month/year specification
229
+ let monthNum;
230
+ let monthYear;
231
+ if (params.month !== undefined) {
232
+ monthNum = params.month;
233
+ monthYear = params.year || currentYear;
234
+ }
235
+ else {
236
+ monthNum = refDate.getMonth() + 1;
237
+ monthYear = refDate.getFullYear();
238
+ }
239
+ const monthStr = String(monthNum).padStart(2, '0');
240
+ baseFilename = `${monthYear}-${monthStr}`;
241
+ const monthDate = new Date(monthYear, monthNum - 1, 1);
242
+ displayName = monthDate.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });
243
+ folderYear = monthYear;
244
+ break;
245
+ }
246
+ case 'quarterly': {
247
+ // Allow direct quarter/year specification
248
+ let quarterNum;
249
+ let quarterYear;
250
+ if (params.quarter !== undefined) {
251
+ quarterNum = params.quarter;
252
+ quarterYear = params.year || currentYear;
253
+ }
254
+ else {
255
+ quarterNum = Math.floor(refDate.getMonth() / 3) + 1;
256
+ quarterYear = refDate.getFullYear();
257
+ }
258
+ baseFilename = `${quarterYear}-Q${quarterNum}`;
259
+ displayName = `Q${quarterNum} ${quarterYear}`;
260
+ folderYear = quarterYear;
261
+ break;
262
+ }
263
+ case 'yearly': {
264
+ // Allow direct year specification
265
+ const yearNum = params.year || refDate.getFullYear();
266
+ baseFilename = `${yearNum}`;
267
+ displayName = `${yearNum}`;
268
+ folderYear = yearNum;
269
+ break;
270
+ }
271
+ }
272
+ // Build list of paths to try - flat structure first (more common), then year subfolder
273
+ const pathsToTry = [
274
+ `Calendar/${baseFilename}.txt`,
275
+ `Calendar/${baseFilename}.md`,
276
+ `Calendar/${folderYear}/${baseFilename}.txt`,
277
+ `Calendar/${folderYear}/${baseFilename}.md`,
278
+ ];
279
+ // Try each path
280
+ for (const notePath of pathsToTry) {
281
+ const note = store.getNote({ filename: notePath, space: params.space });
282
+ if (note) {
283
+ return {
284
+ success: true,
285
+ note: {
286
+ title: note.title,
287
+ filename: note.filename,
288
+ content: note.content,
289
+ type: params.type,
290
+ displayName,
291
+ },
292
+ };
293
+ }
294
+ }
295
+ return {
296
+ success: false,
297
+ error: `${params.type} note not found`,
298
+ triedPaths: pathsToTry,
299
+ displayName,
300
+ inputDate: params.date || 'today (default)',
301
+ parsedDate: refDate.toISOString().split('T')[0],
302
+ };
303
+ }
304
+ catch (error) {
305
+ return {
306
+ success: false,
307
+ error: error instanceof Error ? error.message : 'Failed to get periodic note',
308
+ };
309
+ }
310
+ }
311
+ export function getRecentPeriodicNotes(params) {
312
+ try {
313
+ const type = (params.type ?? 'weekly');
314
+ const count = toBoundedInt(params.count, 6, 1, 50);
315
+ const maxLookback = toBoundedInt(params.maxLookback, 52, 1, 260);
316
+ const includeContent = params.includeContent === true;
317
+ const includeMissing = params.includeMissing === true;
318
+ const parsedFromDate = params.fromDate ? new Date(params.fromDate) : new Date();
319
+ if (Number.isNaN(parsedFromDate.getTime())) {
320
+ return {
321
+ success: false,
322
+ error: `Invalid fromDate: ${params.fromDate}`,
323
+ };
324
+ }
325
+ const notes = [];
326
+ const missing = [];
327
+ const seen = new Set();
328
+ let cursor = parsedFromDate;
329
+ let inspectedSlots = 0;
330
+ while (inspectedSlots < maxLookback && notes.length < count) {
331
+ const dateToken = formatDateString(cursor);
332
+ const periodic = getPeriodicNote({
333
+ type,
334
+ date: dateToken,
335
+ space: params.space,
336
+ });
337
+ if (periodic.success && periodic.note) {
338
+ const note = periodic.note;
339
+ if (!seen.has(note.filename)) {
340
+ seen.add(note.filename);
341
+ notes.push({
342
+ title: note.title,
343
+ filename: note.filename,
344
+ type: note.type,
345
+ displayName: note.displayName,
346
+ referenceDate: dateToken,
347
+ content: includeContent ? note.content : undefined,
348
+ preview: includeContent
349
+ ? undefined
350
+ : `${note.content.slice(0, 200)}${note.content.length > 200 ? '...' : ''}`,
351
+ });
352
+ }
353
+ }
354
+ else if (includeMissing) {
355
+ missing.push({
356
+ referenceDate: dateToken,
357
+ error: periodic.error ?? 'Periodic note not found',
358
+ triedPaths: periodic.triedPaths,
359
+ displayName: periodic.displayName,
360
+ });
361
+ }
362
+ cursor = shiftDateBackByPeriod(cursor, type);
363
+ inspectedSlots += 1;
364
+ }
365
+ const response = {
366
+ success: true,
367
+ type,
368
+ fromDate: formatDateString(parsedFromDate),
369
+ count: notes.length,
370
+ requestedCount: count,
371
+ inspectedSlots,
372
+ maxLookback,
373
+ notes,
374
+ };
375
+ if (includeMissing) {
376
+ response.missing = missing;
377
+ }
378
+ if (inspectedSlots >= maxLookback && notes.length < count) {
379
+ response.performanceHints = [
380
+ `Reached maxLookback=${maxLookback} before collecting requestedCount=${count}. Increase maxLookback or relax filters.`,
381
+ ];
382
+ }
383
+ return response;
384
+ }
385
+ catch (error) {
386
+ return {
387
+ success: false,
388
+ error: error instanceof Error ? error.message : 'Failed to get recent periodic notes',
389
+ };
390
+ }
391
+ }
392
+ /**
393
+ * Get multiple daily notes in a date range
394
+ */
395
+ export function getNotesInRange(params) {
396
+ try {
397
+ const { start, end } = getDateRange(params.period, params.startDate, params.endDate);
398
+ const dates = getDatesInRange(start, end);
399
+ const includeContent = params.includeContent === true;
400
+ const maxDays = toBoundedInt(params.maxDays, 90, 1, 366);
401
+ const scannedDates = dates.slice(0, maxDays);
402
+ const truncatedByMaxDays = dates.length > scannedDates.length;
403
+ const offset = toBoundedInt(params.cursor ?? params.offset, 0, 0, Number.MAX_SAFE_INTEGER);
404
+ const limit = toBoundedInt(params.limit, 50, 1, 200);
405
+ const pageDates = scannedDates.slice(offset, offset + limit);
406
+ const hasMore = offset + pageDates.length < scannedDates.length;
407
+ const nextCursor = hasMore ? String(offset + pageDates.length) : null;
408
+ const notes = [];
409
+ for (const date of pageDates) {
410
+ const dateStr = formatDateString(date);
411
+ const note = store.getCalendarNote(dateStr, params.space);
412
+ if (note) {
413
+ const entry = {
414
+ date: dateStr,
415
+ displayDate: formatDateForDisplay(dateStr),
416
+ filename: note.filename,
417
+ title: note.title,
418
+ exists: true,
419
+ };
420
+ if (includeContent) {
421
+ entry.content = note.content;
422
+ }
423
+ else {
424
+ // Just include a preview (first 200 chars after frontmatter)
425
+ const bodyStart = note.content.indexOf('---', 3);
426
+ const body = bodyStart > 0 ? note.content.slice(bodyStart + 3).trim() : note.content;
427
+ entry.preview = body.slice(0, 200) + (body.length > 200 ? '...' : '');
428
+ }
429
+ notes.push(entry);
430
+ }
431
+ }
432
+ return {
433
+ success: true,
434
+ period: params.period,
435
+ startDate: formatDateString(start),
436
+ endDate: formatDateString(end),
437
+ noteCount: notes.length,
438
+ totalDays: dates.length,
439
+ scannedDays: scannedDates.length,
440
+ truncatedByMaxDays,
441
+ maxDays,
442
+ offset,
443
+ limit,
444
+ hasMore,
445
+ nextCursor,
446
+ notes,
447
+ };
448
+ }
449
+ catch (error) {
450
+ return {
451
+ success: false,
452
+ error: error instanceof Error ? error.message : 'Failed to get notes in range',
453
+ };
454
+ }
455
+ }
456
+ /**
457
+ * Get all notes in a folder with optional content
458
+ */
459
+ export function getNotesInFolder(params) {
460
+ try {
461
+ const limit = toBoundedInt(params.limit, 50, 1, 200);
462
+ const offset = toBoundedInt(params.cursor ?? params.offset, 0, 0, Number.MAX_SAFE_INTEGER);
463
+ const includeContent = params.includeContent === true;
464
+ const allNotes = store.listNotes({ folder: params.folder });
465
+ const pagedNotes = allNotes.slice(offset, offset + limit);
466
+ const notes = pagedNotes.map((note) => {
467
+ const entry = {
468
+ title: note.title,
469
+ filename: note.filename,
470
+ modifiedAt: note.modifiedAt?.toISOString(),
471
+ };
472
+ if (includeContent) {
473
+ entry.content = note.content;
474
+ }
475
+ else {
476
+ // Preview without frontmatter
477
+ const bodyStart = note.content.indexOf('---', 3);
478
+ const body = bodyStart > 0 ? note.content.slice(bodyStart + 3).trim() : note.content;
479
+ entry.preview = body.slice(0, 200) + (body.length > 200 ? '...' : '');
480
+ }
481
+ return entry;
482
+ });
483
+ const hasMore = offset + notes.length < allNotes.length;
484
+ const nextCursor = hasMore ? String(offset + notes.length) : null;
485
+ return {
486
+ success: true,
487
+ folder: params.folder,
488
+ noteCount: notes.length,
489
+ totalInFolder: allNotes.length,
490
+ offset,
491
+ limit,
492
+ hasMore,
493
+ nextCursor,
494
+ notes,
495
+ };
496
+ }
497
+ catch (error) {
498
+ return {
499
+ success: false,
500
+ error: error instanceof Error ? error.message : 'Failed to get notes in folder',
501
+ };
502
+ }
503
+ }
504
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/tools/calendar.ts"],"names":[],"mappings":"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"}