4runr-os 2.10.20 → 2.10.23

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.
@@ -4953,9 +4953,9 @@
4953
4953
  }
4954
4954
  },
4955
4955
  "node_modules/electron-to-chromium": {
4956
- "version": "1.5.344",
4957
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz",
4958
- "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==",
4956
+ "version": "1.5.345",
4957
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.345.tgz",
4958
+ "integrity": "sha512-F9JXQGiMrz6yVNPI2qOVPvB9HzjH5cGzhs8oJ6A28V5L/YnzN/0KsuiibqF+F1Fd9qxFzD1BUnYSd8JfULxTwg==",
4959
4959
  "dev": true,
4960
4960
  "license": "ISC"
4961
4961
  },
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Boot Orchestrator - Unified launch sequence with futuristic loading UI
3
+ *
4
+ * Handles:
5
+ * - Version detection & update checks
6
+ * - Stale process cleanup
7
+ * - Gateway health verification
8
+ * - Docker container startup
9
+ * - Animated, futuristic loading screen with 4Runr purple aesthetic
10
+ *
11
+ * Centralizes all pre-launch logic with a premium, alive UI experience.
12
+ */
13
+ interface BootStep {
14
+ id: string;
15
+ label: string;
16
+ techLabel: string;
17
+ status: 'pending' | 'running' | 'complete' | 'warning' | 'error';
18
+ message?: string;
19
+ startTime?: number;
20
+ endTime?: number;
21
+ progress?: number;
22
+ }
23
+ interface BootResult {
24
+ success: boolean;
25
+ needsUpdate?: boolean;
26
+ updateVersion?: string;
27
+ error?: string;
28
+ warnings?: string[];
29
+ steps: BootStep[];
30
+ }
31
+ export declare class BootOrchestrator {
32
+ private steps;
33
+ private startTime;
34
+ private isDevMode;
35
+ private frameCount;
36
+ private animationInterval;
37
+ constructor();
38
+ private initializeSteps;
39
+ /**
40
+ * Detect if running from dev/repo vs global install.
41
+ * Dev mode: skip auto-updates, show [DEV] indicator.
42
+ */
43
+ private detectDevMode;
44
+ private updateStep;
45
+ private startAnimation;
46
+ private getSpinner;
47
+ private getGlitchText;
48
+ private getHexStream;
49
+ private getScanline;
50
+ private getProgressBar;
51
+ private renderLoadingScreen;
52
+ /**
53
+ * Step 1: Version Check & Update Detection
54
+ */
55
+ private checkVersion;
56
+ /**
57
+ * Step 2: Cleanup stale processes and locks
58
+ */
59
+ private cleanupStaleProcesses;
60
+ /**
61
+ * Step 3: Health check (Gateway bundle, Prisma client)
62
+ */
63
+ private checkHealth;
64
+ /**
65
+ * Step 4: Docker availability check (doesn't start containers - TUI handles that)
66
+ */
67
+ private checkDocker;
68
+ /**
69
+ * Step 5: Gateway bundle verification
70
+ */
71
+ private checkGatewayBundle;
72
+ /**
73
+ * Main orchestration: run all boot steps
74
+ */
75
+ boot(): Promise<BootResult>;
76
+ private renderSuccessScreen;
77
+ }
78
+ /**
79
+ * Convenience export for existing code
80
+ */
81
+ export declare function orchestrateBootSequence(): Promise<BootResult>;
82
+ export {};
83
+ //# sourceMappingURL=boot-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-orchestrator.d.ts","sourceRoot":"","sources":["../src/boot-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA0BH,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,iBAAiB,CAA+B;;IAOxD,OAAO,CAAC,eAAe;IAwCvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,mBAAmB;IAuH3B;;OAEG;YACW,YAAY;IA6B1B;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;YACW,WAAW;IAwBzB;;OAEG;YACW,WAAW;IAezB;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IA+CjC,OAAO,CAAC,mBAAmB;CAyD5B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAGnE"}
@@ -0,0 +1,505 @@
1
+ /**
2
+ * Boot Orchestrator - Unified launch sequence with futuristic loading UI
3
+ *
4
+ * Handles:
5
+ * - Version detection & update checks
6
+ * - Stale process cleanup
7
+ * - Gateway health verification
8
+ * - Docker container startup
9
+ * - Animated, futuristic loading screen with 4Runr purple aesthetic
10
+ *
11
+ * Centralizes all pre-launch logic with a premium, alive UI experience.
12
+ */
13
+ import { execSync } from 'child_process';
14
+ import * as fs from 'fs';
15
+ import * as path from 'path';
16
+ import { fileURLToPath } from 'url';
17
+ import { dirname } from 'path';
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+ // 4Runr Brand Colors
21
+ const COLORS = {
22
+ purple: '\x1b[38;5;141m', // 4Runr signature purple
23
+ purpleBright: '\x1b[38;5;171m', // Brighter purple for highlights
24
+ cyan: '\x1b[38;5;87m', // Accent cyan
25
+ green: '\x1b[38;5;120m', // Success green
26
+ yellow: '\x1b[38;5;228m', // Warning yellow
27
+ red: '\x1b[38;5;210m', // Error red
28
+ gray: '\x1b[38;5;240m', // Subtle gray
29
+ white: '\x1b[97m', // Pure white
30
+ reset: '\x1b[0m',
31
+ bold: '\x1b[1m',
32
+ dim: '\x1b[2m',
33
+ };
34
+ export class BootOrchestrator {
35
+ steps = [];
36
+ startTime = Date.now();
37
+ isDevMode = false;
38
+ frameCount = 0;
39
+ animationInterval = null;
40
+ constructor() {
41
+ this.initializeSteps();
42
+ this.detectDevMode();
43
+ }
44
+ initializeSteps() {
45
+ this.steps = [
46
+ {
47
+ id: 'version',
48
+ label: 'Initializing Core',
49
+ techLabel: 'version_check :: registry_sync',
50
+ status: 'pending',
51
+ progress: 0
52
+ },
53
+ {
54
+ id: 'cleanup',
55
+ label: 'Clearing Memory Space',
56
+ techLabel: 'process_manager :: cleanup_stale',
57
+ status: 'pending',
58
+ progress: 0
59
+ },
60
+ {
61
+ id: 'health',
62
+ label: 'System Integrity Check',
63
+ techLabel: 'integrity :: gateway_bundle',
64
+ status: 'pending',
65
+ progress: 0
66
+ },
67
+ {
68
+ id: 'docker',
69
+ label: 'Container Engine',
70
+ techLabel: 'docker :: availability_check',
71
+ status: 'pending',
72
+ progress: 0
73
+ },
74
+ {
75
+ id: 'gateway',
76
+ label: 'AI Gateway Systems',
77
+ techLabel: 'gateway :: runtime_verification',
78
+ status: 'pending',
79
+ progress: 0
80
+ },
81
+ ];
82
+ }
83
+ /**
84
+ * Detect if running from dev/repo vs global install.
85
+ * Dev mode: skip auto-updates, show [DEV] indicator.
86
+ */
87
+ detectDevMode() {
88
+ try {
89
+ // Running from repo if .git exists in ancestor directories
90
+ let current = __dirname;
91
+ for (let i = 0; i < 6; i++) {
92
+ const gitPath = path.join(current, '.git');
93
+ if (fs.existsSync(gitPath)) {
94
+ this.isDevMode = true;
95
+ return;
96
+ }
97
+ const parent = path.dirname(current);
98
+ if (parent === current)
99
+ break;
100
+ current = parent;
101
+ }
102
+ // Also dev if package.json has "workspaces" (monorepo root)
103
+ const pkgPath = path.join(__dirname, '..', 'package.json');
104
+ if (fs.existsSync(pkgPath)) {
105
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
106
+ if (pkg.workspaces) {
107
+ this.isDevMode = true;
108
+ }
109
+ }
110
+ }
111
+ catch {
112
+ // Assume production if detection fails
113
+ this.isDevMode = false;
114
+ }
115
+ }
116
+ updateStep(id, status, message, progressIncrement = 0) {
117
+ const step = this.steps.find(s => s.id === id);
118
+ if (!step)
119
+ return;
120
+ if (status === 'running' && !step.startTime) {
121
+ step.startTime = Date.now();
122
+ step.progress = 0;
123
+ this.startAnimation();
124
+ }
125
+ if ((status === 'complete' || status === 'error' || status === 'warning') && !step.endTime) {
126
+ step.endTime = Date.now();
127
+ step.progress = 100;
128
+ if (this.animationInterval) {
129
+ clearInterval(this.animationInterval);
130
+ this.animationInterval = null;
131
+ }
132
+ }
133
+ step.status = status;
134
+ if (message !== undefined) {
135
+ step.message = message;
136
+ }
137
+ if (progressIncrement > 0 && step.progress !== undefined) {
138
+ step.progress = Math.min(100, step.progress + progressIncrement);
139
+ }
140
+ this.renderLoadingScreen();
141
+ }
142
+ startAnimation() {
143
+ if (this.animationInterval)
144
+ return;
145
+ this.animationInterval = setInterval(() => {
146
+ this.frameCount++;
147
+ const runningStep = this.steps.find(s => s.status === 'running');
148
+ if (runningStep && runningStep.progress !== undefined && runningStep.progress < 90) {
149
+ // Smooth progress animation (slows near completion)
150
+ const increment = runningStep.progress < 50 ? 3 : runningStep.progress < 70 ? 2 : 1;
151
+ runningStep.progress = Math.min(90, runningStep.progress + increment);
152
+ }
153
+ this.renderLoadingScreen();
154
+ }, 80);
155
+ }
156
+ getSpinner() {
157
+ const frames = ['◜', '◠', '◝', '◞', '◡', '◟'];
158
+ return frames[this.frameCount % frames.length];
159
+ }
160
+ getGlitchText(text) {
161
+ // Random glitch effect - occasionally shows "corrupted" version
162
+ if (this.frameCount % 17 === 0) {
163
+ const glitchChars = ['░', '▒', '▓', '█', '▀', '▄', '▌', '▐'];
164
+ const pos = Math.floor(Math.random() * text.length);
165
+ return text.substring(0, pos) + glitchChars[Math.floor(Math.random() * glitchChars.length)] + text.substring(pos + 1);
166
+ }
167
+ return text;
168
+ }
169
+ getHexStream() {
170
+ // Generate flowing hex stream like Matrix
171
+ const hexChars = '0123456789ABCDEF';
172
+ let stream = '';
173
+ for (let i = 0; i < 16; i++) {
174
+ stream += hexChars[Math.floor(Math.random() * hexChars.length)];
175
+ if (i % 2 === 1)
176
+ stream += ' ';
177
+ }
178
+ return `${COLORS.dim}${COLORS.purple}${stream}${COLORS.reset}`;
179
+ }
180
+ getScanline() {
181
+ // Animated scanline effect
182
+ const width = 58;
183
+ const pos = this.frameCount % width;
184
+ const line = '─'.repeat(pos) + '█' + '─'.repeat(width - pos - 1);
185
+ return `${COLORS.dim}${COLORS.cyan}${line}${COLORS.reset}`;
186
+ }
187
+ getProgressBar(progress = 0, width = 30) {
188
+ const filled = Math.floor((progress / 100) * width);
189
+ const empty = width - filled;
190
+ // Cyberpunk progress bar with glitch effect
191
+ const filledChar = progress > 75 ? '█' : progress > 50 ? '▓' : progress > 25 ? '▒' : '░';
192
+ const emptyChar = '─';
193
+ const head = filled === width ? '' : '▶';
194
+ // Random glitch on the bar occasionally
195
+ const glitch = this.frameCount % 13 === 0 ? `${COLORS.red}▓${COLORS.purpleBright}` : '';
196
+ return `${COLORS.purpleBright}${filledChar.repeat(filled)}${glitch}${head}${COLORS.gray}${emptyChar.repeat(empty)}${COLORS.reset}`;
197
+ }
198
+ renderLoadingScreen() {
199
+ // Clear screen
200
+ process.stderr.write('\x1Bc');
201
+ const devBadge = this.isDevMode ? ` ${COLORS.yellow}${COLORS.bold}[DEV]${COLORS.reset}` : '';
202
+ // HACKER AESTHETIC: Animated border with hex values
203
+ const borderGlitch = this.frameCount % 5 === 0 ? '▓' : this.frameCount % 5 === 1 ? '▒' : '═';
204
+ const headerBorder = `${COLORS.purple}${borderGlitch.repeat(60)}${COLORS.reset}`;
205
+ // ASCII art logo with glitch
206
+ const logoGlitch = this.frameCount % 11 === 0 ? '▓' : '⬢';
207
+ process.stderr.write(`\n${headerBorder}\n`);
208
+ process.stderr.write(`${COLORS.purple} ${logoGlitch}▓▒░${COLORS.reset} ${COLORS.bold}${this.getGlitchText('4RUNR')}${COLORS.reset} ${COLORS.cyan}AI AGENT OS${COLORS.reset}${devBadge} ${COLORS.purple}░▒▓${logoGlitch}${COLORS.reset}\n`);
209
+ // Hex stream underneath logo
210
+ const hexStream = this.getHexStream();
211
+ process.stderr.write(`${COLORS.dim}${COLORS.purple} ${hexStream}${COLORS.reset}\n`);
212
+ process.stderr.write(`${headerBorder}\n\n`);
213
+ // System info with cyber aesthetic
214
+ const totalElapsed = Date.now() - this.startTime;
215
+ const elapsedSec = (totalElapsed / 1000).toFixed(2);
216
+ const memUsage = process.memoryUsage();
217
+ const memMB = (memUsage.heapUsed / 1024 / 1024).toFixed(1);
218
+ process.stderr.write(`${COLORS.gray} ╔═══ BOOT SEQUENCE ${this.frameCount % 2 === 0 ? '▓' : '▒'} ════════════════════════════════╗${COLORS.reset}\n`);
219
+ process.stderr.write(`${COLORS.gray} ║${COLORS.reset} ${COLORS.dim}[RUNTIME]${COLORS.reset} ${COLORS.cyan}${elapsedSec}s${COLORS.reset} ${COLORS.dim}[MEM]${COLORS.reset} ${COLORS.cyan}${memMB}MB${COLORS.reset} ${COLORS.dim}[PID]${COLORS.reset} ${COLORS.cyan}${process.pid}${COLORS.reset}${' '.repeat(20 - elapsedSec.length - memMB.length - String(process.pid).length)}${COLORS.gray}║${COLORS.reset}\n`);
220
+ // Animated scanline
221
+ process.stderr.write(`${COLORS.gray} ║ ${this.getScanline()} ║${COLORS.reset}\n`);
222
+ process.stderr.write(`${COLORS.gray} ╚═══════════════════════════════════════════════════════╝${COLORS.reset}\n\n`);
223
+ // Render each step with OVER THE TOP hacker styling
224
+ for (const step of this.steps) {
225
+ let statusIcon = `${COLORS.gray}[ ]${COLORS.reset}`;
226
+ let statusColor = COLORS.gray;
227
+ let statusText = 'IDLE';
228
+ let showProgress = false;
229
+ let showTech = false;
230
+ let showHex = false;
231
+ if (step.status === 'running') {
232
+ statusIcon = `${COLORS.cyan}[${this.getSpinner()}]${COLORS.reset}`;
233
+ statusColor = COLORS.cyan;
234
+ statusText = 'EXEC';
235
+ showProgress = true;
236
+ showTech = true;
237
+ showHex = true;
238
+ }
239
+ else if (step.status === 'complete') {
240
+ statusIcon = `${COLORS.green}[✓]${COLORS.reset}`;
241
+ statusColor = COLORS.green;
242
+ statusText = 'DONE';
243
+ }
244
+ else if (step.status === 'warning') {
245
+ statusIcon = `${COLORS.yellow}[!]${COLORS.reset}`;
246
+ statusColor = COLORS.yellow;
247
+ statusText = 'WARN';
248
+ }
249
+ else if (step.status === 'error') {
250
+ statusIcon = `${COLORS.red}[✖]${COLORS.reset}`;
251
+ statusColor = COLORS.red;
252
+ statusText = 'FAIL';
253
+ }
254
+ // Main status line with brackets and status code
255
+ process.stderr.write(` ${statusIcon} ${statusColor}${COLORS.bold}${step.label}${COLORS.reset} ${COLORS.dim}${COLORS.gray}<${statusText}>${COLORS.reset}\n`);
256
+ // Technical detail with terminal-style prompt
257
+ if (showTech) {
258
+ process.stderr.write(` ${COLORS.purple}>${COLORS.reset} ${COLORS.dim}${step.techLabel}${COLORS.reset}\n`);
259
+ }
260
+ // Hex data stream (matrix effect)
261
+ if (showHex) {
262
+ process.stderr.write(` ${COLORS.dim}${COLORS.purple}0x${this.getHexStream().trim()}${COLORS.reset}\n`);
263
+ }
264
+ // Progress bar with cyber styling
265
+ if (showProgress && step.progress !== undefined) {
266
+ const progressBar = this.getProgressBar(step.progress, 40);
267
+ const percentLabel = `${step.progress}%`;
268
+ const hexProgress = `0x${step.progress.toString(16).toUpperCase().padStart(2, '0')}`;
269
+ process.stderr.write(` ${progressBar} ${COLORS.cyan}${percentLabel}${COLORS.reset} ${COLORS.dim}${hexProgress}${COLORS.reset}\n`);
270
+ }
271
+ // Error/warning messages with terminal styling
272
+ if (step.message && (step.status === 'warning' || step.status === 'error')) {
273
+ process.stderr.write(` ${COLORS.red}>>>${COLORS.reset} ${COLORS.dim}${step.message}${COLORS.reset}\n`);
274
+ }
275
+ // Completion time in microseconds for hacker vibes
276
+ if (step.status === 'complete' && step.startTime && step.endTime) {
277
+ const duration = step.endTime - step.startTime;
278
+ const microseconds = duration * 1000;
279
+ process.stderr.write(` ${COLORS.dim}${COLORS.green}◆ ${duration}ms (${microseconds.toFixed(0)}μs)${COLORS.reset}\n`);
280
+ }
281
+ process.stderr.write(`\n`);
282
+ }
283
+ // Footer with pulsing effect and EXTREME hacker vibes
284
+ const pulse = this.frameCount % 20 < 10 ? COLORS.purpleBright : COLORS.purple;
285
+ const glitchFooter = this.frameCount % 7 === 0 ? '▓▒░' : '═══';
286
+ process.stderr.write(`${COLORS.gray} ${glitchFooter}═════════════════════════════════════════════════════${glitchFooter}${COLORS.reset}\n`);
287
+ // Matrix-style status messages
288
+ const statusMessages = [
289
+ '>> INITIALIZING NEURAL PATHWAYS...',
290
+ '>> ESTABLISHING SECURE CHANNELS...',
291
+ '>> LOADING AI PROTOCOLS...',
292
+ '>> SYNCING QUANTUM STATES...',
293
+ '>> COMPILING AGENT MATRICES...',
294
+ '>> DECRYPTING MEMORY BLOCKS...',
295
+ ];
296
+ const currentMessage = statusMessages[Math.floor(this.frameCount / 10) % statusMessages.length];
297
+ process.stderr.write(`${pulse} ${this.frameCount % 2 === 0 ? '▓' : '▒'} ${currentMessage}${COLORS.reset}\n`);
298
+ process.stderr.write(`${COLORS.dim}${COLORS.gray} [${new Date().toISOString()}]${COLORS.reset}\n\n`);
299
+ }
300
+ /**
301
+ * Step 1: Version Check & Update Detection
302
+ */
303
+ async checkVersion() {
304
+ this.updateStep('version', 'running');
305
+ if (this.isDevMode) {
306
+ this.updateStep('version', 'complete', 'Dev mode - skipping updates');
307
+ return { needsUpdate: false };
308
+ }
309
+ try {
310
+ const { checkForUpdates } = await import('./version-check.js');
311
+ const versionInfo = await checkForUpdates('4runr-os');
312
+ if (versionInfo.needsUpdate) {
313
+ this.updateStep('version', 'warning', `Update available: ${versionInfo.current} → ${versionInfo.latest}`);
314
+ return {
315
+ needsUpdate: true,
316
+ latestVersion: versionInfo.latest,
317
+ currentVersion: versionInfo.current
318
+ };
319
+ }
320
+ this.updateStep('version', 'complete', `v${versionInfo.current}`);
321
+ return { needsUpdate: false, currentVersion: versionInfo.current };
322
+ }
323
+ catch (err) {
324
+ this.updateStep('version', 'warning', 'Version check failed');
325
+ return { needsUpdate: false };
326
+ }
327
+ }
328
+ /**
329
+ * Step 2: Cleanup stale processes and locks
330
+ */
331
+ async cleanupStaleProcesses() {
332
+ this.updateStep('cleanup', 'running');
333
+ try {
334
+ const { killStaleProcesses } = await import('./boot-sequence.js');
335
+ const { forceClearGlobalDeferredNpmLock } = await import('./deferred-npm-install-lock.js');
336
+ forceClearGlobalDeferredNpmLock();
337
+ killStaleProcesses();
338
+ await new Promise(r => setTimeout(r, 300));
339
+ this.updateStep('cleanup', 'complete');
340
+ }
341
+ catch (err) {
342
+ this.updateStep('cleanup', 'warning', 'Some processes may still be running');
343
+ }
344
+ }
345
+ /**
346
+ * Step 3: Health check (Gateway bundle, Prisma client)
347
+ */
348
+ async checkHealth() {
349
+ this.updateStep('health', 'running');
350
+ try {
351
+ const globalRoot = execSync('npm root -g', { encoding: 'utf-8' }).trim();
352
+ const gatewayDist = path.join(globalRoot, '4runr-os', 'apps', 'gateway', 'dist', 'index.js');
353
+ const prismaClient = path.join(globalRoot, '4runr-os', 'apps', 'gateway', 'node_modules', '.prisma', 'client');
354
+ const gatewayOk = fs.existsSync(gatewayDist);
355
+ const prismaOk = fs.existsSync(prismaClient);
356
+ if (!gatewayOk || !prismaOk) {
357
+ this.updateStep('health', 'error', 'Installation corrupted - run: npm install -g 4runr-os@latest');
358
+ return false;
359
+ }
360
+ this.updateStep('health', 'complete');
361
+ return true;
362
+ }
363
+ catch {
364
+ this.updateStep('health', 'error', 'Could not verify installation');
365
+ return false;
366
+ }
367
+ }
368
+ /**
369
+ * Step 4: Docker availability check (doesn't start containers - TUI handles that)
370
+ */
371
+ async checkDocker() {
372
+ this.updateStep('docker', 'running');
373
+ try {
374
+ execSync('docker --version', {
375
+ stdio: 'pipe',
376
+ timeout: 3000,
377
+ windowsHide: true,
378
+ });
379
+ this.updateStep('docker', 'complete');
380
+ }
381
+ catch {
382
+ this.updateStep('docker', 'warning', 'Docker not available - will run in memory mode');
383
+ }
384
+ }
385
+ /**
386
+ * Step 5: Gateway bundle verification
387
+ */
388
+ async checkGatewayBundle() {
389
+ this.updateStep('gateway', 'running');
390
+ try {
391
+ // Quick sanity check - full bundle copied by prepublishOnly
392
+ const possiblePaths = [
393
+ path.join(__dirname, '..', 'apps', 'gateway', 'dist', 'index.js'),
394
+ path.join(__dirname, '..', '..', 'apps', 'gateway', 'dist', 'index.js'),
395
+ ];
396
+ const bundleExists = possiblePaths.some(p => fs.existsSync(p));
397
+ if (bundleExists) {
398
+ this.updateStep('gateway', 'complete');
399
+ }
400
+ else {
401
+ this.updateStep('gateway', 'warning', 'Gateway will start on demand');
402
+ }
403
+ }
404
+ catch {
405
+ this.updateStep('gateway', 'warning', 'Gateway verification skipped');
406
+ }
407
+ }
408
+ /**
409
+ * Main orchestration: run all boot steps
410
+ */
411
+ async boot() {
412
+ this.renderLoadingScreen();
413
+ // Step 1: Version check (skip if dev)
414
+ const versionCheck = await this.checkVersion();
415
+ if (versionCheck.needsUpdate) {
416
+ // Don't proceed with boot - user needs to update
417
+ return {
418
+ success: false,
419
+ needsUpdate: true,
420
+ updateVersion: versionCheck.latestVersion,
421
+ steps: this.steps,
422
+ };
423
+ }
424
+ // Step 2: Cleanup
425
+ await this.cleanupStaleProcesses();
426
+ // Step 3: Health check
427
+ const healthOk = await this.checkHealth();
428
+ if (!healthOk) {
429
+ return {
430
+ success: false,
431
+ error: 'Installation health check failed',
432
+ steps: this.steps,
433
+ };
434
+ }
435
+ // Step 4: Docker check (non-blocking)
436
+ await this.checkDocker();
437
+ // Step 5: Gateway bundle check (non-blocking)
438
+ await this.checkGatewayBundle();
439
+ // Boot complete - final success screen
440
+ if (healthOk) {
441
+ this.renderSuccessScreen();
442
+ await new Promise(r => setTimeout(r, 800)); // Let user see completion
443
+ }
444
+ return {
445
+ success: true,
446
+ steps: this.steps,
447
+ };
448
+ }
449
+ renderSuccessScreen() {
450
+ if (this.animationInterval) {
451
+ clearInterval(this.animationInterval);
452
+ this.animationInterval = null;
453
+ }
454
+ // Clear and show EPIC HACKER SUCCESS STATE
455
+ process.stderr.write('\x1Bc');
456
+ // Matrix-style success banner
457
+ const successBanner = `
458
+ ${COLORS.green} ██████╗ ██████╗ ██████╗ ████████╗ ███████╗██╗ ██╗ ██████╗ ██████╗███████╗███████╗███████╗
459
+ ${COLORS.green} ██╔══██╗██╔═══██╗██╔═══██╗╚══██╔══╝ ██╔════╝██║ ██║██╔════╝██╔════╝██╔════╝██╔════╝██╔════╝
460
+ ${COLORS.green} ██████╔╝██║ ██║██║ ██║ ██║ ███████╗██║ ██║██║ ██║ █████╗ ███████╗███████╗
461
+ ${COLORS.green} ██╔══██╗██║ ██║██║ ██║ ██║ ╚════██║██║ ██║██║ ██║ ██╔══╝ ╚════██║╚════██║
462
+ ${COLORS.green} ██████╔╝╚██████╔╝╚██████╔╝ ██║ ███████║╚██████╔╝╚██████╗╚██████╗███████╗███████║███████║
463
+ ${COLORS.green} ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝╚══════╝╚══════╝╚══════╝${COLORS.reset}
464
+ `;
465
+ process.stderr.write(successBanner);
466
+ process.stderr.write(`\n`);
467
+ const headerBorder = `${COLORS.purple}${'▓'.repeat(60)}${COLORS.reset}`;
468
+ process.stderr.write(`${headerBorder}\n`);
469
+ process.stderr.write(`${COLORS.purple} ⬢▓▒░${COLORS.reset} ${COLORS.bold}${COLORS.purpleBright}4RUNR${COLORS.reset} ${COLORS.cyan}AI AGENT OS${COLORS.reset} ${COLORS.purple}░▒▓⬢${COLORS.reset}\n`);
470
+ process.stderr.write(`${headerBorder}\n\n`);
471
+ const totalElapsed = Date.now() - this.startTime;
472
+ const elapsedSec = (totalElapsed / 1000).toFixed(2);
473
+ const elapsedHex = `0x${totalElapsed.toString(16).toUpperCase()}`;
474
+ process.stderr.write(`${COLORS.gray} ╔═══ SYSTEM STATUS ${COLORS.green}▓${COLORS.gray} ════════════════════════════════╗${COLORS.reset}\n`);
475
+ process.stderr.write(`${COLORS.gray} ║${COLORS.reset} ${COLORS.green}●${COLORS.reset} ${COLORS.bold}${COLORS.green}ALL SYSTEMS OPERATIONAL${COLORS.reset}${' '.repeat(30)}${COLORS.gray}║${COLORS.reset}\n`);
476
+ process.stderr.write(`${COLORS.gray} ║${COLORS.reset} ${COLORS.dim}[BOOT TIME]${COLORS.reset} ${COLORS.cyan}${elapsedSec}s${COLORS.reset} ${COLORS.dim}(${elapsedHex} ms)${COLORS.reset}${' '.repeat(25 - elapsedSec.length - elapsedHex.length)}${COLORS.gray}║${COLORS.reset}\n`);
477
+ process.stderr.write(`${COLORS.gray} ║${COLORS.reset} ${COLORS.dim}[TIMESTAMP]${COLORS.reset} ${COLORS.cyan}${new Date().toISOString()}${COLORS.reset} ${COLORS.gray}║${COLORS.reset}\n`);
478
+ process.stderr.write(`${COLORS.gray} ╚═══════════════════════════════════════════════════════╝${COLORS.reset}\n\n`);
479
+ // Show all steps with hacker completion stats
480
+ process.stderr.write(`${COLORS.dim}${COLORS.gray} >>> EXECUTION TRACE <<<${COLORS.reset}\n\n`);
481
+ for (const step of this.steps) {
482
+ const icon = step.status === 'complete' ? `${COLORS.green}[✓]${COLORS.reset}` :
483
+ step.status === 'warning' ? `${COLORS.yellow}[!]${COLORS.reset}` :
484
+ `${COLORS.gray}[ ]${COLORS.reset}`;
485
+ const duration = step.endTime && step.startTime ? `${step.endTime - step.startTime}ms` : '---';
486
+ const durationHex = step.endTime && step.startTime ? `0x${(step.endTime - step.startTime).toString(16).toUpperCase()}` : '0x00';
487
+ process.stderr.write(` ${icon} ${COLORS.dim}${step.label}${COLORS.reset}${' '.repeat(35 - step.label.length)}${COLORS.cyan}${duration}${COLORS.reset} ${COLORS.dim}${durationHex}${COLORS.reset}\n`);
488
+ }
489
+ // Epic footer
490
+ process.stderr.write(`\n${COLORS.purple} ${'▓'.repeat(58)}${COLORS.reset}\n`);
491
+ process.stderr.write(`${COLORS.purpleBright} ${COLORS.bold}▓▒░ LAUNCHING TERMINAL INTERFACE ░▒▓${COLORS.reset}\n`);
492
+ process.stderr.write(`${COLORS.dim}${COLORS.gray} >> NEURAL PATHWAYS: ACTIVE${COLORS.reset}\n`);
493
+ process.stderr.write(`${COLORS.dim}${COLORS.gray} >> SECURE CHANNELS: ESTABLISHED${COLORS.reset}\n`);
494
+ process.stderr.write(`${COLORS.dim}${COLORS.gray} >> AI PROTOCOLS: LOADED${COLORS.reset}\n`);
495
+ process.stderr.write(`${COLORS.purple} ${'▓'.repeat(58)}${COLORS.reset}\n\n`);
496
+ }
497
+ }
498
+ /**
499
+ * Convenience export for existing code
500
+ */
501
+ export async function orchestrateBootSequence() {
502
+ const orchestrator = new BootOrchestrator();
503
+ return orchestrator.boot();
504
+ }
505
+ //# sourceMappingURL=boot-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-orchestrator.js","sourceRoot":"","sources":["../src/boot-orchestrator.ts"],"names":[],"mappings":"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"}