@calltelemetry/cli 0.3.2 → 0.3.4
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/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/bundle.d.ts +1 -0
- package/dist/lib/bundle.d.ts.map +1 -1
- package/dist/lib/bundle.js +46 -19
- package/dist/lib/bundle.js.map +1 -1
- package/dist/lib/certs.js +3 -3
- package/dist/lib/certs.js.map +1 -1
- package/dist/lib/compose.d.ts.map +1 -1
- package/dist/lib/compose.js +17 -9
- package/dist/lib/compose.js.map +1 -1
- package/dist/lib/exec.d.ts +31 -0
- package/dist/lib/exec.d.ts.map +1 -0
- package/dist/lib/exec.js +63 -0
- package/dist/lib/exec.js.map +1 -0
- package/dist/lib/log.d.ts +23 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +52 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/system.d.ts +20 -0
- package/dist/lib/system.d.ts.map +1 -1
- package/dist/lib/system.js +52 -4
- package/dist/lib/system.js.map +1 -1
- package/dist/lib/update.d.ts +1 -1
- package/dist/lib/update.d.ts.map +1 -1
- package/dist/lib/update.js +14 -5
- package/dist/lib/update.js.map +1 -1
- package/dist/ui/components/AppShell.d.ts +4 -1
- package/dist/ui/components/AppShell.d.ts.map +1 -1
- package/dist/ui/components/AppShell.js +4 -3
- package/dist/ui/components/AppShell.js.map +1 -1
- package/dist/ui/components/LogLevelBadge.d.ts +7 -0
- package/dist/ui/components/LogLevelBadge.d.ts.map +1 -0
- package/dist/ui/components/LogLevelBadge.js +14 -0
- package/dist/ui/components/LogLevelBadge.js.map +1 -0
- package/dist/ui/components/MeterBar.d.ts +15 -0
- package/dist/ui/components/MeterBar.d.ts.map +1 -0
- package/dist/ui/components/MeterBar.js +17 -0
- package/dist/ui/components/MeterBar.js.map +1 -0
- package/dist/ui/components/StepList.d.ts +9 -1
- package/dist/ui/components/StepList.d.ts.map +1 -1
- package/dist/ui/components/StepList.js +6 -2
- package/dist/ui/components/StepList.js.map +1 -1
- package/dist/ui/components/index.d.ts +2 -0
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +2 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/hooks/index.d.ts +2 -1
- package/dist/ui/hooks/index.d.ts.map +1 -1
- package/dist/ui/hooks/index.js +1 -0
- package/dist/ui/hooks/index.js.map +1 -1
- package/dist/ui/hooks/useLogLevel.d.ts +12 -0
- package/dist/ui/hooks/useLogLevel.d.ts.map +1 -0
- package/dist/ui/hooks/useLogLevel.js +19 -0
- package/dist/ui/hooks/useLogLevel.js.map +1 -0
- package/dist/ui/hooks/useStepRunner.d.ts +14 -1
- package/dist/ui/hooks/useStepRunner.d.ts.map +1 -1
- package/dist/ui/hooks/useStepRunner.js +24 -2
- package/dist/ui/hooks/useStepRunner.js.map +1 -1
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +22 -10
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/ServicesView.d.ts.map +1 -1
- package/dist/ui/views/ServicesView.js +8 -10
- package/dist/ui/views/ServicesView.js.map +1 -1
- package/dist/ui/views/StatusView.d.ts.map +1 -1
- package/dist/ui/views/StatusView.js +17 -15
- package/dist/ui/views/StatusView.js.map +1 -1
- package/dist/ui/views/UpdateView.d.ts.map +1 -1
- package/dist/ui/views/UpdateView.js +70 -18
- package/dist/ui/views/UpdateView.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/system.d.ts
CHANGED
|
@@ -9,4 +9,24 @@ export declare function checkDiskSpace(path?: string, requiredFreePercent?: numb
|
|
|
9
9
|
}>;
|
|
10
10
|
export declare function getDockerVersion(): Promise<number | null>;
|
|
11
11
|
export declare function getSystemStats(): Promise<string>;
|
|
12
|
+
export declare function formatBytes(bytes: number): string;
|
|
13
|
+
export interface SystemMetrics {
|
|
14
|
+
ram: {
|
|
15
|
+
usedBytes: number;
|
|
16
|
+
totalBytes: number;
|
|
17
|
+
percent: number;
|
|
18
|
+
label: string;
|
|
19
|
+
};
|
|
20
|
+
disk: {
|
|
21
|
+
usedPercent: number;
|
|
22
|
+
label: string;
|
|
23
|
+
};
|
|
24
|
+
cpu: {
|
|
25
|
+
cores: number;
|
|
26
|
+
load1m: number;
|
|
27
|
+
percent: number;
|
|
28
|
+
label: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare function getSystemMetrics(): Promise<SystemMetrics>;
|
|
12
32
|
//# sourceMappingURL=system.d.ts.map
|
package/dist/lib/system.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ,CAAC,UAAU,SAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAI3F;AAED,wBAAsB,cAAc,CAAC,IAAI,SAAM,EAAE,mBAAmB,SAAK,GAAG,OAAO,CAAC;IAClF,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAeD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS/D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAwBtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CA4C/D"}
|
package/dist/lib/system.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
2
|
import os from 'node:os';
|
|
3
|
+
import { debug } from './log.js';
|
|
3
4
|
export async function checkRam(requiredMb = 7168) {
|
|
4
5
|
const totalBytes = os.totalmem();
|
|
5
6
|
const totalMb = Math.floor(totalBytes / 1024 / 1024);
|
|
@@ -16,7 +17,8 @@ export async function checkDiskSpace(path = '/', requiredFreePercent = 10) {
|
|
|
16
17
|
const freePercent = 100 - usedPercent;
|
|
17
18
|
return { ok: freePercent >= requiredFreePercent, usedPercent, freePercent };
|
|
18
19
|
}
|
|
19
|
-
catch {
|
|
20
|
+
catch (err) {
|
|
21
|
+
debug(`df command failed: ${err.message}`);
|
|
20
22
|
return { ok: false, usedPercent: 100, freePercent: 0 };
|
|
21
23
|
}
|
|
22
24
|
}
|
|
@@ -26,7 +28,8 @@ export async function getDockerVersion() {
|
|
|
26
28
|
const match = stdout.match(/(\d+)\.\d+/);
|
|
27
29
|
return match ? parseInt(match[1], 10) : null;
|
|
28
30
|
}
|
|
29
|
-
catch {
|
|
31
|
+
catch (err) {
|
|
32
|
+
debug(`Docker version check failed: ${err.message}`);
|
|
30
33
|
return null;
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -48,14 +51,59 @@ export async function getSystemStats() {
|
|
|
48
51
|
diskStr = `DISK ${parts[2]}/${parts[1]} (${parts[4]} used)`;
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
|
-
catch {
|
|
54
|
+
catch (err) {
|
|
55
|
+
debug(`df command failed in getSystemStats: ${err.message}`);
|
|
56
|
+
}
|
|
52
57
|
return `${cpuStr} | ${memStr} | ${diskStr}`;
|
|
53
58
|
}
|
|
54
|
-
function formatBytes(bytes) {
|
|
59
|
+
export function formatBytes(bytes) {
|
|
55
60
|
const gb = bytes / (1024 * 1024 * 1024);
|
|
56
61
|
if (gb >= 1)
|
|
57
62
|
return `${gb.toFixed(1)}GB`;
|
|
58
63
|
const mb = bytes / (1024 * 1024);
|
|
59
64
|
return `${mb.toFixed(0)}MB`;
|
|
60
65
|
}
|
|
66
|
+
export async function getSystemMetrics() {
|
|
67
|
+
const totalMem = os.totalmem();
|
|
68
|
+
const freeMem = os.freemem();
|
|
69
|
+
const usedMem = totalMem - freeMem;
|
|
70
|
+
const ramPercent = Math.round((usedMem / totalMem) * 100);
|
|
71
|
+
const cpus = os.cpus();
|
|
72
|
+
const load1m = os.loadavg()[0];
|
|
73
|
+
// Normalize load to a percentage of available cores
|
|
74
|
+
const cpuPercent = Math.min(100, Math.round((load1m / cpus.length) * 100));
|
|
75
|
+
let diskUsedPercent = 0;
|
|
76
|
+
let diskLabel = 'unavailable';
|
|
77
|
+
try {
|
|
78
|
+
const { stdout } = await execa('df', ['-h', '/']);
|
|
79
|
+
const lines = stdout.split('\n');
|
|
80
|
+
if (lines.length >= 2) {
|
|
81
|
+
const parts = lines[1].split(/\s+/);
|
|
82
|
+
const match = parts.find(p => p.endsWith('%'));
|
|
83
|
+
diskUsedPercent = match ? parseInt(match, 10) : 0;
|
|
84
|
+
diskLabel = `${parts[2]}/${parts[1]}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// leave defaults
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
ram: {
|
|
92
|
+
usedBytes: usedMem,
|
|
93
|
+
totalBytes: totalMem,
|
|
94
|
+
percent: ramPercent,
|
|
95
|
+
label: `${formatBytes(usedMem)}/${formatBytes(totalMem)}`,
|
|
96
|
+
},
|
|
97
|
+
disk: {
|
|
98
|
+
usedPercent: diskUsedPercent,
|
|
99
|
+
label: diskLabel,
|
|
100
|
+
},
|
|
101
|
+
cpu: {
|
|
102
|
+
cores: cpus.length,
|
|
103
|
+
load1m,
|
|
104
|
+
percent: cpuPercent,
|
|
105
|
+
label: `${cpus.length} cores, load ${load1m.toFixed(1)}`,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
61
109
|
//# sourceMappingURL=system.js.map
|
package/dist/lib/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/update.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare function backupCompose(): Promise<string>;
|
|
|
6
6
|
export declare function applyAndRestart(): Promise<void>;
|
|
7
7
|
/** Pin PostgreSQL version if currently on < 17 to prevent accidental upgrades */
|
|
8
8
|
export declare function postgresVersionGuard(): Promise<string | null>;
|
|
9
|
-
/** Run docker system prune */
|
|
9
|
+
/** Run docker system prune — logs warning on failure instead of swallowing */
|
|
10
10
|
export declare function dockerCleanup(): Promise<void>;
|
|
11
11
|
/** Pull images from a compose file (piped, no stdout inherit) */
|
|
12
12
|
export declare function pullImages(composeFilePath: string): Promise<string[]>;
|
package/dist/lib/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AASA,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,qEAAqE;AACrE,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAUrD;AAED,2DAA2D;AAC3D,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAarD;AAED,iFAAiF;AACjF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAanE;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnD;AAED,iEAAiE;AACjE,wBAAsB,UAAU,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM3E"}
|
package/dist/lib/update.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { execa } from 'execa';
|
|
2
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
2
|
import { copyFile, mkdir, rename } from 'node:fs/promises';
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
import { getPaths } from './paths.js';
|
|
6
5
|
import { composeUp } from './compose.js';
|
|
7
6
|
import { setPostgresVersion } from './postgres.js';
|
|
7
|
+
import { exec } from './exec.js';
|
|
8
|
+
import { debug } from './log.js';
|
|
8
9
|
/** Get current deployed version from docker-compose.yml */
|
|
9
10
|
export function getCurrentVersion() {
|
|
10
11
|
const { composeFile } = getPaths();
|
|
@@ -32,9 +33,12 @@ export async function applyAndRestart() {
|
|
|
32
33
|
const tempFile = join(installDir, 'temp-docker-compose.yml');
|
|
33
34
|
await rename(tempFile, composeFile);
|
|
34
35
|
try {
|
|
35
|
-
|
|
36
|
+
debug('Attempting systemctl restart docker-compose-app.service');
|
|
37
|
+
await exec('systemctl', ['restart', 'docker-compose-app.service']);
|
|
38
|
+
debug('systemctl restart succeeded');
|
|
36
39
|
}
|
|
37
|
-
catch {
|
|
40
|
+
catch (err) {
|
|
41
|
+
debug(`systemctl restart failed: ${err.message}, falling back to compose up`);
|
|
38
42
|
await composeUp(['-d'], { pipe: true });
|
|
39
43
|
}
|
|
40
44
|
}
|
|
@@ -52,9 +56,14 @@ export async function postgresVersionGuard() {
|
|
|
52
56
|
}
|
|
53
57
|
return null;
|
|
54
58
|
}
|
|
55
|
-
/** Run docker system prune */
|
|
59
|
+
/** Run docker system prune — logs warning on failure instead of swallowing */
|
|
56
60
|
export async function dockerCleanup() {
|
|
57
|
-
|
|
61
|
+
try {
|
|
62
|
+
await exec('docker', ['system', 'prune', '-f']);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
debug(`Docker cleanup failed (non-fatal): ${err.message}`);
|
|
66
|
+
}
|
|
58
67
|
}
|
|
59
68
|
/** Pull images from a compose file (piped, no stdout inherit) */
|
|
60
69
|
export async function pullImages(composeFilePath) {
|
package/dist/lib/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
+
import type { LogLevel } from '../../lib/log.js';
|
|
2
3
|
interface AppShellProps {
|
|
3
4
|
title?: string;
|
|
4
5
|
command?: string;
|
|
@@ -6,7 +7,9 @@ interface AppShellProps {
|
|
|
6
7
|
onBack?: () => void;
|
|
7
8
|
isComplete?: boolean;
|
|
8
9
|
breadcrumb?: string;
|
|
10
|
+
/** Current log level — shows a colored badge in the header when non-normal. */
|
|
11
|
+
logLevel?: LogLevel;
|
|
9
12
|
}
|
|
10
|
-
export declare function AppShell({ title, command, children, onBack, isComplete, breadcrumb, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function AppShell({ title, command, children, onBack, isComplete, breadcrumb, logLevel, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
11
14
|
export {};
|
|
12
15
|
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAA2B,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAA2B,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,GACT,EAAE,aAAa,2CAiDf"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { Box, Text, useApp, useInput } from 'ink';
|
|
4
|
-
|
|
4
|
+
import { LogLevelBadge } from './LogLevelBadge.js';
|
|
5
|
+
export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, }) {
|
|
5
6
|
const { exit } = useApp();
|
|
6
7
|
// Auto-exit when complete with no back handler (standalone mode)
|
|
7
8
|
useEffect(() => {
|
|
@@ -15,6 +16,6 @@ export function AppShell({ title = 'CallTelemetry CLI', command, children, onBac
|
|
|
15
16
|
onBack();
|
|
16
17
|
}
|
|
17
18
|
}, { isActive: Boolean(isComplete && onBack) });
|
|
18
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] })] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(Box, { flexDirection: "column", paddingTop: 1, children: children }), isComplete && onBack && (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "q Back" }) }))] }));
|
|
19
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(Box, { flexDirection: "column", paddingTop: 1, children: children }), isComplete && onBack && (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "q Back" }) }))] }));
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=AppShell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcnD,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,mBAAmB,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,GACM;IACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/B,gEAAgE;IAChE,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjD,MAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,CAC5C,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,eAAe,aAE9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,EACrC,UAAU,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,IAAQ,EAClD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,CACpC,8BACE,KAAC,IAAI,oBAAS,EACd,KAAC,aAAa,IAAC,KAAK,EAAE,QAAQ,GAAI,IACjC,CACJ,IACG,EACL,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACvC,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,YACtC,QAAQ,GACL,EACL,UAAU,IAAI,MAAM,IAAI,CACvB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,QAAQ,6BAAc,GACxB,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LogLevel } from '../../lib/log.js';
|
|
2
|
+
interface LogLevelBadgeProps {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
}
|
|
5
|
+
export declare function LogLevelBadge({ level }: LogLevelBadgeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=LogLevelBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogLevelBadge.d.ts","sourceRoot":"","sources":["../../../src/ui/components/LogLevelBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQjD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,kBAAkB,kDAM1D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from 'ink';
|
|
3
|
+
const BADGE = {
|
|
4
|
+
normal: { label: '', color: '' },
|
|
5
|
+
verbose: { label: ' VERBOSE ', color: 'yellow' },
|
|
6
|
+
debug: { label: ' DEBUG ', color: 'red' },
|
|
7
|
+
};
|
|
8
|
+
export function LogLevelBadge({ level }) {
|
|
9
|
+
if (level === 'normal')
|
|
10
|
+
return null;
|
|
11
|
+
const { label, color } = BADGE[level];
|
|
12
|
+
return (_jsx(Text, { bold: true, color: "black", backgroundColor: color, children: label }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=LogLevelBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogLevelBadge.js","sourceRoot":"","sources":["../../../src/ui/components/LogLevelBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B,MAAM,KAAK,GAAuD;IAChE,MAAM,EAAG,EAAE,KAAK,EAAE,EAAE,EAAa,KAAK,EAAE,EAAE,EAAE;IAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAI,KAAK,EAAE,QAAQ,EAAE;IAClD,KAAK,EAAI,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,KAAK,EAAE;CAChD,CAAC;AAMF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAsB;IACzD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,CACL,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,EAAC,eAAe,EAAE,KAAK,YAAG,KAAK,GAAQ,CAChE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface MeterBarProps {
|
|
2
|
+
/** Label shown before the bar (e.g. "RAM", "Disk") */
|
|
3
|
+
label: string;
|
|
4
|
+
/** 0-100 */
|
|
5
|
+
percent: number;
|
|
6
|
+
/** Width of the bar section in characters (default 24) */
|
|
7
|
+
width?: number;
|
|
8
|
+
/** Optional right-side detail text (e.g. "6.1/12.8 GB") */
|
|
9
|
+
detail?: string;
|
|
10
|
+
/** Thresholds for color: [warnAt, critAt] (default [70, 90]) */
|
|
11
|
+
thresholds?: [number, number];
|
|
12
|
+
}
|
|
13
|
+
export declare function MeterBar({ label, percent, width, detail, thresholds, }: MeterBarProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=MeterBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeterBar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MeterBar.tsx"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAQD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,KAAU,EACV,MAAM,EACN,UAAqB,GACtB,EAAE,aAAa,2CAgBf"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
function barColor(percent, thresholds) {
|
|
4
|
+
if (percent >= thresholds[1])
|
|
5
|
+
return 'red';
|
|
6
|
+
if (percent >= thresholds[0])
|
|
7
|
+
return 'yellow';
|
|
8
|
+
return 'green';
|
|
9
|
+
}
|
|
10
|
+
export function MeterBar({ label, percent, width = 24, detail, thresholds = [70, 90], }) {
|
|
11
|
+
const clamped = Math.max(0, Math.min(100, percent));
|
|
12
|
+
const filled = Math.round((clamped / 100) * width);
|
|
13
|
+
const empty = width - filled;
|
|
14
|
+
const color = barColor(clamped, thresholds);
|
|
15
|
+
return (_jsxs(Box, { children: [_jsx(Text, { bold: true, children: label.padEnd(6) }), _jsx(Text, { color: color, children: '█'.repeat(filled) }), _jsx(Text, { dimColor: true, children: '░'.repeat(empty) }), _jsx(Text, { children: " " }), _jsx(Text, { color: color, bold: true, children: `${Math.round(clamped)}%` }), detail && _jsx(Text, { dimColor: true, children: ` ${detail}` })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=MeterBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeterBar.js","sourceRoot":"","sources":["../../../src/ui/components/MeterBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAehC,SAAS,QAAQ,CAAC,OAAe,EAAE,UAA4B;IAC7D,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,KAAK,GAAG,EAAE,EACV,MAAM,EACN,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GACP;IACd,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE5C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAQ,EACnC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAQ,EAC/C,KAAC,IAAI,IAAC,QAAQ,kBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EACzC,KAAC,IAAI,oBAAS,EACd,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,kBAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAQ,EAC1D,MAAM,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,MAAM,EAAE,GAAQ,IAC5C,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -2,10 +2,18 @@ interface Step {
|
|
|
2
2
|
label: string;
|
|
3
3
|
status: 'done' | 'running' | 'pending' | 'error';
|
|
4
4
|
detail?: string;
|
|
5
|
+
output?: string[];
|
|
6
|
+
errorDetail?: {
|
|
7
|
+
message: string;
|
|
8
|
+
stderr?: string;
|
|
9
|
+
command?: string;
|
|
10
|
+
};
|
|
5
11
|
}
|
|
6
12
|
interface StepListProps {
|
|
7
13
|
steps: Step[];
|
|
14
|
+
/** When true, show output lines for all steps (not just errors). */
|
|
15
|
+
expanded?: boolean;
|
|
8
16
|
}
|
|
9
|
-
export declare function StepList({ steps }: StepListProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare function StepList({ steps, expanded }: StepListProps): import("react/jsx-runtime").JSX.Element;
|
|
10
18
|
export {};
|
|
11
19
|
//# sourceMappingURL=StepList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/StepList.tsx"],"names":[],"mappings":"AAGA,UAAU,IAAI;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"StepList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/StepList.tsx"],"names":[],"mappings":"AAGA,UAAU,IAAI;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,2CA6C1D"}
|
|
@@ -13,7 +13,11 @@ function StepIcon({ status }) {
|
|
|
13
13
|
return _jsx(Text, { dimColor: true, children: "\u25E6" });
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
export function StepList({ steps }) {
|
|
17
|
-
return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, children: steps.map((step, i) =>
|
|
16
|
+
export function StepList({ steps, expanded }) {
|
|
17
|
+
return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, children: steps.map((step, i) => {
|
|
18
|
+
const showOutput = step.output && step.output.length > 0 &&
|
|
19
|
+
(step.status === 'error' || step.status === 'running' || expanded);
|
|
20
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(StepIcon, { status: step.status }), _jsx(Text, { dimColor: step.status === 'pending', children: ` ${step.label}` }), step.detail && (_jsx(Box, { flexGrow: 1, justifyContent: "flex-end", children: _jsx(Text, { dimColor: true, children: step.detail }) }))] }), step.status === 'error' && step.errorDetail && (_jsxs(Box, { flexDirection: "column", paddingLeft: 4, children: [step.errorDetail.command && (_jsx(Text, { color: "red", dimColor: true, children: `cmd: ${step.errorDetail.command}` })), step.errorDetail.stderr && step.errorDetail.stderr !== step.errorDetail.message && (_jsx(Text, { color: "red", dimColor: true, children: `err: ${step.errorDetail.stderr}` }))] })), showOutput && (_jsx(Box, { flexDirection: "column", paddingLeft: 4, children: step.output.map((line, j) => (_jsx(Text, { dimColor: true, color: step.status === 'error' ? 'red' : undefined, children: `│ ${line}` }, j))) }))] }, i));
|
|
21
|
+
}) }));
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=StepList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepList.js","sourceRoot":"","sources":["../../../src/ui/components/StepList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"StepList.js","sourceRoot":"","sources":["../../../src/ui/components/StepList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AAoBrC,SAAS,QAAQ,CAAC,EAAE,MAAM,EAA8B;IACtD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,CAAC;QACtC,KAAK,SAAS;YACZ,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GAAO,CAAC;QAC9D,KAAK,OAAO;YACV,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,uBAAS,CAAC;QACpC,KAAK,SAAS;YACZ,OAAO,KAAC,IAAI,IAAC,QAAQ,6BAAS,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAiB;IACzD,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACtD,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC;YAErE,OAAO,CACL,MAAC,GAAG,IAAS,aAAa,EAAC,QAAQ,aAEjC,MAAC,GAAG,eACF,KAAC,QAAQ,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAI,EACjC,KAAC,IAAI,IAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,YAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAQ,EACnE,IAAI,CAAC,MAAM,IAAI,CACd,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,UAAU,YACzC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,MAAM,GAAQ,GAC/B,CACP,IACG,EAGL,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,IAAI,CAC9C,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,aACvC,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAC3B,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,kBAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAQ,CACvE,EACA,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAClF,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,kBAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAQ,CACtE,IACG,CACP,EAGA,UAAU,IAAI,CACb,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7B,KAAC,IAAI,IAAS,QAAQ,QAAC,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,YAAG,KAAK,IAAI,EAAE,IAA5E,CAAC,CAAmF,CAChG,CAAC,GACE,CACP,KA/BO,CAAC,CAgCL,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -13,4 +13,6 @@ export { Divider } from './Divider.js';
|
|
|
13
13
|
export { SelectMenu } from './SelectMenu.js';
|
|
14
14
|
export type { MenuItem } from '../types.js';
|
|
15
15
|
export { TextInput } from './TextInput.js';
|
|
16
|
+
export { MeterBar } from './MeterBar.js';
|
|
17
|
+
export { LogLevelBadge } from './LogLevelBadge.js';
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -12,4 +12,6 @@ export { Confirm } from './Confirm.js';
|
|
|
12
12
|
export { Divider } from './Divider.js';
|
|
13
13
|
export { SelectMenu } from './SelectMenu.js';
|
|
14
14
|
export { TextInput } from './TextInput.js';
|
|
15
|
+
export { MeterBar } from './MeterBar.js';
|
|
16
|
+
export { LogLevelBadge } from './LogLevelBadge.js';
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/ui/hooks/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { useAsyncTask } from "./useAsyncTask.js";
|
|
2
2
|
export type { AsyncTaskState } from "./useAsyncTask.js";
|
|
3
3
|
export { useStepRunner } from "./useStepRunner.js";
|
|
4
|
-
export type { Step, StepState } from "./useStepRunner.js";
|
|
4
|
+
export type { Step, StepState, StepContext } from "./useStepRunner.js";
|
|
5
5
|
export { useStreamingProcess } from "./useStreamingProcess.js";
|
|
6
6
|
export { usePolling } from "./usePolling.js";
|
|
7
7
|
export { useComposeLogs } from "./useComposeLogs.js";
|
|
8
8
|
export { useFinish } from "./useFinish.js";
|
|
9
|
+
export { useLogLevel } from "./useLogLevel.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/ui/hooks/index.js
CHANGED
|
@@ -4,4 +4,5 @@ export { useStreamingProcess } from "./useStreamingProcess.js";
|
|
|
4
4
|
export { usePolling } from "./usePolling.js";
|
|
5
5
|
export { useComposeLogs } from "./useComposeLogs.js";
|
|
6
6
|
export { useFinish } from "./useFinish.js";
|
|
7
|
+
export { useLogLevel } from "./useLogLevel.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LogLevel } from '../../lib/log.js';
|
|
2
|
+
/**
|
|
3
|
+
* React hook that syncs with the global log level from lib/log.ts.
|
|
4
|
+
*
|
|
5
|
+
* Returns the current level and a cycle() function that advances
|
|
6
|
+
* normal → verbose → debug → normal.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useLogLevel(): {
|
|
9
|
+
level: LogLevel;
|
|
10
|
+
cycle: () => void;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useLogLevel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLogLevel.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useLogLevel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAYpE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { getLogLevel, cycleLogLevel, onLogLevelChange } from '../../lib/log.js';
|
|
3
|
+
/**
|
|
4
|
+
* React hook that syncs with the global log level from lib/log.ts.
|
|
5
|
+
*
|
|
6
|
+
* Returns the current level and a cycle() function that advances
|
|
7
|
+
* normal → verbose → debug → normal.
|
|
8
|
+
*/
|
|
9
|
+
export function useLogLevel() {
|
|
10
|
+
const [level, setLevel] = useState(getLogLevel);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
return onLogLevelChange(setLevel);
|
|
13
|
+
}, []);
|
|
14
|
+
const cycle = useCallback(() => {
|
|
15
|
+
cycleLogLevel();
|
|
16
|
+
}, []);
|
|
17
|
+
return { level, cycle };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=useLogLevel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLogLevel.js","sourceRoot":"","sources":["../../../src/ui/hooks/useLogLevel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGhF;;;;;GAKG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC;IAE1D,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
+
/** Context passed to each step's run() for emitting log lines. */
|
|
2
|
+
export interface StepContext {
|
|
3
|
+
/** Emit a log line that will be captured in the step's output array. */
|
|
4
|
+
log: (line: string) => void;
|
|
5
|
+
}
|
|
1
6
|
export interface Step {
|
|
2
7
|
label: string;
|
|
3
|
-
run: () => Promise<string | void>;
|
|
8
|
+
run: (ctx?: StepContext) => Promise<string | void>;
|
|
4
9
|
}
|
|
5
10
|
export interface StepState {
|
|
6
11
|
label: string;
|
|
7
12
|
status: "done" | "running" | "pending" | "error";
|
|
8
13
|
detail?: string;
|
|
14
|
+
/** Captured log lines emitted via ctx.log() during execution. */
|
|
15
|
+
output?: string[];
|
|
16
|
+
/** Structured error context (populated from ExecError when available). */
|
|
17
|
+
errorDetail?: {
|
|
18
|
+
message: string;
|
|
19
|
+
stderr?: string;
|
|
20
|
+
command?: string;
|
|
21
|
+
};
|
|
9
22
|
}
|
|
10
23
|
export declare function useStepRunner(steps: Step[]): {
|
|
11
24
|
states: StepState[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStepRunner.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useStepRunner.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"useStepRunner.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useStepRunner.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG;IAC5C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB,CA0FA"}
|
|
@@ -12,21 +12,43 @@ export function useStepRunner(steps) {
|
|
|
12
12
|
setStates(currentSteps.map((s) => ({ label: s.label, status: "pending" })));
|
|
13
13
|
const execute = async () => {
|
|
14
14
|
for (let i = 0; i < currentSteps.length; i++) {
|
|
15
|
+
// Accumulator for log lines emitted by this step
|
|
16
|
+
const outputLines = [];
|
|
17
|
+
const ctx = {
|
|
18
|
+
log: (line) => {
|
|
19
|
+
outputLines.push(line);
|
|
20
|
+
// Update state so the UI can show live output
|
|
21
|
+
setStates((prev) => prev.map((s, idx) => idx === i ? { ...s, output: [...outputLines] } : s));
|
|
22
|
+
},
|
|
23
|
+
};
|
|
15
24
|
setStates((prev) => prev.map((s, idx) => idx === i ? { ...s, status: "running" } : s));
|
|
16
25
|
try {
|
|
17
|
-
const detail = await currentSteps[i].run();
|
|
26
|
+
const detail = await currentSteps[i].run(ctx);
|
|
18
27
|
setStates((prev) => prev.map((s, idx) => idx === i
|
|
19
28
|
? {
|
|
20
29
|
...s,
|
|
21
30
|
status: "done",
|
|
22
31
|
detail: detail ?? undefined,
|
|
32
|
+
output: outputLines.length > 0 ? outputLines : undefined,
|
|
23
33
|
}
|
|
24
34
|
: s));
|
|
25
35
|
}
|
|
26
36
|
catch (err) {
|
|
27
37
|
const message = err instanceof Error ? err.message : String(err);
|
|
38
|
+
// Extract structured error info from ExecError if available
|
|
39
|
+
const errorDetail = {
|
|
40
|
+
message,
|
|
41
|
+
stderr: err.stderr ?? undefined,
|
|
42
|
+
command: err.command ?? undefined,
|
|
43
|
+
};
|
|
28
44
|
setStates((prev) => prev.map((s, idx) => idx === i
|
|
29
|
-
? {
|
|
45
|
+
? {
|
|
46
|
+
...s,
|
|
47
|
+
status: "error",
|
|
48
|
+
detail: message,
|
|
49
|
+
output: outputLines.length > 0 ? outputLines : undefined,
|
|
50
|
+
errorDetail,
|
|
51
|
+
}
|
|
30
52
|
: s));
|
|
31
53
|
setIsRunning(false);
|
|
32
54
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStepRunner.js","sourceRoot":"","sources":["../../../src/ui/hooks/useStepRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useStepRunner.js","sourceRoot":"","sources":["../../../src/ui/hooks/useStepRunner.ts"],"names":[],"mappings":"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"}
|