@noteplanco/noteplan-mcp 1.1.7 → 1.1.9
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/dist/noteplan/embeddings.d.ts +8 -0
- package/dist/noteplan/embeddings.d.ts.map +1 -1
- package/dist/noteplan/embeddings.js +3 -3
- package/dist/noteplan/embeddings.js.map +1 -1
- package/dist/noteplan/file-reader.d.ts +6 -0
- package/dist/noteplan/file-reader.d.ts.map +1 -1
- package/dist/noteplan/file-reader.js +15 -0
- package/dist/noteplan/file-reader.js.map +1 -1
- package/dist/noteplan/file-writer.d.ts.map +1 -1
- package/dist/noteplan/file-writer.js +13 -1
- package/dist/noteplan/file-writer.js.map +1 -1
- package/dist/noteplan/file-writer.test.js +4 -0
- package/dist/noteplan/file-writer.test.js.map +1 -1
- package/dist/noteplan/frontmatter-parser.d.ts +4 -4
- package/dist/noteplan/frontmatter-parser.d.ts.map +1 -1
- package/dist/noteplan/frontmatter-parser.js +11 -14
- package/dist/noteplan/frontmatter-parser.js.map +1 -1
- package/dist/noteplan/frontmatter-parser.test.js +92 -0
- package/dist/noteplan/frontmatter-parser.test.js.map +1 -1
- package/dist/noteplan/markdown-parser.d.ts.map +1 -1
- package/dist/noteplan/markdown-parser.js +4 -2
- package/dist/noteplan/markdown-parser.js.map +1 -1
- package/dist/noteplan/markdown-parser.test.js +129 -0
- package/dist/noteplan/markdown-parser.test.js.map +1 -1
- package/dist/noteplan/sqlite-loader.d.ts +11 -2
- package/dist/noteplan/sqlite-loader.d.ts.map +1 -1
- package/dist/noteplan/sqlite-loader.js +143 -15
- package/dist/noteplan/sqlite-loader.js.map +1 -1
- package/dist/noteplan/sqlite-writer.d.ts.map +1 -1
- package/dist/noteplan/sqlite-writer.js +3 -0
- package/dist/noteplan/sqlite-writer.js.map +1 -1
- package/dist/noteplan/template-docs.d.ts +35 -0
- package/dist/noteplan/template-docs.d.ts.map +1 -0
- package/dist/noteplan/template-docs.js +184 -0
- package/dist/noteplan/template-docs.js.map +1 -0
- package/dist/noteplan/unified-store.d.ts +2 -0
- package/dist/noteplan/unified-store.d.ts.map +1 -1
- package/dist/noteplan/unified-store.js +30 -7
- package/dist/noteplan/unified-store.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +307 -65
- package/dist/server.js.map +1 -1
- package/dist/tools/calendar.d.ts +2 -2
- package/dist/tools/events.d.ts +16 -16
- package/dist/tools/events.d.ts.map +1 -1
- package/dist/tools/events.js +17 -2
- package/dist/tools/events.js.map +1 -1
- package/dist/tools/notes.d.ts +327 -45
- package/dist/tools/notes.d.ts.map +1 -1
- package/dist/tools/notes.js +391 -51
- package/dist/tools/notes.js.map +1 -1
- package/dist/tools/notes.test.js +959 -1
- package/dist/tools/notes.test.js.map +1 -1
- package/dist/tools/plugins.d.ts.map +1 -1
- package/dist/tools/plugins.js +1 -0
- package/dist/tools/plugins.js.map +1 -1
- package/dist/tools/search.d.ts +2 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +32 -4
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/tasks.d.ts +86 -10
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +84 -25
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/templates.d.ts +64 -3
- package/dist/tools/templates.d.ts.map +1 -1
- package/dist/tools/templates.js +73 -1
- package/dist/tools/templates.js.map +1 -1
- package/dist/tools/ui-automation.d.ts +74 -0
- package/dist/tools/ui-automation.d.ts.map +1 -0
- package/dist/tools/ui-automation.js +209 -0
- package/dist/tools/ui-automation.js.map +1 -0
- package/dist/utils/version.d.ts +1 -0
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +89 -27
- package/dist/utils/version.js.map +1 -1
- package/docs/templates.db.gz +0 -0
- package/docs/x-callback-url.md +318 -0
- package/package.json +1 -1
package/dist/tools/templates.js
CHANGED
|
@@ -3,14 +3,19 @@ import { z } from 'zod';
|
|
|
3
3
|
import * as store from '../noteplan/unified-store.js';
|
|
4
4
|
import { runAppleScript, escapeAppleScript, APP_NAME } from '../utils/applescript.js';
|
|
5
5
|
import { getNotePlanVersion, MIN_BUILD_RENDER_TEMPLATE } from '../utils/version.js';
|
|
6
|
+
import { tryEmbedQuery, searchTemplateDocs, textSearchTemplateDocs, getDocChunk } from '../noteplan/template-docs.js';
|
|
6
7
|
export const templatesSchema = z.object({
|
|
7
|
-
action: z.enum(['list', 'render']).describe('Action to perform'),
|
|
8
|
+
action: z.enum(['list', 'render', 'search_docs', 'get_doc']).describe('Action to perform'),
|
|
8
9
|
templateTitle: z.string().optional().describe('Template title — used by render (loads a saved template by title)'),
|
|
9
10
|
content: z.string().optional().describe('Raw template content string — used by render (renders arbitrary template code for debugging)'),
|
|
10
11
|
folder: z.string().optional().describe('Template subfolder — used by list (default: @Templates)'),
|
|
11
12
|
limit: z.number().min(1).max(200).optional().default(50).describe('Maximum results — used by list'),
|
|
12
13
|
offset: z.number().min(0).optional().default(0).describe('Pagination offset — used by list'),
|
|
13
14
|
cursor: z.string().optional().describe('Cursor from previous page — used by list'),
|
|
15
|
+
query: z.string().optional().describe('Search query — used by search_docs'),
|
|
16
|
+
includeContent: z.boolean().optional().describe('Include full chunk text in results — used by search_docs'),
|
|
17
|
+
noteTitle: z.string().optional().describe('Doc note title — used by get_doc (from search_docs results)'),
|
|
18
|
+
chunkIndex: z.number().optional().describe('Chunk index — used by get_doc (from search_docs results, default 0)'),
|
|
14
19
|
});
|
|
15
20
|
// ── Frontmatter helpers ──
|
|
16
21
|
function extractFrontmatter(content) {
|
|
@@ -62,6 +67,7 @@ export function listTemplates(params) {
|
|
|
62
67
|
const nextCursor = hasMore ? String(offset + page.length) : null;
|
|
63
68
|
return {
|
|
64
69
|
success: true,
|
|
70
|
+
tip: 'Before writing or editing templates, use action "search_docs" with a query to search the built-in documentation for syntax, helpers, DataStore API, and examples.',
|
|
65
71
|
count: page.length,
|
|
66
72
|
totalCount: notes.length,
|
|
67
73
|
offset,
|
|
@@ -115,6 +121,7 @@ export function renderTemplate(params) {
|
|
|
115
121
|
if (parsed.success === true) {
|
|
116
122
|
return {
|
|
117
123
|
success: true,
|
|
124
|
+
tip: 'Use action "search_docs" with a query to search the built-in documentation for template syntax, helpers, DataStore API, and examples.',
|
|
118
125
|
renderedContent: parsed.rendered ?? raw,
|
|
119
126
|
source: content ? 'raw_content' : 'saved_template',
|
|
120
127
|
templateTitle: templateTitle || undefined,
|
|
@@ -142,4 +149,69 @@ export function renderTemplate(params) {
|
|
|
142
149
|
};
|
|
143
150
|
}
|
|
144
151
|
}
|
|
152
|
+
// ── Get full doc chunk ──
|
|
153
|
+
export function getDoc(params) {
|
|
154
|
+
const noteTitle = params.noteTitle?.trim();
|
|
155
|
+
if (!noteTitle) {
|
|
156
|
+
return { success: false, error: 'noteTitle is required for get_doc' };
|
|
157
|
+
}
|
|
158
|
+
const chunkIndex = params.chunkIndex ?? 0;
|
|
159
|
+
const chunk = getDocChunk(noteTitle, chunkIndex);
|
|
160
|
+
if (!chunk) {
|
|
161
|
+
return {
|
|
162
|
+
success: false,
|
|
163
|
+
error: `No doc chunk found for noteTitle="${noteTitle}" chunkIndex=${chunkIndex}`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
success: true,
|
|
168
|
+
noteTitle: chunk.noteTitle,
|
|
169
|
+
chunkIndex: chunk.chunkIndex,
|
|
170
|
+
totalChunks: chunk.totalChunks,
|
|
171
|
+
content: chunk.content,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// ── Search template docs ──
|
|
175
|
+
export async function searchDocs(params) {
|
|
176
|
+
const query = params.query?.trim();
|
|
177
|
+
if (!query) {
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
error: 'query is required for search_docs',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const searchOptions = {
|
|
184
|
+
limit: params.limit ?? 5,
|
|
185
|
+
includeContent: params.includeContent,
|
|
186
|
+
};
|
|
187
|
+
try {
|
|
188
|
+
const embedResult = await tryEmbedQuery(query);
|
|
189
|
+
if (embedResult.ok) {
|
|
190
|
+
// Semantic search using embeddings
|
|
191
|
+
const matches = searchTemplateDocs(embedResult.vector, searchOptions);
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
query,
|
|
195
|
+
count: matches.length,
|
|
196
|
+
embeddingSource: embedResult.source,
|
|
197
|
+
matches,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// No embedding source available — fall back to text search
|
|
201
|
+
const matches = textSearchTemplateDocs(query, searchOptions);
|
|
202
|
+
return {
|
|
203
|
+
success: true,
|
|
204
|
+
query,
|
|
205
|
+
count: matches.length,
|
|
206
|
+
embeddingSource: 'text',
|
|
207
|
+
matches,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
return {
|
|
212
|
+
success: false,
|
|
213
|
+
error: error instanceof Error ? error.message : 'Template doc search failed',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
145
217
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const screenshotSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
3
|
+
export declare const clickSchema: z.ZodObject<{
|
|
4
|
+
x: z.ZodNumber;
|
|
5
|
+
y: z.ZodNumber;
|
|
6
|
+
doubleClick: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
rightClick: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
doubleClick: boolean;
|
|
12
|
+
rightClick: boolean;
|
|
13
|
+
}, {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
doubleClick?: boolean | undefined;
|
|
17
|
+
rightClick?: boolean | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const clickAndScreenshotSchema: z.ZodObject<{
|
|
20
|
+
x: z.ZodNumber;
|
|
21
|
+
y: z.ZodNumber;
|
|
22
|
+
doubleClick: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
23
|
+
rightClick: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
doubleClick: boolean;
|
|
28
|
+
rightClick: boolean;
|
|
29
|
+
}, {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
doubleClick?: boolean | undefined;
|
|
33
|
+
rightClick?: boolean | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const typeTextSchema: z.ZodObject<{
|
|
36
|
+
text: z.ZodString;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
text: string;
|
|
39
|
+
}, {
|
|
40
|
+
text: string;
|
|
41
|
+
}>;
|
|
42
|
+
export declare const scrollSchema: z.ZodObject<{
|
|
43
|
+
x: z.ZodNumber;
|
|
44
|
+
y: z.ZodNumber;
|
|
45
|
+
deltaX: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
46
|
+
deltaY: z.ZodNumber;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
deltaX: number;
|
|
51
|
+
deltaY: number;
|
|
52
|
+
}, {
|
|
53
|
+
x: number;
|
|
54
|
+
y: number;
|
|
55
|
+
deltaY: number;
|
|
56
|
+
deltaX?: number | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
export declare const keyPressSchema: z.ZodObject<{
|
|
59
|
+
key: z.ZodString;
|
|
60
|
+
modifiers: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
|
+
key: string;
|
|
63
|
+
modifiers?: string | undefined;
|
|
64
|
+
}, {
|
|
65
|
+
key: string;
|
|
66
|
+
modifiers?: string | undefined;
|
|
67
|
+
}>;
|
|
68
|
+
export declare function screenshot(_args: z.infer<typeof screenshotSchema>): Record<string, unknown>;
|
|
69
|
+
export declare function click(args: z.infer<typeof clickSchema>): Record<string, unknown>;
|
|
70
|
+
export declare function clickAndScreenshot(args: z.infer<typeof clickAndScreenshotSchema>): Record<string, unknown>;
|
|
71
|
+
export declare function typeText(args: z.infer<typeof typeTextSchema>): Record<string, unknown>;
|
|
72
|
+
export declare function scroll(args: z.infer<typeof scrollSchema>): Record<string, unknown>;
|
|
73
|
+
export declare function keyPress(args: z.infer<typeof keyPressSchema>): Record<string, unknown>;
|
|
74
|
+
//# sourceMappingURL=ui-automation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-automation.d.ts","sourceRoot":"","sources":["../../src/tools/ui-automation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,gBAAgB,gDAAe,CAAC;AAE7C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAKtB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAKvB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AA6CH,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ3F;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmChF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkB1G;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBtF;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BlF;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BtF"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// UI automation tools for visual interaction with the NotePlan window
|
|
2
|
+
// Enables AI agents to take screenshots, click, type, scroll, and press keys
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import { escapeAppleScript, runAppleScript, APP_NAME } from '../utils/applescript.js';
|
|
6
|
+
// --- Schemas ---
|
|
7
|
+
export const screenshotSchema = z.object({});
|
|
8
|
+
export const clickSchema = z.object({
|
|
9
|
+
x: z.number().describe('X coordinate in points (relative to window content area)'),
|
|
10
|
+
y: z.number().describe('Y coordinate in points (relative to window content area, 0 = top)'),
|
|
11
|
+
doubleClick: z.boolean().optional().default(false).describe('Perform a double click'),
|
|
12
|
+
rightClick: z.boolean().optional().default(false).describe('Perform a right click (context menu)'),
|
|
13
|
+
});
|
|
14
|
+
export const clickAndScreenshotSchema = z.object({
|
|
15
|
+
x: z.number().describe('X coordinate in points (relative to window content area)'),
|
|
16
|
+
y: z.number().describe('Y coordinate in points (relative to window content area, 0 = top)'),
|
|
17
|
+
doubleClick: z.boolean().optional().default(false).describe('Perform a double click'),
|
|
18
|
+
rightClick: z.boolean().optional().default(false).describe('Perform a right click (context menu)'),
|
|
19
|
+
});
|
|
20
|
+
export const typeTextSchema = z.object({
|
|
21
|
+
text: z.string().describe('Text to type into the currently focused element'),
|
|
22
|
+
});
|
|
23
|
+
export const scrollSchema = z.object({
|
|
24
|
+
x: z.number().describe('X coordinate in points where the scroll occurs'),
|
|
25
|
+
y: z.number().describe('Y coordinate in points where the scroll occurs (0 = top)'),
|
|
26
|
+
deltaX: z.number().optional().default(0).describe('Horizontal scroll amount in pixels (positive = right)'),
|
|
27
|
+
deltaY: z.number().describe('Vertical scroll amount in pixels (negative = scroll down, positive = scroll up)'),
|
|
28
|
+
});
|
|
29
|
+
export const keyPressSchema = z.object({
|
|
30
|
+
key: z.string().describe('Key name: return, tab, escape, delete, space, left, right, up, down, home, end, pageup, pagedown, f1-f12, a-z, 0-9, or punctuation characters'),
|
|
31
|
+
modifiers: z.string().optional().describe('Comma-separated modifiers: cmd, shift, opt, ctrl, fn'),
|
|
32
|
+
});
|
|
33
|
+
// --- Implementations ---
|
|
34
|
+
/** Parse a screenshot JSON response (with inline base64 or file path fallback) into an MCP image result. */
|
|
35
|
+
function parseScreenshotResponse(raw, errorContext) {
|
|
36
|
+
let parsed;
|
|
37
|
+
try {
|
|
38
|
+
parsed = JSON.parse(raw);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return { success: false, error: `Failed to parse ${errorContext} result from NotePlan` };
|
|
42
|
+
}
|
|
43
|
+
if (!parsed.success) {
|
|
44
|
+
return { success: false, error: parsed.error || `${errorContext} failed` };
|
|
45
|
+
}
|
|
46
|
+
// Prefer inline base64 (no file I/O) — fall back to file path for older builds
|
|
47
|
+
let base64Data;
|
|
48
|
+
if (parsed.imageBase64) {
|
|
49
|
+
base64Data = parsed.imageBase64;
|
|
50
|
+
}
|
|
51
|
+
else if (parsed.path) {
|
|
52
|
+
if (!fs.existsSync(parsed.path)) {
|
|
53
|
+
return { success: false, error: 'Screenshot file not found' };
|
|
54
|
+
}
|
|
55
|
+
base64Data = fs.readFileSync(parsed.path).toString('base64');
|
|
56
|
+
try {
|
|
57
|
+
fs.unlinkSync(parsed.path);
|
|
58
|
+
}
|
|
59
|
+
catch { /* ignore */ }
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return { success: false, error: 'No image data in response' };
|
|
63
|
+
}
|
|
64
|
+
const result = {
|
|
65
|
+
success: true,
|
|
66
|
+
width: parsed.width,
|
|
67
|
+
height: parsed.height,
|
|
68
|
+
scaleFactor: parsed.scaleFactor,
|
|
69
|
+
_imageData: base64Data,
|
|
70
|
+
_imageMimeType: 'image/jpeg',
|
|
71
|
+
};
|
|
72
|
+
if (parsed.debug) {
|
|
73
|
+
result.debug = parsed.debug;
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
export function screenshot(_args) {
|
|
78
|
+
let raw;
|
|
79
|
+
try {
|
|
80
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to screenshotWindow`, 15_000);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
return { success: false, error: `Failed to capture screenshot: ${e.message}` };
|
|
84
|
+
}
|
|
85
|
+
return parseScreenshotResponse(raw, 'screenshot');
|
|
86
|
+
}
|
|
87
|
+
export function click(args) {
|
|
88
|
+
const { x, y, doubleClick, rightClick } = clickSchema.parse(args);
|
|
89
|
+
let params = ` at x ${x} at y ${y}`;
|
|
90
|
+
if (doubleClick) {
|
|
91
|
+
params += ' double click true';
|
|
92
|
+
}
|
|
93
|
+
if (rightClick) {
|
|
94
|
+
params += ' right click true';
|
|
95
|
+
}
|
|
96
|
+
let raw;
|
|
97
|
+
try {
|
|
98
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to clickWindow${params}`);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return { success: false, error: `Click failed: ${e.message}` };
|
|
102
|
+
}
|
|
103
|
+
const label = rightClick ? ' (right)' : doubleClick ? ' (double)' : '';
|
|
104
|
+
let parsed;
|
|
105
|
+
try {
|
|
106
|
+
parsed = JSON.parse(raw);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return { success: true, message: `Clicked at (${x}, ${y})${label}` };
|
|
110
|
+
}
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
return { success: false, error: parsed.error || 'Click failed' };
|
|
113
|
+
}
|
|
114
|
+
const result = { success: true, message: `Clicked at (${x}, ${y})${label}` };
|
|
115
|
+
if (parsed.debug) {
|
|
116
|
+
result.debug = parsed.debug;
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
export function clickAndScreenshot(args) {
|
|
121
|
+
const { x, y, doubleClick, rightClick } = clickAndScreenshotSchema.parse(args);
|
|
122
|
+
let params = ` at x ${x} at y ${y}`;
|
|
123
|
+
if (doubleClick) {
|
|
124
|
+
params += ' double click true';
|
|
125
|
+
}
|
|
126
|
+
if (rightClick) {
|
|
127
|
+
params += ' right click true';
|
|
128
|
+
}
|
|
129
|
+
let raw;
|
|
130
|
+
try {
|
|
131
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to clickAndScreenshot${params}`, 15_000);
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
return { success: false, error: `Click and screenshot failed: ${e.message}` };
|
|
135
|
+
}
|
|
136
|
+
return parseScreenshotResponse(raw, 'click_and_screenshot');
|
|
137
|
+
}
|
|
138
|
+
export function typeText(args) {
|
|
139
|
+
const { text } = typeTextSchema.parse(args);
|
|
140
|
+
let raw;
|
|
141
|
+
try {
|
|
142
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to typeInWindow with text "${escapeAppleScript(text)}"`);
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
return { success: false, error: `Type failed: ${e.message}` };
|
|
146
|
+
}
|
|
147
|
+
let parsed;
|
|
148
|
+
try {
|
|
149
|
+
parsed = JSON.parse(raw);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return { success: true, message: `Typed ${text.length} characters` };
|
|
153
|
+
}
|
|
154
|
+
if (!parsed.success) {
|
|
155
|
+
return { success: false, error: parsed.error || 'Type failed' };
|
|
156
|
+
}
|
|
157
|
+
return { success: true, message: `Typed ${text.length} characters` };
|
|
158
|
+
}
|
|
159
|
+
export function scroll(args) {
|
|
160
|
+
const { x, y, deltaX, deltaY } = scrollSchema.parse(args);
|
|
161
|
+
let params = ` at x ${x} at y ${y} with deltaY ${deltaY}`;
|
|
162
|
+
if (deltaX !== 0) {
|
|
163
|
+
params += ` with deltaX ${deltaX}`;
|
|
164
|
+
}
|
|
165
|
+
let raw;
|
|
166
|
+
try {
|
|
167
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to scrollWindow${params}`);
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
return { success: false, error: `Scroll failed: ${e.message}` };
|
|
171
|
+
}
|
|
172
|
+
let parsed;
|
|
173
|
+
try {
|
|
174
|
+
parsed = JSON.parse(raw);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return { success: true, message: `Scrolled at (${x}, ${y}) deltaY=${deltaY}` };
|
|
178
|
+
}
|
|
179
|
+
if (!parsed.success) {
|
|
180
|
+
return { success: false, error: parsed.error || 'Scroll failed' };
|
|
181
|
+
}
|
|
182
|
+
return { success: true, message: `Scrolled at (${x}, ${y}) deltaY=${deltaY}${deltaX ? ` deltaX=${deltaX}` : ''}` };
|
|
183
|
+
}
|
|
184
|
+
export function keyPress(args) {
|
|
185
|
+
const { key, modifiers } = keyPressSchema.parse(args);
|
|
186
|
+
let params = ` with key "${escapeAppleScript(key)}"`;
|
|
187
|
+
if (modifiers) {
|
|
188
|
+
params += ` with modifiers "${escapeAppleScript(modifiers)}"`;
|
|
189
|
+
}
|
|
190
|
+
let raw;
|
|
191
|
+
try {
|
|
192
|
+
raw = runAppleScript(`tell application "${APP_NAME}" to keyPressWindow${params}`);
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
return { success: false, error: `Key press failed: ${e.message}` };
|
|
196
|
+
}
|
|
197
|
+
let parsed;
|
|
198
|
+
try {
|
|
199
|
+
parsed = JSON.parse(raw);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return { success: true, message: `Pressed key "${key}"${modifiers ? ` with ${modifiers}` : ''}` };
|
|
203
|
+
}
|
|
204
|
+
if (!parsed.success) {
|
|
205
|
+
return { success: false, error: parsed.error || 'Key press failed' };
|
|
206
|
+
}
|
|
207
|
+
return { success: true, message: `Pressed key "${key}"${modifiers ? ` with ${modifiers}` : ''}` };
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=ui-automation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-automation.js","sourceRoot":"","sources":["../../src/tools/ui-automation.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/version.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface NotePlanVersion {
|
|
|
5
5
|
}
|
|
6
6
|
export declare const MIN_BUILD_ADVANCED_FEATURES = 1300;
|
|
7
7
|
export declare const MIN_BUILD_RENDER_TEMPLATE = 1400;
|
|
8
|
+
export declare const MIN_BUILD_EMBED_TEXT = 1490;
|
|
8
9
|
export declare const MIN_BUILD_CREATE_BACKUP = 1492;
|
|
9
10
|
export declare function getNotePlanVersion(forceRefresh?: boolean): NotePlanVersion;
|
|
10
11
|
export declare function isAdvancedFeaturesAvailable(forceRefresh?: boolean): boolean;
|
|
@@ -1 +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;AAGhD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAG9C,eAAO,MAAM,uBAAuB,OAAO,CAAC;
|
|
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;AAGhD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAG9C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAGzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AA0H5C,wBAAgB,kBAAkB,CAAC,YAAY,UAAQ,GAAG,eAAe,CAgBxE;AAED,wBAAgB,2BAA2B,CAAC,YAAY,UAAQ,GAAG,OAAO,CAGzE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C"}
|
package/dist/utils/version.js
CHANGED
|
@@ -6,50 +6,104 @@ import * as path from 'path';
|
|
|
6
6
|
export const MIN_BUILD_ADVANCED_FEATURES = 1300;
|
|
7
7
|
// Build that ships the renderTemplate AppleScript command
|
|
8
8
|
export const MIN_BUILD_RENDER_TEMPLATE = 1400;
|
|
9
|
+
// Build that ships the embedText AppleScript command
|
|
10
|
+
export const MIN_BUILD_EMBED_TEXT = 1490;
|
|
9
11
|
// Build that ships the createBackup AppleScript command
|
|
10
12
|
export const MIN_BUILD_CREATE_BACKUP = 1492;
|
|
11
13
|
const CACHE_TTL_MS = 60_000;
|
|
12
14
|
let cachedVersion = null;
|
|
13
15
|
let cachedAt = 0;
|
|
16
|
+
// AppleScript may resolve the app by CFBundleName or by .app filename depending on macOS version.
|
|
17
|
+
// MAS installs can use the store marketing name as the .app folder name, so we try multiple names.
|
|
18
|
+
const APPLESCRIPT_APP_NAMES = [
|
|
19
|
+
'NotePlan',
|
|
20
|
+
'NotePlan 3',
|
|
21
|
+
'NotePlan Beta',
|
|
22
|
+
'NotePlan - To-Do List & Notes',
|
|
23
|
+
];
|
|
14
24
|
function detectViaAppleScript() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
for (const appName of APPLESCRIPT_APP_NAMES) {
|
|
26
|
+
try {
|
|
27
|
+
const isRunning = execFileSync('osascript', ['-e', `application "${appName}" is running`], {
|
|
28
|
+
encoding: 'utf-8',
|
|
29
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
30
|
+
timeout: 3_000,
|
|
31
|
+
}).trim();
|
|
32
|
+
if (isRunning !== 'true') {
|
|
33
|
+
console.error(`[noteplan-mcp] AppleScript: "${appName}" not running, skipping`);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
console.error(`[noteplan-mcp] AppleScript: "${appName}" is running, querying version...`);
|
|
37
|
+
const raw = execFileSync('osascript', ['-e', `tell application "${appName}" to getVersion`], {
|
|
38
|
+
encoding: 'utf-8',
|
|
39
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
40
|
+
timeout: 5_000,
|
|
41
|
+
}).trim();
|
|
42
|
+
const parsed = JSON.parse(raw);
|
|
43
|
+
if (typeof parsed.version === 'string' && typeof parsed.build === 'number') {
|
|
44
|
+
console.error(`[noteplan-mcp] AppleScript: detected "${appName}" v${parsed.version} build ${parsed.build}`);
|
|
45
|
+
return { version: parsed.version, build: parsed.build, source: 'applescript' };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
50
|
+
console.error(`[noteplan-mcp] AppleScript detection failed for "${appName}": ${msg}`);
|
|
51
|
+
if (msg.includes('not allowed') || msg.includes('permission') || msg.includes('1743') || msg.includes('assistive')) {
|
|
52
|
+
console.error('[noteplan-mcp] Hint: The parent app (e.g. Claude Desktop, Terminal) may need Automation permission for NotePlan. Check System Settings > Privacy & Security > Automation.');
|
|
53
|
+
return null; // Permission issue — no point trying other names
|
|
54
|
+
}
|
|
32
55
|
}
|
|
33
56
|
}
|
|
34
|
-
|
|
35
|
-
// App not running or command not available
|
|
36
|
-
}
|
|
57
|
+
console.error('[noteplan-mcp] AppleScript: NotePlan not found running under any known name.');
|
|
37
58
|
return null;
|
|
38
59
|
}
|
|
39
60
|
const KNOWN_APP_PATHS = [
|
|
40
61
|
'/Applications/NotePlan 3.app',
|
|
41
62
|
'/Applications/NotePlan.app',
|
|
63
|
+
'/Applications/NotePlan Beta.app',
|
|
64
|
+
'/Applications/NotePlan - To-Do List & Notes.app',
|
|
42
65
|
path.join(process.env.HOME ?? '', 'Applications/NotePlan 3.app'),
|
|
43
66
|
path.join(process.env.HOME ?? '', 'Applications/NotePlan.app'),
|
|
67
|
+
path.join(process.env.HOME ?? '', 'Applications/NotePlan Beta.app'),
|
|
68
|
+
path.join(process.env.HOME ?? '', 'Applications/NotePlan - To-Do List & Notes.app'),
|
|
44
69
|
// Setapp
|
|
45
70
|
'/Applications/Setapp/NotePlan 3.app',
|
|
46
71
|
'/Applications/Setapp/NotePlan.app',
|
|
47
72
|
];
|
|
48
73
|
function detectViaPlist() {
|
|
49
|
-
|
|
74
|
+
console.error(`[noteplan-mcp] Plist: scanning ${KNOWN_APP_PATHS.length} known app paths...`);
|
|
75
|
+
// First try hardcoded known paths
|
|
76
|
+
const result = readVersionFromAppPath(KNOWN_APP_PATHS);
|
|
77
|
+
if (result)
|
|
78
|
+
return result;
|
|
79
|
+
// Fallback: use mdfind (Spotlight) to locate the app bundle dynamically
|
|
80
|
+
console.error(`[noteplan-mcp] Plist: app not found at known paths, trying mdfind...`);
|
|
81
|
+
try {
|
|
82
|
+
const mdfindResult = execFileSync('mdfind', ['kMDItemCFBundleIdentifier == "co.noteplan.NotePlan3" || kMDItemCFBundleIdentifier == "co.noteplan.NotePlan-setapp" || kMDItemCFBundleIdentifier == "co.noteplan.NotePlan"'], {
|
|
83
|
+
encoding: 'utf-8',
|
|
84
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
85
|
+
timeout: 5_000,
|
|
86
|
+
}).trim();
|
|
87
|
+
if (mdfindResult) {
|
|
88
|
+
const discoveredPaths = mdfindResult.split('\n').filter(Boolean);
|
|
89
|
+
console.error(`[noteplan-mcp] mdfind discovered: ${discoveredPaths.join(', ')}`);
|
|
90
|
+
const found = readVersionFromAppPath(discoveredPaths);
|
|
91
|
+
if (found)
|
|
92
|
+
return found;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.error(`[noteplan-mcp] mdfind fallback failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function readVersionFromAppPath(appPaths) {
|
|
101
|
+
for (const appPath of appPaths) {
|
|
50
102
|
const plistPath = path.join(appPath, 'Contents/Info.plist');
|
|
51
|
-
if (!fs.existsSync(plistPath))
|
|
103
|
+
if (!fs.existsSync(plistPath)) {
|
|
104
|
+
console.error(`[noteplan-mcp] Plist: no Info.plist at ${appPath}`);
|
|
52
105
|
continue;
|
|
106
|
+
}
|
|
53
107
|
try {
|
|
54
108
|
const version = execFileSync('defaults', ['read', path.join(appPath, 'Contents/Info'), 'CFBundleShortVersionString'], {
|
|
55
109
|
encoding: 'utf-8',
|
|
@@ -63,11 +117,12 @@ function detectViaPlist() {
|
|
|
63
117
|
}).trim();
|
|
64
118
|
const build = parseInt(buildStr, 10) || 0;
|
|
65
119
|
if (version) {
|
|
120
|
+
console.error(`[noteplan-mcp] Plist: found v${version} build ${build} at ${appPath}`);
|
|
66
121
|
return { version, build, source: 'plist' };
|
|
67
122
|
}
|
|
68
123
|
}
|
|
69
|
-
catch {
|
|
70
|
-
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.error(`[noteplan-mcp] Plist read failed for ${appPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
71
126
|
}
|
|
72
127
|
}
|
|
73
128
|
return null;
|
|
@@ -75,12 +130,19 @@ function detectViaPlist() {
|
|
|
75
130
|
export function getNotePlanVersion(forceRefresh = false) {
|
|
76
131
|
const now = Date.now();
|
|
77
132
|
if (!forceRefresh && cachedVersion && (now - cachedAt) < CACHE_TTL_MS) {
|
|
133
|
+
console.error(`[noteplan-mcp] Version: serving from cache (v${cachedVersion.version} build ${cachedVersion.build})`);
|
|
78
134
|
return cachedVersion;
|
|
79
135
|
}
|
|
80
|
-
const version = detectViaAppleScript() ?? detectViaPlist() ??
|
|
81
|
-
|
|
136
|
+
const version = detectViaAppleScript() ?? detectViaPlist() ?? null;
|
|
137
|
+
if (!version) {
|
|
138
|
+
console.error('[noteplan-mcp] Version: both AppleScript and Plist detection failed, falling back to 0.0.0');
|
|
139
|
+
cachedVersion = { version: '0.0.0', build: 0, source: 'unknown' };
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
cachedVersion = version;
|
|
143
|
+
}
|
|
82
144
|
cachedAt = now;
|
|
83
|
-
return
|
|
145
|
+
return cachedVersion;
|
|
84
146
|
}
|
|
85
147
|
export function isAdvancedFeaturesAvailable(forceRefresh = false) {
|
|
86
148
|
const { build } = getNotePlanVersion(forceRefresh);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAQ7B,iFAAiF;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,wDAAwD;AACxD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,IAAI,aAAa,GAA2B,IAAI,CAAC;AACjD,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,SAAS,oBAAoB;IAC3B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|