@mnemonik/shared 7.100.0 → 7.101.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/dist/hostAdapter.d.ts +3 -0
- package/dist/hostAdapter.d.ts.map +1 -1
- package/dist/hostAdapter.js +85 -60
- package/dist/hostAdapter.js.map +1 -1
- package/dist/readiness.d.ts +1 -1
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +1 -5
- package/dist/readiness.js.map +1 -1
- package/dist/runtimeSigners.d.ts +3 -0
- package/dist/runtimeSigners.d.ts.map +1 -1
- package/dist/runtimeSigners.js +11 -6
- package/dist/runtimeSigners.js.map +1 -1
- package/dist/testing/hostAdapterConformance.d.ts.map +1 -1
- package/dist/testing/hostAdapterConformance.js +55 -48
- package/dist/testing/hostAdapterConformance.js.map +1 -1
- package/package.json +1 -1
- package/src/hostAdapter.ts +110 -73
- package/src/readiness.ts +1 -8
- package/src/runtimeSigners.ts +18 -6
- package/src/testing/hostAdapterConformance.ts +62 -53
- package/tests/readiness.test.ts +1 -2
|
@@ -40,6 +40,7 @@ export function hostAdapterConformance(create, options) {
|
|
|
40
40
|
runtimeRoot,
|
|
41
41
|
credentialFamily: 'hook-family',
|
|
42
42
|
runtimeEntry: join(runtimeRoot, '1.0.0', 'dist', 'hook.js'),
|
|
43
|
+
installationId: '11111111-1111-4111-8111-111111111111',
|
|
43
44
|
};
|
|
44
45
|
const deps = {
|
|
45
46
|
target,
|
|
@@ -339,52 +340,9 @@ export function hostAdapterConformance(create, options) {
|
|
|
339
340
|
await writeChanges((await adapter.plan(projectTarget)).changes);
|
|
340
341
|
assert.deepEqual(await readFile(configPath('user')), before);
|
|
341
342
|
});
|
|
342
|
-
check('parses connected listings without inferring account and uses execFile arguments', async ({ deps, project, target }) => {
|
|
343
|
-
let stdout = 'mnemonik: https://api.mnemonik.dev/mcp - ✔ Connected\n';
|
|
344
|
-
const calls = [];
|
|
345
|
-
const host = create({
|
|
346
|
-
...deps,
|
|
347
|
-
target: { ...target, component: 'mcp' },
|
|
348
|
-
execFile: async (...args) => {
|
|
349
|
-
if (args[1][0] === '--version')
|
|
350
|
-
return { stdout: versionOutput, stderr: '' };
|
|
351
|
-
calls.push(args);
|
|
352
|
-
return { stdout, stderr: '' };
|
|
353
|
-
},
|
|
354
|
-
});
|
|
355
|
-
const inspection = await host.verify();
|
|
356
|
-
if (options.name === 'cursor') {
|
|
357
|
-
assert.equal(inspection.authenticatedTools, false);
|
|
358
|
-
assert.equal(inspection.grant, undefined);
|
|
359
|
-
assert.deepEqual(calls, []);
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
assert.equal(inspection.authenticatedTools, true);
|
|
363
|
-
assert.equal(inspection.grant, undefined);
|
|
364
|
-
assert.deepEqual(calls[0], [
|
|
365
|
-
options.name === 'claude-code'
|
|
366
|
-
? 'claude'
|
|
367
|
-
: options.name === 'cursor'
|
|
368
|
-
? 'agent'
|
|
369
|
-
: options.name,
|
|
370
|
-
['mcp', 'list'],
|
|
371
|
-
{ env: deps.env, cwd: project, timeout: 5000, maxBuffer: 64 * 1024, windowsHide: true },
|
|
372
|
-
]);
|
|
373
|
-
for (const listing of [
|
|
374
|
-
'mnemonik: not connected',
|
|
375
|
-
'foreign: ✔ Connected',
|
|
376
|
-
'mnemonik: enabled OAuth',
|
|
377
|
-
'mnemonik-foreign: Connected',
|
|
378
|
-
'mnemonik: warning: was previously connected',
|
|
379
|
-
'unrecognized format',
|
|
380
|
-
]) {
|
|
381
|
-
stdout = listing;
|
|
382
|
-
assert.equal((await host.verify()).authenticatedTools, false);
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
343
|
if (options.mcpConfig)
|
|
386
344
|
for (const scope of options.scopes)
|
|
387
|
-
check(`${scope}: MCP
|
|
345
|
+
check(`${scope}: MCP declaration has the correct machine header and preserves foreign fields`, async ({ root, project, deps, target: base }) => {
|
|
388
346
|
const target = { ...base, component: 'mcp', scope };
|
|
389
347
|
const adapter = create({ ...deps, target });
|
|
390
348
|
const config = options.mcpConfig;
|
|
@@ -402,11 +360,16 @@ export function hostAdapterConformance(create, options) {
|
|
|
402
360
|
const raw = plan.changes[0]?.content.toString();
|
|
403
361
|
assert.ok(raw);
|
|
404
362
|
assert.ok(raw.includes('https://api.mnemonik.dev/mcp'));
|
|
405
|
-
const sessionHeader =
|
|
406
|
-
const withoutSessionHeader = options.name === 'grok' && config.toml
|
|
363
|
+
const sessionHeader = /headers\s*=.*"x-mcp-session-id"\s*=\s*"\{\{session_id\}\}"/u;
|
|
364
|
+
const withoutSessionHeader = options.name === 'grok' && config.toml
|
|
365
|
+
? raw.replace(/,?\s*"x-mcp-session-id"\s*=\s*"\{\{session_id\}\}"/u, '')
|
|
366
|
+
: raw;
|
|
407
367
|
if (options.name === 'grok')
|
|
408
|
-
assert.
|
|
409
|
-
|
|
368
|
+
assert.match(raw, sessionHeader);
|
|
369
|
+
if (scope === 'user')
|
|
370
|
+
assert.match(withoutSessionHeader, /x-mnemonik-installation-id/);
|
|
371
|
+
else
|
|
372
|
+
assert.doesNotMatch(withoutSessionHeader, /x-mnemonik-installation-id/);
|
|
410
373
|
if (config.toml)
|
|
411
374
|
assert.ok(raw.startsWith(original));
|
|
412
375
|
else {
|
|
@@ -415,6 +378,13 @@ export function hostAdapterConformance(create, options) {
|
|
|
415
378
|
assert.deepEqual(parsed.mcpServers.mnemonik, {
|
|
416
379
|
...(config.type ? { type: config.type } : {}),
|
|
417
380
|
url: 'https://api.mnemonik.dev/mcp',
|
|
381
|
+
...(scope === 'user'
|
|
382
|
+
? {
|
|
383
|
+
headers: {
|
|
384
|
+
'x-mnemonik-installation-id': '11111111-1111-4111-8111-111111111111',
|
|
385
|
+
},
|
|
386
|
+
}
|
|
387
|
+
: {}),
|
|
418
388
|
});
|
|
419
389
|
}
|
|
420
390
|
const staged = [];
|
|
@@ -429,6 +399,43 @@ export function hostAdapterConformance(create, options) {
|
|
|
429
399
|
await writeChanges(staged);
|
|
430
400
|
assert.equal((await adapter.inspect()).declarationPresent, true);
|
|
431
401
|
assert.deepEqual((await adapter.plan()).changes, plan.changes);
|
|
402
|
+
if (scope === 'user') {
|
|
403
|
+
const installed = await readFile(path, 'utf8');
|
|
404
|
+
if (config.toml)
|
|
405
|
+
await writeFile(path, installed
|
|
406
|
+
.replace(/,?\s*"x-mnemonik-installation-id"\s*=\s*"[^"]*"/u, '')
|
|
407
|
+
.replace(/\{\s*,/u, '{')
|
|
408
|
+
.replace(/,\s*\}/u, ' }')
|
|
409
|
+
.replace('url = "https://api.mnemonik.dev/mcp"\n', 'url = "https://api.mnemonik.dev/mcp"\ncustom = "keep exactly"\n'));
|
|
410
|
+
else {
|
|
411
|
+
const missing = JSON.parse(installed);
|
|
412
|
+
missing.mcpServers.mnemonik.custom = 'keep exactly';
|
|
413
|
+
missing.mcpServers.mnemonik.headers['x-foreign'] = 'keep exactly';
|
|
414
|
+
delete missing.mcpServers.mnemonik.headers['x-mnemonik-installation-id'];
|
|
415
|
+
await writeFile(path, JSON.stringify(missing, null, 2) + '\n');
|
|
416
|
+
}
|
|
417
|
+
const missingHeader = await readFile(path, 'utf8');
|
|
418
|
+
staged.length = 0;
|
|
419
|
+
await adapter.repair(writer, target);
|
|
420
|
+
await writeChanges(staged);
|
|
421
|
+
const repaired = await readFile(path, 'utf8');
|
|
422
|
+
assert.match(repaired, /x-mnemonik-installation-id/);
|
|
423
|
+
assert.match(repaired, /keep exactly/);
|
|
424
|
+
if (options.name === 'grok')
|
|
425
|
+
assert.match(repaired, /x-mcp-session-id/);
|
|
426
|
+
if (config.toml) {
|
|
427
|
+
const withoutManagedHeader = repaired
|
|
428
|
+
.replace(/(?:,\s*)?(?:["']x-mnemonik-installation-id["']|x-mnemonik-installation-id)\s*=\s*["'][^"']*["']\s*,?/u, '')
|
|
429
|
+
.replace(/\{\s*,/u, '{')
|
|
430
|
+
.replace(/,\s*\}/u, ' }');
|
|
431
|
+
assert.equal(withoutManagedHeader, missingHeader);
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
const withoutManagedHeader = JSON.parse(repaired);
|
|
435
|
+
delete withoutManagedHeader.mcpServers.mnemonik.headers['x-mnemonik-installation-id'];
|
|
436
|
+
assert.equal(JSON.stringify(withoutManagedHeader, null, 2) + '\n', missingHeader);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
432
439
|
staged.length = 0;
|
|
433
440
|
await adapter.uninstall(writer, target);
|
|
434
441
|
await writeChanges(staged);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostAdapterConformance.js","sourceRoot":"","sources":["../../src/testing/hostAdapterConformance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hostAdapterConformance.js","sourceRoot":"","sources":["../../src/testing/hostAdapterConformance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/hostAdapter.ts
CHANGED
|
@@ -21,6 +21,8 @@ export interface Target {
|
|
|
21
21
|
runtimeRoot: string;
|
|
22
22
|
/** Non-secret hook component family recorded by the CLI installer. */
|
|
23
23
|
credentialFamily: string;
|
|
24
|
+
/** Machine identity written only to user-scope MCP declarations. */
|
|
25
|
+
installationId?: string;
|
|
24
26
|
/** Config paths known to have been absent before Mnemonik first wrote them. */
|
|
25
27
|
createdFiles?: string[];
|
|
26
28
|
/** Verified first-install config backups supplied by the ownership journal. */
|
|
@@ -123,7 +125,12 @@ export function createFileHostAdapter(
|
|
|
123
125
|
vendorMatch: RegExp;
|
|
124
126
|
instruction: string;
|
|
125
127
|
signedInInstruction?: string;
|
|
126
|
-
mcp?: {
|
|
128
|
+
mcp?: {
|
|
129
|
+
path(target: Target): string;
|
|
130
|
+
format: 'json' | 'toml';
|
|
131
|
+
type?: 'http';
|
|
132
|
+
headerKey?: 'headers' | 'http_headers';
|
|
133
|
+
};
|
|
127
134
|
nativeConnect?: boolean;
|
|
128
135
|
nativeListing?: boolean;
|
|
129
136
|
desktopPaths?: string[];
|
|
@@ -223,6 +230,12 @@ export function createFileHostAdapter(
|
|
|
223
230
|
throw error;
|
|
224
231
|
});
|
|
225
232
|
const url = `${apiOrigin(deps.env)}/mcp`;
|
|
233
|
+
const installationHeader =
|
|
234
|
+
target.scope === 'user' && target.installationId
|
|
235
|
+
? { 'x-mnemonik-installation-id': target.installationId }
|
|
236
|
+
: undefined;
|
|
237
|
+
if (install && target.scope === 'user' && !installationHeader)
|
|
238
|
+
throw new Error('installation_required');
|
|
226
239
|
let content: string;
|
|
227
240
|
if (host.mcp.format === 'json') {
|
|
228
241
|
const config = JSON.parse(raw || '{}');
|
|
@@ -239,18 +252,38 @@ export function createFileHostAdapter(
|
|
|
239
252
|
const servers = config.mcpServers ?? {};
|
|
240
253
|
const expected = { ...(host.mcp.type ? { type: host.mcp.type } : {}), url };
|
|
241
254
|
const current = servers.mnemonik;
|
|
242
|
-
const
|
|
255
|
+
const connected =
|
|
243
256
|
!!current &&
|
|
244
257
|
typeof current === 'object' &&
|
|
245
258
|
!Array.isArray(current) &&
|
|
246
|
-
Object.keys(current).length === Object.keys(expected).length &&
|
|
247
259
|
Object.entries(expected).every(([key, value]) => current[key] === value);
|
|
260
|
+
const currentHeaders =
|
|
261
|
+
connected &&
|
|
262
|
+
current.headers &&
|
|
263
|
+
typeof current.headers === 'object' &&
|
|
264
|
+
!Array.isArray(current.headers)
|
|
265
|
+
? current.headers
|
|
266
|
+
: {};
|
|
267
|
+
const exact =
|
|
268
|
+
connected &&
|
|
269
|
+
(installationHeader
|
|
270
|
+
? currentHeaders['x-mnemonik-installation-id'] === target.installationId
|
|
271
|
+
: !Object.hasOwn(currentHeaders, 'x-mnemonik-installation-id'));
|
|
248
272
|
if (install === undefined) return exact ? [{ path: file, content: Buffer.from(raw) }] : [];
|
|
249
273
|
if (!install && !Object.hasOwn(servers, 'mnemonik')) return [];
|
|
250
|
-
if (Object.hasOwn(servers, 'mnemonik') && !
|
|
274
|
+
if (Object.hasOwn(servers, 'mnemonik') && !connected && !ownedTarget)
|
|
251
275
|
throw new Error('mcp_name_conflict');
|
|
252
|
-
if (install)
|
|
253
|
-
|
|
276
|
+
if (install) {
|
|
277
|
+
const next = {
|
|
278
|
+
...(current && typeof current === 'object' && !Array.isArray(current) ? current : {}),
|
|
279
|
+
...expected,
|
|
280
|
+
};
|
|
281
|
+
const headers = { ...currentHeaders, ...installationHeader };
|
|
282
|
+
if (!installationHeader) delete headers['x-mnemonik-installation-id'];
|
|
283
|
+
if (Object.keys(headers).length) next.headers = headers;
|
|
284
|
+
else delete next.headers;
|
|
285
|
+
servers.mnemonik = next;
|
|
286
|
+
} else delete servers.mnemonik;
|
|
254
287
|
config.mcpServers = servers;
|
|
255
288
|
content = JSON.stringify(config, null, 2) + '\n';
|
|
256
289
|
} else {
|
|
@@ -268,25 +301,77 @@ export function createFileHostAdapter(
|
|
|
268
301
|
throw new Error('unsupported_mcp_toml_layout');
|
|
269
302
|
const table =
|
|
270
303
|
/^\s*\[\s*(?:mcp_servers|"mcp_servers"|'mcp_servers')\s*\.\s*(?:mnemonik|"mnemonik"|'mnemonik')(?:\s*\.[^\]]+)?\s*\]\s*(?:#.*)?$/;
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
304
|
+
const lines = raw.match(/[^\n]*\n|[^\n]+$/g) ?? [];
|
|
305
|
+
const start = lines.findIndex((line) => table.test(line.trimEnd()));
|
|
306
|
+
const end =
|
|
307
|
+
start < 0
|
|
308
|
+
? -1
|
|
309
|
+
: lines.findIndex((line, index) => index > start && /^\s*\[/.test(line.trimEnd()));
|
|
310
|
+
const stop = end < 0 ? lines.length : end;
|
|
311
|
+
const section = start < 0 ? [] : lines.slice(start, stop);
|
|
312
|
+
const urlIndex = section.findIndex((line) => /^\s*url\s*=/.test(line));
|
|
313
|
+
const connected =
|
|
314
|
+
urlIndex >= 0 &&
|
|
315
|
+
section[urlIndex]?.trimEnd().match(/^\s*url\s*=\s*["']([^"']+)["']\s*(?:#.*)?$/)?.[1] ===
|
|
316
|
+
url;
|
|
317
|
+
const headerKey = host.mcp.headerKey ?? 'http_headers';
|
|
318
|
+
const headerIndex = section.findIndex((line) =>
|
|
319
|
+
new RegExp(`^\\s*${headerKey}\\s*=`).test(line)
|
|
320
|
+
);
|
|
321
|
+
const installationPattern =
|
|
322
|
+
/(?:["']x-mnemonik-installation-id["']|x-mnemonik-installation-id)\s*=\s*["']([^"']*)["']/;
|
|
323
|
+
const installedId =
|
|
324
|
+
headerIndex >= 0 ? section[headerIndex]?.match(installationPattern)?.[1] : undefined;
|
|
325
|
+
const exact =
|
|
326
|
+
connected &&
|
|
327
|
+
(installationHeader ? installedId === target.installationId : installedId === undefined);
|
|
328
|
+
if (install === undefined) return exact ? [{ path: file, content: Buffer.from(raw) }] : [];
|
|
329
|
+
if (!install && start < 0) return [];
|
|
330
|
+
if (start >= 0 && !connected && !ownedTarget) throw new Error('mcp_name_conflict');
|
|
331
|
+
if (!install) content = [...lines.slice(0, start), ...lines.slice(stop)].join('');
|
|
332
|
+
else {
|
|
333
|
+
const next = start < 0 ? ['[mcp_servers.mnemonik]\n', `url = "${url}"\n`] : [...section];
|
|
334
|
+
const nextUrl = next.findIndex((line) => /^\s*url\s*=/.test(line));
|
|
335
|
+
if (nextUrl >= 0) next[nextUrl] = `url = "${url}"\n`;
|
|
336
|
+
const nextHeader = next.findIndex((line) =>
|
|
337
|
+
new RegExp(`^\\s*${headerKey}\\s*=`).test(line)
|
|
338
|
+
);
|
|
339
|
+
if (nextHeader >= 0) {
|
|
340
|
+
const line = next[nextHeader] ?? '';
|
|
341
|
+
if (!/^\s*\w+\s*=\s*\{.*\}\s*(?:#.*)?$/u.test(line.trimEnd()))
|
|
342
|
+
throw new Error('unsupported_mcp_toml_layout');
|
|
343
|
+
if (installationHeader) {
|
|
344
|
+
next[nextHeader] = installationPattern.test(line)
|
|
345
|
+
? line.replace(installationPattern, (pair) =>
|
|
346
|
+
pair.replace(/["']([^"']*)["']\s*$/u, JSON.stringify(target.installationId))
|
|
347
|
+
)
|
|
348
|
+
: line.replace(
|
|
349
|
+
/\}(\s*(?:#.*)?\r?\n?)$/u,
|
|
350
|
+
(suffix, ending) =>
|
|
351
|
+
`, "x-mnemonik-installation-id" = ${JSON.stringify(target.installationId)} }${ending}`
|
|
352
|
+
);
|
|
353
|
+
} else if (installationPattern.test(line)) {
|
|
354
|
+
next[nextHeader] = line
|
|
355
|
+
.replace(
|
|
356
|
+
/(?:,\s*)?(?:["']x-mnemonik-installation-id["']|x-mnemonik-installation-id)\s*=\s*["'][^"']*["']\s*,?/u,
|
|
357
|
+
''
|
|
358
|
+
)
|
|
359
|
+
.replace(/\{\s*,/u, '{')
|
|
360
|
+
.replace(/,\s*\}/u, ' }');
|
|
361
|
+
}
|
|
362
|
+
} else if (installationHeader) {
|
|
363
|
+
const insert = Math.max(1, next.findIndex((line) => /^\s*url\s*=/.test(line)) + 1);
|
|
364
|
+
next.splice(
|
|
365
|
+
insert,
|
|
366
|
+
0,
|
|
367
|
+
`${headerKey} = { "x-mnemonik-installation-id" = ${JSON.stringify(target.installationId)} }\n`
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
content =
|
|
371
|
+
start < 0
|
|
372
|
+
? `${raw}${raw && !raw.endsWith('\n') ? '\n' : ''}${next.join('')}`
|
|
373
|
+
: [...lines.slice(0, start), ...next, ...lines.slice(stop)].join('');
|
|
282
374
|
}
|
|
283
|
-
if (install === undefined)
|
|
284
|
-
return connected ? [{ path: file, content: Buffer.from(raw) }] : [];
|
|
285
|
-
if (!install && !found) return [];
|
|
286
|
-
if (found && !connected && !ownedTarget) throw new Error('mcp_name_conflict');
|
|
287
|
-
content = kept.join('');
|
|
288
|
-
if (install)
|
|
289
|
-
content += `${content && !content.endsWith('\n') ? '\n' : ''}[mcp_servers.mnemonik]\nurl = "${url}"\n`;
|
|
290
375
|
}
|
|
291
376
|
return [{ path: file, content: Buffer.from(content) }];
|
|
292
377
|
};
|
|
@@ -304,59 +389,11 @@ export function createFileHostAdapter(
|
|
|
304
389
|
(await present(other))
|
|
305
390
|
)
|
|
306
391
|
otherScopes.push({ scope: other.scope, path: path(other) });
|
|
307
|
-
let authenticatedTools = false;
|
|
308
|
-
if (target.component === 'mcp' && host.nativeListing !== false) {
|
|
309
|
-
try {
|
|
310
|
-
const { stdout } = await execute(['mcp', 'list'], target);
|
|
311
|
-
// Native listing corroborates authentication; the CLI separately proves the live account grant.
|
|
312
|
-
// No qualified listing currently prints a server grant/account: do not invent one.
|
|
313
|
-
const origin = apiOrigin(deps.env).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
314
|
-
const connected = new RegExp(
|
|
315
|
-
String.raw`^\s*mnemonik(?:\s*:|\s+)\s*(?:${origin}/mcp(?:\s+\(HTTP\))?\s*-\s*)?[✓✔√]?\s*Connected\s*$`,
|
|
316
|
-
'i'
|
|
317
|
-
);
|
|
318
|
-
const lines = stripVTControlCharacters(stdout).split(/\r?\n/);
|
|
319
|
-
authenticatedTools = lines.some((line) => connected.test(line));
|
|
320
|
-
if (host.name === 'codex') {
|
|
321
|
-
const oauth = new RegExp(
|
|
322
|
-
String.raw`^\s*mnemonik\s+${origin}/mcp\s+-\s+enabled\s+OAuth\s*$`
|
|
323
|
-
);
|
|
324
|
-
authenticatedTools ||= stripVTControlCharacters(stdout)
|
|
325
|
-
.split(/\r?\n/)
|
|
326
|
-
.some((line) => oauth.test(line));
|
|
327
|
-
}
|
|
328
|
-
if (host.name === 'grok' && !authenticatedTools) {
|
|
329
|
-
const { stdout: doctor } = await execute(['mcp', 'doctor', '--json'], target);
|
|
330
|
-
const result = JSON.parse(doctor);
|
|
331
|
-
authenticatedTools =
|
|
332
|
-
Array.isArray(result.servers) &&
|
|
333
|
-
result.servers.some(
|
|
334
|
-
(server: {
|
|
335
|
-
name?: string;
|
|
336
|
-
transport?: string;
|
|
337
|
-
target?: string;
|
|
338
|
-
healthy?: boolean;
|
|
339
|
-
checks?: Array<{ label?: string; passed?: boolean }>;
|
|
340
|
-
}) =>
|
|
341
|
-
server.name === 'mnemonik' &&
|
|
342
|
-
server.transport === 'http' &&
|
|
343
|
-
server.target === `${apiOrigin(deps.env)}/mcp` &&
|
|
344
|
-
server.healthy === true &&
|
|
345
|
-
Array.isArray(server.checks) &&
|
|
346
|
-
server.checks.some(
|
|
347
|
-
(check) => check.label === 'handshake OK' && check.passed === true
|
|
348
|
-
)
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
} catch {
|
|
352
|
-
/* Missing CLI, timeout or unqualified output leaves authentication unproven. */
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
392
|
return {
|
|
356
393
|
resolvedPath: await binary.resolve().catch(() => undefined),
|
|
357
394
|
...(host.nativeListing === false ? { declarationPath: path(target) } : {}),
|
|
358
395
|
declarationPresent: await present(target),
|
|
359
|
-
authenticatedTools,
|
|
396
|
+
authenticatedTools: false,
|
|
360
397
|
otherScopes,
|
|
361
398
|
};
|
|
362
399
|
};
|
package/src/readiness.ts
CHANGED
|
@@ -12,8 +12,6 @@ export type ReadinessConditionKind =
|
|
|
12
12
|
| 'scanner_not_verified'
|
|
13
13
|
| 'hook_not_verified'
|
|
14
14
|
| 'hooks_missing'
|
|
15
|
-
| 'host_grant_unbound'
|
|
16
|
-
| 'host_not_connected'
|
|
17
15
|
| 'scanner_omitted'
|
|
18
16
|
| 'project_uncovered'
|
|
19
17
|
| 'host_skipped'
|
|
@@ -177,8 +175,6 @@ const stateFor: Record<ReadinessConditionKind, Exclude<ReadinessState, 'READY'>>
|
|
|
177
175
|
scanner_not_verified: 'LIMITED',
|
|
178
176
|
hook_not_verified: 'LIMITED',
|
|
179
177
|
hooks_missing: 'ACTION_REQUIRED',
|
|
180
|
-
host_grant_unbound: 'LIMITED',
|
|
181
|
-
host_not_connected: 'LIMITED',
|
|
182
178
|
scanner_omitted: 'LIMITED',
|
|
183
179
|
project_uncovered: 'LIMITED',
|
|
184
180
|
host_skipped: 'LIMITED',
|
|
@@ -195,8 +191,6 @@ const rank: Record<ReadinessState, number> = {
|
|
|
195
191
|
};
|
|
196
192
|
|
|
197
193
|
function defaultAction(condition: ReadinessCondition): string | undefined {
|
|
198
|
-
if (condition.kind === 'host_skipped' && condition.component)
|
|
199
|
-
return `Connect it later: mnemonik connect ${condition.component}`;
|
|
200
194
|
if (condition.kind === 'windows_task_creation_failed')
|
|
201
195
|
return 'Run mnemonik scanner enable to try again.';
|
|
202
196
|
return condition.action;
|
|
@@ -225,8 +219,7 @@ export function remainingReadinessCount(summary: ReadinessSummary): number {
|
|
|
225
219
|
}
|
|
226
220
|
|
|
227
221
|
export function describeReadiness(summary: ReadinessSummary): string {
|
|
228
|
-
if (summary.state === 'READY')
|
|
229
|
-
return 'Done. Your editors will use Mnemonik on their next session.';
|
|
222
|
+
if (summary.state === 'READY') return 'Done.';
|
|
230
223
|
const count = remainingReadinessCount(summary);
|
|
231
224
|
const opening =
|
|
232
225
|
summary.state === 'FAILED'
|
package/src/runtimeSigners.ts
CHANGED
|
@@ -33,11 +33,15 @@ function decodeBase64(text: string, length: number): Buffer {
|
|
|
33
33
|
return bytes;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
/** Pinned release identity; a downloaded manifest can never replace its own trust anchor. */
|
|
37
|
+
export const RELEASE_MINISIGN_PUBLIC_KEY =
|
|
38
|
+
'RWSBYwgbjz0qKB4/ToA3dywBiAlQeBjoQpib4OHdjP2nDbpQnOVqpPm0';
|
|
39
|
+
|
|
40
|
+
export function verifyMinisign(
|
|
41
|
+
message: Buffer,
|
|
42
|
+
signatureText: string,
|
|
43
|
+
identity = RELEASE_MINISIGN_PUBLIC_KEY
|
|
44
|
+
): void {
|
|
41
45
|
const publicPacket = decodeBase64(identity, 42);
|
|
42
46
|
const lines = signatureText.trimEnd().split(/\r?\n/);
|
|
43
47
|
const [untrustedComment, encodedSignature, trustedLine, encodedGlobalSignature] = lines;
|
|
@@ -79,6 +83,14 @@ async function verifyMinisign(path: string, signaturePath: string, identity: str
|
|
|
79
83
|
throw new Error('unsigned');
|
|
80
84
|
}
|
|
81
85
|
|
|
86
|
+
async function verifyMinisignFile(path: string, signaturePath: string, identity: string) {
|
|
87
|
+
const [message, signatureText] = await Promise.all([
|
|
88
|
+
readFile(path),
|
|
89
|
+
readFile(signaturePath, 'utf8'),
|
|
90
|
+
]);
|
|
91
|
+
verifyMinisign(message, signatureText, identity);
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
/** Release tooling supplies the real identity and artifacts. These checks do not sign anything. */
|
|
83
95
|
export async function verifySigner(path: string, signer: Signer, run = execute): Promise<void> {
|
|
84
96
|
if (signer.platform === 'darwin' && /^[A-Z0-9]{10}$/.test(signer.identity)) {
|
|
@@ -104,7 +116,7 @@ export async function verifySigner(path: string, signer: Signer, run = execute):
|
|
|
104
116
|
]);
|
|
105
117
|
} else if (signer.platform === 'linux') {
|
|
106
118
|
try {
|
|
107
|
-
await
|
|
119
|
+
await verifyMinisignFile(path, signer.signature, signer.identity);
|
|
108
120
|
} catch {
|
|
109
121
|
throw new Error('unsigned');
|
|
110
122
|
}
|