jishushell 0.0.1 → 0.4.2-beta2

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 (139) hide show
  1. package/INSTALL-NOTICE +41 -0
  2. package/LICENSE +202 -0
  3. package/README.md +36 -0
  4. package/THIRD-PARTY-NOTICES +387 -0
  5. package/dist/auth.d.ts +6 -0
  6. package/dist/auth.js +88 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/cli.d.ts +2 -0
  9. package/dist/cli.js +290 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +24 -0
  12. package/dist/config.js +226 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/constants.d.ts +3 -0
  15. package/dist/constants.js +15 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/control.d.ts +44 -0
  18. package/dist/control.js +1359 -0
  19. package/dist/control.js.map +1 -0
  20. package/dist/crypto-shim.d.ts +1 -0
  21. package/dist/crypto-shim.js +2 -0
  22. package/dist/crypto-shim.js.map +1 -0
  23. package/dist/doctor.d.ts +46 -0
  24. package/dist/doctor.js +937 -0
  25. package/dist/doctor.js.map +1 -0
  26. package/dist/install.d.ts +27 -0
  27. package/dist/install.js +570 -0
  28. package/dist/install.js.map +1 -0
  29. package/dist/routes/auth.d.ts +4 -0
  30. package/dist/routes/auth.js +151 -0
  31. package/dist/routes/auth.js.map +1 -0
  32. package/dist/routes/instances.d.ts +2 -0
  33. package/dist/routes/instances.js +1303 -0
  34. package/dist/routes/instances.js.map +1 -0
  35. package/dist/routes/setup.d.ts +2 -0
  36. package/dist/routes/setup.js +139 -0
  37. package/dist/routes/setup.js.map +1 -0
  38. package/dist/routes/system.d.ts +2 -0
  39. package/dist/routes/system.js +102 -0
  40. package/dist/routes/system.js.map +1 -0
  41. package/dist/server.d.ts +6 -0
  42. package/dist/server.js +392 -0
  43. package/dist/server.js.map +1 -0
  44. package/dist/services/instance-manager.d.ts +67 -0
  45. package/dist/services/instance-manager.js +1319 -0
  46. package/dist/services/instance-manager.js.map +1 -0
  47. package/dist/services/llm-proxy/adapters.d.ts +3 -0
  48. package/dist/services/llm-proxy/adapters.js +309 -0
  49. package/dist/services/llm-proxy/adapters.js.map +1 -0
  50. package/dist/services/llm-proxy/circuit-breaker.d.ts +9 -0
  51. package/dist/services/llm-proxy/circuit-breaker.js +73 -0
  52. package/dist/services/llm-proxy/circuit-breaker.js.map +1 -0
  53. package/dist/services/llm-proxy/encryption.d.ts +6 -0
  54. package/dist/services/llm-proxy/encryption.js +61 -0
  55. package/dist/services/llm-proxy/encryption.js.map +1 -0
  56. package/dist/services/llm-proxy/index.d.ts +24 -0
  57. package/dist/services/llm-proxy/index.js +708 -0
  58. package/dist/services/llm-proxy/index.js.map +1 -0
  59. package/dist/services/llm-proxy/rate-limiter.d.ts +1 -0
  60. package/dist/services/llm-proxy/rate-limiter.js +39 -0
  61. package/dist/services/llm-proxy/rate-limiter.js.map +1 -0
  62. package/dist/services/llm-proxy/sse.d.ts +10 -0
  63. package/dist/services/llm-proxy/sse.js +378 -0
  64. package/dist/services/llm-proxy/sse.js.map +1 -0
  65. package/dist/services/llm-proxy/ssrf.d.ts +16 -0
  66. package/dist/services/llm-proxy/ssrf.js +185 -0
  67. package/dist/services/llm-proxy/ssrf.js.map +1 -0
  68. package/dist/services/llm-proxy/types.d.ts +52 -0
  69. package/dist/services/llm-proxy/types.js +2 -0
  70. package/dist/services/llm-proxy/types.js.map +1 -0
  71. package/dist/services/llm-proxy/usage.d.ts +12 -0
  72. package/dist/services/llm-proxy/usage.js +108 -0
  73. package/dist/services/llm-proxy/usage.js.map +1 -0
  74. package/dist/services/nomad-manager.d.ts +22 -0
  75. package/dist/services/nomad-manager.js +828 -0
  76. package/dist/services/nomad-manager.js.map +1 -0
  77. package/dist/services/plugin-installer.d.ts +22 -0
  78. package/dist/services/plugin-installer.js +102 -0
  79. package/dist/services/plugin-installer.js.map +1 -0
  80. package/dist/services/process-manager.d.ts +25 -0
  81. package/dist/services/process-manager.js +531 -0
  82. package/dist/services/process-manager.js.map +1 -0
  83. package/dist/services/setup-manager.d.ts +93 -0
  84. package/dist/services/setup-manager.js +1922 -0
  85. package/dist/services/setup-manager.js.map +1 -0
  86. package/dist/services/system-monitor.d.ts +1 -0
  87. package/dist/services/system-monitor.js +79 -0
  88. package/dist/services/system-monitor.js.map +1 -0
  89. package/dist/services/telemetry/activation.d.ts +12 -0
  90. package/dist/services/telemetry/activation.js +78 -0
  91. package/dist/services/telemetry/activation.js.map +1 -0
  92. package/dist/services/telemetry/client.d.ts +21 -0
  93. package/dist/services/telemetry/client.js +36 -0
  94. package/dist/services/telemetry/client.js.map +1 -0
  95. package/dist/services/telemetry/device-fingerprint.d.ts +18 -0
  96. package/dist/services/telemetry/device-fingerprint.js +123 -0
  97. package/dist/services/telemetry/device-fingerprint.js.map +1 -0
  98. package/dist/services/telemetry/heartbeat.d.ts +13 -0
  99. package/dist/services/telemetry/heartbeat.js +87 -0
  100. package/dist/services/telemetry/heartbeat.js.map +1 -0
  101. package/dist/services/telemetry/index.d.ts +3 -0
  102. package/dist/services/telemetry/index.js +4 -0
  103. package/dist/services/telemetry/index.js.map +1 -0
  104. package/dist/types.d.ts +51 -0
  105. package/dist/types.js +2 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/utils/safe-json.d.ts +2 -0
  108. package/dist/utils/safe-json.js +80 -0
  109. package/dist/utils/safe-json.js.map +1 -0
  110. package/dist/utils/ttl-cache.d.ts +29 -0
  111. package/dist/utils/ttl-cache.js +77 -0
  112. package/dist/utils/ttl-cache.js.map +1 -0
  113. package/install/jishu-install.sh +2920 -0
  114. package/install/jishu-uninstall.sh +811 -0
  115. package/install/post-install.sh +124 -0
  116. package/install/post-uninstall.sh +46 -0
  117. package/package.json +57 -8
  118. package/public/assets/Dashboard-Dxsq690N.js +1 -0
  119. package/public/assets/InitPassword-CslWYy8G.js +1 -0
  120. package/public/assets/InstanceDetail-DmEkMj-t.js +14 -0
  121. package/public/assets/Login-d45wtgVA.js +1 -0
  122. package/public/assets/NewInstance-Czp5-AJe.js +1 -0
  123. package/public/assets/Settings-BKMGck05.js +1 -0
  124. package/public/assets/Setup-D3rfLWjZ.js +1 -0
  125. package/public/assets/index-77Ug7feY.css +1 -0
  126. package/public/assets/index-DkDnIohs.js +16 -0
  127. package/public/assets/logo-black-theme-DywLAtFy.png +0 -0
  128. package/public/assets/logo-white-theme-DXffFAWw.png +0 -0
  129. package/public/assets/providers-lBSOjUWy.js +1 -0
  130. package/public/assets/usePolling-CqQ8hrNc.js +1 -0
  131. package/public/assets/vendor-i18n-Bvxxh8Di.js +9 -0
  132. package/public/assets/vendor-react-DONn7uBV.js +59 -0
  133. package/public/index.html +15 -0
  134. package/scripts/build-image.sh +55 -0
  135. package/scripts/run.sh +310 -0
  136. package/scripts/setup-pi.sh +80 -0
  137. package/scripts/start-feishu1.js +46 -0
  138. package/index.js +0 -0
  139. package/jishushell-0.0.1.tgz +0 -0
