@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.
Files changed (72) hide show
  1. package/dist/index.js +7 -2
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/bundle.d.ts +1 -0
  4. package/dist/lib/bundle.d.ts.map +1 -1
  5. package/dist/lib/bundle.js +46 -19
  6. package/dist/lib/bundle.js.map +1 -1
  7. package/dist/lib/certs.js +3 -3
  8. package/dist/lib/certs.js.map +1 -1
  9. package/dist/lib/compose.d.ts.map +1 -1
  10. package/dist/lib/compose.js +17 -9
  11. package/dist/lib/compose.js.map +1 -1
  12. package/dist/lib/exec.d.ts +31 -0
  13. package/dist/lib/exec.d.ts.map +1 -0
  14. package/dist/lib/exec.js +63 -0
  15. package/dist/lib/exec.js.map +1 -0
  16. package/dist/lib/log.d.ts +23 -0
  17. package/dist/lib/log.d.ts.map +1 -0
  18. package/dist/lib/log.js +52 -0
  19. package/dist/lib/log.js.map +1 -0
  20. package/dist/lib/system.d.ts +20 -0
  21. package/dist/lib/system.d.ts.map +1 -1
  22. package/dist/lib/system.js +52 -4
  23. package/dist/lib/system.js.map +1 -1
  24. package/dist/lib/update.d.ts +1 -1
  25. package/dist/lib/update.d.ts.map +1 -1
  26. package/dist/lib/update.js +14 -5
  27. package/dist/lib/update.js.map +1 -1
  28. package/dist/ui/components/AppShell.d.ts +4 -1
  29. package/dist/ui/components/AppShell.d.ts.map +1 -1
  30. package/dist/ui/components/AppShell.js +4 -3
  31. package/dist/ui/components/AppShell.js.map +1 -1
  32. package/dist/ui/components/LogLevelBadge.d.ts +7 -0
  33. package/dist/ui/components/LogLevelBadge.d.ts.map +1 -0
  34. package/dist/ui/components/LogLevelBadge.js +14 -0
  35. package/dist/ui/components/LogLevelBadge.js.map +1 -0
  36. package/dist/ui/components/MeterBar.d.ts +15 -0
  37. package/dist/ui/components/MeterBar.d.ts.map +1 -0
  38. package/dist/ui/components/MeterBar.js +17 -0
  39. package/dist/ui/components/MeterBar.js.map +1 -0
  40. package/dist/ui/components/StepList.d.ts +9 -1
  41. package/dist/ui/components/StepList.d.ts.map +1 -1
  42. package/dist/ui/components/StepList.js +6 -2
  43. package/dist/ui/components/StepList.js.map +1 -1
  44. package/dist/ui/components/index.d.ts +2 -0
  45. package/dist/ui/components/index.d.ts.map +1 -1
  46. package/dist/ui/components/index.js +2 -0
  47. package/dist/ui/components/index.js.map +1 -1
  48. package/dist/ui/hooks/index.d.ts +2 -1
  49. package/dist/ui/hooks/index.d.ts.map +1 -1
  50. package/dist/ui/hooks/index.js +1 -0
  51. package/dist/ui/hooks/index.js.map +1 -1
  52. package/dist/ui/hooks/useLogLevel.d.ts +12 -0
  53. package/dist/ui/hooks/useLogLevel.d.ts.map +1 -0
  54. package/dist/ui/hooks/useLogLevel.js +19 -0
  55. package/dist/ui/hooks/useLogLevel.js.map +1 -0
  56. package/dist/ui/hooks/useStepRunner.d.ts +14 -1
  57. package/dist/ui/hooks/useStepRunner.d.ts.map +1 -1
  58. package/dist/ui/hooks/useStepRunner.js +24 -2
  59. package/dist/ui/hooks/useStepRunner.js.map +1 -1
  60. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  61. package/dist/ui/views/MainMenu.js +22 -10
  62. package/dist/ui/views/MainMenu.js.map +1 -1
  63. package/dist/ui/views/ServicesView.d.ts.map +1 -1
  64. package/dist/ui/views/ServicesView.js +8 -10
  65. package/dist/ui/views/ServicesView.js.map +1 -1
  66. package/dist/ui/views/StatusView.d.ts.map +1 -1
  67. package/dist/ui/views/StatusView.js +17 -15
  68. package/dist/ui/views/StatusView.js.map +1 -1
  69. package/dist/ui/views/UpdateView.d.ts.map +1 -1
  70. package/dist/ui/views/UpdateView.js +70 -18
  71. package/dist/ui/views/UpdateView.js.map +1 -1
  72. package/package.json +1 -1
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"AAGA,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,CAcD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ/D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAsBtD"}
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"}
@@ -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 { /* ignore */ }
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
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/lib/system.ts"],"names":[],"mappings":"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"}
@@ -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[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAQA,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,CAUrD;AAED,iFAAiF;AACjF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAanE;AAED,8BAA8B;AAC9B,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED,iEAAiE;AACjE,wBAAsB,UAAU,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM3E"}
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"}
@@ -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
- await execa('systemctl', ['restart', 'docker-compose-app.service']);
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
- await execa('docker', ['system', 'prune', '-f']).catch(() => { });
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"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"}
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,GACX,EAAE,aAAa,2CA2Cf"}
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
- export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, }) {
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;AAYlD,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,mBAAmB,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,GACI;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,IAC/C,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"}
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;CACjB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAeD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,2CAgBhD"}
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) => (_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 }) }))] }, 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;AAYrC,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,EAAiB;IAC/C,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,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,KAPO,CAAC,CAQL,CACP,CAAC,GACE,CACP,CAAC;AACJ,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"}
@@ -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;AAE1D,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.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"}
@@ -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,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACnC;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;CACjB;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,CA6DA"}
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
- ? { ...s, status: "error", detail: message }
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":"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"}
1
+ {"version":3,"file":"useStepRunner.js","sourceRoot":"","sources":["../../../src/ui/hooks/useStepRunner.ts"],"names":[],"mappings":"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"}