@loop_ouroboros/mcp-hub-lite 1.2.9 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +82 -0
- package/README.md +405 -331
- package/dist/client/assets/{HomeView-CGezWc0j.js → HomeView-DplI3V-h.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-CDmWGdAK.css → ResourceDetailView-BkTSg91z.css} +1 -1
- package/dist/client/assets/ResourceDetailView-CeHPn99Y.js +1 -0
- package/dist/client/assets/ResourcesView-C1ObRhYS.js +1 -0
- package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
- package/dist/client/assets/{ServerDashboard-g5p4VC_-.js → ServerDashboard-D7wG4Gvt.js} +1 -1
- package/dist/client/assets/{ServerDetail-DCQH8HIb.css → ServerDetail-CPNAFBPM.css} +1 -1
- package/dist/client/assets/ServerDetail-G23phOcJ.js +2 -0
- package/dist/client/assets/{ServerListView-DZsy2gaQ.js → ServerListView-BFiZLtPO.js} +1 -1
- package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-Deb_SbFw.js} +1 -1
- package/dist/client/assets/SettingsView-QBFLZ6fP.js +1 -0
- package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
- package/dist/client/assets/ToolCallDialog-DYS-ADCL.js +1 -0
- package/dist/client/assets/ToolsView-DYwgtm7W.js +1 -0
- package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
- package/dist/client/assets/_baseClone-DQno9YO3.js +1 -0
- package/dist/client/assets/{el-form-item-CTsVV8sm.js → el-form-item-DF0zzQdH.js} +2 -2
- package/dist/client/assets/el-input-C_p2Qw42.js +1 -0
- package/dist/client/assets/el-loading-BaenpNzU.js +1 -0
- package/dist/client/assets/el-overlay-MbIUXSQ7.js +1 -0
- package/dist/client/assets/el-radio-group-COnCjCcz.js +1 -0
- package/dist/client/assets/el-skeleton-item-qj0eQP4s.js +1 -0
- package/dist/client/assets/el-switch-BZbXqB3_.js +1 -0
- package/dist/client/assets/el-tab-pane-w7RltRLd.js +1 -0
- package/dist/client/assets/el-table-column-OD8zhFcD.js +1 -0
- package/dist/client/assets/index-DwhULJXZ.js +2 -0
- package/dist/client/assets/{index-BNmwPGMT.css → index-UtsV0Cvh.css} +1 -1
- package/dist/client/assets/{omit-Btci9mp3.js → omit-BAJQlviJ.js} +1 -1
- package/dist/client/assets/raf-B1Ry7ruA.js +1 -0
- package/dist/client/assets/{vue-vendor-Dwcr0jep.js → vue-vendor-ClSvefnQ.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/constants.d.ts +8 -0
- package/dist/server/shared/models/constants.d.ts.map +1 -0
- package/dist/server/shared/models/constants.js +6 -0
- package/dist/server/shared/models/index.d.ts +1 -0
- package/dist/server/shared/models/index.d.ts.map +1 -1
- package/dist/server/shared/models/index.js +1 -0
- package/dist/server/shared/models/server.model.d.ts +14 -0
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +27 -4
- package/dist/server/shared/types/index.d.ts +0 -1
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +0 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +1 -1
- package/dist/server/src/api/mcp/gateway.d.ts +10 -6
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +235 -87
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +11 -0
- package/dist/server/src/api/web/mcp-status.js +2 -2
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +22 -30
- package/dist/server/src/api/web/servers.js +1 -1
- package/dist/server/src/api/web/sessions.d.ts +1 -27
- package/dist/server/src/api/web/sessions.d.ts.map +1 -1
- package/dist/server/src/api/web/sessions.js +8 -97
- package/dist/server/src/api/ws/events.js +1 -1
- package/dist/server/src/api/ws/ws-handler.js +1 -1
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +6 -1
- package/dist/server/src/cli/commands/status.js +39 -1
- package/dist/server/src/cli/commands/tool-use.d.ts +10 -3
- package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
- package/dist/server/src/cli/commands/tool-use.js +69 -30
- package/dist/server/src/cli/commands/use-guide.d.ts +0 -8
- package/dist/server/src/cli/commands/use-guide.d.ts.map +1 -1
- package/dist/server/src/cli/commands/use-guide.js +28 -170
- package/dist/server/src/cli/server.d.ts +10 -0
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/cli/server.js +31 -1
- package/dist/server/src/config/config-change-logger.js +1 -1
- package/dist/server/src/config/config-loader.js +1 -1
- package/dist/server/src/config/config-manager.js +1 -1
- package/dist/server/src/config/config-migrator.d.ts +4 -48
- package/dist/server/src/config/config-migrator.d.ts.map +1 -1
- package/dist/server/src/config/config-migrator.js +2 -103
- package/dist/server/src/config/config-saver.js +1 -1
- package/dist/server/src/config/server-config-manager.js +1 -1
- package/dist/server/src/models/system-tools.constants.d.ts +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +2 -1
- package/dist/server/src/pid/manager.js +1 -1
- package/dist/server/src/server/dev-server.js +4 -2
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +4 -2
- package/dist/server/src/server/startup.js +2 -2
- package/dist/server/src/services/connection/connection-manager.d.ts +2 -0
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +10 -8
- package/dist/server/src/services/event-bus.service.d.ts +3 -1
- package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
- package/dist/server/src/services/event-bus.service.js +1 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts +14 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +101 -7
- package/dist/server/src/services/gateway/global-transport.d.ts +20 -10
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -1
- package/dist/server/src/services/gateway/global-transport.js +50 -34
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +1 -2
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +24 -13
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +22 -6
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +12 -4
- package/dist/server/src/services/gateway/session-manager.d.ts +101 -0
- package/dist/server/src/services/gateway/session-manager.d.ts.map +1 -0
- package/dist/server/src/services/gateway/session-manager.js +256 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts +14 -19
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +221 -80
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +15 -2
- package/dist/server/src/services/hub-tools/instance-selector.js +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +1 -22
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +24 -22
- package/dist/server/src/services/hub-tools/server-selector.js +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +18 -13
- package/dist/server/src/services/log-storage.service.js +1 -1
- package/dist/server/src/services/system-tool-handler.js +1 -1
- package/dist/server/src/utils/error-handler.js +1 -1
- package/dist/server/src/utils/index.d.ts +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +1 -1
- package/dist/server/src/utils/json-utils.d.ts +9 -0
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +23 -4
- package/dist/server/src/utils/log-rotator.d.ts +0 -15
- package/dist/server/src/utils/log-rotator.d.ts.map +1 -1
- package/dist/server/src/utils/log-rotator.js +0 -18
- package/dist/server/src/utils/logger/index.d.ts +1 -1
- package/dist/server/src/utils/logger/index.d.ts.map +1 -1
- package/dist/server/src/utils/logger/index.js +1 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +25 -11
- package/dist/server/src/utils/logger/log-output.d.ts +17 -1
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +46 -40
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +18 -2
- package/dist/server/src/utils/port-checker.js +1 -1
- package/dist/server/src/utils/request-context.d.ts +8 -70
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +11 -70
- package/dist/server/src/utils/transports/stdio-transport.js +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +1 -1
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +26 -3
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +1 -1
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +1 -1
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-migrator.test.js +45 -105
- package/dist/server/tests/unit/config/config-saver.test.js +1 -1
- package/dist/server/tests/unit/config/config.schema.test.js +2 -1
- package/dist/server/tests/unit/server/runner.test.js +19 -13
- package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
- package/dist/server/tests/unit/services/gateway-session-mode.test.d.ts +2 -0
- package/dist/server/tests/unit/services/gateway-session-mode.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/gateway-session-mode.test.js +174 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
- package/dist/server/tests/unit/services/hub-tools.service.test.js +82 -6
- package/dist/server/tests/unit/utils/config.test.js +14 -7
- package/dist/server/tests/unit/utils/log-output.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/log-output.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/log-output.test.js +198 -0
- package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
- package/dist/server/tests/unit/utils/logger.test.js +1 -1
- package/dist/server/vitest.config.d.ts.map +1 -1
- package/dist/server/vitest.config.js +0 -2
- package/package.json +1 -3
- package/dist/client/assets/ResourceDetailView-Bi5UsbFq.js +0 -1
- package/dist/client/assets/ResourcesView-B9anSm85.js +0 -1
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +0 -1
- package/dist/client/assets/ServerDetail-DMoFqWCp.js +0 -2
- package/dist/client/assets/SettingsView-DQSWb9xM.js +0 -1
- package/dist/client/assets/ToolCallDialog-BEyRp_J3.js +0 -1
- package/dist/client/assets/ToolCallDialog-BhdPX-Kf.css +0 -1
- package/dist/client/assets/ToolsView-BU7PKJwt.js +0 -1
- package/dist/client/assets/ToolsView-BkrQLjH9.css +0 -1
- package/dist/client/assets/_baseClone-DsVtZfPm.js +0 -1
- package/dist/client/assets/el-input-Bh1VGJTU.js +0 -1
- package/dist/client/assets/el-loading-huOeK9cW.js +0 -1
- package/dist/client/assets/el-overlay-CR_KVhLU.js +0 -1
- package/dist/client/assets/el-radio-group-BSbtAW4k.js +0 -1
- package/dist/client/assets/el-skeleton-item-BSxOLPFM.js +0 -1
- package/dist/client/assets/el-switch-BaQUQWTL.js +0 -1
- package/dist/client/assets/el-tab-pane-9JxLgdS7.js +0 -1
- package/dist/client/assets/el-table-column-Du1l9Ww3.js +0 -1
- package/dist/client/assets/index-CsZoFRv1.js +0 -2
- package/dist/client/assets/raf-tUu4BwZS.js +0 -1
|
@@ -1,73 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Request context management using AsyncLocalStorage for request-scoped data.
|
|
3
|
-
*
|
|
4
|
-
* This module provides a way to store and access request-specific context data
|
|
5
|
-
* across asynchronous operations without having to pass context objects through
|
|
6
|
-
* every function call. It uses Node.js AsyncLocalStorage to maintain context
|
|
7
|
-
* throughout the request lifecycle.
|
|
8
|
-
*
|
|
9
|
-
* The primary use case is storing session context information (sessionId, clientName,
|
|
10
|
-
* cwd, project, etc.) that needs to be accessible from any part of the application
|
|
11
|
-
* during request processing.
|
|
12
|
-
*
|
|
13
|
-
* @module utils/request-context
|
|
14
|
-
*/
|
|
15
1
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* This storage holds the SessionContext object for the current request and
|
|
20
|
-
* makes it available throughout the entire request processing chain,
|
|
21
|
-
* including asynchronous operations and nested function calls.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* // In route handler
|
|
26
|
-
* await requestContext.run(sessionContext, async () => {
|
|
27
|
-
* // Any code executed here can access the session context
|
|
28
|
-
* const ctx = getSessionContext();
|
|
29
|
-
* console.log(ctx.sessionId);
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export const requestContext = new AsyncLocalStorage();
|
|
34
|
-
/**
|
|
35
|
-
* Retrieves the current request's session context.
|
|
36
|
-
*
|
|
37
|
-
* This function returns the SessionContext object stored in the AsyncLocalStorage
|
|
38
|
-
* for the current request. It should only be called within a request context
|
|
39
|
-
* that has been established using requestContext.run().
|
|
40
|
-
*
|
|
41
|
-
* @returns {SessionContext | undefined} The current request's session context, or undefined if not in a request context
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* const context = getSessionContext();
|
|
46
|
-
* if (context) {
|
|
47
|
-
* console.log(`Processing request for session: ${context.sessionId}`);
|
|
48
|
-
* }
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
export function getSessionContext() {
|
|
52
|
-
return requestContext.getStore();
|
|
2
|
+
const als = new AsyncLocalStorage();
|
|
3
|
+
export function runWithRequestContext(context, fn) {
|
|
4
|
+
return als.run(context, fn);
|
|
53
5
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const cwd = getSessionCwd();
|
|
66
|
-
* if (cwd) {
|
|
67
|
-
* const fullPath = path.join(cwd, relativePath);
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
export function getSessionCwd() {
|
|
72
|
-
return requestContext.getStore()?.cwd;
|
|
6
|
+
export function getSessionIdFromContext() {
|
|
7
|
+
return als.getStore()?.sessionId;
|
|
8
|
+
}
|
|
9
|
+
export function getTraceIdFromContext() {
|
|
10
|
+
return als.getStore()?.traceId;
|
|
11
|
+
}
|
|
12
|
+
export function isInRequestContext() {
|
|
13
|
+
return als.getStore() !== undefined;
|
|
73
14
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
2
|
-
import { logger, LOG_MODULES } from '../logger.js';
|
|
2
|
+
import { logger, LOG_MODULES } from '../logger/index.js';
|
|
3
3
|
import { PassThrough } from 'stream';
|
|
4
4
|
/**
|
|
5
5
|
* A transport implementation for communicating with MCP (Model Context Protocol) servers
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger, LOG_MODULES } from '../logger.js';
|
|
1
|
+
import { logger, LOG_MODULES } from '../logger/index.js';
|
|
2
2
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
3
3
|
import { URL } from 'url';
|
|
4
4
|
import { ProxyAgent, fetch as undiciFetch } from 'undici';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-factory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/transport-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"transport-factory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/transport-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,mBAAmB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC9C,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;KACvC,GACA,OAAO,+CAA+C,EAAE,SAAS;IA8FpE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAW9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CA8CxC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { StdioTransport } from './stdio-transport.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
3
3
|
import { StreamableHttpTransport } from './streamable-http-transport.js';
|
|
4
4
|
import { logStorage } from '../../services/log-storage.service.js';
|
|
5
5
|
import { McpOAuthClientProvider } from '../../services/mcp-oauth/index.js';
|
|
6
|
+
import { ProxyAgent, fetch as undiciFetch } from 'undici';
|
|
6
7
|
import { createHash } from 'node:crypto';
|
|
7
8
|
import path from 'node:path';
|
|
8
9
|
import os from 'node:os';
|
|
@@ -39,11 +40,33 @@ export class TransportFactory {
|
|
|
39
40
|
readyPatterns: options?.readyPatterns,
|
|
40
41
|
readyTimeout: options?.readyTimeout ?? 120000
|
|
41
42
|
});
|
|
42
|
-
case 'sse':
|
|
43
|
+
case 'sse': {
|
|
43
44
|
if (!config.url) {
|
|
44
45
|
throw new Error('SSE transport requires a URL');
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
const sseOpts = {};
|
|
49
|
+
// Headers shared between SSE GET (eventSourceInit) and POST (requestInit)
|
|
50
|
+
if (config.headers && Object.keys(config.headers).length > 0) {
|
|
51
|
+
sseOpts.requestInit = { headers: config.headers };
|
|
52
|
+
sseOpts.eventSourceInit = { headers: config.headers };
|
|
53
|
+
}
|
|
54
|
+
// OAuth provider
|
|
55
|
+
if (options?.authProvider) {
|
|
56
|
+
sseOpts.authProvider = options.authProvider;
|
|
57
|
+
}
|
|
58
|
+
// Proxy support via custom fetch
|
|
59
|
+
if (config.proxy?.url) {
|
|
60
|
+
const agent = new ProxyAgent(config.proxy.url);
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
+
sseOpts.fetch = (input, init) => {
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
64
|
+
const fetchOptions = { ...init, dispatcher: agent };
|
|
65
|
+
return undiciFetch(input, fetchOptions);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return new SSEClientTransport(new URL(config.url), sseOpts);
|
|
69
|
+
}
|
|
47
70
|
case 'streamable-http':
|
|
48
71
|
case 'http': {
|
|
49
72
|
// Compatibility with http type, treat as streamable-http
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
2
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
4
|
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
5
5
|
// Mock MCP SDK
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
2
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
4
|
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
5
5
|
// Mock MCP SDK
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
2
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
4
|
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
5
5
|
// Mock MCP SDK
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
2
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
4
|
import { configManager } from '../../../src/config/config-manager.js';
|
|
5
5
|
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
2
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
4
|
import { configManager } from '../../../src/config/config-manager.js';
|
|
5
5
|
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Logger test helper types for accessing private methods in tests
|
|
3
3
|
*/
|
|
4
4
|
import type { LogLevel } from '../../shared/types/common.types.js';
|
|
5
|
-
import type { LogContext } from '../../src/utils/logger.js';
|
|
5
|
+
import type { LogContext } from '../../src/utils/logger/index.js';
|
|
6
6
|
import type { WriteStream } from 'node:fs';
|
|
7
7
|
export interface LoggerWithPrivateMethods {
|
|
8
8
|
shouldLog: (level: string) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger-test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/logger-test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"logger-test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/logger-test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,uBAAuB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAC5F,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IACrF,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC"}
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
|
-
import {
|
|
5
|
+
import { migrateConfig, resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
6
6
|
import { SystemConfigSchema, isLegacyV1Config } from '../../../src/config/config.schema.js';
|
|
7
7
|
describe('Config Migrator', () => {
|
|
8
8
|
let tempDir;
|
|
@@ -85,59 +85,15 @@ describe('Config Migrator', () => {
|
|
|
85
85
|
const config = createLegacyV1Config();
|
|
86
86
|
fs.writeFileSync(testConfigPath, JSON.stringify(config, null, 2));
|
|
87
87
|
};
|
|
88
|
-
describe('
|
|
89
|
-
it('should
|
|
90
|
-
const result = checkMigrationStatus(testConfigPath);
|
|
91
|
-
expect(result.exists).toBe(false);
|
|
92
|
-
expect(result.version).toBe('unknown');
|
|
93
|
-
expect(result.canMigrate).toBe(false);
|
|
94
|
-
});
|
|
95
|
-
it('should detect v1.0 configuration', () => {
|
|
96
|
-
writeLegacyV1Config();
|
|
97
|
-
const result = checkMigrationStatus(testConfigPath);
|
|
98
|
-
expect(result.exists).toBe(true);
|
|
99
|
-
expect(result.version).toBe('v1');
|
|
100
|
-
expect(result.canMigrate).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
it('should detect v1.1 configuration', () => {
|
|
103
|
-
const v1_1Config = {
|
|
104
|
-
version: '1.1.0',
|
|
105
|
-
system: {
|
|
106
|
-
host: 'localhost',
|
|
107
|
-
port: 7788,
|
|
108
|
-
language: 'zh',
|
|
109
|
-
theme: 'system',
|
|
110
|
-
logging: {
|
|
111
|
-
level: 'info',
|
|
112
|
-
rotationAge: '7d',
|
|
113
|
-
jsonPretty: true,
|
|
114
|
-
mcpCommDebug: false,
|
|
115
|
-
apiDebug: false,
|
|
116
|
-
gatewayDebug: false
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
security: {
|
|
120
|
-
allowedNetworks: ['127.0.0.1'],
|
|
121
|
-
maxConcurrentConnections: 50,
|
|
122
|
-
connectionTimeout: 30000,
|
|
123
|
-
idleConnectionTimeout: 300000,
|
|
124
|
-
maxConnections: 50
|
|
125
|
-
},
|
|
126
|
-
servers: {},
|
|
127
|
-
tagDefinitions: []
|
|
128
|
-
};
|
|
129
|
-
fs.writeFileSync(testConfigPath, JSON.stringify(v1_1Config, null, 2));
|
|
130
|
-
const result = checkMigrationStatus(testConfigPath);
|
|
131
|
-
expect(result.exists).toBe(true);
|
|
132
|
-
expect(result.version).toBe('v1.1');
|
|
133
|
-
expect(result.canMigrate).toBe(false);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
describe('dryRunMigration', () => {
|
|
137
|
-
it('should perform migration without modifying files', () => {
|
|
88
|
+
describe('migrateConfig (actual migration)', () => {
|
|
89
|
+
it('should perform dry run without modifying files', () => {
|
|
138
90
|
writeLegacyV1Config();
|
|
139
91
|
const originalContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
140
|
-
const result =
|
|
92
|
+
const result = migrateConfig(testConfigPath, {
|
|
93
|
+
dryRun: true,
|
|
94
|
+
createBackup: false,
|
|
95
|
+
validateAfterMigration: true
|
|
96
|
+
});
|
|
141
97
|
expect(result.success).toBe(true);
|
|
142
98
|
expect(result.migratedConfig).toBeDefined();
|
|
143
99
|
expect(result.backupPath).toBeUndefined();
|
|
@@ -145,9 +101,13 @@ describe('Config Migrator', () => {
|
|
|
145
101
|
const currentContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
146
102
|
expect(currentContent).toBe(originalContent);
|
|
147
103
|
});
|
|
148
|
-
it('should convert servers
|
|
104
|
+
it('should convert servers correctly (dry run)', () => {
|
|
149
105
|
writeLegacyV1Config();
|
|
150
|
-
const result =
|
|
106
|
+
const result = migrateConfig(testConfigPath, {
|
|
107
|
+
dryRun: true,
|
|
108
|
+
createBackup: false,
|
|
109
|
+
validateAfterMigration: true
|
|
110
|
+
});
|
|
151
111
|
expect(result.success).toBe(true);
|
|
152
112
|
expect(result.migratedConfig).toBeDefined();
|
|
153
113
|
const migrated = result.migratedConfig;
|
|
@@ -156,7 +116,6 @@ describe('Config Migrator', () => {
|
|
|
156
116
|
expect(Object.keys(migrated.servers)).toHaveLength(2);
|
|
157
117
|
expect(migrated.servers['test-server-1']).toBeDefined();
|
|
158
118
|
expect(migrated.servers['test-server-2']).toBeDefined();
|
|
159
|
-
// Check server 1
|
|
160
119
|
const server1 = migrated.servers['test-server-1'];
|
|
161
120
|
expect(server1.template.command).toBe('npx test-server-1');
|
|
162
121
|
expect(server1.template.args).toEqual(['--verbose']);
|
|
@@ -167,17 +126,19 @@ describe('Config Migrator', () => {
|
|
|
167
126
|
expect(server1.instances[0].id).toMatch(/test-server-1-[0-9a-f]{8}/);
|
|
168
127
|
expect(server1.instances[0].enabled).toBe(true);
|
|
169
128
|
});
|
|
170
|
-
it('should preserve system and security config', () => {
|
|
129
|
+
it('should preserve system and security config (dry run)', () => {
|
|
171
130
|
writeLegacyV1Config();
|
|
172
131
|
const v1Config = createLegacyV1Config();
|
|
173
|
-
const result =
|
|
132
|
+
const result = migrateConfig(testConfigPath, {
|
|
133
|
+
dryRun: true,
|
|
134
|
+
createBackup: false,
|
|
135
|
+
validateAfterMigration: true
|
|
136
|
+
});
|
|
174
137
|
expect(result.success).toBe(true);
|
|
175
138
|
const migrated = result.migratedConfig;
|
|
176
139
|
expect(migrated.system).toEqual(v1Config.system);
|
|
177
140
|
expect(migrated.security).toEqual(v1Config.security);
|
|
178
141
|
});
|
|
179
|
-
});
|
|
180
|
-
describe('migrateConfig (actual migration)', () => {
|
|
181
142
|
it('should perform actual migration and validate the result', () => {
|
|
182
143
|
writeLegacyV1Config();
|
|
183
144
|
const originalContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
@@ -208,40 +169,15 @@ describe('Config Migrator', () => {
|
|
|
208
169
|
expect(validation.success).toBe(true);
|
|
209
170
|
});
|
|
210
171
|
});
|
|
211
|
-
describe('rollbackMigration', () => {
|
|
212
|
-
it('should rollback to v1.0 using backup', () => {
|
|
213
|
-
writeLegacyV1Config();
|
|
214
|
-
const originalContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
215
|
-
// Perform migration first
|
|
216
|
-
const migrationResult = migrateConfig(testConfigPath, {
|
|
217
|
-
createBackup: true,
|
|
218
|
-
validateAfterMigration: true
|
|
219
|
-
});
|
|
220
|
-
expect(migrationResult.success).toBe(true);
|
|
221
|
-
expect(migrationResult.backupPath).toBeDefined();
|
|
222
|
-
// Verify file is v1.1
|
|
223
|
-
const migratedContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
224
|
-
expect(migratedContent).not.toBe(originalContent);
|
|
225
|
-
// Rollback
|
|
226
|
-
const rollbackResult = rollbackMigration(testConfigPath, migrationResult.backupPath);
|
|
227
|
-
expect(rollbackResult.success).toBe(true);
|
|
228
|
-
// Verify file is back to original
|
|
229
|
-
const rolledBackContent = fs.readFileSync(testConfigPath, 'utf8');
|
|
230
|
-
expect(rolledBackContent).toBe(originalContent);
|
|
231
|
-
});
|
|
232
|
-
it('should fail rollback for non-existent backup', () => {
|
|
233
|
-
writeLegacyV1Config();
|
|
234
|
-
const nonExistentBackup = path.join(tempDir, 'non-existent-backup.json');
|
|
235
|
-
const result = rollbackMigration(testConfigPath, nonExistentBackup);
|
|
236
|
-
expect(result.success).toBe(false);
|
|
237
|
-
expect(result.error).toContain('not found');
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
172
|
describe('v1.1 Configuration Helpers', () => {
|
|
241
173
|
describe('resolveInstanceConfig', () => {
|
|
242
174
|
it('should resolve instance configuration by merging template and instance', () => {
|
|
243
175
|
writeLegacyV1Config();
|
|
244
|
-
const migrationResult =
|
|
176
|
+
const migrationResult = migrateConfig(testConfigPath, {
|
|
177
|
+
dryRun: true,
|
|
178
|
+
createBackup: false,
|
|
179
|
+
validateAfterMigration: true
|
|
180
|
+
});
|
|
245
181
|
expect(migrationResult.success).toBe(true);
|
|
246
182
|
const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
|
|
247
183
|
const resolved = resolveInstanceConfig(serverConfig);
|
|
@@ -255,7 +191,11 @@ describe('Config Migrator', () => {
|
|
|
255
191
|
});
|
|
256
192
|
it('should resolve specific instance by ID', () => {
|
|
257
193
|
writeLegacyV1Config();
|
|
258
|
-
const migrationResult =
|
|
194
|
+
const migrationResult = migrateConfig(testConfigPath, {
|
|
195
|
+
dryRun: true,
|
|
196
|
+
createBackup: false,
|
|
197
|
+
validateAfterMigration: true
|
|
198
|
+
});
|
|
259
199
|
expect(migrationResult.success).toBe(true);
|
|
260
200
|
const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
|
|
261
201
|
const instanceId = serverConfig.instances[0].id;
|
|
@@ -265,25 +205,17 @@ describe('Config Migrator', () => {
|
|
|
265
205
|
});
|
|
266
206
|
it('should return null for non-existent instance ID', () => {
|
|
267
207
|
writeLegacyV1Config();
|
|
268
|
-
const migrationResult =
|
|
208
|
+
const migrationResult = migrateConfig(testConfigPath, {
|
|
209
|
+
dryRun: true,
|
|
210
|
+
createBackup: false,
|
|
211
|
+
validateAfterMigration: true
|
|
212
|
+
});
|
|
269
213
|
expect(migrationResult.success).toBe(true);
|
|
270
214
|
const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
|
|
271
215
|
const resolved = resolveInstanceConfig(serverConfig, 'non-existent-id');
|
|
272
216
|
expect(resolved).toBeNull();
|
|
273
217
|
});
|
|
274
218
|
});
|
|
275
|
-
describe('getEnabledInstances', () => {
|
|
276
|
-
it('should return only enabled instances', () => {
|
|
277
|
-
writeLegacyV1Config();
|
|
278
|
-
const migrationResult = dryRunMigration(testConfigPath);
|
|
279
|
-
expect(migrationResult.success).toBe(true);
|
|
280
|
-
const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
|
|
281
|
-
const enabledInstances = getEnabledInstances(serverConfig);
|
|
282
|
-
expect(enabledInstances).toHaveLength(1);
|
|
283
|
-
expect(enabledInstances[0].instance.enabled).toBe(true);
|
|
284
|
-
expect(enabledInstances[0].resolved).not.toBeNull();
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
219
|
});
|
|
288
220
|
describe('Migration Edge Cases', () => {
|
|
289
221
|
it('should handle empty servers list', () => {
|
|
@@ -292,7 +224,11 @@ describe('Config Migrator', () => {
|
|
|
292
224
|
servers: {}
|
|
293
225
|
};
|
|
294
226
|
fs.writeFileSync(testConfigPath, JSON.stringify(emptyV1Config, null, 2));
|
|
295
|
-
const result =
|
|
227
|
+
const result = migrateConfig(testConfigPath, {
|
|
228
|
+
dryRun: true,
|
|
229
|
+
createBackup: false,
|
|
230
|
+
validateAfterMigration: true
|
|
231
|
+
});
|
|
296
232
|
expect(result.success).toBe(true);
|
|
297
233
|
expect(result.migratedConfig.servers).toEqual({});
|
|
298
234
|
});
|
|
@@ -310,7 +246,11 @@ describe('Config Migrator', () => {
|
|
|
310
246
|
}
|
|
311
247
|
};
|
|
312
248
|
fs.writeFileSync(testConfigPath, JSON.stringify(minimalV1Config, null, 2));
|
|
313
|
-
const result =
|
|
249
|
+
const result = migrateConfig(testConfigPath, {
|
|
250
|
+
dryRun: true,
|
|
251
|
+
createBackup: false,
|
|
252
|
+
validateAfterMigration: true
|
|
253
|
+
});
|
|
314
254
|
expect(result.success).toBe(true);
|
|
315
255
|
expect(result.migratedConfig.servers['minimal-server']).toBeDefined();
|
|
316
256
|
});
|
|
@@ -2,8 +2,8 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
|
2
2
|
import { runServer } from '../../../src/server/runner.js';
|
|
3
3
|
import { buildApp } from '../../../src/app.js';
|
|
4
4
|
import { configManager } from '../../../src/config/config-manager.js';
|
|
5
|
-
import { logger } from '../../../src/utils/logger.js';
|
|
6
|
-
import { mcpConnectionManager } from '../../../src/services/
|
|
5
|
+
import { logger } from '../../../src/utils/logger/index.js';
|
|
6
|
+
import { mcpConnectionManager } from '../../../src/services/connection/index.js';
|
|
7
7
|
import { PidManager } from '../../../src/pid/manager.js';
|
|
8
8
|
import { checkPort, checkPortWithExit } from '../../../src/utils/port-checker.js';
|
|
9
9
|
// Mock resolveInstanceConfig to return a valid resolved config
|
|
@@ -16,8 +16,7 @@ vi.mock('@config/config-migrator.js', () => ({
|
|
|
16
16
|
aggregatedTools: [],
|
|
17
17
|
tags: {},
|
|
18
18
|
enabled: true
|
|
19
|
-
}))
|
|
20
|
-
getEnabledInstances: vi.fn()
|
|
19
|
+
}))
|
|
21
20
|
}));
|
|
22
21
|
// Mock all dependencies
|
|
23
22
|
vi.mock('@src/app.js', () => ({
|
|
@@ -31,7 +30,7 @@ vi.mock('@config/config-manager.js', () => ({
|
|
|
31
30
|
addServerInstance: vi.fn()
|
|
32
31
|
}
|
|
33
32
|
}));
|
|
34
|
-
vi.mock('@utils/logger.js', () => ({
|
|
33
|
+
vi.mock('@utils/logger/index.js', () => ({
|
|
35
34
|
logger: {
|
|
36
35
|
info: vi.fn(),
|
|
37
36
|
error: vi.fn(),
|
|
@@ -43,7 +42,7 @@ vi.mock('@utils/logger.js', () => ({
|
|
|
43
42
|
SERVER: { module: 'Server' }
|
|
44
43
|
}
|
|
45
44
|
}));
|
|
46
|
-
vi.mock('@services/
|
|
45
|
+
vi.mock('@services/connection/index.js', () => ({
|
|
47
46
|
mcpConnectionManager: {
|
|
48
47
|
connect: vi.fn(() => Promise.resolve(true)),
|
|
49
48
|
disconnectAll: vi.fn()
|
|
@@ -96,7 +95,8 @@ describe('Server Runner', () => {
|
|
|
96
95
|
jsonPretty: true,
|
|
97
96
|
mcpCommDebug: false,
|
|
98
97
|
apiDebug: false,
|
|
99
|
-
gatewayDebug: false
|
|
98
|
+
gatewayDebug: false,
|
|
99
|
+
showTraceContext: true
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
102
|
security: {
|
|
@@ -137,7 +137,8 @@ describe('Server Runner', () => {
|
|
|
137
137
|
jsonPretty: true,
|
|
138
138
|
mcpCommDebug: false,
|
|
139
139
|
apiDebug: false,
|
|
140
|
-
gatewayDebug: false
|
|
140
|
+
gatewayDebug: false,
|
|
141
|
+
showTraceContext: true
|
|
141
142
|
}
|
|
142
143
|
},
|
|
143
144
|
security: {
|
|
@@ -187,7 +188,8 @@ describe('Server Runner', () => {
|
|
|
187
188
|
jsonPretty: true,
|
|
188
189
|
mcpCommDebug: false,
|
|
189
190
|
apiDebug: false,
|
|
190
|
-
gatewayDebug: false
|
|
191
|
+
gatewayDebug: false,
|
|
192
|
+
showTraceContext: true
|
|
191
193
|
}
|
|
192
194
|
},
|
|
193
195
|
security: {
|
|
@@ -242,7 +244,8 @@ describe('Server Runner', () => {
|
|
|
242
244
|
jsonPretty: true,
|
|
243
245
|
mcpCommDebug: false,
|
|
244
246
|
apiDebug: false,
|
|
245
|
-
gatewayDebug: false
|
|
247
|
+
gatewayDebug: false,
|
|
248
|
+
showTraceContext: true
|
|
246
249
|
}
|
|
247
250
|
},
|
|
248
251
|
security: {
|
|
@@ -360,7 +363,8 @@ describe('Server Runner', () => {
|
|
|
360
363
|
jsonPretty: true,
|
|
361
364
|
mcpCommDebug: false,
|
|
362
365
|
apiDebug: false,
|
|
363
|
-
gatewayDebug: false
|
|
366
|
+
gatewayDebug: false,
|
|
367
|
+
showTraceContext: true
|
|
364
368
|
}
|
|
365
369
|
},
|
|
366
370
|
security: {
|
|
@@ -415,7 +419,8 @@ describe('Server Runner', () => {
|
|
|
415
419
|
jsonPretty: true,
|
|
416
420
|
mcpCommDebug: false,
|
|
417
421
|
apiDebug: false,
|
|
418
|
-
gatewayDebug: false
|
|
422
|
+
gatewayDebug: false,
|
|
423
|
+
showTraceContext: true
|
|
419
424
|
}
|
|
420
425
|
},
|
|
421
426
|
security: {
|
|
@@ -466,7 +471,8 @@ describe('Server Runner', () => {
|
|
|
466
471
|
jsonPretty: true,
|
|
467
472
|
mcpCommDebug: false,
|
|
468
473
|
apiDebug: false,
|
|
469
|
-
gatewayDebug: false
|
|
474
|
+
gatewayDebug: false,
|
|
475
|
+
showTraceContext: true
|
|
470
476
|
}
|
|
471
477
|
},
|
|
472
478
|
security: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, test, expect } from 'vitest';
|
|
2
|
-
import { GatewayService } from '../../../src/services/gateway.
|
|
2
|
+
import { GatewayService } from '../../../src/services/gateway/index.js';
|
|
3
3
|
describe('GatewayService Logging Helpers', () => {
|
|
4
4
|
// Access private methods using type assertion for testing
|
|
5
5
|
const gateway = new GatewayService();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-session-mode.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/services/gateway-session-mode.test.ts"],"names":[],"mappings":""}
|