@alexberardi/jarvis-admin 0.1.0 → 0.1.21

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 (77) hide show
  1. package/README.md +78 -0
  2. package/package.json +1 -1
  3. package/public/assets/index-9Mg2BGt5.css +1 -0
  4. package/public/assets/index-BpdNLMNo.js +17 -0
  5. package/public/index.html +2 -2
  6. package/server/dist/config.js +5 -5
  7. package/server/dist/config.js.map +1 -1
  8. package/server/dist/index.js +71 -0
  9. package/server/dist/index.js.map +1 -1
  10. package/server/dist/routes/install.d.ts.map +1 -1
  11. package/server/dist/routes/install.js +374 -77
  12. package/server/dist/routes/install.js.map +1 -1
  13. package/server/dist/services/orchestrator.d.ts +13 -6
  14. package/server/dist/services/orchestrator.d.ts.map +1 -1
  15. package/server/dist/services/orchestrator.js +119 -41
  16. package/server/dist/services/orchestrator.js.map +1 -1
  17. package/server/dist/services/upgrade/self-updater.js +3 -3
  18. package/server/dist/services/upgrade/self-updater.js.map +1 -1
  19. package/server/dist/services/upgrade/state-reconstructor.d.ts.map +1 -1
  20. package/server/dist/services/upgrade/state-reconstructor.js +1 -0
  21. package/server/dist/services/upgrade/state-reconstructor.js.map +1 -1
  22. package/server/dist/types/wizard.d.ts +29 -0
  23. package/server/dist/types/wizard.d.ts.map +1 -1
  24. package/server/node_modules/cpu-features/build/Makefile +55 -48
  25. package/server/node_modules/cpu-features/build/Release/.deps/Release/cpu_features.a.d +1 -1
  26. package/server/node_modules/cpu-features/build/Release/.deps/Release/cpufeatures.node.d +1 -1
  27. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o.d +4 -4
  28. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_linux_or_android.o.d +3 -3
  29. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.o.d +3 -23
  30. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o.d +3 -3
  31. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_arm_linux_or_android.o.d +3 -3
  32. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_mips_linux_or_android.o.d +3 -3
  33. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o.d +3 -3
  34. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o.d +3 -3
  35. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_linux_or_android.o.d +27 -3
  36. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o.d +3 -3
  37. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o.d +3 -3
  38. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o.d +6 -6
  39. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o.d +5 -5
  40. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures/src/binding.o.d +148 -144
  41. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures.node.d +1 -0
  42. package/server/node_modules/cpu-features/build/Release/cpu_features.a +0 -0
  43. package/server/node_modules/cpu-features/build/Release/cpufeatures.node +0 -0
  44. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o +0 -0
  45. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_linux_or_android.o +0 -0
  46. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.o +0 -0
  47. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o +0 -0
  48. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_arm_linux_or_android.o +0 -0
  49. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_mips_linux_or_android.o +0 -0
  50. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o +0 -0
  51. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o +0 -0
  52. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_linux_or_android.o +0 -0
  53. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o +0 -0
  54. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o +0 -0
  55. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o +0 -0
  56. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o +0 -0
  57. package/server/node_modules/cpu-features/build/Release/obj.target/cpufeatures/src/binding.o +0 -0
  58. package/server/node_modules/cpu-features/build/Release/obj.target/cpufeatures.node +0 -0
  59. package/server/node_modules/cpu-features/build/Release/obj.target/deps/cpu_features/cpu_features.a +0 -0
  60. package/server/node_modules/cpu-features/build/Release/obj.target/deps/cpu_features/cpu_features.a.ar-file-list +13 -0
  61. package/server/node_modules/cpu-features/build/cpufeatures.target.mk +63 -87
  62. package/server/node_modules/cpu-features/build/deps/cpu_features/cpu_features.target.mk +65 -87
  63. package/server/node_modules/cpu-features/buildcheck.gypi +3 -1
  64. package/server/node_modules/ssh2/lib/protocol/crypto/build/Makefile +55 -48
  65. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d +238 -234
  66. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto.node.d +1 -0
  67. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/sshcrypto.node.d +1 -1
  68. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto/src/binding.o +0 -0
  69. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto.node +0 -0
  70. package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node +0 -0
  71. package/server/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk +62 -86
  72. package/public/assets/index-CihnPYy7.css +0 -1
  73. package/public/assets/index-DTli3_bR.js +0 -17
  74. package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/hwcaps.o.d +0 -12
  75. package/server/node_modules/cpu-features/build/Release/obj.target/cpu_features/deps/cpu_features/src/hwcaps.o +0 -0
  76. package/server/node_modules/cpu-features/build/gyp-mac-tool +0 -772
  77. package/server/node_modules/ssh2/lib/protocol/crypto/build/gyp-mac-tool +0 -772
