@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,605 @@
|
|
|
1
|
+
// SQLite reader for space notes
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import { SQLITE_NOTE_TYPES } from './types.js';
|
|
7
|
+
import { extractTitle, extractTagsFromContent } from './markdown-parser.js';
|
|
8
|
+
// Possible NotePlan storage paths (same as file-reader.ts)
|
|
9
|
+
const POSSIBLE_PATHS = [
|
|
10
|
+
// Direct local paths (AppStore version) - preferred for local dev
|
|
11
|
+
path.join(os.homedir(), 'Library/Containers/co.noteplan.NotePlan3/Data/Library/Application Support/co.noteplan.NotePlan3'),
|
|
12
|
+
// Direct local paths (Setapp version)
|
|
13
|
+
path.join(os.homedir(), 'Library/Containers/co.noteplan.NotePlan-setapp/Data/Library/Application Support/co.noteplan.NotePlan-setapp'),
|
|
14
|
+
// Today app iCloud
|
|
15
|
+
path.join(os.homedir(), 'Library/Mobile Documents/iCloud~co~noteplan~Today/Documents'),
|
|
16
|
+
// NotePlan 3 iCloud
|
|
17
|
+
path.join(os.homedir(), 'Library/Mobile Documents/iCloud~co~noteplan~NotePlan3/Documents'),
|
|
18
|
+
// NotePlan iCloud
|
|
19
|
+
path.join(os.homedir(), 'Library/Mobile Documents/iCloud~co~noteplan~NotePlan/Documents'),
|
|
20
|
+
// NotePlan Setapp iCloud
|
|
21
|
+
path.join(os.homedir(), 'Library/Mobile Documents/iCloud~co~noteplan~NotePlan-setapp/Documents'),
|
|
22
|
+
];
|
|
23
|
+
let db = null;
|
|
24
|
+
let dbChecked = false;
|
|
25
|
+
let cachedDbPath = null;
|
|
26
|
+
const SPACE_TRASH_FOLDER_TITLE = '@Trash';
|
|
27
|
+
/**
|
|
28
|
+
* Find the spaces database path
|
|
29
|
+
*/
|
|
30
|
+
function findDatabasePath() {
|
|
31
|
+
for (const basePath of POSSIBLE_PATHS) {
|
|
32
|
+
const dbPath = path.join(basePath, 'Caches', 'teamspace.db');
|
|
33
|
+
if (fs.existsSync(dbPath)) {
|
|
34
|
+
return dbPath;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get or create the database connection
|
|
41
|
+
*/
|
|
42
|
+
export function getDatabase() {
|
|
43
|
+
if (db)
|
|
44
|
+
return db;
|
|
45
|
+
if (dbChecked)
|
|
46
|
+
return null; // Already checked, no DB available
|
|
47
|
+
dbChecked = true;
|
|
48
|
+
cachedDbPath = findDatabasePath();
|
|
49
|
+
if (!cachedDbPath) {
|
|
50
|
+
// Only log once in stderr for MCP compatibility
|
|
51
|
+
console.error('Note: Spaces database not found (spaces unavailable)');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
// Try read-write first (needed for sqlite-writer operations)
|
|
56
|
+
db = new Database(cachedDbPath, { readonly: false });
|
|
57
|
+
return db;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
// If read-write fails (e.g., database locked), try read-only
|
|
61
|
+
try {
|
|
62
|
+
console.error('Note: Opening spaces database in read-only mode');
|
|
63
|
+
db = new Database(cachedDbPath, { readonly: true });
|
|
64
|
+
return db;
|
|
65
|
+
}
|
|
66
|
+
catch (readOnlyError) {
|
|
67
|
+
console.error('Failed to open spaces database:', readOnlyError);
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get resolved teamspace database path (if available)
|
|
74
|
+
*/
|
|
75
|
+
export function getDatabasePath() {
|
|
76
|
+
if (cachedDbPath)
|
|
77
|
+
return cachedDbPath;
|
|
78
|
+
cachedDbPath = findDatabasePath();
|
|
79
|
+
return cachedDbPath;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Close the database connection
|
|
83
|
+
*/
|
|
84
|
+
export function closeDatabase() {
|
|
85
|
+
if (db) {
|
|
86
|
+
db.close();
|
|
87
|
+
db = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* List all spaces
|
|
92
|
+
*/
|
|
93
|
+
export function listSpaces() {
|
|
94
|
+
const database = getDatabase();
|
|
95
|
+
if (!database)
|
|
96
|
+
return [];
|
|
97
|
+
try {
|
|
98
|
+
// Spaces are stored as note_type = 10 with is_dir = 1
|
|
99
|
+
const rows = database
|
|
100
|
+
.prepare(`
|
|
101
|
+
SELECT
|
|
102
|
+
id,
|
|
103
|
+
title,
|
|
104
|
+
(SELECT COUNT(*) FROM notes n2 WHERE n2.parent = notes.id AND n2.note_type IN (?, ?)) as note_count
|
|
105
|
+
FROM notes
|
|
106
|
+
WHERE note_type = ?
|
|
107
|
+
AND is_dir = 1
|
|
108
|
+
`)
|
|
109
|
+
.all(SQLITE_NOTE_TYPES.TEAMSPACE_NOTE, SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR, SQLITE_NOTE_TYPES.TEAMSPACE);
|
|
110
|
+
return rows.map((row) => ({
|
|
111
|
+
id: row.id,
|
|
112
|
+
name: row.title || row.id,
|
|
113
|
+
noteCount: row.note_count,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('Error listing spaces:', error);
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all descendant IDs of a space (folders and notes)
|
|
123
|
+
* Uses recursive CTE to traverse parent hierarchy
|
|
124
|
+
*/
|
|
125
|
+
function getSpaceDescendantIds(database, spaceId) {
|
|
126
|
+
try {
|
|
127
|
+
const rows = database.prepare(`
|
|
128
|
+
WITH RECURSIVE space_tree AS (
|
|
129
|
+
-- Base case: direct children of the space
|
|
130
|
+
SELECT id FROM notes WHERE parent = ?
|
|
131
|
+
UNION ALL
|
|
132
|
+
-- Recursive: children of folders in the tree
|
|
133
|
+
SELECT n.id FROM notes n
|
|
134
|
+
INNER JOIN space_tree st ON n.parent = st.id
|
|
135
|
+
)
|
|
136
|
+
SELECT id FROM space_tree
|
|
137
|
+
`).all(spaceId);
|
|
138
|
+
return rows.map(r => r.id);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error('Error getting space descendants:', error);
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Count notes and subfolders under a space folder (recursive)
|
|
147
|
+
*/
|
|
148
|
+
export function countSpaceFolderContents(folderId) {
|
|
149
|
+
const database = getDatabase();
|
|
150
|
+
if (!database)
|
|
151
|
+
return { noteCount: 0, folderCount: 0 };
|
|
152
|
+
try {
|
|
153
|
+
const row = database.prepare(`
|
|
154
|
+
WITH RECURSIVE subtree AS (
|
|
155
|
+
SELECT id, is_dir FROM notes WHERE parent = ?
|
|
156
|
+
UNION ALL
|
|
157
|
+
SELECT n.id, n.is_dir FROM notes n
|
|
158
|
+
INNER JOIN subtree s ON n.parent = s.id
|
|
159
|
+
)
|
|
160
|
+
SELECT
|
|
161
|
+
COUNT(CASE WHEN is_dir = 0 THEN 1 END) AS noteCount,
|
|
162
|
+
COUNT(CASE WHEN is_dir = 1 THEN 1 END) AS folderCount
|
|
163
|
+
FROM subtree
|
|
164
|
+
`).get(folderId);
|
|
165
|
+
return row ?? { noteCount: 0, folderCount: 0 };
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return { noteCount: 0, folderCount: 0 };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function getDescendantIdsForRoots(database, rootIds) {
|
|
172
|
+
if (rootIds.length === 0)
|
|
173
|
+
return [];
|
|
174
|
+
try {
|
|
175
|
+
const placeholders = rootIds.map(() => '?').join(',');
|
|
176
|
+
const rows = database
|
|
177
|
+
.prepare(`
|
|
178
|
+
WITH RECURSIVE subtree AS (
|
|
179
|
+
SELECT id FROM notes WHERE id IN (${placeholders})
|
|
180
|
+
UNION ALL
|
|
181
|
+
SELECT n.id FROM notes n
|
|
182
|
+
INNER JOIN subtree s ON n.parent = s.id
|
|
183
|
+
)
|
|
184
|
+
SELECT id FROM subtree
|
|
185
|
+
`)
|
|
186
|
+
.all(...rootIds);
|
|
187
|
+
return rows.map((row) => row.id);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error('Error getting descendants from roots:', error);
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function getTrashDescendantIds(database, spaceId) {
|
|
195
|
+
try {
|
|
196
|
+
let trashFolderRows = database
|
|
197
|
+
.prepare(`
|
|
198
|
+
SELECT id
|
|
199
|
+
FROM notes
|
|
200
|
+
WHERE is_dir = 1
|
|
201
|
+
AND lower(title) = lower(?)
|
|
202
|
+
`)
|
|
203
|
+
.all(SPACE_TRASH_FOLDER_TITLE);
|
|
204
|
+
if (spaceId) {
|
|
205
|
+
const spaceDescendantIds = new Set(getSpaceDescendantIds(database, spaceId));
|
|
206
|
+
trashFolderRows = trashFolderRows.filter((row) => spaceDescendantIds.has(row.id));
|
|
207
|
+
}
|
|
208
|
+
const trashFolderIds = trashFolderRows.map((row) => row.id);
|
|
209
|
+
if (trashFolderIds.length === 0)
|
|
210
|
+
return new Set();
|
|
211
|
+
return new Set(getDescendantIdsForRoots(database, trashFolderIds));
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
console.error('Error getting trash descendants:', error);
|
|
215
|
+
return new Set();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function filterRowsByTrash(database, rows, spaceId, includeTrash = false) {
|
|
219
|
+
if (includeTrash)
|
|
220
|
+
return rows;
|
|
221
|
+
const trashDescendants = getTrashDescendantIds(database, spaceId);
|
|
222
|
+
if (trashDescendants.size === 0)
|
|
223
|
+
return rows;
|
|
224
|
+
return rows.filter((row) => !trashDescendants.has(row.id));
|
|
225
|
+
}
|
|
226
|
+
function normalizeListSpaceOptions(spaceIdOrOptions) {
|
|
227
|
+
if (typeof spaceIdOrOptions === 'string') {
|
|
228
|
+
return { spaceId: spaceIdOrOptions, includeTrash: false };
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
spaceId: spaceIdOrOptions?.spaceId,
|
|
232
|
+
includeTrash: spaceIdOrOptions?.includeTrash === true,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Find the root space ID by traversing parent chain
|
|
237
|
+
*/
|
|
238
|
+
function findRootSpaceId(database, noteId) {
|
|
239
|
+
try {
|
|
240
|
+
const row = database.prepare(`
|
|
241
|
+
WITH RECURSIVE parent_chain AS (
|
|
242
|
+
SELECT id, parent, note_type FROM notes WHERE id = ?
|
|
243
|
+
UNION ALL
|
|
244
|
+
SELECT n.id, n.parent, n.note_type FROM notes n
|
|
245
|
+
INNER JOIN parent_chain pc ON n.id = pc.parent
|
|
246
|
+
)
|
|
247
|
+
SELECT id FROM parent_chain WHERE note_type = ?
|
|
248
|
+
`).get(noteId, SQLITE_NOTE_TYPES.TEAMSPACE);
|
|
249
|
+
return row?.id;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Convert SQLite row to Note object
|
|
257
|
+
*/
|
|
258
|
+
function rowToNote(row, database) {
|
|
259
|
+
const spaceId = database ? findRootSpaceId(database, row.id) : undefined;
|
|
260
|
+
const isCalendar = row.note_type === SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR;
|
|
261
|
+
return {
|
|
262
|
+
id: row.id,
|
|
263
|
+
title: row.title || extractTitle(row.content || ''),
|
|
264
|
+
filename: row.filename,
|
|
265
|
+
content: row.content || '',
|
|
266
|
+
type: isCalendar ? 'calendar' : 'note',
|
|
267
|
+
source: 'space',
|
|
268
|
+
spaceId,
|
|
269
|
+
folder: row.parent || undefined,
|
|
270
|
+
modifiedAt: row.modified_at ? new Date(row.modified_at) : undefined,
|
|
271
|
+
createdAt: row.created_at ? new Date(row.created_at) : undefined,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* List notes in a teamspace
|
|
276
|
+
*/
|
|
277
|
+
export function listSpaceNotes(spaceIdOrOptions) {
|
|
278
|
+
const database = getDatabase();
|
|
279
|
+
if (!database)
|
|
280
|
+
return [];
|
|
281
|
+
const { spaceId, includeTrash } = normalizeListSpaceOptions(spaceIdOrOptions);
|
|
282
|
+
try {
|
|
283
|
+
let query = `
|
|
284
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
285
|
+
FROM notes
|
|
286
|
+
WHERE note_type IN (?, ?)
|
|
287
|
+
AND is_dir = 0
|
|
288
|
+
`;
|
|
289
|
+
const params = [
|
|
290
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_NOTE,
|
|
291
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR,
|
|
292
|
+
];
|
|
293
|
+
if (spaceId) {
|
|
294
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
295
|
+
if (descendantIds.length === 0)
|
|
296
|
+
return [];
|
|
297
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
298
|
+
query += ` AND id IN (${placeholders})`;
|
|
299
|
+
params.push(...descendantIds);
|
|
300
|
+
}
|
|
301
|
+
const rows = database.prepare(query).all(...params);
|
|
302
|
+
const filteredRows = filterRowsByTrash(database, rows, spaceId, includeTrash);
|
|
303
|
+
return filteredRows.map(row => rowToNote(row, database));
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
console.error('Error listing teamspace notes:', error);
|
|
307
|
+
return [];
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get a specific teamspace note by ID or filename
|
|
312
|
+
*/
|
|
313
|
+
export function getSpaceNote(identifier) {
|
|
314
|
+
const database = getDatabase();
|
|
315
|
+
if (!database)
|
|
316
|
+
return null;
|
|
317
|
+
try {
|
|
318
|
+
const row = database
|
|
319
|
+
.prepare(`
|
|
320
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
321
|
+
FROM notes
|
|
322
|
+
WHERE (id = ? OR filename = ?)
|
|
323
|
+
AND is_dir = 0
|
|
324
|
+
`)
|
|
325
|
+
.get(identifier, identifier);
|
|
326
|
+
return row ? rowToNote(row, database) : null;
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
console.error('Error getting teamspace note:', error);
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get a teamspace note by title
|
|
335
|
+
*/
|
|
336
|
+
export function getSpaceNoteByTitle(title, spaceId, includeTrash = false) {
|
|
337
|
+
const database = getDatabase();
|
|
338
|
+
if (!database)
|
|
339
|
+
return null;
|
|
340
|
+
try {
|
|
341
|
+
let query = `
|
|
342
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
343
|
+
FROM notes
|
|
344
|
+
WHERE title = ?
|
|
345
|
+
AND note_type IN (?, ?)
|
|
346
|
+
AND is_dir = 0
|
|
347
|
+
`;
|
|
348
|
+
const params = [
|
|
349
|
+
title,
|
|
350
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_NOTE,
|
|
351
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR,
|
|
352
|
+
];
|
|
353
|
+
if (spaceId) {
|
|
354
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
355
|
+
if (descendantIds.length === 0)
|
|
356
|
+
return null;
|
|
357
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
358
|
+
query += ` AND id IN (${placeholders})`;
|
|
359
|
+
params.push(...descendantIds);
|
|
360
|
+
}
|
|
361
|
+
const rows = database.prepare(query).all(...params);
|
|
362
|
+
const filteredRows = filterRowsByTrash(database, rows, spaceId, includeTrash);
|
|
363
|
+
const row = filteredRows[0];
|
|
364
|
+
return row ? rowToNote(row, database) : null;
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
console.error('Error getting teamspace note by title:', error);
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Search teamspace notes using LIKE pattern (fallback)
|
|
373
|
+
*/
|
|
374
|
+
export function searchSpaceNotes(query, options = {}) {
|
|
375
|
+
const database = getDatabase();
|
|
376
|
+
if (!database)
|
|
377
|
+
return [];
|
|
378
|
+
const { spaceId, limit = 50, includeTrash = false } = options;
|
|
379
|
+
try {
|
|
380
|
+
let sql = `
|
|
381
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
382
|
+
FROM notes
|
|
383
|
+
WHERE (content LIKE ? OR title LIKE ?)
|
|
384
|
+
AND note_type IN (?, ?)
|
|
385
|
+
AND is_dir = 0
|
|
386
|
+
`;
|
|
387
|
+
const searchPattern = `%${query}%`;
|
|
388
|
+
const params = [
|
|
389
|
+
searchPattern,
|
|
390
|
+
searchPattern,
|
|
391
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_NOTE,
|
|
392
|
+
SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR,
|
|
393
|
+
];
|
|
394
|
+
if (spaceId) {
|
|
395
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
396
|
+
if (descendantIds.length === 0)
|
|
397
|
+
return [];
|
|
398
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
399
|
+
sql += ` AND id IN (${placeholders})`;
|
|
400
|
+
params.push(...descendantIds);
|
|
401
|
+
}
|
|
402
|
+
sql += ` LIMIT ?`;
|
|
403
|
+
params.push(limit);
|
|
404
|
+
const rows = database.prepare(sql).all(...params);
|
|
405
|
+
const filteredRows = filterRowsByTrash(database, rows, spaceId, includeTrash);
|
|
406
|
+
return filteredRows.map(row => rowToNote(row, database));
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
console.error('Error searching teamspace notes:', error);
|
|
410
|
+
return [];
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Build search patterns from user input
|
|
415
|
+
* Handles OR patterns: "meeting|standup" -> ['meeting', 'standup']
|
|
416
|
+
*/
|
|
417
|
+
function parseSearchPatterns(input) {
|
|
418
|
+
// Split by | for OR patterns
|
|
419
|
+
return input.split('|').map((p) => p.trim()).filter((p) => p.length > 0);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Search space notes using LIKE with OR pattern support
|
|
423
|
+
* This is the primary search method - we don't modify NotePlan's database
|
|
424
|
+
*/
|
|
425
|
+
export function searchSpaceNotesFTS(query, options = {}) {
|
|
426
|
+
const database = getDatabase();
|
|
427
|
+
if (!database)
|
|
428
|
+
return [];
|
|
429
|
+
const { spaceId, limit = 50, includeTrash = false } = options;
|
|
430
|
+
// Parse OR patterns
|
|
431
|
+
const patterns = parseSearchPatterns(query);
|
|
432
|
+
if (patterns.length === 0)
|
|
433
|
+
return [];
|
|
434
|
+
try {
|
|
435
|
+
// Build OR conditions for multiple patterns
|
|
436
|
+
const orConditions = patterns
|
|
437
|
+
.map(() => '(content LIKE ? OR title LIKE ?)')
|
|
438
|
+
.join(' OR ');
|
|
439
|
+
let sql = `
|
|
440
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
441
|
+
FROM notes
|
|
442
|
+
WHERE (${orConditions})
|
|
443
|
+
AND note_type IN (?, ?)
|
|
444
|
+
AND is_dir = 0
|
|
445
|
+
`;
|
|
446
|
+
// Build params: each pattern needs two placeholders (content, title)
|
|
447
|
+
const params = [];
|
|
448
|
+
for (const pattern of patterns) {
|
|
449
|
+
const searchPattern = `%${pattern}%`;
|
|
450
|
+
params.push(searchPattern, searchPattern);
|
|
451
|
+
}
|
|
452
|
+
params.push(SQLITE_NOTE_TYPES.TEAMSPACE_NOTE, SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR);
|
|
453
|
+
if (spaceId) {
|
|
454
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
455
|
+
if (descendantIds.length === 0)
|
|
456
|
+
return [];
|
|
457
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
458
|
+
sql += ` AND id IN (${placeholders})`;
|
|
459
|
+
params.push(...descendantIds);
|
|
460
|
+
}
|
|
461
|
+
// Order by modified_at (most recent first) for relevance
|
|
462
|
+
sql += ` ORDER BY modified_at DESC LIMIT ?`;
|
|
463
|
+
params.push(limit);
|
|
464
|
+
const rows = database.prepare(sql).all(...params);
|
|
465
|
+
const filteredRows = filterRowsByTrash(database, rows, spaceId, includeTrash);
|
|
466
|
+
return filteredRows.map((row) => rowToNote(row, database));
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
console.error('Error searching space notes:', error);
|
|
470
|
+
return [];
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* List folders in teamspace
|
|
475
|
+
*/
|
|
476
|
+
export function listSpaceFolders(spaceIdOrOptions) {
|
|
477
|
+
const database = getDatabase();
|
|
478
|
+
if (!database)
|
|
479
|
+
return [];
|
|
480
|
+
const { spaceId, includeTrash } = normalizeListSpaceOptions(spaceIdOrOptions);
|
|
481
|
+
try {
|
|
482
|
+
let query = `
|
|
483
|
+
SELECT id, title, filename, parent
|
|
484
|
+
FROM notes
|
|
485
|
+
WHERE is_dir = 1
|
|
486
|
+
`;
|
|
487
|
+
const params = [];
|
|
488
|
+
if (spaceId) {
|
|
489
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
490
|
+
if (descendantIds.length === 0)
|
|
491
|
+
return [];
|
|
492
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
493
|
+
query += ` AND id IN (${placeholders})`;
|
|
494
|
+
params.push(...descendantIds);
|
|
495
|
+
}
|
|
496
|
+
let rows = database.prepare(query).all(...params);
|
|
497
|
+
if (!includeTrash) {
|
|
498
|
+
rows = rows.filter((row) => row.title?.toLowerCase() !== SPACE_TRASH_FOLDER_TITLE.toLowerCase());
|
|
499
|
+
}
|
|
500
|
+
return rows.map((row) => ({
|
|
501
|
+
id: row.id,
|
|
502
|
+
path: row.filename,
|
|
503
|
+
name: row.title || row.id,
|
|
504
|
+
source: 'space',
|
|
505
|
+
spaceId: findRootSpaceId(database, row.id),
|
|
506
|
+
}));
|
|
507
|
+
}
|
|
508
|
+
catch (error) {
|
|
509
|
+
console.error('Error listing teamspace folders:', error);
|
|
510
|
+
return [];
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
export function resolveSpaceFolder(spaceId, identifier, options = {}) {
|
|
514
|
+
const query = identifier.trim();
|
|
515
|
+
if (!query)
|
|
516
|
+
return null;
|
|
517
|
+
const lowerQuery = query.toLowerCase();
|
|
518
|
+
const folders = listSpaceFolders({ spaceId, includeTrash: options.includeTrash === true });
|
|
519
|
+
const exactById = folders.find((folder) => folder.id === query);
|
|
520
|
+
if (exactById)
|
|
521
|
+
return exactById;
|
|
522
|
+
const exactByPath = folders.find((folder) => folder.path.toLowerCase() === lowerQuery);
|
|
523
|
+
if (exactByPath)
|
|
524
|
+
return exactByPath;
|
|
525
|
+
const exactByName = folders.filter((folder) => folder.name.toLowerCase() === lowerQuery);
|
|
526
|
+
if (exactByName.length === 1) {
|
|
527
|
+
return exactByName[0];
|
|
528
|
+
}
|
|
529
|
+
return null;
|
|
530
|
+
}
|
|
531
|
+
export function isSpaceNoteInTrash(identifier) {
|
|
532
|
+
const database = getDatabase();
|
|
533
|
+
if (!database)
|
|
534
|
+
return false;
|
|
535
|
+
try {
|
|
536
|
+
const row = database
|
|
537
|
+
.prepare(`
|
|
538
|
+
WITH RECURSIVE parent_chain AS (
|
|
539
|
+
SELECT id, parent, is_dir, title
|
|
540
|
+
FROM notes
|
|
541
|
+
WHERE (id = ? OR filename = ?)
|
|
542
|
+
AND is_dir = 0
|
|
543
|
+
UNION ALL
|
|
544
|
+
SELECT n.id, n.parent, n.is_dir, n.title
|
|
545
|
+
FROM notes n
|
|
546
|
+
INNER JOIN parent_chain pc ON n.id = pc.parent
|
|
547
|
+
)
|
|
548
|
+
SELECT id
|
|
549
|
+
FROM parent_chain
|
|
550
|
+
WHERE is_dir = 1
|
|
551
|
+
AND lower(title) = lower(?)
|
|
552
|
+
LIMIT 1
|
|
553
|
+
`)
|
|
554
|
+
.get(identifier, identifier, SPACE_TRASH_FOLDER_TITLE);
|
|
555
|
+
return Boolean(row?.id);
|
|
556
|
+
}
|
|
557
|
+
catch (error) {
|
|
558
|
+
console.error('Error checking TeamSpace trash status:', error);
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Extract all unique tags from teamspace notes
|
|
564
|
+
*/
|
|
565
|
+
export function extractSpaceTags(spaceId) {
|
|
566
|
+
const notes = listSpaceNotes(spaceId);
|
|
567
|
+
const tags = new Set();
|
|
568
|
+
for (const note of notes) {
|
|
569
|
+
for (const tag of extractTagsFromContent(note.content)) {
|
|
570
|
+
tags.add(tag);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
return Array.from(tags).sort();
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Get calendar note from teamspace by date
|
|
577
|
+
*/
|
|
578
|
+
export function getSpaceCalendarNote(dateStr, spaceId) {
|
|
579
|
+
const database = getDatabase();
|
|
580
|
+
if (!database)
|
|
581
|
+
return null;
|
|
582
|
+
try {
|
|
583
|
+
// Get descendants first
|
|
584
|
+
const descendantIds = getSpaceDescendantIds(database, spaceId);
|
|
585
|
+
if (descendantIds.length === 0)
|
|
586
|
+
return null;
|
|
587
|
+
const placeholders = descendantIds.map(() => '?').join(',');
|
|
588
|
+
const row = database
|
|
589
|
+
.prepare(`
|
|
590
|
+
SELECT id, content, note_type, title, filename, parent, is_dir, created_at, modified_at
|
|
591
|
+
FROM notes
|
|
592
|
+
WHERE note_type = ?
|
|
593
|
+
AND id IN (${placeholders})
|
|
594
|
+
AND filename LIKE ?
|
|
595
|
+
AND is_dir = 0
|
|
596
|
+
`)
|
|
597
|
+
.get(SQLITE_NOTE_TYPES.TEAMSPACE_CALENDAR, ...descendantIds, `%${dateStr}%`);
|
|
598
|
+
return row ? rowToNote(row, database) : null;
|
|
599
|
+
}
|
|
600
|
+
catch (error) {
|
|
601
|
+
console.error('Error getting teamspace calendar note:', error);
|
|
602
|
+
return null;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=sqlite-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-reader.js","sourceRoot":"","sources":["../../src/noteplan/sqlite-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface SpaceMoveResult {
|
|
2
|
+
noteId: string;
|
|
3
|
+
previousParent: string | null;
|
|
4
|
+
destinationParentId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SpaceTrashResult extends SpaceMoveResult {
|
|
7
|
+
spaceId: string;
|
|
8
|
+
trashFolderId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SpaceRenameResult {
|
|
11
|
+
folderId: string;
|
|
12
|
+
previousTitle: string;
|
|
13
|
+
title: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a new note in a space
|
|
17
|
+
*/
|
|
18
|
+
export declare function createSpaceNote(spaceId: string, title: string, content?: string, parent?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Create a calendar note in a space
|
|
21
|
+
*/
|
|
22
|
+
export declare function createSpaceCalendarNote(spaceId: string, dateStr: string, content?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Update a space note's content
|
|
25
|
+
*/
|
|
26
|
+
export declare function updateSpaceNote(identifier: string, content: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Update a space note's title
|
|
29
|
+
*/
|
|
30
|
+
export declare function updateSpaceNoteTitle(identifier: string, title: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Move a space note to another folder in the same space
|
|
33
|
+
*/
|
|
34
|
+
export declare function moveSpaceNote(identifier: string, destinationParentId: string): SpaceMoveResult;
|
|
35
|
+
/**
|
|
36
|
+
* Delete a space note by moving it into the space @Trash folder
|
|
37
|
+
*/
|
|
38
|
+
export declare function deleteSpaceNote(identifier: string): SpaceTrashResult;
|
|
39
|
+
/**
|
|
40
|
+
* Restore a space note from @Trash
|
|
41
|
+
*/
|
|
42
|
+
export declare function restoreSpaceNote(identifier: string, destinationParentId?: string): SpaceMoveResult;
|
|
43
|
+
/**
|
|
44
|
+
* Create a folder in a space
|
|
45
|
+
*/
|
|
46
|
+
export declare function createSpaceFolder(spaceId: string, name: string, parent?: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Move a space folder to another folder in the same space
|
|
49
|
+
*/
|
|
50
|
+
export declare function moveSpaceFolder(identifier: string, destinationParentId: string): SpaceMoveResult;
|
|
51
|
+
/**
|
|
52
|
+
* Delete a space folder by moving it into the space @Trash folder
|
|
53
|
+
*/
|
|
54
|
+
export declare function deleteSpaceFolder(identifier: string): SpaceTrashResult;
|
|
55
|
+
/**
|
|
56
|
+
* Rename a space folder in place
|
|
57
|
+
*/
|
|
58
|
+
export declare function renameSpaceFolder(identifier: string, title: string): SpaceRenameResult;
|
|
59
|
+
/**
|
|
60
|
+
* Get the default space ID (first one found)
|
|
61
|
+
*/
|
|
62
|
+
export declare function getDefaultSpaceId(): string | null;
|
|
63
|
+
//# sourceMappingURL=sqlite-writer.d.ts.map
|