@noteplanco/noteplan-mcp 1.1.23 → 1.1.25
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 +7 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/noteplan/attachments-paths.d.ts +13 -0
- package/dist/noteplan/attachments-paths.d.ts.map +1 -0
- package/dist/noteplan/attachments-paths.js +27 -0
- package/dist/noteplan/attachments-paths.js.map +1 -0
- package/dist/noteplan/embeddings.js +1 -1
- package/dist/noteplan/embeddings.js.map +1 -1
- package/dist/noteplan/file-reader.d.ts +37 -46
- package/dist/noteplan/file-reader.d.ts.map +1 -1
- package/dist/noteplan/file-reader.js +200 -202
- package/dist/noteplan/file-reader.js.map +1 -1
- package/dist/noteplan/file-reader.test.d.ts +2 -0
- package/dist/noteplan/file-reader.test.d.ts.map +1 -0
- package/dist/noteplan/file-reader.test.js +67 -0
- package/dist/noteplan/file-reader.test.js.map +1 -0
- package/dist/noteplan/file-writer.d.ts +35 -31
- package/dist/noteplan/file-writer.d.ts.map +1 -1
- package/dist/noteplan/file-writer.js +280 -164
- package/dist/noteplan/file-writer.js.map +1 -1
- package/dist/noteplan/file-writer.test.js +704 -191
- package/dist/noteplan/file-writer.test.js.map +1 -1
- package/dist/noteplan/filter-store.d.ts +5 -5
- package/dist/noteplan/filter-store.d.ts.map +1 -1
- package/dist/noteplan/filter-store.js +94 -79
- package/dist/noteplan/filter-store.js.map +1 -1
- package/dist/noteplan/ripgrep-search.d.ts +25 -2
- package/dist/noteplan/ripgrep-search.d.ts.map +1 -1
- package/dist/noteplan/ripgrep-search.js +75 -2
- package/dist/noteplan/ripgrep-search.js.map +1 -1
- package/dist/noteplan/space-row-utils.d.ts +20 -0
- package/dist/noteplan/space-row-utils.d.ts.map +1 -0
- package/dist/noteplan/space-row-utils.js +78 -0
- package/dist/noteplan/space-row-utils.js.map +1 -0
- package/dist/noteplan/space-row-utils.test.d.ts +2 -0
- package/dist/noteplan/space-row-utils.test.d.ts.map +1 -0
- package/dist/noteplan/space-row-utils.test.js +123 -0
- package/dist/noteplan/space-row-utils.test.js.map +1 -0
- package/dist/noteplan/sqlite-reader.d.ts +12 -27
- package/dist/noteplan/sqlite-reader.d.ts.map +1 -1
- package/dist/noteplan/sqlite-reader.js +315 -221
- package/dist/noteplan/sqlite-reader.js.map +1 -1
- package/dist/noteplan/sqlite-writer.d.ts +1 -1
- package/dist/noteplan/sqlite-writer.d.ts.map +1 -1
- package/dist/noteplan/sqlite-writer.js +2 -2
- package/dist/noteplan/sqlite-writer.js.map +1 -1
- package/dist/noteplan/unified-store.d.ts +41 -30
- package/dist/noteplan/unified-store.d.ts.map +1 -1
- package/dist/noteplan/unified-store.js +257 -159
- package/dist/noteplan/unified-store.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +142 -61
- package/dist/server.js.map +1 -1
- package/dist/tools/attachments.d.ts +9 -9
- package/dist/tools/attachments.d.ts.map +1 -1
- package/dist/tools/attachments.js +74 -83
- package/dist/tools/attachments.js.map +1 -1
- package/dist/tools/attachments.test.js +170 -129
- package/dist/tools/attachments.test.js.map +1 -1
- package/dist/tools/calendar.d.ts +16 -13
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +17 -16
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/embeddings.d.ts +6 -6
- package/dist/tools/embeddings.d.ts.map +1 -1
- package/dist/tools/embeddings.js +6 -6
- package/dist/tools/embeddings.js.map +1 -1
- package/dist/tools/events.d.ts +7 -3
- package/dist/tools/events.d.ts.map +1 -1
- package/dist/tools/events.js +51 -16
- package/dist/tools/events.js.map +1 -1
- package/dist/tools/filters.d.ts +28 -33
- package/dist/tools/filters.d.ts.map +1 -1
- package/dist/tools/filters.js +42 -105
- package/dist/tools/filters.js.map +1 -1
- package/dist/tools/notes.d.ts +80 -218
- package/dist/tools/notes.d.ts.map +1 -1
- package/dist/tools/notes.js +180 -177
- package/dist/tools/notes.js.map +1 -1
- package/dist/tools/notes.test.js +242 -21
- package/dist/tools/notes.test.js.map +1 -1
- package/dist/tools/search.d.ts +4 -3
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +9 -5
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/search.test.d.ts +2 -0
- package/dist/tools/search.test.d.ts.map +1 -0
- package/dist/tools/search.test.js +37 -0
- package/dist/tools/search.test.js.map +1 -0
- package/dist/tools/spaces.d.ts +20 -20
- package/dist/tools/spaces.d.ts.map +1 -1
- package/dist/tools/spaces.js +28 -28
- package/dist/tools/spaces.js.map +1 -1
- package/dist/tools/tasks.d.ts +22 -22
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +22 -22
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/templates.d.ts +7 -7
- package/dist/tools/templates.d.ts.map +1 -1
- package/dist/tools/templates.js +4 -4
- package/dist/tools/templates.js.map +1 -1
- package/dist/tools/themes.d.ts.map +1 -1
- package/dist/tools/themes.js +26 -35
- package/dist/tools/themes.js.map +1 -1
- package/dist/transport/bridge-availability.d.ts +5 -0
- package/dist/transport/bridge-availability.d.ts.map +1 -0
- package/dist/transport/bridge-availability.js +92 -0
- package/dist/transport/bridge-availability.js.map +1 -0
- package/dist/transport/bridge-cascade.d.ts +18 -0
- package/dist/transport/bridge-cascade.d.ts.map +1 -0
- package/dist/transport/bridge-cascade.js +78 -0
- package/dist/transport/bridge-cascade.js.map +1 -0
- package/dist/transport/bridge-cascade.test.d.ts +2 -0
- package/dist/transport/bridge-cascade.test.d.ts.map +1 -0
- package/dist/transport/bridge-cascade.test.js +160 -0
- package/dist/transport/bridge-cascade.test.js.map +1 -0
- package/dist/transport/bridge-client.d.ts +197 -0
- package/dist/transport/bridge-client.d.ts.map +1 -0
- package/dist/transport/bridge-client.js +288 -0
- package/dist/transport/bridge-client.js.map +1 -0
- package/dist/transport/bridge-client.test.d.ts +2 -0
- package/dist/transport/bridge-client.test.d.ts.map +1 -0
- package/dist/transport/bridge-client.test.js +384 -0
- package/dist/transport/bridge-client.test.js.map +1 -0
- package/dist/transport/bridge-context.d.ts +10 -0
- package/dist/transport/bridge-context.d.ts.map +1 -0
- package/dist/transport/bridge-context.js +18 -0
- package/dist/transport/bridge-context.js.map +1 -0
- package/dist/transport/bridge-fs.d.ts +25 -0
- package/dist/transport/bridge-fs.d.ts.map +1 -0
- package/dist/transport/bridge-fs.js +129 -0
- package/dist/transport/bridge-fs.js.map +1 -0
- package/dist/utils/date-utils.d.ts +24 -0
- package/dist/utils/date-utils.d.ts.map +1 -1
- package/dist/utils/date-utils.js +55 -0
- package/dist/utils/date-utils.js.map +1 -1
- package/dist/utils/date-utils.test.d.ts +2 -0
- package/dist/utils/date-utils.test.d.ts.map +1 -0
- package/dist/utils/date-utils.test.js +109 -0
- package/dist/utils/date-utils.test.js.map +1 -0
- package/dist/utils/folder-access.d.ts +23 -0
- package/dist/utils/folder-access.d.ts.map +1 -0
- package/dist/utils/folder-access.js +131 -0
- package/dist/utils/folder-access.js.map +1 -0
- package/dist/utils/folder-access.test.d.ts +2 -0
- package/dist/utils/folder-access.test.d.ts.map +1 -0
- package/dist/utils/folder-access.test.js +182 -0
- package/dist/utils/folder-access.test.js.map +1 -0
- package/dist/utils/folder-matcher.d.ts.map +1 -1
- package/dist/utils/folder-matcher.js +16 -0
- package/dist/utils/folder-matcher.js.map +1 -1
- package/dist/utils/folder-matcher.test.js +42 -0
- package/dist/utils/folder-matcher.test.js.map +1 -1
- package/dist/utils/server-config.d.ts +10 -2
- package/dist/utils/server-config.d.ts.map +1 -1
- package/dist/utils/server-config.js +16 -2
- package/dist/utils/server-config.js.map +1 -1
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +5 -1
- package/dist/utils/version.js.map +1 -1
- package/package.json +4 -3
- package/scripts/calendar-helper +0 -0
- package/scripts/reminders-helper +0 -0
package/dist/tools/themes.js
CHANGED
|
@@ -45,7 +45,7 @@ const VALID_STYLE_PROPERTIES = [
|
|
|
45
45
|
'type', 'kern', 'headIndent', 'firstLineHeadIndent',
|
|
46
46
|
'lineSpacing', 'paragraphSpacing', 'paragraphSpacingBefore',
|
|
47
47
|
'underlineStyle', 'underlineColor', 'strikethroughStyle', 'strikethroughColor',
|
|
48
|
-
'leadingBorder', 'borderRadius', 'horizontalMargin',
|
|
48
|
+
'leadingBorder', 'leadingBorderColor', 'borderRadius', 'horizontalMargin',
|
|
49
49
|
'leftBorderPadding', 'rightBorderPadding', 'isFullWidthBorder', 'inlineBorder',
|
|
50
50
|
'regex', 'matchPosition',
|
|
51
51
|
];
|
|
@@ -90,18 +90,13 @@ function readDefaults(key) {
|
|
|
90
90
|
function isPathTraversal(filename) {
|
|
91
91
|
return filename.includes('..') || filename.includes('/') || filename.includes('\\');
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
else {
|
|
101
|
-
stripped.push(key);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return { cleaned, stripped };
|
|
93
|
+
/** List keys not present in the whitelist. Informational only — we no longer
|
|
94
|
+
* strip unknown keys: NotePlan owns the theme schema (which evolves), and
|
|
95
|
+
* user themes legitimately add custom regex highlighters with arbitrary
|
|
96
|
+
* names and properties (isRevealOnCursorRange, isMarkdownCharacter, etc.).
|
|
97
|
+
* Stripping silently destroyed user customizations on every save/edit. */
|
|
98
|
+
function findUnknownKeys(obj, validKeys) {
|
|
99
|
+
return Object.keys(obj).filter((k) => !validKeys.includes(k));
|
|
105
100
|
}
|
|
106
101
|
// --- Implementations ---
|
|
107
102
|
export function listThemes(_args) {
|
|
@@ -175,31 +170,27 @@ export function saveTheme(args) {
|
|
|
175
170
|
if (!FILENAME_REGEX.test(filename)) {
|
|
176
171
|
return { success: false, error: 'Invalid filename: must contain only alphanumeric characters, dashes, underscores, dots, spaces, and end with .json' };
|
|
177
172
|
}
|
|
178
|
-
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
//
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
173
|
+
// Survey unknown keys for caller awareness (typo catcher) but keep them in
|
|
174
|
+
// the written file. The VALID_* lists below are an out-of-date subset of
|
|
175
|
+
// what NotePlan actually accepts, and user themes routinely use custom
|
|
176
|
+
// regex highlighters with arbitrary keys — stripping them silently
|
|
177
|
+
// destroyed user customizations on every save.
|
|
178
|
+
const editorInput = (theme.editor ?? {});
|
|
179
|
+
const stylesInput = (theme.styles ?? {});
|
|
180
|
+
const unknownKeys = [];
|
|
181
|
+
unknownKeys.push(...findUnknownKeys(editorInput, VALID_EDITOR_KEYS).map((k) => `editor.${k}`));
|
|
182
|
+
unknownKeys.push(...findUnknownKeys(stylesInput, VALID_STYLE_KEYS).map((k) => `styles.${k}`));
|
|
183
|
+
for (const [styleKey, styleValue] of Object.entries(stylesInput)) {
|
|
188
184
|
if (styleValue && typeof styleValue === 'object' && !Array.isArray(styleValue)) {
|
|
189
|
-
|
|
190
|
-
allStrippedKeys.push(...propResult.stripped.map(p => `styles.${styleKey}.${p}`));
|
|
191
|
-
cleanedStyles[styleKey] = propResult.cleaned;
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
cleanedStyles[styleKey] = styleValue;
|
|
185
|
+
unknownKeys.push(...findUnknownKeys(styleValue, VALID_STYLE_PROPERTIES).map((p) => `styles.${styleKey}.${p}`));
|
|
195
186
|
}
|
|
196
187
|
}
|
|
197
|
-
// Build the final theme object
|
|
188
|
+
// Build the final theme object — pass editor and styles through verbatim.
|
|
198
189
|
const finalTheme = {
|
|
199
190
|
name: theme.name,
|
|
200
191
|
style: theme.style,
|
|
201
|
-
editor:
|
|
202
|
-
styles:
|
|
192
|
+
editor: editorInput,
|
|
193
|
+
styles: stylesInput,
|
|
203
194
|
};
|
|
204
195
|
if (theme.author) {
|
|
205
196
|
finalTheme.author = theme.author;
|
|
@@ -221,7 +212,7 @@ export function saveTheme(args) {
|
|
|
221
212
|
return {
|
|
222
213
|
success: true,
|
|
223
214
|
filename,
|
|
224
|
-
|
|
215
|
+
unknownKeys: unknownKeys.length > 0 ? unknownKeys : undefined,
|
|
225
216
|
message: `Theme saved to ${filename} but failed to activate: ${err.message}`,
|
|
226
217
|
};
|
|
227
218
|
}
|
|
@@ -238,7 +229,7 @@ export function saveTheme(args) {
|
|
|
238
229
|
success: true,
|
|
239
230
|
filename,
|
|
240
231
|
activatedForMode: mode,
|
|
241
|
-
|
|
232
|
+
unknownKeys: unknownKeys.length > 0 ? unknownKeys : undefined,
|
|
242
233
|
message: `Theme saved and activated: ${filename}`,
|
|
243
234
|
...(modeHint ? { hint: modeHint } : {}),
|
|
244
235
|
};
|
|
@@ -246,7 +237,7 @@ export function saveTheme(args) {
|
|
|
246
237
|
return {
|
|
247
238
|
success: true,
|
|
248
239
|
filename,
|
|
249
|
-
|
|
240
|
+
unknownKeys: unknownKeys.length > 0 ? unknownKeys : undefined,
|
|
250
241
|
message: `Theme saved: ${filename}`,
|
|
251
242
|
};
|
|
252
243
|
}
|
package/dist/tools/themes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BridgeClient } from './bridge-client.js';
|
|
2
|
+
export declare function getBridgeClient(): Promise<BridgeClient | null>;
|
|
3
|
+
/** Drop the cached client — next call will rediscover. Use after a failed request. */
|
|
4
|
+
export declare function invalidateBridgeClient(): void;
|
|
5
|
+
//# sourceMappingURL=bridge-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-availability.d.ts","sourceRoot":"","sources":["../../src/transport/bridge-availability.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAgBpE;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { runAppleScript } from '../utils/applescript.js';
|
|
2
|
+
import { shouldAutoLaunchNotePlan } from '../utils/server-config.js';
|
|
3
|
+
import { APPLESCRIPT_APP_NAMES, MIN_BUILD_BRIDGE, getDetectedAppName, getNotePlanVersion, } from '../utils/version.js';
|
|
4
|
+
import { BridgeClient } from './bridge-client.js';
|
|
5
|
+
const POSITIVE_TTL_MS = 60_000;
|
|
6
|
+
const NEGATIVE_TTL_MS = 5_000;
|
|
7
|
+
let cachedClient = null;
|
|
8
|
+
let cacheExpiresAt = 0;
|
|
9
|
+
let inFlight = null;
|
|
10
|
+
export async function getBridgeClient() {
|
|
11
|
+
if (cacheExpiresAt > Date.now())
|
|
12
|
+
return cachedClient;
|
|
13
|
+
if (inFlight)
|
|
14
|
+
return inFlight;
|
|
15
|
+
inFlight = (async () => {
|
|
16
|
+
try {
|
|
17
|
+
const client = await discover();
|
|
18
|
+
cachedClient = client;
|
|
19
|
+
cacheExpiresAt = Date.now() + (client ? POSITIVE_TTL_MS : NEGATIVE_TTL_MS);
|
|
20
|
+
return client;
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
inFlight = null;
|
|
24
|
+
}
|
|
25
|
+
})();
|
|
26
|
+
return inFlight;
|
|
27
|
+
}
|
|
28
|
+
/** Drop the cached client — next call will rediscover. Use after a failed request. */
|
|
29
|
+
export function invalidateBridgeClient() {
|
|
30
|
+
cachedClient = null;
|
|
31
|
+
cacheExpiresAt = 0;
|
|
32
|
+
}
|
|
33
|
+
async function discover() {
|
|
34
|
+
const { build } = getNotePlanVersion();
|
|
35
|
+
if (build > 0 && build < MIN_BUILD_BRIDGE)
|
|
36
|
+
return null;
|
|
37
|
+
const info = queryBridgeInfo();
|
|
38
|
+
if (!info)
|
|
39
|
+
return null;
|
|
40
|
+
const client = new BridgeClient(info.port, info.token, {
|
|
41
|
+
onFailure: invalidateBridgeClient,
|
|
42
|
+
});
|
|
43
|
+
if (!(await client.health()))
|
|
44
|
+
return null;
|
|
45
|
+
return client;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Try the already-detected app name first (cached during version detection)
|
|
49
|
+
* to avoid up-to-4 sequential 5-second timeouts on the common case. Falls
|
|
50
|
+
* back to iterating remaining names if the detected one doesn't match.
|
|
51
|
+
*/
|
|
52
|
+
function queryBridgeInfo() {
|
|
53
|
+
const detected = getDetectedAppName();
|
|
54
|
+
const ordered = [detected, ...APPLESCRIPT_APP_NAMES.filter((n) => n !== detected)];
|
|
55
|
+
// Default: a bare `tell application "X" to …` auto-launches X on macOS,
|
|
56
|
+
// which is desirable here because routing through NotePlan sidesteps the
|
|
57
|
+
// Files & Folders (TCC) prompts users would otherwise face from direct
|
|
58
|
+
// container access. Set NOTEPLAN_MCP_AUTOLAUNCH=false to opt out, in which
|
|
59
|
+
// case the `is running` wrapper keeps the probe passive.
|
|
60
|
+
const autoLaunch = shouldAutoLaunchNotePlan();
|
|
61
|
+
for (const appName of ordered) {
|
|
62
|
+
let raw;
|
|
63
|
+
try {
|
|
64
|
+
const script = autoLaunch
|
|
65
|
+
? `tell application "${appName}" to getMCPBridgeInfo`
|
|
66
|
+
: `if application "${appName}" is running then\n` +
|
|
67
|
+
` tell application "${appName}" to getMCPBridgeInfo\n` +
|
|
68
|
+
`end if`;
|
|
69
|
+
raw = runAppleScript(script, 5_000);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!raw)
|
|
75
|
+
continue;
|
|
76
|
+
try {
|
|
77
|
+
const parsed = JSON.parse(raw);
|
|
78
|
+
if (parsed &&
|
|
79
|
+
typeof parsed.port === 'number' &&
|
|
80
|
+
parsed.port > 0 &&
|
|
81
|
+
typeof parsed.token === 'string' &&
|
|
82
|
+
parsed.token.length > 0) {
|
|
83
|
+
return { port: parsed.port, token: parsed.token };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Not JSON — wrong app or stale response. Try next name.
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=bridge-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-availability.js","sourceRoot":"","sources":["../../src/transport/bridge-availability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type BridgeClient } from './bridge-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run `bridgeOp` against the live bridge when one is available; otherwise
|
|
4
|
+
* fall through to `fallback`.
|
|
5
|
+
*
|
|
6
|
+
* Note: `bridgeOp` resolving with `undefined` is treated as "success",
|
|
7
|
+
* not "fall back" — throw to fall back.
|
|
8
|
+
*
|
|
9
|
+
* Error policy:
|
|
10
|
+
* - 4xx HTTP from bridge → propagate (bridge is healthy, the request is
|
|
11
|
+
* invalid; running the fallback would mask the real error).
|
|
12
|
+
* - 5xx / malformed JSON / empty body / timeout / connection refused
|
|
13
|
+
* → silently fall back (transport problem, not a logic error).
|
|
14
|
+
* - Any other thrown error from `bridgeOp` → propagate (it's a logical
|
|
15
|
+
* error the caller turned into an exception).
|
|
16
|
+
*/
|
|
17
|
+
export declare function bridgeOrFallback<T>(bridgeOp: (client: BridgeClient) => Promise<T>, fallback: () => Promise<T> | T): Promise<T>;
|
|
18
|
+
//# sourceMappingURL=bridge-cascade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-cascade.d.ts","sourceRoot":"","sources":["../../src/transport/bridge-cascade.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGxE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9C,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAoCZ"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getBridgeClient } from './bridge-availability.js';
|
|
2
|
+
import { BridgeHttpError } from './bridge-client.js';
|
|
3
|
+
import { recordBackend } from './bridge-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* Run `bridgeOp` against the live bridge when one is available; otherwise
|
|
6
|
+
* fall through to `fallback`.
|
|
7
|
+
*
|
|
8
|
+
* Note: `bridgeOp` resolving with `undefined` is treated as "success",
|
|
9
|
+
* not "fall back" — throw to fall back.
|
|
10
|
+
*
|
|
11
|
+
* Error policy:
|
|
12
|
+
* - 4xx HTTP from bridge → propagate (bridge is healthy, the request is
|
|
13
|
+
* invalid; running the fallback would mask the real error).
|
|
14
|
+
* - 5xx / malformed JSON / empty body / timeout / connection refused
|
|
15
|
+
* → silently fall back (transport problem, not a logic error).
|
|
16
|
+
* - Any other thrown error from `bridgeOp` → propagate (it's a logical
|
|
17
|
+
* error the caller turned into an exception).
|
|
18
|
+
*/
|
|
19
|
+
export async function bridgeOrFallback(bridgeOp, fallback) {
|
|
20
|
+
let client = null;
|
|
21
|
+
try {
|
|
22
|
+
client = await getBridgeClient();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Defensive: getBridgeClient should never throw, but if discovery
|
|
26
|
+
// raises a previously-unseen exception, fall back rather than fail.
|
|
27
|
+
}
|
|
28
|
+
if (client) {
|
|
29
|
+
try {
|
|
30
|
+
const result = await bridgeOp(client);
|
|
31
|
+
recordBackend('bridge');
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof BridgeHttpError) {
|
|
36
|
+
if (err.isClientError) {
|
|
37
|
+
// 4xx counts as bridge-served — the bridge processed the request
|
|
38
|
+
// and rejected it; the fallback would mask the real error.
|
|
39
|
+
recordBackend('bridge');
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
// 5xx / malformed JSON / empty body — fall through. Log so support
|
|
43
|
+
// diagnosing a TCC-prompt report can see why bridge was skipped.
|
|
44
|
+
console.error(`[noteplan-mcp] bridge op failed (${err.status}); falling back: ${truncate(err.message, 200)}`);
|
|
45
|
+
}
|
|
46
|
+
else if (isTransportError(err)) {
|
|
47
|
+
// ECONNREFUSED / ECONNRESET / ETIMEDOUT / ENOTFOUND / EHOSTUNREACH
|
|
48
|
+
// — bridge crashed or port changed; let the fallback have it.
|
|
49
|
+
const code = err.code;
|
|
50
|
+
console.error(`[noteplan-mcp] bridge unreachable (${code}); falling back`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
recordBackend('fallback');
|
|
58
|
+
return fallback();
|
|
59
|
+
}
|
|
60
|
+
const TRANSPORT_ERROR_CODES = new Set([
|
|
61
|
+
'ECONNREFUSED',
|
|
62
|
+
'ECONNRESET',
|
|
63
|
+
'ETIMEDOUT',
|
|
64
|
+
'ENOTFOUND',
|
|
65
|
+
'EHOSTUNREACH',
|
|
66
|
+
'ENETUNREACH',
|
|
67
|
+
'EPIPE',
|
|
68
|
+
]);
|
|
69
|
+
function isTransportError(err) {
|
|
70
|
+
if (typeof err !== 'object' || err === null)
|
|
71
|
+
return false;
|
|
72
|
+
const code = err.code;
|
|
73
|
+
return typeof code === 'string' && TRANSPORT_ERROR_CODES.has(code);
|
|
74
|
+
}
|
|
75
|
+
function truncate(s, max) {
|
|
76
|
+
return s.length > max ? `${s.slice(0, max)}…` : s;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=bridge-cascade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-cascade.js","sourceRoot":"","sources":["../../src/transport/bridge-cascade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA8C,EAC9C,QAA8B;IAE9B,IAAI,MAAM,GAAwB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;QAClE,oEAAoE;IACtE,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;oBACtB,iEAAiE;oBACjE,2DAA2D;oBAC3D,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,mEAAmE;gBACnE,iEAAiE;gBACjE,OAAO,CAAC,KAAK,CAAC,oCAAoC,GAAG,CAAC,MAAM,oBAAoB,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChH,CAAC;iBAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,mEAAmE;gBACnE,8DAA8D;gBAC9D,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,iBAAiB,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,cAAc;IACd,YAAY;IACZ,WAAW;IACX,WAAW;IACX,cAAc;IACd,aAAa;IACb,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;IACjD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-cascade.test.d.ts","sourceRoot":"","sources":["../../src/transport/bridge-cascade.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { BridgeHttpError } from './bridge-client.js';
|
|
3
|
+
// Mock bridge-availability so each test controls what `getBridgeClient`
|
|
4
|
+
// returns. The cascade helper imports it via dynamic resolution; vi.mock
|
|
5
|
+
// hoists above the import below.
|
|
6
|
+
vi.mock('./bridge-availability.js', () => ({
|
|
7
|
+
getBridgeClient: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
import { bridgeOrFallback } from './bridge-cascade.js';
|
|
10
|
+
import { getBridgeClient } from './bridge-availability.js';
|
|
11
|
+
const mockedGetBridgeClient = vi.mocked(getBridgeClient);
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
mockedGetBridgeClient.mockReset();
|
|
14
|
+
});
|
|
15
|
+
// A minimal stand-in for BridgeClient. The cascade only ever passes it
|
|
16
|
+
// to the caller's bridgeOp, which we control in each test.
|
|
17
|
+
const fakeClient = {};
|
|
18
|
+
function transportError(code) {
|
|
19
|
+
return Object.assign(new Error(code), { code });
|
|
20
|
+
}
|
|
21
|
+
describe('bridgeOrFallback', () => {
|
|
22
|
+
describe('happy path', () => {
|
|
23
|
+
it('returns the bridge result when the bridge succeeds', async () => {
|
|
24
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
25
|
+
const result = await bridgeOrFallback(async () => 'from-bridge', () => 'from-fallback');
|
|
26
|
+
expect(result).toBe('from-bridge');
|
|
27
|
+
});
|
|
28
|
+
it('treats a bridgeOp resolving with `null` as success (not fall through)', async () => {
|
|
29
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
30
|
+
const fallback = vi.fn(() => 'fallback-was-called');
|
|
31
|
+
const result = await bridgeOrFallback(async () => null, fallback);
|
|
32
|
+
expect(result).toBeNull();
|
|
33
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
34
|
+
});
|
|
35
|
+
it('treats a bridgeOp resolving with `undefined` as success (not fall through)', async () => {
|
|
36
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
37
|
+
const fallback = vi.fn(() => 'fallback-was-called');
|
|
38
|
+
const result = await bridgeOrFallback(async () => undefined, fallback);
|
|
39
|
+
expect(result).toBeUndefined();
|
|
40
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('no bridge available', () => {
|
|
44
|
+
it('runs the fallback when getBridgeClient resolves null', async () => {
|
|
45
|
+
mockedGetBridgeClient.mockResolvedValue(null);
|
|
46
|
+
const result = await bridgeOrFallback(async () => 'from-bridge', () => 'from-fallback');
|
|
47
|
+
expect(result).toBe('from-fallback');
|
|
48
|
+
});
|
|
49
|
+
it('runs the fallback even when getBridgeClient itself throws', async () => {
|
|
50
|
+
mockedGetBridgeClient.mockRejectedValue(new Error('discovery exploded'));
|
|
51
|
+
const result = await bridgeOrFallback(async () => 'from-bridge', () => 'from-fallback');
|
|
52
|
+
expect(result).toBe('from-fallback');
|
|
53
|
+
});
|
|
54
|
+
it('supports a sync fallback', async () => {
|
|
55
|
+
mockedGetBridgeClient.mockResolvedValue(null);
|
|
56
|
+
const result = await bridgeOrFallback(async () => 'from-bridge', () => 'sync-fallback');
|
|
57
|
+
expect(result).toBe('sync-fallback');
|
|
58
|
+
});
|
|
59
|
+
it('supports an async fallback', async () => {
|
|
60
|
+
mockedGetBridgeClient.mockResolvedValue(null);
|
|
61
|
+
const result = await bridgeOrFallback(async () => 'from-bridge', async () => 'async-fallback');
|
|
62
|
+
expect(result).toBe('async-fallback');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('error policy', () => {
|
|
66
|
+
it('propagates a 4xx BridgeHttpError WITHOUT calling the fallback', async () => {
|
|
67
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
68
|
+
const fallback = vi.fn();
|
|
69
|
+
await expect(bridgeOrFallback(async () => {
|
|
70
|
+
throw new BridgeHttpError('bad request', 400);
|
|
71
|
+
}, fallback)).rejects.toBeInstanceOf(BridgeHttpError);
|
|
72
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
73
|
+
});
|
|
74
|
+
it('propagates a 404 BridgeHttpError WITHOUT calling the fallback', async () => {
|
|
75
|
+
// 404 is the most common 4xx and the one callers usually special-case.
|
|
76
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
77
|
+
const fallback = vi.fn();
|
|
78
|
+
await expect(bridgeOrFallback(async () => {
|
|
79
|
+
throw new BridgeHttpError('not found', 404);
|
|
80
|
+
}, fallback)).rejects.toMatchObject({ status: 404 });
|
|
81
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
82
|
+
});
|
|
83
|
+
it('falls back on a 5xx BridgeHttpError', async () => {
|
|
84
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
85
|
+
const result = await bridgeOrFallback(async () => {
|
|
86
|
+
throw new BridgeHttpError('server error', 500);
|
|
87
|
+
}, () => 'fallback');
|
|
88
|
+
expect(result).toBe('fallback');
|
|
89
|
+
});
|
|
90
|
+
it('falls back on ECONNREFUSED (bridge crashed or port changed)', async () => {
|
|
91
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
92
|
+
const result = await bridgeOrFallback(async () => {
|
|
93
|
+
throw transportError('ECONNREFUSED');
|
|
94
|
+
}, () => 'fallback');
|
|
95
|
+
expect(result).toBe('fallback');
|
|
96
|
+
});
|
|
97
|
+
it('falls back on ETIMEDOUT', async () => {
|
|
98
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
99
|
+
const result = await bridgeOrFallback(async () => {
|
|
100
|
+
throw transportError('ETIMEDOUT');
|
|
101
|
+
}, () => 'fallback');
|
|
102
|
+
expect(result).toBe('fallback');
|
|
103
|
+
});
|
|
104
|
+
it('falls back on ECONNRESET / ENOTFOUND / EHOSTUNREACH', async () => {
|
|
105
|
+
for (const code of ['ECONNRESET', 'ENOTFOUND', 'EHOSTUNREACH', 'ENETUNREACH', 'EPIPE']) {
|
|
106
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
107
|
+
const result = await bridgeOrFallback(async () => {
|
|
108
|
+
throw transportError(code);
|
|
109
|
+
}, () => `fallback-after-${code}`);
|
|
110
|
+
expect(result).toBe(`fallback-after-${code}`);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
it('PROPAGATES non-BridgeHttpError, non-transport errors thrown by bridgeOp', async () => {
|
|
114
|
+
// E.g. caller throws `new Error("Filter already exists")` after seeing a 409.
|
|
115
|
+
// That's a logical error, not a transport problem — the fallback would mask it.
|
|
116
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
117
|
+
const fallback = vi.fn();
|
|
118
|
+
await expect(bridgeOrFallback(async () => {
|
|
119
|
+
throw new Error('Filter already exists');
|
|
120
|
+
}, fallback)).rejects.toThrow('Filter already exists');
|
|
121
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
122
|
+
});
|
|
123
|
+
it('PROPAGATES TypeError thrown inside bridgeOp', async () => {
|
|
124
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
125
|
+
const fallback = vi.fn();
|
|
126
|
+
await expect(bridgeOrFallback(async () => {
|
|
127
|
+
throw new TypeError('cannot read property of undefined');
|
|
128
|
+
}, fallback)).rejects.toBeInstanceOf(TypeError);
|
|
129
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('integration with BridgeHttpError.isClientError', () => {
|
|
133
|
+
it.each([
|
|
134
|
+
[400, true],
|
|
135
|
+
[401, true],
|
|
136
|
+
[404, true],
|
|
137
|
+
[409, true],
|
|
138
|
+
[499, true],
|
|
139
|
+
[500, false],
|
|
140
|
+
[502, false],
|
|
141
|
+
[503, false],
|
|
142
|
+
])('status %i → propagates=%s', async (status, shouldPropagate) => {
|
|
143
|
+
mockedGetBridgeClient.mockResolvedValue(fakeClient);
|
|
144
|
+
const fallback = vi.fn(() => 'fallback');
|
|
145
|
+
const op = async () => {
|
|
146
|
+
throw new BridgeHttpError(`status ${status}`, status);
|
|
147
|
+
};
|
|
148
|
+
if (shouldPropagate) {
|
|
149
|
+
await expect(bridgeOrFallback(op, fallback)).rejects.toMatchObject({ status });
|
|
150
|
+
expect(fallback).not.toHaveBeenCalled();
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
const result = await bridgeOrFallback(op, fallback);
|
|
154
|
+
expect(result).toBe('fallback');
|
|
155
|
+
expect(fallback).toHaveBeenCalledOnce();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
//# sourceMappingURL=bridge-cascade.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-cascade.test.js","sourceRoot":"","sources":["../../src/transport/bridge-cascade.test.ts"],"names":[],"mappings":"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"}
|