@sequence0/blockclaw 2.0.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/README.md +97 -0
- package/dist/agent/binary.d.ts +15 -0
- package/dist/agent/binary.d.ts.map +1 -0
- package/dist/agent/binary.js +172 -0
- package/dist/agent/binary.js.map +1 -0
- package/dist/agent/chains.d.ts +26 -0
- package/dist/agent/chains.d.ts.map +1 -0
- package/dist/agent/chains.js +123 -0
- package/dist/agent/chains.js.map +1 -0
- package/dist/agent/client.d.ts +484 -0
- package/dist/agent/client.d.ts.map +1 -0
- package/dist/agent/client.js +448 -0
- package/dist/agent/client.js.map +1 -0
- package/dist/agent/config.d.ts +75 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +133 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/process.d.ts +36 -0
- package/dist/agent/process.d.ts.map +1 -0
- package/dist/agent/process.js +208 -0
- package/dist/agent/process.js.map +1 -0
- package/dist/agent/wallet.d.ts +43 -0
- package/dist/agent/wallet.d.ts.map +1 -0
- package/dist/agent/wallet.js +146 -0
- package/dist/agent/wallet.js.map +1 -0
- package/dist/ai/brain.d.ts +21 -0
- package/dist/ai/brain.d.ts.map +1 -0
- package/dist/ai/brain.js +117 -0
- package/dist/ai/brain.js.map +1 -0
- package/dist/ai/prompts.d.ts +15 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +67 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/rules.d.ts +19 -0
- package/dist/ai/rules.d.ts.map +1 -0
- package/dist/ai/rules.js +143 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/core/detector.d.ts +16 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +90 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/healer.d.ts +62 -0
- package/dist/core/healer.d.ts.map +1 -0
- package/dist/core/healer.js +355 -0
- package/dist/core/healer.js.map +1 -0
- package/dist/core/heartbeat.d.ts +67 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +426 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/memory.d.ts +57 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +149 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/updater.d.ts +16 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +107 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/commands/ask.d.ts +3 -0
- package/dist/interface/commands/ask.d.ts.map +1 -0
- package/dist/interface/commands/ask.js +39 -0
- package/dist/interface/commands/ask.js.map +1 -0
- package/dist/interface/commands/backup.d.ts +3 -0
- package/dist/interface/commands/backup.d.ts.map +1 -0
- package/dist/interface/commands/backup.js +576 -0
- package/dist/interface/commands/backup.js.map +1 -0
- package/dist/interface/commands/config.d.ts +3 -0
- package/dist/interface/commands/config.d.ts.map +1 -0
- package/dist/interface/commands/config.js +107 -0
- package/dist/interface/commands/config.js.map +1 -0
- package/dist/interface/commands/daemon.d.ts +3 -0
- package/dist/interface/commands/daemon.d.ts.map +1 -0
- package/dist/interface/commands/daemon.js +162 -0
- package/dist/interface/commands/daemon.js.map +1 -0
- package/dist/interface/commands/doctor.d.ts +3 -0
- package/dist/interface/commands/doctor.d.ts.map +1 -0
- package/dist/interface/commands/doctor.js +143 -0
- package/dist/interface/commands/doctor.js.map +1 -0
- package/dist/interface/commands/earnings.d.ts +3 -0
- package/dist/interface/commands/earnings.d.ts.map +1 -0
- package/dist/interface/commands/earnings.js +165 -0
- package/dist/interface/commands/earnings.js.map +1 -0
- package/dist/interface/commands/health.d.ts +3 -0
- package/dist/interface/commands/health.d.ts.map +1 -0
- package/dist/interface/commands/health.js +48 -0
- package/dist/interface/commands/health.js.map +1 -0
- package/dist/interface/commands/history.d.ts +3 -0
- package/dist/interface/commands/history.d.ts.map +1 -0
- package/dist/interface/commands/history.js +113 -0
- package/dist/interface/commands/history.js.map +1 -0
- package/dist/interface/commands/info.d.ts +3 -0
- package/dist/interface/commands/info.d.ts.map +1 -0
- package/dist/interface/commands/info.js +82 -0
- package/dist/interface/commands/info.js.map +1 -0
- package/dist/interface/commands/logs.d.ts +3 -0
- package/dist/interface/commands/logs.d.ts.map +1 -0
- package/dist/interface/commands/logs.js +98 -0
- package/dist/interface/commands/logs.js.map +1 -0
- package/dist/interface/commands/menu.d.ts +4 -0
- package/dist/interface/commands/menu.d.ts.map +1 -0
- package/dist/interface/commands/menu.js +156 -0
- package/dist/interface/commands/menu.js.map +1 -0
- package/dist/interface/commands/receive.d.ts +3 -0
- package/dist/interface/commands/receive.d.ts.map +1 -0
- package/dist/interface/commands/receive.js +81 -0
- package/dist/interface/commands/receive.js.map +1 -0
- package/dist/interface/commands/register.d.ts +3 -0
- package/dist/interface/commands/register.d.ts.map +1 -0
- package/dist/interface/commands/register.js +231 -0
- package/dist/interface/commands/register.js.map +1 -0
- package/dist/interface/commands/restart.d.ts +3 -0
- package/dist/interface/commands/restart.d.ts.map +1 -0
- package/dist/interface/commands/restart.js +154 -0
- package/dist/interface/commands/restart.js.map +1 -0
- package/dist/interface/commands/send.d.ts +3 -0
- package/dist/interface/commands/send.d.ts.map +1 -0
- package/dist/interface/commands/send.js +108 -0
- package/dist/interface/commands/send.js.map +1 -0
- package/dist/interface/commands/service.d.ts +3 -0
- package/dist/interface/commands/service.d.ts.map +1 -0
- package/dist/interface/commands/service.js +474 -0
- package/dist/interface/commands/service.js.map +1 -0
- package/dist/interface/commands/setup.d.ts +5 -0
- package/dist/interface/commands/setup.d.ts.map +1 -0
- package/dist/interface/commands/setup.js +410 -0
- package/dist/interface/commands/setup.js.map +1 -0
- package/dist/interface/commands/start.d.ts +3 -0
- package/dist/interface/commands/start.d.ts.map +1 -0
- package/dist/interface/commands/start.js +171 -0
- package/dist/interface/commands/start.js.map +1 -0
- package/dist/interface/commands/status.d.ts +3 -0
- package/dist/interface/commands/status.d.ts.map +1 -0
- package/dist/interface/commands/status.js +77 -0
- package/dist/interface/commands/status.js.map +1 -0
- package/dist/interface/commands/stop.d.ts +3 -0
- package/dist/interface/commands/stop.d.ts.map +1 -0
- package/dist/interface/commands/stop.js +62 -0
- package/dist/interface/commands/stop.js.map +1 -0
- package/dist/interface/commands/update.d.ts +3 -0
- package/dist/interface/commands/update.d.ts.map +1 -0
- package/dist/interface/commands/update.js +53 -0
- package/dist/interface/commands/update.js.map +1 -0
- package/dist/interface/commands/wallet.d.ts +3 -0
- package/dist/interface/commands/wallet.d.ts.map +1 -0
- package/dist/interface/commands/wallet.js +446 -0
- package/dist/interface/commands/wallet.js.map +1 -0
- package/dist/interface/commands/webhook.d.ts +3 -0
- package/dist/interface/commands/webhook.d.ts.map +1 -0
- package/dist/interface/commands/webhook.js +99 -0
- package/dist/interface/commands/webhook.js.map +1 -0
- package/dist/interface/commands/withdraw.d.ts +3 -0
- package/dist/interface/commands/withdraw.d.ts.map +1 -0
- package/dist/interface/commands/withdraw.js +261 -0
- package/dist/interface/commands/withdraw.js.map +1 -0
- package/dist/interface/interactive.d.ts +43 -0
- package/dist/interface/interactive.d.ts.map +1 -0
- package/dist/interface/interactive.js +276 -0
- package/dist/interface/interactive.js.map +1 -0
- package/dist/interface/logo.d.ts +2 -0
- package/dist/interface/logo.d.ts.map +1 -0
- package/dist/interface/logo.js +21 -0
- package/dist/interface/logo.js.map +1 -0
- package/dist/interface/webhooks.d.ts +19 -0
- package/dist/interface/webhooks.d.ts.map +1 -0
- package/dist/interface/webhooks.js +172 -0
- package/dist/interface/webhooks.js.map +1 -0
- package/dist/utils/format.d.ts +19 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +107 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +35 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/platform.d.ts +26 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +72 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+epC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD/C"}
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { execSync } from "node:child_process";
|
|
7
|
+
import { BLOCKCLAW_DIR, SEQUENCE0_DIR } from "../../utils/paths.js";
|
|
8
|
+
import { getSystemInfo } from "../../utils/platform.js";
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Constants
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const HOME = os.homedir();
|
|
13
|
+
const SYSTEMD_DIR = path.join(HOME, ".config", "systemd", "user");
|
|
14
|
+
const SYSTEMD_UNIT = path.join(SYSTEMD_DIR, "blockclaw.service");
|
|
15
|
+
const LAUNCHD_DIR = path.join(HOME, "Library", "LaunchAgents");
|
|
16
|
+
const LAUNCHD_PLIST = path.join(LAUNCHD_DIR, "network.sequence0.blockclaw.plist");
|
|
17
|
+
const SERVICE_LOG = path.join(BLOCKCLAW_DIR, "service.log");
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Service file templates
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function systemdUnit() {
|
|
22
|
+
return `[Unit]
|
|
23
|
+
Description=BlockClaw — Sequence0 Node Runner
|
|
24
|
+
After=network-online.target
|
|
25
|
+
Wants=network-online.target
|
|
26
|
+
|
|
27
|
+
[Service]
|
|
28
|
+
Type=simple
|
|
29
|
+
ExecStart=/usr/bin/env blockclaw daemon start
|
|
30
|
+
Restart=on-failure
|
|
31
|
+
RestartSec=10
|
|
32
|
+
Environment=NODE_ENV=production
|
|
33
|
+
|
|
34
|
+
[Install]
|
|
35
|
+
WantedBy=default.target
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
function launchdPlist() {
|
|
39
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
41
|
+
<plist version="1.0">
|
|
42
|
+
<dict>
|
|
43
|
+
<key>Label</key>
|
|
44
|
+
<string>network.sequence0.blockclaw</string>
|
|
45
|
+
<key>ProgramArguments</key>
|
|
46
|
+
<array>
|
|
47
|
+
<string>/usr/bin/env</string>
|
|
48
|
+
<string>blockclaw</string>
|
|
49
|
+
<string>daemon</string>
|
|
50
|
+
<string>start</string>
|
|
51
|
+
</array>
|
|
52
|
+
<key>RunAtLoad</key>
|
|
53
|
+
<true/>
|
|
54
|
+
<key>KeepAlive</key>
|
|
55
|
+
<true/>
|
|
56
|
+
<key>StandardOutPath</key>
|
|
57
|
+
<string>${SERVICE_LOG}</string>
|
|
58
|
+
<key>StandardErrorPath</key>
|
|
59
|
+
<string>${SERVICE_LOG}</string>
|
|
60
|
+
</dict>
|
|
61
|
+
</plist>
|
|
62
|
+
`;
|
|
63
|
+
}
|
|
64
|
+
function detectBackend() {
|
|
65
|
+
const platform = os.platform();
|
|
66
|
+
if (platform === "darwin")
|
|
67
|
+
return "launchd";
|
|
68
|
+
if (platform === "linux") {
|
|
69
|
+
// Verify systemd is available
|
|
70
|
+
try {
|
|
71
|
+
execSync("systemctl --user --version", { stdio: "ignore" });
|
|
72
|
+
return "systemd";
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
function isServiceInstalled(backend) {
|
|
81
|
+
if (backend === "systemd")
|
|
82
|
+
return fs.existsSync(SYSTEMD_UNIT);
|
|
83
|
+
if (backend === "launchd")
|
|
84
|
+
return fs.existsSync(LAUNCHD_PLIST);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
function isServiceRunning(backend) {
|
|
88
|
+
try {
|
|
89
|
+
if (backend === "systemd") {
|
|
90
|
+
const out = execSync("systemctl --user is-active blockclaw", {
|
|
91
|
+
encoding: "utf8",
|
|
92
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
93
|
+
}).trim();
|
|
94
|
+
return out === "active";
|
|
95
|
+
}
|
|
96
|
+
if (backend === "launchd") {
|
|
97
|
+
const out = execSync("launchctl list", {
|
|
98
|
+
encoding: "utf8",
|
|
99
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
100
|
+
});
|
|
101
|
+
return out.includes("network.sequence0.blockclaw");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Command failed — service is not running
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
function getServiceStatus(backend) {
|
|
110
|
+
try {
|
|
111
|
+
if (backend === "systemd") {
|
|
112
|
+
return execSync("systemctl --user status blockclaw --no-pager", {
|
|
113
|
+
encoding: "utf8",
|
|
114
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
115
|
+
}).trim();
|
|
116
|
+
}
|
|
117
|
+
if (backend === "launchd") {
|
|
118
|
+
const out = execSync("launchctl list", {
|
|
119
|
+
encoding: "utf8",
|
|
120
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
121
|
+
});
|
|
122
|
+
const line = out.split("\n").find((l) => l.includes("network.sequence0.blockclaw"));
|
|
123
|
+
if (line) {
|
|
124
|
+
const parts = line.trim().split(/\s+/);
|
|
125
|
+
const pid = parts[0] === "-" ? "not running" : `PID ${parts[0]}`;
|
|
126
|
+
const exitCode = parts[1];
|
|
127
|
+
return `network.sequence0.blockclaw ${pid} (last exit code: ${exitCode})`;
|
|
128
|
+
}
|
|
129
|
+
return "Service is loaded but no status line found";
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return err.message ?? "Unable to retrieve status";
|
|
134
|
+
}
|
|
135
|
+
return "Unknown";
|
|
136
|
+
}
|
|
137
|
+
function exec(cmd) {
|
|
138
|
+
execSync(cmd, { stdio: "inherit" });
|
|
139
|
+
}
|
|
140
|
+
function execQuiet(cmd) {
|
|
141
|
+
return execSync(cmd, { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
142
|
+
}
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
// Cancel guard
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
function guard(value) {
|
|
147
|
+
if (p.isCancel(value))
|
|
148
|
+
throw new Error("CANCEL");
|
|
149
|
+
return value;
|
|
150
|
+
}
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
// Install
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
async function installService() {
|
|
155
|
+
console.log();
|
|
156
|
+
p.intro(pc.bgCyan(pc.black(" blockclaw service install ")));
|
|
157
|
+
// Detect OS service manager
|
|
158
|
+
const backend = detectBackend();
|
|
159
|
+
if (!backend) {
|
|
160
|
+
const info = getSystemInfo();
|
|
161
|
+
p.cancel(`Your system (${info.platform}/${info.arch}) does not have a supported service manager.\n` +
|
|
162
|
+
" Supported: macOS (launchd), Linux (systemd).\n" +
|
|
163
|
+
' You can still run BlockClaw manually with "blockclaw daemon start".');
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
const friendlyName = backend === "launchd" ? "macOS (launchd)" : "Linux (systemd)";
|
|
167
|
+
// Check if already installed
|
|
168
|
+
if (isServiceInstalled(backend)) {
|
|
169
|
+
const running = isServiceRunning(backend);
|
|
170
|
+
p.note([
|
|
171
|
+
"BlockClaw is already installed as a background service.",
|
|
172
|
+
"",
|
|
173
|
+
` Status: ${running ? pc.green("running") : pc.yellow("stopped")}`,
|
|
174
|
+
` Type: ${friendlyName}`,
|
|
175
|
+
"",
|
|
176
|
+
running
|
|
177
|
+
? 'To reinstall, first run "blockclaw service uninstall".'
|
|
178
|
+
: 'To start it, run "blockclaw service status" or reinstall.',
|
|
179
|
+
].join("\n"), "Already Installed");
|
|
180
|
+
p.outro("No changes made.");
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Explain what we're about to do
|
|
184
|
+
const serviceFile = backend === "systemd" ? SYSTEMD_UNIT : LAUNCHD_PLIST;
|
|
185
|
+
p.note([
|
|
186
|
+
"This will set up BlockClaw to run automatically in the background.",
|
|
187
|
+
"Your node will:",
|
|
188
|
+
"",
|
|
189
|
+
` ${pc.green("1.")} Start when you log in`,
|
|
190
|
+
` ${pc.green("2.")} Restart if it crashes`,
|
|
191
|
+
` ${pc.green("3.")} Keep running after you close the terminal`,
|
|
192
|
+
"",
|
|
193
|
+
` Service type: ${pc.bold(friendlyName)}`,
|
|
194
|
+
` Config file: ${pc.dim(serviceFile)}`,
|
|
195
|
+
` Logs: ${pc.dim(SERVICE_LOG)}`,
|
|
196
|
+
].join("\n"), "Install Background Service");
|
|
197
|
+
const confirmed = guard(await p.confirm({
|
|
198
|
+
message: "Install BlockClaw as a background service?",
|
|
199
|
+
initialValue: true,
|
|
200
|
+
}));
|
|
201
|
+
if (!confirmed) {
|
|
202
|
+
p.cancel("Installation cancelled.");
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const spinner = p.spinner();
|
|
206
|
+
if (backend === "systemd") {
|
|
207
|
+
// -- systemd install --
|
|
208
|
+
spinner.start("Creating service file");
|
|
209
|
+
// Ensure directory exists
|
|
210
|
+
if (!fs.existsSync(SYSTEMD_DIR)) {
|
|
211
|
+
fs.mkdirSync(SYSTEMD_DIR, { recursive: true });
|
|
212
|
+
}
|
|
213
|
+
fs.writeFileSync(SYSTEMD_UNIT, systemdUnit(), "utf8");
|
|
214
|
+
spinner.stop(`Service file written to ${pc.dim(SYSTEMD_UNIT)}`);
|
|
215
|
+
// Reload, enable, start
|
|
216
|
+
spinner.start("Enabling and starting service");
|
|
217
|
+
try {
|
|
218
|
+
execQuiet("systemctl --user daemon-reload");
|
|
219
|
+
execQuiet("systemctl --user enable blockclaw");
|
|
220
|
+
execQuiet("systemctl --user start blockclaw");
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
spinner.stop(pc.red("Failed to start service"));
|
|
224
|
+
p.log.error(err.message);
|
|
225
|
+
p.log.info("The service file was written. You can start it manually:");
|
|
226
|
+
p.log.info(" systemctl --user daemon-reload && systemctl --user enable --now blockclaw");
|
|
227
|
+
p.outro("Service file installed but could not be started.");
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
spinner.stop("Service enabled and started");
|
|
231
|
+
// Enable linger so service survives logouts
|
|
232
|
+
spinner.start("Enabling login persistence");
|
|
233
|
+
try {
|
|
234
|
+
execQuiet(`loginctl enable-linger ${os.userInfo().username}`);
|
|
235
|
+
spinner.stop("Login persistence enabled (service runs even when logged out)");
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
spinner.stop(pc.yellow("Could not enable login persistence"));
|
|
239
|
+
p.log.warn("Your service may stop when you log out. To fix this, run:\n" +
|
|
240
|
+
` loginctl enable-linger ${os.userInfo().username}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// -- launchd install --
|
|
245
|
+
spinner.start("Creating service file");
|
|
246
|
+
// Ensure directories exist
|
|
247
|
+
if (!fs.existsSync(LAUNCHD_DIR)) {
|
|
248
|
+
fs.mkdirSync(LAUNCHD_DIR, { recursive: true });
|
|
249
|
+
}
|
|
250
|
+
if (!fs.existsSync(BLOCKCLAW_DIR)) {
|
|
251
|
+
fs.mkdirSync(BLOCKCLAW_DIR, { recursive: true });
|
|
252
|
+
}
|
|
253
|
+
fs.writeFileSync(LAUNCHD_PLIST, launchdPlist(), "utf8");
|
|
254
|
+
spinner.stop(`Service file written to ${pc.dim(LAUNCHD_PLIST)}`);
|
|
255
|
+
// Load the plist
|
|
256
|
+
spinner.start("Loading service");
|
|
257
|
+
try {
|
|
258
|
+
execQuiet(`launchctl load ${LAUNCHD_PLIST}`);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
spinner.stop(pc.red("Failed to load service"));
|
|
262
|
+
p.log.error(err.message);
|
|
263
|
+
p.log.info("The plist file was written. You can load it manually:");
|
|
264
|
+
p.log.info(` launchctl load ${LAUNCHD_PLIST}`);
|
|
265
|
+
p.outro("Service file installed but could not be loaded.");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
spinner.stop("Service loaded and started");
|
|
269
|
+
}
|
|
270
|
+
// Final summary
|
|
271
|
+
p.note([
|
|
272
|
+
`${pc.green("BlockClaw is now running as a background service.")}`,
|
|
273
|
+
"",
|
|
274
|
+
" It will start automatically on login and restart on failure.",
|
|
275
|
+
"",
|
|
276
|
+
` ${pc.dim("Check status:")} blockclaw service status`,
|
|
277
|
+
` ${pc.dim("View logs:")} blockclaw logs`,
|
|
278
|
+
` ${pc.dim("Uninstall:")} blockclaw service uninstall`,
|
|
279
|
+
].join("\n"), "Installed");
|
|
280
|
+
p.outro(`${pc.green("Done.")} Your node will keep running in the background.`);
|
|
281
|
+
}
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// Uninstall
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
async function uninstallService() {
|
|
286
|
+
console.log();
|
|
287
|
+
p.intro(pc.bgCyan(pc.black(" blockclaw service uninstall ")));
|
|
288
|
+
const backend = detectBackend();
|
|
289
|
+
if (!backend) {
|
|
290
|
+
p.cancel("No supported service manager found on this system.");
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
if (!isServiceInstalled(backend)) {
|
|
294
|
+
p.note("BlockClaw is not installed as a background service.\n" +
|
|
295
|
+
"Nothing to remove.", "Not Installed");
|
|
296
|
+
p.outro("No changes made.");
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const running = isServiceRunning(backend);
|
|
300
|
+
const friendlyName = backend === "launchd" ? "macOS (launchd)" : "Linux (systemd)";
|
|
301
|
+
p.note([
|
|
302
|
+
"This will remove BlockClaw as a background service.",
|
|
303
|
+
"",
|
|
304
|
+
` Service type: ${pc.bold(friendlyName)}`,
|
|
305
|
+
` Status: ${running ? pc.green("running") : pc.yellow("stopped")}`,
|
|
306
|
+
"",
|
|
307
|
+
"Your node data and configuration will NOT be deleted.",
|
|
308
|
+
"You can always reinstall with: blockclaw service install",
|
|
309
|
+
].join("\n"), "Remove Background Service");
|
|
310
|
+
const confirmed = guard(await p.confirm({
|
|
311
|
+
message: "Remove the background service?",
|
|
312
|
+
initialValue: false,
|
|
313
|
+
}));
|
|
314
|
+
if (!confirmed) {
|
|
315
|
+
p.cancel("Uninstall cancelled.");
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const spinner = p.spinner();
|
|
319
|
+
if (backend === "systemd") {
|
|
320
|
+
spinner.start("Stopping and removing service");
|
|
321
|
+
try {
|
|
322
|
+
try {
|
|
323
|
+
execQuiet("systemctl --user stop blockclaw");
|
|
324
|
+
}
|
|
325
|
+
catch { /* already stopped */ }
|
|
326
|
+
try {
|
|
327
|
+
execQuiet("systemctl --user disable blockclaw");
|
|
328
|
+
}
|
|
329
|
+
catch { /* already disabled */ }
|
|
330
|
+
if (fs.existsSync(SYSTEMD_UNIT))
|
|
331
|
+
fs.unlinkSync(SYSTEMD_UNIT);
|
|
332
|
+
try {
|
|
333
|
+
execQuiet("systemctl --user daemon-reload");
|
|
334
|
+
}
|
|
335
|
+
catch { /* best effort */ }
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
spinner.stop(pc.red("Error during uninstall"));
|
|
339
|
+
p.log.error(err.message);
|
|
340
|
+
p.outro("Some cleanup may have failed. Check manually with: systemctl --user status blockclaw");
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
spinner.stop("Service stopped and removed");
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
spinner.start("Unloading and removing service");
|
|
347
|
+
try {
|
|
348
|
+
try {
|
|
349
|
+
execQuiet(`launchctl unload ${LAUNCHD_PLIST}`);
|
|
350
|
+
}
|
|
351
|
+
catch { /* already unloaded */ }
|
|
352
|
+
if (fs.existsSync(LAUNCHD_PLIST))
|
|
353
|
+
fs.unlinkSync(LAUNCHD_PLIST);
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
spinner.stop(pc.red("Error during uninstall"));
|
|
357
|
+
p.log.error(err.message);
|
|
358
|
+
p.outro("Some cleanup may have failed. Check manually with: launchctl list | grep sequence0");
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
spinner.stop("Service unloaded and removed");
|
|
362
|
+
}
|
|
363
|
+
p.note([
|
|
364
|
+
"The background service has been removed.",
|
|
365
|
+
"",
|
|
366
|
+
" Your node data and config are still at:",
|
|
367
|
+
` ${pc.dim(SEQUENCE0_DIR)}`,
|
|
368
|
+
"",
|
|
369
|
+
' To run manually: blockclaw daemon start',
|
|
370
|
+
" To reinstall: blockclaw service install",
|
|
371
|
+
].join("\n"), "Removed");
|
|
372
|
+
p.outro(`${pc.green("Done.")} Background service removed.`);
|
|
373
|
+
}
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
// Status
|
|
376
|
+
// ---------------------------------------------------------------------------
|
|
377
|
+
async function showServiceStatus() {
|
|
378
|
+
console.log();
|
|
379
|
+
p.intro(pc.bgCyan(pc.black(" blockclaw service status ")));
|
|
380
|
+
const backend = detectBackend();
|
|
381
|
+
if (!backend) {
|
|
382
|
+
p.note("No supported service manager found on this system.\n" +
|
|
383
|
+
"Supported: macOS (launchd), Linux (systemd).", "Not Available");
|
|
384
|
+
p.outro("Use \"blockclaw daemon status\" to check if the daemon is running manually.");
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
const friendlyName = backend === "launchd" ? "macOS (launchd)" : "Linux (systemd)";
|
|
388
|
+
const installed = isServiceInstalled(backend);
|
|
389
|
+
const running = installed ? isServiceRunning(backend) : false;
|
|
390
|
+
const lines = [];
|
|
391
|
+
lines.push(` ${pc.dim("Service manager:")} ${friendlyName}`);
|
|
392
|
+
lines.push(` ${pc.dim("Installed:")} ${installed ? pc.green("yes") : pc.dim("no")}`);
|
|
393
|
+
if (installed) {
|
|
394
|
+
lines.push(` ${pc.dim("Running:")} ${running ? pc.green("yes") : pc.yellow("no")}`);
|
|
395
|
+
const configPath = backend === "systemd" ? SYSTEMD_UNIT : LAUNCHD_PLIST;
|
|
396
|
+
lines.push(` ${pc.dim("Config file:")} ${configPath}`);
|
|
397
|
+
lines.push(` ${pc.dim("Logs:")} ${SERVICE_LOG}`);
|
|
398
|
+
lines.push("");
|
|
399
|
+
lines.push(` ${pc.bold("Service details:")}`);
|
|
400
|
+
const status = getServiceStatus(backend);
|
|
401
|
+
for (const line of status.split("\n").slice(0, 15)) {
|
|
402
|
+
lines.push(` ${pc.dim(line)}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
lines.push("");
|
|
407
|
+
lines.push(" BlockClaw is not installed as a background service.");
|
|
408
|
+
lines.push(' Install with: blockclaw service install');
|
|
409
|
+
}
|
|
410
|
+
p.note(lines.join("\n"), "Service Status");
|
|
411
|
+
if (installed && !running) {
|
|
412
|
+
p.outro(`Service is installed but ${pc.yellow("not running")}. ` +
|
|
413
|
+
"Check logs or reinstall.");
|
|
414
|
+
}
|
|
415
|
+
else if (installed && running) {
|
|
416
|
+
p.outro(`${pc.green("Service is running.")} Your node is active in the background.`);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
p.outro("Run \"blockclaw service install\" to set up the background service.");
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// ---------------------------------------------------------------------------
|
|
423
|
+
// Registration
|
|
424
|
+
// ---------------------------------------------------------------------------
|
|
425
|
+
export function register(program) {
|
|
426
|
+
const service = program
|
|
427
|
+
.command("service")
|
|
428
|
+
.description("Manage BlockClaw as a persistent background service");
|
|
429
|
+
service
|
|
430
|
+
.command("install")
|
|
431
|
+
.description("Install BlockClaw as a background service that survives reboots")
|
|
432
|
+
.action(async () => {
|
|
433
|
+
try {
|
|
434
|
+
await installService();
|
|
435
|
+
}
|
|
436
|
+
catch (err) {
|
|
437
|
+
if (err instanceof Error && err.message === "CANCEL") {
|
|
438
|
+
p.cancel("Cancelled.");
|
|
439
|
+
process.exit(0);
|
|
440
|
+
}
|
|
441
|
+
p.cancel(err instanceof Error ? err.message : String(err));
|
|
442
|
+
process.exit(1);
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
service
|
|
446
|
+
.command("uninstall")
|
|
447
|
+
.description("Remove the background service (keeps your data)")
|
|
448
|
+
.action(async () => {
|
|
449
|
+
try {
|
|
450
|
+
await uninstallService();
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
if (err instanceof Error && err.message === "CANCEL") {
|
|
454
|
+
p.cancel("Cancelled.");
|
|
455
|
+
process.exit(0);
|
|
456
|
+
}
|
|
457
|
+
p.cancel(err instanceof Error ? err.message : String(err));
|
|
458
|
+
process.exit(1);
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
service
|
|
462
|
+
.command("status")
|
|
463
|
+
.description("Check if the background service is installed and running")
|
|
464
|
+
.action(async () => {
|
|
465
|
+
try {
|
|
466
|
+
await showServiceStatus();
|
|
467
|
+
}
|
|
468
|
+
catch (err) {
|
|
469
|
+
p.cancel(err instanceof Error ? err.message : String(err));
|
|
470
|
+
process.exit(1);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/interface/commands/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;AAElF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE5D,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;CAcR,CAAC;AACF,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;;;;;;;;;;;;;cAkBK,WAAW;;cAEX,WAAW;;;CAGxB,CAAC;AACF,CAAC;AAQD,SAAS,aAAa;IACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,8BAA8B;QAC9B,IAAI,CAAC;YACH,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAuB;IACjD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuB;IAC/C,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,sCAAsC,EAAE;gBAC3D,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,KAAK,QAAQ,CAAC;QAC1B,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,EAAE;gBACrC,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuB;IAC/C,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,8CAA8C,EAAE;gBAC9D,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,EAAE;gBACrC,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACpF,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,OAAO,gCAAgC,GAAG,sBAAsB,QAAQ,GAAG,CAAC;YAC9E,CAAC;YACD,OAAO,4CAA4C,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAQ,GAAa,CAAC,OAAO,IAAI,2BAA2B,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,SAAS,KAAK,CAAI,KAAiB;IACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,KAAK,UAAU,cAAc;IAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAE5D,4BAA4B;IAC5B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,CAAC,CAAC,MAAM,CACN,gBAAgB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,gDAAgD;YACxF,kDAAkD;YAClD,uEAAuE,CAC1E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAEnF,6BAA6B;IAC7B,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,IAAI,CACJ;YACE,yDAAyD;YACzD,EAAE;YACF,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACnE,aAAa,YAAY,EAAE;YAC3B,EAAE;YACF,OAAO;gBACL,CAAC,CAAC,wDAAwD;gBAC1D,CAAC,CAAC,2DAA2D;SAChE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,mBAAmB,CACpB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAEzE,CAAC,CAAC,IAAI,CACJ;QACE,oEAAoE;QACpE,iBAAiB;QACjB,EAAE;QACF,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB;QAC3C,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB;QAC3C,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C;QAC/D,EAAE;QACF,oBAAoB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAC3C,oBAAoB,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACzC,oBAAoB,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;KAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,4BAA4B,CAC7B,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CACrB,MAAM,CAAC,CAAC,OAAO,CAAC;QACd,OAAO,EAAE,4CAA4C;QACrD,YAAY,EAAE,IAAI;KACnB,CAAC,CACH,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAE5B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,wBAAwB;QACxB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEvC,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhE,wBAAwB;QACxB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC5C,SAAS,CAAC,mCAAmC,CAAC,CAAC;YAC/C,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC1F,CAAC,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAE5C,4CAA4C;QAC5C,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,SAAS,CAAC,0BAA0B,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,GAAG,CAAC,IAAI,CACR,6DAA6D;gBAC3D,4BAA4B,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEvC,2BAA2B;QAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEjE,iBAAiB;QACjB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,SAAS,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACpE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB;IAChB,CAAC,CAAC,IAAI,CACJ;QACE,GAAG,EAAE,CAAC,KAAK,CAAC,mDAAmD,CAAC,EAAE;QAClE,EAAE;QACF,gEAAgE;QAChE,EAAE;QACF,KAAK,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,6BAA6B;QACzD,KAAK,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,sBAAsB;QAC/C,KAAK,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,mCAAmC;KAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,WAAW,CACZ,CAAC;IAEF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;AACjF,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,KAAK,UAAU,gBAAgB;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,CAAC,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,CAAC,CAAC,IAAI,CACJ,uDAAuD;YACrD,oBAAoB,EACtB,eAAe,CAChB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAEnF,CAAC,CAAC,IAAI,CACJ;QACE,qDAAqD;QACrD,EAAE;QACF,oBAAoB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAC3C,oBAAoB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QAC1E,EAAE;QACF,uDAAuD;QACvD,0DAA0D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,2BAA2B,CAC5B,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CACrB,MAAM,CAAC,CAAC,OAAO,CAAC;QACd,OAAO,EAAE,gCAAgC;QACzC,YAAY,EAAE,KAAK;KACpB,CAAC,CACH,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAE5B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACrF,IAAI,CAAC;gBAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACzF,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,CAAC;gBAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,SAAS,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACxF,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC/C,CAAC;IAED,CAAC,CAAC,IAAI,CACJ;QACE,0CAA0C;QAC1C,EAAE;QACF,2CAA2C;QAC3C,KAAK,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QAC5B,EAAE;QACF,2CAA2C;QAC3C,8CAA8C;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,SAAS,CACV,CAAC;IAEF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,KAAK,UAAU,iBAAiB;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,CAAC,CAAC,IAAI,CACJ,sDAAsD;YACpD,8CAA8C,EAChD,eAAe,CAChB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACnF,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7F,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9F,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;QAE9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1D,CAAC;IAED,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAE3C,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CACL,4BAA4B,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;YACtD,0BAA0B,CAC7B,CAAC;IACJ,CAAC;SAAM,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,yCAAyC,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qDAAqD,CAAC,CAAC;IAEtE,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,cAAc,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACrD,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACrD,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,mFAAmF;AACnF,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAMD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB/C"}
|