@qodo/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +118 -0
- package/README.md +121 -0
- package/dist/api/agent.d.ts +69 -0
- package/dist/api/agent.d.ts.map +1 -0
- package/dist/api/agent.js +1034 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/analytics.d.ts +43 -0
- package/dist/api/analytics.d.ts.map +1 -0
- package/dist/api/analytics.js +163 -0
- package/dist/api/analytics.js.map +1 -0
- package/dist/api/http.d.ts +5 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +59 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +12 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +17 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/taskTracking.d.ts +54 -0
- package/dist/api/taskTracking.d.ts.map +1 -0
- package/dist/api/taskTracking.js +208 -0
- package/dist/api/taskTracking.js.map +1 -0
- package/dist/api/types.d.ts +92 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/utils.d.ts +8 -0
- package/dist/api/utils.d.ts.map +1 -0
- package/dist/api/utils.js +54 -0
- package/dist/api/utils.js.map +1 -0
- package/dist/api/websocket.d.ts +74 -0
- package/dist/api/websocket.d.ts.map +1 -0
- package/dist/api/websocket.js +685 -0
- package/dist/api/websocket.js.map +1 -0
- package/dist/auth/index.d.ts +25 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +85 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/clients/index.d.ts +8 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +7 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/info/InfoClient.d.ts +37 -0
- package/dist/clients/info/InfoClient.d.ts.map +1 -0
- package/dist/clients/info/InfoClient.js +69 -0
- package/dist/clients/info/InfoClient.js.map +1 -0
- package/dist/clients/info/index.d.ts +4 -0
- package/dist/clients/info/index.d.ts.map +1 -0
- package/dist/clients/info/index.js +2 -0
- package/dist/clients/info/index.js.map +1 -0
- package/dist/clients/info/types.d.ts +21 -0
- package/dist/clients/info/types.d.ts.map +1 -0
- package/dist/clients/info/types.js +2 -0
- package/dist/clients/info/types.js.map +1 -0
- package/dist/clients/sessions/SessionsClient.d.ts +34 -0
- package/dist/clients/sessions/SessionsClient.d.ts.map +1 -0
- package/dist/clients/sessions/SessionsClient.js +71 -0
- package/dist/clients/sessions/SessionsClient.js.map +1 -0
- package/dist/clients/sessions/index.d.ts +4 -0
- package/dist/clients/sessions/index.d.ts.map +1 -0
- package/dist/clients/sessions/index.js +2 -0
- package/dist/clients/sessions/index.js.map +1 -0
- package/dist/clients/sessions/types.d.ts +20 -0
- package/dist/clients/sessions/types.d.ts.map +1 -0
- package/dist/clients/sessions/types.js +2 -0
- package/dist/clients/sessions/types.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +43 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +472 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/urlConfig.d.ts +15 -0
- package/dist/config/urlConfig.d.ts.map +1 -0
- package/dist/config/urlConfig.js +75 -0
- package/dist/config/urlConfig.js.map +1 -0
- package/dist/constants/errors.d.ts +2 -0
- package/dist/constants/errors.d.ts.map +1 -0
- package/dist/constants/errors.js +2 -0
- package/dist/constants/errors.js.map +1 -0
- package/dist/constants/index.d.ts +7 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +11 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/tools.d.ts +4 -0
- package/dist/constants/tools.d.ts.map +1 -0
- package/dist/constants/tools.js +4 -0
- package/dist/constants/tools.js.map +1 -0
- package/dist/constants/versions.d.ts +2 -0
- package/dist/constants/versions.d.ts.map +1 -0
- package/dist/constants/versions.js +2 -0
- package/dist/constants/versions.js.map +1 -0
- package/dist/context/buildUserContext.d.ts +18 -0
- package/dist/context/buildUserContext.d.ts.map +1 -0
- package/dist/context/buildUserContext.js +34 -0
- package/dist/context/buildUserContext.js.map +1 -0
- package/dist/context/index.d.ts +9 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +9 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/messageManager.d.ts +42 -0
- package/dist/context/messageManager.d.ts.map +1 -0
- package/dist/context/messageManager.js +322 -0
- package/dist/context/messageManager.js.map +1 -0
- package/dist/context/taskFocus.d.ts +2 -0
- package/dist/context/taskFocus.d.ts.map +1 -0
- package/dist/context/taskFocus.js +26 -0
- package/dist/context/taskFocus.js.map +1 -0
- package/dist/context/userInput.d.ts +3 -0
- package/dist/context/userInput.d.ts.map +1 -0
- package/dist/context/userInput.js +20 -0
- package/dist/context/userInput.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/MCPManager.d.ts +125 -0
- package/dist/mcp/MCPManager.d.ts.map +1 -0
- package/dist/mcp/MCPManager.js +616 -0
- package/dist/mcp/MCPManager.js.map +1 -0
- package/dist/mcp/approvedTools.d.ts +4 -0
- package/dist/mcp/approvedTools.d.ts.map +1 -0
- package/dist/mcp/approvedTools.js +19 -0
- package/dist/mcp/approvedTools.js.map +1 -0
- package/dist/mcp/baseServer.d.ts +75 -0
- package/dist/mcp/baseServer.d.ts.map +1 -0
- package/dist/mcp/baseServer.js +107 -0
- package/dist/mcp/baseServer.js.map +1 -0
- package/dist/mcp/builtinServers.d.ts +15 -0
- package/dist/mcp/builtinServers.d.ts.map +1 -0
- package/dist/mcp/builtinServers.js +155 -0
- package/dist/mcp/builtinServers.js.map +1 -0
- package/dist/mcp/dynamicBEServer.d.ts +20 -0
- package/dist/mcp/dynamicBEServer.d.ts.map +1 -0
- package/dist/mcp/dynamicBEServer.js +52 -0
- package/dist/mcp/dynamicBEServer.js.map +1 -0
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +24 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcpInitialization.d.ts +2 -0
- package/dist/mcp/mcpInitialization.d.ts.map +1 -0
- package/dist/mcp/mcpInitialization.js +56 -0
- package/dist/mcp/mcpInitialization.js.map +1 -0
- package/dist/mcp/servers/filesystem.d.ts +75 -0
- package/dist/mcp/servers/filesystem.d.ts.map +1 -0
- package/dist/mcp/servers/filesystem.js +992 -0
- package/dist/mcp/servers/filesystem.js.map +1 -0
- package/dist/mcp/servers/gerrit.d.ts +19 -0
- package/dist/mcp/servers/gerrit.d.ts.map +1 -0
- package/dist/mcp/servers/gerrit.js +515 -0
- package/dist/mcp/servers/gerrit.js.map +1 -0
- package/dist/mcp/servers/git.d.ts +18 -0
- package/dist/mcp/servers/git.d.ts.map +1 -0
- package/dist/mcp/servers/git.js +441 -0
- package/dist/mcp/servers/git.js.map +1 -0
- package/dist/mcp/servers/ripgrep.d.ts +34 -0
- package/dist/mcp/servers/ripgrep.d.ts.map +1 -0
- package/dist/mcp/servers/ripgrep.js +517 -0
- package/dist/mcp/servers/ripgrep.js.map +1 -0
- package/dist/mcp/servers/shell.d.ts +20 -0
- package/dist/mcp/servers/shell.d.ts.map +1 -0
- package/dist/mcp/servers/shell.js +603 -0
- package/dist/mcp/servers/shell.js.map +1 -0
- package/dist/mcp/serversRegistry.d.ts +55 -0
- package/dist/mcp/serversRegistry.d.ts.map +1 -0
- package/dist/mcp/serversRegistry.js +410 -0
- package/dist/mcp/serversRegistry.js.map +1 -0
- package/dist/mcp/toolProcessor.d.ts +42 -0
- package/dist/mcp/toolProcessor.d.ts.map +1 -0
- package/dist/mcp/toolProcessor.js +200 -0
- package/dist/mcp/toolProcessor.js.map +1 -0
- package/dist/mcp/types.d.ts +29 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/parser/index.d.ts +72 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +967 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/types.d.ts +153 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js +6 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/parser/utils.d.ts +18 -0
- package/dist/parser/utils.d.ts.map +1 -0
- package/dist/parser/utils.js +64 -0
- package/dist/parser/utils.js.map +1 -0
- package/dist/sdk/QodoSDK.d.ts +152 -0
- package/dist/sdk/QodoSDK.d.ts.map +1 -0
- package/dist/sdk/QodoSDK.js +786 -0
- package/dist/sdk/QodoSDK.js.map +1 -0
- package/dist/sdk/bootstrap.d.ts +16 -0
- package/dist/sdk/bootstrap.d.ts.map +1 -0
- package/dist/sdk/bootstrap.js +21 -0
- package/dist/sdk/bootstrap.js.map +1 -0
- package/dist/sdk/builders.d.ts +54 -0
- package/dist/sdk/builders.d.ts.map +1 -0
- package/dist/sdk/builders.js +117 -0
- package/dist/sdk/builders.js.map +1 -0
- package/dist/sdk/defaults.d.ts +11 -0
- package/dist/sdk/defaults.d.ts.map +1 -0
- package/dist/sdk/defaults.js +39 -0
- package/dist/sdk/defaults.js.map +1 -0
- package/dist/sdk/discovery.d.ts +2 -0
- package/dist/sdk/discovery.d.ts.map +1 -0
- package/dist/sdk/discovery.js +25 -0
- package/dist/sdk/discovery.js.map +1 -0
- package/dist/sdk/events.d.ts +168 -0
- package/dist/sdk/events.d.ts.map +1 -0
- package/dist/sdk/events.js +52 -0
- package/dist/sdk/events.js.map +1 -0
- package/dist/sdk/index.d.ts +17 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +17 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/runner/AgentRunner.d.ts +22 -0
- package/dist/sdk/runner/AgentRunner.d.ts.map +1 -0
- package/dist/sdk/runner/AgentRunner.js +222 -0
- package/dist/sdk/runner/AgentRunner.js.map +1 -0
- package/dist/sdk/runner/finalize.d.ts +9 -0
- package/dist/sdk/runner/finalize.d.ts.map +1 -0
- package/dist/sdk/runner/finalize.js +115 -0
- package/dist/sdk/runner/finalize.js.map +1 -0
- package/dist/sdk/runner/formats.d.ts +7 -0
- package/dist/sdk/runner/formats.d.ts.map +1 -0
- package/dist/sdk/runner/formats.js +91 -0
- package/dist/sdk/runner/formats.js.map +1 -0
- package/dist/sdk/runner/index.d.ts +9 -0
- package/dist/sdk/runner/index.d.ts.map +1 -0
- package/dist/sdk/runner/index.js +9 -0
- package/dist/sdk/runner/index.js.map +1 -0
- package/dist/sdk/runner/progress.d.ts +3 -0
- package/dist/sdk/runner/progress.d.ts.map +1 -0
- package/dist/sdk/runner/progress.js +16 -0
- package/dist/sdk/runner/progress.js.map +1 -0
- package/dist/sdk/schemas.d.ts +50 -0
- package/dist/sdk/schemas.d.ts.map +1 -0
- package/dist/sdk/schemas.js +145 -0
- package/dist/sdk/schemas.js.map +1 -0
- package/dist/session/SessionContext.d.ts +86 -0
- package/dist/session/SessionContext.d.ts.map +1 -0
- package/dist/session/SessionContext.js +395 -0
- package/dist/session/SessionContext.js.map +1 -0
- package/dist/session/environment.d.ts +42 -0
- package/dist/session/environment.d.ts.map +1 -0
- package/dist/session/environment.js +27 -0
- package/dist/session/environment.js.map +1 -0
- package/dist/session/history.d.ts +3 -0
- package/dist/session/history.d.ts.map +1 -0
- package/dist/session/history.js +67 -0
- package/dist/session/history.js.map +1 -0
- package/dist/session/index.d.ts +10 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/serverData.d.ts +38 -0
- package/dist/session/serverData.d.ts.map +1 -0
- package/dist/session/serverData.js +241 -0
- package/dist/session/serverData.js.map +1 -0
- package/dist/tracking/Tracker.d.ts +55 -0
- package/dist/tracking/Tracker.d.ts.map +1 -0
- package/dist/tracking/Tracker.js +217 -0
- package/dist/tracking/Tracker.js.map +1 -0
- package/dist/tracking/index.d.ts +8 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +8 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/schemas.d.ts +292 -0
- package/dist/tracking/schemas.d.ts.map +1 -0
- package/dist/tracking/schemas.js +91 -0
- package/dist/tracking/schemas.js.map +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/extractSetFlags.d.ts +6 -0
- package/dist/utils/extractSetFlags.d.ts.map +1 -0
- package/dist/utils/extractSetFlags.js +16 -0
- package/dist/utils/extractSetFlags.js.map +1 -0
- package/dist/utils/formatTimeAgo.d.ts +2 -0
- package/dist/utils/formatTimeAgo.d.ts.map +1 -0
- package/dist/utils/formatTimeAgo.js +20 -0
- package/dist/utils/formatTimeAgo.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/machineId.d.ts +14 -0
- package/dist/utils/machineId.d.ts.map +1 -0
- package/dist/utils/machineId.js +66 -0
- package/dist/utils/machineId.js.map +1 -0
- package/dist/utils/pathUtils.d.ts +22 -0
- package/dist/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/pathUtils.js +54 -0
- package/dist/utils/pathUtils.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ServerConfig } from "./types.js";
|
|
3
|
+
import { MCPConfig } from "../parser/types.js";
|
|
4
|
+
import { InternalMCPBaseServer } from "./baseServer.js";
|
|
5
|
+
export declare const serverTypes: {
|
|
6
|
+
BUILTIN: string;
|
|
7
|
+
CUSTOM: string;
|
|
8
|
+
BACKEND: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class ConfigValidationError extends Error {
|
|
11
|
+
details: z.ZodError;
|
|
12
|
+
constructor(message: string, details: z.ZodError);
|
|
13
|
+
}
|
|
14
|
+
export declare class ServerRegistry {
|
|
15
|
+
private static instance;
|
|
16
|
+
private readonly builtInServers;
|
|
17
|
+
private servers;
|
|
18
|
+
private readonly mcpConfigPath;
|
|
19
|
+
private tomlMCPConfigs;
|
|
20
|
+
private noBuiltin;
|
|
21
|
+
private constructor();
|
|
22
|
+
static init(mcpConfigPath?: string): ServerRegistry;
|
|
23
|
+
static getInstance(): ServerRegistry;
|
|
24
|
+
setNoBuiltin(value: boolean): void;
|
|
25
|
+
/**
|
|
26
|
+
* Set tool configurations from TOML file
|
|
27
|
+
*
|
|
28
|
+
* @param mcpConfigs Tool configurations from TOML file
|
|
29
|
+
*/
|
|
30
|
+
setTomlMCPConfigs(mcpConfigs: Record<string, MCPConfig>): void;
|
|
31
|
+
getValidatedDirectories(): string[];
|
|
32
|
+
loadAllServers(): Promise<void>;
|
|
33
|
+
private validateServerConfig;
|
|
34
|
+
private loadServersFromTomlConfigs;
|
|
35
|
+
private loadServersFromBackend;
|
|
36
|
+
private loadBuiltInServers;
|
|
37
|
+
private findRepositoryRoot;
|
|
38
|
+
private findNearestMCPConfig;
|
|
39
|
+
private getMCPConfigPath;
|
|
40
|
+
private readMCPConfig;
|
|
41
|
+
private loadServersFromConfig;
|
|
42
|
+
getAllServers(): ServerConfig[];
|
|
43
|
+
getServer(id: string): ServerConfig | undefined;
|
|
44
|
+
getBuiltInServer(serverId: string): InternalMCPBaseServer | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Check for duplicate server IDs across different server sources and log warnings
|
|
47
|
+
*
|
|
48
|
+
* @param builtInServers Map of built-in servers
|
|
49
|
+
* @param backendServers Map of backend servers (also considered built-in)
|
|
50
|
+
* @param customServers Map of custom servers from mcp.json
|
|
51
|
+
* @param tomlServers Map of servers from TOML configuration
|
|
52
|
+
*/
|
|
53
|
+
private checkForDuplicateServerIds;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=serversRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serversRegistry.d.ts","sourceRoot":"","sources":["../../src/mcp/serversRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAItB,OAAO,EAAC,YAAY,EAAC,MAAM,YAAY,CAAC;AAExC,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAKtD,eAAO,MAAM,WAAW;;;;CAIvB,CAAC;AAWF,qBAAa,qBAAsB,SAAQ,KAAK;IACV,OAAO,EAAE,CAAC,CAAC,QAAQ;gBAA3C,OAAO,EAAE,MAAM,EAAS,OAAO,EAAE,CAAC,CAAC,QAAQ;CAIxD;AAED,qBAAa,cAAc;IAIzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO;WAQO,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc;WA0B5C,WAAW,IAAI,cAAc;IAkBpC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIzC;;;;OAIG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IAI9D,uBAAuB,IAAI,MAAM,EAAE;IAI7B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5C,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,0BAA0B;YAiCpB,sBAAsB;YAyBtB,kBAAkB;YASlB,kBAAkB;YA4BlB,oBAAoB;YAgCpB,gBAAgB;YAYhB,aAAa;YAcb,qBAAqB;IAgC5B,aAAa,IAAI,YAAY,EAAE;IA6D/B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI/C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAI5E;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;CA0CnC"}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { DynamicBEMCPServer } from "./dynamicBEServer.js";
|
|
5
|
+
import { BuiltInServers } from "./builtinServers.js";
|
|
6
|
+
import { handle401Error } from "../auth/index.js";
|
|
7
|
+
import { ServerData } from "../session/index.js";
|
|
8
|
+
import { SessionContext } from "../session/index.js";
|
|
9
|
+
import { getCurrentEnvironment, getGlobalEnvironment } from "../session/index.js";
|
|
10
|
+
export const serverTypes = {
|
|
11
|
+
BUILTIN: "BUILTIN",
|
|
12
|
+
CUSTOM: "CUSTOM",
|
|
13
|
+
BACKEND: "BACKEND",
|
|
14
|
+
};
|
|
15
|
+
// Strong type validation for server configuration
|
|
16
|
+
const ServerConfigSchema = z.object({
|
|
17
|
+
command: z.string().min(1).optional(),
|
|
18
|
+
url: z.string().url().optional(),
|
|
19
|
+
args: z.array(z.string()).optional(),
|
|
20
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
21
|
+
});
|
|
22
|
+
export class ConfigValidationError extends Error {
|
|
23
|
+
details;
|
|
24
|
+
constructor(message, details) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.details = details;
|
|
27
|
+
this.name = "ConfigValidationError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class ServerRegistry {
|
|
31
|
+
// NOTE: The static instance is retained only as a fallback; environment-
|
|
32
|
+
// scoped instances are preferred so that different logical sessions can
|
|
33
|
+
// maintain independent MCP server views.
|
|
34
|
+
static instance;
|
|
35
|
+
builtInServers = new BuiltInServers();
|
|
36
|
+
servers = new Map();
|
|
37
|
+
mcpConfigPath;
|
|
38
|
+
tomlMCPConfigs = new Map();
|
|
39
|
+
noBuiltin = false;
|
|
40
|
+
constructor(mcpConfigPath) {
|
|
41
|
+
this.mcpConfigPath = mcpConfigPath;
|
|
42
|
+
// Check environment variable for noBuiltin flag
|
|
43
|
+
if (process.env.QODO_NO_BUILTIN === 'true') {
|
|
44
|
+
this.noBuiltin = true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
static init(mcpConfigPath) {
|
|
48
|
+
const env = getCurrentEnvironment();
|
|
49
|
+
const globalEnv = getGlobalEnvironment();
|
|
50
|
+
// For non-global environments (e.g. in-process SDK clients), keep a
|
|
51
|
+
// completely independent ServerRegistry instance so each environment can
|
|
52
|
+
// have its own MCP server set and TOML configuration.
|
|
53
|
+
if (env !== globalEnv) {
|
|
54
|
+
let instance = env.serverRegistry;
|
|
55
|
+
if (!instance) {
|
|
56
|
+
instance = new ServerRegistry(mcpConfigPath);
|
|
57
|
+
env.serverRegistry = instance;
|
|
58
|
+
}
|
|
59
|
+
return instance;
|
|
60
|
+
}
|
|
61
|
+
// Global (CLI/webapp) path: preserve legacy singleton behavior
|
|
62
|
+
if (!ServerRegistry.instance) {
|
|
63
|
+
ServerRegistry.instance = new ServerRegistry(mcpConfigPath);
|
|
64
|
+
if (!globalEnv.serverRegistry) {
|
|
65
|
+
globalEnv.serverRegistry = ServerRegistry.instance;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return ServerRegistry.instance;
|
|
69
|
+
}
|
|
70
|
+
static getInstance() {
|
|
71
|
+
const env = getCurrentEnvironment();
|
|
72
|
+
const globalEnv = getGlobalEnvironment();
|
|
73
|
+
if (env !== globalEnv) {
|
|
74
|
+
const instance = env.serverRegistry;
|
|
75
|
+
if (!instance) {
|
|
76
|
+
throw new Error("ServerRegistry not initialized for this environment. Call ServerRegistry.init() first");
|
|
77
|
+
}
|
|
78
|
+
return instance;
|
|
79
|
+
}
|
|
80
|
+
if (!ServerRegistry.instance) {
|
|
81
|
+
throw new Error("ServerRegistry not initialized. Call ServerRegistry.init() first");
|
|
82
|
+
}
|
|
83
|
+
return ServerRegistry.instance;
|
|
84
|
+
}
|
|
85
|
+
setNoBuiltin(value) {
|
|
86
|
+
this.noBuiltin = value;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Set tool configurations from TOML file
|
|
90
|
+
*
|
|
91
|
+
* @param mcpConfigs Tool configurations from TOML file
|
|
92
|
+
*/
|
|
93
|
+
setTomlMCPConfigs(mcpConfigs) {
|
|
94
|
+
this.tomlMCPConfigs = new Map(Object.entries(mcpConfigs));
|
|
95
|
+
}
|
|
96
|
+
getValidatedDirectories() {
|
|
97
|
+
return this.builtInServers.getValidatedDirectories();
|
|
98
|
+
}
|
|
99
|
+
async loadAllServers() {
|
|
100
|
+
// If servers are already loaded, don't reload them
|
|
101
|
+
if (this.servers.size > 0) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (this.noBuiltin) {
|
|
105
|
+
console.log('Built-in MCP servers disabled via --no-builtin flag');
|
|
106
|
+
}
|
|
107
|
+
const builtInServers = this.noBuiltin ? new Map() : await this.loadBuiltInServers();
|
|
108
|
+
const backendServers = this.noBuiltin ? new Map() : await this.loadServersFromBackend();
|
|
109
|
+
const customServers = await this.loadServersFromConfig();
|
|
110
|
+
const tomlServers = this.loadServersFromTomlConfigs();
|
|
111
|
+
// Check for duplicate server IDs and log warnings
|
|
112
|
+
this.checkForDuplicateServerIds(builtInServers, backendServers, customServers, tomlServers);
|
|
113
|
+
this.servers = new Map([...builtInServers, ...backendServers, ...customServers, ...tomlServers]);
|
|
114
|
+
}
|
|
115
|
+
validateServerConfig(config) {
|
|
116
|
+
try {
|
|
117
|
+
return ServerConfigSchema.parse(config);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof z.ZodError) {
|
|
121
|
+
throw new ConfigValidationError("Invalid server configuration", error);
|
|
122
|
+
}
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
loadServersFromTomlConfigs() {
|
|
127
|
+
const tempServers = new Map();
|
|
128
|
+
// Process each tool config from TOML
|
|
129
|
+
this.tomlMCPConfigs.forEach((serverConfig, serverId) => {
|
|
130
|
+
try {
|
|
131
|
+
const validConfig = {
|
|
132
|
+
command: serverConfig.command,
|
|
133
|
+
url: serverConfig.url,
|
|
134
|
+
args: serverConfig.args ?? [],
|
|
135
|
+
env: serverConfig.env ?? {},
|
|
136
|
+
};
|
|
137
|
+
tempServers.set(serverId, {
|
|
138
|
+
id: serverId,
|
|
139
|
+
type: serverTypes.CUSTOM,
|
|
140
|
+
command: validConfig.command,
|
|
141
|
+
url: validConfig.url,
|
|
142
|
+
getArgs: async () => validConfig.args || [],
|
|
143
|
+
getEnv: async () => validConfig.env || {},
|
|
144
|
+
headers: serverConfig.headers,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (error instanceof ConfigValidationError) {
|
|
149
|
+
console.error(`Invalid TOML tool configuration for ${serverId}:`, error.details);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.error(`Error loading TOML tool configuration for ${serverId}:`, error);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
return tempServers;
|
|
157
|
+
}
|
|
158
|
+
async loadServersFromBackend() {
|
|
159
|
+
const tempServers = new Map();
|
|
160
|
+
try {
|
|
161
|
+
// Use ServerData to get MCP tools from get-things API
|
|
162
|
+
const serverData = ServerData.getInstance();
|
|
163
|
+
const backendServers = serverData.getMCPTools();
|
|
164
|
+
for (const [serverId, tools] of Object.entries(backendServers)) {
|
|
165
|
+
tempServers.set(serverId, {
|
|
166
|
+
id: serverId,
|
|
167
|
+
type: serverTypes.BACKEND,
|
|
168
|
+
command: serverTypes.BACKEND,
|
|
169
|
+
serverClass: new DynamicBEMCPServer(serverId, tools),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
if (error?.response?.status === 401) {
|
|
175
|
+
handle401Error();
|
|
176
|
+
return tempServers;
|
|
177
|
+
}
|
|
178
|
+
console.error("Failed to load Qodo MCP servers");
|
|
179
|
+
}
|
|
180
|
+
return tempServers;
|
|
181
|
+
}
|
|
182
|
+
async loadBuiltInServers() {
|
|
183
|
+
const tempServers = new Map();
|
|
184
|
+
const servers = await this.builtInServers.getServers();
|
|
185
|
+
for (const server of servers) {
|
|
186
|
+
tempServers.set(server.id, server);
|
|
187
|
+
}
|
|
188
|
+
return tempServers;
|
|
189
|
+
}
|
|
190
|
+
async findRepositoryRoot(startPath) {
|
|
191
|
+
let currentPath = path.resolve(startPath);
|
|
192
|
+
// If startPath is a file, start from its directory
|
|
193
|
+
try {
|
|
194
|
+
const stat = await fs.stat(currentPath);
|
|
195
|
+
if (stat.isFile()) {
|
|
196
|
+
currentPath = path.dirname(currentPath);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// If we can't stat the path, assume it's a directory
|
|
201
|
+
}
|
|
202
|
+
// Traverse up the directory tree looking for .git
|
|
203
|
+
while (currentPath !== path.dirname(currentPath)) { // Stop at filesystem root
|
|
204
|
+
try {
|
|
205
|
+
const gitPath = path.join(currentPath, '.git');
|
|
206
|
+
await fs.access(gitPath);
|
|
207
|
+
return currentPath; // Found .git directory
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// .git not found, continue up
|
|
211
|
+
}
|
|
212
|
+
currentPath = path.dirname(currentPath);
|
|
213
|
+
}
|
|
214
|
+
return null; // No repository root found
|
|
215
|
+
}
|
|
216
|
+
async findNearestMCPConfig() {
|
|
217
|
+
// Start with the current working directory
|
|
218
|
+
let currentDir = process.cwd();
|
|
219
|
+
const rootDir = await this.findRepositoryRoot(currentDir) || path.parse(currentDir).root;
|
|
220
|
+
// Keep traversing up until we hit the root directory
|
|
221
|
+
while (currentDir !== rootDir) {
|
|
222
|
+
// Check if mcp.json exists in the current directory
|
|
223
|
+
const configPath = path.join(currentDir, 'mcp.json');
|
|
224
|
+
try {
|
|
225
|
+
// Check if the file exists and is readable
|
|
226
|
+
await fs.access(configPath, fs.constants.R_OK);
|
|
227
|
+
// If we reach here, the file exists and is readable
|
|
228
|
+
return configPath;
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
// File doesn't exist or isn't readable, move up to parent directory
|
|
232
|
+
currentDir = path.dirname(currentDir);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Check the root directory as our final attempt
|
|
236
|
+
const rootConfigPath = path.join(rootDir, 'mcp.json');
|
|
237
|
+
try {
|
|
238
|
+
await fs.access(rootConfigPath, fs.constants.R_OK);
|
|
239
|
+
return rootConfigPath;
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
// No mcp.json found in any parent directory
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async getMCPConfigPath() {
|
|
247
|
+
if (this.mcpConfigPath) {
|
|
248
|
+
return this.mcpConfigPath;
|
|
249
|
+
}
|
|
250
|
+
// Find the nearest mcp.json file to the current working directory
|
|
251
|
+
const mcpConfigPath = await this.findNearestMCPConfig();
|
|
252
|
+
if (!mcpConfigPath) {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
return mcpConfigPath;
|
|
256
|
+
}
|
|
257
|
+
async readMCPConfig() {
|
|
258
|
+
const mcpConfigPath = await this.getMCPConfigPath();
|
|
259
|
+
if (!mcpConfigPath) {
|
|
260
|
+
return {};
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const data = await fs.readFile(mcpConfigPath, 'utf-8');
|
|
264
|
+
return JSON.parse(data);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
console.error("Error reading MCP config file:", error);
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async loadServersFromConfig() {
|
|
272
|
+
const tempServers = new Map();
|
|
273
|
+
const mcpServersFromFile = await this.readMCPConfig();
|
|
274
|
+
if (!mcpServersFromFile?.mcpServers) {
|
|
275
|
+
// Silently continue without warning
|
|
276
|
+
return tempServers;
|
|
277
|
+
}
|
|
278
|
+
for (const [id, rawConfig] of Object.entries(mcpServersFromFile.mcpServers)) {
|
|
279
|
+
try {
|
|
280
|
+
const validConfig = this.validateServerConfig(rawConfig);
|
|
281
|
+
tempServers.set(id, {
|
|
282
|
+
id,
|
|
283
|
+
type: serverTypes.CUSTOM,
|
|
284
|
+
command: validConfig.command,
|
|
285
|
+
url: validConfig.url,
|
|
286
|
+
getArgs: async () => validConfig.args ?? [],
|
|
287
|
+
getEnv: async () => validConfig.env ?? {},
|
|
288
|
+
headers: rawConfig.headers,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
if (error instanceof ConfigValidationError) {
|
|
293
|
+
console.error(`Invalid server configuration for ${id}:`, error.details);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
console.error(`Error loading server configuration for ${id}:`, error);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return tempServers;
|
|
301
|
+
}
|
|
302
|
+
getAllServers() {
|
|
303
|
+
let sessionAvailableTools;
|
|
304
|
+
let sessionIgnoredTools;
|
|
305
|
+
try {
|
|
306
|
+
const sessionContext = SessionContext.getInstance();
|
|
307
|
+
sessionAvailableTools = sessionContext.getAvailableTools();
|
|
308
|
+
sessionIgnoredTools = sessionContext.getIgnoreTools();
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
// SessionContext not initialized (e.g., in-process SDK init ordering). Fall back to no filtering.
|
|
312
|
+
}
|
|
313
|
+
let availableServers;
|
|
314
|
+
let ignoredServers;
|
|
315
|
+
if (sessionAvailableTools && sessionAvailableTools.length > 0) {
|
|
316
|
+
availableServers = sessionAvailableTools.map((tool) => tool.split('.')[0]);
|
|
317
|
+
// if "Qodo Merge" is available, we need to add "git" server
|
|
318
|
+
if (availableServers.includes("qodo_merge") && !availableServers.includes("git")) {
|
|
319
|
+
availableServers.push("git");
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (sessionIgnoredTools && sessionIgnoredTools.length > 0) {
|
|
323
|
+
ignoredServers = sessionIgnoredTools.map((tool) => tool.split('.')[0]);
|
|
324
|
+
// if "git" is ignored, we need to ignore "Qodo Merge" too
|
|
325
|
+
if (ignoredServers.includes("git") && !ignoredServers.includes("qodo_merge")) {
|
|
326
|
+
console.warn('Warning: Ignoring "git" server, so "Qodo Merge" will be ignored too.');
|
|
327
|
+
ignoredServers.push("qodo_merge");
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Special-case: "subagents" server should not start by default.
|
|
331
|
+
// It is enabled only when explicitly requested via agent available_tools or by --subagents flag.
|
|
332
|
+
const enableSubagents = (() => {
|
|
333
|
+
const explicitlyListed = !!availableServers?.includes('subagents');
|
|
334
|
+
let flagEnabled = false;
|
|
335
|
+
try {
|
|
336
|
+
flagEnabled = SessionContext.getInstance().getFlags()?.subagents === true;
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
// SessionContext might not be initialized in some early init paths
|
|
340
|
+
}
|
|
341
|
+
return explicitlyListed || flagEnabled;
|
|
342
|
+
})();
|
|
343
|
+
return Array.from(this.servers.values()).filter((server) => {
|
|
344
|
+
if (server.id === 'subagents') {
|
|
345
|
+
// Explicit opt-in only
|
|
346
|
+
if (!enableSubagents)
|
|
347
|
+
return false;
|
|
348
|
+
// If availableServers is set (explicit allow-list) but user enabled via flag,
|
|
349
|
+
// still allow starting the subagents server.
|
|
350
|
+
if (availableServers && !availableServers.includes('subagents'))
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
if (availableServers) {
|
|
354
|
+
return availableServers.includes(server.id);
|
|
355
|
+
}
|
|
356
|
+
if (ignoredServers) {
|
|
357
|
+
return !ignoredServers.includes(server.id);
|
|
358
|
+
}
|
|
359
|
+
return true;
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
getServer(id) {
|
|
363
|
+
return this.servers.get(id);
|
|
364
|
+
}
|
|
365
|
+
getBuiltInServer(serverId) {
|
|
366
|
+
return this.builtInServers.getBuiltInServer(serverId);
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Check for duplicate server IDs across different server sources and log warnings
|
|
370
|
+
*
|
|
371
|
+
* @param builtInServers Map of built-in servers
|
|
372
|
+
* @param backendServers Map of backend servers (also considered built-in)
|
|
373
|
+
* @param customServers Map of custom servers from mcp.json
|
|
374
|
+
* @param tomlServers Map of servers from TOML configuration
|
|
375
|
+
*/
|
|
376
|
+
checkForDuplicateServerIds(builtInServers, backendServers, customServers, tomlServers) {
|
|
377
|
+
const serverSources = [
|
|
378
|
+
{ name: 'built-in', servers: builtInServers, isBuiltIn: true },
|
|
379
|
+
{ name: 'backend', servers: backendServers, isBuiltIn: true },
|
|
380
|
+
{ name: 'mcp.json file', servers: customServers, isBuiltIn: false },
|
|
381
|
+
{ name: 'agent configuration', servers: tomlServers, isBuiltIn: false }
|
|
382
|
+
];
|
|
383
|
+
const seenIds = new Map();
|
|
384
|
+
// Collect all server IDs and their sources
|
|
385
|
+
for (const source of serverSources) {
|
|
386
|
+
for (const serverId of source.servers.keys()) {
|
|
387
|
+
if (!seenIds.has(serverId)) {
|
|
388
|
+
seenIds.set(serverId, []);
|
|
389
|
+
}
|
|
390
|
+
seenIds.get(serverId).push({ name: source.name, isBuiltIn: source.isBuiltIn });
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Check for duplicates and handle appropriately
|
|
394
|
+
for (const [serverId, sources] of seenIds.entries()) {
|
|
395
|
+
if (sources.length > 1) {
|
|
396
|
+
const sourcesList = sources.filter(s => !s.isBuiltIn).map(s => s.name).join(', ');
|
|
397
|
+
const hasBuiltIn = sources.some(s => s.isBuiltIn);
|
|
398
|
+
if (hasBuiltIn) {
|
|
399
|
+
// Fatal error: built-in server conflict
|
|
400
|
+
throw new Error(`MCP server conflict: Server '${serverId}' conflicts with a built-in server. Found in: ${sourcesList}. Change the server ID or use noBuiltin option.`);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
// Warning: custom server override
|
|
404
|
+
console.warn(`MCP Server Override: Duplicate server ID '${serverId}' found in: ${sourcesList}. Agent configuration will override mcp.json configuration.`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=serversRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serversRegistry.js","sourceRoot":"","sources":["../../src/mcp/serversRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ToolData, ToolResult } from "../api/types.js";
|
|
2
|
+
import { SessionContext } from "../session/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Interface for tool processors that can handle pre/post processing
|
|
5
|
+
*/
|
|
6
|
+
interface ToolProcessor {
|
|
7
|
+
/**
|
|
8
|
+
* Process tool data before execution (e.g., validation, UI enhancements, logging)
|
|
9
|
+
*/
|
|
10
|
+
preProcess?(toolData: ToolData, sessionContext?: SessionContext): Promise<Partial<ToolData>>;
|
|
11
|
+
/**
|
|
12
|
+
* Process tool result after execution (e.g., formatting, additional data, cleanup)
|
|
13
|
+
*/
|
|
14
|
+
postProcess?(toolData: ToolData, result: ToolResult, sessionContext?: SessionContext): Promise<ToolResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Optional dry run method to simulate tool execution without side effects
|
|
17
|
+
*/
|
|
18
|
+
dryRun?(toolData: ToolData, sessionContext?: SessionContext): Promise<ToolResult>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Central tool processor that manages all tool-specific processors
|
|
22
|
+
*/
|
|
23
|
+
export declare class ToolProcessorManager {
|
|
24
|
+
private processors;
|
|
25
|
+
constructor();
|
|
26
|
+
/**
|
|
27
|
+
* Pre-process tool data before execution
|
|
28
|
+
*/
|
|
29
|
+
preProcessTool(toolData: ToolData, sessionContext?: SessionContext): Promise<ToolData>;
|
|
30
|
+
/**
|
|
31
|
+
* Post-process tool result after execution
|
|
32
|
+
*/
|
|
33
|
+
postProcessTool(toolData: ToolData, result: ToolResult, sessionContext?: SessionContext): Promise<ToolResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Perform a dry run of a tool without actually executing it
|
|
36
|
+
* Returns a simulated result indicating what would happen
|
|
37
|
+
*/
|
|
38
|
+
dryRunTool(toolData: ToolData, sessionContext?: SessionContext): Promise<ToolResult>;
|
|
39
|
+
}
|
|
40
|
+
export declare const toolProcessorManager: ToolProcessorManager;
|
|
41
|
+
export type { ToolProcessor };
|
|
42
|
+
//# sourceMappingURL=toolProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolProcessor.d.ts","sourceRoot":"","sources":["../../src/mcp/toolProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIvD,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAGnD;;GAEG;AACH,UAAU,aAAa;IACrB;;OAEG;IACH,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE7F;;OAEG;IACH,WAAW,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3G;;OAEG;IACH,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnF;AA0ID;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAyC;;IAS3D;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAe5F;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAcnH;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CA2B3F;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAG/D,YAAY,EAAE,aAAa,EAAE,CAAC"}
|