@sentropic/h2a 0.97.2 → 0.97.3
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/bin.js +13 -0
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +1 -0
- package/dist/mcp.js.map +1 -1
- package/dist/runtime/identity/bindings.d.ts.map +1 -1
- package/dist/runtime/identity/bindings.js +16 -1
- package/dist/runtime/identity/bindings.js.map +1 -1
- package/dist/runtime/identity/live.d.ts.map +1 -1
- package/dist/runtime/identity/live.js +15 -9
- package/dist/runtime/identity/live.js.map +1 -1
- package/dist/runtime/local-files/locks.d.ts +20 -0
- package/dist/runtime/local-files/locks.d.ts.map +1 -1
- package/dist/runtime/local-files/locks.js +42 -2
- package/dist/runtime/local-files/locks.js.map +1 -1
- package/dist/runtime/local-files/store.d.ts.map +1 -1
- package/dist/runtime/local-files/store.js +42 -4
- package/dist/runtime/local-files/store.js.map +1 -1
- package/dist/runtime/mcp/discovery-pagination.d.ts +73 -0
- package/dist/runtime/mcp/discovery-pagination.d.ts.map +1 -0
- package/dist/runtime/mcp/discovery-pagination.js +446 -0
- package/dist/runtime/mcp/discovery-pagination.js.map +1 -0
- package/dist/runtime/mcp/frame-budget.d.ts +149 -0
- package/dist/runtime/mcp/frame-budget.d.ts.map +1 -0
- package/dist/runtime/mcp/frame-budget.js +275 -0
- package/dist/runtime/mcp/frame-budget.js.map +1 -0
- package/dist/runtime/mcp/handlers.d.ts +14 -3
- package/dist/runtime/mcp/handlers.d.ts.map +1 -1
- package/dist/runtime/mcp/handlers.js +22 -1
- package/dist/runtime/mcp/handlers.js.map +1 -1
- package/dist/runtime/mcp/index.d.ts +1 -0
- package/dist/runtime/mcp/index.d.ts.map +1 -1
- package/dist/runtime/mcp/index.js +1 -0
- package/dist/runtime/mcp/index.js.map +1 -1
- package/dist/runtime/mcp/notifications.d.ts +13 -1
- package/dist/runtime/mcp/notifications.d.ts.map +1 -1
- package/dist/runtime/mcp/notifications.js +36 -20
- package/dist/runtime/mcp/notifications.js.map +1 -1
- package/dist/runtime/mcp/payload-store.d.ts +67 -0
- package/dist/runtime/mcp/payload-store.d.ts.map +1 -0
- package/dist/runtime/mcp/payload-store.js +242 -0
- package/dist/runtime/mcp/payload-store.js.map +1 -0
- package/dist/runtime/mcp/phase-trace.d.ts +98 -0
- package/dist/runtime/mcp/phase-trace.d.ts.map +1 -0
- package/dist/runtime/mcp/phase-trace.js +179 -0
- package/dist/runtime/mcp/phase-trace.js.map +1 -0
- package/dist/runtime/mcp/server.d.ts +13 -1
- package/dist/runtime/mcp/server.d.ts.map +1 -1
- package/dist/runtime/mcp/server.js +57 -3
- package/dist/runtime/mcp/server.js.map +1 -1
- package/dist/runtime/mcp/stdio.d.ts.map +1 -1
- package/dist/runtime/mcp/stdio.js +176 -15
- package/dist/runtime/mcp/stdio.js.map +1 -1
- package/dist/runtime/mcp/tools.d.ts.map +1 -1
- package/dist/runtime/mcp/tools.js +31 -4
- package/dist/runtime/mcp/tools.js.map +1 -1
- package/dist/runtime/mcp-central.d.ts.map +1 -1
- package/dist/runtime/mcp-central.js +17 -7
- package/dist/runtime/mcp-central.js.map +1 -1
- package/dist/runtime/mcp-http/hosted-mcp-server.d.ts.map +1 -1
- package/dist/runtime/mcp-http/hosted-mcp-server.js +16 -6
- package/dist/runtime/mcp-http/hosted-mcp-server.js.map +1 -1
- package/dist/runtime/mcp-http/readonly-allowlist.d.ts.map +1 -1
- package/dist/runtime/mcp-http/readonly-allowlist.js +3 -0
- package/dist/runtime/mcp-http/readonly-allowlist.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-trace.d.ts","sourceRoot":"","sources":["../../../src/runtime/mcp/phase-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-phase MCP boot/serve tracing (lot L0 — measurement & diagnosis only).
|
|
3
|
+
*
|
|
4
|
+
* Emits correlated, closed-field JSONL spans to an injected stderr writer so a
|
|
5
|
+
* host or an out-of-process measurement probe can reconstruct the whole
|
|
6
|
+
* `mcp-serve` lifecycle — process start, identity resolution, lock waits,
|
|
7
|
+
* registry reads, transport `initialize` / `tools/list` / first tool — WITHOUT
|
|
8
|
+
* pulling in the CLI or the heavy runtime. It has three properties the rest of
|
|
9
|
+
* the fix relies on:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Passive.** A measurement callback can never fail the MCP protocol:
|
|
12
|
+
* every emit is wrapped, a writer throw is swallowed, and the trace has no
|
|
13
|
+
* side effect on the JSON-RPC stream (it only ever writes to stderr).
|
|
14
|
+
* 2. **Confidential.** Fields are a fixed whitelist and every string is
|
|
15
|
+
* sanitized + length-capped, so no PEM, token, lock payload or binding
|
|
16
|
+
* content can ever reach an event — even if a caller passes it by mistake.
|
|
17
|
+
* 3. **Monotonic + correlated.** Every event carries `attemptId` (a locally
|
|
18
|
+
* minted UUID — a child process cannot inherit an identity from the MCP
|
|
19
|
+
* client), `pid`, a per-trace `seq`, and a monotonic `monotonicMs`. Two
|
|
20
|
+
* processes are correlated by matching events, never by subtracting their
|
|
21
|
+
* independent monotonic clocks.
|
|
22
|
+
*
|
|
23
|
+
* `H2A_MCP_TRACE=1` turns on the detailed spans (`begin`/`end` of internal
|
|
24
|
+
* phases). Lifecycle milestones and failure diagnostics stay visible without
|
|
25
|
+
* the flag.
|
|
26
|
+
*/
|
|
27
|
+
import { performance } from "node:perf_hooks";
|
|
28
|
+
import { randomUUID } from "node:crypto";
|
|
29
|
+
/** Log line prefix; every trace event is `${TRACE_LINE_PREFIX}${json}\n` on stderr. */
|
|
30
|
+
export const TRACE_LINE_PREFIX = "h2a.mcp.phase ";
|
|
31
|
+
/** Env flag that turns on detailed (`begin`/`end`) spans. */
|
|
32
|
+
export const TRACE_DETAIL_ENV = "H2A_MCP_TRACE";
|
|
33
|
+
const MAX_STR = 200;
|
|
34
|
+
/** Strip control chars / newlines and cap length so a JSONL line stays one line. */
|
|
35
|
+
function safeStr(value) {
|
|
36
|
+
if (value === undefined || value === null)
|
|
37
|
+
return undefined;
|
|
38
|
+
const raw = typeof value === "string" ? value : String(value);
|
|
39
|
+
// eslint-disable-next-line no-control-regex
|
|
40
|
+
const cleaned = raw.replace(/[\u0000-\u001f\u007f-\u009f]/g, " ").trim();
|
|
41
|
+
if (cleaned.length === 0)
|
|
42
|
+
return undefined;
|
|
43
|
+
return cleaned.length > MAX_STR ? cleaned.slice(0, MAX_STR) : cleaned;
|
|
44
|
+
}
|
|
45
|
+
function safeNum(value) {
|
|
46
|
+
if (typeof value !== "number")
|
|
47
|
+
return undefined;
|
|
48
|
+
return Number.isFinite(value) ? value : undefined;
|
|
49
|
+
}
|
|
50
|
+
function safeId(value) {
|
|
51
|
+
if (typeof value === "number")
|
|
52
|
+
return Number.isFinite(value) ? value : undefined;
|
|
53
|
+
return safeStr(value);
|
|
54
|
+
}
|
|
55
|
+
/** Default writer: never throws into the caller (a broken stderr is not fatal). */
|
|
56
|
+
function defaultWriter(line) {
|
|
57
|
+
try {
|
|
58
|
+
process.stderr.write(line);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* a measurement sink must never break the protocol */
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
class Trace {
|
|
65
|
+
attemptId;
|
|
66
|
+
role;
|
|
67
|
+
pid;
|
|
68
|
+
detailed;
|
|
69
|
+
writer;
|
|
70
|
+
now;
|
|
71
|
+
env;
|
|
72
|
+
seq = 0;
|
|
73
|
+
constructor(options) {
|
|
74
|
+
this.env = options.env ?? process.env;
|
|
75
|
+
this.role = options.role ?? "server";
|
|
76
|
+
this.attemptId = options.attemptId ?? randomUUID();
|
|
77
|
+
this.pid = options.pid ?? process.pid;
|
|
78
|
+
this.writer = options.writer ?? defaultWriter;
|
|
79
|
+
this.now = options.now ?? (() => performance.now());
|
|
80
|
+
this.detailed =
|
|
81
|
+
options.detailed ?? this.env[TRACE_DETAIL_ENV] === "1";
|
|
82
|
+
}
|
|
83
|
+
emit(phase, kind, fields) {
|
|
84
|
+
try {
|
|
85
|
+
const event = {
|
|
86
|
+
v: 1,
|
|
87
|
+
attemptId: this.attemptId,
|
|
88
|
+
pid: this.pid,
|
|
89
|
+
role: this.role,
|
|
90
|
+
seq: this.seq++,
|
|
91
|
+
monotonicMs: Math.round(this.now() * 1000) / 1000,
|
|
92
|
+
phase: safeStr(phase) ?? "unknown",
|
|
93
|
+
event: kind,
|
|
94
|
+
...withField("durationMs", safeNum(fields?.durationMs)),
|
|
95
|
+
...withField("requestId", safeId(fields?.requestId)),
|
|
96
|
+
...withField("method", safeStr(fields?.method)),
|
|
97
|
+
...withField("tool", safeStr(fields?.tool)),
|
|
98
|
+
...withField("bytes", safeNum(fields?.bytes)),
|
|
99
|
+
...withField("waitMs", safeNum(fields?.waitMs)),
|
|
100
|
+
...withField("holdMs", safeNum(fields?.holdMs)),
|
|
101
|
+
...withField("code", safeId(fields?.code))
|
|
102
|
+
};
|
|
103
|
+
this.writer(`${TRACE_LINE_PREFIX}${JSON.stringify(event)}\n`);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
/* the trace is best-effort; it never disturbs the caller */
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
phase(name, fields) {
|
|
110
|
+
this.emit(name, "sample", fields);
|
|
111
|
+
}
|
|
112
|
+
begin(name, fields) {
|
|
113
|
+
if (this.detailed)
|
|
114
|
+
this.emit(name, "begin", fields);
|
|
115
|
+
}
|
|
116
|
+
end(name, fields) {
|
|
117
|
+
if (this.detailed)
|
|
118
|
+
this.emit(name, "end", fields);
|
|
119
|
+
}
|
|
120
|
+
error(name, fields) {
|
|
121
|
+
this.emit(name, "error", fields);
|
|
122
|
+
}
|
|
123
|
+
span(name, fn, fields) {
|
|
124
|
+
const start = this.now();
|
|
125
|
+
if (this.detailed)
|
|
126
|
+
this.emit(name, "begin", fields);
|
|
127
|
+
try {
|
|
128
|
+
const out = fn();
|
|
129
|
+
if (this.detailed) {
|
|
130
|
+
this.emit(name, "end", { ...fields, durationMs: round3(this.now() - start) });
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
this.emit(name, "error", {
|
|
136
|
+
...fields,
|
|
137
|
+
durationMs: round3(this.now() - start),
|
|
138
|
+
code: err instanceof Error ? err.name : "error"
|
|
139
|
+
});
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
child(role, options) {
|
|
144
|
+
return new Trace({
|
|
145
|
+
role,
|
|
146
|
+
attemptId: this.attemptId,
|
|
147
|
+
detailed: this.detailed,
|
|
148
|
+
now: this.now,
|
|
149
|
+
env: this.env,
|
|
150
|
+
...(options?.pid !== undefined ? { pid: options.pid } : {}),
|
|
151
|
+
...(options?.writer !== undefined ? { writer: options.writer } : {})
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function withField(key, value) {
|
|
156
|
+
return value === undefined ? {} : { [key]: value };
|
|
157
|
+
}
|
|
158
|
+
function round3(ms) {
|
|
159
|
+
return Math.round(ms * 1000) / 1000;
|
|
160
|
+
}
|
|
161
|
+
/** Create a fresh trace. `attemptId` defaults to a locally minted UUID. */
|
|
162
|
+
export function createMcpTrace(options = {}) {
|
|
163
|
+
return new Trace(options);
|
|
164
|
+
}
|
|
165
|
+
// --- Ambient, process-wide active trace ------------------------------------
|
|
166
|
+
//
|
|
167
|
+
// The boot path threads through many modules (bin → cli → identity → store →
|
|
168
|
+
// stdio). Rather than plumb a trace object through every signature, the entry
|
|
169
|
+
// point installs ONE active trace and the deep modules reach it via
|
|
170
|
+
// `getActiveMcpTrace()`. When none is installed (a normal CLI verb, or a unit
|
|
171
|
+
// test), every deep call is a no-op via optional chaining.
|
|
172
|
+
let active;
|
|
173
|
+
export function setActiveMcpTrace(trace) {
|
|
174
|
+
active = trace;
|
|
175
|
+
}
|
|
176
|
+
export function getActiveMcpTrace() {
|
|
177
|
+
return active;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=phase-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-trace.js","sourceRoot":"","sources":["../../../src/runtime/mcp/phase-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import { SessionRegistry, type SessionRegistryOptions } from "./sessions.js";
|
|
|
5
5
|
import { type McpToolDescriptor } from "./tools.js";
|
|
6
6
|
import { type H2aRunDelegation, type H2aRunExecutor } from "./agent-launch.js";
|
|
7
7
|
import type { H2ASendSigner } from "../send.js";
|
|
8
|
+
import { type PayloadStore } from "./payload-store.js";
|
|
9
|
+
import { type FrameBudget } from "./frame-budget.js";
|
|
8
10
|
export interface CreateMcpServerOptions {
|
|
9
11
|
/** Filesystem root for the backing local-files store. */
|
|
10
12
|
root: string;
|
|
@@ -35,14 +37,24 @@ export interface CreateMcpServerOptions {
|
|
|
35
37
|
intervalMs?: number;
|
|
36
38
|
sink?: NotificationSink;
|
|
37
39
|
};
|
|
40
|
+
/** L1: frame budget override (tests). Defaults to `resolveFrameBudget()`. */
|
|
41
|
+
frameBudget?: FrameBudget;
|
|
42
|
+
}
|
|
43
|
+
/** L1: optional per-call transport context (reserved for exact-id budgeting). */
|
|
44
|
+
export interface McpCallContext {
|
|
45
|
+
readonly budget?: FrameBudget;
|
|
38
46
|
}
|
|
39
47
|
export interface McpServer {
|
|
40
48
|
listTools(): McpToolDescriptor[];
|
|
41
|
-
callTool(name: string, args: Record<string, unknown> | undefined): McpToolResult | McpErrorResult | McpTransportResult;
|
|
49
|
+
callTool(name: string, args: Record<string, unknown> | undefined, context?: McpCallContext): McpToolResult | McpErrorResult | McpTransportResult;
|
|
42
50
|
/** Per-server SessionRegistry, exposed for transport-layer shutdown hooks. */
|
|
43
51
|
readonly sessions: SessionRegistry;
|
|
44
52
|
/** Per-server NotificationDispatcher (DEC-052). */
|
|
45
53
|
readonly notifications: NotificationDispatcher;
|
|
54
|
+
/** L1: per-root durable store for oversize output recovery. */
|
|
55
|
+
readonly payloadStore: PayloadStore;
|
|
56
|
+
/** L1: the frame budget bounding every emission of this server. */
|
|
57
|
+
readonly frameBudget: FrameBudget;
|
|
46
58
|
}
|
|
47
59
|
/** A tool result already formatted for the MCP transport (used by Track reads). */
|
|
48
60
|
export interface McpTransportResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/runtime/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAsCL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,gBAAgB,CAAC;KACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/runtime/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAsCL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGzE,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,gBAAgB,CAAC;KACzB,CAAC;IACF,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,IAAI,iBAAiB,EAAE,CAAC;IACjC,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,GAAG,cAAc,GAAG,kBAAkB,CAAC;IACvD,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,mDAAmD;IACnD,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAC;IAC/C,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAOhF;AAID;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CA8J1E"}
|
|
@@ -6,6 +6,10 @@ import { H2A_CLI_MCP_TOOL_DESCRIPTORS } from "./tools.js";
|
|
|
6
6
|
import { TRACK_READ_TOOL_DESCRIPTORS, callTrackReadTool } from "@sentropic/track/mcp";
|
|
7
7
|
import { H2A_SESSION_DEFAULT_HEARTBEAT_INTERVAL_MS } from "@sentropic/h2a";
|
|
8
8
|
import { executeH2aRun, handleH2aRun, recordMcpRunDelegation } from "./agent-launch.js";
|
|
9
|
+
import { createDiscoveryPager } from "./discovery-pagination.js";
|
|
10
|
+
import { createPayloadStore } from "./payload-store.js";
|
|
11
|
+
import { resolveFrameBudget } from "./frame-budget.js";
|
|
12
|
+
import { PAYLOAD_MAX_READ_BYTES } from "./payload-store.js";
|
|
9
13
|
export function isMcpTransportResult(value) {
|
|
10
14
|
return (typeof value === "object" &&
|
|
11
15
|
value !== null &&
|
|
@@ -28,7 +32,16 @@ export function createMcpServer(options) {
|
|
|
28
32
|
});
|
|
29
33
|
const notifications = new NotificationDispatcher(sessions, store, options.root, options.notifications?.sink, options.notifications?.intervalMs ??
|
|
30
34
|
H2A_SESSION_DEFAULT_HEARTBEAT_INTERVAL_MS);
|
|
31
|
-
|
|
35
|
+
// L1: per-root recovery store + per-server paginating discovery pager. The
|
|
36
|
+
// pager carries a random per-instance HMAC secret + epoch, so a cursor from a
|
|
37
|
+
// restarted server fails `cursor_stale` (never a silent first page).
|
|
38
|
+
const frameBudget = options.frameBudget ?? resolveFrameBudget();
|
|
39
|
+
const payloadStore = createPayloadStore(options.root);
|
|
40
|
+
const discoveryPager = createDiscoveryPager(store, {
|
|
41
|
+
budget: frameBudget,
|
|
42
|
+
payloadStore
|
|
43
|
+
});
|
|
44
|
+
function callTool(name, args, _context) {
|
|
32
45
|
if (TRACK_READ_TOOL_NAMES.has(name)) {
|
|
33
46
|
try {
|
|
34
47
|
const result = callTrackReadTool({ cwd: options.workspaceRoot ?? process.cwd() }, name, args ?? {});
|
|
@@ -56,7 +69,9 @@ export function createMcpServer(options) {
|
|
|
56
69
|
case "h2a_register_instance":
|
|
57
70
|
return handleRegisterInstance(store, args);
|
|
58
71
|
case "h2a_discover_instances":
|
|
59
|
-
return handleDiscoverInstances(store, args);
|
|
72
|
+
return handleDiscoverInstances(store, args, discoveryPager);
|
|
73
|
+
case "h2a_read_payload":
|
|
74
|
+
return handleReadPayload(payloadStore, args, frameBudget);
|
|
60
75
|
case "h2a_inbox":
|
|
61
76
|
return handleInbox(store, args);
|
|
62
77
|
case "h2a_send":
|
|
@@ -142,7 +157,46 @@ export function createMcpServer(options) {
|
|
|
142
157
|
listTools: () => H2A_CLI_MCP_TOOL_DESCRIPTORS.slice(),
|
|
143
158
|
callTool,
|
|
144
159
|
sessions,
|
|
145
|
-
notifications
|
|
160
|
+
notifications,
|
|
161
|
+
payloadStore,
|
|
162
|
+
frameBudget
|
|
146
163
|
};
|
|
147
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* L1 `h2a_read_payload`: chunked, read-only recovery of an oversize output's
|
|
167
|
+
* INTACT bytes (base64), so "recover" never points at another too-big response.
|
|
168
|
+
* Tenant-confined by the per-root store; needs no signing identity. It never
|
|
169
|
+
* re-runs an effectful tool — it returns already-produced bytes.
|
|
170
|
+
*/
|
|
171
|
+
function handleReadPayload(payloadStore, args, budget) {
|
|
172
|
+
const toolError = (code, message) => ({
|
|
173
|
+
content: [{ type: "text", text: JSON.stringify({ code, message }) }],
|
|
174
|
+
isError: true
|
|
175
|
+
});
|
|
176
|
+
const ref = args?.ref;
|
|
177
|
+
if (typeof ref !== "string" || ref.length === 0) {
|
|
178
|
+
return toolError("payload_not_found", "ref is required");
|
|
179
|
+
}
|
|
180
|
+
const rawOffset = args?.offset;
|
|
181
|
+
if (rawOffset !== undefined && (typeof rawOffset !== "number" || !Number.isInteger(rawOffset) || rawOffset < 0)) {
|
|
182
|
+
return toolError("invalid_offset", "offset must be a non-negative integer");
|
|
183
|
+
}
|
|
184
|
+
const rawMax = args?.maxBytes;
|
|
185
|
+
if (rawMax !== undefined &&
|
|
186
|
+
(typeof rawMax !== "number" || !Number.isInteger(rawMax) || rawMax < 1 || rawMax > PAYLOAD_MAX_READ_BYTES)) {
|
|
187
|
+
return toolError("invalid_offset", "maxBytes must be an integer between 1 and 65536");
|
|
188
|
+
}
|
|
189
|
+
const offset = typeof rawOffset === "number" ? rawOffset : 0;
|
|
190
|
+
const requested = typeof rawMax === "number" ? rawMax : PAYLOAD_MAX_READ_BYTES;
|
|
191
|
+
// maxBytes is a MAXIMUM: reduce the chunk further so the FINAL serialized frame
|
|
192
|
+
// (base64 ≈ 4/3 expansion + the JSON envelope, double-encoded into content
|
|
193
|
+
// text) stays within the budget — a recovery read must never itself overflow.
|
|
194
|
+
const budgetChunk = Math.max(1, Math.floor((budget.maxBytes - 4096) * 3 / 4));
|
|
195
|
+
const maxBytes = Math.max(1, Math.min(requested, budgetChunk));
|
|
196
|
+
const result = payloadStore.readPayload(ref, offset, maxBytes);
|
|
197
|
+
if ("error" in result) {
|
|
198
|
+
return toolError(result.error, `payload read failed: ${result.error}`);
|
|
199
|
+
}
|
|
200
|
+
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
201
|
+
}
|
|
148
202
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/runtime/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,eAAe,EAGhB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EAEvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAEhB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,4BAA4B,EAG7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,yCAAyC,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,YAAY,EACZ,sBAAsB,EAGvB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/runtime/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/runtime/mcp/stdio.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/runtime/mcp/stdio.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAW3B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsChD,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,QAAQ,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,QAAQ,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,QAAQ,CAAC;IACjB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC;;;;WAIG;QACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;QACvD,wEAAwE;QACxE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;KACpC,CAAC;IACF;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;;OAMG;IACH,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,uEAAuE;QACvE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;IACF;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA2DD,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAC3D,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAyFlD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkbtE"}
|