@remotepilot/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +75 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/pair.d.ts +6 -0
- package/dist/commands/pair.d.ts.map +1 -0
- package/dist/commands/pair.js +114 -0
- package/dist/commands/pair.js.map +1 -0
- package/dist/commands/restart.d.ts +5 -0
- package/dist/commands/restart.d.ts.map +1 -0
- package/dist/commands/restart.js +67 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +387 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +6 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +164 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +130 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +67 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +8 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon-manager.ps1 +114 -0
- package/dist/daemon.d.ts +14 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +216 -0
- package/dist/daemon.js.map +1 -0
- package/dist/daemon.log +0 -0
- package/dist/daemon.pid +0 -0
- package/dist/utils/update-check.d.ts +3 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +112 -0
- package/dist/utils/update-check.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.setupCommand = setupCommand;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const crypto_1 = require("@remotepilot/crypto");
|
|
40
|
+
const protocol_1 = require("@remotepilot/protocol");
|
|
41
|
+
const windows_service_1 = require("@remotepilot/windows-service");
|
|
42
|
+
const windows_process_1 = require("@remotepilot/windows-process");
|
|
43
|
+
async function setupCommand(options) {
|
|
44
|
+
console.log("RemotePilot Host Setup");
|
|
45
|
+
console.log("======================\n");
|
|
46
|
+
// Detect platform
|
|
47
|
+
const platform = detectPlatform();
|
|
48
|
+
console.log(`Detected platform: ${platform}`);
|
|
49
|
+
// Check prerequisites
|
|
50
|
+
console.log("\nChecking prerequisites...");
|
|
51
|
+
await checkPrerequisites(platform);
|
|
52
|
+
// Get host name
|
|
53
|
+
const hostName = options.name || getHostName();
|
|
54
|
+
console.log(`Host name: ${hostName}`);
|
|
55
|
+
// Get port
|
|
56
|
+
const port = parseInt(options.port || "8080", 10);
|
|
57
|
+
console.log(`Port: ${port}`);
|
|
58
|
+
// Check if already configured
|
|
59
|
+
const configPath = getConfigPath();
|
|
60
|
+
if (fs.existsSync(configPath) && !options.force) {
|
|
61
|
+
console.log("\nHost already configured. Use --force to reconfigure.");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Determine data directory: ProgramData when elevated, user profile otherwise
|
|
65
|
+
const elevated = isElevated();
|
|
66
|
+
const dataDir = elevated ? getServiceDataDir() : path.dirname(configPath);
|
|
67
|
+
console.log(`Data directory: ${dataDir}${elevated ? " (elevated — ProgramData)" : " (user profile)"}`);
|
|
68
|
+
// Generate host identity
|
|
69
|
+
console.log("\nGenerating host identity...");
|
|
70
|
+
const { publicKey, privateKey } = (0, crypto_1.generateKeyPairSync)();
|
|
71
|
+
const hostId = (0, crypto_1.generateHostId)(publicKey);
|
|
72
|
+
console.log(`Host ID: ${hostId}`);
|
|
73
|
+
// Ensure config directory exists
|
|
74
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
75
|
+
// Save private key with proper Windows ACL
|
|
76
|
+
const privateKeyPath = path.join(dataDir, "host.key");
|
|
77
|
+
fs.writeFileSync(privateKeyPath, privateKey);
|
|
78
|
+
await restrictPrivateKey(privateKeyPath);
|
|
79
|
+
console.log(`Private key saved to: ${privateKeyPath}`);
|
|
80
|
+
// Save public key
|
|
81
|
+
const publicKeyPath = path.join(dataDir, "host.pub");
|
|
82
|
+
fs.writeFileSync(publicKeyPath, publicKey);
|
|
83
|
+
console.log(`Public key saved to: ${publicKeyPath}`);
|
|
84
|
+
// Detect available shells using ShellDetector
|
|
85
|
+
console.log("\nDetecting available shells...");
|
|
86
|
+
const shells = await detectShells(platform);
|
|
87
|
+
console.log(`Available shells: ${shells.join(", ")}`);
|
|
88
|
+
// Detect installed tools
|
|
89
|
+
console.log("\nDetecting installed tools...");
|
|
90
|
+
const tools = await detectInstalledTools(platform);
|
|
91
|
+
console.log(`Installed tools: ${tools.join(", ")}`);
|
|
92
|
+
// Detect installed agents
|
|
93
|
+
console.log("\nDetecting installed AI agents...");
|
|
94
|
+
const agents = await detectInstalledAgents();
|
|
95
|
+
console.log(`Installed agents: ${agents.join(", ")}`);
|
|
96
|
+
// Create config
|
|
97
|
+
const config = {
|
|
98
|
+
hostId,
|
|
99
|
+
hostName,
|
|
100
|
+
platform,
|
|
101
|
+
publicKey,
|
|
102
|
+
privateKeyPath,
|
|
103
|
+
port,
|
|
104
|
+
createdAt: Date.now()
|
|
105
|
+
};
|
|
106
|
+
// Save config to the data directory (user profile for dev, ProgramData for elevated)
|
|
107
|
+
const serviceConfigPath = path.join(dataDir, "host.json");
|
|
108
|
+
fs.writeFileSync(serviceConfigPath, JSON.stringify(config, null, 2));
|
|
109
|
+
console.log(`\nConfiguration saved to: ${serviceConfigPath}`);
|
|
110
|
+
// Install service (pass data dir so the daemon can find config)
|
|
111
|
+
console.log("\nInstalling Windows service...");
|
|
112
|
+
await installService(platform, config, dataDir);
|
|
113
|
+
// Clean up any old startup scripts from previous versions
|
|
114
|
+
cleanupOldStartupScripts();
|
|
115
|
+
console.log("\nSetup complete!");
|
|
116
|
+
console.log("\nNext steps:");
|
|
117
|
+
console.log(" 1. Start the service: remotepilot start");
|
|
118
|
+
console.log(" 2. Check status: remotepilot status");
|
|
119
|
+
console.log(" 3. Pair your device: remotepilot pair");
|
|
120
|
+
}
|
|
121
|
+
function detectPlatform() {
|
|
122
|
+
const platform = process.platform;
|
|
123
|
+
if (platform === "win32") {
|
|
124
|
+
return protocol_1.Platform.WINDOWS;
|
|
125
|
+
}
|
|
126
|
+
else if (platform === "linux") {
|
|
127
|
+
return protocol_1.Platform.LINUX;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
throw new Error(`Unsupported platform: ${platform}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function checkPrerequisites(platform) {
|
|
134
|
+
const missing = [];
|
|
135
|
+
if (platform === protocol_1.Platform.WINDOWS) {
|
|
136
|
+
// Check for PowerShell
|
|
137
|
+
try {
|
|
138
|
+
const { exec } = await import("node:child_process");
|
|
139
|
+
const { promisify } = await import("node:util");
|
|
140
|
+
const execAsync = promisify(exec);
|
|
141
|
+
await execAsync("powershell -NoProfile -Command \"Write-Host 'ok'\"", { timeout: 5000 });
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
missing.push("PowerShell");
|
|
145
|
+
}
|
|
146
|
+
// Check for Node.js (required)
|
|
147
|
+
try {
|
|
148
|
+
const { exec } = await import("node:child_process");
|
|
149
|
+
const { promisify } = await import("node:util");
|
|
150
|
+
const execAsync = promisify(exec);
|
|
151
|
+
await execAsync("node --version", { timeout: 5000 });
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
missing.push("Node.js (required)");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (missing.length > 0) {
|
|
158
|
+
console.log(` Missing prerequisites: ${missing.join(", ")}`);
|
|
159
|
+
console.log(" Install these before continuing.");
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(" All prerequisites met");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function getHostName() {
|
|
166
|
+
return process.env.COMPUTERNAME || process.env.HOSTNAME || "Unknown";
|
|
167
|
+
}
|
|
168
|
+
function getConfigPath() {
|
|
169
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || "~";
|
|
170
|
+
return path.join(homeDir, ".remotepilot", "host.json");
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the service-owned data directory.
|
|
174
|
+
* When running elevated (Administrator), use %ProgramData%\RemotePilot\
|
|
175
|
+
* so the LocalSystem service can access config, keys, and logs.
|
|
176
|
+
* When not elevated, fall back to user profile (development only).
|
|
177
|
+
*/
|
|
178
|
+
function getServiceDataDir() {
|
|
179
|
+
const programData = process.env.PROGRAMDATA || "C:\\ProgramData";
|
|
180
|
+
return path.join(programData, "RemotePilot");
|
|
181
|
+
}
|
|
182
|
+
function isElevated() {
|
|
183
|
+
try {
|
|
184
|
+
const { execSync } = require("node:child_process");
|
|
185
|
+
execSync("net session", { stdio: "ignore" });
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Detect available shells using ShellDetector
|
|
194
|
+
*/
|
|
195
|
+
async function detectShells(platform) {
|
|
196
|
+
try {
|
|
197
|
+
const detector = new windows_process_1.ShellDetector(platform);
|
|
198
|
+
const shells = await detector.detectAvailableShells();
|
|
199
|
+
return shells.map(s => s.displayName);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return ["PowerShell", "CMD"];
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async function detectInstalledTools(platform) {
|
|
206
|
+
const tools = [];
|
|
207
|
+
const { exec } = await import("node:child_process");
|
|
208
|
+
const { promisify } = await import("node:util");
|
|
209
|
+
const execAsync = promisify(exec);
|
|
210
|
+
const toolChecks = [
|
|
211
|
+
{ name: "Git", command: "git --version" },
|
|
212
|
+
{ name: "Node.js", command: "node --version" },
|
|
213
|
+
{ name: "npm", command: "npm --version" },
|
|
214
|
+
{ name: "Python", command: "python --version" },
|
|
215
|
+
{ name: "Docker", command: "docker --version" },
|
|
216
|
+
{ name: "VS Code", command: "code --version" }
|
|
217
|
+
];
|
|
218
|
+
for (const tool of toolChecks) {
|
|
219
|
+
try {
|
|
220
|
+
await execAsync(tool.command, { timeout: 5000 });
|
|
221
|
+
tools.push(tool.name);
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Tool not installed
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return tools;
|
|
228
|
+
}
|
|
229
|
+
async function detectInstalledAgents() {
|
|
230
|
+
const agents = [];
|
|
231
|
+
const { exec } = await import("node:child_process");
|
|
232
|
+
const { promisify } = await import("node:util");
|
|
233
|
+
const execAsync = promisify(exec);
|
|
234
|
+
const agentChecks = [
|
|
235
|
+
{ name: "Claude Code", command: "claude --version" },
|
|
236
|
+
{ name: "Codex", command: "codex --version" },
|
|
237
|
+
{ name: "Gemini CLI", command: "gemini --version" },
|
|
238
|
+
{ name: "OpenCode", command: "opencode --version" }
|
|
239
|
+
];
|
|
240
|
+
for (const agent of agentChecks) {
|
|
241
|
+
try {
|
|
242
|
+
await execAsync(agent.command, { timeout: 5000 });
|
|
243
|
+
agents.push(agent.name);
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// Agent not installed
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return agents;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Install the Windows service using WindowsServiceManager
|
|
253
|
+
*
|
|
254
|
+
* Strategy:
|
|
255
|
+
* 1. Try sc.exe first (requires Administrator + user password)
|
|
256
|
+
* 2. Fall back to Registry Run key (works without elevation)
|
|
257
|
+
*
|
|
258
|
+
* The Registry Run key approach creates an entry that runs at user logon,
|
|
259
|
+
* under the current user's account.
|
|
260
|
+
*/
|
|
261
|
+
async function installService(platform, config, dataDir) {
|
|
262
|
+
if (platform === protocol_1.Platform.WINDOWS) {
|
|
263
|
+
const serviceManager = new windows_service_1.WindowsServiceManager();
|
|
264
|
+
// Find the daemon entry point
|
|
265
|
+
const daemonPath = path.resolve(__dirname, "../daemon.js");
|
|
266
|
+
if (!fs.existsSync(daemonPath)) {
|
|
267
|
+
console.log(" Warning: daemon.ts not built. Service installation skipped.");
|
|
268
|
+
console.log(" Run 'npm run build' and then re-run setup.");
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// Try sc.exe first (requires Administrator)
|
|
272
|
+
// Service runs as LocalSystem. Service-owned data (config, keys, logs)
|
|
273
|
+
// lives in %ProgramData%\RemotePilot\ (dataDir). The daemon receives
|
|
274
|
+
// --data-dir so it does not depend on %USERPROFILE%.
|
|
275
|
+
console.log(" Attempting Windows service installation via sc.exe...");
|
|
276
|
+
const serviceConfig = {
|
|
277
|
+
serviceName: "RemotePilotHost",
|
|
278
|
+
displayName: "RemotePilot Host Service",
|
|
279
|
+
description: "RemotePilot remote development host daemon",
|
|
280
|
+
scriptPath: daemonPath,
|
|
281
|
+
nodeArgs: [],
|
|
282
|
+
scriptArgs: ["--service", `--data-dir=${dataDir}`],
|
|
283
|
+
configDir: dataDir
|
|
284
|
+
};
|
|
285
|
+
const installed = await serviceManager.install(serviceConfig);
|
|
286
|
+
if (installed) {
|
|
287
|
+
console.log(" Service installed via Windows Service Control Manager.");
|
|
288
|
+
console.log(" Startup type: Automatic (starts with Windows)");
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Fall back to Registry Run key
|
|
292
|
+
console.log(" sc.exe requires Administrator privileges.");
|
|
293
|
+
console.log(" Falling back to Registry Run key (works without elevation)...");
|
|
294
|
+
const registryInstalled = await installViaRegistryRunKey(daemonPath, dataDir);
|
|
295
|
+
if (registryInstalled) {
|
|
296
|
+
console.log(" Startup entry installed via Registry Run key.");
|
|
297
|
+
console.log(" The daemon will start automatically at user logon.");
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
console.log(" Warning: Could not install automatic startup.");
|
|
301
|
+
console.log(" Run 'remotepilot start' to start the daemon manually.");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
else if (platform === protocol_1.Platform.LINUX) {
|
|
305
|
+
console.log(" Linux service installation (systemd) - see docs/installation.md");
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Install via Windows Registry Run key as a fallback when sc.exe is not available.
|
|
310
|
+
* This works without Administrator privileges and starts the daemon at user logon.
|
|
311
|
+
*
|
|
312
|
+
* The daemon runs under the current user's account. --data-dir points to the
|
|
313
|
+
* user profile so the daemon reads/writes config and logs from %USERPROFILE%.
|
|
314
|
+
*/
|
|
315
|
+
async function installViaRegistryRunKey(daemonPath, dataDir) {
|
|
316
|
+
try {
|
|
317
|
+
const { exec } = await import("node:child_process");
|
|
318
|
+
const { promisify } = await import("node:util");
|
|
319
|
+
const execAsync = promisify(exec);
|
|
320
|
+
const nodeExe = process.execPath;
|
|
321
|
+
// Write a batch wrapper to avoid shell escaping issues
|
|
322
|
+
const batchPath = path.join(path.dirname(daemonPath), "remotepilot-service.bat");
|
|
323
|
+
const batchContent = `@echo off\n"${nodeExe}" "${daemonPath}" --service --data-dir="${dataDir}"\n`;
|
|
324
|
+
fs.writeFileSync(batchPath, batchContent);
|
|
325
|
+
// Add to HKCU\Software\Microsoft\Windows\CurrentVersion\Run
|
|
326
|
+
// This starts the daemon when the current user logs in
|
|
327
|
+
const regCmd = `reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" /v "RemotePilotHost" /t REG_SZ /d "\\"${batchPath}\\"" /f`;
|
|
328
|
+
await execAsync(regCmd, { timeout: 5000 });
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
console.log(` Registry error: ${error}`);
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Remove old startup scripts from previous versions
|
|
338
|
+
*/
|
|
339
|
+
function cleanupOldStartupScripts() {
|
|
340
|
+
try {
|
|
341
|
+
const appData = process.env.APPDATA || "";
|
|
342
|
+
const startupPath = path.join(appData, "Microsoft", "Windows", "Start Menu", "Programs", "Startup", "remotepilot.bat");
|
|
343
|
+
if (fs.existsSync(startupPath)) {
|
|
344
|
+
fs.unlinkSync(startupPath);
|
|
345
|
+
console.log(" Removed old startup script (replaced by Windows service)");
|
|
346
|
+
}
|
|
347
|
+
// Also remove scheduled task if it exists
|
|
348
|
+
const { exec } = require("node:child_process");
|
|
349
|
+
exec('schtasks /delete /tn "RemotePilot" /f', () => {
|
|
350
|
+
// Ignore errors - task may not exist
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// Ignore cleanup errors
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Restrict private key file permissions on Windows
|
|
359
|
+
*
|
|
360
|
+
* Removes inherited permissions and grants access only to:
|
|
361
|
+
* - The current user (Read/Write)
|
|
362
|
+
* - SYSTEM (Read only — needed for daemon to sign pairing challenges)
|
|
363
|
+
*
|
|
364
|
+
* Does NOT grant Full Control to SYSTEM. The daemon only reads the key.
|
|
365
|
+
* Does NOT grant access to Administrators group or other users.
|
|
366
|
+
*/
|
|
367
|
+
async function restrictPrivateKey(filePath) {
|
|
368
|
+
if (process.platform !== "win32")
|
|
369
|
+
return;
|
|
370
|
+
try {
|
|
371
|
+
const { exec } = await import("node:child_process");
|
|
372
|
+
const { promisify } = await import("node:util");
|
|
373
|
+
const execAsync = promisify(exec);
|
|
374
|
+
// Get current username
|
|
375
|
+
const username = process.env.USERNAME || process.env.COMPUTERNAME || "unknown";
|
|
376
|
+
const domain = process.env.USERDOMAIN || ".";
|
|
377
|
+
// Remove inherited permissions and set explicit ACL
|
|
378
|
+
// SYSTEM gets Read-only (minimum required for pairing operations)
|
|
379
|
+
const icaclsCmd = `icacls "${filePath}" /inheritance:r /grant:r "${domain}\\${username}:(R,W)" "SYSTEM:(R)"`;
|
|
380
|
+
await execAsync(icaclsCmd, { timeout: 5000 });
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
// If icacls fails, log but don't block setup
|
|
384
|
+
console.log(" Warning: Could not set private key permissions. Manual adjustment recommended.");
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,oCA+FC;AAtHD,4CAA8B;AAC9B,gDAAkC;AAClC,gDAA0E;AAC1E,oDAAiD;AACjD,kEAAoF;AACpF,kEAA6D;AAkBtD,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,kBAAkB;IAClB,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;IAE9C,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEnC,gBAAgB;IAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAEtC,WAAW;IACX,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAE7B,8BAA8B;IAC9B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEvG,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAA,4BAAmB,GAAE,CAAC;IACxD,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;IAElC,iCAAiC;IACjC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,2CAA2C;IAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,yBAAyB,cAAc,EAAE,CAAC,CAAC;IAEvD,kBAAkB;IAClB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,wBAAwB,aAAa,EAAE,CAAC,CAAC;IAErD,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpD,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,gBAAgB;IAChB,MAAM,MAAM,GAAe;QACzB,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,cAAc;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IAEF,qFAAqF;IACrF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,6BAA6B,iBAAiB,EAAE,CAAC,CAAC;IAE9D,gEAAgE;IAChE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,wBAAwB,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,mBAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,mBAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAkB;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,QAAQ,KAAK,mBAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,SAAS,CAAC,oDAAoD,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,SAAS,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,aAAa;IACpB,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;;;;;GAKG;AACH,SAAS,iBAAiB;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,iBAAiB,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACnD,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,QAAkB;IAC5C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,+BAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAkB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG;QACjB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE;QACzC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC9C,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE;QACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;QAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;QAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;KAC/C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACpD,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACnD,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE;KACpD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,cAAc,CAAC,QAAkB,EAAE,MAAkB,EAAE,OAAe;IACnF,IAAI,QAAQ,KAAK,mBAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,uCAAqB,EAAE,CAAC;QAEnD,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,4CAA4C;QAC5C,uEAAuE;QACvE,qEAAqE;QACrE,qDAAqD;QACrD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,MAAM,aAAa,GAAkB;YACnC,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,0BAA0B;YACvC,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC,WAAW,EAAE,cAAc,OAAO,EAAE,CAAC;YAClD,SAAS,EAAE,OAAO;SACnB,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,MAAM,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9E,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,mBAAQ,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,wBAAwB,CAAC,UAAkB,EAAE,OAAe;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEjC,uDAAuD;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,eAAe,OAAO,MAAM,UAAU,2BAA2B,OAAO,KAAK,CAAC;QACnG,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE1C,4DAA4D;QAC5D,uDAAuD;QACvD,MAAM,MAAM,GAAG,2GAA2G,SAAS,SAAS,CAAC;QAE7I,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,OAAO,EACP,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,iBAAiB,CAClB,CAAC;QAEF,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC5E,CAAC;QAED,0CAA0C;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;YACjD,qCAAqC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IAEzC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,uBAAuB;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC;QAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;QAE7C,oDAAoD;QACpD,kEAAkE;QAClE,MAAM,SAAS,GAAG,WAAW,QAAQ,8BAA8B,MAAM,KAAK,QAAQ,sBAAsB,CAAC;QAC7G,MAAM,SAAS,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA0CD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHvE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startCommand = startCommand;
|
|
4
|
+
const windows_service_1 = require("@remotepilot/windows-service");
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
6
|
+
const node_util_1 = require("node:util");
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_os_1 = require("node:os");
|
|
10
|
+
const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
11
|
+
const SYSTEMD_SERVICE = `[Unit]
|
|
12
|
+
Description=RemotePilot Host Daemon
|
|
13
|
+
After=network.target
|
|
14
|
+
|
|
15
|
+
[Service]
|
|
16
|
+
Type=simple
|
|
17
|
+
ExecStart=/usr/bin/env node -e "import('remotepilot/dist/daemon.js').then(m => m.startDaemon())"
|
|
18
|
+
Restart=on-failure
|
|
19
|
+
RestartSec=5
|
|
20
|
+
Environment=NODE_ENV=production
|
|
21
|
+
|
|
22
|
+
[Install]
|
|
23
|
+
WantedBy=default.target
|
|
24
|
+
`;
|
|
25
|
+
const AGENT_FILE = `<?xml version="1.0" encoding="UTF-8"?>
|
|
26
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
27
|
+
<plist version="1.0">
|
|
28
|
+
<dict>
|
|
29
|
+
<key>Label</key>
|
|
30
|
+
<string>dev.remotepilot.daemon</string>
|
|
31
|
+
<key>ProgramArguments</key>
|
|
32
|
+
<array>
|
|
33
|
+
<string>/usr/bin/env</string>
|
|
34
|
+
<string>node</string>
|
|
35
|
+
<string>-e</string>
|
|
36
|
+
<string>import('remotepilot/dist/daemon.js').then(m => m.startDaemon())</string>
|
|
37
|
+
</array>
|
|
38
|
+
<key>RunAtLoad</key>
|
|
39
|
+
<true/>
|
|
40
|
+
<key>KeepAlive</key>
|
|
41
|
+
<true/>
|
|
42
|
+
<key>StandardOutPath</key>
|
|
43
|
+
<string>/tmp/remotepilot.log</string>
|
|
44
|
+
<key>StandardErrorPath</key>
|
|
45
|
+
<string>/tmp/remotepilot.log</string>
|
|
46
|
+
</dict>
|
|
47
|
+
</plist>
|
|
48
|
+
`;
|
|
49
|
+
async function startCommand(options) {
|
|
50
|
+
console.log("Starting RemotePilot Host...\n");
|
|
51
|
+
if (options.foreground) {
|
|
52
|
+
console.log("Starting in foreground mode (for development)...\n");
|
|
53
|
+
const { startDaemon } = await import("../daemon.js");
|
|
54
|
+
startDaemon();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// --- Windows ---
|
|
58
|
+
if (process.platform === "win32") {
|
|
59
|
+
const serviceManager = new windows_service_1.WindowsServiceManager();
|
|
60
|
+
const exists = await serviceManager.exists();
|
|
61
|
+
if (exists) {
|
|
62
|
+
const status = await serviceManager.status();
|
|
63
|
+
if (status.state === "running") {
|
|
64
|
+
console.log("Service is already running.");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const started = await serviceManager.start();
|
|
68
|
+
if (started) {
|
|
69
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
70
|
+
const newStatus = await serviceManager.status();
|
|
71
|
+
if (newStatus.state === "running") {
|
|
72
|
+
console.log("Service started successfully.");
|
|
73
|
+
console.log(` PID: ${newStatus.pid || "unknown"}`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(`Service state: ${newStatus.state}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.error("Failed to start service.");
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Try Registry Run key fallback
|
|
86
|
+
try {
|
|
87
|
+
const { stdout } = await execAsync('reg query "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" /v "RemotePilotHost"', { timeout: 5000 });
|
|
88
|
+
if (stdout.includes("RemotePilotHost")) {
|
|
89
|
+
console.log("Daemon found via Registry Run key. Starting in foreground...");
|
|
90
|
+
console.log("(Note: Daemon will auto-start on next user logon)\n");
|
|
91
|
+
const { startDaemon } = await import("../daemon.js");
|
|
92
|
+
startDaemon();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Registry entry doesn't exist
|
|
98
|
+
}
|
|
99
|
+
console.log("Service not installed. Run 'remotepilot setup' first.");
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
// --- Linux (systemd --user) ---
|
|
103
|
+
if (process.platform === "linux") {
|
|
104
|
+
const unitDir = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "systemd", "user");
|
|
105
|
+
const unitPath = (0, node_path_1.join)(unitDir, "remotepilot.service");
|
|
106
|
+
// Install unit file if missing
|
|
107
|
+
try {
|
|
108
|
+
await (0, promises_1.mkdir)(unitDir, { recursive: true });
|
|
109
|
+
await (0, promises_1.writeFile)(unitPath, SYSTEMD_SERVICE, { flag: "ax" }); // skip if exists
|
|
110
|
+
}
|
|
111
|
+
catch { /* already exists */ }
|
|
112
|
+
try {
|
|
113
|
+
await execAsync("systemctl --user daemon-reload", { timeout: 5000 });
|
|
114
|
+
await execAsync("systemctl --user is-active remotepilot", { timeout: 5000 });
|
|
115
|
+
console.log("Service is already running.");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Not running, start it
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
await execAsync("systemctl --user start remotepilot", { timeout: 5000 });
|
|
123
|
+
await execAsync("systemctl --user enable remotepilot", { timeout: 5000 });
|
|
124
|
+
console.log("Service started and enabled for auto-start.");
|
|
125
|
+
console.log(" Logs: journalctl --user -u remotepilot -f");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
console.error("Failed to start systemd service:", err.message);
|
|
130
|
+
console.log("Falling back to foreground mode...\n");
|
|
131
|
+
const { startDaemon } = await import("../daemon.js");
|
|
132
|
+
startDaemon();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// --- macOS (launchd) ---
|
|
137
|
+
if (process.platform === "darwin") {
|
|
138
|
+
const agentDir = (0, node_path_1.join)((0, node_os_1.homedir)(), "Library", "LaunchAgents");
|
|
139
|
+
const agentPath = (0, node_path_1.join)(agentDir, "dev.remotepilot.daemon.plist");
|
|
140
|
+
try {
|
|
141
|
+
await (0, promises_1.mkdir)(agentDir, { recursive: true });
|
|
142
|
+
await (0, promises_1.writeFile)(agentPath, AGENT_FILE, { flag: "ax" });
|
|
143
|
+
}
|
|
144
|
+
catch { /* already exists */ }
|
|
145
|
+
try {
|
|
146
|
+
// Unload first in case it's already loaded
|
|
147
|
+
await execAsync(`launchctl unload "${agentPath}" 2>/dev/null || true`, { timeout: 5000 });
|
|
148
|
+
await execAsync(`launchctl load "${agentPath}"`, { timeout: 5000 });
|
|
149
|
+
console.log("Service loaded and enabled for auto-start.");
|
|
150
|
+
console.log(" Logs: log show --predicate 'process == \"node\"' --last 1m");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
console.error("Failed to load launchd agent:", err.message);
|
|
155
|
+
console.log("Falling back to foreground mode...\n");
|
|
156
|
+
const { startDaemon } = await import("../daemon.js");
|
|
157
|
+
startDaemon();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
console.log(`Unsupported platform: ${process.platform}`);
|
|
162
|
+
console.log("Run in foreground: remotepilot start --foreground");
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;CAAG;AAY1B,wBAAsB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E1E"}
|