@@ -0,0 +1,570 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * JishuShell Interactive Installer
4
+ * Invoked via: npx jishushell install (or) jishushell install
5
+ *
6
+ * Steps:
7
+ * 1. Detect environment (OS, arch, sudo, ports)
8
+ * 2. Check what's already installed (idempotent)
9
+ * 3. Install Docker (if missing)
10
+ * 4. Install Nomad (if missing)
11
+ * 5. Install OpenClaw package + build Docker image
12
+ * 6. Write panel.json → mark setup complete
13
+ * 7. Register systemd / launchd services (best-effort)
14
+ * 8. Print success + access URL
15
+ */
16
+ import { execSync } from "child_process";
17
+ import { existsSync, readFileSync, appendFileSync } from "fs";
18
+ import { join } from "path";
19
+ import { networkInterfaces, homedir } from "os";
20
+ import readline from "readline";
21
+ import { getPanelConfig, savePanelConfig } from "./config.js";
22
+ import * as setup from "./services/setup-manager.js";
23
+ // ── ANSI colours (stripped when not a TTY) ───────────────────────────────────
24
+ const isTTY = process.stdout.isTTY ?? false;
25
+ const c = {
26
+ bold: (s) => isTTY ? `\x1b[1m${s}\x1b[0m` : s,
27
+ green: (s) => isTTY ? `\x1b[32m${s}\x1b[0m` : s,
28
+ yellow: (s) => isTTY ? `\x1b[33m${s}\x1b[0m` : s,
29
+ red: (s) => isTTY ? `\x1b[31m${s}\x1b[0m` : s,
30
+ blue: (s) => isTTY ? `\x1b[34m${s}\x1b[0m` : s,
31
+ cyan: (s) => isTTY ? `\x1b[36m${s}\x1b[0m` : s,
32
+ dim: (s) => isTTY ? `\x1b[2m${s}\x1b[0m` : s,
33
+ };
34
+ const tick = c.green("✓");
35
+ const cross = c.red("✗");
36
+ const info = c.cyan("·");
37
+ const warn = c.yellow("!");
38
+ function log(msg) { process.stdout.write(msg + "\n"); }
39
+ function step(msg) { log(`\n${c.bold(msg)}`); }
40
+ function ok(msg) { log(` ${tick} ${msg}`); }
41
+ function fail(msg) { log(` ${cross} ${c.red(msg)}`); }
42
+ function note(msg) { log(` ${info} ${msg}`); }
43
+ function warning(msg) { log(` ${warn} ${c.yellow(msg)}`); }
44
+ export function parseInstallArgs(args) {
45
+ const opts = {
46
+ yes: false,
47
+ port: 8090,
48
+ noService: false,
49
+ skipDocker: false,
50
+ skipNomad: false,
51
+ skipOpenclaw: false,
52
+ force: false,
53
+ dryRun: false,
54
+ };
55
+ for (let i = 0; i < args.length; i++) {
56
+ switch (args[i]) {
57
+ case "--yes":
58
+ case "-y":
59
+ opts.yes = true;
60
+ break;
61
+ case "--no-service":
62
+ opts.noService = true;
63
+ break;
64
+ case "--skip-docker":
65
+ opts.skipDocker = true;
66
+ break;
67
+ case "--skip-nomad":
68
+ opts.skipNomad = true;
69
+ break;
70
+ case "--skip-openclaw":
71
+ opts.skipOpenclaw = true;
72
+ break;
73
+ case "--force":
74
+ case "-f":
75
+ opts.force = true;
76
+ break;
77
+ case "--dry-run":
78
+ case "-n":
79
+ opts.dryRun = true;
80
+ opts.yes = true;
81
+ break;
82
+ case "--port":
83
+ if (args[i + 1]) {
84
+ const p = parseInt(args[++i], 10);
85
+ if (!isNaN(p) && p > 0 && p < 65536)
86
+ opts.port = p;
87
+ }
88
+ break;
89
+ }
90
+ }
91
+ // Non-interactive shell → auto-yes
92
+ if (!process.stdin.isTTY)
93
+ opts.yes = true;
94
+ return opts;
95
+ }
96
+ // ── Prompt helper ────────────────────────────────────────────────────────────
97
+ function ask(question) {
98
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
99
+ return new Promise((resolve) => {
100
+ rl.question(question, (answer) => {
101
+ rl.close();
102
+ resolve(answer.trim());
103
+ });
104
+ });
105
+ }
106
+ async function confirm(question, opts, defaultYes = true) {
107
+ if (opts.yes)
108
+ return true;
109
+ const hint = defaultYes ? "[Y/n]" : "[y/N]";
110
+ const answer = await ask(` ${c.yellow("?")} ${question} ${c.dim(hint)} `);
111
+ if (!answer)
112
+ return defaultYes;
113
+ return answer.toLowerCase().startsWith("y");
114
+ }
115
+ // ── Environment detection ────────────────────────────────────────────────────
116
+ function getLocalIP() {
117
+ try {
118
+ for (const list of Object.values(networkInterfaces())) {
119
+ for (const iface of list ?? []) {
120
+ if (!iface.internal && iface.family === "IPv4")
121
+ return iface.address;
122
+ }
123
+ }
124
+ }
125
+ catch { }
126
+ return "127.0.0.1";
127
+ }
128
+ function checkPort(port) {
129
+ try {
130
+ if (process.platform === "darwin") {
131
+ return execSync(`lsof -iTCP:${port} -sTCP:LISTEN -t 2>/dev/null`, { encoding: "utf-8", timeout: 3000 }).trim().length > 0;
132
+ }
133
+ return execSync(`ss -tlnp 2>/dev/null | grep ":${port} "`, { encoding: "utf-8", timeout: 3000 }).trim().length > 0;
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ function hasSudo() {
140
+ try {
141
+ execSync("sudo -n true 2>/dev/null", { timeout: 3000 });
142
+ return true;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ function dockerRunning() {
149
+ try {
150
+ execSync("docker info 2>/dev/null", { stdio: "ignore", timeout: 8000 });
151
+ return true;
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ }
157
+ // ── Banner ───────────────────────────────────────────────────────────────────
158
+ function printBanner(port) {
159
+ log("");
160
+ log(c.bold(c.blue(" ╔═══════════════════════════════════════╗")));
161
+ log(c.bold(c.blue(" ║ JishuShell Installer ║")));
162
+ log(c.bold(c.blue(" ╚═══════════════════════════════════════╝")));
163
+ log(` ${c.dim("Raspberry Pi server management panel")}`);
164
+ log(` ${c.dim(`port: ${port}`)}`);
165
+ log("");
166
+ }
167
+ function buildPlan(opts) {
168
+ const status = setup.getSetupStatus();
169
+ return [
170
+ {
171
+ label: "Docker",
172
+ installed: status.docker.installed && status.docker.running,
173
+ skip: opts.skipDocker,
174
+ },
175
+ {
176
+ label: "Nomad",
177
+ installed: status.nomad.installed,
178
+ skip: opts.skipNomad,
179
+ },
180
+ {
181
+ label: "OpenClaw",
182
+ installed: status.openclaw.installed,
183
+ skip: opts.skipOpenclaw,
184
+ },
185
+ {
186
+ label: "Systemd services",
187
+ installed: isSystemdInstalled(),
188
+ skip: opts.noService,
189
+ },
190
+ ];
191
+ }
192
+ function isSystemdInstalled() {
193
+ if (process.platform === "darwin") {
194
+ // Check launchd plist
195
+ const plist = join(process.env.HOME || "/tmp", "Library/LaunchAgents/com.jishushell.panel.plist");
196
+ return existsSync(plist);
197
+ }
198
+ try {
199
+ execSync("systemctl is-enabled jishushell 2>/dev/null", { stdio: "ignore", timeout: 3000 });
200
+ return true;
201
+ }
202
+ catch {
203
+ return false;
204
+ }
205
+ }
206
+ function printPlan(plan) {
207
+ log(c.bold(" Installation plan:"));
208
+ for (const item of plan) {
209
+ const state = item.skip
210
+ ? c.dim("skip")
211
+ : item.installed
212
+ ? c.green("already installed")
213
+ : c.yellow("will install");
214
+ log(` ${item.installed ? tick : "○"} ${item.label} ${c.dim("→")} ${state}`);
215
+ }
216
+ log("");
217
+ }
218
+ // ── Progress subscriber ───────────────────────────────────────────────────────
219
+ function streamTask(taskId) {
220
+ return new Promise((resolve) => {
221
+ let resolved = false;
222
+ // Declare unsub before subscribing to avoid TDZ error when
223
+ // subscribeTask replays cached events synchronously.
224
+ let unsub = null;
225
+ unsub = setup.subscribeTask(taskId, (event) => {
226
+ if (resolved)
227
+ return;
228
+ if (event.type === "log") {
229
+ note(c.dim(event.message));
230
+ }
231
+ else if (event.type === "progress") {
232
+ const bar = event.progress !== undefined
233
+ ? ` ${c.dim(`[${String(event.progress).padStart(3)}%]`)}`
234
+ : "";
235
+ process.stdout.write(`\r ${info} ${event.message}${bar} `);
236
+ }
237
+ else if (event.type === "done") {
238
+ process.stdout.write("\n");
239
+ ok(event.message);
240
+ resolved = true;
241
+ unsub?.();
242
+ resolve();
243
+ }
244
+ else if (event.type === "error") {
245
+ process.stdout.write("\n");
246
+ fail(event.message);
247
+ resolved = true;
248
+ unsub?.();
249
+ resolve();
250
+ }
251
+ });
252
+ // Task might already be done (no streaming events)
253
+ if (!resolved) {
254
+ const task = setup.getTask(taskId);
255
+ if (task && task.status !== "running") {
256
+ resolved = true;
257
+ unsub?.();
258
+ resolve();
259
+ }
260
+ }
261
+ });
262
+ }
263
+ // ── Already-installed check ───────────────────────────────────────────────────
264
+ function isAlreadyConfigured() {
265
+ const cfg = getPanelConfig();
266
+ return !!(cfg.service_manager);
267
+ }
268
+ async function dryStep(label, fn, dryRun) {
269
+ if (dryRun) {
270
+ note(c.dim(`[dry-run] would execute: ${label}`));
271
+ return;
272
+ }
273
+ await fn();
274
+ }
275
+ // ── Ensure ~/.jishushell/bin is in PATH for this session and future shells ────
276
+ function ensureNomadBinInPath() {
277
+ const binDir = join(homedir(), ".jishushell", "bin");
278
+ const marker = "# jishushell-bin-path";
279
+ const initLine = `export PATH="${binDir}:$PATH"`;
280
+ // Update current process PATH immediately
281
+ process.env.PATH = `${binDir}:${process.env.PATH ?? ""}`;
282
+ const rcFiles = [
283
+ join(homedir(), ".bashrc"),
284
+ join(homedir(), ".bash_profile"),
285
+ join(homedir(), ".zshrc"),
286
+ ];
287
+ for (const rc of rcFiles) {
288
+ try {
289
+ if (!existsSync(rc))
290
+ continue;
291
+ const content = readFileSync(rc, "utf-8");
292
+ if (content.includes(marker))
293
+ continue;
294
+ appendFileSync(rc, `\n${marker}\n${initLine}\n`);
295
+ note(c.dim(`Added ${binDir} to PATH in ${rc}`));
296
+ }
297
+ catch { }
298
+ }
299
+ }
300
+ // ── Main installer ───────────────────────────────────────────────────────────
301
+ export async function runInstall(opts) {
302
+ printBanner(opts.port);
303
+ if (opts.dryRun) {
304
+ log(c.yellow(c.bold(" DRY-RUN MODE — no changes will be made")));
305
+ log("");
306
+ }
307
+ // ── Check if already installed ──────────────────────────────────
308
+ if (isAlreadyConfigured() && !opts.force && !opts.dryRun) {
309
+ const ip = getLocalIP();
310
+ ok(`JishuShell is already installed!`);
311
+ note(`Panel → ${c.bold(`http://${ip}:${opts.port}`)}`);
312
+ log("");
313
+ const redo = await confirm("Re-run installation anyway?", opts, false);
314
+ if (!redo) {
315
+ log("");
316
+ note("Tip: run with --force to reinstall all components.");
317
+ process.exit(0);
318
+ }
319
+ log("");
320
+ }
321
+ // ── Environment checks ──────────────────────────────────────────
322
+ step("Checking environment…");
323
+ // sudo
324
+ if (!hasSudo()) {
325
+ warning("No passwordless sudo detected. Some steps may prompt for your password.");
326
+ if (!opts.dryRun) {
327
+ try {
328
+ log(c.dim(" Prompting for sudo password to cache credentials..."));
329
+ execSync("sudo -v", { stdio: "inherit" });
330
+ ok("sudo credentials cached");
331
+ }
332
+ catch {
333
+ warning("Failed to verify sudo credentials. Installation might fail or hang.");
334
+ }
335
+ }
336
+ }
337
+ else {
338
+ ok("sudo available");
339
+ }
340
+ // port conflict
341
+ if (!opts.dryRun && checkPort(opts.port)) {
342
+ warning(`Port ${opts.port} is already in use. Use --port <n> to pick another.`);
343
+ const cont = await confirm(`Continue anyway?`, opts, false);
344
+ if (!cont)
345
+ process.exit(1);
346
+ }
347
+ else if (!opts.dryRun) {
348
+ ok(`Port ${opts.port} is free`);
349
+ }
350
+ else {
351
+ note(c.dim(`[dry-run] port ${opts.port} check skipped`));
352
+ }
353
+ // Node version
354
+ const nodeMajor = parseInt(process.version.replace("v", "").split(".")[0], 10);
355
+ if (nodeMajor < 22) {
356
+ warning(`Node.js ${process.version} detected. JishuShell requires >=22.`);
357
+ const upgrade = await confirm("Upgrade Node.js via nvm now?", opts);
358
+ if (upgrade) {
359
+ step("Upgrading Node.js…");
360
+ const result = await setup.upgradeNode(22);
361
+ if (result.ok) {
362
+ ok(result.message);
363
+ warning("Node.js upgraded. Please restart your shell and re-run: npx jishushell install");
364
+ process.exit(0);
365
+ }
366
+ else {
367
+ fail(result.message);
368
+ if (result.error)
369
+ note(result.error);
370
+ process.exit(1);
371
+ }
372
+ }
373
+ else {
374
+ warning("Continuing with current Node.js — some features may not work.");
375
+ }
376
+ }
377
+ else {
378
+ ok(`Node.js ${process.version}`);
379
+ }
380
+ // ── Show plan ───────────────────────────────────────────────────
381
+ const plan = buildPlan(opts);
382
+ printPlan(plan);
383
+ const go = await confirm("Proceed with installation?", opts);
384
+ if (!go) {
385
+ log("Aborted.");
386
+ process.exit(0);
387
+ }
388
+ const errors = [];
389
+ // ── Docker ──────────────────────────────────────────────────────
390
+ if (!opts.skipDocker) {
391
+ step("Installing Docker…");
392
+ if (!opts.dryRun && dockerRunning()) {
393
+ ok("Docker already running");
394
+ }
395
+ else if (opts.dryRun) {
396
+ note(c.dim("[dry-run] would install Docker via get.docker.com"));
397
+ note(c.dim("[dry-run] would add current user to docker group"));
398
+ note(c.dim("[dry-run] would run: sudo systemctl enable --now docker"));
399
+ note(c.dim("[dry-run] would activate docker group via 'sg docker' for current session"));
400
+ }
401
+ else {
402
+ const result = await setup.installDocker();
403
+ if (result.taskId)
404
+ await streamTask(result.taskId);
405
+ if (result.ok) {
406
+ ok(result.message);
407
+ // If the user was just added to the docker group, it won't be active
408
+ // in the current shell until newgrp / re-login. Warn and advise.
409
+ if (!dockerRunning()) {
410
+ warning("Docker group not yet active in this session.");
411
+ note("OpenClaw image build will use 'sudo docker' for now.");
412
+ note("Run 'newgrp docker' or open a new terminal for future commands.");
413
+ }
414
+ }
415
+ else {
416
+ fail(result.message);
417
+ if (result.error)
418
+ note(result.error);
419
+ errors.push("Docker");
420
+ warning("Skipping Docker-dependent steps.");
421
+ opts.skipOpenclaw = true;
422
+ }
423
+ }
424
+ }
425
+ // ── Nomad ───────────────────────────────────────────────────────
426
+ if (!opts.skipNomad) {
427
+ step("Installing Nomad…");
428
+ if (opts.dryRun) {
429
+ note(c.dim(`[dry-run] would download nomad binary to ~/.jishushell/bin/nomad`));
430
+ note(c.dim(`[dry-run] would add ~/.jishushell/bin to PATH in ~/.bashrc`));
431
+ note(c.dim(`[dry-run] would write ~/.jishushell/nomad/nomad.hcl`));
432
+ note(c.dim(`[dry-run] would start nomad agent`));
433
+ }
434
+ else {
435
+ const nomadResult = await setup.installNomad();
436
+ if (nomadResult.taskId)
437
+ await streamTask(nomadResult.taskId);
438
+ if (nomadResult.ok) {
439
+ ok(nomadResult.message);
440
+ ensureNomadBinInPath();
441
+ note(c.dim("Run 'source ~/.bashrc' or open a new terminal to use the nomad command"));
442
+ // Start Nomad
443
+ step("Starting Nomad…");
444
+ const startResult = await setup.startNomad();
445
+ if (startResult.ok) {
446
+ ok(startResult.message);
447
+ }
448
+ else {
449
+ warning(startResult.message);
450
+ if (startResult.error)
451
+ note(startResult.error);
452
+ }
453
+ }
454
+ else {
455
+ fail(nomadResult.message);
456
+ if (nomadResult.error)
457
+ note(nomadResult.error);
458
+ errors.push("Nomad");
459
+ }
460
+ }
461
+ }
462
+ // ── OpenClaw ────────────────────────────────────────────────────
463
+ if (!opts.skipOpenclaw) {
464
+ step("Installing OpenClaw…");
465
+ if (opts.dryRun) {
466
+ note(c.dim(`[dry-run] would run: npm install -g --prefix ~/.jishushell/packages/openclaw openclaw@latest`));
467
+ note(c.dim(`[dry-run] would build Docker image: docker build -t openclaw:<version> ~/.jishushell/packages/openclaw/`));
468
+ }
469
+ else {
470
+ const clawResult = await setup.installOpenclaw();
471
+ if (clawResult.taskId)
472
+ await streamTask(clawResult.taskId);
473
+ if (clawResult.ok) {
474
+ ok(clawResult.message);
475
+ // Build Docker image
476
+ step("Building OpenClaw Docker image…");
477
+ note("This may take a few minutes on first run.");
478
+ const imgResult = await setup.buildOpenclawDockerImage();
479
+ if (imgResult.taskId)
480
+ await streamTask(imgResult.taskId);
481
+ if (imgResult.ok) {
482
+ ok(imgResult.message);
483
+ }
484
+ else {
485
+ warning(imgResult.message);
486
+ if (imgResult.error)
487
+ note(imgResult.error);
488
+ }
489
+ }
490
+ else {
491
+ fail(clawResult.message);
492
+ if (clawResult.error)
493
+ note(clawResult.error);
494
+ errors.push("OpenClaw");
495
+ }
496
+ }
497
+ }
498
+ // ── Nomad ACL bootstrap ─────────────────────────────────────────
499
+ // (internal, best-effort)
500
+ // ── panel.json ──────────────────────────────────────────────────
501
+ step("Writing configuration…");
502
+ if (opts.dryRun) {
503
+ note(c.dim(`[dry-run] would write ~/.jishushell/panel.json: { service_manager: "nomad", nomad_driver: "docker", panel_port: ${opts.port} }`));
504
+ }
505
+ else {
506
+ const cfg = getPanelConfig();
507
+ cfg.service_manager = "nomad";
508
+ cfg.nomad_driver = "docker";
509
+ cfg.panel_port = opts.port;
510
+ savePanelConfig(cfg);
511
+ ok("panel.json written");
512
+ }
513
+ // ── Systemd / launchd ───────────────────────────────────────────
514
+ if (!opts.noService) {
515
+ step("Registering system service…");
516
+ if (opts.dryRun) {
517
+ note(c.dim("[dry-run] would write /etc/systemd/system/jishushell.service"));
518
+ note(c.dim("[dry-run] would write /etc/systemd/system/nomad.service"));
519
+ note(c.dim("[dry-run] would run: sudo systemctl enable jishushell nomad"));
520
+ }
521
+ else {
522
+ setup.setServerPort(opts.port);
523
+ const svcResult = setup.installJishushellSystemd(opts.port);
524
+ if (svcResult.ok) {
525
+ ok(svcResult.message);
526
+ }
527
+ else {
528
+ warning(svcResult.message);
529
+ if (svcResult.error)
530
+ note(svcResult.error);
531
+ }
532
+ // Nomad systemd
533
+ const nomadSvcResult = setup.installNomadSystemd();
534
+ if (nomadSvcResult.ok) {
535
+ ok(nomadSvcResult.message);
536
+ }
537
+ else {
538
+ warning(nomadSvcResult.message);
539
+ }
540
+ }
541
+ }
542
+ // ── Summary ─────────────────────────────────────────────────────
543
+ const ip = getLocalIP();
544
+ log("");
545
+ if (errors.length === 0) {
546
+ log(c.bold(c.green(" ✓ Installation complete!")));
547
+ }
548
+ else {
549
+ log(c.bold(c.yellow(` ! Installation finished with errors: ${errors.join(", ")}`)));
550
+ }
551
+ log("");
552
+ log(` ${c.bold("Access panel:")} ${c.cyan(`http://${ip}:${opts.port}`)}`);
553
+ log(` ${c.bold("Local: ")} ${c.cyan(`http://localhost:${opts.port}`)}`);
554
+ log("");
555
+ log(` ${c.dim("On first visit, set up your password through the web wizard.")}`);
556
+ if (!opts.noService) {
557
+ log("");
558
+ log(` ${c.dim("To start JishuShell now:")} ${c.bold(`jishushell --port ${opts.port}`)}`);
559
+ log(` ${c.dim("Auto-start on boot is configured via systemd/launchd.")}`);
560
+ }
561
+ if (errors.length > 0) {
562
+ log("");
563
+ log(` ${c.dim("Re-run with")} ${c.bold("npx jishushell install --force")} ${c.dim("to retry failed steps.")}`);
564
+ }
565
+ log("");
566
+ if (errors.length > 0) {
567
+ process.exit(1);
568
+ }
569
+ }
570
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FastifyInstance } from "fastify";
2
+ export declare function authRoutes(app: FastifyInstance, opts?: {
3
+ getRebind?: () => ((newHost: string) => Promise<void>) | null;
4
+ }): Promise<void>;