mobilecoder-mcp 1.0.0 → 1.0.2
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/.security.log +48 -0
- package/dist/adapters/cli-adapter.js +5 -9
- package/dist/adapters/cli-adapter.js.map +1 -1
- package/dist/agent.d.ts +1 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +21 -9
- package/dist/agent.js.map +1 -1
- package/dist/index.js +30 -56
- package/dist/index.js.map +1 -1
- package/dist/mcp-handler.d.ts +1 -1
- package/dist/mcp-handler.d.ts.map +1 -1
- package/dist/mcp-handler.js +42 -77
- package/dist/mcp-handler.js.map +1 -1
- package/dist/security.d.ts +2 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +83 -80
- package/dist/security.js.map +1 -1
- package/dist/tool-detector.js +7 -44
- package/dist/tool-detector.js.map +1 -1
- package/dist/webrtc.d.ts +12 -3
- package/dist/webrtc.d.ts.map +1 -1
- package/dist/webrtc.js +280 -80
- package/dist/webrtc.js.map +1 -1
- package/package.json +37 -35
- package/src/agent.ts +21 -3
- package/src/index.ts +172 -162
- package/src/mcp-handler.ts +14 -11
- package/src/security.ts +93 -42
- package/src/webrtc.ts +387 -156
- package/tsconfig.json +14 -7
package/dist/webrtc.js
CHANGED
|
@@ -1,116 +1,305 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import SimplePeer from 'simple-peer';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
// wrtc modülü Node.js ortamında WebRTC desteği sağlar
|
|
6
|
+
let wrtc;
|
|
7
|
+
try {
|
|
8
|
+
// Önce @roamhq/wrtc dene, sonra wrtc
|
|
9
|
+
wrtc = require('@roamhq/wrtc');
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
try {
|
|
13
|
+
wrtc = require('wrtc');
|
|
14
|
+
}
|
|
15
|
+
catch (e2) {
|
|
16
|
+
console.warn('⚠️ wrtc module not available, WebRTC may not work in Node.js environment');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Simple HMAC implementation for Node.js
|
|
20
|
+
function generateHMAC(data, secret) {
|
|
21
|
+
return createHash('sha256').update(data + secret).digest('hex');
|
|
22
|
+
}
|
|
23
|
+
// Validate SDP for security
|
|
24
|
+
function validateSDP(sdp) {
|
|
25
|
+
if (!sdp || typeof sdp !== 'string')
|
|
26
|
+
return false;
|
|
27
|
+
// Check for DTLS fingerprint (critical for encryption)
|
|
28
|
+
if (!sdp.includes('a=fingerprint:')) {
|
|
29
|
+
console.error('❌ [MCP] Invalid SDP: missing DTLS fingerprint');
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// Check for DTLS setup
|
|
33
|
+
if (!sdp.includes('a=setup:')) {
|
|
34
|
+
console.error('❌ [MCP] Invalid SDP: missing DTLS setup');
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
export class WebRTCConnection {
|
|
9
40
|
peer = null;
|
|
10
41
|
code;
|
|
11
42
|
signalingUrl;
|
|
43
|
+
isConnected = false;
|
|
44
|
+
pollingInterval;
|
|
12
45
|
onMessageCallback;
|
|
13
46
|
onConnectCallback;
|
|
14
47
|
onDisconnectCallback;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
48
|
+
debug;
|
|
49
|
+
hmacSecret;
|
|
50
|
+
cleanupInterval;
|
|
51
|
+
messageNonce = new Set();
|
|
52
|
+
constructor(code, signalingUrl, debug = false) {
|
|
18
53
|
this.code = code;
|
|
19
54
|
this.signalingUrl = signalingUrl;
|
|
55
|
+
this.debug = debug;
|
|
56
|
+
// Generate HMAC secret for this session
|
|
57
|
+
this.hmacSecret = createHash('sha256')
|
|
58
|
+
.update(code + Date.now() + Math.random())
|
|
59
|
+
.digest('hex');
|
|
60
|
+
// Start cleanup interval
|
|
61
|
+
this.startCleanup();
|
|
62
|
+
// Validate signaling URL
|
|
63
|
+
try {
|
|
64
|
+
const url = new URL(signalingUrl);
|
|
65
|
+
if (!url.protocol.startsWith('https') && url.hostname !== 'localhost' && url.hostname !== '127.0.0.1') {
|
|
66
|
+
console.warn('⚠️ [MCP] Warning: Signaling URL should use HTTPS in production');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.error('❌ [MCP] Invalid signaling URL:', signalingUrl);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
startCleanup() {
|
|
74
|
+
this.cleanupInterval = setInterval(() => {
|
|
75
|
+
// Clean up old nonces (prevent memory leak)
|
|
76
|
+
if (this.messageNonce.size > 1000) {
|
|
77
|
+
this.messageNonce.clear();
|
|
78
|
+
}
|
|
79
|
+
}, 60000); // Every minute
|
|
80
|
+
}
|
|
81
|
+
async sendAnswerWithRetry(signal, attempts = 3) {
|
|
82
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
83
|
+
const signalType = signal.type || (signal.candidate ? 'candidate' : 'answer');
|
|
84
|
+
// Use trickle endpoint for ICE candidates, standard answer endpoint for SDP answer
|
|
85
|
+
const endpoint = signal.candidate ? '/signaling/answer' : '/signaling/answer';
|
|
86
|
+
console.log(`[${timestamp}] 📤 [Desktop] Sending ${signalType} to server...`);
|
|
87
|
+
for (let i = 0; i < attempts; i++) {
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(`${this.signalingUrl}${endpoint}`, {
|
|
90
|
+
method: 'POST',
|
|
91
|
+
headers: { 'Content-Type': 'application/json' },
|
|
92
|
+
body: JSON.stringify({ code: this.code, signal })
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
throw new Error(`Server returned ${response.status}`);
|
|
96
|
+
}
|
|
97
|
+
console.log(`[${timestamp}] ✅ [Desktop] ${signalType} sent. Waiting for P2P handshake...`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(`[${timestamp}] ❌ [Desktop] Failed to send ${signalType} (Attempt ${i + 1}/${attempts}):`, error);
|
|
102
|
+
if (i < attempts - 1) {
|
|
103
|
+
await new Promise(r => setTimeout(r, 1000)); // Wait 1s
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.error(`[${timestamp}] ❌ [Desktop] Failed to send ${signalType} after all attempts.`);
|
|
20
108
|
}
|
|
21
109
|
async connect() {
|
|
110
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
111
|
+
console.log(`[${timestamp}] 📡 Connecting to signaling server: ${this.signalingUrl}`);
|
|
112
|
+
console.log(`[${timestamp}] 🔑 Using connection code: ${this.code}`);
|
|
22
113
|
return new Promise((resolve, reject) => {
|
|
23
114
|
try {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
resolve
|
|
55
|
-
});
|
|
56
|
-
this.peer.on('data', (data) => {
|
|
57
|
-
try {
|
|
58
|
-
const message = JSON.parse(data.toString());
|
|
59
|
-
if (this.onMessageCallback) {
|
|
60
|
-
this.onMessageCallback(message);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console.error('Failed to parse message:', error);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
this.peer.on('error', (error) => {
|
|
68
|
-
console.error('WebRTC error:', error);
|
|
69
|
-
this.isConnected = false;
|
|
70
|
-
if (this.onDisconnectCallback) {
|
|
71
|
-
this.onDisconnectCallback();
|
|
72
|
-
}
|
|
73
|
-
reject(error);
|
|
74
|
-
});
|
|
75
|
-
this.peer.on('close', () => {
|
|
76
|
-
console.log('❌ Connection closed');
|
|
77
|
-
this.isConnected = false;
|
|
78
|
-
if (this.onDisconnectCallback) {
|
|
79
|
-
this.onDisconnectCallback();
|
|
80
|
-
}
|
|
115
|
+
if (!wrtc) {
|
|
116
|
+
console.warn(`[${timestamp}] ⚠️ WebRTC initialized without Node.js native support (wrtc). This might fail.`);
|
|
117
|
+
}
|
|
118
|
+
// Fetch dynamic ICE servers from signaling backend
|
|
119
|
+
fetch(`${this.signalingUrl}/signaling/ice-servers`)
|
|
120
|
+
.then(res => res.json())
|
|
121
|
+
.then((data) => {
|
|
122
|
+
const rtcConfig = {
|
|
123
|
+
iceServers: data.iceServers || [
|
|
124
|
+
{ urls: "stun:stun.l.google.com:19302" }
|
|
125
|
+
],
|
|
126
|
+
iceCandidatePoolSize: 10,
|
|
127
|
+
};
|
|
128
|
+
this.peer = new SimplePeer({
|
|
129
|
+
initiator: false,
|
|
130
|
+
trickle: true,
|
|
131
|
+
wrtc: wrtc,
|
|
132
|
+
config: rtcConfig
|
|
133
|
+
});
|
|
134
|
+
this.setupPeerListeners(resolve, reject);
|
|
135
|
+
})
|
|
136
|
+
.catch(err => {
|
|
137
|
+
console.error(`[${timestamp}] ❌ Failed to fetch ICE servers:`, err);
|
|
138
|
+
// Fallback to basic STUN
|
|
139
|
+
this.peer = new SimplePeer({
|
|
140
|
+
initiator: false,
|
|
141
|
+
trickle: true,
|
|
142
|
+
wrtc: wrtc,
|
|
143
|
+
config: { iceServers: [{ urls: "stun:stun.l.google.com:19302" }] }
|
|
144
|
+
});
|
|
145
|
+
this.setupPeerListeners(resolve, reject);
|
|
81
146
|
});
|
|
147
|
+
console.log(`[${timestamp}] ⌛ Waiting for mobile device to initiate connection...`);
|
|
82
148
|
// Start polling for offer from mobile
|
|
83
149
|
this.startPollingForOffer();
|
|
84
150
|
}
|
|
85
151
|
catch (error) {
|
|
152
|
+
console.error(`[${timestamp}] ❌ Initialization error:`, error);
|
|
86
153
|
reject(error);
|
|
87
154
|
}
|
|
88
155
|
});
|
|
89
156
|
}
|
|
157
|
+
setupPeerListeners(resolve, reject) {
|
|
158
|
+
if (!this.peer)
|
|
159
|
+
return;
|
|
160
|
+
// Monitor ICE connection state
|
|
161
|
+
this.peer.on('iceConnectionStateChange', () => {
|
|
162
|
+
const state = this.peer._pc?.iceConnectionState;
|
|
163
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
164
|
+
console.log(`[${timestamp}] 🔍 ICE Connection State: ${state}`);
|
|
165
|
+
if (state === 'connected' || state === 'completed') {
|
|
166
|
+
const pc = this.peer._pc;
|
|
167
|
+
if (pc) {
|
|
168
|
+
// Validate SDP for security
|
|
169
|
+
const remoteDescription = pc.remoteDescription;
|
|
170
|
+
if (remoteDescription && !validateSDP(remoteDescription.sdp)) {
|
|
171
|
+
console.error('❌ [MCP] Remote SDP validation failed');
|
|
172
|
+
this.disconnect();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
pc.getStats().then((stats) => {
|
|
176
|
+
let usingRelay = false;
|
|
177
|
+
stats.forEach((report) => {
|
|
178
|
+
if (report.type === 'candidate-pair' && report.selected) {
|
|
179
|
+
const localCandidate = stats.get(report.localCandidateId);
|
|
180
|
+
if (localCandidate && localCandidate.candidateType === 'relay')
|
|
181
|
+
usingRelay = true;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
if (usingRelay)
|
|
185
|
+
console.log(`[${timestamp}] 🌐 TURN relay is being used (IP leak protected)`);
|
|
186
|
+
else
|
|
187
|
+
console.log(`[${timestamp}] ✅ Direct P2P connection established`);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (state === 'failed' || state === 'disconnected') {
|
|
192
|
+
console.error(`[${timestamp}] ❌ ICE connection failed: ${state}`);
|
|
193
|
+
this.isConnected = false;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
this.peer.on('signal', async (signal) => {
|
|
197
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
198
|
+
const signalType = signal.type || (signal.candidate ? 'candidate' : 'unknown');
|
|
199
|
+
console.log(`[${timestamp}] 📡 [Desktop] Signal generated: ${signalType}`);
|
|
200
|
+
// Validate SDP before sending
|
|
201
|
+
if (signal.sdp && !validateSDP(signal.sdp)) {
|
|
202
|
+
console.error('❌ [MCP] Local SDP validation failed, not sending signal');
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// Send answer and trickle ICE candidates
|
|
206
|
+
await this.sendAnswerWithRetry(signal);
|
|
207
|
+
});
|
|
208
|
+
this.peer.on('connect', () => {
|
|
209
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
210
|
+
console.log(`\n[${timestamp}] ✨ [ONLINE] Connected to mobile device!`);
|
|
211
|
+
this.isConnected = true;
|
|
212
|
+
if (this.onConnectCallback)
|
|
213
|
+
this.onConnectCallback();
|
|
214
|
+
resolve();
|
|
215
|
+
});
|
|
216
|
+
this.peer.on('data', (data) => {
|
|
217
|
+
try {
|
|
218
|
+
const message = JSON.parse(data.toString());
|
|
219
|
+
this.handleIncomingMessage(message);
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
// Silent fail for invalid JSON
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
this.peer.on('error', (err) => {
|
|
226
|
+
console.error('❌ WebRTC error:', err);
|
|
227
|
+
this.isConnected = false;
|
|
228
|
+
});
|
|
229
|
+
this.peer.on('close', () => {
|
|
230
|
+
console.log('❌ Connection closed');
|
|
231
|
+
this.isConnected = false;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
handleIncomingMessage(message) {
|
|
235
|
+
// Validate message structure
|
|
236
|
+
if (!message || typeof message !== 'object') {
|
|
237
|
+
console.warn('⚠️ [MCP] Invalid message structure');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Check for nonce to prevent replay attacks
|
|
241
|
+
if (message.nonce) {
|
|
242
|
+
if (this.messageNonce.has(message.nonce)) {
|
|
243
|
+
console.warn('⚠️ [MCP] Duplicate message detected (replay attack)');
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
this.messageNonce.add(message.nonce);
|
|
247
|
+
}
|
|
248
|
+
// Verify HMAC if present
|
|
249
|
+
if (message.hmac) {
|
|
250
|
+
const data = JSON.stringify({
|
|
251
|
+
type: message.type,
|
|
252
|
+
text: message.text,
|
|
253
|
+
command: message.command,
|
|
254
|
+
timestamp: message.timestamp,
|
|
255
|
+
nonce: message.nonce
|
|
256
|
+
});
|
|
257
|
+
const expectedHMAC = generateHMAC(data, this.hmacSecret);
|
|
258
|
+
if (message.hmac !== expectedHMAC) {
|
|
259
|
+
console.error('❌ [MCP] HMAC verification failed');
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (this.onMessageCallback) {
|
|
264
|
+
this.onMessageCallback(message);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
90
267
|
async startPollingForOffer() {
|
|
268
|
+
let pollCount = 0;
|
|
91
269
|
const poll = async () => {
|
|
92
270
|
try {
|
|
93
|
-
|
|
271
|
+
// Stop if peer is connected or destroyed
|
|
272
|
+
if (this.peer && this.peer.connected) {
|
|
273
|
+
if (this.pollingInterval) {
|
|
274
|
+
clearInterval(this.pollingInterval);
|
|
275
|
+
this.pollingInterval = undefined;
|
|
276
|
+
}
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
pollCount++;
|
|
280
|
+
const response = await fetch(`${this.signalingUrl}/signaling/poll?code=${this.code}`);
|
|
281
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
94
282
|
if (response.ok) {
|
|
95
283
|
const data = await response.json();
|
|
96
284
|
if (data.signal && this.peer) {
|
|
97
|
-
|
|
285
|
+
console.log(`[${timestamp}] 📥 Received signal from mobile device, applying...`);
|
|
98
286
|
this.peer.signal(data.signal);
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
287
|
+
// Don't clear interval, keep polling for trickle candidates
|
|
288
|
+
}
|
|
289
|
+
else if (this.debug && pollCount % 10 === 0) {
|
|
290
|
+
console.log(`[${timestamp}] ⌛ Still waiting for signals (Poll #${pollCount})...`);
|
|
103
291
|
}
|
|
104
292
|
}
|
|
105
293
|
}
|
|
106
294
|
catch (error) {
|
|
107
|
-
|
|
295
|
+
if (this.debug) {
|
|
296
|
+
console.error('❌ Error during polling:', error);
|
|
297
|
+
}
|
|
108
298
|
}
|
|
109
299
|
};
|
|
110
|
-
// Poll every
|
|
111
|
-
this.pollingInterval = setInterval(poll,
|
|
112
|
-
|
|
113
|
-
await poll();
|
|
300
|
+
// Poll every 1.5 seconds
|
|
301
|
+
this.pollingInterval = setInterval(poll, 1500);
|
|
302
|
+
poll();
|
|
114
303
|
}
|
|
115
304
|
send(message) {
|
|
116
305
|
if (this.peer && this.isConnected) {
|
|
@@ -138,15 +327,26 @@ class WebRTCConnection {
|
|
|
138
327
|
if (this.pollingInterval) {
|
|
139
328
|
clearInterval(this.pollingInterval);
|
|
140
329
|
}
|
|
330
|
+
if (this.cleanupInterval) {
|
|
331
|
+
clearInterval(this.cleanupInterval);
|
|
332
|
+
}
|
|
141
333
|
if (this.peer) {
|
|
334
|
+
this.peer.removeAllListeners();
|
|
142
335
|
this.peer.destroy();
|
|
143
336
|
this.peer = null;
|
|
144
337
|
}
|
|
145
338
|
this.isConnected = false;
|
|
339
|
+
this.messageNonce.clear();
|
|
340
|
+
}
|
|
341
|
+
// Cleanup method for proper resource disposal
|
|
342
|
+
destroy() {
|
|
343
|
+
this.disconnect();
|
|
344
|
+
this.onMessageCallback = undefined;
|
|
345
|
+
this.onConnectCallback = undefined;
|
|
346
|
+
this.onDisconnectCallback = undefined;
|
|
146
347
|
}
|
|
147
348
|
getConnected() {
|
|
148
349
|
return this.isConnected;
|
|
149
350
|
}
|
|
150
351
|
}
|
|
151
|
-
exports.WebRTCConnection = WebRTCConnection;
|
|
152
352
|
//# sourceMappingURL=webrtc.js.map
|
package/dist/webrtc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,sDAAsD;AACtD,IAAI,IAAS,CAAC;AACd,IAAI,CAAC;IACH,qCAAqC;IACrC,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AACjC,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,4BAA4B;AAC5B,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAElD,uDAAuD;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,gBAAgB;IACnB,IAAI,GAA+B,IAAI,CAAC;IACxC,IAAI,CAAS;IACb,YAAY,CAAS;IACrB,WAAW,GAAY,KAAK,CAAC;IAC7B,eAAe,CAAkB;IACjC,iBAAiB,CAA0B;IAC3C,iBAAiB,CAAc;IAC/B,oBAAoB,CAAc;IAClC,KAAK,CAAU;IACf,UAAU,CAAS;IACnB,eAAe,CAAkB;IACjC,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,YAAY,IAAY,EAAE,YAAoB,EAAE,QAAiB,KAAK;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,wCAAwC;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC;aACnC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;aACzC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjB,yBAAyB;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACtG,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,4CAA4C;YAC5C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe;IAC5B,CAAC;IAGO,KAAK,CAAC,mBAAmB,CAAC,MAAW,EAAE,QAAQ,GAAG,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE9E,mFAAmF;QACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAE9E,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,0BAA0B,UAAU,eAAe,CAAC,CAAC;QAE9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAE,EAAE;oBAC9D,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;iBAClD,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,iBAAiB,UAAU,qCAAqC,CAAC,CAAC;gBAC3F,OAAO;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,gCAAgC,UAAU,aAAa,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAC;gBAChH,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,gCAAgC,UAAU,sBAAsB,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,wCAAwC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAErE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,kFAAkF,CAAC,CAAC;gBAChH,CAAC;gBAED,mDAAmD;gBACnD,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,wBAAwB,CAAC;qBAChD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;qBACvB,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;oBAClB,MAAM,SAAS,GAAG;wBAChB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI;4BAC7B,EAAE,IAAI,EAAE,8BAA8B,EAAE;yBACzC;wBACD,oBAAoB,EAAE,EAAE;qBACzB,CAAC;oBAEF,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;wBACzB,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3C,CAAC,CAAC;qBACD,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,kCAAkC,EAAE,GAAG,CAAC,CAAC;oBACpE,yBAAyB;oBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;wBACzB,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,EAAE;qBACnE,CAAC,CAAC;oBACH,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBAEL,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,yDAAyD,CAAC,CAAC;gBACpF,sCAAsC;gBACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,OAAY,EAAE,MAAW;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAEvB,+BAA+B;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAC5C,MAAM,KAAK,GAAI,IAAI,CAAC,IAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,8BAA8B,KAAK,EAAE,CAAC,CAAC;YAEhE,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBACnD,MAAM,EAAE,GAAI,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC;gBAClC,IAAI,EAAE,EAAE,CAAC;oBACP,4BAA4B;oBAC5B,MAAM,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,CAAC;oBAC/C,IAAI,iBAAiB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7D,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;wBACtD,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,OAAO;oBACT,CAAC;oBAED,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE;wBAChC,IAAI,UAAU,GAAG,KAAK,CAAC;wBACvB,KAAK,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE;4BAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gCACxD,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gCAC1D,IAAI,cAAc,IAAI,cAAc,CAAC,aAAa,KAAK,OAAO;oCAAE,UAAU,GAAG,IAAI,CAAC;4BACpF,CAAC;wBACH,CAAC,CAAC,CAAC;wBACH,IAAI,UAAU;4BAAE,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,mDAAmD,CAAC,CAAC;;4BACzF,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,uCAAuC,CAAC,CAAC;oBACzE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC1D,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,8BAA8B,KAAK,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAW,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,oCAAoC,UAAU,EAAE,CAAC,CAAC;YAE3E,8BAA8B;YAC9B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACzE,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,MAAM,SAAS,0CAA0C,CAAC,CAAC;YACvE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,IAAI,CAAC,iBAAiB;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAS,EAAE,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,+BAA+B;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,OAAY;QACxC,6BAA6B;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,yCAAyC;gBACzC,IAAI,IAAI,CAAC,IAAI,IAAK,IAAI,CAAC,IAAY,CAAC,SAAS,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;oBACnC,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,SAAS,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBAElD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAsB,CAAC;oBACvD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,sDAAsD,CAAC,CAAC;wBACjF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC9B,4DAA4D;oBAC9D,CAAC;yBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;wBAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,wCAAwC,SAAS,MAAM,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,yBAAyB;QACzB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC;IACT,CAAC;IAED,IAAI,CAAC,OAAY;QACf,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,QAAoB;QAC/B,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACvC,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,8CAA8C;IAC9C,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mobilecoder-mcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"@types/
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "mobilecoder-mcp",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MCP server for MobileCoderMCP - enables mobile to desktop coding",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mobilecoder-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"mcp",
|
|
17
|
+
"cursor",
|
|
18
|
+
"windsurf",
|
|
19
|
+
"mobile-coder"
|
|
20
|
+
],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
25
|
+
"@roamhq/wrtc": "^0.9.1",
|
|
26
|
+
"commander": "^12.1.0",
|
|
27
|
+
"qrcode-terminal": "^0.12.0",
|
|
28
|
+
"simple-peer": "^9.11.1",
|
|
29
|
+
"wrtc": "^0.4.7"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^20.14.0",
|
|
33
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
34
|
+
"@types/simple-peer": "^9.11.8",
|
|
35
|
+
"typescript": "^5.5.0"
|
|
36
|
+
}
|
|
37
|
+
}
|
package/src/agent.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WebRTCConnection } from './webrtc';
|
|
2
|
-
import { setupMCPServer } from './mcp-handler';
|
|
3
|
-
import { CLIAdapter } from './adapters/cli-adapter';
|
|
1
|
+
import { WebRTCConnection } from './webrtc.js';
|
|
2
|
+
import { setupMCPServer } from './mcp-handler.js';
|
|
3
|
+
import { CLIAdapter } from './adapters/cli-adapter.js';
|
|
4
4
|
|
|
5
5
|
export class UniversalAgent {
|
|
6
6
|
private webrtc: WebRTCConnection;
|
|
@@ -60,6 +60,24 @@ export class UniversalAgent {
|
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
if (message.type === 'switch_ide') {
|
|
64
|
+
console.log(`🖥️ Target IDE switched to: ${message.ide}`);
|
|
65
|
+
this.webrtc.send({
|
|
66
|
+
type: 'system',
|
|
67
|
+
message: `Target IDE: ${message.ide}`
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (message.type === 'switch_model') {
|
|
73
|
+
console.log(`🤖 AI Model preference: ${message.model}`);
|
|
74
|
+
this.webrtc.send({
|
|
75
|
+
type: 'system',
|
|
76
|
+
message: `Model: ${message.model}`
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
63
81
|
if (message.type === 'cli_command') {
|
|
64
82
|
const command = message.command;
|
|
65
83
|
console.log(`💻 Received CLI command: ${command}`);
|