@remotepilot/cli 0.1.0 → 0.2.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/dist/daemon.js CHANGED
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  /**
4
- * RemotePilot Daemon - Windows Service Entry Point
4
+ * RemotePilot Daemon - Host Service Entry Point
5
5
  *
6
- * This script is the entry point for the RemotePilot Windows service.
7
- * It can run in two modes:
8
- * 1. Service mode: When launched by the Windows Service Control Manager
6
+ * Modes:
7
+ * 1. Service mode: When launched by OS service manager (SCM/systemd/launchd)
9
8
  * 2. Foreground mode: When launched directly for development/testing
10
9
  *
11
- * Architecture:
12
- * Windows SCM → node-windows wrapper daemon.ts Gateway Host Core
10
+ * Security:
11
+ * - HTTP endpoints require Authorization header matching API_TOKEN
12
+ * - Gateway and HTTP bind to 127.0.0.1 by default (set --listen=0.0.0.0 to expose)
13
+ * - API_TOKEN is generated on first run and stored in host.json
13
14
  */
14
15
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
16
  if (k2 === undefined) k2 = k;
@@ -48,29 +49,205 @@ Object.defineProperty(exports, "__esModule", { value: true });
48
49
  exports.startDaemon = startDaemon;
49
50
  const fs = __importStar(require("node:fs"));
50
51
  const path = __importStar(require("node:path"));
52
+ const crypto = __importStar(require("node:crypto"));
51
53
  const node_http_1 = require("node:http");
54
+ const node_child_process_1 = require("node:child_process");
52
55
  const core_1 = require("@remotepilot/core");
53
56
  const gateway_1 = require("@remotepilot/gateway");
54
57
  const core_2 = require("@remotepilot/core");
55
58
  let server = null;
56
59
  let gateway = null;
57
60
  let logger;
