hyperclaw 5.3.1 → 5.3.3

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.
Files changed (48) hide show
  1. package/README.md +2 -0
  2. package/dist/banner-B8OcbGCR.js +143 -0
  3. package/dist/banner-BIOxqoND.js +7 -0
  4. package/dist/banner-BT9llPVP.js +7 -0
  5. package/dist/banner-DNSYi9N-.js +143 -0
  6. package/dist/chat-CKLXvJjd.js +545 -0
  7. package/dist/chat-CvZyAfqV.js +545 -0
  8. package/dist/daemon-Bi0rcsh5.js +421 -0
  9. package/dist/daemon-DL5zfvZd.js +7 -0
  10. package/dist/daemon-DkK4j69t.js +421 -0
  11. package/dist/daemon-DnWIgRUn.js +7 -0
  12. package/dist/engine-BZ44Vuhh.js +7 -0
  13. package/dist/engine-C1osvhmq.js +327 -0
  14. package/dist/engine-EA8vevRJ.js +327 -0
  15. package/dist/engine-SjHViH0c.js +7 -0
  16. package/dist/hyperclawbot-CyIGak-G.js +516 -0
  17. package/dist/hyperclawbot-DC3jGsoA.js +516 -0
  18. package/dist/mcp-loader-BBlqPFQl.js +93 -0
  19. package/dist/mcp-loader-DyklUhL2.js +93 -0
  20. package/dist/onboard-BriaGw6G.js +3812 -0
  21. package/dist/onboard-Bu3xDVur.js +14 -0
  22. package/dist/onboard-DRgSPOuY.js +3812 -0
  23. package/dist/onboard-qPUG8PBU.js +14 -0
  24. package/dist/orchestrator-BURpEF0U.js +6 -0
  25. package/dist/orchestrator-C0_UaVsn.js +6 -0
  26. package/dist/orchestrator-CnEDItE1.js +189 -0
  27. package/dist/orchestrator-CqXGMcxd.js +189 -0
  28. package/dist/osint-BC5eNzVi.js +283 -0
  29. package/dist/osint-BiZZ_d-g.js +283 -0
  30. package/dist/osint-chat-DaRWDl3X.js +789 -0
  31. package/dist/osint-chat-myilxKVw.js +789 -0
  32. package/dist/run-main.js +128 -45
  33. package/dist/server-B5wYaa-U.js +4 -0
  34. package/dist/server-DBXhcGiq.js +4 -0
  35. package/dist/server-O4Zv8s74.js +1366 -0
  36. package/dist/server-viuRgDlF.js +1365 -0
  37. package/dist/skill-runtime-B7U9JxNS.js +5 -0
  38. package/dist/skill-runtime-DXKqnJos.js +104 -0
  39. package/dist/skill-runtime-IFk6whV0.js +104 -0
  40. package/dist/skill-runtime-vylCVHmD.js +5 -0
  41. package/dist/src-BA04v4CG.js +458 -0
  42. package/dist/src-BWpeRe8J.js +63 -0
  43. package/dist/src-Czb6-Nkc.js +458 -0
  44. package/dist/src-DSZTfNdO.js +63 -0
  45. package/dist/sub-agent-tools-Dzh0nVzy.js +39 -0
  46. package/dist/sub-agent-tools-zyfsZ8k0.js +39 -0
  47. package/package.json +1 -1
  48. package/static/chat.html +581 -163
