@getmarrow/mcp 3.9.54 → 3.9.56
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 +35 -3
- package/dist/cli.js +140 -1
- package/dist/cli.js.map +1 -1
- package/dist/guidance-cache.d.ts +17 -0
- package/dist/guidance-cache.d.ts.map +1 -0
- package/dist/guidance-cache.js +57 -0
- package/dist/guidance-cache.js.map +1 -0
- package/dist/hook-context.d.ts +2 -1
- package/dist/hook-context.d.ts.map +1 -1
- package/dist/hook-context.js +98 -42
- package/dist/hook-context.js.map +1 -1
- package/dist/hook-contract.d.ts +6 -6
- package/dist/hook-contract.js +1 -1
- package/dist/hook-session.d.ts +1 -1
- package/dist/hook.d.ts +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +188 -4
- package/dist/index.js.map +1 -1
- package/dist/lifecycle-spool.d.ts +1 -0
- package/dist/lifecycle-spool.d.ts.map +1 -1
- package/dist/lifecycle-spool.js +1 -1
- package/dist/lifecycle-spool.js.map +1 -1
- package/dist/ping-state.d.ts +14 -0
- package/dist/ping-state.d.ts.map +1 -0
- package/dist/ping-state.js +61 -0
- package/dist/ping-state.js.map +1 -0
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function updatePingState(input: {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
agentId?: string;
|
|
5
|
+
latencyMs?: number;
|
|
6
|
+
success: boolean;
|
|
7
|
+
home?: string;
|
|
8
|
+
}): {
|
|
9
|
+
last_success_at: string | null;
|
|
10
|
+
sample_count: number;
|
|
11
|
+
p50_ms: number | null;
|
|
12
|
+
p99_ms: number | null;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=ping-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping-state.d.ts","sourceRoot":"","sources":["../src/ping-state.ts"],"names":[],"mappings":"AA2CA,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG;IAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgBzG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updatePingState = updatePingState;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
function statePath(apiKey, baseUrl, agentId, home = (0, os_1.homedir)()) {
|
|
9
|
+
const namespace = (0, crypto_1.createHash)('sha256').update(`${baseUrl}|${apiKey}|${agentId || 'account'}`).digest('hex').slice(0, 24);
|
|
10
|
+
const directory = (0, path_1.join)(home, '.marrow', 'health');
|
|
11
|
+
if (!(0, fs_1.existsSync)(directory))
|
|
12
|
+
(0, fs_1.mkdirSync)(directory, { recursive: true, mode: 0o700 });
|
|
13
|
+
const stat = (0, fs_1.lstatSync)(directory);
|
|
14
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || (stat.mode & 0o077) !== 0) {
|
|
15
|
+
throw new Error('Marrow health directory must be owner-only and cannot be a symlink');
|
|
16
|
+
}
|
|
17
|
+
return (0, path_1.join)(directory, `ping-${namespace}.json`);
|
|
18
|
+
}
|
|
19
|
+
function read(path) {
|
|
20
|
+
if (!(0, fs_1.existsSync)(path))
|
|
21
|
+
return { version: 1, last_success_at: null, samples_ms: [] };
|
|
22
|
+
const stat = (0, fs_1.lstatSync)(path);
|
|
23
|
+
if (!stat.isFile() || stat.isSymbolicLink() || (stat.mode & 0o077) !== 0)
|
|
24
|
+
throw new Error('Marrow health file is not private');
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
|
|
27
|
+
const samples = Array.isArray(parsed.samples_ms)
|
|
28
|
+
? parsed.samples_ms.filter((value) => Number.isFinite(value) && value >= 0 && value <= 60_000).slice(-100)
|
|
29
|
+
: [];
|
|
30
|
+
return { version: 1, last_success_at: typeof parsed.last_success_at === 'string' ? parsed.last_success_at : null, samples_ms: samples };
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return { version: 1, last_success_at: null, samples_ms: [] };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function percentile(values, fraction) {
|
|
37
|
+
if (!values.length)
|
|
38
|
+
return null;
|
|
39
|
+
const sorted = [...values].sort((left, right) => left - right);
|
|
40
|
+
return sorted[Math.max(0, Math.ceil(sorted.length * fraction) - 1)] ?? null;
|
|
41
|
+
}
|
|
42
|
+
function updatePingState(input) {
|
|
43
|
+
const path = statePath(input.apiKey, input.baseUrl, input.agentId, input.home);
|
|
44
|
+
const state = read(path);
|
|
45
|
+
if (input.success && Number.isFinite(input.latencyMs))
|
|
46
|
+
state.samples_ms.push(Math.max(0, Math.round(input.latencyMs)));
|
|
47
|
+
state.samples_ms = state.samples_ms.slice(-100);
|
|
48
|
+
if (input.success)
|
|
49
|
+
state.last_success_at = new Date().toISOString();
|
|
50
|
+
const temporary = `${path}.tmp-${process.pid}`;
|
|
51
|
+
(0, fs_1.writeFileSync)(temporary, JSON.stringify(state), { encoding: 'utf8', mode: 0o600, flag: 'w' });
|
|
52
|
+
(0, fs_1.chmodSync)(temporary, 0o600);
|
|
53
|
+
(0, fs_1.renameSync)(temporary, path);
|
|
54
|
+
return {
|
|
55
|
+
last_success_at: state.last_success_at,
|
|
56
|
+
sample_count: state.samples_ms.length,
|
|
57
|
+
p50_ms: percentile(state.samples_ms, 0.50),
|
|
58
|
+
p99_ms: percentile(state.samples_ms, 0.99),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ping-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping-state.js","sourceRoot":"","sources":["../src/ping-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getmarrow/mcp",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.56",
|
|
4
4
|
"mcpName": "io.github.getmarrow/marrow",
|
|
5
5
|
"description": "Runtime control, proof, and fleet intelligence for MCP-compatible AI agents.",
|
|
6
6
|
"bin": {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"scripts/mcp-registry-verify.cjs"
|
|
72
72
|
],
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@getmarrow/sdk": "^3.7.
|
|
74
|
+
"@getmarrow/sdk": "^3.7.54"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@types/node": "^25.5.2",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/getmarrow/marrow-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "3.9.
|
|
9
|
+
"version": "3.9.56",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@getmarrow/mcp",
|
|
14
|
-
"version": "3.9.
|
|
14
|
+
"version": "3.9.56",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|