@remotepilot/cli 0.1.1 → 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/cli.js +199 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +0 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/pair.d.ts +15 -2
- package/dist/commands/pair.d.ts.map +1 -1
- package/dist/commands/pair.js +66 -20
- package/dist/commands/pair.js.map +1 -1
- package/dist/commands/setup.d.ts +19 -2
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +161 -66
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts +8 -2
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +152 -57
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +48 -1
- package/dist/commands/stop.js.map +1 -1
- package/dist/daemon-manager.ps1 +10 -1
- package/dist/daemon.d.ts +7 -6
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +271 -46
- package/dist/daemon.js.map +1 -1
- package/package.json +3 -3
package/dist/commands/start.js
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ensureDaemon = ensureDaemon;
|
|
3
37
|
exports.startCommand = startCommand;
|
|
4
38
|
const windows_service_1 = require("@remotepilot/windows-service");
|
|
5
39
|
const node_child_process_1 = require("node:child_process");
|
|
@@ -7,6 +41,8 @@ const node_util_1 = require("node:util");
|
|
|
7
41
|
const promises_1 = require("node:fs/promises");
|
|
8
42
|
const node_path_1 = require("node:path");
|
|
9
43
|
const node_os_1 = require("node:os");
|
|
44
|
+
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const http = __importStar(require("node:http"));
|
|
10
46
|
const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
11
47
|
const SYSTEMD_SERVICE = `[Unit]
|
|
12
48
|
Description=RemotePilot Host Daemon
|
|
@@ -46,13 +82,49 @@ const AGENT_FILE = `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
46
82
|
</dict>
|
|
47
83
|
</plist>
|
|
48
84
|
`;
|
|
49
|
-
|
|
50
|
-
|
|
85
|
+
function checkHealth(port) {
|
|
86
|
+
return new Promise((resolve) => {
|
|
87
|
+
const req = http.get(`http://127.0.0.1:${port}/health`, { timeout: 2000 }, (res) => {
|
|
88
|
+
resolve(res.statusCode === 200);
|
|
89
|
+
});
|
|
90
|
+
req.on("error", () => resolve(false));
|
|
91
|
+
req.on("timeout", () => { req.destroy(); resolve(false); });
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function getDaemonPath() {
|
|
95
|
+
return (0, node_path_1.resolve)(__dirname, "../daemon.js");
|
|
96
|
+
}
|
|
97
|
+
function getConfigPath() {
|
|
98
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || "~";
|
|
99
|
+
return (0, node_path_1.join)(homeDir, ".remotepilot", "host.json");
|
|
100
|
+
}
|
|
101
|
+
function loadPort() {
|
|
102
|
+
const configPath = getConfigPath();
|
|
103
|
+
if (fs.existsSync(configPath)) {
|
|
104
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
105
|
+
return config.port || 6060;
|
|
106
|
+
}
|
|
107
|
+
return 6060;
|
|
108
|
+
}
|
|
109
|
+
async function ensureDaemon(options = {}) {
|
|
110
|
+
const port = loadPort();
|
|
111
|
+
const httpPort = port + 1;
|
|
112
|
+
// Check if already running
|
|
113
|
+
const running = await checkHealth(httpPort);
|
|
114
|
+
if (running) {
|
|
115
|
+
return { started: false, alreadyRunning: true, port };
|
|
116
|
+
}
|
|
51
117
|
if (options.foreground) {
|
|
52
|
-
console.log("Starting in foreground mode (for development)...\n");
|
|
53
118
|
const { startDaemon } = await import("../daemon.js");
|
|
54
119
|
startDaemon();
|
|
55
|
-
|
|
120
|
+
// Wait for it to come up
|
|
121
|
+
for (let i = 0; i < 10; i++) {
|
|
122
|
+
await new Promise(r => setTimeout(r, 500));
|
|
123
|
+
if (await checkHealth(httpPort)) {
|
|
124
|
+
return { started: true, alreadyRunning: false, port };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { started: true, alreadyRunning: false, port };
|
|
56
128
|
}
|
|
57
129
|
// --- Windows ---
|
|
58
130
|
if (process.platform === "win32") {
|
|
@@ -61,76 +133,81 @@ async function startCommand(options) {
|
|
|
61
133
|
if (exists) {
|
|
62
134
|
const status = await serviceManager.status();
|
|
63
135
|
if (status.state === "running") {
|
|
64
|
-
|
|
65
|
-
return;
|
|
136
|
+
return { started: false, alreadyRunning: true, port };
|
|
66
137
|
}
|
|
67
138
|
const started = await serviceManager.start();
|
|
68
139
|
if (started) {
|
|
69
|
-
await new Promise(
|
|
70
|
-
|
|
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);
|
|
140
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
141
|
+
return { started: true, alreadyRunning: false, port };
|
|
82
142
|
}
|
|
83
|
-
return;
|
|
84
143
|
}
|
|
85
144
|
// Try Registry Run key fallback
|
|
86
145
|
try {
|
|
87
146
|
const { stdout } = await execAsync('reg query "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" /v "RemotePilotHost"', { timeout: 5000 });
|
|
88
147
|
if (stdout.includes("RemotePilotHost")) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
148
|
+
// Spawn daemon in background
|
|
149
|
+
const daemonPath = getDaemonPath();
|
|
150
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [daemonPath], {
|
|
151
|
+
detached: true,
|
|
152
|
+
stdio: "ignore",
|
|
153
|
+
windowsHide: true
|
|
154
|
+
});
|
|
155
|
+
child.unref();
|
|
156
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
157
|
+
return { started: true, alreadyRunning: false, port };
|
|
94
158
|
}
|
|
95
159
|
}
|
|
96
|
-
catch {
|
|
97
|
-
|
|
160
|
+
catch { /* Registry entry doesn't exist */ }
|
|
161
|
+
// No service installed — spawn daemon directly
|
|
162
|
+
const daemonPath = getDaemonPath();
|
|
163
|
+
if (!fs.existsSync(daemonPath)) {
|
|
164
|
+
throw new Error("daemon.js not built. Run 'npm run build' first.");
|
|
165
|
+
}
|
|
166
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [daemonPath], {
|
|
167
|
+
detached: true,
|
|
168
|
+
stdio: "ignore",
|
|
169
|
+
windowsHide: true
|
|
170
|
+
});
|
|
171
|
+
child.unref();
|
|
172
|
+
// Wait for it to come up
|
|
173
|
+
for (let i = 0; i < 10; i++) {
|
|
174
|
+
await new Promise(r => setTimeout(r, 500));
|
|
175
|
+
if (await checkHealth(httpPort)) {
|
|
176
|
+
return { started: true, alreadyRunning: false, port };
|
|
177
|
+
}
|
|
98
178
|
}
|
|
99
|
-
|
|
100
|
-
process.exit(1);
|
|
179
|
+
return { started: true, alreadyRunning: false, port };
|
|
101
180
|
}
|
|
102
181
|
// --- Linux (systemd --user) ---
|
|
103
182
|
if (process.platform === "linux") {
|
|
104
183
|
const unitDir = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "systemd", "user");
|
|
105
184
|
const unitPath = (0, node_path_1.join)(unitDir, "remotepilot.service");
|
|
106
|
-
// Install unit file if missing
|
|
107
185
|
try {
|
|
108
186
|
await (0, promises_1.mkdir)(unitDir, { recursive: true });
|
|
109
|
-
await (0, promises_1.writeFile)(unitPath, SYSTEMD_SERVICE, { flag: "ax" });
|
|
187
|
+
await (0, promises_1.writeFile)(unitPath, SYSTEMD_SERVICE, { flag: "ax" });
|
|
110
188
|
}
|
|
111
189
|
catch { /* already exists */ }
|
|
112
190
|
try {
|
|
113
191
|
await execAsync("systemctl --user daemon-reload", { timeout: 5000 });
|
|
114
192
|
await execAsync("systemctl --user is-active remotepilot", { timeout: 5000 });
|
|
115
|
-
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// Not running, start it
|
|
193
|
+
return { started: false, alreadyRunning: true, port };
|
|
120
194
|
}
|
|
195
|
+
catch { /* not running */ }
|
|
121
196
|
try {
|
|
122
197
|
await execAsync("systemctl --user start remotepilot", { timeout: 5000 });
|
|
123
198
|
await execAsync("systemctl --user enable remotepilot", { timeout: 5000 });
|
|
124
|
-
|
|
125
|
-
console.log(" Logs: journalctl --user -u remotepilot -f");
|
|
126
|
-
return;
|
|
199
|
+
return { started: true, alreadyRunning: false, port };
|
|
127
200
|
}
|
|
128
|
-
catch
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
201
|
+
catch {
|
|
202
|
+
const daemonPath = getDaemonPath();
|
|
203
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [daemonPath], {
|
|
204
|
+
detached: true,
|
|
205
|
+
stdio: "ignore",
|
|
206
|
+
windowsHide: true
|
|
207
|
+
});
|
|
208
|
+
child.unref();
|
|
209
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
210
|
+
return { started: true, alreadyRunning: false, port };
|
|
134
211
|
}
|
|
135
212
|
}
|
|
136
213
|
// --- macOS (launchd) ---
|
|
@@ -143,22 +220,40 @@ async function startCommand(options) {
|
|
|
143
220
|
}
|
|
144
221
|
catch { /* already exists */ }
|
|
145
222
|
try {
|
|
146
|
-
// Unload first in case it's already loaded
|
|
147
223
|
await execAsync(`launchctl unload "${agentPath}" 2>/dev/null || true`, { timeout: 5000 });
|
|
148
224
|
await execAsync(`launchctl load "${agentPath}"`, { timeout: 5000 });
|
|
149
|
-
|
|
150
|
-
console.log(" Logs: log show --predicate 'process == \"node\"' --last 1m");
|
|
151
|
-
return;
|
|
225
|
+
return { started: true, alreadyRunning: false, port };
|
|
152
226
|
}
|
|
153
|
-
catch
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
227
|
+
catch {
|
|
228
|
+
const daemonPath = getDaemonPath();
|
|
229
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [daemonPath], {
|
|
230
|
+
detached: true,
|
|
231
|
+
stdio: "ignore",
|
|
232
|
+
windowsHide: true
|
|
233
|
+
});
|
|
234
|
+
child.unref();
|
|
235
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
236
|
+
return { started: true, alreadyRunning: false, port };
|
|
159
237
|
}
|
|
160
238
|
}
|
|
161
|
-
|
|
162
|
-
|
|
239
|
+
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
240
|
+
}
|
|
241
|
+
async function startCommand(options) {
|
|
242
|
+
console.log("Starting RemotePilot Host...\n");
|
|
243
|
+
if (options.foreground) {
|
|
244
|
+
console.log("Starting in foreground mode (for development)...\n");
|
|
245
|
+
const { startDaemon } = await import("../daemon.js");
|
|
246
|
+
startDaemon();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const result = await ensureDaemon(options);
|
|
250
|
+
if (result.alreadyRunning) {
|
|
251
|
+
console.log("Service is already running.");
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
console.log("Service started successfully.");
|
|
255
|
+
}
|
|
256
|
+
console.log(` Port: ${result.port}`);
|
|
257
|
+
console.log(` Health: http://127.0.0.1:${result.port + 1}/health`);
|
|
163
258
|
}
|
|
164
259
|
//# sourceMappingURL=start.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;CAAG;AAExB,wBAAsB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEtE"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -1,9 +1,44 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.stopCommand = stopCommand;
|
|
4
37
|
const windows_service_1 = require("@remotepilot/windows-service");
|
|
5
38
|
const node_child_process_1 = require("node:child_process");
|
|
6
39
|
const node_util_1 = require("node:util");
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
7
42
|
const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
8
43
|
async function stopCommand(_options) {
|
|
9
44
|
console.log("Stopping RemotePilot Host...\n");
|
|
@@ -40,7 +75,19 @@ async function stopCommand(_options) {
|
|
|
40
75
|
if (stdout.includes("RemotePilotHost")) {
|
|
41
76
|
// Check if daemon is actually running by hitting health endpoint
|
|
42
77
|
try {
|
|
43
|
-
const
|
|
78
|
+
const configPath = path.join(process.env.HOME || process.env.USERPROFILE || "~", ".remotepilot", "host.json");
|
|
79
|
+
let port = 6060;
|
|
80
|
+
let apiToken;
|
|
81
|
+
try {
|
|
82
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
83
|
+
port = config.port || 6060;
|
|
84
|
+
apiToken = config.apiToken;
|
|
85
|
+
}
|
|
86
|
+
catch { /* use default */ }
|
|
87
|
+
const headers = {};
|
|
88
|
+
if (apiToken)
|
|
89
|
+
headers["Authorization"] = `Bearer ${apiToken}`;
|
|
90
|
+
const response = await fetch(`http://localhost:${port}/status`, { headers });
|
|
44
91
|
if (response.ok) {
|
|
45
92
|
console.log("Daemon is running (foreground mode).");
|
|
46
93
|
console.log("To stop: use Ctrl+C in the terminal where it was started.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,kCAwEC;AAlFD,kEAAqE;AACrE,2DAA0C;AAC1C,yCAAsC;AACtC,4CAA8B;AAC9B,gDAAkC;AAElC,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,yBAAI,CAAC,CAAC;AAI3B,KAAK,UAAU,WAAW,CAAC,QAAqB;IACrD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,qCAAqC;QACrC,MAAM,cAAc,GAAG,IAAI,uCAAqB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;gBAChD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,0FAA0F,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClJ,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACvC,iEAAiE;gBACjE,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAClD,cAAc,EACd,WAAW,CACZ,CAAC;oBACF,IAAI,IAAI,GAAG,IAAI,CAAC;oBAChB,IAAI,QAA4B,CAAC;oBACjC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;wBAChE,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;wBAC3B,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;oBAC7B,MAAM,OAAO,GAA2B,EAAE,CAAC;oBAC3C,IAAI,QAAQ;wBAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,QAAQ,EAAE,CAAC;oBAC9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC7E,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;wBACzE,OAAO;oBACT,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,cAAc;gBAChB,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
package/dist/daemon-manager.ps1
CHANGED
|
@@ -16,7 +16,16 @@ $scriptDir = Split-Path -Parent $PSScriptRoot
|
|
|
16
16
|
$pidFile = Join-Path $PSScriptRoot "daemon.pid"
|
|
17
17
|
$logFile = Join-Path $PSScriptRoot "daemon.log"
|
|
18
18
|
$daemonScript = Join-Path $PSScriptRoot "daemon.js"
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
# Read port from host.json (default 6060)
|
|
21
|
+
$portNum = 6060
|
|
22
|
+
$configPath = Join-Path ([Environment]::GetFolderPath("UserProfile")) ".remotepilot\host.json"
|
|
23
|
+
if (Test-Path $configPath) {
|
|
24
|
+
try {
|
|
25
|
+
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
|
26
|
+
if ($config.port) { $portNum = $config.port }
|
|
27
|
+
} catch {}
|
|
28
|
+
}
|
|
20
29
|
|
|
21
30
|
function Get-DaemonPid {
|
|
22
31
|
if (Test-Path $pidFile) {
|
package/dist/daemon.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* RemotePilot Daemon -
|
|
3
|
+
* RemotePilot Daemon - Host Service Entry Point
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 1. Service mode: When launched by the Windows Service Control Manager
|
|
5
|
+
* Modes:
|
|
6
|
+
* 1. Service mode: When launched by OS service manager (SCM/systemd/launchd)
|
|
8
7
|
* 2. Foreground mode: When launched directly for development/testing
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Security:
|
|
10
|
+
* - HTTP endpoints require Authorization header matching API_TOKEN
|
|
11
|
+
* - Gateway and HTTP bind to 127.0.0.1 by default (set --listen=0.0.0.0 to expose)
|
|
12
|
+
* - API_TOKEN is generated on first run and stored in host.json
|
|
12
13
|
*/
|
|
13
14
|
export declare function startDaemon(): void;
|
|
14
15
|
//# sourceMappingURL=daemon.d.ts.map
|
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAqQH,wBAAgB,WAAW,IAAI,IAAI,CA0HlC"}
|