@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.
- package/README.md +257 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/noteplan/embeddings.d.ts +170 -0
- package/dist/noteplan/embeddings.d.ts.map +1 -0
- package/dist/noteplan/embeddings.js +684 -0
- package/dist/noteplan/embeddings.js.map +1 -0
- package/dist/noteplan/file-reader.d.ts +77 -0
- package/dist/noteplan/file-reader.d.ts.map +1 -0
- package/dist/noteplan/file-reader.js +488 -0
- package/dist/noteplan/file-reader.js.map +1 -0
- package/dist/noteplan/file-writer.d.ts +108 -0
- package/dist/noteplan/file-writer.d.ts.map +1 -0
- package/dist/noteplan/file-writer.js +621 -0
- package/dist/noteplan/file-writer.js.map +1 -0
- package/dist/noteplan/filter-store.d.ts +28 -0
- package/dist/noteplan/filter-store.d.ts.map +1 -0
- package/dist/noteplan/filter-store.js +180 -0
- package/dist/noteplan/filter-store.js.map +1 -0
- package/dist/noteplan/frontmatter-parser.d.ts +45 -0
- package/dist/noteplan/frontmatter-parser.d.ts.map +1 -0
- package/dist/noteplan/frontmatter-parser.js +259 -0
- package/dist/noteplan/frontmatter-parser.js.map +1 -0
- package/dist/noteplan/fuzzy-search.d.ts +7 -0
- package/dist/noteplan/fuzzy-search.d.ts.map +1 -0
- package/dist/noteplan/fuzzy-search.js +66 -0
- package/dist/noteplan/fuzzy-search.js.map +1 -0
- package/dist/noteplan/markdown-parser.d.ts +87 -0
- package/dist/noteplan/markdown-parser.d.ts.map +1 -0
- package/dist/noteplan/markdown-parser.js +519 -0
- package/dist/noteplan/markdown-parser.js.map +1 -0
- package/dist/noteplan/preferences.d.ts +44 -0
- package/dist/noteplan/preferences.d.ts.map +1 -0
- package/dist/noteplan/preferences.js +156 -0
- package/dist/noteplan/preferences.js.map +1 -0
- package/dist/noteplan/ripgrep-search.d.ts +29 -0
- package/dist/noteplan/ripgrep-search.d.ts.map +1 -0
- package/dist/noteplan/ripgrep-search.js +110 -0
- package/dist/noteplan/ripgrep-search.js.map +1 -0
- package/dist/noteplan/sqlite-reader.d.ts +77 -0
- package/dist/noteplan/sqlite-reader.d.ts.map +1 -0
- package/dist/noteplan/sqlite-reader.js +605 -0
- package/dist/noteplan/sqlite-reader.js.map +1 -0
- package/dist/noteplan/sqlite-writer.d.ts +63 -0
- package/dist/noteplan/sqlite-writer.d.ts.map +1 -0
- package/dist/noteplan/sqlite-writer.js +574 -0
- package/dist/noteplan/sqlite-writer.js.map +1 -0
- package/dist/noteplan/types.d.ts +97 -0
- package/dist/noteplan/types.d.ts.map +1 -0
- package/dist/noteplan/types.js +33 -0
- package/dist/noteplan/types.js.map +1 -0
- package/dist/noteplan/unified-store.d.ts +289 -0
- package/dist/noteplan/unified-store.d.ts.map +1 -0
- package/dist/noteplan/unified-store.js +1308 -0
- package/dist/noteplan/unified-store.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2468 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/calendar.d.ts +311 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +504 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/embeddings.d.ts +244 -0
- package/dist/tools/embeddings.d.ts.map +1 -0
- package/dist/tools/embeddings.js +226 -0
- package/dist/tools/embeddings.js.map +1 -0
- package/dist/tools/events.d.ts +176 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +326 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/filters.d.ts +205 -0
- package/dist/tools/filters.d.ts.map +1 -0
- package/dist/tools/filters.js +347 -0
- package/dist/tools/filters.js.map +1 -0
- package/dist/tools/memory.d.ts +6 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +161 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/notes.d.ts +1221 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +1868 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/plugins.d.ts +140 -0
- package/dist/tools/plugins.d.ts.map +1 -0
- package/dist/tools/plugins.js +782 -0
- package/dist/tools/plugins.js.map +1 -0
- package/dist/tools/reminders.d.ts +207 -0
- package/dist/tools/reminders.d.ts.map +1 -0
- package/dist/tools/reminders.js +323 -0
- package/dist/tools/reminders.js.map +1 -0
- package/dist/tools/search.d.ts +58 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +373 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/spaces.d.ts +484 -0
- package/dist/tools/spaces.d.ts.map +1 -0
- package/dist/tools/spaces.js +870 -0
- package/dist/tools/spaces.js.map +1 -0
- package/dist/tools/tasks.d.ts +313 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +690 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/themes.d.ts +91 -0
- package/dist/tools/themes.d.ts.map +1 -0
- package/dist/tools/themes.js +294 -0
- package/dist/tools/themes.js.map +1 -0
- package/dist/tools/ui.d.ts +89 -0
- package/dist/tools/ui.d.ts.map +1 -0
- package/dist/tools/ui.js +137 -0
- package/dist/tools/ui.js.map +1 -0
- package/dist/utils/applescript.d.ts +5 -0
- package/dist/utils/applescript.d.ts.map +1 -0
- package/dist/utils/applescript.js +27 -0
- package/dist/utils/applescript.js.map +1 -0
- package/dist/utils/confirmation-tokens.d.ts +19 -0
- package/dist/utils/confirmation-tokens.d.ts.map +1 -0
- package/dist/utils/confirmation-tokens.js +58 -0
- package/dist/utils/confirmation-tokens.js.map +1 -0
- package/dist/utils/date-filters.d.ts +15 -0
- package/dist/utils/date-filters.d.ts.map +1 -0
- package/dist/utils/date-filters.js +129 -0
- package/dist/utils/date-filters.js.map +1 -0
- package/dist/utils/date-utils.d.ts +113 -0
- package/dist/utils/date-utils.d.ts.map +1 -0
- package/dist/utils/date-utils.js +341 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/folder-matcher.d.ts +14 -0
- package/dist/utils/folder-matcher.d.ts.map +1 -0
- package/dist/utils/folder-matcher.js +191 -0
- package/dist/utils/folder-matcher.js.map +1 -0
- package/dist/utils/version.d.ts +10 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +88 -0
- package/dist/utils/version.js.map +1 -0
- package/docs/plugin-api/Calendar.md +448 -0
- package/docs/plugin-api/CalendarItem.md +198 -0
- package/docs/plugin-api/Clipboard.md +101 -0
- package/docs/plugin-api/CommandBar.md +251 -0
- package/docs/plugin-api/DataStore.md +700 -0
- package/docs/plugin-api/Editor.md +982 -0
- package/docs/plugin-api/HTMLView.md +337 -0
- package/docs/plugin-api/NoteObject.md +588 -0
- package/docs/plugin-api/NotePlan.md +398 -0
- package/docs/plugin-api/ParagraphObject.md +242 -0
- package/docs/plugin-api/RangeObject.md +56 -0
- package/docs/plugin-api/getting-started.md +545 -0
- package/docs/plugin-api/plugin-api-condensed.md +526 -0
- package/docs/plugin-api/plugin.json +26 -0
- package/docs/plugin-api/script.js +542 -0
- package/package.json +60 -0
- package/scripts/calendar-helper +0 -0
- package/scripts/reminders-helper +0 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
// Date utilities for NotePlan filename conversions
|
|
2
|
+
import { getFirstDayOfWeekCached } from '../noteplan/preferences.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get the start of the week for a given date, respecting NotePlan's firstDayOfWeek setting
|
|
5
|
+
* @param date The reference date
|
|
6
|
+
* @param firstDayOfWeek 0 = Sunday, 1 = Monday, ..., 6 = Saturday
|
|
7
|
+
*/
|
|
8
|
+
function getStartOfWeekDate(date, firstDayOfWeek) {
|
|
9
|
+
const day = date.getDay();
|
|
10
|
+
const daysToSubtract = (day - firstDayOfWeek + 7) % 7;
|
|
11
|
+
const weekStart = new Date(date);
|
|
12
|
+
weekStart.setDate(date.getDate() - daysToSubtract);
|
|
13
|
+
weekStart.setHours(0, 0, 0, 0);
|
|
14
|
+
return weekStart;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get today's date in YYYYMMDD format
|
|
18
|
+
*/
|
|
19
|
+
export function getTodayDateString() {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
return formatDateString(now);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format a Date object to YYYYMMDD string
|
|
25
|
+
*/
|
|
26
|
+
export function formatDateString(date) {
|
|
27
|
+
const year = date.getFullYear();
|
|
28
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
29
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
30
|
+
return `${year}${month}${day}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse YYYYMMDD string to Date object
|
|
34
|
+
*/
|
|
35
|
+
export function parseDateString(dateStr) {
|
|
36
|
+
const match = dateStr.match(/^(\d{4})(\d{2})(\d{2})$/);
|
|
37
|
+
if (!match)
|
|
38
|
+
return null;
|
|
39
|
+
const [, year, month, day] = match;
|
|
40
|
+
return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the calendar note filename for a date
|
|
44
|
+
* Returns path like Calendar/2024/20240115.md
|
|
45
|
+
*/
|
|
46
|
+
export function getCalendarNotePath(dateStr) {
|
|
47
|
+
const year = dateStr.substring(0, 4);
|
|
48
|
+
return `Calendar/${year}/${dateStr}.md`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get the weekly note filename for a date
|
|
52
|
+
* Returns path like Calendar/2024/2024-W03.md
|
|
53
|
+
*/
|
|
54
|
+
export function getWeeklyNotePath(date) {
|
|
55
|
+
const year = date.getFullYear();
|
|
56
|
+
const week = getWeekNumber(date);
|
|
57
|
+
const weekStr = String(week).padStart(2, '0');
|
|
58
|
+
return `Calendar/${year}/${year}-W${weekStr}.md`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get ISO week number for a date
|
|
62
|
+
*/
|
|
63
|
+
export function getWeekNumber(date) {
|
|
64
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
65
|
+
const dayNum = d.getUTCDay() || 7;
|
|
66
|
+
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
|
|
67
|
+
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
68
|
+
return Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get ISO week year for a date (can differ from calendar year at year boundaries)
|
|
72
|
+
* For example: Dec 30, 2024 is in Week 1 of 2025
|
|
73
|
+
*/
|
|
74
|
+
export function getISOWeekYear(date) {
|
|
75
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
76
|
+
const dayNum = d.getUTCDay() || 7;
|
|
77
|
+
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
|
|
78
|
+
return d.getUTCFullYear();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get both ISO week number and year
|
|
82
|
+
*/
|
|
83
|
+
export function getISOWeek(date) {
|
|
84
|
+
return {
|
|
85
|
+
week: getWeekNumber(date),
|
|
86
|
+
year: getISOWeekYear(date),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get week number respecting a custom first day of week
|
|
91
|
+
* @param date The date to get the week for
|
|
92
|
+
* @param firstDayOfWeek 0 = Sunday, 1 = Monday, ..., 6 = Saturday
|
|
93
|
+
* @returns Week number and year
|
|
94
|
+
*
|
|
95
|
+
* Week 1 is defined as the week containing January 1
|
|
96
|
+
*/
|
|
97
|
+
export function getWeekWithFirstDay(date, firstDayOfWeek) {
|
|
98
|
+
// Find the start of the week containing the given date
|
|
99
|
+
const day = date.getDay();
|
|
100
|
+
const daysToSubtract = (day - firstDayOfWeek + 7) % 7;
|
|
101
|
+
const weekStart = new Date(date);
|
|
102
|
+
weekStart.setDate(date.getDate() - daysToSubtract);
|
|
103
|
+
weekStart.setHours(0, 0, 0, 0);
|
|
104
|
+
// Determine which year this week belongs to
|
|
105
|
+
// A week belongs to the year that contains the majority of its days
|
|
106
|
+
// For simplicity, we use the year of the week's Thursday (or mid-week)
|
|
107
|
+
const midWeek = new Date(weekStart);
|
|
108
|
+
midWeek.setDate(weekStart.getDate() + 3); // Thursday of the week
|
|
109
|
+
const weekYear = midWeek.getFullYear();
|
|
110
|
+
// Find the start of week 1 of that year
|
|
111
|
+
// Week 1 is the week containing January 1
|
|
112
|
+
const jan1 = new Date(weekYear, 0, 1);
|
|
113
|
+
const jan1Day = jan1.getDay();
|
|
114
|
+
const daysToWeekStart = (jan1Day - firstDayOfWeek + 7) % 7;
|
|
115
|
+
const week1Start = new Date(jan1);
|
|
116
|
+
week1Start.setDate(jan1.getDate() - daysToWeekStart);
|
|
117
|
+
week1Start.setHours(0, 0, 0, 0);
|
|
118
|
+
// Calculate the week number
|
|
119
|
+
const msPerWeek = 7 * 24 * 60 * 60 * 1000;
|
|
120
|
+
const weeksDiff = Math.floor((weekStart.getTime() - week1Start.getTime()) / msPerWeek);
|
|
121
|
+
const weekNum = weeksDiff + 1;
|
|
122
|
+
// Handle edge case: if week number is 0 or negative, it's the last week of the previous year
|
|
123
|
+
if (weekNum <= 0) {
|
|
124
|
+
// Recalculate for previous year
|
|
125
|
+
const prevYearDec31 = new Date(weekYear - 1, 11, 31);
|
|
126
|
+
return getWeekWithFirstDay(prevYearDec31, firstDayOfWeek);
|
|
127
|
+
}
|
|
128
|
+
// Handle edge case: check if this might be week 1 of next year
|
|
129
|
+
// (if the week mostly falls in the next year)
|
|
130
|
+
const nextJan1 = new Date(weekYear + 1, 0, 1);
|
|
131
|
+
if (weekStart.getTime() >= nextJan1.getTime() - 3 * 24 * 60 * 60 * 1000) {
|
|
132
|
+
// This week might belong to next year - check if Jan 1 is in this week
|
|
133
|
+
const nextJan1Day = nextJan1.getDay();
|
|
134
|
+
const daysToNextWeekStart = (nextJan1Day - firstDayOfWeek + 7) % 7;
|
|
135
|
+
const nextWeek1Start = new Date(nextJan1);
|
|
136
|
+
nextWeek1Start.setDate(nextJan1.getDate() - daysToNextWeekStart);
|
|
137
|
+
if (weekStart.getTime() === nextWeek1Start.getTime()) {
|
|
138
|
+
return { week: 1, year: weekYear + 1 };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { week: weekNum, year: weekYear };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get week number and year respecting NotePlan's firstDayOfWeek preference
|
|
145
|
+
*/
|
|
146
|
+
export function getWeekRespectingPreference(date) {
|
|
147
|
+
const firstDayOfWeek = getFirstDayOfWeekCached();
|
|
148
|
+
return getWeekWithFirstDay(date, firstDayOfWeek);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Parse a date input string that could be:
|
|
152
|
+
* - YYYYMMDD
|
|
153
|
+
* - YYYY-MM-DD
|
|
154
|
+
* - today
|
|
155
|
+
* - tomorrow
|
|
156
|
+
* - yesterday
|
|
157
|
+
*/
|
|
158
|
+
export function parseFlexibleDate(input) {
|
|
159
|
+
const lower = input.toLowerCase().trim();
|
|
160
|
+
const now = new Date();
|
|
161
|
+
if (lower === 'today') {
|
|
162
|
+
return formatDateString(now);
|
|
163
|
+
}
|
|
164
|
+
if (lower === 'tomorrow') {
|
|
165
|
+
const tomorrow = new Date(now);
|
|
166
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
167
|
+
return formatDateString(tomorrow);
|
|
168
|
+
}
|
|
169
|
+
if (lower === 'yesterday') {
|
|
170
|
+
const yesterday = new Date(now);
|
|
171
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
172
|
+
return formatDateString(yesterday);
|
|
173
|
+
}
|
|
174
|
+
// YYYY-MM-DD format
|
|
175
|
+
const isoMatch = input.match(/^(\d{4})-(\d{2})-(\d{2})$/);
|
|
176
|
+
if (isoMatch) {
|
|
177
|
+
return `${isoMatch[1]}${isoMatch[2]}${isoMatch[3]}`;
|
|
178
|
+
}
|
|
179
|
+
// Already YYYYMMDD format
|
|
180
|
+
if (/^\d{8}$/.test(input)) {
|
|
181
|
+
return input;
|
|
182
|
+
}
|
|
183
|
+
// Default to input as-is
|
|
184
|
+
return input;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Format a date string for display
|
|
188
|
+
*/
|
|
189
|
+
export function formatDateForDisplay(dateStr) {
|
|
190
|
+
const date = parseDateString(dateStr);
|
|
191
|
+
if (!date)
|
|
192
|
+
return dateStr;
|
|
193
|
+
return date.toLocaleDateString('en-US', {
|
|
194
|
+
weekday: 'long',
|
|
195
|
+
year: 'numeric',
|
|
196
|
+
month: 'long',
|
|
197
|
+
day: 'numeric',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if a filename is a calendar note
|
|
202
|
+
*/
|
|
203
|
+
export function isCalendarNoteFilename(filename) {
|
|
204
|
+
// Match patterns like 20240115.txt, 20240115.md, 2024-W03.txt, 2024-W03.md
|
|
205
|
+
return /^\d{8}\.\w+$/.test(filename) || /^\d{4}-W\d{2}\.\w+$/.test(filename);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Extract date from calendar note filename
|
|
209
|
+
*/
|
|
210
|
+
export function extractDateFromFilename(filename) {
|
|
211
|
+
// Match YYYYMMDD with any extension
|
|
212
|
+
const dailyMatch = filename.match(/(\d{8})\.\w+$/);
|
|
213
|
+
if (dailyMatch)
|
|
214
|
+
return dailyMatch[1];
|
|
215
|
+
// Match YYYY-Www (weekly) with any extension
|
|
216
|
+
const weeklyMatch = filename.match(/(\d{4}-W\d{2})\.\w+$/);
|
|
217
|
+
if (weeklyMatch)
|
|
218
|
+
return weeklyMatch[1];
|
|
219
|
+
// Match YYYY-MM (monthly) with any extension
|
|
220
|
+
const monthlyMatch = filename.match(/(\d{4}-\d{2})\.\w+$/);
|
|
221
|
+
if (monthlyMatch)
|
|
222
|
+
return monthlyMatch[1];
|
|
223
|
+
// Match YYYY-Qq (quarterly) with any extension
|
|
224
|
+
const quarterlyMatch = filename.match(/(\d{4}-Q[1-4])\.\w+$/);
|
|
225
|
+
if (quarterlyMatch)
|
|
226
|
+
return quarterlyMatch[1];
|
|
227
|
+
// Match YYYY (yearly) with any extension
|
|
228
|
+
const yearlyMatch = filename.match(/(\d{4})\.\w+$/);
|
|
229
|
+
if (yearlyMatch)
|
|
230
|
+
return yearlyMatch[1];
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get the type of calendar note from its filename
|
|
235
|
+
*/
|
|
236
|
+
export function getCalendarNoteType(filename) {
|
|
237
|
+
if (/\d{8}\.\w+$/.test(filename))
|
|
238
|
+
return 'daily';
|
|
239
|
+
if (/\d{4}-W\d{2}\.\w+$/.test(filename))
|
|
240
|
+
return 'weekly';
|
|
241
|
+
if (/\d{4}-\d{2}\.\w+$/.test(filename))
|
|
242
|
+
return 'monthly';
|
|
243
|
+
if (/\d{4}-Q[1-4]\.\w+$/.test(filename))
|
|
244
|
+
return 'quarterly';
|
|
245
|
+
if (/\d{4}\.\w+$/.test(filename))
|
|
246
|
+
return 'yearly';
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get the monthly note filename for a date
|
|
251
|
+
* Returns path like Calendar/2024/2024-01.md
|
|
252
|
+
*/
|
|
253
|
+
export function getMonthlyNotePath(date, hasYearSubfolders = true) {
|
|
254
|
+
const year = date.getFullYear();
|
|
255
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
256
|
+
const filename = `${year}-${month}.md`;
|
|
257
|
+
return hasYearSubfolders ? `Calendar/${year}/${filename}` : `Calendar/${filename}`;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get the quarterly note filename for a date
|
|
261
|
+
* Returns path like Calendar/2024/2024-Q1.md
|
|
262
|
+
*/
|
|
263
|
+
export function getQuarterlyNotePath(date, hasYearSubfolders = true) {
|
|
264
|
+
const year = date.getFullYear();
|
|
265
|
+
const quarter = Math.floor(date.getMonth() / 3) + 1;
|
|
266
|
+
const filename = `${year}-Q${quarter}.md`;
|
|
267
|
+
return hasYearSubfolders ? `Calendar/${year}/${filename}` : `Calendar/${filename}`;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get the yearly note filename for a date
|
|
271
|
+
* Returns path like Calendar/2024/2024.md
|
|
272
|
+
*/
|
|
273
|
+
export function getYearlyNotePath(date, hasYearSubfolders = true) {
|
|
274
|
+
const year = date.getFullYear();
|
|
275
|
+
const filename = `${year}.md`;
|
|
276
|
+
return hasYearSubfolders ? `Calendar/${year}/${filename}` : `Calendar/${filename}`;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get a date range for a period
|
|
280
|
+
*/
|
|
281
|
+
export function getDateRange(period, customStart, customEnd) {
|
|
282
|
+
const now = new Date();
|
|
283
|
+
now.setHours(0, 0, 0, 0);
|
|
284
|
+
switch (period) {
|
|
285
|
+
case 'today':
|
|
286
|
+
return { start: now, end: now };
|
|
287
|
+
case 'yesterday': {
|
|
288
|
+
const yesterday = new Date(now);
|
|
289
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
290
|
+
return { start: yesterday, end: yesterday };
|
|
291
|
+
}
|
|
292
|
+
case 'this-week': {
|
|
293
|
+
const firstDayOfWeek = getFirstDayOfWeekCached();
|
|
294
|
+
const start = getStartOfWeekDate(now, firstDayOfWeek);
|
|
295
|
+
const end = new Date(start);
|
|
296
|
+
end.setDate(end.getDate() + 6);
|
|
297
|
+
return { start, end };
|
|
298
|
+
}
|
|
299
|
+
case 'last-week': {
|
|
300
|
+
const firstDayOfWeek = getFirstDayOfWeekCached();
|
|
301
|
+
const thisWeekStart = getStartOfWeekDate(now, firstDayOfWeek);
|
|
302
|
+
const start = new Date(thisWeekStart);
|
|
303
|
+
start.setDate(start.getDate() - 7);
|
|
304
|
+
const end = new Date(start);
|
|
305
|
+
end.setDate(end.getDate() + 6);
|
|
306
|
+
return { start, end };
|
|
307
|
+
}
|
|
308
|
+
case 'this-month': {
|
|
309
|
+
const start = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
310
|
+
const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
|
|
311
|
+
return { start, end };
|
|
312
|
+
}
|
|
313
|
+
case 'last-month': {
|
|
314
|
+
const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
|
315
|
+
const end = new Date(now.getFullYear(), now.getMonth(), 0);
|
|
316
|
+
return { start, end };
|
|
317
|
+
}
|
|
318
|
+
default:
|
|
319
|
+
// Custom range
|
|
320
|
+
if (customStart && customEnd) {
|
|
321
|
+
return {
|
|
322
|
+
start: new Date(customStart),
|
|
323
|
+
end: new Date(customEnd),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
return { start: now, end: now };
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Generate all dates in a range
|
|
331
|
+
*/
|
|
332
|
+
export function getDatesInRange(start, end) {
|
|
333
|
+
const dates = [];
|
|
334
|
+
const current = new Date(start);
|
|
335
|
+
while (current <= end) {
|
|
336
|
+
dates.push(new Date(current));
|
|
337
|
+
current.setDate(current.getDate() + 1);
|
|
338
|
+
}
|
|
339
|
+
return dates;
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=date-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-utils.js","sourceRoot":"","sources":["../../src/utils/date-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Folder } from '../noteplan/types.js';
|
|
2
|
+
export interface FolderMatchResult {
|
|
3
|
+
matched: boolean;
|
|
4
|
+
folder: Folder | null;
|
|
5
|
+
score: number;
|
|
6
|
+
alternatives: Folder[];
|
|
7
|
+
ambiguous: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Match a user query against available folders
|
|
11
|
+
* Returns the best match with alternatives, flagging ambiguity
|
|
12
|
+
*/
|
|
13
|
+
export declare function matchFolder(query: string, folders: Folder[]): FolderMatchResult;
|
|
14
|
+
//# sourceMappingURL=folder-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-matcher.d.ts","sourceRoot":"","sources":["../../src/utils/folder-matcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAuID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAiF/E"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// Smart folder matching for user-friendly folder resolution
|
|
2
|
+
/**
|
|
3
|
+
* Strip common prefixes from folder names for matching
|
|
4
|
+
* Handles: numbered (10 - ), emoji (📥 ), special (@)
|
|
5
|
+
* Returns original name if stripping would result in empty string
|
|
6
|
+
*/
|
|
7
|
+
function stripCommonPrefixes(name) {
|
|
8
|
+
let result = name;
|
|
9
|
+
// Strip numbered prefixes: "10 - ", "01. ", "1) ", "10-", "01.", etc.
|
|
10
|
+
result = result.replace(/^\d+[\s.\-_)]+\s*/, '');
|
|
11
|
+
// Strip emoji prefixes (one or more emojis followed by space)
|
|
12
|
+
result = result.replace(/^[\p{Emoji}\p{Emoji_Presentation}\p{Emoji_Modifier}\p{Emoji_Component}]+\s*/u, '');
|
|
13
|
+
// Strip special prefixes like @
|
|
14
|
+
result = result.replace(/^@/, '');
|
|
15
|
+
result = result.trim();
|
|
16
|
+
// Return original if stripping removed everything
|
|
17
|
+
return result || name;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a string for matching (lowercase, strip prefixes)
|
|
21
|
+
*/
|
|
22
|
+
function normalizeForMatching(name) {
|
|
23
|
+
return stripCommonPrefixes(name).toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Calculate bigram similarity between two strings
|
|
27
|
+
* Returns a score between 0 and 1
|
|
28
|
+
*/
|
|
29
|
+
function bigramSimilarity(a, b) {
|
|
30
|
+
if (a.length < 2 || b.length < 2) {
|
|
31
|
+
return a === b ? 1 : 0;
|
|
32
|
+
}
|
|
33
|
+
const getBigrams = (str) => {
|
|
34
|
+
const bigrams = new Set();
|
|
35
|
+
for (let i = 0; i < str.length - 1; i++) {
|
|
36
|
+
bigrams.add(str.slice(i, i + 2));
|
|
37
|
+
}
|
|
38
|
+
return bigrams;
|
|
39
|
+
};
|
|
40
|
+
const bigramsA = getBigrams(a);
|
|
41
|
+
const bigramsB = getBigrams(b);
|
|
42
|
+
let intersection = 0;
|
|
43
|
+
for (const bigram of bigramsA) {
|
|
44
|
+
if (bigramsB.has(bigram)) {
|
|
45
|
+
intersection++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Dice coefficient
|
|
49
|
+
return (2 * intersection) / (bigramsA.size + bigramsB.size);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Calculate depth penalty - prefer shallower folders
|
|
53
|
+
* Depth 1 = no penalty, each additional level reduces score
|
|
54
|
+
*/
|
|
55
|
+
function getDepthPenalty(folderPath) {
|
|
56
|
+
const depth = folderPath.split('/').length;
|
|
57
|
+
// Depth 1: 1.0, Depth 2: 0.95, Depth 3: 0.90, Depth 4: 0.85, etc.
|
|
58
|
+
return Math.max(0.5, 1.0 - (depth - 1) * 0.05);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Score a folder against a query
|
|
62
|
+
* Returns a score between 0 and 1
|
|
63
|
+
*/
|
|
64
|
+
function scoreFolder(query, folder) {
|
|
65
|
+
const queryLower = query.toLowerCase();
|
|
66
|
+
const nameLower = folder.name.toLowerCase();
|
|
67
|
+
const normalizedName = normalizeForMatching(folder.name);
|
|
68
|
+
// For nested folders, also check the last path segment
|
|
69
|
+
const pathSegments = folder.path.split('/');
|
|
70
|
+
const lastSegment = pathSegments[pathSegments.length - 1];
|
|
71
|
+
const lastSegmentLower = lastSegment.toLowerCase();
|
|
72
|
+
const normalizedLastSegment = normalizeForMatching(lastSegment);
|
|
73
|
+
// Also check the full path (with and without Notes/ prefix)
|
|
74
|
+
const pathLower = folder.path.toLowerCase();
|
|
75
|
+
const pathNormalized = pathLower.replace(/^notes\//, '');
|
|
76
|
+
const queryNormalized = queryLower.replace(/^notes\//, '');
|
|
77
|
+
let baseScore = 0;
|
|
78
|
+
// Exact match on full path (case-insensitive, with or without Notes/ prefix)
|
|
79
|
+
if (pathLower === queryLower || pathNormalized === queryNormalized
|
|
80
|
+
|| pathLower === queryNormalized || pathNormalized === queryLower) {
|
|
81
|
+
baseScore = 1.0;
|
|
82
|
+
}
|
|
83
|
+
// Exact match on full name (case-insensitive)
|
|
84
|
+
else if (nameLower === queryLower || lastSegmentLower === queryLower) {
|
|
85
|
+
baseScore = 1.0;
|
|
86
|
+
}
|
|
87
|
+
// Exact match on normalized name
|
|
88
|
+
else if (normalizedName === queryLower || normalizedLastSegment === queryLower) {
|
|
89
|
+
baseScore = 0.95;
|
|
90
|
+
}
|
|
91
|
+
// Normalized name starts with query
|
|
92
|
+
else if (normalizedName.startsWith(queryLower) || normalizedLastSegment.startsWith(queryLower)) {
|
|
93
|
+
baseScore = 0.90;
|
|
94
|
+
}
|
|
95
|
+
// Query contained in normalized name
|
|
96
|
+
else if (normalizedName.includes(queryLower) || normalizedLastSegment.includes(queryLower)) {
|
|
97
|
+
baseScore = 0.85;
|
|
98
|
+
}
|
|
99
|
+
// Query contained in full name (with prefixes)
|
|
100
|
+
else if (nameLower.includes(queryLower) || lastSegmentLower.includes(queryLower)) {
|
|
101
|
+
baseScore = 0.80;
|
|
102
|
+
}
|
|
103
|
+
// Fuzzy match using bigram similarity
|
|
104
|
+
else {
|
|
105
|
+
const similarity = Math.max(bigramSimilarity(queryLower, normalizedName), bigramSimilarity(queryLower, normalizedLastSegment));
|
|
106
|
+
baseScore = similarity > 0.5 ? 0.70 + similarity * 0.10 : similarity * 0.50;
|
|
107
|
+
}
|
|
108
|
+
// Apply depth penalty - shallower folders score higher
|
|
109
|
+
const depthPenalty = getDepthPenalty(folder.path);
|
|
110
|
+
return baseScore * depthPenalty;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Match a user query against available folders
|
|
114
|
+
* Returns the best match with alternatives, flagging ambiguity
|
|
115
|
+
*/
|
|
116
|
+
export function matchFolder(query, folders) {
|
|
117
|
+
if (!query || folders.length === 0) {
|
|
118
|
+
return {
|
|
119
|
+
matched: false,
|
|
120
|
+
folder: null,
|
|
121
|
+
score: 0,
|
|
122
|
+
alternatives: [],
|
|
123
|
+
ambiguous: false,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// When the query looks like a path (contains "/"), try exact path match first.
|
|
127
|
+
// This avoids fuzzy ambiguity when the caller already knows the full path.
|
|
128
|
+
if (query.includes('/')) {
|
|
129
|
+
const queryLower = query.toLowerCase();
|
|
130
|
+
// Strip optional "Notes/" prefix for comparison
|
|
131
|
+
const queryNormalized = queryLower.replace(/^notes\//, '');
|
|
132
|
+
const exactMatch = folders.find((f) => {
|
|
133
|
+
const pathLower = f.path.toLowerCase();
|
|
134
|
+
const pathNormalized = pathLower.replace(/^notes\//, '');
|
|
135
|
+
return pathLower === queryLower || pathNormalized === queryNormalized
|
|
136
|
+
|| pathLower === queryNormalized || pathNormalized === queryLower;
|
|
137
|
+
});
|
|
138
|
+
if (exactMatch) {
|
|
139
|
+
return {
|
|
140
|
+
matched: true,
|
|
141
|
+
folder: exactMatch,
|
|
142
|
+
score: 1.0,
|
|
143
|
+
alternatives: [],
|
|
144
|
+
ambiguous: false,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Short queries (1-2 chars) need higher threshold
|
|
149
|
+
const minThreshold = query.length <= 2 ? 0.9 : 0.7;
|
|
150
|
+
// Score all folders
|
|
151
|
+
const scored = folders
|
|
152
|
+
.map((folder) => ({
|
|
153
|
+
folder,
|
|
154
|
+
score: scoreFolder(query, folder),
|
|
155
|
+
}))
|
|
156
|
+
.filter((item) => item.score >= minThreshold)
|
|
157
|
+
.sort((a, b) => {
|
|
158
|
+
// Sort by score, then deprioritize special folders
|
|
159
|
+
if (Math.abs(a.score - b.score) > 0.01) {
|
|
160
|
+
return b.score - a.score;
|
|
161
|
+
}
|
|
162
|
+
// Deprioritize @Archive, @Trash
|
|
163
|
+
const aIsSpecial = a.folder.name.startsWith('@');
|
|
164
|
+
const bIsSpecial = b.folder.name.startsWith('@');
|
|
165
|
+
if (aIsSpecial !== bIsSpecial) {
|
|
166
|
+
return aIsSpecial ? 1 : -1;
|
|
167
|
+
}
|
|
168
|
+
return 0;
|
|
169
|
+
});
|
|
170
|
+
if (scored.length === 0) {
|
|
171
|
+
return {
|
|
172
|
+
matched: false,
|
|
173
|
+
folder: null,
|
|
174
|
+
score: 0,
|
|
175
|
+
alternatives: [],
|
|
176
|
+
ambiguous: false,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const best = scored[0];
|
|
180
|
+
const alternatives = scored.slice(1, 4).map((item) => item.folder);
|
|
181
|
+
// Check for ambiguity: multiple matches with similar scores (within 0.15)
|
|
182
|
+
const ambiguous = scored.length > 1 && (scored[1].score >= best.score - 0.15);
|
|
183
|
+
return {
|
|
184
|
+
matched: true,
|
|
185
|
+
folder: best.folder,
|
|
186
|
+
score: best.score,
|
|
187
|
+
alternatives,
|
|
188
|
+
ambiguous,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=folder-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-matcher.js","sourceRoot":"","sources":["../../src/utils/folder-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface NotePlanVersion {
|
|
2
|
+
version: string;
|
|
3
|
+
build: number;
|
|
4
|
+
source: 'applescript' | 'plist' | 'unknown';
|
|
5
|
+
}
|
|
6
|
+
export declare const MIN_BUILD_ADVANCED_FEATURES = 1300;
|
|
7
|
+
export declare function getNotePlanVersion(forceRefresh?: boolean): NotePlanVersion;
|
|
8
|
+
export declare function isAdvancedFeaturesAvailable(forceRefresh?: boolean): boolean;
|
|
9
|
+
export declare function upgradeMessage(feature: string): string;
|
|
10
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;CAC7C;AAGD,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAmEhD,wBAAgB,kBAAkB,CAAC,YAAY,UAAQ,GAAG,eAAe,CAUxE;AAED,wBAAgB,2BAA2B,CAAC,YAAY,UAAQ,GAAG,OAAO,CAGzE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|