@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,6 +1,6 @@
|
|
|
1
1
|
import { hubToolsService } from './hub-tools.service.js';
|
|
2
2
|
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
3
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
4
4
|
import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../models/system-tools.constants.js';
|
|
5
5
|
import { stringifyForLogging } from '../utils/json-utils.js';
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -25,6 +25,7 @@ type ConfigGetter = () => {
|
|
|
25
25
|
mcpCommDebug: boolean;
|
|
26
26
|
apiDebug: boolean;
|
|
27
27
|
gatewayDebug: boolean;
|
|
28
|
+
showTraceContext?: boolean;
|
|
28
29
|
};
|
|
29
30
|
};
|
|
30
31
|
};
|
|
@@ -72,6 +73,14 @@ export declare function getApiDebugSetting(): boolean;
|
|
|
72
73
|
* @returns boolean indicating whether to enable Gateway debug logging
|
|
73
74
|
*/
|
|
74
75
|
export declare function getGatewayDebugSetting(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get the showTraceContext configuration value.
|
|
78
|
+
* Controls whether [SSN]/[TID]/[SID] trace context markers appear in log output.
|
|
79
|
+
* Defaults to true.
|
|
80
|
+
*
|
|
81
|
+
* @returns boolean indicating whether to show trace context in logs
|
|
82
|
+
*/
|
|
83
|
+
export declare function getShowTraceContextSetting(): boolean;
|
|
75
84
|
/**
|
|
76
85
|
* Stringify object for logging with dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
|
|
77
86
|
* @param obj Object to stringify
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;YAClB,YAAY,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;YAClB,YAAY,EAAE,OAAO,CAAC;YACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/E;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAiB9C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAUpD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,GAClD,MAAM,CAOR"}
|
|
@@ -198,6 +198,25 @@ export function getGatewayDebugSetting() {
|
|
|
198
198
|
}
|
|
199
199
|
return getDefaultForDevMode(false);
|
|
200
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the showTraceContext configuration value.
|
|
203
|
+
* Controls whether [SSN]/[TID]/[SID] trace context markers appear in log output.
|
|
204
|
+
* Defaults to true.
|
|
205
|
+
*
|
|
206
|
+
* @returns boolean indicating whether to show trace context in logs
|
|
207
|
+
*/
|
|
208
|
+
export function getShowTraceContextSetting() {
|
|
209
|
+
if (_configGetter) {
|
|
210
|
+
try {
|
|
211
|
+
const config = _configGetter();
|
|
212
|
+
return config.system.logging.showTraceContext ?? true;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Fall through to default if config getter fails
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return true; // default enabled
|
|
219
|
+
}
|
|
201
220
|
/**
|
|
202
221
|
* Stringify object for logging with dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
|
|
203
222
|
* @param obj Object to stringify
|
|
@@ -207,9 +226,9 @@ export function stringifyForLogging(obj) {
|
|
|
207
226
|
const jsonPretty = getJsonPrettySetting();
|
|
208
227
|
if (jsonPretty) {
|
|
209
228
|
const jsonStr = JSON.stringify(obj, null, 2);
|
|
210
|
-
return processPrettyJsonForLogging(jsonStr);
|
|
229
|
+
return '\n' + processPrettyJsonForLogging(jsonStr);
|
|
211
230
|
}
|
|
212
|
-
return JSON.stringify(obj);
|
|
231
|
+
return '\n' + JSON.stringify(obj);
|
|
213
232
|
}
|
|
214
233
|
/**
|
|
215
234
|
* Stringify object for logging with replacer and dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
|
|
@@ -221,7 +240,7 @@ export function stringifyForLoggingWithReplacer(obj, replacer) {
|
|
|
221
240
|
const jsonPretty = getJsonPrettySetting();
|
|
222
241
|
if (jsonPretty) {
|
|
223
242
|
const jsonStr = JSON.stringify(obj, replacer, 2);
|
|
224
|
-
return processPrettyJsonForLogging(jsonStr);
|
|
243
|
+
return '\n' + processPrettyJsonForLogging(jsonStr);
|
|
225
244
|
}
|
|
226
|
-
return JSON.stringify(obj, replacer);
|
|
245
|
+
return '\n' + JSON.stringify(obj, replacer);
|
|
227
246
|
}
|
|
@@ -128,21 +128,6 @@ export declare class LogRotator {
|
|
|
128
128
|
* ```
|
|
129
129
|
*/
|
|
130
130
|
getLatestLogFilePath(): string | null;
|
|
131
|
-
/**
|
|
132
|
-
* Gets the current log file path (backward compatibility).
|
|
133
|
-
*
|
|
134
|
-
* This method is maintained for backward compatibility. It first tries to get
|
|
135
|
-
* the latest existing log file. If none exists, it creates a new one.
|
|
136
|
-
*
|
|
137
|
-
* @returns {string} The absolute file path for the current log file.
|
|
138
|
-
* @deprecated Use createNewLogFilePath() or getLatestLogFilePath() instead
|
|
139
|
-
* @example
|
|
140
|
-
* ```typescript
|
|
141
|
-
* const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
|
|
142
|
-
* const logPath = rotator.getCurrentLogFilePath();
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
|
-
getCurrentLogFilePath(): string;
|
|
146
131
|
/**
|
|
147
132
|
* Performs log rotation by cleaning up old log files beyond the retention period.
|
|
148
133
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-rotator.d.ts","sourceRoot":"","sources":["../../../../src/utils/log-rotator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAsB;IAE1C;;;;;;;OAOG;gBAED,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAkB,EAC/B,YAAY,CAAC,EAAE,aAAa,EAC5B,YAAY,CAAC,EAAE,YAAY;IAa7B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;;;;;;;;;;OAiBG;IACI,oBAAoB,IAAI,MAAM;IAKrC;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAK5C
|
|
1
|
+
{"version":3,"file":"log-rotator.d.ts","sourceRoot":"","sources":["../../../../src/utils/log-rotator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAsB;IAE1C;;;;;;;OAOG;gBAED,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAkB,EAC/B,YAAY,CAAC,EAAE,aAAa,EAC5B,YAAY,CAAC,EAAE,YAAY;IAa7B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;;;;;;;;;;OAiBG;IACI,oBAAoB,IAAI,MAAM;IAKrC;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAK5C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,UAAU,IAAI,IAAI;IAwBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,WAAW,IAAI,MAAM,EAAE;IAqB9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,uBAAuB;CA8BhC"}
|
|
@@ -159,24 +159,6 @@ export class LogRotator {
|
|
|
159
159
|
const logFiles = this.getLogFiles();
|
|
160
160
|
return logFiles.length > 0 ? logFiles[0] : null;
|
|
161
161
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Gets the current log file path (backward compatibility).
|
|
164
|
-
*
|
|
165
|
-
* This method is maintained for backward compatibility. It first tries to get
|
|
166
|
-
* the latest existing log file. If none exists, it creates a new one.
|
|
167
|
-
*
|
|
168
|
-
* @returns {string} The absolute file path for the current log file.
|
|
169
|
-
* @deprecated Use createNewLogFilePath() or getLatestLogFilePath() instead
|
|
170
|
-
* @example
|
|
171
|
-
* ```typescript
|
|
172
|
-
* const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
|
|
173
|
-
* const logPath = rotator.getCurrentLogFilePath();
|
|
174
|
-
* ```
|
|
175
|
-
*/
|
|
176
|
-
getCurrentLogFilePath() {
|
|
177
|
-
const latest = this.getLatestLogFilePath();
|
|
178
|
-
return latest ?? this.createNewLogFilePath();
|
|
179
|
-
}
|
|
180
162
|
/**
|
|
181
163
|
* Performs log rotation by cleaning up old log files beyond the retention period.
|
|
182
164
|
*
|
|
@@ -7,7 +7,7 @@ export { LOG_MODULES } from './log-modules.js';
|
|
|
7
7
|
export type { LogModuleKey, LogModule } from './log-modules.js';
|
|
8
8
|
export { COLORS, getColorCodeForLevel, getResetColor } from './log-colors.js';
|
|
9
9
|
export { formatTimestamp, formatLogLevel, formatPid, createColoredLogMessage, createLogMessage, formatError } from './log-formatter.js';
|
|
10
|
-
export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
|
|
10
|
+
export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, hasDataUriImage, simplifyDataUriImages, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
|
|
11
11
|
export { Logger } from './logger.js';
|
|
12
12
|
import { Logger } from './logger.js';
|
|
13
13
|
export declare const logger: Logger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -9,7 +9,7 @@ export { COLORS, getColorCodeForLevel, getResetColor } from './log-colors.js';
|
|
|
9
9
|
// Re-export formatter utilities
|
|
10
10
|
export { formatTimestamp, formatLogLevel, formatPid, createColoredLogMessage, createLogMessage, formatError } from './log-formatter.js';
|
|
11
11
|
// Re-export output utilities
|
|
12
|
-
export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
|
|
12
|
+
export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, hasDataUriImage, simplifyDataUriImages, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
|
|
13
13
|
// Re-export main Logger class
|
|
14
14
|
export { Logger } from './logger.js';
|
|
15
15
|
// Create and export the default logger instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,YAAY,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,YAAY,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-formatter.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"log-formatter.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAOnD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAsED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAAI,GAAG,UAAU,GAAG,IAAI,CAQ/D;AA2HD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CASlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAatD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,UAAU,GACnB,MAAM,CA2CR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAkC/F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA4HlD"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { stringifyForLogging } from '../json-utils.js';
|
|
6
6
|
import { getColorCodeForLevel, getResetColor, COLORS } from './log-colors.js';
|
|
7
|
+
import { getShowTraceContextSetting } from '../json-utils.js';
|
|
7
8
|
// PID formatting configuration
|
|
8
9
|
const PID_WIDTH = 8;
|
|
9
10
|
/**
|
|
@@ -272,11 +273,16 @@ export function createColoredLogMessage(level, message, context) {
|
|
|
272
273
|
const callerColor = COLORS.brightBlue;
|
|
273
274
|
const resetColor = getResetColor();
|
|
274
275
|
let result = `${timestampColor}[${timestamp}]${resetColor} ${levelColor}[${formattedLevel}]${resetColor} ${pidColor}[${formattedPid}]${resetColor}`;
|
|
275
|
-
if (
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
276
|
+
if (getShowTraceContextSetting()) {
|
|
277
|
+
if (context?.sessionId) {
|
|
278
|
+
result += ` ${traceColor}[SSN:${context.sessionId}]${resetColor}`;
|
|
279
|
+
}
|
|
280
|
+
if (context?.traceId) {
|
|
281
|
+
result += ` ${traceColor}[TID:${context.traceId}]${resetColor}`;
|
|
282
|
+
}
|
|
283
|
+
if (context?.spanId) {
|
|
284
|
+
result += ` ${traceColor}[SID:${context.spanId}]${resetColor}`;
|
|
285
|
+
}
|
|
280
286
|
}
|
|
281
287
|
result += ` ${serverColor}[${actualServerName}]${resetColor}`;
|
|
282
288
|
if (context?.module) {
|
|
@@ -302,11 +308,16 @@ export function createLogMessage(level, message, context) {
|
|
|
302
308
|
const pidStr = processPid.toString().padStart(PID_WIDTH, ' ');
|
|
303
309
|
const serverIdentifier = context?.serverName || 'mcp-hub';
|
|
304
310
|
let result = `[${timestamp}] [${formattedLevel}] [PID:${pidStr}]`;
|
|
305
|
-
if (
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
311
|
+
if (getShowTraceContextSetting()) {
|
|
312
|
+
if (context?.sessionId) {
|
|
313
|
+
result += ` [SSN:${context.sessionId}]`;
|
|
314
|
+
}
|
|
315
|
+
if (context?.traceId) {
|
|
316
|
+
result += ` [TID:${context.traceId}]`;
|
|
317
|
+
}
|
|
318
|
+
if (context?.spanId) {
|
|
319
|
+
result += ` [SID:${context.spanId}]`;
|
|
320
|
+
}
|
|
310
321
|
}
|
|
311
322
|
result += ` [${serverIdentifier}]`;
|
|
312
323
|
if (context?.module) {
|
|
@@ -336,7 +347,10 @@ export function formatError(error) {
|
|
|
336
347
|
if (typeof element === 'object' &&
|
|
337
348
|
element !== null &&
|
|
338
349
|
!Array.isArray(element) &&
|
|
339
|
-
('module' in element ||
|
|
350
|
+
('module' in element ||
|
|
351
|
+
'traceId' in element ||
|
|
352
|
+
'spanId' in element ||
|
|
353
|
+
'sessionId' in element)) {
|
|
340
354
|
return '';
|
|
341
355
|
}
|
|
342
356
|
// Otherwise format the single element
|
|
@@ -32,9 +32,25 @@ export declare function isNotificationMessage(message: unknown): message is Noti
|
|
|
32
32
|
* @param serverId - Optional server ID for log storage (for frontend display)
|
|
33
33
|
*/
|
|
34
34
|
export declare function logNotificationMessage(message: unknown, context: string, serverId?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Check if JSON string contains data:image/*;base64 data URIs.
|
|
37
|
+
* These commonly appear in serverInfo.icons[].src and other metadata fields.
|
|
38
|
+
*
|
|
39
|
+
* @param data - JSON string to check
|
|
40
|
+
* @returns true if it contains data:image data URIs
|
|
41
|
+
*/
|
|
42
|
+
export declare function hasDataUriImage(data: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Simplify data URI images by replacing base64 payload with placeholder.
|
|
45
|
+
* Matches all data:image/*;base64,... patterns and truncates the payload.
|
|
46
|
+
*
|
|
47
|
+
* @param data - JSON string containing data URIs
|
|
48
|
+
* @returns JSON string with base64 payloads replaced
|
|
49
|
+
*/
|
|
50
|
+
export declare function simplifyDataUriImages(data: string): string;
|
|
35
51
|
/**
|
|
36
52
|
* Format an MCP message for logging, with simplification for tools/list,
|
|
37
|
-
* resources/list, capabilities responses, and
|
|
53
|
+
* resources/list, capabilities responses, image content, and data URI images.
|
|
38
54
|
*
|
|
39
55
|
* @param message - The MCP message object to format
|
|
40
56
|
* @returns Formatted log message string
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-output.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,yBAAyB,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAMtF;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAiDjG;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"log-output.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,yBAAyB,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAMtF;AAqBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAiDjG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA8CnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgCrD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqDzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA+BzD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiDrE"}
|
|
@@ -87,9 +87,29 @@ export function logNotificationMessage(message, context, serverId) {
|
|
|
87
87
|
logStorage.append(serverId, logLevel, `[${serverName}] ${messageContent}`);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if JSON string contains data:image/*;base64 data URIs.
|
|
92
|
+
* These commonly appear in serverInfo.icons[].src and other metadata fields.
|
|
93
|
+
*
|
|
94
|
+
* @param data - JSON string to check
|
|
95
|
+
* @returns true if it contains data:image data URIs
|
|
96
|
+
*/
|
|
97
|
+
export function hasDataUriImage(data) {
|
|
98
|
+
return /data:image\/[^;]+;base64,/.test(data);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Simplify data URI images by replacing base64 payload with placeholder.
|
|
102
|
+
* Matches all data:image/*;base64,... patterns and truncates the payload.
|
|
103
|
+
*
|
|
104
|
+
* @param data - JSON string containing data URIs
|
|
105
|
+
* @returns JSON string with base64 payloads replaced
|
|
106
|
+
*/
|
|
107
|
+
export function simplifyDataUriImages(data) {
|
|
108
|
+
return data.replace(/(data:image\/[^;]+;base64,)[A-Za-z0-9+/=]+/g, '$1[Truncated]');
|
|
109
|
+
}
|
|
90
110
|
/**
|
|
91
111
|
* Format an MCP message for logging, with simplification for tools/list,
|
|
92
|
-
* resources/list, capabilities responses, and
|
|
112
|
+
* resources/list, capabilities responses, image content, and data URI images.
|
|
93
113
|
*
|
|
94
114
|
* @param message - The MCP message object to format
|
|
95
115
|
* @returns Formatted log message string
|
|
@@ -101,8 +121,20 @@ export function formatMcpMessageForLogging(message) {
|
|
|
101
121
|
if (isToolsListResponse(rawJson)) {
|
|
102
122
|
const simplified = simplifyToolsListResponse(rawJson);
|
|
103
123
|
if (simplified === null) {
|
|
104
|
-
// Could not simplify,
|
|
105
|
-
|
|
124
|
+
// Could not simplify, fall through to other checks
|
|
125
|
+
if (hasDataUriImage(rawJson)) {
|
|
126
|
+
const truncated = simplifyDataUriImages(rawJson);
|
|
127
|
+
try {
|
|
128
|
+
const parsed = JSON.parse(truncated);
|
|
129
|
+
logMessage = stringifyForLogging(parsed);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
logMessage = truncated;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
logMessage = stringifyForLogging(message);
|
|
137
|
+
}
|
|
106
138
|
}
|
|
107
139
|
else {
|
|
108
140
|
logMessage = simplified;
|
|
@@ -118,6 +150,16 @@ export function formatMcpMessageForLogging(message) {
|
|
|
118
150
|
logMessage = simplified;
|
|
119
151
|
}
|
|
120
152
|
}
|
|
153
|
+
else if (hasDataUriImage(rawJson)) {
|
|
154
|
+
const simplified = simplifyDataUriImages(rawJson);
|
|
155
|
+
try {
|
|
156
|
+
const parsed = JSON.parse(simplified);
|
|
157
|
+
logMessage = stringifyForLogging(parsed);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
logMessage = simplified;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
121
163
|
else {
|
|
122
164
|
logMessage = stringifyForLogging(message);
|
|
123
165
|
}
|
|
@@ -192,7 +234,7 @@ export function simplifyImageContent(data) {
|
|
|
192
234
|
'data' in item) {
|
|
193
235
|
return {
|
|
194
236
|
...item,
|
|
195
|
-
data: '[
|
|
237
|
+
data: '[Truncated]'
|
|
196
238
|
};
|
|
197
239
|
}
|
|
198
240
|
return item;
|
|
@@ -243,14 +285,6 @@ export function isToolsListResponse(data) {
|
|
|
243
285
|
if ('resources' in result) {
|
|
244
286
|
return true;
|
|
245
287
|
}
|
|
246
|
-
if ('capabilities' in result &&
|
|
247
|
-
typeof result.capabilities === 'object' &&
|
|
248
|
-
result.capabilities !== null) {
|
|
249
|
-
const capabilities = result.capabilities;
|
|
250
|
-
if ('tools' in capabilities || 'resources' in capabilities) {
|
|
251
|
-
return true;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
288
|
}
|
|
255
289
|
}
|
|
256
290
|
}
|
|
@@ -301,34 +335,6 @@ export function simplifyToolsListResponse(data) {
|
|
|
301
335
|
// No resources, don't simplify
|
|
302
336
|
return null;
|
|
303
337
|
}
|
|
304
|
-
if ('capabilities' in result &&
|
|
305
|
-
typeof result.capabilities === 'object' &&
|
|
306
|
-
result.capabilities !== null) {
|
|
307
|
-
const capabilities = result.capabilities;
|
|
308
|
-
let toolsCount = 0;
|
|
309
|
-
let resourcesCount = 0;
|
|
310
|
-
if ('tools' in capabilities &&
|
|
311
|
-
typeof capabilities.tools === 'object' &&
|
|
312
|
-
capabilities.tools !== null) {
|
|
313
|
-
toolsCount = Object.keys(capabilities.tools).length;
|
|
314
|
-
}
|
|
315
|
-
if ('resources' in capabilities &&
|
|
316
|
-
typeof capabilities.resources === 'object' &&
|
|
317
|
-
capabilities.resources !== null) {
|
|
318
|
-
resourcesCount = Object.keys(capabilities.resources).length;
|
|
319
|
-
}
|
|
320
|
-
if (toolsCount > 0 && resourcesCount > 0) {
|
|
321
|
-
return `Returned ${toolsCount} tools and ${resourcesCount} resources`;
|
|
322
|
-
}
|
|
323
|
-
else if (toolsCount > 0) {
|
|
324
|
-
return `Returned ${toolsCount} tools`;
|
|
325
|
-
}
|
|
326
|
-
else if (resourcesCount > 0) {
|
|
327
|
-
return `Returned ${resourcesCount} resources`;
|
|
328
|
-
}
|
|
329
|
-
// No tools or resources, don't simplify
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
338
|
}
|
|
333
339
|
}
|
|
334
340
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAmB5C,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,SAAS,CAA8B;gBAEnC,KAAK,GAAE,QAAiB;IAoBpC;;;;;;;;;OASG;IACI,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIzC;;;;;;;;;;;;OAYG;IACI,YAAY,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAO5E,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIvC;;;;;;;;;OASG;IACI,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAItC;;;OAGG;IACH,SAAS,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO;IAK1C;;OAEG;IACH,OAAO,CAAC,GAAG;IA8DX;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKhD;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/C;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/C;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKhD,OAAO,CAAC,qBAAqB;IAkB7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;;OAGG;IACH,SAAS,CACP,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GACvC,IAAI;IAuBP;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA6D3B;;;OAGG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAIvF;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAIhF;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAInC;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAInC;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAIvC;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAG/B"}
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
import { DevLogger } from './dev-logger.js';
|
|
31
31
|
import { LOG_MODULES } from './log-modules.js';
|
|
32
32
|
import { createColoredLogMessage, createLogMessage, formatError, formatTimestamp, formatLogLevel, formatPid, getCallerInfo, formatCallerInfo } from './log-formatter.js';
|
|
33
|
-
import { setDevModeEnabled } from '../json-utils.js';
|
|
33
|
+
import { setDevModeEnabled, getShowTraceContextSetting } from '../json-utils.js';
|
|
34
|
+
import { getTraceIdFromContext, getSessionIdFromContext, isInRequestContext } from '../request-context.js';
|
|
34
35
|
export class Logger {
|
|
35
36
|
level = 'info';
|
|
36
37
|
useStderr = false;
|
|
@@ -124,9 +125,17 @@ export class Logger {
|
|
|
124
125
|
// Build context object
|
|
125
126
|
const context = {
|
|
126
127
|
...(options?.module && { module: options.module }),
|
|
128
|
+
...(options?.sessionId && { sessionId: options.sessionId }),
|
|
127
129
|
...(options?.traceId && { traceId: options.traceId }),
|
|
128
130
|
...(options?.spanId && { spanId: options.spanId })
|
|
129
131
|
};
|
|
132
|
+
// Auto-inject trace context from ALS when showTraceContext enabled
|
|
133
|
+
if (getShowTraceContextSetting() && isInRequestContext()) {
|
|
134
|
+
if (!context.sessionId)
|
|
135
|
+
context.sessionId = getSessionIdFromContext() || '-';
|
|
136
|
+
if (!context.traceId)
|
|
137
|
+
context.traceId = getTraceIdFromContext() || '-';
|
|
138
|
+
}
|
|
130
139
|
// Add caller info if enabled
|
|
131
140
|
if (this.showCaller) {
|
|
132
141
|
const callerInfo = getCallerInfo(4); // Skip 4 frames to get to the actual caller
|
|
@@ -241,7 +250,7 @@ export class Logger {
|
|
|
241
250
|
const optionsIndex = args.findIndex((arg) => typeof arg === 'object' &&
|
|
242
251
|
arg !== null &&
|
|
243
252
|
!Array.isArray(arg) &&
|
|
244
|
-
('module' in arg || 'traceId' in arg || 'spanId' in arg));
|
|
253
|
+
('module' in arg || 'sessionId' in arg || 'traceId' in arg || 'spanId' in arg));
|
|
245
254
|
if (optionsIndex !== -1) {
|
|
246
255
|
const options = args[optionsIndex];
|
|
247
256
|
const restArgs = [...args.slice(0, optionsIndex), ...args.slice(optionsIndex + 1)];
|
|
@@ -287,6 +296,13 @@ export class Logger {
|
|
|
287
296
|
...context,
|
|
288
297
|
serverName
|
|
289
298
|
};
|
|
299
|
+
// Auto-inject trace context from ALS when showTraceContext enabled
|
|
300
|
+
if (getShowTraceContextSetting() && isInRequestContext()) {
|
|
301
|
+
if (!logContext.sessionId)
|
|
302
|
+
logContext.sessionId = getSessionIdFromContext() || '-';
|
|
303
|
+
if (!logContext.traceId)
|
|
304
|
+
logContext.traceId = getTraceIdFromContext() || '-';
|
|
305
|
+
}
|
|
290
306
|
// Add caller info if enabled (only once per serverLog call would be better,
|
|
291
307
|
// but for consistency with multi-line logging, we add it for each line)
|
|
292
308
|
if (this.showCaller) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { exec } from 'child_process';
|
|
6
6
|
import { promisify } from 'util';
|
|
7
7
|
import { PidManager } from '../pid/manager.js';
|
|
8
|
-
import { logger, LOG_MODULES } from './logger.js';
|
|
8
|
+
import { logger, LOG_MODULES } from './logger/index.js';
|
|
9
9
|
const execAsync = promisify(exec);
|
|
10
10
|
/**
|
|
11
11
|
* Check if port is in use
|
|
@@ -1,71 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
import { AsyncLocalStorage } from 'async_hooks';
|
|
16
|
-
import type { SessionContext } from '../../shared/types/session-context.types.js';
|
|
17
|
-
/**
|
|
18
|
-
* AsyncLocalStorage instance for storing request context.
|
|
19
|
-
*
|
|
20
|
-
* This storage holds the SessionContext object for the current request and
|
|
21
|
-
* makes it available throughout the entire request processing chain,
|
|
22
|
-
* including asynchronous operations and nested function calls.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* // In route handler
|
|
27
|
-
* await requestContext.run(sessionContext, async () => {
|
|
28
|
-
* // Any code executed here can access the session context
|
|
29
|
-
* const ctx = getSessionContext();
|
|
30
|
-
* console.log(ctx.sessionId);
|
|
31
|
-
* });
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export declare const requestContext: AsyncLocalStorage<SessionContext>;
|
|
35
|
-
/**
|
|
36
|
-
* Retrieves the current request's session context.
|
|
37
|
-
*
|
|
38
|
-
* This function returns the SessionContext object stored in the AsyncLocalStorage
|
|
39
|
-
* for the current request. It should only be called within a request context
|
|
40
|
-
* that has been established using requestContext.run().
|
|
41
|
-
*
|
|
42
|
-
* @returns {SessionContext | undefined} The current request's session context, or undefined if not in a request context
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```typescript
|
|
46
|
-
* const context = getSessionContext();
|
|
47
|
-
* if (context) {
|
|
48
|
-
* console.log(`Processing request for session: ${context.sessionId}`);
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export declare function getSessionContext(): SessionContext | undefined;
|
|
53
|
-
/**
|
|
54
|
-
* Retrieves the current request's working directory (cwd).
|
|
55
|
-
*
|
|
56
|
-
* This is a convenience function that extracts the cwd property from the
|
|
57
|
-
* current request's session context. It's commonly used in file operations
|
|
58
|
-
* that need to respect the session's current working directory.
|
|
59
|
-
*
|
|
60
|
-
* @returns {string | undefined} The current request's working directory, or undefined if not available
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* const cwd = getSessionCwd();
|
|
65
|
-
* if (cwd) {
|
|
66
|
-
* const fullPath = path.join(cwd, relativePath);
|
|
67
|
-
* }
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
export declare function getSessionCwd(): string | undefined;
|
|
1
|
+
export interface RequestContext {
|
|
2
|
+
sessionId?: string;
|
|
3
|
+
traceId?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function runWithRequestContext(context: RequestContext, fn: () => Promise<void>): Promise<void>;
|
|
6
|
+
export declare function getSessionIdFromContext(): string | undefined;
|
|
7
|
+
export declare function getTraceIdFromContext(): string | undefined;
|
|
8
|
+
export declare function isInRequestContext(): boolean;
|
|
71
9
|
//# sourceMappingURL=request-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/utils/request-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/utils/request-context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAE5D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
|