@@ -0,0 +1,421 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_paths = require('./paths-AIyBxIzm.js');
3
+ const require_paths$1 = require('./paths-DPovhojT.js');
4
+ const require_server = require('./server-viuRgDlF.js');
5
+ const chalk = require_chunk.__toESM(require("chalk"));
6
+ const ora = require_chunk.__toESM(require("ora"));
7
+ const fs_extra = require_chunk.__toESM(require("fs-extra"));
8
+ const path = require_chunk.__toESM(require("path"));
9
+ const os = require_chunk.__toESM(require("os"));
10
+ const ws = require_chunk.__toESM(require("ws"));
11
+ const child_process = require_chunk.__toESM(require("child_process"));
12
+ const util = require_chunk.__toESM(require("util"));
13
+
14
+ //#region src/infra/daemon.ts
15
+ require_paths$1.init_paths();
16
+ const execAsync = (0, util.promisify)(child_process.exec);
17
+ const execFileAsync = (0, util.promisify)(child_process.execFile);
18
+ const getHCDir = () => require_paths.getHyperClawDir();
19
+ var DaemonManager = class {
20
+ async install() {
21
+ const platform = os.default.platform();
22
+ if (platform === "darwin") await this.installMacOS();
23
+ else if (platform === "linux") await this.installLinux();
24
+ else if (platform === "win32") await this.installWindows();
25
+ }
26
+ async uninstall() {
27
+ const platform = os.default.platform();
28
+ if (platform === "darwin") {
29
+ const plistPath = path.default.join(os.default.homedir(), "Library/LaunchAgents/ai.hyperclaw.gateway.plist");
30
+ try {
31
+ await execAsync(`launchctl unload ${plistPath}`);
32
+ } catch {}
33
+ await fs_extra.default.remove(plistPath).catch(() => {});
34
+ console.log(chalk.default.green(" ✅ LaunchAgent removed"));
35
+ } else if (platform === "linux") {
36
+ try {
37
+ await execAsync("systemctl --user disable --now hyperclaw.service");
38
+ } catch {}
39
+ const unitFile = path.default.join(os.default.homedir(), ".config", "systemd", "user", "hyperclaw.service");
40
+ await fs_extra.default.remove(unitFile).catch(() => {});
41
+ try {
42
+ await execAsync("systemctl --user daemon-reload");
43
+ } catch {}
44
+ console.log(chalk.default.green(" ✅ Systemd user service removed"));
45
+ } else if (platform === "win32") try {
46
+ await execAsync(`schtasks /end /tn "HyperClaw Gateway"`).catch(() => {});
47
+ await execAsync(`schtasks /delete /tn "HyperClaw Gateway" /f`);
48
+ console.log(chalk.default.green(" ✅ Task Scheduler entry removed"));
49
+ } catch (e) {
50
+ console.log(chalk.default.yellow(" ⚠ Could not remove task:"), e.message);
51
+ console.log(chalk.default.gray(" Run manually: schtasks /delete /tn \"HyperClaw Gateway\" /f"));
52
+ }
53
+ }
54
+ async start() {
55
+ const s = (0, ora.default)("🩸 Starting HyperClaw daemon...").start();
56
+ try {
57
+ const server = await require_server.startGateway({ daemonMode: true });
58
+ const port = server.getStatus().port;
59
+ await new Promise((r) => setTimeout(r, 400));
60
+ const reachable = await this.probeGateway(port);
61
+ const hcDir = getHCDir();
62
+ const pidFile = path.default.join(hcDir, "gateway.pid");
63
+ await fs_extra.default.ensureDir(hcDir);
64
+ await fs_extra.default.writeFile(pidFile, String(process.pid), "utf8");
65
+ if (reachable) s.succeed(`🩸 Daemon started — ws://127.0.0.1:${port}`);
66
+ else s.warn(`🩸 Daemon started (WebSocket probe pending) — ws://127.0.0.1:${port}`);
67
+ const shutdown = async () => {
68
+ const active = require_server.getActiveServer();
69
+ if (active) await active.stop();
70
+ try {
71
+ await fs_extra.default.remove(path.default.join(getHCDir(), "gateway.pid"));
72
+ } catch {}
73
+ process.exit(0);
74
+ };
75
+ process.on("SIGINT", shutdown);
76
+ process.on("SIGTERM", shutdown);
77
+ await new Promise(() => {});
78
+ } catch (e) {
79
+ s.fail(`Failed to start: ${e.message}`);
80
+ throw e;
81
+ }
82
+ }
83
+ async stop() {
84
+ const pidPath = path.default.join(getHCDir(), "gateway.pid");
85
+ if (!await fs_extra.default.pathExists(pidPath)) {
86
+ console.log(chalk.default.gray(" Gateway not running (no PID file)."));
87
+ console.log(chalk.default.gray(" Start it with: hyperclaw daemon start\n"));
88
+ return;
89
+ }
90
+ const s = (0, ora.default)("🩸 Stopping daemon...").start();
91
+ try {
92
+ const pid = parseInt(await fs_extra.default.readFile(pidPath, "utf8"), 10);
93
+ process.kill(pid, "SIGTERM");
94
+ await fs_extra.default.remove(pidPath);
95
+ s.succeed("🩸 Daemon stopped");
96
+ } catch (e) {
97
+ await fs_extra.default.remove(pidPath).catch(() => {});
98
+ if (e.code === "ESRCH") s.succeed("Gateway was not running");
99
+ else s.fail(`Stop failed: ${e.message}`);
100
+ }
101
+ }
102
+ async restart() {
103
+ await this.stop();
104
+ await new Promise((r) => setTimeout(r, 500));
105
+ await this.start();
106
+ }
107
+ async status() {
108
+ const pidPath = path.default.join(getHCDir(), "gateway.pid");
109
+ let pidAlive = false;
110
+ let pid = null;
111
+ let port = 18789;
112
+ if (await fs_extra.default.pathExists(pidPath)) try {
113
+ pid = parseInt(await fs_extra.default.readFile(pidPath, "utf8"), 10);
114
+ process.kill(pid, 0);
115
+ pidAlive = true;
116
+ } catch (e) {
117
+ if (process.env.DEBUG) console.error("[daemon] status pid check:", e?.message);
118
+ await fs_extra.default.remove(pidPath).catch(() => {});
119
+ }
120
+ try {
121
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
122
+ if (cfg?.gateway?.port) port = cfg.gateway.port;
123
+ } catch (e) {
124
+ if (process.env.DEBUG) console.error("[daemon] status config read:", e?.message);
125
+ }
126
+ const portOpen = await this.isPortOpen(port);
127
+ const running = pidAlive && portOpen;
128
+ const c = chalk.default.hex("#06b6d4");
129
+ console.log(c("\n 🩸 HyperClaw Daemon Status"));
130
+ console.log(running ? c(" 🩸 ● Running") + chalk.default.gray(" — gateway reachable") : pidAlive ? chalk.default.yellow(" 🩸 ● Process alive") + chalk.default.gray(" — port unreachable (may be starting or stuck)") : chalk.default.gray(" ○ Stopped"));
131
+ if (pid) console.log(chalk.default.gray(` PID: ${pid}`));
132
+ console.log(chalk.default.gray(` Port: ${port}`));
133
+ console.log(chalk.default.gray(" Runtime: node"));
134
+ console.log();
135
+ }
136
+ async isPortOpen(port) {
137
+ const net = await import("net");
138
+ return new Promise((resolve) => {
139
+ const s = new net.Socket();
140
+ s.setTimeout(500);
141
+ s.on("connect", () => {
142
+ s.destroy();
143
+ resolve(true);
144
+ });
145
+ s.on("error", () => resolve(false));
146
+ s.on("timeout", () => resolve(false));
147
+ try {
148
+ s.connect(port, "127.0.0.1");
149
+ } catch {
150
+ resolve(false);
151
+ }
152
+ });
153
+ }
154
+ probeGateway(port) {
155
+ return new Promise((resolve) => {
156
+ try {
157
+ const ws$1 = new ws.WebSocket(`ws://127.0.0.1:${port}`);
158
+ const t = setTimeout(() => {
159
+ try {
160
+ ws$1.terminate();
161
+ } catch {}
162
+ resolve(false);
163
+ }, 2500);
164
+ ws$1.on("open", () => {
165
+ clearTimeout(t);
166
+ ws$1.close();
167
+ resolve(true);
168
+ });
169
+ ws$1.on("error", () => {
170
+ clearTimeout(t);
171
+ resolve(false);
172
+ });
173
+ } catch {
174
+ resolve(false);
175
+ }
176
+ });
177
+ }
178
+ async logs() {
179
+ const logPath = path.default.join(getHCDir(), "logs", "gateway.log");
180
+ if (await fs_extra.default.pathExists(logPath)) {
181
+ const content = await fs_extra.default.readFile(logPath, "utf8");
182
+ const lines = content.split("\n").slice(-80);
183
+ console.log("\n" + chalk.default.gray(` Last 80 lines of ${logPath}:\n`));
184
+ console.log(lines.join("\n"));
185
+ } else {
186
+ let port = 18789;
187
+ try {
188
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
189
+ if (cfg?.gateway?.port) port = cfg.gateway.port;
190
+ } catch (e) {
191
+ if (process.env.DEBUG) console.error("[daemon] logs config read:", e?.message);
192
+ }
193
+ console.log(chalk.default.yellow(`\n No log file found at ${logPath}`));
194
+ console.log(chalk.default.gray(` Start the daemon first: hyperclaw daemon start`));
195
+ console.log(chalk.default.gray(` Logs will appear at ${logPath}\n`));
196
+ }
197
+ }
198
+ async handle(action) {
199
+ const actions = {
200
+ start: () => this.start(),
201
+ stop: () => this.stop(),
202
+ restart: () => this.restart(),
203
+ status: () => this.status(),
204
+ logs: () => this.logs(),
205
+ install: () => this.install(),
206
+ uninstall: () => this.uninstall()
207
+ };
208
+ const fn = actions[action];
209
+ if (fn) await fn();
210
+ else console.log(chalk.default.red(`Unknown action: ${action}`) + chalk.default.gray("\n 🩸 Use: start, stop, restart, status, logs, install, uninstall"));
211
+ }
212
+ async installLinux() {
213
+ const home = os.default.homedir();
214
+ const hcDir = getHCDir();
215
+ const pathEnv = process.env.PATH || "/usr/local/bin:/usr/bin:/bin";
216
+ const hcPath = (await execAsync("which hyperclaw").catch(() => ({ stdout: "/usr/local/bin/hyperclaw" }))).stdout.trim();
217
+ const unit = `[Unit]
218
+ Description=HyperClaw AI Gateway
219
+ After=network.target
220
+ # For full desktop access (screenshots, xdg-open): run in graphical session
221
+ # systemctl --user runs in user context with session when logged in
222
+
223
+ [Service]
224
+ Type=simple
225
+ ExecStart=${hcPath} daemon start
226
+ Restart=always
227
+ RestartSec=3
228
+ Environment=NODE_ENV=production
229
+ Environment=HOME=${home}
230
+ Environment=PATH=${pathEnv}
231
+ ${process.env.HYPERCLAW_STATE_DIR ? `Environment=HYPERCLAW_STATE_DIR=${process.env.HYPERCLAW_STATE_DIR}\n` : ""}${process.env.HYPERCLAW_CONFIG_PATH ? `Environment=HYPERCLAW_CONFIG_PATH=${process.env.HYPERCLAW_CONFIG_PATH}\n` : ""}# Load .env from HyperClaw home if exists
232
+ EnvironmentFile=-${path.default.join(hcDir, ".env")}
233
+
234
+ [Install]
235
+ WantedBy=default.target
236
+ `;
237
+ const userSystemdDir = path.default.join(os.default.homedir(), ".config", "systemd", "user");
238
+ const unitFile = path.default.join(userSystemdDir, "hyperclaw.service");
239
+ try {
240
+ await fs_extra.default.ensureDir(userSystemdDir);
241
+ await fs_extra.default.writeFile(unitFile, unit);
242
+ const username = os.default.userInfo().username;
243
+ try {
244
+ await execAsync(`loginctl enable-linger ${username}`);
245
+ } catch (lingerErr) {
246
+ console.log(chalk.default.yellow(" ⚠ Could not enable lingering (service may stop at logout):"));
247
+ console.log(chalk.default.gray(` ${lingerErr?.message?.trim() || "unknown error"}`));
248
+ console.log(chalk.default.gray(" Run manually as root: loginctl enable-linger " + username));
249
+ }
250
+ try {
251
+ await execAsync("systemctl --user daemon-reload");
252
+ } catch {}
253
+ try {
254
+ await execAsync("systemctl --user enable hyperclaw.service");
255
+ } catch {}
256
+ console.log(chalk.default.red(" 🩸 Systemd user service installed"));
257
+ console.log(chalk.default.gray(" ℹ Lingering enables the service to run without being logged in"));
258
+ console.log(chalk.default.gray(` Unit: ${unitFile}`));
259
+ } catch (err) {
260
+ console.log(chalk.default.yellow(" ⚠ Could not install systemd service — run manually:"));
261
+ console.log(chalk.default.gray(` sudo cp hyperclaw.service /etc/systemd/system/`));
262
+ }
263
+ }
264
+ async installMacOS() {
265
+ const home = os.default.homedir();
266
+ const hcDir = getHCDir();
267
+ const plistPath = path.default.join(home, "Library/LaunchAgents/ai.hyperclaw.gateway.plist");
268
+ const nodePath = (await execAsync("which node").catch(() => ({ stdout: "/usr/local/bin/node" }))).stdout.trim();
269
+ const hcPath = (await execAsync("which hyperclaw").catch(() => ({ stdout: "/usr/local/bin/hyperclaw" }))).stdout.trim();
270
+ const pathEnv = process.env.PATH || "/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin";
271
+ const pathEscaped = pathEnv.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
272
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
273
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
274
+ <plist version="1.0">
275
+ <dict>
276
+ <key>Label</key>
277
+ <string>ai.hyperclaw.gateway</string>
278
+ <key>ProgramArguments</key>
279
+ <array>
280
+ <string>${nodePath}</string>
281
+ <string>${hcPath}</string>
282
+ <string>daemon</string>
283
+ <string>start</string>
284
+ </array>
285
+ <key>RunAtLoad</key>
286
+ <true/>
287
+ <key>KeepAlive</key>
288
+ <true/>
289
+ <key>StandardOutPath</key>
290
+ <string>${hcDir}/logs/gateway.log</string>
291
+ <key>StandardErrorPath</key>
292
+ <string>${hcDir}/logs/gateway.err</string>
293
+ <key>EnvironmentVariables</key>
294
+ <dict>
295
+ <key>PATH</key>
296
+ <string>${pathEscaped}</string>
297
+ <key>HOME</key>
298
+ <string>${home}</string>${process.env.HYPERCLAW_STATE_DIR ? `
299
+ <key>HYPERCLAW_STATE_DIR</key>
300
+ <string>${process.env.HYPERCLAW_STATE_DIR.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;")}</string>` : ""}${process.env.HYPERCLAW_CONFIG_PATH ? `
301
+ <key>HYPERCLAW_CONFIG_PATH</key>
302
+ <string>${process.env.HYPERCLAW_CONFIG_PATH.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;")}</string>` : ""}
303
+ </dict>
304
+ </dict>
305
+ </plist>`;
306
+ await fs_extra.default.ensureDir(path.default.dirname(plistPath));
307
+ await fs_extra.default.writeFile(plistPath, plist);
308
+ try {
309
+ await execAsync(`launchctl load ${plistPath}`);
310
+ } catch {}
311
+ console.log(chalk.default.red(" 🩸 LaunchAgent installed"));
312
+ console.log(chalk.default.gray(` Plist: ${plistPath}`));
313
+ }
314
+ async installWindows() {
315
+ const home = os.default.homedir();
316
+ const hcDir = getHCDir();
317
+ const nodePath = process.execPath;
318
+ const flatScript = path.default.resolve(__dirname, "run-main.js");
319
+ const distScript = path.default.resolve(__dirname, "../../dist/run-main.js");
320
+ const mainScript = await fs_extra.default.pathExists(flatScript) ? flatScript : await fs_extra.default.pathExists(distScript) ? distScript : flatScript;
321
+ const logDir = path.default.join(hcDir, "logs");
322
+ const logFile = path.default.join(logDir, "gateway.log");
323
+ const taskXmlPath = path.default.join(hcDir, "_task.xml");
324
+ const launcherPath = path.default.join(hcDir, "_daemon_launcher.cmd");
325
+ const taskName = "HyperClaw Gateway";
326
+ await fs_extra.default.ensureDir(logDir);
327
+ const stateDir = process.env.HYPERCLAW_STATE_DIR;
328
+ const configPath = process.env.HYPERCLAW_CONFIG_PATH;
329
+ const cmdLines = ["@echo off"];
330
+ if (stateDir) cmdLines.push(`set HYPERCLAW_STATE_DIR=${stateDir.replace(/%/g, "%%")}`);
331
+ if (configPath) cmdLines.push(`set HYPERCLAW_CONFIG_PATH=${configPath.replace(/%/g, "%%")}`);
332
+ cmdLines.push(`"${nodePath.replace(/"/g, "\"\"")}" "${mainScript.replace(/"/g, "\"\"")}" daemon start`);
333
+ await fs_extra.default.writeFile(launcherPath, cmdLines.join("\r\n"), "utf8");
334
+ const username = os.default.userInfo().username;
335
+ const userdomain = process.env.USERDOMAIN || os.default.hostname();
336
+ const userId = `${userdomain}\\${username}`;
337
+ const xmlEsc = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
338
+ const taskXml = `<?xml version="1.0" encoding="UTF-16"?>
339
+ <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
340
+ <RegistrationInfo>
341
+ <Description>HyperClaw AI Gateway — auto-start on logon</Description>
342
+ </RegistrationInfo>
343
+ <Triggers>
344
+ <LogonTrigger>
345
+ <Enabled>true</Enabled>
346
+ <UserId>${xmlEsc(userId)}</UserId>
347
+ <Delay>PT30S</Delay>
348
+ </LogonTrigger>
349
+ </Triggers>
350
+ <Principals>
351
+ <Principal id="Author">
352
+ <UserId>${xmlEsc(userId)}</UserId>
353
+ <LogonType>InteractiveToken</LogonType>
354
+ <RunLevel>LeastPrivilege</RunLevel>
355
+ </Principal>
356
+ </Principals>
357
+ <Settings>
358
+ <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
359
+ <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
360
+ <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
361
+ <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
362
+ <Priority>7</Priority>
363
+ <Hidden>true</Hidden>
364
+ </Settings>
365
+ <Actions Context="Author">
366
+ <Exec>
367
+ <Command>${xmlEsc(launcherPath)}</Command>
368
+ <Arguments></Arguments>
369
+ <WorkingDirectory>${xmlEsc(home)}</WorkingDirectory>
370
+ </Exec>
371
+ </Actions>
372
+ </Task>`;
373
+ const buf = Buffer.from("" + taskXml, "utf16le");
374
+ await fs_extra.default.writeFile(taskXmlPath, buf);
375
+ try {
376
+ await execFileAsync("schtasks", [
377
+ "/delete",
378
+ "/tn",
379
+ taskName,
380
+ "/f"
381
+ ]).catch(() => {});
382
+ await execFileAsync("schtasks", [
383
+ "/create",
384
+ "/tn",
385
+ taskName,
386
+ "/xml",
387
+ taskXmlPath,
388
+ "/f"
389
+ ]);
390
+ await fs_extra.default.remove(taskXmlPath).catch(() => {});
391
+ await execFileAsync("schtasks", [
392
+ "/run",
393
+ "/tn",
394
+ taskName
395
+ ]).catch(() => {});
396
+ console.log(chalk.default.green(" ✅ Task Scheduler entry created — starts on every logon"));
397
+ console.log(chalk.default.gray(` User: ${userId}`));
398
+ console.log(chalk.default.gray(` Node: ${nodePath}`));
399
+ console.log(chalk.default.gray(` Script: ${mainScript}`));
400
+ console.log(chalk.default.gray(` Log: ${logFile}`));
401
+ console.log(chalk.default.gray(` Manage: Task Scheduler → Task Scheduler Library → "${taskName}"`));
402
+ console.log(chalk.default.gray(` Remove: schtasks /delete /tn "${taskName}" /f`));
403
+ } catch (e) {
404
+ await fs_extra.default.remove(taskXmlPath).catch(() => {});
405
+ console.log(chalk.default.yellow("\n ⚠ Could not create Task Scheduler entry automatically"));
406
+ console.log(chalk.default.gray(" Run in PowerShell (no admin needed):"));
407
+ console.log(chalk.default.cyan(` schtasks /create /tn "${taskName}" /tr "\\"${nodePath}\\" \\"${mainScript}\\" daemon start" /sc onlogon /f`));
408
+ console.log(chalk.default.gray("\n Or start manually (runs until reboot):"));
409
+ console.log(chalk.default.cyan(" hyperclaw daemon start"));
410
+ console.log(chalk.default.gray(`\n Error: ${e.message}`));
411
+ }
412
+ }
413
+ };
414
+
415
+ //#endregion
416
+ Object.defineProperty(exports, 'DaemonManager', {
417
+ enumerable: true,
418
+ get: function () {
419
+ return DaemonManager;
420
+ }
421
+ });
@@ -0,0 +1,7 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ require('./paths-AIyBxIzm.js');
3
+ require('./paths-DPovhojT.js');
4
+ require('./server-O4Zv8s74.js');
5
+ const require_daemon = require('./daemon-Bi0rcsh5.js');
6
+
7
+ exports.DaemonManager = require_daemon.DaemonManager;
@@ -0,0 +1,7 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ require('./paths-AIyBxIzm.js');
3
+ require('./src-DjTtmSRg.js');
4
+ const require_engine = require('./engine-C1osvhmq.js');
5
+
6
+ require_engine.init_engine();
7
+ exports.runAgentEngine = require_engine.runAgentEngine;