58
- function parseDataDir() {
61
+ let shutdownRequested = false;
62
+ let cloudflaredProcess = null;
63
+ let tunnelUrl = null;
64
+ const sshTunnels = [];
65
+ const sshRetryTimers = [];
66
+ const SSH_MAX_RETRIES = 10;
67
+ const SSH_BASE_DELAY_MS = 2000;
68
+ const SSH_MAX_DELAY_MS = 60000;
69
+ const SHUTDOWN_TIMEOUT_MS = 5000;
70
+ const sshTunnelStates = [];
71
+ function parseSshTunnels() {
72
+ const tunnels = [];
73
+ const tunnelsPath = path.join(process.env.HOME || process.env.USERPROFILE || "~", ".remotepilot", "ssh-tunnels.json");
74
+ if (fs.existsSync(tunnelsPath)) {
75
+ try {
76
+ const data = JSON.parse(fs.readFileSync(tunnelsPath, "utf-8"));
77
+ if (Array.isArray(data)) {
78
+ for (const t of data) {
79
+ if (t.localPort && t.remoteHost && t.remotePort && t.sshHost) {
80
+ tunnels.push(t);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ catch {
86
+ // ignore parse errors
87
+ }
88
+ }
89
+ return tunnels;
90
+ }
91
+ function startSingleSshTunnel(tunnel, retryCount) {
92
+ const args = [
93
+ "-L", `127.0.0.1:${tunnel.localPort}:${tunnel.remoteHost}:${tunnel.remotePort}`,
94
+ "-N",
95
+ tunnel.sshHost
96
+ ];
97
+ logger.info("starting SSH tunnel", {
98
+ localPort: tunnel.localPort,
99
+ remote: `${tunnel.remoteHost}:${tunnel.remotePort}`,
100
+ sshHost: tunnel.sshHost,
101
+ retryCount
102
+ });
103
+ const proc = (0, node_child_process_1.spawn)("ssh", args, {
104
+ stdio: ["ignore", "pipe", "pipe"],
105
+ detached: false,
106
+ windowsHide: true
107
+ });
108
+ proc.on("error", (err) => {
109
+ logger.error(`SSH tunnel to ${tunnel.sshHost} failed`, err);
110
+ });
111
+ return proc;
112
+ }
113
+ function scheduleSshRetry(tunnel, currentRetry) {
114
+ if (currentRetry >= SSH_MAX_RETRIES) {
115
+ logger.error(`SSH tunnel to ${tunnel.sshHost} exhausted ${SSH_MAX_RETRIES} retries, giving up`);
116
+ return;
117
+ }
118
+ const delay = Math.min(SSH_BASE_DELAY_MS * Math.pow(2, currentRetry) + Math.random() * 1000, SSH_MAX_DELAY_MS);
119
+ logger.warn(`SSH tunnel to ${tunnel.sshHost} retry ${currentRetry + 1}/${SSH_MAX_RETRIES} in ${Math.round(delay)}ms`);
120
+ const timer = setTimeout(() => {
121
+ const proc = startSingleSshTunnel(tunnel, currentRetry + 1);
122
+ const state = { config: tunnel, process: proc, retryCount: currentRetry + 1 };
123
+ proc.on("exit", (code) => {
124
+ logger.warn(`SSH tunnel to ${tunnel.sshHost} exited with code ${code}`);
125
+ const idx = sshTunnelStates.indexOf(state);
126
+ if (idx !== -1)
127
+ sshTunnelStates.splice(idx, 1);
128
+ if (!shutdownRequested)
129
+ scheduleSshRetry(tunnel, currentRetry + 1);
130
+ });
131
+ sshTunnelStates.push(state);
132
+ }, delay);
133
+ sshRetryTimers.push(timer);
134
+ }
135
+ function startSshTunnels() {
136
+ const tunnels = parseSshTunnels();
137
+ for (const tunnel of tunnels) {
138
+ const proc = startSingleSshTunnel(tunnel, 0);
139
+ const state = { config: tunnel, process: proc, retryCount: 0 };
140
+ proc.on("exit", (code) => {
141
+ logger.warn(`SSH tunnel to ${tunnel.sshHost} exited with code ${code}`);
142
+ const idx = sshTunnelStates.indexOf(state);
143
+ if (idx !== -1)
144
+ sshTunnelStates.splice(idx, 1);
145
+ if (!shutdownRequested)
146
+ scheduleSshRetry(tunnel, 0);
147
+ });
148
+ sshTunnelStates.push(state);
149
+ }
150
+ }
151
+ function stopSshTunnels() {
152
+ for (const timer of sshRetryTimers)
153
+ clearTimeout(timer);
154
+ sshRetryTimers.length = 0;
155
+ for (const state of sshTunnelStates) {
156
+ try {
157
+ state.process.kill();
158
+ }
159
+ catch { }
160
+ }
161
+ sshTunnelStates.length = 0;
162
+ }
163
+ function startCloudflaredTunnel(port) {
164
+ const cloudflaredPath = findCloudflared();
165
+ if (!cloudflaredPath) {
166
+ logger.error("cloudflared not found. Install from https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/");
167
+ return;
168
+ }
169
+ logger.info("starting cloudflare quick tunnel", { port });
170
+ cloudflaredProcess = (0, node_child_process_1.spawn)(cloudflaredPath, [
171
+ "tunnel", "--url", `http://localhost:${port}`
172
+ ], {
173
+ stdio: ["ignore", "pipe", "pipe"],
174
+ detached: false,
175
+ windowsHide: true
176
+ });
177
+ cloudflaredProcess.stdout?.on("data", (data) => {
178
+ const line = data.toString().trim();
179
+ if (line)
180
+ logger.info(`cloudflared: ${line}`);
181
+ const urlMatch = line.match(/(https:\/\/[a-z0-9-]+\.trycloudflare\.com)/);
182
+ if (urlMatch) {
183
+ tunnelUrl = urlMatch[1];
184
+ logger.info(`TUNNEL_URL=${tunnelUrl}`);
185
+ }
186
+ });
187
+ cloudflaredProcess.stderr?.on("data", (data) => {
188
+ const line = data.toString().trim();
189
+ if (line)
190
+ logger.info(`cloudflared: ${line}`);
191
+ // Quick tunnel URL comes via stderr
192
+ const urlMatch = line.match(/(https:\/\/[a-z0-9-]+\.trycloudflare\.com)/);
193
+ if (urlMatch) {
194
+ tunnelUrl = urlMatch[1];
195
+ logger.info(`TUNNEL_URL=${tunnelUrl}`);
196
+ }
197
+ });
198
+ cloudflaredProcess.on("error", (err) => {
199
+ logger.error("cloudflared failed to start", err);
200
+ cloudflaredProcess = null;
201
+ });
202
+ cloudflaredProcess.on("exit", (code) => {
203
+ logger.warn(`cloudflared exited with code ${code}`);
204
+ cloudflaredProcess = null;
205
+ tunnelUrl = null;
206
+ if (!shutdownRequested) {
207
+ logger.info("restarting cloudflared in 5s...");
208
+ setTimeout(() => {
209
+ if (!shutdownRequested)
210
+ startCloudflaredTunnel(port);
211
+ }, 5000);
212
+ }
213
+ });
214
+ }
215
+ function stopCloudflared() {
216
+ if (cloudflaredProcess) {
217
+ try {
218
+ cloudflaredProcess.kill();
219
+ }
220
+ catch { }
221
+ cloudflaredProcess = null;
222
+ }
223
+ tunnelUrl = null;
224
+ }
225
+ function findCloudflared() {
226
+ if (process.platform === "win32") {
227
+ const paths = [
228
+ "C:\\Program Files (x86)\\cloudflared\\cloudflared.exe",
229
+ "C:\\Program Files\\cloudflared\\cloudflared.exe",
230
+ ];
231
+ for (const p of paths) {
232
+ if (fs.existsSync(p))
233
+ return p;
234
+ }
235
+ }
236
+ return "cloudflared";
237
+ }
238
+ function parseCliArg(name) {
59
239
  for (let i = 0; i < process.argv.length; i++) {
60
240
  const arg = process.argv[i];
61
- if (arg === "--data-dir" && process.argv[i + 1]) {
241
+ if (arg === `--${name}` && process.argv[i + 1])
62
242
  return process.argv[i + 1];
63
- }
64
- if (arg.startsWith("--data-dir=")) {
65
- return arg.slice("--data-dir=".length);
66
- }
243
+ if (arg.startsWith(`--${name}=`))
244
+ return arg.slice(`--${name}=`.length);
67
245
  }
68
246
  return null;
69
247
  }
70
248
  function getConfigPath(dataDir) {
71
- if (dataDir) {
249
+ if (dataDir)
72
250
  return path.join(dataDir, "host.json");
73
- }
74
251
  const homeDir = process.env.HOME || process.env.USERPROFILE || "~";
75
252
  return path.join(homeDir, ".remotepilot", "host.json");
76
253
  }
@@ -79,16 +256,31 @@ function loadConfig(configPath) {
79
256
  if (!fs.existsSync(resolvedPath)) {
80
257
  throw new Error(`Host not configured. Run 'remotepilot setup' first. Config path: ${resolvedPath}`);
81
258
  }
82
- return JSON.parse(fs.readFileSync(resolvedPath, "utf-8"));
259
+ const config = JSON.parse(fs.readFileSync(resolvedPath, "utf-8"));
260
+ if (!config.apiToken) {
261
+ config.apiToken = crypto.randomBytes(32).toString("hex");
262
+ fs.writeFileSync(resolvedPath, JSON.stringify(config, null, 2));
263
+ }
264
+ return config;
265
+ }
266
+ function verifyAuth(req, config) {
267
+ if (!config.apiToken)
268
+ return false;
269
+ const auth = req.headers.authorization;
270
+ if (!auth)
271
+ return false;
272
+ return auth === `Bearer ${config.apiToken}`;
273
+ }
274
+ function rejectUnauthorized(res) {
275
+ res.writeHead(401, { "Content-Type": "application/json" });
276
+ res.end(JSON.stringify({ error: "Unauthorized. Provide Authorization: Bearer <token>" }));
83
277
  }
84
278
  function startDaemon() {
85
- const dataDir = parseDataDir();
279
+ const dataDir = parseCliArg("data-dir");
280
+ const listenAddr = parseCliArg("listen") || "127.0.0.1";
86
281
  const configPath = getConfigPath(dataDir);
87
282
  const config = loadConfig(configPath);
88
- // Initialize logger with data dir if provided (service mode)
89
- const logDir = dataDir
90
- ? path.join(dataDir, "logs")
91
- : undefined;
283
+ const logDir = dataDir ? path.join(dataDir, "logs") : undefined;
92
284
  const logFile = logDir ? path.join(logDir, "remotepilot.log") : undefined;
93
285
  logger = (0, core_1.createLogger)("daemon", {
94
286
  level: "info",
@@ -100,11 +292,12 @@ function startDaemon() {
100
292
  hostName: config.hostName,
101
293
  platform: config.platform,
102
294
  port: config.port,
295
+ listen: listenAddr,
103
296
  pid: process.pid,
104
297
  dataDir: dataDir || "(user profile)"
105
298
  });
106
- // Create HTTP server for health checks
107
299
  server = (0, node_http_1.createServer)((req, res) => {
300
+ // /health is unauthenticated (used by load balancers / systemd watchdog)
108
301
  if (req.url === "/health") {
109
302
  res.writeHead(200, { "Content-Type": "application/json" });
110
303
  res.end(JSON.stringify({
@@ -114,6 +307,11 @@ function startDaemon() {
114
307
  }));
115
308
  return;
116
309
  }
310
+ // All other endpoints require auth
311
+ if (!verifyAuth(req, config)) {
312
+ rejectUnauthorized(res);
313
+ return;
314
+ }
117
315
  if (req.url === "/ready") {
118
316
  res.writeHead(200, { "Content-Type": "application/json" });
119
317
  res.end(JSON.stringify({
@@ -130,25 +328,24 @@ function startDaemon() {
130
328
  hostName: config.hostName,
131
329
  platform: config.platform,
132
330
  uptime: process.uptime(),
133
- pid: process.pid
331
+ pid: process.pid,
332
+ sshTunnels: sshTunnelStates.length,
333
+ tunnelUrl: tunnelUrl || "starting..."
134
334
  }));
135
335
  return;
136
336
  }
137
337
  if (req.method === "POST" && req.url === "/shutdown") {
138
338
  res.writeHead(200, { "Content-Type": "application/json" });
139
339
  res.end(JSON.stringify({ status: "shutting down" }));
140
- shutdown();
141
- process.exit(0);
340
+ gracefulShutdown().then(() => process.exit(0));
142
341
  return;
143
342
  }
144
343
  res.writeHead(404);
145
344
  res.end("Not Found");
146
345
  });
147
- // Create HostManager (loads config from ~/.remotepilot/)
148
346
  const hostManager = new core_2.HostManager();
149
347
  hostManager.load();
150
- // Create Gateway with terminal support
151
- gateway = new gateway_1.Gateway({ port: config.port, host: "0.0.0.0" }, hostManager);
348
+ gateway = new gateway_1.Gateway({ port: config.port, host: listenAddr }, hostManager);
152
349
  gateway.on("started", (port) => {
153
350
  logger.info("gateway started", {
154
351
  port,
@@ -165,52 +362,80 @@ function startDaemon() {
165
362
  gateway.on("error", (error) => {
166
363
  logger.error("gateway error", error);
167
364
  });
168
- // Start gateway (creates WebSocket server internally)
169
365
  gateway.start().catch((error) => {
170
366
  logger.error("failed to start gateway", error);
171
367
  process.exit(1);
172
368
  });
173
- // Start HTTP server
174
- server.listen(config.port + 1, () => {
369
+ server.listen(config.port + 1, listenAddr, () => {
175
370
  logger.info("http server listening", {
176
371
  port: config.port + 1,
372
+ listen: listenAddr,
177
373
  health: `http://localhost:${config.port + 1}/health`
178
374
  });
375
+ startSshTunnels();
376
+ // Start Cloudflare Quick Tunnel (no account needed)
377
+ startCloudflaredTunnel(config.port);
179
378
  });
180
379
  server.on("error", (error) => {
181
380
  logger.error("server error", error);
182
381
  });
183
382
  }
184
- async function shutdown() {
185
- logger.info("daemon shutting down");
186
- if (gateway) {
187
- await gateway.stop();
188
- gateway = null;
383
+ async function gracefulShutdown() {
384
+ if (shutdownRequested)
385
+ return;
386
+ shutdownRequested = true;
387
+ if (logger)
388
+ logger.info("daemon shutting down");
389
+ stopSshTunnels();
390
+ stopCloudflared();
391
+ const shutdownTimeout = setTimeout(() => {
392
+ if (logger)
393
+ logger.warn("shutdown timed out, forcing exit");
394
+ process.exit(1);
395
+ }, SHUTDOWN_TIMEOUT_MS);
396
+ shutdownTimeout.unref();
397
+ try {
398
+ if (gateway) {
399
+ await Promise.race([
400
+ gateway.stop(),
401
+ new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), SHUTDOWN_TIMEOUT_MS))
402
+ ]);
403
+ gateway = null;
404
+ }
405
+ }
406
+ catch {
407
+ // gateway.stop() timed out or errored — force close
189
408
  }
190
409
  if (server) {
191
410
  server.close();
192
411
  server = null;
193
412
  }
194
- logger.info("daemon stopped");
413
+ if (logger)
414
+ logger.info("daemon stopped");
195
415
  }
196
416
  // --- Auto-start only when run directly (not when imported) ---
197
- // When run directly: start the daemon (foreground or service mode)
198
- // When imported: only export startDaemon for CLI to call explicitly
199
417
  const isRunDirectly = require.main === module;
200
418
  if (isRunDirectly) {
201
- const isServiceMode = process.argv.includes("--service");
202
- // Register shutdown handlers for both modes.
203
- // In service mode, the C wrapper sends POST /shutdown for graceful shutdown,
204
- // but SIGTERM may also arrive as a fallback from TerminateProcess.
205
419
  startDaemon();
206
420
  process.on("SIGINT", () => {
207
- shutdown().then(() => process.exit(0));
421
+ gracefulShutdown().then(() => process.exit(0));
208
422
  });
209
423
  process.on("SIGTERM", () => {
210
- shutdown().then(() => process.exit(0));
424
+ gracefulShutdown().then(() => process.exit(0));
425
+ });
426
+ process.on("uncaughtException", (err) => {
427
+ if (logger)
428
+ logger.error("uncaught exception", err);
429
+ else
430
+ console.error("uncaught exception:", err);
431
+ gracefulShutdown().then(() => process.exit(1));
211
432
  });
212
- process.on("exit", () => {
213
- shutdown();
433
+ process.on("unhandledRejection", (reason) => {
434
+ if (logger)
435
+ logger.error("unhandled rejection", reason);
436
+ else
437
+ console.error("unhandled rejection:", reason);
438
+ gracefulShutdown().then(() => process.exit(1));
214
439
  });
215
440
  }
216
441
  //# sourceMappingURL=daemon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqQH,kCA0HC;AA7XD,4CAA8B;AAC9B,gDAAkC;AAClC,oDAAsC;AACtC,yCAAkF;AAClF,2DAAyD;AACzD,4CAAiD;AACjD,kDAA+C;AAC/C,4CAAgD;AAahD,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,IAAI,OAAO,GAAmB,IAAI,CAAC;AACnC,IAAI,MAAwC,CAAC;AAC7C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAC9B,IAAI,kBAAkB,GAAwB,IAAI,CAAC;AACnD,IAAI,SAAS,GAAkB,IAAI,CAAC;AACpC,MAAM,UAAU,GAAmB,EAAE,CAAC;AACtC,MAAM,cAAc,GAAoC,EAAE,CAAC;AAE3D,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAgBjC,MAAM,eAAe,GAAqB,EAAE,CAAC;AAE7C,SAAS,eAAe;IACtB,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAClD,cAAc,EACd,kBAAkB,CACnB,CAAC;IACF,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAuB,EAAE,UAAkB;IACvE,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,aAAa,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;QAC/E,IAAI;QACJ,MAAM,CAAC,OAAO;KACf,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;KACX,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAA,0BAAK,EAAC,KAAK,EAAE,IAAI,EAAE;QAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,OAAO,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB,EAAE,YAAoB;IACrE,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,OAAO,cAAc,eAAe,qBAAqB,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC/G,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,UAAU,YAAY,GAAG,CAAC,IAAI,eAAe,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC;QAC9F,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,qBAAqB,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB;gBAAE,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,qBAAqB,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB;gBAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,KAAK,MAAM,KAAK,IAAI,cAAc;QAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACxD,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC;YAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACxC,CAAC;IACD,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC;IAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,8HAA8H,CAAC,CAAC;QAC7I,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,kBAAkB,GAAG,IAAA,0BAAK,EAAC,eAAe,EAAE;QAC1C,QAAQ,EAAE,OAAO,EAAE,oBAAoB,IAAI,EAAE;KAC9C,EAAE;QACD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC1E,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC9C,oCAAoC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC1E,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACjD,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACpD,kBAAkB,GAAG,IAAI,CAAC;QAC1B,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC/C,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,iBAAiB;oBAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,CAAC;YAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAC3C,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG;YACZ,uDAAuD;YACvD,iDAAiD;SAClD,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,KAAK,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB;IAC5C,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,UAAmB;IACrC,MAAM,YAAY,GAAG,UAAU,IAAI,aAAa,EAAE,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oEAAoE,YAAY,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAe,CAAC;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,GAAoB,EAAE,MAAkB;IAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,KAAK,UAAU,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAmB;IAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAgB,WAAW;IACzB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;IACxD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,GAAG,IAAA,mBAAY,EAAC,QAAQ,EAAE;QAC9B,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,OAAO,IAAI,gBAAgB;KACrC,CAAC,CAAC;IAEH,MAAM,GAAG,IAAA,wBAAY,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjC,yEAAyE;QACzE,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;aACzB,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7B,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;aACzB,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,UAAU,EAAE,eAAe,CAAC,MAAM;gBAClC,SAAS,EAAE,SAAS,IAAI,aAAa;aACtC,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACrD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YACrD,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,kBAAW,EAAE,CAAC;IACtC,WAAW,CAAC,IAAI,EAAE,CAAC;IAEnB,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;IAE5E,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC7B,IAAI;YACJ,IAAI,EAAE,oBAAoB,IAAI,SAAS;YACvC,SAAS,EAAE,kBAAkB,IAAI,EAAE;SACpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAgB,EAAE,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAgB,EAAE,EAAE;QACpD,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QACnC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACnC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC;YACrB,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,oBAAoB,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS;SACrD,CAAC,CAAC;QACH,eAAe,EAAE,CAAC;QAElB,oDAAoD;QACpD,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QAClC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,iBAAiB;QAAE,OAAO;IAC9B,iBAAiB,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEhD,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;QACtC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACxB,eAAe,CAAC,KAAK,EAAE,CAAC;IAExB,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,OAAO,CAAC,IAAI,EAAE;gBACd,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;aAChG,CAAC,CAAC;YACH,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5C,CAAC;AAED,gEAAgE;AAChE,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;AAE9C,IAAI,aAAa,EAAE,CAAC;IAClB,WAAW,EAAE,CAAC;IAEd,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;;YAC/C,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC/C,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,MAAe,CAAC,CAAC;;YAC5D,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;QACnD,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remotepilot/cli",
3
- "version": "0.1.0",
4
- "description": "RemotePilot — Connect your phone to any computer. Pair via QR code, run coding agents from your phone.",
3
+ "version": "0.2.0",
4
+ "description": "RemotePilot — Connect your phone to any computer. One command to start, scan QR, done.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "scripts": {
11
11
  "build": "tsc",
12
12
  "prepublishOnly": "npm run build",
13
- "postinstall": "node -e \"console.log('✅ RemotePilot CLI installed! Run: remotepilot setup')\"",
13
+ "postinstall": "node -e \"console.log('\\n ✅ RemotePilot CLI installed!\\n\\n Run: npx remotepilot\\n\\n That\\'s it. One command. Scan the QR. Done.\\n')\"",
14
14
  "test": "vitest run",
15
15
  "test:watch": "vitest",
16
16
  "lint": "eslint src/",