@@ -1,7 +1,8 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from 'node:fs';
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, accessSync, constants as fsConstants } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { homedir, platform, arch, totalmem } from 'node:os';
4
4
  import { spawn, execSync } from 'node:child_process';
5
+ import net from 'node:net';
5
6
  import { generateCompose, getAllEnabledServices } from '../services/generators/compose-generator.js';
6
7
  import { generateEnv } from '../services/generators/env-generator.js';
7
8
  import { generateInitDbScript } from '../services/generators/init-db-generator.js';
@@ -19,114 +20,377 @@ function loadRegistry() {
19
20
  export async function installRoutes(app) {
20
21
  const registry = loadRegistry();
21
22
  /**
22
- * Check if Jarvis has been installed (compose files exist).
23
+ * Check installation state with container awareness.
23
24
  */
24
25
  app.get('/status', async (_request, reply) => {
26
+ // Compose-export mode: services are managed externally (TrueNAS, Portainer, etc.)
27
+ // Just check if auth is reachable and whether account setup is needed.
28
+ if (process.env.JARVIS_DEPLOY_MODE === 'compose-export') {
29
+ // Try to reach auth to determine if account creation is needed
30
+ const authUrl = process.env.JARVIS_AUTH_BASE_URL ?? 'http://jarvis-auth:8000';
31
+ let authReachable = false;
32
+ try {
33
+ const res = await fetch(`${authUrl}/health`, { signal: AbortSignal.timeout(3000) });
34
+ authReachable = res.ok;
35
+ }
36
+ catch {
37
+ // Auth not reachable yet
38
+ }
39
+ if (!authReachable) {
40
+ // Services still starting
41
+ const status = {
42
+ configured: false,
43
+ state: 'deployed-needs-account',
44
+ deployMode: 'compose-export',
45
+ reason: 'services_starting',
46
+ };
47
+ return reply.send(status);
48
+ }
49
+ const status = {
50
+ configured: false,
51
+ state: 'deployed-needs-account',
52
+ deployMode: 'compose-export',
53
+ };
54
+ return reply.send(status);
55
+ }
25
56
  const composePath = getComposePath();
26
57
  const composeFile = join(composePath, 'docker-compose.yml');
27
58
  const envFile = join(composePath, '.env');
28
- if (existsSync(composeFile) && existsSync(envFile)) {
29
- const status = { configured: true, composePath };
59
+ if (!existsSync(composeFile) || !existsSync(envFile)) {
60
+ // Check Docker availability
61
+ let dockerAvailable = false;
62
+ try {
63
+ execSync('docker info', { stdio: 'ignore', timeout: 5000 });
64
+ dockerAvailable = true;
65
+ }
66
+ catch {
67
+ // Docker not available
68
+ }
69
+ const status = {
70
+ configured: false,
71
+ reason: dockerAvailable ? 'not_installed' : 'docker_not_found',
72
+ state: 'fresh',
73
+ };
30
74
  return reply.send(status);
31
75
  }
32
- // Check Docker availability
33
- let dockerAvailable = false;
76
+ // Compose file exists — check what containers are running
77
+ const running = [];
78
+ const stopped = [];
34
79
  try {
35
- execSync('docker info', { stdio: 'ignore', timeout: 5000 });
36
- dockerAvailable = true;
80
+ const output = execSync(`docker compose -f "${composeFile}" ps --format json`, { cwd: composePath, timeout: 10_000, encoding: 'utf-8', env: { ...process.env, ...loadEnvFile(composePath) } });
81
+ // docker compose ps --format json outputs one JSON object per line
82
+ const lines = output.trim().split('\n').filter(Boolean);
83
+ for (const line of lines) {
84
+ try {
85
+ const container = JSON.parse(line);
86
+ if (container.State === 'running') {
87
+ running.push(container.Service);
88
+ }
89
+ else {
90
+ stopped.push(container.Service);
91
+ }
92
+ }
93
+ catch {
94
+ // Skip unparseable lines
95
+ }
96
+ }
37
97
  }
38
98
  catch {
39
- // Docker not available
99
+ // docker compose ps failed — compose file may exist but no containers
100
+ }
101
+ // Determine state
102
+ let state = 'generated';
103
+ if (running.length === 0 && stopped.length === 0) {
104
+ state = 'generated';
105
+ }
106
+ else if (running.length > 0 && stopped.length === 0) {
107
+ // All containers running — check if auth is up (indicates complete setup)
108
+ const envVars = loadEnvFile(composePath);
109
+ const authPort = parseInt(envVars.AUTH_PORT ?? '7701', 10);
110
+ try {
111
+ const res = await fetch(`http://localhost:${authPort}/health`, { signal: AbortSignal.timeout(3000) });
112
+ if (res.ok) {
113
+ state = 'complete';
114
+ }
115
+ else {
116
+ state = 'running';
117
+ }
118
+ }
119
+ catch {
120
+ state = 'running';
121
+ }
122
+ }
123
+ else {
124
+ state = 'partial';
40
125
  }
41
126
  const status = {
42
- configured: false,
43
- reason: dockerAvailable ? 'not_installed' : 'docker_not_found',
127
+ configured: true,
128
+ composePath,
129
+ state,
130
+ running: running.length > 0 ? running : undefined,
131
+ stopped: stopped.length > 0 ? stopped : undefined,
44
132
  };
45
133
  return reply.send(status);
46
134
  });
47
135
  /**
48
- * Detect hardware: GPU, RAM, platform.
136
+ * Pre-flight checks before installation begins.
137
+ * Verifies Docker, Compose, ports, disk space, Docker socket, and NVIDIA runtime.
49
138
  */
50
- app.get('/hardware', async (_request, reply) => {
51
- const plat = platform();
52
- const archName = arch();
53
- const totalMemoryGb = Math.round(totalmem() / (1024 * 1024 * 1024));
54
- let gpuName = null;
55
- let gpuVramMb = null;
56
- const recommendedBackends = [];
57
- let recommendedBackend = 'gguf';
58
- if (plat === 'darwin') {
59
- // macOS: check for Apple Silicon
139
+ app.get('/preflight', async (request, reply) => {
140
+ const checks = [];
141
+ const composePath = getComposePath();
142
+ const dockerSocket = app.config?.dockerSocket ?? (process.platform === 'win32' ? '//./pipe/docker_engine' : '/var/run/docker.sock');
143
+ // Parse enabled services from query param
144
+ const enabledServiceIds = request.query.services?.split(',').filter(Boolean) ?? [];
145
+ const enabledServices = registry.services.filter((s) => s.category === 'core' || enabledServiceIds.includes(s.id));
146
+ // 1. Docker
147
+ try {
148
+ const output = execSync('docker info', { encoding: 'utf-8', timeout: 5000 });
149
+ const versionMatch = output.match(/Server Version:\s*(.+)/i);
150
+ const version = versionMatch?.[1]?.trim() ?? 'unknown';
151
+ checks.push({ name: 'Docker', status: 'pass', message: `Docker is running (v${version})` });
152
+ }
153
+ catch (err) {
154
+ checks.push({
155
+ name: 'Docker',
156
+ status: 'fail',
157
+ message: 'Docker is not running or not installed',
158
+ details: err instanceof Error ? err.message : String(err),
159
+ });
160
+ }
161
+ // 2. Docker Compose
162
+ try {
163
+ const output = execSync('docker compose version', { encoding: 'utf-8', timeout: 5000 });
164
+ checks.push({ name: 'Docker Compose', status: 'pass', message: output.trim() });
165
+ }
166
+ catch (err) {
167
+ checks.push({
168
+ name: 'Docker Compose',
169
+ status: 'fail',
170
+ message: 'Docker Compose is not available',
171
+ details: err instanceof Error ? err.message : String(err),
172
+ });
173
+ }
174
+ // 3. Port availability
175
+ const portsToCheck = enabledServices.map((s) => ({ id: s.id, port: s.port }));
176
+ const conflicts = [];
177
+ await Promise.all(portsToCheck.map(async ({ id, port }) => {
178
+ const inUse = await isPortInUse(port);
179
+ if (inUse) {
180
+ conflicts.push({ id, port });
181
+ }
182
+ }));
183
+ if (conflicts.length > 0) {
184
+ const coreConflicts = conflicts.filter((c) => enabledServices.find((s) => s.id === c.id && s.category === 'core'));
185
+ const details = conflicts.map((c) => `${c.id} (port ${c.port})`).join(', ');
186
+ checks.push({
187
+ name: 'Ports',
188
+ status: coreConflicts.length > 0 ? 'fail' : 'warn',
189
+ message: `${conflicts.length} port(s) already in use: ${details}`,
190
+ details: `Conflicting ports: ${details}`,
191
+ });
192
+ }
193
+ else {
194
+ checks.push({ name: 'Ports', status: 'pass', message: 'All required ports are available' });
195
+ }
196
+ // 4. Disk space
197
+ try {
198
+ const targetPath = existsSync(composePath) ? composePath : homedir();
199
+ const output = execSync(`df -k "${targetPath}"`, { encoding: 'utf-8', timeout: 5000 });
200
+ const lines = output.trim().split('\n');
201
+ if (lines.length >= 2) {
202
+ const parts = lines[1].split(/\s+/);
203
+ // df -k output: Filesystem 1K-blocks Used Available Use% Mounted
204
+ const availableKb = parseInt(parts[3], 10);
205
+ const availableGb = Math.round(availableKb / (1024 * 1024));
206
+ if (availableKb < 2 * 1024 * 1024) {
207
+ checks.push({
208
+ name: 'Disk Space',
209
+ status: 'fail',
210
+ message: `Only ${availableGb} GB available (minimum 2 GB required)`,
211
+ });
212
+ }
213
+ else if (availableKb < 10 * 1024 * 1024) {
214
+ checks.push({
215
+ name: 'Disk Space',
216
+ status: 'warn',
217
+ message: `${availableGb} GB available (10+ GB recommended)`,
218
+ });
219
+ }
220
+ else {
221
+ checks.push({
222
+ name: 'Disk Space',
223
+ status: 'pass',
224
+ message: `${availableGb} GB available`,
225
+ });
226
+ }
227
+ }
228
+ }
229
+ catch {
230
+ checks.push({ name: 'Disk Space', status: 'warn', message: 'Could not determine available disk space' });
231
+ }
232
+ // 5. Docker socket
233
+ try {
234
+ if (platform() === 'win32') {
235
+ // Windows named pipes can't be checked with accessSync — verify via docker ping
236
+ execSync('docker info', { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
237
+ checks.push({ name: 'Docker Socket', status: 'pass', message: `Docker Desktop accessible via named pipe` });
238
+ }
239
+ else {
240
+ accessSync(dockerSocket, fsConstants.R_OK | fsConstants.W_OK);
241
+ checks.push({ name: 'Docker Socket', status: 'pass', message: `Docker socket accessible at ${dockerSocket}` });
242
+ }
243
+ }
244
+ catch (err) {
245
+ checks.push({
246
+ name: 'Docker Socket',
247
+ status: 'fail',
248
+ message: platform() === 'win32'
249
+ ? 'Docker Desktop not running or not accessible'
250
+ : `Docker socket not accessible at ${dockerSocket}`,
251
+ details: err instanceof Error ? err.message : String(err),
252
+ });
253
+ }
254
+ // 6. NVIDIA runtime (Linux only)
255
+ if (platform() === 'linux') {
256
+ const gpuServicesEnabled = enabledServices.some((s) => s.gpu);
60
257
  try {
61
- const output = execSync('system_profiler SPDisplaysDataType -json', {
258
+ const output = execSync("docker info --format '{{json .Runtimes}}'", {
62
259
  encoding: 'utf-8',
63
- timeout: 10_000,
260
+ timeout: 5000,
64
261
  });
65
- const data = JSON.parse(output);
66
- const gpu = data?.SPDisplaysDataType?.[0];
67
- if (gpu) {
68
- gpuName = gpu.sppci_model ?? 'Apple Silicon GPU';
69
- gpuVramMb = totalMemoryGb * 1024; // Unified memory
262
+ const hasNvidia = output.toLowerCase().includes('nvidia');
263
+ if (hasNvidia) {
264
+ checks.push({ name: 'NVIDIA Runtime', status: 'pass', message: 'NVIDIA container runtime detected' });
265
+ }
266
+ else if (gpuServicesEnabled) {
267
+ checks.push({
268
+ name: 'NVIDIA Runtime',
269
+ status: 'warn',
270
+ message: 'NVIDIA runtime not found. GPU services may not work.',
271
+ details: 'Install the NVIDIA Container Toolkit for GPU acceleration',
272
+ });
70
273
  }
71
274
  }
72
275
  catch {
73
- // Fallback
74
- }
75
- if (archName === 'arm64') {
76
- recommendedBackends.push('gguf', 'mlx');
77
- recommendedBackend = 'gguf';
78
- }
79
- else {
80
- recommendedBackends.push('gguf');
276
+ if (gpuServicesEnabled) {
277
+ checks.push({
278
+ name: 'NVIDIA Runtime',
279
+ status: 'warn',
280
+ message: 'Could not check for NVIDIA runtime. GPU services may not work.',
281
+ });
282
+ }
81
283
  }
82
284
  }
83
- else if (plat === 'linux') {
84
- // Linux: check for NVIDIA GPU(s)
85
- try {
86
- const output = execSync('nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits', { encoding: 'utf-8', timeout: 10_000 });
87
- const lines = output.trim().split('\n').filter(Boolean);
88
- let totalVram = 0;
89
- const gpuNames = [];
90
- for (const line of lines) {
91
- const parts = line.split(', ');
92
- if (parts.length >= 2) {
93
- gpuNames.push(parts[0].trim());
94
- totalVram += parseInt(parts[1], 10);
285
+ const canProceed = !checks.some((c) => c.status === 'fail');
286
+ const result = { checks, canProceed };
287
+ return reply.send(result);
288
+ });
289
+ /**
290
+ * Detect hardware: GPU, RAM, platform.
291
+ * Wrapped in try/catch so the endpoint never throws.
292
+ */
293
+ app.get('/hardware', async (_request, reply) => {
294
+ try {
295
+ const plat = platform();
296
+ const archName = arch();
297
+ const totalMemoryGb = Math.round(totalmem() / (1024 * 1024 * 1024));
298
+ let gpuName = null;
299
+ let gpuVramMb = null;
300
+ const recommendedBackends = [];
301
+ let recommendedBackend = 'gguf';
302
+ if (plat === 'darwin') {
303
+ // macOS: check for Apple Silicon
304
+ try {
305
+ const output = execSync('system_profiler SPDisplaysDataType -json', {
306
+ encoding: 'utf-8',
307
+ timeout: 10_000,
308
+ });
309
+ const data = JSON.parse(output);
310
+ const gpu = data?.SPDisplaysDataType?.[0];
311
+ if (gpu) {
312
+ gpuName = gpu.sppci_model ?? 'Apple Silicon GPU';
313
+ gpuVramMb = totalMemoryGb * 1024; // Unified memory
95
314
  }
96
315
  }
97
- if (gpuNames.length > 0) {
98
- gpuName = gpuNames.length === 1
99
- ? gpuNames[0]
100
- : `${gpuNames.length}x ${gpuNames[0]}`;
101
- gpuVramMb = totalVram;
316
+ catch {
317
+ // Fallback
318
+ }
319
+ if (archName === 'arm64') {
320
+ recommendedBackends.push('gguf', 'mlx');
321
+ recommendedBackend = 'gguf';
322
+ }
323
+ else {
324
+ recommendedBackends.push('gguf');
102
325
  }
103
326
  }
104
- catch {
105
- // No NVIDIA GPU
327
+ else if (plat === 'linux') {
328
+ // Linux: check for NVIDIA GPU(s)
329
+ try {
330
+ const output = execSync('nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits', { encoding: 'utf-8', timeout: 10_000 });
331
+ const lines = output.trim().split('\n').filter(Boolean);
332
+ let totalVram = 0;
333
+ const gpuNames = [];
334
+ for (const line of lines) {
335
+ const parts = line.split(', ');
336
+ if (parts.length >= 2) {
337
+ gpuNames.push(parts[0].trim());
338
+ totalVram += parseInt(parts[1], 10);
339
+ }
340
+ }
341
+ if (gpuNames.length > 0) {
342
+ gpuName = gpuNames.length === 1
343
+ ? gpuNames[0]
344
+ : `${gpuNames.length}x ${gpuNames[0]}`;
345
+ gpuVramMb = totalVram;
346
+ }
347
+ }
348
+ catch {
349
+ // No NVIDIA GPU
350
+ }
351
+ if (gpuName) {
352
+ recommendedBackends.push('gguf', 'vllm');
353
+ recommendedBackend = 'gguf';
354
+ }
355
+ else {
356
+ recommendedBackends.push('gguf');
357
+ }
106
358
  }
107
- if (gpuName) {
108
- recommendedBackends.push('gguf', 'vllm');
109
- recommendedBackend = 'gguf';
359
+ // No GPU detected on any platform — offer remote as fallback
360
+ if (!gpuName && recommendedBackends.length === 0) {
361
+ recommendedBackends.push('remote');
362
+ recommendedBackend = 'remote';
110
363
  }
111
- else {
112
- recommendedBackends.push('gguf');
364
+ // ARM without GPU = suggest remote-llm
365
+ const isArm = archName === 'arm64' || archName === 'aarch64';
366
+ if (isArm && plat === 'linux' && !gpuName) {
367
+ recommendedBackend = 'remote';
113
368
  }
369
+ const info = {
370
+ platform: plat === 'darwin' ? 'darwin' : 'linux',
371
+ arch: archName,
372
+ totalMemoryGb,
373
+ gpuName,
374
+ gpuVramMb,
375
+ recommendedBackends,
376
+ recommendedBackend,
377
+ };
378
+ return reply.send(info);
114
379
  }
115
- // ARM without GPU = suggest remote-llm
116
- const isArm = archName === 'arm64' || archName === 'aarch64';
117
- if (isArm && plat === 'linux' && !gpuName) {
118
- recommendedBackend = 'remote';
380
+ catch (err) {
381
+ // Graceful fallback never throw from hardware detection
382
+ console.error('[install] Hardware detection failed:', err);
383
+ const fallback = {
384
+ platform: platform() === 'darwin' ? 'darwin' : 'linux',
385
+ arch: arch(),
386
+ totalMemoryGb: Math.round(totalmem() / (1024 * 1024 * 1024)),
387
+ gpuName: null,
388
+ gpuVramMb: null,
389
+ recommendedBackends: ['remote'],
390
+ recommendedBackend: 'remote',
391
+ };
392
+ return reply.send(fallback);
119
393
  }
120
- const info = {
121
- platform: plat === 'darwin' ? 'darwin' : 'linux',
122
- arch: archName,
123
- totalMemoryGb,
124
- gpuName,
125
- gpuVramMb,
126
- recommendedBackends,
127
- recommendedBackend,
128
- };
129
- return reply.send(info);
130
394
  });
131
395
  /**
132
396
  * Generate compose, env, and init-db files.
@@ -220,7 +484,16 @@ export async function installRoutes(app) {
220
484
  }
221
485
  };
222
486
  try {
223
- const result = await tieredStartup(composeFile, composePath, registry.services, adminToken, portOverrides, emit);
487
+ // Check which services are already healthy before starting
488
+ const alreadyHealthy = new Set();
489
+ const currentHealth = await pollServiceHealth(registry.services, portOverrides);
490
+ for (const [id, status] of Object.entries(currentHealth)) {
491
+ if (status.healthy) {
492
+ alreadyHealthy.add(id);
493
+ emit({ phase: 'preflight', message: `${id} already healthy, will skip` });
494
+ }
495
+ }
496
+ const result = await tieredStartup(composeFile, composePath, registry.services, adminToken, portOverrides, emit, alreadyHealthy);
224
497
  // Persist service URLs so the admin server can proxy to them
225
498
  if (result.success) {
226
499
  const authPort = envVars.AUTH_PORT ?? '7701';
@@ -237,7 +510,11 @@ export async function installRoutes(app) {
237
510
  // Update in-memory config so subsequent requests work immediately
238
511
  Object.assign(app.config, urls);
239
512
  }
240
- emit({ done: true, code: result.success ? 0 : 1, error: result.error });
513
+ // Emit service health results before closing
514
+ if (result.serviceHealth) {
515
+ emit({ phase: 'serviceHealth', serviceHealth: result.serviceHealth });
516
+ }
517
+ emit({ done: true, code: result.success ? 0 : 1, error: result.error, serviceHealth: result.serviceHealth });
241
518
  }
242
519
  catch (err) {
243
520
  emit({ done: true, code: 1, error: err instanceof Error ? err.message : String(err) });
@@ -383,4 +660,24 @@ function loadEnvFile(composePath) {
383
660
  }
384
661
  return vars;
385
662
  }
663
+ /**
664
+ * Check if a port is already in use by trying to listen on it.
665
+ */
666
+ function isPortInUse(port) {
667
+ return new Promise((resolve) => {
668
+ const server = net.createServer();
669
+ server.once('error', (err) => {
670
+ if (err.code === 'EADDRINUSE') {
671
+ resolve(true);
672
+ }
673
+ else {
674
+ resolve(false);
675
+ }
676
+ });
677
+ server.once('listening', () => {
678
+ server.close(() => resolve(false));
679
+ });
680
+ server.listen(port, '127.0.0.1');
681
+ });
682
+ }
386
683
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/routes/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/routes/install.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ServiceDefinition, ServiceRegistry } from '../types/service-registry.js';
2
- import type { HealthStatus, RegisterResult } from '../types/wizard.js';
2
+ import type { HealthStatus, RegisterResult, TieredStartupResult } from '../types/wizard.js';
3
3
  /**
4
4
  * Poll health endpoints for all enabled services, tier by tier.
5
5
  */
@@ -12,21 +12,28 @@ export declare function pollServiceHealth(services: ServiceDefinition[], portOve
12
12
  export declare function registerServices(services: ServiceDefinition[], configServiceUrl: string, adminToken: string, portOverrides: Record<string, number>, composePath?: string): Promise<RegisterResult>;
13
13
  /**
14
14
  * Update .env file with app keys returned from registration.
15
+ * If a key pattern isn't found in the file, the key-value pair is appended.
16
+ * Returns a report of what was injected vs appended.
15
17
  */
16
18
  export declare function injectAppKeys(envContent: string, appKeys: Record<string, {
17
19
  appId: string;
18
20
  appKey: string;
19
- }>): string;
21
+ }>): {
22
+ content: string;
23
+ report: InjectReport;
24
+ };
25
+ export interface InjectReport {
26
+ injected: string[];
27
+ appended: string[];
28
+ }
20
29
  /**
21
30
  * Run tiered startup: start services in dependency order, wait for health,
22
31
  * register, inject keys, restart services that got new credentials.
23
32
  *
24
33
  * Emits SSE events for UI progress.
34
+ * Optionally accepts a set of already-healthy service IDs to skip.
25
35
  */
26
- export declare function tieredStartup(composeFile: string, composePath: string, services: ServiceDefinition[], adminToken: string, portOverrides: Record<string, number>, emit: (data: Record<string, unknown>) => void): Promise<{
27
- success: boolean;
28
- error?: string;
29
- }>;
36
+ export declare function tieredStartup(composeFile: string, composePath: string, services: ServiceDefinition[], adminToken: string, portOverrides: Record<string, number>, emit: (data: Record<string, unknown>) => void, alreadyHealthy?: Set<string>): Promise<TieredStartupResult>;
30
37
  /**
31
38
  * Get default enabled modules (recommended services).
32
39
  */