Lines 1-56javascript
2 * RoboPark — auto-start registration for production machines.
4 * Registers the RoboPark service to start on boot:
5 * - Windows → Task Scheduler
9 * This is used by `robopark setup --auto-start`.
11import { existsSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
12import { homedir } from 'node:os';
13import { dirname, join } from 'node:path';
14import { spawn, spawnSync } from 'node:child_process';
15function shellQuote(s) {
HighChild Process
Package source references child process execution.
dist/robopark/auto-start.jsView on unpkg · L13 16 if (!/[^a-zA-Z0-9_./:=,-]/.test(s))
18 return "'" + s.replace(/'/g, "'\\''") + "'";
20export async function registerAutoStart(service) {
21 const platform = process.platform;
22 if (platform === 'win32')
23 return registerWindows(service);
24 if (platform === 'linux')
25 return registerSystemd(service);
26 if (platform === 'darwin')
27 return registerLaunchd(service);
28 return { ok: false, message: `auto-start not supported on ${platform}` };
30async function registerWindows(service) {
31 const taskName = `RoboPark-${service.role}-${service.name}`;
32 const logDir = join(homedir(), 'AppData', 'Roaming', 'robopark', 'logs');
33 mkdirSync(logDir, { recursive: true });
34 const outLog = join(logDir, `${taskName}.log`);
35 const errLog = join(logDir, `${taskName}.err.log`);
36 const script = [service.command, ...service.args].map(shellQuote).join(' ');
37 const cmd = ['powershell.exe', '-WindowStyle', 'Hidden', '-ExecutionPolicy', 'Bypass', '-Command', script];
38 const xmlPath = join(homedir(), 'AppData', 'Roaming', 'robopark', `${taskName}.xml`);
39 mkdirSync(dirname(xmlPath), { recursive: true });
40 const xml = `<?xml version="1.0" encoding="UTF-16"?>\n<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">\n <RegistrationInfo>\n <Description>RoboPark ${service.role} for ${service.name}</Description>\n </RegistrationInfo>\n <Triggers>\n <BootTrigger>\n <Enabled>true</Enabled>\n </BootTrigger>\n <LogonTrigger>\n <Enabled>true</Enabled>\n </LogonTrigger>\n </Triggers>\n <Principals>\n <Principal id="Author">\n
41 // schtasks /XML requires UTF-16 LE *with* BOM when the XML declares UTF-16.
HighSandbox Evasion Gated Capability
Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.
dist/robopark/auto-start.jsView on unpkg · L13 MediumInstall Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/robopark/auto-start.jsView on unpkg · L13 42 const bom = Buffer.from([0xff, 0xfe]);
43 const body = Buffer.from(xml, 'utf16le');
44 writeFileSync(xmlPath, Buffer.concat([bom, body]));
45 return new Promise((resolve) => {
46 const schtasks = spawn('schtasks', ['/Create', '/TN', taskName, '/XML', xmlPath, '/F'], { stdio: 'pipe' });
49 schtasks.stdout.on('data', d => (out += d.toString()));
50 schtasks.stderr.on('data', d => (err += d.toString()));
51 schtasks.on('close', code => {
53 resolve({ ok: true, message: `registered Windows Task Scheduler task "${taskName}"` });
56 resolve({ ok: false, message: `schtasks failed (${code}): ${err || out}` });
Long lines were clipped for display.