@alexberardi/jarvis-admin 0.1.7 → 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.
- package/README.md +28 -1
- package/package.json +1 -1
- package/public/assets/index-9Mg2BGt5.css +1 -0
- package/public/assets/index-BpdNLMNo.js +17 -0
- package/public/index.html +2 -2
- package/server/dist/config.js +5 -5
- package/server/dist/config.js.map +1 -1
- package/server/dist/index.js +71 -0
- package/server/dist/index.js.map +1 -1
- package/server/dist/routes/install.d.ts.map +1 -1
- package/server/dist/routes/install.js +374 -77
- package/server/dist/routes/install.js.map +1 -1
- package/server/dist/services/orchestrator.d.ts +13 -6
- package/server/dist/services/orchestrator.d.ts.map +1 -1
- package/server/dist/services/orchestrator.js +119 -41
- package/server/dist/services/orchestrator.js.map +1 -1
- package/server/dist/services/upgrade/self-updater.js +3 -3
- package/server/dist/services/upgrade/self-updater.js.map +1 -1
- package/server/dist/services/upgrade/state-reconstructor.d.ts.map +1 -1
- package/server/dist/services/upgrade/state-reconstructor.js +1 -0
- package/server/dist/services/upgrade/state-reconstructor.js.map +1 -1
- package/server/dist/types/wizard.d.ts +29 -0
- package/server/dist/types/wizard.d.ts.map +1 -1
- package/server/node_modules/cpu-features/build/Makefile +2 -2
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o.d +1 -1
- 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 +1 -1
- 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 +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o.d +1 -1
- 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 +1 -1
- 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 +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o.d +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o.d +1 -1
- 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 +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o.d +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o.d +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o.d +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o.d +1 -1
- package/server/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures/src/binding.o.d +135 -135
- package/server/node_modules/cpu-features/build/cpufeatures.target.mk +14 -14
- package/server/node_modules/cpu-features/build/deps/cpu_features/cpu_features.target.mk +14 -14
- package/server/node_modules/ssh2/lib/protocol/crypto/build/Makefile +2 -2
- package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d +227 -227
- package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto/src/binding.o +0 -0
- package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto.node +0 -0
- package/server/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node +0 -0
- package/server/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk +14 -14
- package/public/assets/index-CihnPYy7.css +0 -1
- package/public/assets/index-DTli3_bR.js +0 -17
|
@@ -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
|
|
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)
|
|
29
|
-
|
|
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
|
-
//
|
|
33
|
-
|
|
76
|
+
// Compose file exists — check what containers are running
|
|
77
|
+
const running = [];
|
|
78
|
+
const stopped = [];
|
|
34
79
|
try {
|
|
35
|
-
execSync(
|
|
36
|
-
|
|
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
|
-
//
|
|
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:
|
|
43
|
-
|
|
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
|
-
*
|
|
136
|
+
* Pre-flight checks before installation begins.
|
|
137
|
+
* Verifies Docker, Compose, ports, disk space, Docker socket, and NVIDIA runtime.
|
|
49
138
|
*/
|
|
50
|
-
app.get('/
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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(
|
|
258
|
+
const output = execSync("docker info --format '{{json .Runtimes}}'", {
|
|
62
259
|
encoding: 'utf-8',
|
|
63
|
-
timeout:
|
|
260
|
+
timeout: 5000,
|
|
64
261
|
});
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
105
|
-
//
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
}>):
|
|
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
|
*/
|