qyl-mcp-server 0.1.0
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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/atomic-json-store.d.ts +37 -0
- package/dist/atomic-json-store.js +143 -0
- package/dist/atomic-json-store.js.map +1 -0
- package/dist/ci.d.ts +51 -0
- package/dist/ci.js +158 -0
- package/dist/ci.js.map +1 -0
- package/dist/collector.d.ts +43 -0
- package/dist/collector.js +163 -0
- package/dist/collector.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/contract-validation.d.ts +146 -0
- package/dist/contract-validation.js +350 -0
- package/dist/contract-validation.js.map +1 -0
- package/dist/data.d.ts +46 -0
- package/dist/data.js +138 -0
- package/dist/data.js.map +1 -0
- package/dist/demo.d.ts +23 -0
- package/dist/demo.js +836 -0
- package/dist/demo.js.map +1 -0
- package/dist/execution-evidence.d.ts +13 -0
- package/dist/execution-evidence.js +81 -0
- package/dist/execution-evidence.js.map +1 -0
- package/dist/execution-result.d.ts +5 -0
- package/dist/execution-result.js +17 -0
- package/dist/execution-result.js.map +1 -0
- package/dist/http-security.d.ts +36 -0
- package/dist/http-security.js +101 -0
- package/dist/http-security.js.map +1 -0
- package/dist/log-body.d.ts +3 -0
- package/dist/log-body.js +12 -0
- package/dist/log-body.js.map +1 -0
- package/dist/main.d.ts +51 -0
- package/dist/main.js +215 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-app.html +218 -0
- package/dist/mcp-dashboard.html +223 -0
- package/dist/mcp-errors.d.ts +5 -0
- package/dist/mcp-errors.js +15 -0
- package/dist/mcp-errors.js.map +1 -0
- package/dist/mcp-semconv.d.ts +68 -0
- package/dist/mcp-semconv.js +208 -0
- package/dist/mcp-semconv.js.map +1 -0
- package/dist/native-execution.d.ts +132 -0
- package/dist/native-execution.js +508 -0
- package/dist/native-execution.js.map +1 -0
- package/dist/observability-suppression.d.ts +8 -0
- package/dist/observability-suppression.js +15 -0
- package/dist/observability-suppression.js.map +1 -0
- package/dist/secret-redactor.d.ts +30 -0
- package/dist/secret-redactor.js +255 -0
- package/dist/secret-redactor.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.js +207 -0
- package/dist/server.js.map +1 -0
- package/dist/stats.d.ts +18 -0
- package/dist/stats.js +141 -0
- package/dist/stats.js.map +1 -0
- package/dist/summaries.d.ts +14 -0
- package/dist/summaries.js +128 -0
- package/dist/summaries.js.map +1 -0
- package/dist/telemetry-redaction.d.ts +6 -0
- package/dist/telemetry-redaction.js +28 -0
- package/dist/telemetry-redaction.js.map +1 -0
- package/dist/telemetry.d.ts +72 -0
- package/dist/telemetry.js +362 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools.d.ts +17 -0
- package/dist/tools.js +111 -0
- package/dist/tools.js.map +1 -0
- package/dist/wire.d.ts +10 -0
- package/dist/wire.js +7 -0
- package/dist/wire.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import { CallToolRequestSchema, CallToolResultSchema, ErrorCode, McpError, } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { AtomicJsonStore } from "./atomic-json-store.js";
|
|
7
|
+
import { extractExecutionEvidence } from "./execution-evidence.js";
|
|
8
|
+
import { MAX_PERSISTED_RESULT_CHARACTERS, sanitizePersistedToolResult, } from "./execution-result.js";
|
|
9
|
+
import { SecretRedactor } from "./secret-redactor.js";
|
|
10
|
+
import { McpTelemetry, } from "./telemetry.js";
|
|
11
|
+
const NATIVE_STATE_VERSION = 1;
|
|
12
|
+
const DEFAULT_MAX_EXECUTIONS = 1_000;
|
|
13
|
+
const NATIVE_SERVER_ID = "qyl.mcp/native";
|
|
14
|
+
const MAX_PROTOCOL_PAYLOAD_CHARACTERS = 64_000;
|
|
15
|
+
const IdentifierSchema = z.string().min(1).max(256);
|
|
16
|
+
const IsoDateSchema = z.string().datetime({ offset: true });
|
|
17
|
+
const JsonRpcRequestIdSchema = z.union([z.string().max(2_048), z.number().finite()]);
|
|
18
|
+
const TokenUsageSchema = z.object({
|
|
19
|
+
inputTokens: z.number().int().nonnegative().optional(),
|
|
20
|
+
outputTokens: z.number().int().nonnegative().optional(),
|
|
21
|
+
totalTokens: z.number().int().nonnegative().optional(),
|
|
22
|
+
estimated: z.boolean(),
|
|
23
|
+
}).strict();
|
|
24
|
+
const CostSchema = z.object({
|
|
25
|
+
amountUsd: z.number().finite().nonnegative(),
|
|
26
|
+
estimated: z.boolean(),
|
|
27
|
+
source: z.string().min(1).max(256).optional(),
|
|
28
|
+
}).strict();
|
|
29
|
+
const ProtocolEventSchema = z.object({
|
|
30
|
+
sequence: z.number().int().positive(),
|
|
31
|
+
timestamp: IsoDateSchema,
|
|
32
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
33
|
+
messageKind: z.enum(["request", "result", "error"]),
|
|
34
|
+
jsonrpc: z.literal("2.0"),
|
|
35
|
+
requestId: JsonRpcRequestIdSchema,
|
|
36
|
+
method: z.literal("tools/call"),
|
|
37
|
+
payload: z.unknown(),
|
|
38
|
+
}).strict();
|
|
39
|
+
const NativeExecutionRecordSchema = z.object({
|
|
40
|
+
id: IdentifierSchema,
|
|
41
|
+
serverId: z.literal(NATIVE_SERVER_ID),
|
|
42
|
+
status: z.enum(["running", "succeeded", "failed"]),
|
|
43
|
+
createdAt: IsoDateSchema,
|
|
44
|
+
startedAt: IsoDateSchema,
|
|
45
|
+
completedAt: IsoDateSchema.optional(),
|
|
46
|
+
durationMs: z.number().finite().nonnegative().optional(),
|
|
47
|
+
attemptCount: z.literal(1),
|
|
48
|
+
request: z.object({
|
|
49
|
+
requestId: JsonRpcRequestIdSchema,
|
|
50
|
+
toolName: z.string().min(1).max(1_024),
|
|
51
|
+
arguments: z.record(z.string(), z.unknown()),
|
|
52
|
+
transport: z.enum([
|
|
53
|
+
"stdio",
|
|
54
|
+
"http",
|
|
55
|
+
"streamable_http",
|
|
56
|
+
"streamable-http",
|
|
57
|
+
"sse",
|
|
58
|
+
"inproc",
|
|
59
|
+
"builtin",
|
|
60
|
+
]),
|
|
61
|
+
sessionId: z.string().min(1).max(2_048).optional(),
|
|
62
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
63
|
+
}).strict(),
|
|
64
|
+
result: z.unknown().optional(),
|
|
65
|
+
error: z.object({
|
|
66
|
+
code: z.string().min(1).max(128),
|
|
67
|
+
message: z.string().min(1).max(4_096),
|
|
68
|
+
}).strict().optional(),
|
|
69
|
+
tokenUsage: TokenUsageSchema.optional(),
|
|
70
|
+
cost: CostSchema.optional(),
|
|
71
|
+
protocolEvents: z.array(ProtocolEventSchema).min(1).max(2),
|
|
72
|
+
telemetryCorrelation: z.object({
|
|
73
|
+
executionId: IdentifierSchema,
|
|
74
|
+
traceIds: z.array(z.string().regex(/^[0-9a-f]{32}$/u)).max(2),
|
|
75
|
+
spanIds: z.array(z.string().regex(/^[0-9a-f]{16}$/u)).max(2),
|
|
76
|
+
}).strict(),
|
|
77
|
+
}).strict();
|
|
78
|
+
const NativeExecutionStateSchema = z.object({
|
|
79
|
+
version: z.literal(NATIVE_STATE_VERSION),
|
|
80
|
+
executions: z.array(NativeExecutionRecordSchema),
|
|
81
|
+
}).strict();
|
|
82
|
+
/** Durable, redacted native-server evidence kept separately from workbench state. */
|
|
83
|
+
export class FileNativeExecutionRepository {
|
|
84
|
+
store;
|
|
85
|
+
maxExecutions;
|
|
86
|
+
now;
|
|
87
|
+
initialization;
|
|
88
|
+
constructor(options = {}) {
|
|
89
|
+
const environment = options.environment ?? process.env;
|
|
90
|
+
const redactor = options.redactor ?? new SecretRedactor({
|
|
91
|
+
environment,
|
|
92
|
+
maxStringLength: MAX_PERSISTED_RESULT_CHARACTERS + 1,
|
|
93
|
+
});
|
|
94
|
+
this.maxExecutions = positiveInteger(options.maxExecutions ?? DEFAULT_MAX_EXECUTIONS, "maxExecutions");
|
|
95
|
+
this.now = options.now ?? Date.now;
|
|
96
|
+
this.store = new AtomicJsonStore(options.filePath ?? nativeStatePath(environment), {
|
|
97
|
+
initial: () => ({ version: NATIVE_STATE_VERSION, executions: [] }),
|
|
98
|
+
parse: (value) => NativeExecutionStateSchema.parse(value),
|
|
99
|
+
prepareForWrite: (value) => NativeExecutionStateSchema.parse(redactor.redact(value)),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async save(record) {
|
|
103
|
+
await this.initialize();
|
|
104
|
+
const validated = NativeExecutionRecordSchema.parse(record);
|
|
105
|
+
await this.store.transact((state) => {
|
|
106
|
+
const index = state.executions.findIndex((entry) => entry.id === validated.id);
|
|
107
|
+
if (index < 0)
|
|
108
|
+
state.executions.push(validated);
|
|
109
|
+
else
|
|
110
|
+
state.executions[index] = validated;
|
|
111
|
+
state.executions.sort((left, right) => left.createdAt.localeCompare(right.createdAt));
|
|
112
|
+
if (state.executions.length > this.maxExecutions) {
|
|
113
|
+
state.executions.splice(0, state.executions.length - this.maxExecutions);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
async list() {
|
|
118
|
+
await this.initialize();
|
|
119
|
+
return (await this.store.read()).executions;
|
|
120
|
+
}
|
|
121
|
+
initialize() {
|
|
122
|
+
this.initialization ??= this.initializeCore();
|
|
123
|
+
return this.initialization;
|
|
124
|
+
}
|
|
125
|
+
async initializeCore() {
|
|
126
|
+
await this.store.initialize();
|
|
127
|
+
const completedMs = this.now();
|
|
128
|
+
const completedAt = timestamp(completedMs);
|
|
129
|
+
const current = await this.store.read();
|
|
130
|
+
if (!current.executions.some((record) => record.status === "running"))
|
|
131
|
+
return;
|
|
132
|
+
await this.store.transact((state) => {
|
|
133
|
+
for (const record of state.executions) {
|
|
134
|
+
if (record.status !== "running")
|
|
135
|
+
continue;
|
|
136
|
+
record.status = "failed";
|
|
137
|
+
record.completedAt = completedAt;
|
|
138
|
+
record.durationMs = Math.max(0, completedMs - Date.parse(record.startedAt));
|
|
139
|
+
record.error = {
|
|
140
|
+
code: "process_interrupted",
|
|
141
|
+
message: "The qyl.mcp process stopped before this native tool call completed.",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** Owns the automatic inbound tools/call lifecycle and evidence transaction. */
|
|
148
|
+
export class NativeExecutionRuntime {
|
|
149
|
+
repository;
|
|
150
|
+
telemetry;
|
|
151
|
+
redactor;
|
|
152
|
+
now;
|
|
153
|
+
id;
|
|
154
|
+
constructor(repository, options = {}) {
|
|
155
|
+
this.repository = repository;
|
|
156
|
+
this.telemetry = options.telemetry;
|
|
157
|
+
this.redactor = options.redactor ?? new SecretRedactor({
|
|
158
|
+
environment: process.env,
|
|
159
|
+
maxStringLength: MAX_PERSISTED_RESULT_CHARACTERS + 1,
|
|
160
|
+
});
|
|
161
|
+
this.now = options.now ?? Date.now;
|
|
162
|
+
this.id = options.id ?? randomUUID;
|
|
163
|
+
}
|
|
164
|
+
async execute(input, invoke) {
|
|
165
|
+
const startedMs = this.now();
|
|
166
|
+
const executionId = this.id();
|
|
167
|
+
const startedAt = timestamp(startedMs);
|
|
168
|
+
const requestId = input.extra.requestId;
|
|
169
|
+
const durableRequestId = sanitizeRequestId(requestId, this.redactor);
|
|
170
|
+
const toolName = input.request.params.name;
|
|
171
|
+
const operation = this.startTelemetry(input, executionId, startedMs);
|
|
172
|
+
const running = NativeExecutionRecordSchema.parse({
|
|
173
|
+
id: executionId,
|
|
174
|
+
serverId: NATIVE_SERVER_ID,
|
|
175
|
+
status: "running",
|
|
176
|
+
createdAt: startedAt,
|
|
177
|
+
startedAt,
|
|
178
|
+
attemptCount: 1,
|
|
179
|
+
request: {
|
|
180
|
+
requestId: durableRequestId,
|
|
181
|
+
toolName: this.redactor.redactText(toolName).slice(0, 1_024),
|
|
182
|
+
arguments: sanitizeArguments(input.request.params.arguments, this.redactor),
|
|
183
|
+
transport: input.transport,
|
|
184
|
+
...(input.extra.sessionId === undefined
|
|
185
|
+
? {}
|
|
186
|
+
: { sessionId: this.redactor.redactText(input.extra.sessionId).slice(0, 2_048) }),
|
|
187
|
+
...(input.request.params._meta === undefined
|
|
188
|
+
? {}
|
|
189
|
+
: { meta: sanitizeRecord(input.request.params._meta, this.redactor) }),
|
|
190
|
+
},
|
|
191
|
+
protocolEvents: [requestEvent(input, durableRequestId, startedAt, this.redactor)],
|
|
192
|
+
telemetryCorrelation: correlation(executionId, operation?.correlation),
|
|
193
|
+
});
|
|
194
|
+
try {
|
|
195
|
+
await this.repository.save(running);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
operation?.end({
|
|
199
|
+
endTimeMs: this.now(),
|
|
200
|
+
jsonRpcRequestId: requestId,
|
|
201
|
+
errorType: "evidence_persistence_failed",
|
|
202
|
+
});
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
let result;
|
|
206
|
+
try {
|
|
207
|
+
const rawResult = await (operation?.run(invoke) ?? invoke());
|
|
208
|
+
result = CallToolResultSchema.parse(rawResult);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
const completedMs = this.now();
|
|
212
|
+
const completedAt = timestamp(completedMs);
|
|
213
|
+
const failedRecord = NativeExecutionRecordSchema.parse({
|
|
214
|
+
...running,
|
|
215
|
+
status: "failed",
|
|
216
|
+
completedAt,
|
|
217
|
+
durationMs: duration(startedMs, completedMs),
|
|
218
|
+
error: errorEvidence(error, this.redactor),
|
|
219
|
+
protocolEvents: [
|
|
220
|
+
...running.protocolEvents,
|
|
221
|
+
errorEvent(durableRequestId, toolName, completedAt, error, this.redactor),
|
|
222
|
+
],
|
|
223
|
+
telemetryCorrelation: correlation(executionId, operation?.correlation),
|
|
224
|
+
});
|
|
225
|
+
try {
|
|
226
|
+
await this.repository.save(failedRecord);
|
|
227
|
+
}
|
|
228
|
+
catch (persistenceError) {
|
|
229
|
+
operation?.end({
|
|
230
|
+
endTimeMs: this.now(),
|
|
231
|
+
jsonRpcRequestId: requestId,
|
|
232
|
+
errorType: "evidence_persistence_failed",
|
|
233
|
+
});
|
|
234
|
+
throw persistenceError;
|
|
235
|
+
}
|
|
236
|
+
operation?.end({
|
|
237
|
+
endTimeMs: completedMs,
|
|
238
|
+
jsonRpcRequestId: requestId,
|
|
239
|
+
errorType: errorType(error),
|
|
240
|
+
...(error instanceof McpError
|
|
241
|
+
? { rpcResponseStatusCode: String(error.code) }
|
|
242
|
+
: {}),
|
|
243
|
+
});
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
246
|
+
const completedMs = this.now();
|
|
247
|
+
const completedAt = timestamp(completedMs);
|
|
248
|
+
const durableResult = sanitizePersistedToolResult(result, this.redactor);
|
|
249
|
+
const evidence = extractExecutionEvidence(result);
|
|
250
|
+
const toolFailed = result.isError === true;
|
|
251
|
+
const completedRecord = NativeExecutionRecordSchema.parse({
|
|
252
|
+
...running,
|
|
253
|
+
status: toolFailed ? "failed" : "succeeded",
|
|
254
|
+
completedAt,
|
|
255
|
+
durationMs: duration(startedMs, completedMs),
|
|
256
|
+
result: durableResult,
|
|
257
|
+
...(toolFailed
|
|
258
|
+
? {
|
|
259
|
+
error: {
|
|
260
|
+
code: "tool_result_error",
|
|
261
|
+
message: "The MCP tool returned an error result.",
|
|
262
|
+
},
|
|
263
|
+
}
|
|
264
|
+
: {}),
|
|
265
|
+
...evidenceFields(evidence, this.redactor),
|
|
266
|
+
protocolEvents: [
|
|
267
|
+
...running.protocolEvents,
|
|
268
|
+
resultEvent(durableRequestId, completedAt, durableResult),
|
|
269
|
+
],
|
|
270
|
+
telemetryCorrelation: correlation(executionId, operation?.correlation),
|
|
271
|
+
});
|
|
272
|
+
try {
|
|
273
|
+
await this.repository.save(completedRecord);
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
operation?.end({
|
|
277
|
+
endTimeMs: this.now(),
|
|
278
|
+
jsonRpcRequestId: requestId,
|
|
279
|
+
errorType: "evidence_persistence_failed",
|
|
280
|
+
});
|
|
281
|
+
throw error;
|
|
282
|
+
}
|
|
283
|
+
operation?.end({
|
|
284
|
+
endTimeMs: completedMs,
|
|
285
|
+
jsonRpcRequestId: requestId,
|
|
286
|
+
...(toolFailed ? { errorType: "tool_error" } : {}),
|
|
287
|
+
});
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
close() {
|
|
291
|
+
return this.telemetry?.close?.() ?? Promise.resolve();
|
|
292
|
+
}
|
|
293
|
+
get telemetryEnabled() {
|
|
294
|
+
return this.telemetry !== undefined;
|
|
295
|
+
}
|
|
296
|
+
startTelemetry(input, executionId, startedMs) {
|
|
297
|
+
try {
|
|
298
|
+
return this.telemetry?.startOperation({
|
|
299
|
+
role: "server",
|
|
300
|
+
method: "tools/call",
|
|
301
|
+
serverId: NATIVE_SERVER_ID,
|
|
302
|
+
toolName: input.request.params.name,
|
|
303
|
+
transport: input.transport,
|
|
304
|
+
...(input.extra.sessionId === undefined ? {} : { mcpSessionId: input.extra.sessionId }),
|
|
305
|
+
jsonRpcProtocolVersion: "2.0",
|
|
306
|
+
executionId,
|
|
307
|
+
remotePropagation: propagationCarrier(input.request.params._meta),
|
|
308
|
+
startTimeMs: startedMs,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const instrumentedServers = new WeakSet();
|
|
317
|
+
const nativeTelemetryServers = new WeakSet();
|
|
318
|
+
/** Wrap the SDK's single tools/call dispatcher, covering all current and future tools. */
|
|
319
|
+
export function installNativeExecutionRecording(server, runtime, transport) {
|
|
320
|
+
if (instrumentedServers.has(server))
|
|
321
|
+
return;
|
|
322
|
+
instrumentedServers.add(server);
|
|
323
|
+
if (runtime.telemetryEnabled)
|
|
324
|
+
nativeTelemetryServers.add(server);
|
|
325
|
+
const lowLevel = server.server;
|
|
326
|
+
const original = lowLevel.setRequestHandler.bind(server.server);
|
|
327
|
+
lowLevel.setRequestHandler = (schema, handler) => {
|
|
328
|
+
if (schema !== CallToolRequestSchema) {
|
|
329
|
+
original(schema, handler);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
original(schema, async (request, extra) => {
|
|
333
|
+
const validated = CallToolRequestSchema.parse(request);
|
|
334
|
+
return runtime.execute({ request: validated, extra, transport }, () => handler(validated, extra));
|
|
335
|
+
});
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
export function hasNativeExecutionTelemetry(server) {
|
|
339
|
+
return typeof server === "object" &&
|
|
340
|
+
server !== null &&
|
|
341
|
+
nativeTelemetryServers.has(server);
|
|
342
|
+
}
|
|
343
|
+
let defaultRuntime;
|
|
344
|
+
export function defaultNativeExecutionRuntime(environment = process.env) {
|
|
345
|
+
defaultRuntime ??= createDefaultRuntime(environment);
|
|
346
|
+
return defaultRuntime;
|
|
347
|
+
}
|
|
348
|
+
export async function closeDefaultNativeExecutionRuntime() {
|
|
349
|
+
const runtime = defaultRuntime;
|
|
350
|
+
defaultRuntime = undefined;
|
|
351
|
+
await runtime?.close();
|
|
352
|
+
}
|
|
353
|
+
function createDefaultRuntime(environment) {
|
|
354
|
+
const redactor = new SecretRedactor({
|
|
355
|
+
environment,
|
|
356
|
+
maxStringLength: MAX_PERSISTED_RESULT_CHARACTERS + 1,
|
|
357
|
+
});
|
|
358
|
+
const repository = new FileNativeExecutionRepository({ environment, redactor });
|
|
359
|
+
let telemetry;
|
|
360
|
+
try {
|
|
361
|
+
telemetry = new McpTelemetry(environment, redactor);
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
telemetry = undefined;
|
|
365
|
+
}
|
|
366
|
+
return new NativeExecutionRuntime(repository, { redactor, telemetry });
|
|
367
|
+
}
|
|
368
|
+
function nativeStatePath(environment) {
|
|
369
|
+
return environment.QYL_MCP_NATIVE_STATE_PATH
|
|
370
|
+
?? join(homedir(), ".qyl", "mcp-native-executions.json");
|
|
371
|
+
}
|
|
372
|
+
function requestEvent(input, requestId, at, redactor) {
|
|
373
|
+
return {
|
|
374
|
+
sequence: 1,
|
|
375
|
+
timestamp: at,
|
|
376
|
+
direction: "inbound",
|
|
377
|
+
messageKind: "request",
|
|
378
|
+
jsonrpc: "2.0",
|
|
379
|
+
requestId,
|
|
380
|
+
method: "tools/call",
|
|
381
|
+
payload: boundPayload(redactor.redact({
|
|
382
|
+
jsonrpc: "2.0",
|
|
383
|
+
id: requestId,
|
|
384
|
+
method: "tools/call",
|
|
385
|
+
params: input.request.params,
|
|
386
|
+
})),
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
function resultEvent(requestId, at, result) {
|
|
390
|
+
return {
|
|
391
|
+
sequence: 2,
|
|
392
|
+
timestamp: at,
|
|
393
|
+
direction: "outbound",
|
|
394
|
+
messageKind: "result",
|
|
395
|
+
jsonrpc: "2.0",
|
|
396
|
+
requestId,
|
|
397
|
+
method: "tools/call",
|
|
398
|
+
payload: boundPayload({ jsonrpc: "2.0", id: requestId, result }),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
function errorEvent(requestId, toolName, at, error, redactor) {
|
|
402
|
+
const evidence = errorEvidence(error, redactor);
|
|
403
|
+
return {
|
|
404
|
+
sequence: 2,
|
|
405
|
+
timestamp: at,
|
|
406
|
+
direction: "outbound",
|
|
407
|
+
messageKind: "error",
|
|
408
|
+
jsonrpc: "2.0",
|
|
409
|
+
requestId,
|
|
410
|
+
method: "tools/call",
|
|
411
|
+
payload: boundPayload({
|
|
412
|
+
jsonrpc: "2.0",
|
|
413
|
+
id: requestId,
|
|
414
|
+
error: {
|
|
415
|
+
code: error instanceof McpError ? error.code : ErrorCode.InternalError,
|
|
416
|
+
message: evidence.message,
|
|
417
|
+
data: { toolName: redactor.redactText(toolName).slice(0, 1_024) },
|
|
418
|
+
},
|
|
419
|
+
}),
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
function errorEvidence(error, redactor) {
|
|
423
|
+
const message = redactor.redactText(error instanceof Error ? error.message : String(error));
|
|
424
|
+
return {
|
|
425
|
+
code: errorType(error),
|
|
426
|
+
message: message.trim().length === 0 ? "Native MCP tool execution failed." : message.slice(0, 4_096),
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
function errorType(error) {
|
|
430
|
+
if (error instanceof McpError)
|
|
431
|
+
return `mcp_${error.code}`;
|
|
432
|
+
if (error instanceof Error && /^[A-Za-z][A-Za-z0-9]*$/u.test(error.name)) {
|
|
433
|
+
return error.name.slice(0, 128);
|
|
434
|
+
}
|
|
435
|
+
return "native_tool_failure";
|
|
436
|
+
}
|
|
437
|
+
function correlation(executionId, span) {
|
|
438
|
+
return {
|
|
439
|
+
executionId,
|
|
440
|
+
traceIds: span === undefined ? [] : [span.traceId],
|
|
441
|
+
spanIds: span === undefined ? [] : [span.spanId],
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
function propagationCarrier(value) {
|
|
445
|
+
if (!isRecord(value))
|
|
446
|
+
return undefined;
|
|
447
|
+
const entries = Object.entries(value)
|
|
448
|
+
.filter((entry) => typeof entry[1] === "string");
|
|
449
|
+
return entries.length === 0 ? undefined : Object.fromEntries(entries);
|
|
450
|
+
}
|
|
451
|
+
function sanitizeArguments(value, redactor) {
|
|
452
|
+
return sanitizeRecord(value ?? {}, redactor);
|
|
453
|
+
}
|
|
454
|
+
function sanitizeRecord(value, redactor) {
|
|
455
|
+
const sanitized = redactor.redact(value);
|
|
456
|
+
if (!isRecord(sanitized))
|
|
457
|
+
return {};
|
|
458
|
+
const bounded = boundPayload(sanitized);
|
|
459
|
+
return isRecord(bounded) ? bounded : {};
|
|
460
|
+
}
|
|
461
|
+
function boundPayload(value) {
|
|
462
|
+
const serialized = JSON.stringify(value);
|
|
463
|
+
if (serialized === undefined || serialized.length <= MAX_PROTOCOL_PAYLOAD_CHARACTERS) {
|
|
464
|
+
return value;
|
|
465
|
+
}
|
|
466
|
+
return {
|
|
467
|
+
truncated: true,
|
|
468
|
+
originalCharacters: serialized.length,
|
|
469
|
+
preview: `${serialized.slice(0, MAX_PROTOCOL_PAYLOAD_CHARACTERS - 1)}…`,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
function evidenceFields(evidence, redactor) {
|
|
473
|
+
const source = evidence.cost?.source === undefined
|
|
474
|
+
? undefined
|
|
475
|
+
: redactor.redactText(evidence.cost.source).trim().slice(0, 256);
|
|
476
|
+
const cost = evidence.cost === undefined
|
|
477
|
+
? undefined
|
|
478
|
+
: {
|
|
479
|
+
amountUsd: evidence.cost.amountUsd,
|
|
480
|
+
estimated: evidence.cost.estimated,
|
|
481
|
+
...(source === undefined || source.length === 0 ? {} : { source }),
|
|
482
|
+
};
|
|
483
|
+
return {
|
|
484
|
+
...(evidence.tokenUsage === undefined ? {} : { tokenUsage: evidence.tokenUsage }),
|
|
485
|
+
...(cost === undefined ? {} : { cost }),
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
function sanitizeRequestId(value, redactor) {
|
|
489
|
+
return typeof value === "string"
|
|
490
|
+
? redactor.redactText(value).slice(0, 2_048)
|
|
491
|
+
: value;
|
|
492
|
+
}
|
|
493
|
+
function duration(startedMs, completedMs) {
|
|
494
|
+
return Math.max(0, completedMs - startedMs);
|
|
495
|
+
}
|
|
496
|
+
function timestamp(value) {
|
|
497
|
+
return new Date(value).toISOString();
|
|
498
|
+
}
|
|
499
|
+
function isRecord(value) {
|
|
500
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
501
|
+
}
|
|
502
|
+
function positiveInteger(value, name) {
|
|
503
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
504
|
+
throw new Error(`${name} must be a positive integer.`);
|
|
505
|
+
}
|
|
506
|
+
return value;
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=native-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-execution.js","sourceRoot":"","sources":["../src/native-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs a Qyl read operation in a context that self-telemetry exporters must
|
|
3
|
+
* ignore. This prevents the workbench from recursively observing the queries
|
|
4
|
+
* it performs to retrieve observability evidence.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runWithObservabilitySelfExportSuppressed<T>(operation: () => T): T;
|
|
7
|
+
/** True only while the current async call chain is reading Qyl evidence. */
|
|
8
|
+
export declare function isObservabilitySelfExportSuppressed(): boolean;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const selfExportSuppression = new AsyncLocalStorage();
|
|
3
|
+
/**
|
|
4
|
+
* Runs a Qyl read operation in a context that self-telemetry exporters must
|
|
5
|
+
* ignore. This prevents the workbench from recursively observing the queries
|
|
6
|
+
* it performs to retrieve observability evidence.
|
|
7
|
+
*/
|
|
8
|
+
export function runWithObservabilitySelfExportSuppressed(operation) {
|
|
9
|
+
return selfExportSuppression.run(true, operation);
|
|
10
|
+
}
|
|
11
|
+
/** True only while the current async call chain is reading Qyl evidence. */
|
|
12
|
+
export function isObservabilitySelfExportSuppressed() {
|
|
13
|
+
return selfExportSuppression.getStore() === true;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=observability-suppression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability-suppression.js","sourceRoot":"","sources":["../src/observability-suppression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,qBAAqB,GAAG,IAAI,iBAAiB,EAAQ,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,wCAAwC,CAAI,SAAkB;IAC1E,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mCAAmC;IAC/C,OAAO,qBAAqB,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface SecretRedactorOptions {
|
|
2
|
+
environment?: Readonly<Record<string, string | undefined>>;
|
|
3
|
+
secretValues?: readonly string[];
|
|
4
|
+
replacement?: string;
|
|
5
|
+
maxDepth?: number;
|
|
6
|
+
maxStringLength?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Redacts credentials from diagnostic values without retaining or emitting the
|
|
10
|
+
* secret source. The result is safe to serialize but deliberately does not
|
|
11
|
+
* preserve object prototypes.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SecretRedactor {
|
|
14
|
+
readonly replacement: string;
|
|
15
|
+
private readonly maxDepth;
|
|
16
|
+
private readonly maxStringLength;
|
|
17
|
+
private readonly registeredSecretValues;
|
|
18
|
+
private secretValues;
|
|
19
|
+
constructor(options?: SecretRedactorOptions);
|
|
20
|
+
/** Registers credential values resolved after construction. */
|
|
21
|
+
registerSecretValues(values: readonly string[]): void;
|
|
22
|
+
redact(value: unknown): unknown;
|
|
23
|
+
redactText(value: string): string;
|
|
24
|
+
redactUri(value: string): string;
|
|
25
|
+
private redactValue;
|
|
26
|
+
private redactTextWithoutUrls;
|
|
27
|
+
private refreshSecretValues;
|
|
28
|
+
}
|
|
29
|
+
export declare function isCredentialKey(key: string): boolean;
|
|
30
|
+
export declare function validateEnvironmentVariableName(name: string): void;
|