openclaw-protocol-bridge 1.0.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.
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * MCP (Model Context Protocol) Adapter
4
+ * Specification: https://modelcontextprotocol.io/specification/2025-11-25
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.MCPAdapter = void 0;
11
+ const axios_1 = __importDefault(require("axios"));
12
+ const base_1 = require("./base");
13
+ const types_1 = require("../core/types");
14
+ class MCPAdapter extends base_1.BaseAdapter {
15
+ constructor(config) {
16
+ super('mcp', config);
17
+ this.registeredAgents = new Map();
18
+ this.client = axios_1.default.create({
19
+ timeout: 30000,
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ },
23
+ });
24
+ }
25
+ async initialize() {
26
+ console.log(`Initializing MCP adapter (version: ${this.config.version})`);
27
+ // MCP-specific initialization
28
+ }
29
+ async connect() {
30
+ try {
31
+ // In MCP, connection is per-agent, not protocol-wide
32
+ // This is a placeholder for protocol-level setup
33
+ this.connected = true;
34
+ console.log('MCP adapter connected');
35
+ }
36
+ catch (error) {
37
+ this.handleError(error, 'Failed to connect to MCP');
38
+ }
39
+ }
40
+ async disconnect() {
41
+ this.connected = false;
42
+ this.registeredAgents.clear();
43
+ console.log('MCP adapter disconnected');
44
+ }
45
+ async send(message) {
46
+ this.validateMessage(message);
47
+ try {
48
+ // Get target agent endpoint
49
+ const agent = this.registeredAgents.get(message.to.id);
50
+ if (!agent) {
51
+ throw new types_1.ProtocolError('mcp', `Agent not found: ${message.to.id}`);
52
+ }
53
+ // Translate to MCP format
54
+ const mcpRequest = this.toProtocolFormat(message);
55
+ // Send via HTTP POST
56
+ const response = await this.client.post(agent.endpoint, mcpRequest);
57
+ // Handle MCP response
58
+ if (response.data.error) {
59
+ return {
60
+ messageId: message.id,
61
+ status: 'error',
62
+ error: {
63
+ code: response.data.error.code.toString(),
64
+ message: response.data.error.message,
65
+ details: response.data.error.data,
66
+ },
67
+ };
68
+ }
69
+ return {
70
+ messageId: message.id,
71
+ status: 'success',
72
+ data: response.data.result,
73
+ };
74
+ }
75
+ catch (error) {
76
+ return {
77
+ messageId: message.id,
78
+ status: 'error',
79
+ error: {
80
+ code: 'MCP_SEND_ERROR',
81
+ message: error.message,
82
+ details: error,
83
+ },
84
+ };
85
+ }
86
+ }
87
+ async receive(data) {
88
+ return this.fromProtocolFormat(data);
89
+ }
90
+ toProtocolFormat(message) {
91
+ return {
92
+ jsonrpc: '2.0',
93
+ id: message.id,
94
+ method: message.action,
95
+ params: message.payload,
96
+ };
97
+ }
98
+ fromProtocolFormat(data) {
99
+ const mcpRequest = data;
100
+ return {
101
+ id: mcpRequest.id.toString(),
102
+ timestamp: new Date(),
103
+ from: {
104
+ id: 'unknown',
105
+ protocol: 'mcp',
106
+ },
107
+ to: {
108
+ id: 'bridge',
109
+ protocol: 'mcp',
110
+ },
111
+ type: 'request',
112
+ action: mcpRequest.method,
113
+ payload: mcpRequest.params,
114
+ };
115
+ }
116
+ async discover() {
117
+ // In MCP, discovery happens through the tools/list method
118
+ const agents = [];
119
+ for (const [id, agent] of this.registeredAgents) {
120
+ if (agent.status === 'active') {
121
+ agents.push(agent);
122
+ }
123
+ }
124
+ return agents;
125
+ }
126
+ async validateAgent(agent) {
127
+ try {
128
+ // Test connection by calling tools/list
129
+ const response = await this.client.post(agent.endpoint, {
130
+ jsonrpc: '2.0',
131
+ id: 'validate',
132
+ method: 'tools/list',
133
+ params: {},
134
+ });
135
+ if (response.data.error) {
136
+ return false;
137
+ }
138
+ // Extract tools as capabilities
139
+ const tools = response.data.result?.tools || [];
140
+ agent.capabilities = tools.map((tool) => ({
141
+ name: tool.name,
142
+ description: tool.description,
143
+ inputSchema: tool.inputSchema,
144
+ }));
145
+ // Store agent
146
+ this.registeredAgents.set(agent.id, agent);
147
+ return true;
148
+ }
149
+ catch (error) {
150
+ console.error(`Failed to validate MCP agent ${agent.id}:`, error);
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * MCP-specific: Call a tool
156
+ */
157
+ async callTool(agentId, toolName, args) {
158
+ const agent = this.registeredAgents.get(agentId);
159
+ if (!agent) {
160
+ throw new types_1.ProtocolError('mcp', `Agent not found: ${agentId}`);
161
+ }
162
+ const response = await this.client.post(agent.endpoint, {
163
+ jsonrpc: '2.0',
164
+ id: Date.now().toString(),
165
+ method: 'tools/call',
166
+ params: {
167
+ name: toolName,
168
+ arguments: args,
169
+ },
170
+ });
171
+ if (response.data.error) {
172
+ throw new types_1.ProtocolError('mcp', response.data.error.message);
173
+ }
174
+ return response.data.result;
175
+ }
176
+ /**
177
+ * MCP-specific: List resources
178
+ */
179
+ async listResources(agentId) {
180
+ const agent = this.registeredAgents.get(agentId);
181
+ if (!agent) {
182
+ throw new types_1.ProtocolError('mcp', `Agent not found: ${agentId}`);
183
+ }
184
+ const response = await this.client.post(agent.endpoint, {
185
+ jsonrpc: '2.0',
186
+ id: Date.now().toString(),
187
+ method: 'resources/list',
188
+ params: {},
189
+ });
190
+ if (response.data.error) {
191
+ throw new types_1.ProtocolError('mcp', response.data.error.message);
192
+ }
193
+ return response.data.result?.resources || [];
194
+ }
195
+ }
196
+ exports.MCPAdapter = MCPAdapter;
197
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/adapters/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Protocol Bridge CLI
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
@@ -0,0 +1,259 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Protocol Bridge CLI
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ const commander_1 = require("commander");
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const dotenv = __importStar(require("dotenv"));
46
+ const fs = __importStar(require("fs"));
47
+ const server_1 = require("./server");
48
+ dotenv.config();
49
+ const program = new commander_1.Command();
50
+ program
51
+ .name('protocol-bridge')
52
+ .description('The TCP/IP of Agent Standards - Universal protocol translation layer for AI Agents')
53
+ .version('1.0.0');
54
+ /**
55
+ * Serve command - Start the bridge server
56
+ */
57
+ program
58
+ .command('serve')
59
+ .description('Start the protocol bridge server')
60
+ .option('-p, --port <number>', 'Server port', '8080')
61
+ .option('-h, --host <string>', 'Server host', '0.0.0.0')
62
+ .option('-c, --config <path>', 'Config file path', './bridge.config.json')
63
+ .option('--metrics', 'Enable metrics endpoint')
64
+ .action(async (options) => {
65
+ try {
66
+ console.log(chalk_1.default.blue('šŸŒ‰ Starting Protocol Bridge...'));
67
+ const config = loadConfig(options.config);
68
+ if (!config.server) {
69
+ config.server = { port: 8080, host: '0.0.0.0' };
70
+ }
71
+ config.server.port = parseInt(options.port);
72
+ config.server.host = options.host;
73
+ await (0, server_1.startServer)(config, options.metrics);
74
+ }
75
+ catch (error) {
76
+ console.error(chalk_1.default.red('Failed to start bridge:'), error.message);
77
+ process.exit(1);
78
+ }
79
+ });
80
+ /**
81
+ * Register command - Register an agent
82
+ */
83
+ program
84
+ .command('register')
85
+ .description('Register an agent with the bridge')
86
+ .requiredOption('--id <string>', 'Agent ID')
87
+ .requiredOption('--protocol <string>', 'Protocol type (mcp, a2a, acp)')
88
+ .requiredOption('--endpoint <string>', 'Agent endpoint URL')
89
+ .option('--name <string>', 'Agent name')
90
+ .option('--transport <string>', 'Transport type (http, websocket, grpc)', 'http')
91
+ .action(async (options) => {
92
+ try {
93
+ const agent = {
94
+ id: options.id,
95
+ protocol: options.protocol,
96
+ endpoint: options.endpoint,
97
+ name: options.name || options.id,
98
+ transport: options.transport,
99
+ capabilities: [],
100
+ status: 'active',
101
+ };
102
+ console.log(chalk_1.default.blue('Registering agent...'));
103
+ saveAgentRegistration(agent);
104
+ console.log(chalk_1.default.green('āœ“ Agent registered successfully'));
105
+ console.log(chalk_1.default.gray(` ID: ${agent.id}`));
106
+ console.log(chalk_1.default.gray(` Protocol: ${agent.protocol}`));
107
+ console.log(chalk_1.default.gray(` Endpoint: ${agent.endpoint}`));
108
+ }
109
+ catch (error) {
110
+ console.error(chalk_1.default.red('Failed to register agent:'), error.message);
111
+ process.exit(1);
112
+ }
113
+ });
114
+ /**
115
+ * List command - List registered agents
116
+ */
117
+ program
118
+ .command('list')
119
+ .description('List all registered agents')
120
+ .option('-p, --protocol <string>', 'Filter by protocol')
121
+ .action(async (options) => {
122
+ try {
123
+ const agents = loadRegisteredAgents();
124
+ if (agents.length === 0) {
125
+ console.log(chalk_1.default.yellow('No agents registered'));
126
+ return;
127
+ }
128
+ console.log(chalk_1.default.blue(`\nšŸ“‹ Registered Agents (${agents.length}):\n`));
129
+ agents.forEach((agent) => {
130
+ if (options.protocol && agent.protocol !== options.protocol) {
131
+ return;
132
+ }
133
+ const statusColor = agent.status === 'active' ? chalk_1.default.green : chalk_1.default.gray;
134
+ console.log(`${statusColor('ā—')} ${chalk_1.default.bold(agent.id)}`);
135
+ console.log(` Protocol: ${agent.protocol}`);
136
+ console.log(` Endpoint: ${agent.endpoint}`);
137
+ console.log(` Status: ${statusColor(agent.status)}`);
138
+ console.log(` Capabilities: ${agent.capabilities.length}`);
139
+ console.log('');
140
+ });
141
+ }
142
+ catch (error) {
143
+ console.error(chalk_1.default.red('Failed to list agents:'), error.message);
144
+ process.exit(1);
145
+ }
146
+ });
147
+ /**
148
+ * Init command - Initialize configuration
149
+ */
150
+ program
151
+ .command('init')
152
+ .description('Initialize a new protocol bridge configuration')
153
+ .action(() => {
154
+ try {
155
+ const configPath = './bridge.config.json';
156
+ if (fs.existsSync(configPath)) {
157
+ console.log(chalk_1.default.yellow('⚠ Configuration file already exists'));
158
+ return;
159
+ }
160
+ const defaultConfig = {
161
+ server: { port: 8080, host: '0.0.0.0' },
162
+ protocols: {
163
+ mcp: { enabled: true, version: '2025-11-25' },
164
+ a2a: { enabled: true, version: '1.0' },
165
+ },
166
+ routing: {
167
+ strategy: 'capability-based',
168
+ fallback: true,
169
+ timeout: 30000,
170
+ },
171
+ discovery: {
172
+ enabled: true,
173
+ interval: 30000,
174
+ ttl: 60000,
175
+ },
176
+ security: {
177
+ authentication: 'none',
178
+ encryption: { enabled: false },
179
+ },
180
+ monitoring: {
181
+ metrics: true,
182
+ logging: 'info',
183
+ healthCheck: true,
184
+ },
185
+ };
186
+ fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
187
+ console.log(chalk_1.default.green('āœ“ Configuration file created: bridge.config.json'));
188
+ console.log(chalk_1.default.gray('\nNext steps:'));
189
+ console.log(chalk_1.default.gray(' 1. Edit bridge.config.json to configure protocols'));
190
+ console.log(chalk_1.default.gray(' 2. Start the bridge: protocol-bridge serve'));
191
+ console.log(chalk_1.default.gray(' 3. Register agents: protocol-bridge register --id my-agent --protocol mcp --endpoint http://localhost:3000'));
192
+ }
193
+ catch (error) {
194
+ console.error(chalk_1.default.red('Failed to initialize:'), error.message);
195
+ process.exit(1);
196
+ }
197
+ });
198
+ /**
199
+ * Helper functions
200
+ */
201
+ function loadConfig(configPath) {
202
+ const defaultConfig = {
203
+ protocols: {
204
+ mcp: { enabled: true },
205
+ a2a: { enabled: true },
206
+ },
207
+ routing: {
208
+ strategy: 'capability-based',
209
+ fallback: true,
210
+ timeout: 30000,
211
+ },
212
+ discovery: { enabled: false },
213
+ security: { authentication: 'none' },
214
+ monitoring: {
215
+ metrics: true,
216
+ logging: 'info',
217
+ healthCheck: true,
218
+ },
219
+ };
220
+ if (!fs.existsSync(configPath)) {
221
+ console.log(chalk_1.default.yellow(`Config file not found: ${configPath}`));
222
+ console.log(chalk_1.default.gray('Using default configuration'));
223
+ return defaultConfig;
224
+ }
225
+ try {
226
+ const configData = fs.readFileSync(configPath, 'utf-8');
227
+ return JSON.parse(configData);
228
+ }
229
+ catch (error) {
230
+ console.log(chalk_1.default.yellow('Failed to parse config file, using defaults'));
231
+ return defaultConfig;
232
+ }
233
+ }
234
+ function saveAgentRegistration(agent) {
235
+ const registryPath = './agents-registry.json';
236
+ let agents = [];
237
+ if (fs.existsSync(registryPath)) {
238
+ const data = fs.readFileSync(registryPath, 'utf-8');
239
+ agents = JSON.parse(data);
240
+ }
241
+ agents = agents.filter((a) => a.id !== agent.id);
242
+ agents.push(agent);
243
+ fs.writeFileSync(registryPath, JSON.stringify(agents, null, 2));
244
+ }
245
+ function loadRegisteredAgents() {
246
+ const registryPath = './agents-registry.json';
247
+ if (!fs.existsSync(registryPath)) {
248
+ return [];
249
+ }
250
+ try {
251
+ const data = fs.readFileSync(registryPath, 'utf-8');
252
+ return JSON.parse(data);
253
+ }
254
+ catch (error) {
255
+ return [];
256
+ }
257
+ }
258
+ program.parse();
259
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Protocol Bridge HTTP Server
3
+ */
4
+ import { BridgeConfig } from '../core/types';
5
+ export declare function startServer(config: BridgeConfig, enableMetrics?: boolean): Promise<void>;
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEtE,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JpG"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ /**
3
+ * Protocol Bridge HTTP Server
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.startServer = startServer;
10
+ const express_1 = __importDefault(require("express"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const bridge_1 = require("../core/bridge");
13
+ async function startServer(config, enableMetrics = true) {
14
+ const app = (0, express_1.default)();
15
+ app.use(express_1.default.json());
16
+ // Initialize bridge
17
+ const bridge = new bridge_1.ProtocolBridge(config);
18
+ await bridge.initialize();
19
+ // Health endpoint
20
+ app.get('/health', async (req, res) => {
21
+ try {
22
+ const health = await bridge.getHealth();
23
+ res.json(health);
24
+ }
25
+ catch (error) {
26
+ res.status(500).json({ error: error.message });
27
+ }
28
+ });
29
+ // Metrics endpoint
30
+ if (enableMetrics) {
31
+ app.get('/metrics', (req, res) => {
32
+ try {
33
+ const metrics = bridge.getMetrics();
34
+ res.json(metrics);
35
+ }
36
+ catch (error) {
37
+ res.status(500).json({ error: error.message });
38
+ }
39
+ });
40
+ }
41
+ // Register agent endpoint
42
+ app.post('/agents/register', async (req, res) => {
43
+ try {
44
+ const agent = req.body;
45
+ await bridge.registerAgent(agent);
46
+ res.json({ success: true, agent });
47
+ }
48
+ catch (error) {
49
+ res.status(400).json({ error: error.message });
50
+ }
51
+ });
52
+ // Unregister agent endpoint
53
+ app.post('/agents/unregister/:id', async (req, res) => {
54
+ try {
55
+ await bridge.unregisterAgent(req.params.id);
56
+ res.json({ success: true });
57
+ }
58
+ catch (error) {
59
+ res.status(400).json({ error: error.message });
60
+ }
61
+ });
62
+ // List agents endpoint
63
+ app.get('/agents', (req, res) => {
64
+ try {
65
+ const agents = bridge.getAgents();
66
+ res.json({ agents });
67
+ }
68
+ catch (error) {
69
+ res.status(500).json({ error: error.message });
70
+ }
71
+ });
72
+ // Get specific agent
73
+ app.get('/agents/:id', (req, res) => {
74
+ try {
75
+ const agent = bridge.getAgent(req.params.id);
76
+ if (!agent) {
77
+ res.status(404).json({ error: 'Agent not found' });
78
+ return;
79
+ }
80
+ res.json({ agent });
81
+ }
82
+ catch (error) {
83
+ res.status(500).json({ error: error.message });
84
+ }
85
+ });
86
+ // Discover agents endpoint
87
+ app.post('/agents/discover', async (req, res) => {
88
+ try {
89
+ const query = req.body;
90
+ const agents = await bridge.discover(query);
91
+ res.json({ agents });
92
+ }
93
+ catch (error) {
94
+ res.status(500).json({ error: error.message });
95
+ }
96
+ });
97
+ // Send message endpoint
98
+ app.post('/messages/send', async (req, res) => {
99
+ try {
100
+ const { from, to, action, params, metadata } = req.body;
101
+ if (!from || !to || !action) {
102
+ res.status(400).json({ error: 'Missing required fields: from, to, action' });
103
+ return;
104
+ }
105
+ const result = await bridge.send({
106
+ from,
107
+ to,
108
+ action,
109
+ params,
110
+ metadata,
111
+ });
112
+ res.json(result);
113
+ }
114
+ catch (error) {
115
+ res.status(500).json({ error: error.message });
116
+ }
117
+ });
118
+ // Root endpoint
119
+ app.get('/', (req, res) => {
120
+ res.json({
121
+ name: 'Protocol Bridge',
122
+ tagline: 'The TCP/IP of Agent Standards',
123
+ version: '1.0.0',
124
+ endpoints: {
125
+ health: 'GET /health',
126
+ metrics: 'GET /metrics',
127
+ registerAgent: 'POST /agents/register',
128
+ unregisterAgent: 'POST /agents/unregister/:id',
129
+ listAgents: 'GET /agents',
130
+ getAgent: 'GET /agents/:id',
131
+ discoverAgents: 'POST /agents/discover',
132
+ sendMessage: 'POST /messages/send',
133
+ },
134
+ });
135
+ });
136
+ // Start server
137
+ const port = config.server?.port || 8080;
138
+ const host = config.server?.host || '0.0.0.0';
139
+ app.listen(port, host, () => {
140
+ console.log(chalk_1.default.green(`\nāœ“ Protocol Bridge server started`));
141
+ console.log(chalk_1.default.gray(` Address: http://${host}:${port}`));
142
+ console.log(chalk_1.default.gray(` Health: http://localhost:${port}/health`));
143
+ if (enableMetrics) {
144
+ console.log(chalk_1.default.gray(` Metrics: http://localhost:${port}/metrics`));
145
+ }
146
+ console.log('');
147
+ console.log(chalk_1.default.blue('šŸŒ‰ Bridge is ready to route messages!\n'));
148
+ });
149
+ // Handle shutdown
150
+ process.on('SIGINT', async () => {
151
+ console.log(chalk_1.default.yellow('\n\nShutting down...'));
152
+ await bridge.shutdown();
153
+ process.exit(0);
154
+ });
155
+ process.on('SIGTERM', async () => {
156
+ console.log(chalk_1.default.yellow('\n\nShutting down...'));
157
+ await bridge.shutdown();
158
+ process.exit(0);
159
+ });
160
+ }
161
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"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"}