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.
- package/apps/gateway/package-lock.json +3 -3
- package/dist/boot-orchestrator.d.ts +83 -0
- package/dist/boot-orchestrator.d.ts.map +1 -0
- package/dist/boot-orchestrator.js +505 -0
- package/dist/boot-orchestrator.js.map +1 -0
- package/dist/index.js +33 -12
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -4953,9 +4953,9 @@
|
|
|
4953
4953
|
}
|
|
4954
4954
|
},
|
|
4955
4955
|
"node_modules/electron-to-chromium": {
|
|
4956
|
-
"version": "1.5.
|
|
4957
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.
|
|
4958
|
-
"integrity": "sha512-
|
|
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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"}
|