fa-mcp-sdk 0.4.124 → 0.4.134
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/cli-template/AGENTS.md +1 -1
- package/cli-template/FA-MCP-SDK-DOC/00-FA-MCP-SDK-index.md +19 -5
- package/cli-template/FA-MCP-SDK-DOC/02-1-tools-and-api.md +63 -0
- package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +133 -5
- package/cli-template/FA-MCP-SDK-DOC/07-testing-and-operations.md +85 -0
- package/cli-template/FA-MCP-SDK-DOC/08-agent-tester-and-headless-api.md +284 -0
- package/cli-template/FA-MCP-SDK-DOC/10-mcp-apps.md +90 -0
- package/cli-template/examples/mcp-apps-canonical/README.md +62 -0
- package/cli-template/examples/mcp-apps-canonical/server.ts +95 -0
- package/cli-template/examples/mcp-apps-canonical/widget/index.html +147 -0
- package/cli-template/package.json +2 -1
- package/config/_local.yaml +6 -0
- package/config/custom-environment-variables.yaml +5 -0
- package/config/default.yaml +15 -0
- package/dist/core/_types_/config.d.ts +20 -0
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/_types_/types.d.ts +13 -0
- package/dist/core/_types_/types.d.ts.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.js +79 -2
- package/dist/core/agent-tester/agent-tester-router.js.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.d.ts +14 -0
- package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.js +101 -1
- package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts +1 -0
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.js +46 -19
- package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -1
- package/dist/core/agent-tester/services/mcp-apps-utils.d.ts +22 -0
- package/dist/core/agent-tester/services/mcp-apps-utils.d.ts.map +1 -0
- package/dist/core/agent-tester/services/mcp-apps-utils.js +77 -0
- package/dist/core/agent-tester/services/mcp-apps-utils.js.map +1 -0
- package/dist/core/agent-tester/types.d.ts +65 -0
- package/dist/core/agent-tester/types.d.ts.map +1 -1
- package/dist/core/index.d.ts +4 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/init-mcp-server.d.ts.map +1 -1
- package/dist/core/init-mcp-server.js +46 -5
- package/dist/core/init-mcp-server.js.map +1 -1
- package/dist/core/mcp/builtin-debug-tools.d.ts +41 -0
- package/dist/core/mcp/builtin-debug-tools.d.ts.map +1 -0
- package/dist/core/mcp/builtin-debug-tools.js +75 -0
- package/dist/core/mcp/builtin-debug-tools.js.map +1 -0
- package/dist/core/mcp/debug-trace.d.ts +26 -0
- package/dist/core/mcp/debug-trace.d.ts.map +1 -0
- package/dist/core/mcp/debug-trace.js +79 -0
- package/dist/core/mcp/debug-trace.js.map +1 -0
- package/dist/core/mcp/prompts.d.ts.map +1 -1
- package/dist/core/mcp/prompts.js +11 -0
- package/dist/core/mcp/prompts.js.map +1 -1
- package/dist/core/mcp/resources.d.ts.map +1 -1
- package/dist/core/mcp/resources.js +11 -0
- package/dist/core/mcp/resources.js.map +1 -1
- package/dist/core/utils/formatToolResult.d.ts +39 -0
- package/dist/core/utils/formatToolResult.d.ts.map +1 -1
- package/dist/core/utils/formatToolResult.js +58 -0
- package/dist/core/utils/formatToolResult.js.map +1 -1
- package/dist/core/utils/testing/debug-tool.d.ts +35 -0
- package/dist/core/utils/testing/debug-tool.d.ts.map +1 -0
- package/dist/core/utils/testing/debug-tool.js +146 -0
- package/dist/core/utils/testing/debug-tool.js.map +1 -0
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +26 -1
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/agent-tester/index.html +55 -0
- package/dist/core/web/static/agent-tester/script.js +986 -9
- package/dist/core/web/static/agent-tester/styles.css +416 -0
- package/package.json +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { MCP_APPS_RESOURCE_MIME_TYPE } from '../../mcp/mcp-apps.js';
|
|
2
|
+
/**
|
|
3
|
+
* Scan a `CallToolResult.content[]` for an embedded `mcp-app` resource. The
|
|
4
|
+
* spec allows servers to either embed the resource directly or expose it via
|
|
5
|
+
* `tool._meta.ui.resourceUri` for the host to fetch — this helper handles the
|
|
6
|
+
* embedded case.
|
|
7
|
+
*/
|
|
8
|
+
export function findEmbeddedAppResource(result) {
|
|
9
|
+
if (!result || typeof result !== 'object') {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const { content } = result;
|
|
13
|
+
if (!Array.isArray(content)) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
for (const block of content) {
|
|
17
|
+
if (!block || typeof block !== 'object') {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const r = block.type === 'resource' ? block.resource : null;
|
|
21
|
+
if (!r || typeof r !== 'object') {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (r.mimeType === MCP_APPS_RESOURCE_MIME_TYPE && typeof r.text === 'string') {
|
|
25
|
+
const ui = {
|
|
26
|
+
uri: typeof r.uri === 'string' ? r.uri : '',
|
|
27
|
+
mimeType: r.mimeType,
|
|
28
|
+
text: r.text,
|
|
29
|
+
};
|
|
30
|
+
if (r._meta?.ui) {
|
|
31
|
+
ui.meta = r._meta.ui;
|
|
32
|
+
}
|
|
33
|
+
return ui;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch a UI resource via `resources/read`. Returns `undefined` on any error
|
|
40
|
+
* — callers are expected to log; the host MUST still ship a meaningful
|
|
41
|
+
* text-only response when no UI resource is available.
|
|
42
|
+
*/
|
|
43
|
+
export async function readUiResource(client, uri) {
|
|
44
|
+
try {
|
|
45
|
+
const resource = await client.readResource({ uri });
|
|
46
|
+
const contents = Array.isArray(resource?.contents) ? resource.contents : [];
|
|
47
|
+
const ui = contents.find((c) => c && typeof c.text === 'string' && c.mimeType === MCP_APPS_RESOURCE_MIME_TYPE);
|
|
48
|
+
if (ui) {
|
|
49
|
+
const out = {
|
|
50
|
+
uri: typeof ui.uri === 'string' ? ui.uri : uri,
|
|
51
|
+
mimeType: ui.mimeType,
|
|
52
|
+
text: ui.text,
|
|
53
|
+
};
|
|
54
|
+
if (ui._meta?.ui) {
|
|
55
|
+
out.meta = ui._meta.ui;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* caller decides whether to log */
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Read `_meta.ui.resourceUri` from a tool definition. Supports both the
|
|
67
|
+
* nested (`_meta.ui.resourceUri`) and the legacy flat (`_meta["ui/resourceUri"]`)
|
|
68
|
+
* shape, matching `@modelcontextprotocol/ext-apps/server` semantics.
|
|
69
|
+
*/
|
|
70
|
+
export function getToolUiResourceUri(tool) {
|
|
71
|
+
if (!tool) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const v = tool._meta?.ui?.resourceUri ?? tool._meta?.['ui/resourceUri'];
|
|
75
|
+
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mcp-apps-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-apps-utils.js","sourceRoot":"","sources":["../../../../src/core/agent-tester/services/mcp-apps-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,13 @@ export interface TesterMcpConfig {
|
|
|
22
22
|
transport: 'http' | 'sse';
|
|
23
23
|
headers?: Record<string, string>;
|
|
24
24
|
name?: string;
|
|
25
|
+
/**
|
|
26
|
+
* When true, the underlying MCP `Client` is created with
|
|
27
|
+
* `capabilities.extensions["io.modelcontextprotocol/ui"]` so the server can
|
|
28
|
+
* branch between text-only and UI-augmented tool variants. Cache key includes
|
|
29
|
+
* this flag, so toggling it forces a fresh client.
|
|
30
|
+
*/
|
|
31
|
+
appMode?: boolean;
|
|
25
32
|
}
|
|
26
33
|
export interface TesterModelConfig {
|
|
27
34
|
baseURL?: string;
|
|
@@ -41,6 +48,12 @@ export interface ITesterChatRequest {
|
|
|
41
48
|
modelConfig?: TesterModelConfig;
|
|
42
49
|
model?: string;
|
|
43
50
|
mcpServerUrl?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Mirror of `mcpConfig.appMode` available at the request level for the
|
|
53
|
+
* headless `/api/chat/test` API where callers may omit `mcpConfig` and let
|
|
54
|
+
* the server build it from defaults.
|
|
55
|
+
*/
|
|
56
|
+
appMode?: boolean;
|
|
44
57
|
}
|
|
45
58
|
export interface ITesterChatResponse {
|
|
46
59
|
id: string;
|
|
@@ -51,11 +64,53 @@ export interface ITesterChatResponse {
|
|
|
51
64
|
tools_used: string[];
|
|
52
65
|
mcp_server?: string;
|
|
53
66
|
};
|
|
67
|
+
/**
|
|
68
|
+
* Populated when the request ran in app-mode. Each entry mirrors a tool
|
|
69
|
+
* invocation with its full result plus (when available) the UI resource the
|
|
70
|
+
* host should render. Order matches tool-call order in the LLM turns.
|
|
71
|
+
*/
|
|
72
|
+
appCalls?: IMcpAppCall[];
|
|
54
73
|
}
|
|
55
74
|
export interface ITesterMcpTool {
|
|
56
75
|
name: string;
|
|
57
76
|
description: string;
|
|
58
77
|
inputSchema: any;
|
|
78
|
+
/**
|
|
79
|
+
* Server-supplied tool metadata. We preserve the raw map so callers can read
|
|
80
|
+
* `_meta.ui.resourceUri` (MCP Apps) and other extensions without parsing
|
|
81
|
+
* server responses themselves.
|
|
82
|
+
*/
|
|
83
|
+
_meta?: Record<string, any>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Single tool invocation paired with the (optional) MCP App UI resource that
|
|
87
|
+
* the host would render. Returned alongside chat responses when `appMode=true`.
|
|
88
|
+
*/
|
|
89
|
+
export interface IMcpAppCall {
|
|
90
|
+
/** OpenAI `tool_call_id` — stable correlator between the LLM message, the tool result, and the rendered widget. */
|
|
91
|
+
callId: string;
|
|
92
|
+
toolName: string;
|
|
93
|
+
/** Arguments the model passed to the tool — forwarded to the View via `ui/notifications/tool-input`. */
|
|
94
|
+
arguments?: Record<string, unknown>;
|
|
95
|
+
/** Full, untruncated `CallToolResult` from the MCP server. */
|
|
96
|
+
result: any;
|
|
97
|
+
/**
|
|
98
|
+
* UI resource the host would render. Absent when the tool has no
|
|
99
|
+
* `_meta.ui.resourceUri` and the result does not embed an `mcp-app` resource.
|
|
100
|
+
*/
|
|
101
|
+
uiResource?: IMcpAppUiResource;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* UI resource payload extracted from either a tool's `_meta.ui.resourceUri`
|
|
105
|
+
* (via `resources/read`) or an embedded resource in the tool result.
|
|
106
|
+
*/
|
|
107
|
+
export interface IMcpAppUiResource {
|
|
108
|
+
uri: string;
|
|
109
|
+
mimeType: string;
|
|
110
|
+
/** Inline HTML. Servers MAY also use `blob` (base64) — we surface `text` only for the MVP. */
|
|
111
|
+
text: string;
|
|
112
|
+
/** `_meta.ui` from the resource content (CSP, permissions, prefersBorder, ...). */
|
|
113
|
+
meta?: Record<string, any>;
|
|
59
114
|
}
|
|
60
115
|
export interface ITesterCachedMcpClient {
|
|
61
116
|
client: any;
|
|
@@ -79,12 +134,16 @@ export interface TesterMcpServerConfig {
|
|
|
79
134
|
lastConnected?: Date;
|
|
80
135
|
connectionError?: string;
|
|
81
136
|
headers?: Record<string, string>;
|
|
137
|
+
/** Whether the active session advertised MCP Apps UI capability. */
|
|
138
|
+
appMode?: boolean;
|
|
82
139
|
}
|
|
83
140
|
export interface TesterMcpConnectionRequest {
|
|
84
141
|
name: string;
|
|
85
142
|
url: string;
|
|
86
143
|
transport: 'http' | 'sse';
|
|
87
144
|
headers?: Record<string, string>;
|
|
145
|
+
/** Advertise MCP Apps UI capability during `initialize`. */
|
|
146
|
+
appMode?: boolean;
|
|
88
147
|
}
|
|
89
148
|
export interface TesterMcpConnectionResponse {
|
|
90
149
|
success: boolean;
|
|
@@ -115,6 +174,12 @@ export interface ITesterTraceTurn {
|
|
|
115
174
|
result: unknown;
|
|
116
175
|
duration_ms?: number;
|
|
117
176
|
}[];
|
|
177
|
+
/**
|
|
178
|
+
* Present when the request ran in app-mode. Captures which UI resources the
|
|
179
|
+
* server would have delivered to a real host. Headless never renders — this
|
|
180
|
+
* is purely a trace for automated assertions.
|
|
181
|
+
*/
|
|
182
|
+
app_calls?: IMcpAppCall[];
|
|
118
183
|
}
|
|
119
184
|
export interface ITesterTraceData {
|
|
120
185
|
system_prompt_sent?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/agent-tester/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/agent-tester/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ getMultiAuthError, } from './auth/middleware.js';
|
|
|
20
20
|
export { checkMultiAuth, detectAuthConfiguration, logAuthConfiguration, getAuthHeadersForTests, } from './auth/multi-auth.js';
|
|
21
21
|
export type { AuthDetectionResult, AuthResult, AuthType, ICheckTokenResult, ITokenPayload, TTokenType, } from './auth/types.js';
|
|
22
22
|
export { initMcpServer, gracefulShutdown } from './init-mcp-server.js';
|
|
23
|
-
export { formatToolResult, getJsonFromResult, asJson, asTextContent } from './utils/formatToolResult.js';
|
|
23
|
+
export { formatToolResult, formatToolError, getJsonFromResult, asJson, asJsonError, asTextContent, asTextError, } from './utils/formatToolResult.js';
|
|
24
24
|
export { trim, isMainModule, isNonEmptyObject, isObject, ppj, encodeSvgForDataUri, getAsset, normalizeHeaders, getTools, } from './utils/utils.js';
|
|
25
25
|
export { isPortAvailable, checkPortAvailability } from './utils/port-checker.js';
|
|
26
26
|
export { ROOT_PROJECT_DIR } from './constants.js';
|
|
@@ -34,6 +34,9 @@ export { McpStreamableHttpClient } from './utils/testing/McpStreamableHttpClient
|
|
|
34
34
|
export { initADGroupChecker } from './ad/group-checker.js';
|
|
35
35
|
export { configureOpenAPI, createSwaggerUIAssetsMiddleware, type OpenAPISpecResponse, type SwaggerUIConfig, } from './web/openapi.js';
|
|
36
36
|
export { debugTokenAuth, debugMcpTool, debugMcpResource, debugMcpPrompt, debugMcpNotification } from './debug.js';
|
|
37
|
+
export { configureDebugSink, emitTrace, initDebugTraceFromConfig } from './mcp/debug-trace.js';
|
|
38
|
+
export { BUILTIN_MCP_DEBUG_TOOLS, BUILTIN_MCP_DEBUG_TOOL_NAMES, MCP_DEBUG_LOG_TOOL_NAME, MCP_DEBUG_REFRESH_TOOL_NAME, handleBuiltinDebugTool, isBuiltinDebugTool, } from './mcp/builtin-debug-tools.js';
|
|
39
|
+
export { DEBUG_TOOL, DEBUG_TOOL_NAME, handleDebugTool, registerDebugTool } from './utils/testing/debug-tool.js';
|
|
37
40
|
export { Logger } from 'af-logger-ts';
|
|
38
41
|
export { createAgentTesterRouter } from './agent-tester/agent-tester-router.js';
|
|
39
42
|
export { checkLlm } from './agent-tester/check-llm.js';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjF,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAsB,gBAAgB,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,8HAGpD;AAED,OAAO,EACL,YAAY,EAAE,sCAAsC;AACpD,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.js
CHANGED
|
@@ -17,7 +17,7 @@ getMultiAuthError, // Programmatic authentication checking
|
|
|
17
17
|
} from './auth/middleware.js';
|
|
18
18
|
export { checkMultiAuth, detectAuthConfiguration, logAuthConfiguration, getAuthHeadersForTests, } from './auth/multi-auth.js';
|
|
19
19
|
export { initMcpServer, gracefulShutdown } from './init-mcp-server.js';
|
|
20
|
-
export { formatToolResult, getJsonFromResult, asJson, asTextContent } from './utils/formatToolResult.js';
|
|
20
|
+
export { formatToolResult, formatToolError, getJsonFromResult, asJson, asJsonError, asTextContent, asTextError, } from './utils/formatToolResult.js';
|
|
21
21
|
export { trim, isMainModule, isNonEmptyObject, isObject, ppj, encodeSvgForDataUri, getAsset, normalizeHeaders, getTools, } from './utils/utils.js';
|
|
22
22
|
export { isPortAvailable, checkPortAvailability } from './utils/port-checker.js';
|
|
23
23
|
export { ROOT_PROJECT_DIR } from './constants.js';
|
|
@@ -32,6 +32,9 @@ export { initADGroupChecker } from './ad/group-checker.js';
|
|
|
32
32
|
// OpenAPI/Swagger utilities
|
|
33
33
|
export { configureOpenAPI, createSwaggerUIAssetsMiddleware, } from './web/openapi.js';
|
|
34
34
|
export { debugTokenAuth, debugMcpTool, debugMcpResource, debugMcpPrompt, debugMcpNotification } from './debug.js';
|
|
35
|
+
export { configureDebugSink, emitTrace, initDebugTraceFromConfig } from './mcp/debug-trace.js';
|
|
36
|
+
export { BUILTIN_MCP_DEBUG_TOOLS, BUILTIN_MCP_DEBUG_TOOL_NAMES, MCP_DEBUG_LOG_TOOL_NAME, MCP_DEBUG_REFRESH_TOOL_NAME, handleBuiltinDebugTool, isBuiltinDebugTool, } from './mcp/builtin-debug-tools.js';
|
|
37
|
+
export { DEBUG_TOOL, DEBUG_TOOL_NAME, handleDebugTool, registerDebugTool } from './utils/testing/debug-tool.js';
|
|
35
38
|
export { Logger } from 'af-logger-ts';
|
|
36
39
|
export { createAgentTesterRouter } from './agent-tester/agent-tester-router.js';
|
|
37
40
|
export { checkLlm } from './agent-tester/check-llm.js';
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,UAAU,GACX,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAG,IAAW;IACnD,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACjG,OAAO,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,OAAO,EACL,YAAY,EAAE,sCAAsC;AACpD,iBAAiB,EAAE,uCAAuC;EAC3D,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-mcp-server.d.ts","sourceRoot":"","sources":["../../src/core/init-mcp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-mcp-server.d.ts","sourceRoot":"","sources":["../../src/core/init-mcp-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyC,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AA0HhH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,iBA6B1E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDtE"}
|
|
@@ -10,8 +10,11 @@ import { debugMcpTool } from './debug.js';
|
|
|
10
10
|
import { checkMainDB } from './db/pg-db.js';
|
|
11
11
|
import { applyLoggerSettings, fileLogger, logger as lgr } from './logger.js';
|
|
12
12
|
// Imports to modify _core functions
|
|
13
|
+
import { BUILTIN_MCP_DEBUG_TOOLS, handleBuiltinDebugTool, isBuiltinDebugTool } from './mcp/builtin-debug-tools.js';
|
|
14
|
+
import { emitTrace, initDebugTraceFromConfig, makeCorr } from './mcp/debug-trace.js';
|
|
13
15
|
import { startStdioServer } from './mcp/server-stdio.js';
|
|
14
16
|
import { checkPortAvailability } from './utils/port-checker.js';
|
|
17
|
+
import { DEBUG_TOOL, DEBUG_TOOL_NAME, handleDebugTool } from './utils/testing/debug-tool.js';
|
|
15
18
|
import { isNonEmptyObject } from './utils/utils.js';
|
|
16
19
|
import { startHttpServer } from './web/server-http.js';
|
|
17
20
|
/**
|
|
@@ -34,29 +37,65 @@ function formatToolResponseForDebug(res) {
|
|
|
34
37
|
* Decorate `data.toolHandler` so every tool call emits a request/response pair on the
|
|
35
38
|
* DEBUG=mcp:tool stream. Both HTTP and STDIO transports resolve the handler through the
|
|
36
39
|
* same `global.__MCP_PROJECT_DATA__`, so wrapping here covers all transports at once.
|
|
40
|
+
*
|
|
41
|
+
* When `appConfig.mcp.debug.builtinTools` is true, SDK-provided helper tools
|
|
42
|
+
* (`mcp-debug-log`, `mcp-debug-refresh`, `debug-tool`) are appended to the
|
|
43
|
+
* tool list and routed to their built-in handlers — never delegated to the
|
|
44
|
+
* user-supplied `toolHandler`. They carry `_meta.ui.visibility: ['app']` so
|
|
45
|
+
* MCP App hosts hide them from the LLM.
|
|
37
46
|
*/
|
|
38
47
|
function wrapProjectDataWithDebug(data) {
|
|
48
|
+
const builtinEnabled = appConfig.mcp?.debug?.builtinTools === true;
|
|
39
49
|
const originalToolHandler = data.toolHandler;
|
|
40
50
|
const wrappedToolHandler = async (params) => {
|
|
51
|
+
const { name, arguments: args } = params;
|
|
52
|
+
const corr = makeCorr();
|
|
53
|
+
const startedAt = Date.now();
|
|
41
54
|
if (debugMcpTool.enabled) {
|
|
42
|
-
const { name, arguments: args } = params;
|
|
43
55
|
debugMcpTool(`→ tool/call ${name}\n${JSON.stringify(args ?? {}, null, 2)}`);
|
|
44
56
|
}
|
|
57
|
+
emitTrace('mcp:tool', { kind: 'req', name, args: args ?? {}, corr });
|
|
45
58
|
try {
|
|
46
|
-
|
|
59
|
+
let result;
|
|
60
|
+
if (builtinEnabled && isBuiltinDebugTool(name)) {
|
|
61
|
+
result = (await handleBuiltinDebugTool(params));
|
|
62
|
+
}
|
|
63
|
+
else if (builtinEnabled && name === DEBUG_TOOL_NAME) {
|
|
64
|
+
result = (await handleDebugTool(params));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result = await originalToolHandler(params);
|
|
68
|
+
}
|
|
69
|
+
const ms = Date.now() - startedAt;
|
|
47
70
|
if (debugMcpTool.enabled) {
|
|
48
|
-
debugMcpTool(`← tool/call ${
|
|
71
|
+
debugMcpTool(`← tool/call ${name}\n${formatToolResponseForDebug(result)}`);
|
|
49
72
|
}
|
|
73
|
+
emitTrace('mcp:tool', { kind: 'res', name, ms, corr, ok: true });
|
|
50
74
|
return result;
|
|
51
75
|
}
|
|
52
76
|
catch (error) {
|
|
77
|
+
const ms = Date.now() - startedAt;
|
|
78
|
+
const errMsg = error?.message || String(error);
|
|
53
79
|
if (debugMcpTool.enabled) {
|
|
54
|
-
debugMcpTool(`✗ tool/call ${
|
|
80
|
+
debugMcpTool(`✗ tool/call ${name} threw: ${errMsg}`);
|
|
55
81
|
}
|
|
82
|
+
emitTrace('mcp:tool', { kind: 'err', name, ms, corr, error: errMsg });
|
|
56
83
|
throw error;
|
|
57
84
|
}
|
|
58
85
|
};
|
|
59
|
-
|
|
86
|
+
// Append built-in tools to the user's tool list (preserving array vs. function form).
|
|
87
|
+
let wrappedTools = data.tools;
|
|
88
|
+
if (builtinEnabled) {
|
|
89
|
+
const builtins = [...BUILTIN_MCP_DEBUG_TOOLS, DEBUG_TOOL];
|
|
90
|
+
const original = data.tools;
|
|
91
|
+
if (typeof original === 'function') {
|
|
92
|
+
wrappedTools = async (ctx) => [...(await original(ctx)), ...builtins];
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
wrappedTools = [...original, ...builtins];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { ...data, tools: wrappedTools, toolHandler: wrappedToolHandler };
|
|
60
99
|
}
|
|
61
100
|
let cyclicRegisterServiceInConsul;
|
|
62
101
|
const initCyclicRegisterServiceInConsul = async () => {
|
|
@@ -124,6 +163,8 @@ export async function initMcpServer(data) {
|
|
|
124
163
|
// Handle graceful shutdown
|
|
125
164
|
process.on('SIGINT', () => gracefulShutdown('SIGINT'));
|
|
126
165
|
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
|
|
166
|
+
// Open the JSON-lines debug sink before any traffic flows (no-op when unset)
|
|
167
|
+
initDebugTraceFromConfig();
|
|
127
168
|
// Temporarily store data in a global context for access from _core functions
|
|
128
169
|
global.__MCP_PROJECT_DATA__ = wrapProjectDataWithDebug(data);
|
|
129
170
|
const { transportType } = appConfig.mcp;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-mcp-server.js","sourceRoot":"","sources":["../../src/core/init-mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAgD,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init-mcp-server.js","sourceRoot":"","sources":["../../src/core/init-mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in MCP tools for widget logging / state refresh — activated by
|
|
3
|
+
* `appConfig.mcp.debug.builtinTools = true`.
|
|
4
|
+
*
|
|
5
|
+
* All built-in tools are marked `_meta.ui.visibility: ['app']` so MCP App
|
|
6
|
+
* hosts hide them from the LLM. They are only invoked from widgets via
|
|
7
|
+
* `app.callServerTool(...)` or from test clients that explicitly call them.
|
|
8
|
+
*
|
|
9
|
+
* Two tools are registered here; the universal `debug-tool` (stage 13) lives
|
|
10
|
+
* in {@link ../utils/testing/debug-tool.ts} and is wired through the same
|
|
11
|
+
* flag from `init-mcp-server.ts`.
|
|
12
|
+
*
|
|
13
|
+
* - **mcp-debug-log** — widget pushes a structured event into the same
|
|
14
|
+
* channel as `DEBUG=mcp:*` (via {@link emitTrace}).
|
|
15
|
+
* Frees widget code from owning a logger / network
|
|
16
|
+
* client / JWT.
|
|
17
|
+
* - **mcp-debug-refresh** — widget reads back lightweight server state
|
|
18
|
+
* (timestamp + monotonically-increasing counter)
|
|
19
|
+
* without involving the LLM. Useful for polling /
|
|
20
|
+
* heartbeat scenarios in widgets.
|
|
21
|
+
*/
|
|
22
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
23
|
+
import { IToolHandlerParams, TToolHandlerResponse } from '../_types_/types.js';
|
|
24
|
+
export declare const MCP_DEBUG_LOG_TOOL_NAME = "mcp-debug-log";
|
|
25
|
+
export declare const MCP_DEBUG_REFRESH_TOOL_NAME = "mcp-debug-refresh";
|
|
26
|
+
/** Names of the two tools registered by this module. */
|
|
27
|
+
export declare const BUILTIN_MCP_DEBUG_TOOL_NAMES: readonly ["mcp-debug-log", "mcp-debug-refresh"];
|
|
28
|
+
/**
|
|
29
|
+
* `Tool` descriptors for the built-in debug tools. Both carry
|
|
30
|
+
* `_meta.ui.visibility: ['app']` so MCP App hosts hide them from the model.
|
|
31
|
+
*/
|
|
32
|
+
export declare const BUILTIN_MCP_DEBUG_TOOLS: Tool[];
|
|
33
|
+
/** True when `name` belongs to one of the built-in debug tools. */
|
|
34
|
+
export declare function isBuiltinDebugTool(name: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Execute one of the built-in debug tools. The result is always a text
|
|
37
|
+
* `content[]` plus `structuredContent` so callers get a parseable payload
|
|
38
|
+
* regardless of `appConfig.mcp.tools.answerAs`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function handleBuiltinDebugTool(params: IToolHandlerParams): Promise<TToolHandlerResponse>;
|
|
41
|
+
//# sourceMappingURL=builtin-debug-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-debug-tools.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/builtin-debug-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAM/E,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAE/D,wDAAwD;AACxD,eAAO,MAAM,4BAA4B,iDAAkE,CAAC;AAE5G;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,IAAI,EAkCzC,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwBtG"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { emitTrace } from './debug-trace.js';
|
|
2
|
+
let refreshCounter = 0;
|
|
3
|
+
export const MCP_DEBUG_LOG_TOOL_NAME = 'mcp-debug-log';
|
|
4
|
+
export const MCP_DEBUG_REFRESH_TOOL_NAME = 'mcp-debug-refresh';
|
|
5
|
+
/** Names of the two tools registered by this module. */
|
|
6
|
+
export const BUILTIN_MCP_DEBUG_TOOL_NAMES = [MCP_DEBUG_LOG_TOOL_NAME, MCP_DEBUG_REFRESH_TOOL_NAME];
|
|
7
|
+
/**
|
|
8
|
+
* `Tool` descriptors for the built-in debug tools. Both carry
|
|
9
|
+
* `_meta.ui.visibility: ['app']` so MCP App hosts hide them from the model.
|
|
10
|
+
*/
|
|
11
|
+
export const BUILTIN_MCP_DEBUG_TOOLS = [
|
|
12
|
+
{
|
|
13
|
+
name: MCP_DEBUG_LOG_TOOL_NAME,
|
|
14
|
+
title: 'MCP debug log',
|
|
15
|
+
description: 'App-only tool. Widgets call this to push a structured event into the server-side mcp:* debug stream. ' +
|
|
16
|
+
'Hidden from the LLM via _meta.ui.visibility=["app"].',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
type: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Event category, e.g. "render-error", "user-click", "view-state".',
|
|
23
|
+
},
|
|
24
|
+
payload: {
|
|
25
|
+
description: 'Arbitrary event payload. Any JSON value (object, string, number, array, null).',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
required: ['type'],
|
|
29
|
+
},
|
|
30
|
+
_meta: { ui: { visibility: ['app'] } },
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: MCP_DEBUG_REFRESH_TOOL_NAME,
|
|
34
|
+
title: 'MCP debug refresh',
|
|
35
|
+
description: 'App-only tool. Widgets call this to fetch lightweight server state (timestamp + call counter) ' +
|
|
36
|
+
'without involving the LLM. Hidden from the LLM via _meta.ui.visibility=["app"].',
|
|
37
|
+
inputSchema: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {},
|
|
40
|
+
},
|
|
41
|
+
_meta: { ui: { visibility: ['app'] } },
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
/** True when `name` belongs to one of the built-in debug tools. */
|
|
45
|
+
export function isBuiltinDebugTool(name) {
|
|
46
|
+
return name === MCP_DEBUG_LOG_TOOL_NAME || name === MCP_DEBUG_REFRESH_TOOL_NAME;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Execute one of the built-in debug tools. The result is always a text
|
|
50
|
+
* `content[]` plus `structuredContent` so callers get a parseable payload
|
|
51
|
+
* regardless of `appConfig.mcp.tools.answerAs`.
|
|
52
|
+
*/
|
|
53
|
+
export async function handleBuiltinDebugTool(params) {
|
|
54
|
+
const { name, arguments: args } = params;
|
|
55
|
+
if (name === MCP_DEBUG_LOG_TOOL_NAME) {
|
|
56
|
+
const type = String(args?.type ?? 'unknown');
|
|
57
|
+
const payload = args?.payload;
|
|
58
|
+
emitTrace('app:view-log', { kind: 'log', type, payload });
|
|
59
|
+
const text = `[mcp-debug-log] ${type}`;
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text }],
|
|
62
|
+
structuredContent: { logged: true, type },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (name === MCP_DEBUG_REFRESH_TOOL_NAME) {
|
|
66
|
+
refreshCounter += 1;
|
|
67
|
+
const timestamp = new Date().toISOString();
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: 'text', text: `Server timestamp: ${timestamp}` }],
|
|
70
|
+
structuredContent: { timestamp, counter: refreshCounter },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Not a built-in debug tool: ${name}`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=builtin-debug-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-debug-tools.js","sourceRoot":"","sources":["../../../src/core/mcp/builtin-debug-tools.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAE/D,wDAAwD;AACxD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,uBAAuB,EAAE,2BAA2B,CAAU,CAAC;AAE5G;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAW;IAC7C;QACE,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,uGAAuG;YACvG,sDAAsD;QACxD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;gBACD,OAAO,EAAE;oBACP,WAAW,EAAE,gFAAgF;iBAC9F;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;KACvC;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,gGAAgG;YAChG,iFAAiF;QACnF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;KACvC;CACF,CAAC;AAEF,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,KAAK,uBAAuB,IAAI,IAAI,KAAK,2BAA2B,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAA0B;IACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAEzC,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAE,IAAY,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;QACtD,MAAM,OAAO,GAAI,IAAY,EAAE,OAAO,CAAC;QACvC,SAAS,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,mBAAmB,IAAI,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACjC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;SAClB,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;QACzC,cAAc,IAAI,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,SAAS,EAAE,EAAE,CAAC;YACnE,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE;SAClC,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure (or disable) the JSON-lines sink.
|
|
3
|
+
*
|
|
4
|
+
* @param logFile Absolute path to the .jsonl file. Empty / undefined disables the sink.
|
|
5
|
+
*
|
|
6
|
+
* Writes are fire-and-forget: failures (permission, disk full) are swallowed
|
|
7
|
+
* so debug logging never breaks the server. The parent directory is created
|
|
8
|
+
* lazily on the first event.
|
|
9
|
+
*/
|
|
10
|
+
export declare function configureDebugSink(logFile: string | undefined | null): void;
|
|
11
|
+
/**
|
|
12
|
+
* Emit a single trace event. Always adds `ts` (ISO timestamp) and `ch` (channel).
|
|
13
|
+
* No-op when the sink is not configured.
|
|
14
|
+
*/
|
|
15
|
+
export declare function emitTrace(channel: string, event: Record<string, unknown>): void;
|
|
16
|
+
/**
|
|
17
|
+
* Generate a short correlation ID for matching req/res/err events of a single call.
|
|
18
|
+
* 8 hex chars — collision-resistant enough for human reading; not cryptographic.
|
|
19
|
+
*/
|
|
20
|
+
export declare function makeCorr(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize the sink from `appConfig.mcp.debug.logFile`. Called once at server
|
|
23
|
+
* startup; safe to call again to apply config changes during tests.
|
|
24
|
+
*/
|
|
25
|
+
export declare function initDebugTraceFromConfig(): void;
|
|
26
|
+
//# sourceMappingURL=debug-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-trace.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/debug-trace.ts"],"names":[],"mappings":"AA4BA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAqB3E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK/E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|