snow-flow 1.1.75 → 1.1.77
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/.claude-flow/queen/queen-memory.db +0 -0
- package/.claude-flow/queen-test/test-memory.db +0 -0
- package/.claude-flow/queen-test/test-memory.db-agents +0 -0
- package/.claude-flow/queen-test/test-memory.db-import +0 -0
- package/.claude-flow/queen-test/test-memory.db-memory +0 -0
- package/.claude-flow/queen-test/test-memory.db-neural +0 -0
- package/CLAUDE.md +145 -13
- package/README.md +117 -50
- package/dist/agents/base-agent.d.ts +92 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +228 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/coordinator.d.ts +200 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +775 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/agents/flow-builder-agent.d.ts +18 -0
- package/dist/agents/flow-builder-agent.d.ts.map +1 -0
- package/dist/agents/flow-builder-agent.js +536 -0
- package/dist/agents/flow-builder-agent.js.map +1 -0
- package/dist/agents/index.d.ts +18 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +61 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/queen-agent-example.d.ts +23 -0
- package/dist/agents/queen-agent-example.d.ts.map +1 -0
- package/dist/agents/queen-agent-example.js +241 -0
- package/dist/agents/queen-agent-example.js.map +1 -0
- package/dist/agents/queen-agent.d.ts +180 -0
- package/dist/agents/queen-agent.d.ts.map +1 -0
- package/dist/agents/queen-agent.js +909 -0
- package/dist/agents/queen-agent.js.map +1 -0
- package/dist/agents/queen-agent.test.d.ts +6 -0
- package/dist/agents/queen-agent.test.d.ts.map +1 -0
- package/dist/agents/queen-agent.test.js.map +1 -0
- package/dist/agents/script-writer-agent.d.ts +22 -0
- package/dist/agents/script-writer-agent.d.ts.map +1 -0
- package/dist/agents/script-writer-agent.js +695 -0
- package/dist/agents/script-writer-agent.js.map +1 -0
- package/dist/agents/security-agent.d.ts +23 -0
- package/dist/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/security-agent.js +619 -0
- package/dist/agents/security-agent.js.map +1 -0
- package/dist/agents/test-agent.d.ts +26 -0
- package/dist/agents/test-agent.d.ts.map +1 -0
- package/dist/agents/test-agent.js +735 -0
- package/dist/agents/test-agent.js.map +1 -0
- package/dist/agents/test-agents.d.ts +7 -0
- package/dist/agents/test-agents.d.ts.map +1 -0
- package/dist/agents/test-agents.js +65 -0
- package/dist/agents/test-agents.js.map +1 -0
- package/dist/agents/widget-creator-agent.d.ts +18 -0
- package/dist/agents/widget-creator-agent.d.ts.map +1 -0
- package/dist/agents/widget-creator-agent.js +440 -0
- package/dist/agents/widget-creator-agent.js.map +1 -0
- package/dist/cli/snow-flow-cli-integration.d.ts +30 -0
- package/dist/cli/snow-flow-cli-integration.d.ts.map +1 -0
- package/dist/cli/snow-flow-cli-integration.js +385 -0
- package/dist/cli/snow-flow-cli-integration.js.map +1 -0
- package/dist/cli.js +692 -150
- package/dist/cli.js.map +1 -1
- package/dist/config/snow-flow-config.d.ts +1454 -0
- package/dist/config/snow-flow-config.d.ts.map +1 -0
- package/dist/config/snow-flow-config.js +403 -0
- package/dist/config/snow-flow-config.js.map +1 -0
- package/dist/health/system-health.d.ts +123 -0
- package/dist/health/system-health.d.ts.map +1 -0
- package/dist/health/system-health.js +580 -0
- package/dist/health/system-health.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-transport-wrapper.d.ts +29 -0
- package/dist/mcp/http-transport-wrapper.d.ts.map +1 -0
- package/dist/mcp/http-transport-wrapper.js +318 -0
- package/dist/mcp/http-transport-wrapper.js.map +1 -0
- package/dist/mcp/service-discovery-client.d.ts +83 -0
- package/dist/mcp/service-discovery-client.d.ts.map +1 -0
- package/dist/mcp/service-discovery-client.js +211 -0
- package/dist/mcp/service-discovery-client.js.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts +58 -0
- package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp-refactored.js +651 -0
- package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp.js +116 -23
- package/dist/mcp/servicenow-deployment-mcp.js.map +1 -1
- package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts +43 -0
- package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp-refactored.js +576 -0
- package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp.d.ts +102 -1
- package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +1 -1
- package/dist/mcp/servicenow-intelligent-mcp.js +254 -18
- package/dist/mcp/servicenow-intelligent-mcp.js.map +1 -1
- package/dist/mcp/servicenow-operations-mcp.js +170 -32
- package/dist/mcp/servicenow-operations-mcp.js.map +1 -1
- package/dist/mcp/shared/agent-context-provider.d.ts +77 -0
- package/dist/mcp/shared/agent-context-provider.d.ts.map +1 -0
- package/dist/mcp/shared/agent-context-provider.js +292 -0
- package/dist/mcp/shared/agent-context-provider.js.map +1 -0
- package/dist/mcp/shared/base-mcp-server.d.ts +97 -0
- package/dist/mcp/shared/base-mcp-server.d.ts.map +1 -0
- package/dist/mcp/shared/base-mcp-server.js +216 -0
- package/dist/mcp/shared/base-mcp-server.js.map +1 -0
- package/dist/mcp/shared/mcp-memory-manager.d.ts +87 -0
- package/dist/mcp/shared/mcp-memory-manager.d.ts.map +1 -0
- package/dist/mcp/shared/mcp-memory-manager.js +423 -0
- package/dist/mcp/shared/mcp-memory-manager.js.map +1 -0
- package/dist/memory/index.d.ts +9 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +20 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/mcp-integration-example.d.ts +6 -0
- package/dist/memory/mcp-integration-example.d.ts.map +1 -0
- package/dist/memory/mcp-integration-example.js +282 -0
- package/dist/memory/mcp-integration-example.js.map +1 -0
- package/dist/memory/memory-client.d.ts +184 -0
- package/dist/memory/memory-client.d.ts.map +1 -0
- package/dist/memory/memory-client.js +325 -0
- package/dist/memory/memory-client.js.map +1 -0
- package/dist/memory/memory-operations.d.ts +170 -0
- package/dist/memory/memory-operations.d.ts.map +1 -0
- package/dist/memory/memory-operations.js +639 -0
- package/dist/memory/memory-operations.js.map +1 -0
- package/dist/memory/memory-system.d.ts +118 -0
- package/dist/memory/memory-system.d.ts.map +1 -0
- package/dist/memory/memory-system.js +477 -0
- package/dist/memory/memory-system.js.map +1 -0
- package/dist/memory/memory-test.d.ts +6 -0
- package/dist/memory/memory-test.d.ts.map +1 -0
- package/dist/memory/memory-test.js +162 -0
- package/dist/memory/memory-test.js.map +1 -0
- package/dist/memory/swarm-memory.d.ts +135 -0
- package/dist/memory/swarm-memory.d.ts.map +1 -0
- package/dist/memory/swarm-memory.js +378 -0
- package/dist/memory/swarm-memory.js.map +1 -0
- package/dist/monitoring/performance-tracker.d.ts +157 -0
- package/dist/monitoring/performance-tracker.d.ts.map +1 -0
- package/dist/monitoring/performance-tracker.js +571 -0
- package/dist/monitoring/performance-tracker.js.map +1 -0
- package/dist/orchestration/discovery/service-discovery.d.ts +81 -0
- package/dist/orchestration/discovery/service-discovery.d.ts.map +1 -0
- package/dist/orchestration/discovery/service-discovery.js +808 -0
- package/dist/orchestration/discovery/service-discovery.js.map +1 -0
- package/dist/orchestration/distributed-orchestrator.d.ts +131 -0
- package/dist/orchestration/distributed-orchestrator.d.ts.map +1 -0
- package/dist/orchestration/distributed-orchestrator.js +712 -0
- package/dist/orchestration/distributed-orchestrator.js.map +1 -0
- package/dist/orchestration/distribution/task-distribution-engine.d.ts +53 -0
- package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +1 -0
- package/dist/orchestration/distribution/task-distribution-engine.js +586 -0
- package/dist/orchestration/distribution/task-distribution-engine.js.map +1 -0
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts +606 -0
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +1 -0
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js +65 -0
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +1 -0
- package/dist/orchestration/protocols/mcpx-protocol.d.ts +71 -0
- package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +1 -0
- package/dist/orchestration/protocols/mcpx-protocol.js +668 -0
- package/dist/orchestration/protocols/mcpx-protocol.js.map +1 -0
- package/dist/orchestration/state/distributed-state-manager.d.ts +89 -0
- package/dist/orchestration/state/distributed-state-manager.d.ts.map +1 -0
- package/dist/orchestration/state/distributed-state-manager.js +716 -0
- package/dist/orchestration/state/distributed-state-manager.js.map +1 -0
- package/dist/queen/advanced-integration-test.d.ts +48 -0
- package/dist/queen/advanced-integration-test.d.ts.map +1 -0
- package/dist/queen/advanced-integration-test.js +474 -0
- package/dist/queen/advanced-integration-test.js.map +1 -0
- package/dist/queen/agent-factory.d.ts +43 -0
- package/dist/queen/agent-factory.d.ts.map +1 -0
- package/dist/queen/agent-factory.js +485 -0
- package/dist/queen/agent-factory.js.map +1 -0
- package/dist/queen/index.d.ts +58 -0
- package/dist/queen/index.d.ts.map +1 -0
- package/dist/queen/index.js +79 -0
- package/dist/queen/index.js.map +1 -0
- package/dist/queen/integration-example.d.ts +82 -0
- package/dist/queen/integration-example.d.ts.map +1 -0
- package/dist/queen/integration-example.js +220 -0
- package/dist/queen/integration-example.js.map +1 -0
- package/dist/queen/integration-test.d.ts +72 -0
- package/dist/queen/integration-test.d.ts.map +1 -0
- package/dist/queen/integration-test.js +564 -0
- package/dist/queen/integration-test.js.map +1 -0
- package/dist/queen/mock-mcp-client.d.ts +66 -0
- package/dist/queen/mock-mcp-client.d.ts.map +1 -0
- package/dist/queen/mock-mcp-client.js +297 -0
- package/dist/queen/mock-mcp-client.js.map +1 -0
- package/dist/queen/neural-learning.d.ts +28 -0
- package/dist/queen/neural-learning.d.ts.map +1 -0
- package/dist/queen/neural-learning.js +244 -0
- package/dist/queen/neural-learning.js.map +1 -0
- package/dist/queen/queen-memory.d.ts +31 -0
- package/dist/queen/queen-memory.d.ts.map +1 -0
- package/dist/queen/queen-memory.js +315 -0
- package/dist/queen/queen-memory.js.map +1 -0
- package/dist/queen/run-integration-tests.d.ts +9 -0
- package/dist/queen/run-integration-tests.d.ts.map +1 -0
- package/dist/queen/run-integration-tests.js +28 -0
- package/dist/queen/run-integration-tests.js.map +1 -0
- package/dist/queen/servicenow-queen.d.ts +56 -0
- package/dist/queen/servicenow-queen.d.ts.map +1 -0
- package/dist/queen/servicenow-queen.js +659 -0
- package/dist/queen/servicenow-queen.js.map +1 -0
- package/dist/queen/types.d.ts +58 -0
- package/dist/queen/types.d.ts.map +1 -0
- package/dist/queen/types.js +7 -0
- package/dist/queen/types.js.map +1 -0
- package/dist/snow-flow-system.d.ts +132 -0
- package/dist/snow-flow-system.d.ts.map +1 -0
- package/dist/snow-flow-system.js +396 -0
- package/dist/snow-flow-system.js.map +1 -0
- package/dist/types/todo.types.d.ts +61 -0
- package/dist/types/todo.types.d.ts.map +1 -0
- package/dist/types/todo.types.js +7 -0
- package/dist/types/todo.types.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +101 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +548 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/version.d.ts +2 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +16 -2
- package/dist/version.js.map +1 -1
- package/package.json +8 -3
- package/test-clean-install/.claude/config.json +0 -12
- package/test-clean-install/.env.example +0 -49
- package/test-clean-install/CLAUDE.md +0 -26
- package/test-clean-install/README.md +0 -23
- package/test-global-install/.claude/config.json +0 -12
- package/test-global-install/CLAUDE.md +0 -26
- package/test-global-install/README.md +0 -23
- package/test-global-install/test-global-install/.claude/config.json +0 -12
- package/test-global-install/test-global-install/CLAUDE.md +0 -26
- package/test-global-install/test-global-install/README.md +0 -23
- package/test-global-install/test-global-install/test-global-install/.claude/config.json +0 -12
- package/test-global-install/test-global-install/test-global-install/.env.example +0 -49
- package/test-global-install/test-global-install/test-global-install/CLAUDE.md +0 -26
- package/test-global-install/test-global-install/test-global-install/README.md +0 -23
- package/test-init-debug/.claude/config.json +0 -12
- package/test-init-debug/CLAUDE.md +0 -693
- package/test-init-debug/README.md +0 -392
- package/test-init-real/.claude/config.json +0 -12
- package/test-init-real/.claude/mcp-config.json +0 -128
- package/test-init-real/.claude/settings.json +0 -37
- package/test-init-real/CLAUDE.md +0 -693
- package/test-init-real/README.md +0 -392
- package/test-init-real/activate-mcp.sh +0 -15
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* ServiceNow
|
|
3
|
+
* Snow-Flow: ServiceNow Hive-Mind Intelligence Framework
|
|
4
4
|
* Built with Claude Code integration
|
|
5
5
|
*/
|
|
6
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.ServiceNowMCPServer = exports.Logger = exports.ServiceNowClient = exports.ServiceNowOAuth = void 0;
|
|
21
|
+
exports.SystemHealth = exports.PerformanceTracker = exports.FALLBACK_STRATEGIES = exports.ErrorRecovery = exports.MemorySystem = exports.snowFlowConfig = exports.SnowFlowConfig = exports.snowFlowSystem = exports.SnowFlowSystem = exports.ServiceNowMCPServer = exports.Logger = exports.ServiceNowClient = exports.ServiceNowOAuth = void 0;
|
|
22
22
|
// Export main types
|
|
23
23
|
__exportStar(require("./types/index.js"), exports);
|
|
24
24
|
// Export utilities
|
|
@@ -31,5 +31,21 @@ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () {
|
|
|
31
31
|
// Export MCP server
|
|
32
32
|
var servicenow_mcp_server_js_1 = require("./mcp/servicenow-mcp-server.js");
|
|
33
33
|
Object.defineProperty(exports, "ServiceNowMCPServer", { enumerable: true, get: function () { return servicenow_mcp_server_js_1.ServiceNowMCPServer; } });
|
|
34
|
-
|
|
34
|
+
// Snow-Flow System Integration (New)
|
|
35
|
+
var snow_flow_system_js_1 = require("./snow-flow-system.js");
|
|
36
|
+
Object.defineProperty(exports, "SnowFlowSystem", { enumerable: true, get: function () { return snow_flow_system_js_1.SnowFlowSystem; } });
|
|
37
|
+
Object.defineProperty(exports, "snowFlowSystem", { enumerable: true, get: function () { return snow_flow_system_js_1.snowFlowSystem; } });
|
|
38
|
+
var snow_flow_config_js_1 = require("./config/snow-flow-config.js");
|
|
39
|
+
Object.defineProperty(exports, "SnowFlowConfig", { enumerable: true, get: function () { return snow_flow_config_js_1.SnowFlowConfig; } });
|
|
40
|
+
Object.defineProperty(exports, "snowFlowConfig", { enumerable: true, get: function () { return snow_flow_config_js_1.snowFlowConfig; } });
|
|
41
|
+
var memory_system_js_1 = require("./memory/memory-system.js");
|
|
42
|
+
Object.defineProperty(exports, "MemorySystem", { enumerable: true, get: function () { return memory_system_js_1.MemorySystem; } });
|
|
43
|
+
var error_recovery_js_1 = require("./utils/error-recovery.js");
|
|
44
|
+
Object.defineProperty(exports, "ErrorRecovery", { enumerable: true, get: function () { return error_recovery_js_1.ErrorRecovery; } });
|
|
45
|
+
Object.defineProperty(exports, "FALLBACK_STRATEGIES", { enumerable: true, get: function () { return error_recovery_js_1.FALLBACK_STRATEGIES; } });
|
|
46
|
+
var performance_tracker_js_1 = require("./monitoring/performance-tracker.js");
|
|
47
|
+
Object.defineProperty(exports, "PerformanceTracker", { enumerable: true, get: function () { return performance_tracker_js_1.PerformanceTracker; } });
|
|
48
|
+
var system_health_js_1 = require("./health/system-health.js");
|
|
49
|
+
Object.defineProperty(exports, "SystemHealth", { enumerable: true, get: function () { return system_health_js_1.SystemHealth; } });
|
|
50
|
+
console.log('Snow-Flow: ServiceNow Hive-Mind Intelligence Framework loaded');
|
|
35
51
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,oBAAoB;AACpB,mDAAiC;AAEjC,mBAAmB;AACnB,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,qEAAgE;AAAvD,wHAAA,gBAAgB,OAAA;AACzB,+CAA2C;AAAlC,mGAAA,MAAM,OAAA;AAEf,oBAAoB;AACpB,2EAAqE;AAA5D,+HAAA,mBAAmB,OAAA;AAE5B,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,oBAAoB;AACpB,mDAAiC;AAEjC,mBAAmB;AACnB,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,qEAAgE;AAAvD,wHAAA,gBAAgB,OAAA;AACzB,+CAA2C;AAAlC,mGAAA,MAAM,OAAA;AAEf,oBAAoB;AACpB,2EAAqE;AAA5D,+HAAA,mBAAmB,OAAA;AAE5B,qCAAqC;AACrC,6DAAuE;AAA9D,qHAAA,cAAc,OAAA;AAAE,qHAAA,cAAc,OAAA;AACvC,oEAA8E;AAArE,qHAAA,cAAc,OAAA;AAAE,qHAAA,cAAc,OAAA;AACvC,8DAAyD;AAAhD,gHAAA,YAAY,OAAA;AACrB,+DAA+E;AAAtE,kHAAA,aAAa,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAC3C,8EAAyE;AAAhE,4HAAA,kBAAkB,OAAA;AAC3B,8DAAyD;AAAhD,gHAAA,YAAY,OAAA;AAqCrB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Transport Wrapper for MCP Servers
|
|
3
|
+
* Converts stdio-based MCP servers to HTTP endpoints for containerization
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
+
export interface MCPServerConfig {
|
|
7
|
+
name: string;
|
|
8
|
+
port: number;
|
|
9
|
+
version: string;
|
|
10
|
+
healthCheckPath?: string;
|
|
11
|
+
metricsPath?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class HttpTransportWrapper {
|
|
14
|
+
private app;
|
|
15
|
+
private mcpServer;
|
|
16
|
+
private logger;
|
|
17
|
+
private config;
|
|
18
|
+
private serviceDiscovery;
|
|
19
|
+
private isReady;
|
|
20
|
+
constructor(mcpServer: Server, config: MCPServerConfig);
|
|
21
|
+
private setupMiddleware;
|
|
22
|
+
private setupRoutes;
|
|
23
|
+
private handleMCPRequest;
|
|
24
|
+
private handleToolCall;
|
|
25
|
+
private handleError;
|
|
26
|
+
private generateMetrics;
|
|
27
|
+
start(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=http-transport-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport-wrapper.d.ts","sourceRoot":"","sources":["../../src/mcp/http-transport-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,OAAO,CAAkB;gBAErB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe;IAWtD,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;YA8GL,gBAAgB;YA0EhB,cAAc;IAkB5B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;IAoBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8DpC"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HTTP Transport Wrapper for MCP Servers
|
|
4
|
+
* Converts stdio-based MCP servers to HTTP endpoints for containerization
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.HttpTransportWrapper = void 0;
|
|
11
|
+
const express_1 = __importDefault(require("express"));
|
|
12
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
13
|
+
const service_discovery_client_js_1 = require("./service-discovery-client.js");
|
|
14
|
+
class HttpTransportWrapper {
|
|
15
|
+
constructor(mcpServer, config) {
|
|
16
|
+
this.isReady = false;
|
|
17
|
+
this.mcpServer = mcpServer;
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.logger = new logger_js_1.Logger(`HttpTransport:${config.name}`);
|
|
20
|
+
this.app = (0, express_1.default)();
|
|
21
|
+
this.serviceDiscovery = new service_discovery_client_js_1.ServiceDiscoveryClient();
|
|
22
|
+
this.setupMiddleware();
|
|
23
|
+
this.setupRoutes();
|
|
24
|
+
}
|
|
25
|
+
setupMiddleware() {
|
|
26
|
+
// Security headers
|
|
27
|
+
this.app.use((req, res, next) => {
|
|
28
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
29
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
30
|
+
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
31
|
+
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
|
|
32
|
+
next();
|
|
33
|
+
});
|
|
34
|
+
// Body parser for JSON requests
|
|
35
|
+
this.app.use(express_1.default.json({ limit: '10mb' }));
|
|
36
|
+
this.app.use(express_1.default.urlencoded({ extended: true }));
|
|
37
|
+
// Request logging middleware
|
|
38
|
+
this.app.use((req, res, next) => {
|
|
39
|
+
this.logger.debug(`${req.method} ${req.path}`, {
|
|
40
|
+
userAgent: req.get('User-Agent'),
|
|
41
|
+
ip: req.ip,
|
|
42
|
+
contentLength: req.get('Content-Length')
|
|
43
|
+
});
|
|
44
|
+
next();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
setupRoutes() {
|
|
48
|
+
// Health check endpoint
|
|
49
|
+
this.app.get(this.config.healthCheckPath || '/health', (req, res) => {
|
|
50
|
+
const health = {
|
|
51
|
+
status: this.isReady ? 'healthy' : 'starting',
|
|
52
|
+
service: this.config.name,
|
|
53
|
+
version: this.config.version,
|
|
54
|
+
timestamp: new Date().toISOString(),
|
|
55
|
+
uptime: process.uptime(),
|
|
56
|
+
memory: process.memoryUsage(),
|
|
57
|
+
port: this.config.port
|
|
58
|
+
};
|
|
59
|
+
const statusCode = this.isReady ? 200 : 503;
|
|
60
|
+
res.status(statusCode).json(health);
|
|
61
|
+
});
|
|
62
|
+
// Readiness probe
|
|
63
|
+
this.app.get('/ready', (req, res) => {
|
|
64
|
+
if (this.isReady) {
|
|
65
|
+
res.status(200).json({ ready: true, service: this.config.name });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
res.status(503).json({ ready: false, service: this.config.name });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
// Liveness probe
|
|
72
|
+
this.app.get('/live', (req, res) => {
|
|
73
|
+
res.status(200).json({ alive: true, service: this.config.name });
|
|
74
|
+
});
|
|
75
|
+
// Metrics endpoint (basic)
|
|
76
|
+
this.app.get(this.config.metricsPath || '/metrics', (req, res) => {
|
|
77
|
+
const metrics = this.generateMetrics();
|
|
78
|
+
res.set('Content-Type', 'text/plain');
|
|
79
|
+
res.send(metrics);
|
|
80
|
+
});
|
|
81
|
+
// MCP API endpoints
|
|
82
|
+
this.app.post('/mcp/list-tools', async (req, res) => {
|
|
83
|
+
try {
|
|
84
|
+
const result = await this.handleMCPRequest('listTools', req.body);
|
|
85
|
+
res.json(result);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.handleError(res, error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
this.app.post('/mcp/call-tool', async (req, res) => {
|
|
92
|
+
try {
|
|
93
|
+
const result = await this.handleMCPRequest('callTool', req.body);
|
|
94
|
+
res.json(result);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.handleError(res, error);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
this.app.post('/mcp/list-resources', async (req, res) => {
|
|
101
|
+
try {
|
|
102
|
+
const result = await this.handleMCPRequest('listResources', req.body);
|
|
103
|
+
res.json(result);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
this.handleError(res, error);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
this.app.post('/mcp/read-resource', async (req, res) => {
|
|
110
|
+
try {
|
|
111
|
+
const result = await this.handleMCPRequest('readResource', req.body);
|
|
112
|
+
res.json(result);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
this.handleError(res, error);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// Service info endpoint
|
|
119
|
+
this.app.get('/info', (req, res) => {
|
|
120
|
+
res.json({
|
|
121
|
+
name: this.config.name,
|
|
122
|
+
version: this.config.version,
|
|
123
|
+
port: this.config.port,
|
|
124
|
+
endpoints: {
|
|
125
|
+
health: this.config.healthCheckPath || '/health',
|
|
126
|
+
metrics: this.config.metricsPath || '/metrics',
|
|
127
|
+
mcp: [
|
|
128
|
+
'/mcp/list-tools',
|
|
129
|
+
'/mcp/call-tool',
|
|
130
|
+
'/mcp/list-resources',
|
|
131
|
+
'/mcp/read-resource'
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
// 404 handler
|
|
137
|
+
this.app.use('*', (req, res) => {
|
|
138
|
+
res.status(404).json({
|
|
139
|
+
error: 'Not Found',
|
|
140
|
+
path: req.originalUrl,
|
|
141
|
+
service: this.config.name
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
// Global error handler
|
|
145
|
+
this.app.use((error, req, res, next) => {
|
|
146
|
+
this.logger.error('Unhandled error:', error);
|
|
147
|
+
this.handleError(res, error);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async handleMCPRequest(method, params) {
|
|
151
|
+
// Convert HTTP request to MCP protocol format
|
|
152
|
+
const mcpRequest = {
|
|
153
|
+
jsonrpc: '2.0',
|
|
154
|
+
id: Date.now(),
|
|
155
|
+
method,
|
|
156
|
+
params: params || {}
|
|
157
|
+
};
|
|
158
|
+
try {
|
|
159
|
+
// Process request through the MCP server
|
|
160
|
+
let result;
|
|
161
|
+
switch (method) {
|
|
162
|
+
case 'listTools':
|
|
163
|
+
// Handle list tools request by calling the MCP server's tools handler
|
|
164
|
+
const toolsResponse = await this.mcpServer.getCapabilities();
|
|
165
|
+
result = {
|
|
166
|
+
tools: toolsResponse.capabilities?.tools || []
|
|
167
|
+
};
|
|
168
|
+
break;
|
|
169
|
+
case 'callTool':
|
|
170
|
+
// Handle tool call by routing to the MCP server's tool handler
|
|
171
|
+
if (!params.name) {
|
|
172
|
+
throw new Error('Tool name is required for callTool');
|
|
173
|
+
}
|
|
174
|
+
// Create a mock request that matches MCP CallToolRequestSchema
|
|
175
|
+
const toolRequest = {
|
|
176
|
+
params: {
|
|
177
|
+
name: params.name,
|
|
178
|
+
arguments: params.arguments || {}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
// Find the appropriate request handler for CallToolRequestSchema
|
|
182
|
+
// Note: This requires internal access to MCP server handlers
|
|
183
|
+
// In a production environment, you'd need a more robust integration
|
|
184
|
+
result = await this.handleToolCall(toolRequest);
|
|
185
|
+
break;
|
|
186
|
+
case 'listResources':
|
|
187
|
+
// Handle list resources - return empty list if not supported
|
|
188
|
+
result = { resources: [] };
|
|
189
|
+
break;
|
|
190
|
+
case 'readResource':
|
|
191
|
+
// Handle read resource - throw error if not supported
|
|
192
|
+
throw new Error('Resource reading not implemented for this server');
|
|
193
|
+
default:
|
|
194
|
+
throw new Error(`Unsupported MCP method: ${method}`);
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
jsonrpc: '2.0',
|
|
198
|
+
id: mcpRequest.id,
|
|
199
|
+
result
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.logger.error(`MCP request error for ${method}:`, error);
|
|
204
|
+
return {
|
|
205
|
+
jsonrpc: '2.0',
|
|
206
|
+
id: mcpRequest.id,
|
|
207
|
+
error: {
|
|
208
|
+
code: -32603,
|
|
209
|
+
message: error instanceof Error ? error.message : 'Internal error',
|
|
210
|
+
data: { method, originalParams: params }
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async handleToolCall(request) {
|
|
216
|
+
// This is a workaround since we can't directly access MCP server's internal handlers
|
|
217
|
+
// In a real implementation, you'd need to either:
|
|
218
|
+
// 1. Extend the MCP SDK to expose request handlers
|
|
219
|
+
// 2. Use a proper transport layer that already exists
|
|
220
|
+
// 3. Create a bridge that uses the existing stdio transport
|
|
221
|
+
const { name, arguments: args } = request.params;
|
|
222
|
+
// For now, we'll at least validate that the tool exists
|
|
223
|
+
const capabilities = await this.mcpServer.getCapabilities();
|
|
224
|
+
const tools = capabilities.capabilities?.tools || [];
|
|
225
|
+
// This is still a limitation - we can't actually execute the tool without
|
|
226
|
+
// access to the MCP server's internal request handlers
|
|
227
|
+
throw new Error(`Tool execution not yet implemented in HTTP transport. Tool '${name}' exists but cannot be executed via HTTP. Use stdio transport instead.`);
|
|
228
|
+
}
|
|
229
|
+
handleError(res, error) {
|
|
230
|
+
const statusCode = error.statusCode || 500;
|
|
231
|
+
const errorResponse = {
|
|
232
|
+
error: {
|
|
233
|
+
code: error.code || 'INTERNAL_ERROR',
|
|
234
|
+
message: error.message || 'Internal server error',
|
|
235
|
+
service: this.config.name
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
this.logger.error('Request error:', error);
|
|
239
|
+
res.status(statusCode).json(errorResponse);
|
|
240
|
+
}
|
|
241
|
+
generateMetrics() {
|
|
242
|
+
const memUsage = process.memoryUsage();
|
|
243
|
+
const uptime = process.uptime();
|
|
244
|
+
return `# HELP mcp_server_uptime_seconds Total uptime of the MCP server
|
|
245
|
+
# TYPE mcp_server_uptime_seconds counter
|
|
246
|
+
mcp_server_uptime_seconds{service="${this.config.name}"} ${uptime}
|
|
247
|
+
|
|
248
|
+
# HELP mcp_server_memory_usage_bytes Memory usage in bytes
|
|
249
|
+
# TYPE mcp_server_memory_usage_bytes gauge
|
|
250
|
+
mcp_server_memory_usage_bytes{service="${this.config.name}",type="rss"} ${memUsage.rss}
|
|
251
|
+
mcp_server_memory_usage_bytes{service="${this.config.name}",type="heapTotal"} ${memUsage.heapTotal}
|
|
252
|
+
mcp_server_memory_usage_bytes{service="${this.config.name}",type="heapUsed"} ${memUsage.heapUsed}
|
|
253
|
+
|
|
254
|
+
# HELP mcp_server_ready Server readiness status
|
|
255
|
+
# TYPE mcp_server_ready gauge
|
|
256
|
+
mcp_server_ready{service="${this.config.name}"} ${this.isReady ? 1 : 0}
|
|
257
|
+
`;
|
|
258
|
+
}
|
|
259
|
+
async start() {
|
|
260
|
+
return new Promise((resolve, reject) => {
|
|
261
|
+
const server = this.app.listen(this.config.port, async () => {
|
|
262
|
+
this.logger.info(`MCP HTTP server started on port ${this.config.port}`);
|
|
263
|
+
try {
|
|
264
|
+
// Register with service discovery
|
|
265
|
+
await this.serviceDiscovery.register({
|
|
266
|
+
id: `${this.config.name}-${process.env.HOSTNAME || 'localhost'}`,
|
|
267
|
+
name: this.config.name,
|
|
268
|
+
address: process.env.SERVICE_IP || 'localhost',
|
|
269
|
+
port: this.config.port,
|
|
270
|
+
health: {
|
|
271
|
+
http: `http://${process.env.SERVICE_IP || 'localhost'}:${this.config.port}/health`,
|
|
272
|
+
interval: '10s',
|
|
273
|
+
timeout: '3s',
|
|
274
|
+
deregisterAfter: '30s'
|
|
275
|
+
},
|
|
276
|
+
tags: [
|
|
277
|
+
'mcp-server',
|
|
278
|
+
`version:${this.config.version}`,
|
|
279
|
+
`environment:${process.env.NODE_ENV || 'development'}`
|
|
280
|
+
]
|
|
281
|
+
});
|
|
282
|
+
this.isReady = true;
|
|
283
|
+
this.logger.info(`Service registered with discovery: ${this.config.name}`);
|
|
284
|
+
resolve();
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
this.logger.warn('Service discovery registration failed:', error);
|
|
288
|
+
// Continue without service discovery
|
|
289
|
+
this.isReady = true;
|
|
290
|
+
resolve();
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
server.on('error', (error) => {
|
|
294
|
+
this.logger.error(`Server startup error:`, error);
|
|
295
|
+
reject(error);
|
|
296
|
+
});
|
|
297
|
+
// Graceful shutdown handling
|
|
298
|
+
const shutdown = async () => {
|
|
299
|
+
this.logger.info('Shutting down HTTP server...');
|
|
300
|
+
try {
|
|
301
|
+
await this.serviceDiscovery.deregister(`${this.config.name}-${process.env.HOSTNAME || 'localhost'}`);
|
|
302
|
+
this.logger.info('Service deregistered from discovery');
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
this.logger.warn('Service deregistration failed:', error);
|
|
306
|
+
}
|
|
307
|
+
server.close(() => {
|
|
308
|
+
this.logger.info('HTTP server closed');
|
|
309
|
+
process.exit(0);
|
|
310
|
+
});
|
|
311
|
+
};
|
|
312
|
+
process.on('SIGTERM', shutdown);
|
|
313
|
+
process.on('SIGINT', shutdown);
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
exports.HttpTransportWrapper = HttpTransportWrapper;
|
|
318
|
+
//# sourceMappingURL=http-transport-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport-wrapper.js","sourceRoot":"","sources":["../../src/mcp/http-transport-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Discovery Client for Consul Integration
|
|
3
|
+
*/
|
|
4
|
+
export interface ServiceRegistration {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
address: string;
|
|
8
|
+
port: number;
|
|
9
|
+
health?: {
|
|
10
|
+
http?: string;
|
|
11
|
+
tcp?: string;
|
|
12
|
+
interval?: string;
|
|
13
|
+
timeout?: string;
|
|
14
|
+
deregisterAfter?: string;
|
|
15
|
+
};
|
|
16
|
+
tags?: string[];
|
|
17
|
+
meta?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export interface ServiceDiscoveryConfig {
|
|
20
|
+
consulUrl: string;
|
|
21
|
+
timeout: number;
|
|
22
|
+
retryAttempts: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class ServiceDiscoveryClient {
|
|
25
|
+
private client;
|
|
26
|
+
private logger;
|
|
27
|
+
private config;
|
|
28
|
+
constructor(config?: Partial<ServiceDiscoveryConfig>);
|
|
29
|
+
/**
|
|
30
|
+
* Register a service with Consul
|
|
31
|
+
*/
|
|
32
|
+
register(service: ServiceRegistration): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Deregister a service from Consul
|
|
35
|
+
*/
|
|
36
|
+
deregister(serviceId: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Discover services by name
|
|
39
|
+
*/
|
|
40
|
+
discover(serviceName: string, healthy?: boolean): Promise<ServiceInstance[]>;
|
|
41
|
+
/**
|
|
42
|
+
* List all services
|
|
43
|
+
*/
|
|
44
|
+
listServices(): Promise<string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Get service health status
|
|
47
|
+
*/
|
|
48
|
+
getServiceHealth(serviceName: string): Promise<ServiceHealth[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if Consul is available
|
|
51
|
+
*/
|
|
52
|
+
isAvailable(): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Watch for service changes (simplified polling approach)
|
|
55
|
+
*/
|
|
56
|
+
watchService(serviceName: string, callback: (services: ServiceInstance[]) => void, interval?: number): () => void;
|
|
57
|
+
}
|
|
58
|
+
export interface ServiceInstance {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
address: string;
|
|
62
|
+
port: number;
|
|
63
|
+
tags: string[];
|
|
64
|
+
meta: Record<string, string>;
|
|
65
|
+
health?: Array<{
|
|
66
|
+
status: string;
|
|
67
|
+
output: string;
|
|
68
|
+
name: string;
|
|
69
|
+
}>;
|
|
70
|
+
}
|
|
71
|
+
export interface ServiceHealth {
|
|
72
|
+
serviceId: string;
|
|
73
|
+
serviceName: string;
|
|
74
|
+
address: string;
|
|
75
|
+
port: number;
|
|
76
|
+
checks: Array<{
|
|
77
|
+
checkId: string;
|
|
78
|
+
name: string;
|
|
79
|
+
status: string;
|
|
80
|
+
output: string;
|
|
81
|
+
}>;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=service-discovery-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-discovery-client.d.ts","sourceRoot":"","sources":["../../src/mcp/service-discovery-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;IA4CpD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD3D;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA2B/E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUvC;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBrE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,QAAQ,SAAQ,GAAG,MAAM,IAAI;CAwBjH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
|