@calltelemetry/cli 0.3.3 → 0.3.5

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 (69) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/lib/log.d.ts +13 -5
  3. package/dist/lib/log.d.ts.map +1 -1
  4. package/dist/lib/log.js +34 -10
  5. package/dist/lib/log.js.map +1 -1
  6. package/dist/lib/rpc.d.ts +7 -0
  7. package/dist/lib/rpc.d.ts.map +1 -1
  8. package/dist/lib/rpc.js +21 -0
  9. package/dist/lib/rpc.js.map +1 -1
  10. package/dist/lib/system.d.ts +20 -0
  11. package/dist/lib/system.d.ts.map +1 -1
  12. package/dist/lib/system.js +44 -1
  13. package/dist/lib/system.js.map +1 -1
  14. package/dist/ui/components/AppShell.d.ts +4 -1
  15. package/dist/ui/components/AppShell.d.ts.map +1 -1
  16. package/dist/ui/components/AppShell.js +4 -3
  17. package/dist/ui/components/AppShell.js.map +1 -1
  18. package/dist/ui/components/LogLevelBadge.d.ts +7 -0
  19. package/dist/ui/components/LogLevelBadge.d.ts.map +1 -0
  20. package/dist/ui/components/LogLevelBadge.js +14 -0
  21. package/dist/ui/components/LogLevelBadge.js.map +1 -0
  22. package/dist/ui/components/MeterBar.d.ts +15 -0
  23. package/dist/ui/components/MeterBar.d.ts.map +1 -0
  24. package/dist/ui/components/MeterBar.js +17 -0
  25. package/dist/ui/components/MeterBar.js.map +1 -0
  26. package/dist/ui/components/StepList.d.ts.map +1 -1
  27. package/dist/ui/components/StepList.js +5 -1
  28. package/dist/ui/components/StepList.js.map +1 -1
  29. package/dist/ui/components/index.d.ts +2 -0
  30. package/dist/ui/components/index.d.ts.map +1 -1
  31. package/dist/ui/components/index.js +2 -0
  32. package/dist/ui/components/index.js.map +1 -1
  33. package/dist/ui/hooks/index.d.ts +1 -0
  34. package/dist/ui/hooks/index.d.ts.map +1 -1
  35. package/dist/ui/hooks/index.js +1 -0
  36. package/dist/ui/hooks/index.js.map +1 -1
  37. package/dist/ui/hooks/useLogLevel.d.ts +12 -0
  38. package/dist/ui/hooks/useLogLevel.d.ts.map +1 -0
  39. package/dist/ui/hooks/useLogLevel.js +19 -0
  40. package/dist/ui/hooks/useLogLevel.js.map +1 -0
  41. package/dist/ui/views/DbSizeView.d.ts.map +1 -1
  42. package/dist/ui/views/DbSizeView.js +4 -3
  43. package/dist/ui/views/DbSizeView.js.map +1 -1
  44. package/dist/ui/views/DbTablesView.d.ts.map +1 -1
  45. package/dist/ui/views/DbTablesView.js +7 -4
  46. package/dist/ui/views/DbTablesView.js.map +1 -1
  47. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
  48. package/dist/ui/views/DiagDatabaseView.js +12 -6
  49. package/dist/ui/views/DiagDatabaseView.js.map +1 -1
  50. package/dist/ui/views/DockerStatusView.d.ts.map +1 -1
  51. package/dist/ui/views/DockerStatusView.js +12 -5
  52. package/dist/ui/views/DockerStatusView.js.map +1 -1
  53. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  54. package/dist/ui/views/MainMenu.js +26 -10
  55. package/dist/ui/views/MainMenu.js.map +1 -1
  56. package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -1
  57. package/dist/ui/views/MigrateHistoryView.js +7 -4
  58. package/dist/ui/views/MigrateHistoryView.js.map +1 -1
  59. package/dist/ui/views/UpdateView.js +8 -8
  60. package/dist/ui/views/UpdateView.js.map +1 -1
  61. package/dist/utils/parseDocker.d.ts +17 -0
  62. package/dist/utils/parseDocker.d.ts.map +1 -0
  63. package/dist/utils/parseDocker.js +67 -0
  64. package/dist/utils/parseDocker.js.map +1 -0
  65. package/dist/utils/parsePsql.d.ts +30 -0
  66. package/dist/utils/parsePsql.d.ts.map +1 -0
  67. package/dist/utils/parsePsql.js +75 -0
  68. package/dist/utils/parsePsql.js.map +1 -0
  69. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const VERSION = '0.3.3';
2
+ const VERSION = '0.3.5';
3
3
  import { Command } from 'commander';
4
4
  import { registerStatusCommand } from './commands/status.js';
5
5
  import { registerUpdateCommand } from './commands/update.js';
package/dist/lib/log.d.ts CHANGED
@@ -1,15 +1,23 @@
1
1
  /**
2
- * Minimal logging utility for verbose/debug output.
2
+ * Logging utility with three levels: normal, verbose, debug.
3
3
  *
4
4
  * All output uses console.error so it doesn't interfere with piped stdout.
5
- * In TUI mode, verbose state can be toggled at runtime.
5
+ * In TUI mode the level can be cycled at runtime via the `d` key.
6
6
  */
7
+ export type LogLevel = 'normal' | 'verbose' | 'debug';
8
+ export declare function setLogLevel(level: LogLevel): void;
9
+ export declare function getLogLevel(): LogLevel;
10
+ /** Cycle to the next log level. Returns the new level. */
11
+ export declare function cycleLogLevel(): LogLevel;
12
+ /** Subscribe to level changes. Returns an unsubscribe function. */
13
+ export declare function onLogLevelChange(fn: (level: LogLevel) => void): () => void;
14
+ /** Backward-compatible setter — `true` maps to 'verbose'. */
7
15
  export declare function setVerbose(v: boolean): void;
8
16
  export declare function isVerbose(): boolean;
9
- /** Log a debug message (only when verbose is on). */
17
+ /** Log a debug message (visible at verbose or debug level). */
10
18
  export declare function debug(msg: string): void;
11
- /** Log the command being executed (only when verbose is on). */
19
+ /** Log the command being executed (visible only at debug level). */
12
20
  export declare function trace(cmd: string, args: string[]): void;
13
- /** Log a warning that's always shown (not gated by verbose). */
21
+ /** Log a warning always shown regardless of level. */
14
22
  export declare function warnLog(msg: string): void;
15
23
  //# sourceMappingURL=log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE3C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,qDAAqD;AACrD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAEvD;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAStD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAGjD;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,IAAI,QAAQ,CAKxC;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAG1E;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE3C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAEvD;AAED,wDAAwD;AACxD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC"}
package/dist/lib/log.js CHANGED
@@ -1,27 +1,51 @@
1
1
  /**
2
- * Minimal logging utility for verbose/debug output.
2
+ * Logging utility with three levels: normal, verbose, debug.
3
3
  *
4
4
  * All output uses console.error so it doesn't interfere with piped stdout.
5
- * In TUI mode, verbose state can be toggled at runtime.
5
+ * In TUI mode the level can be cycled at runtime via the `d` key.
6
6
  */
7
- let verbose = false;
7
+ const LOG_LEVELS = ['normal', 'verbose', 'debug'];
8
+ let currentLevel = 'normal';
9
+ /** Listeners notified when the level changes (used by the TUI hook). */
10
+ const listeners = new Set();
11
+ export function setLogLevel(level) {
12
+ currentLevel = level;
13
+ for (const fn of listeners)
14
+ fn(level);
15
+ }
16
+ export function getLogLevel() {
17
+ return currentLevel;
18
+ }
19
+ /** Cycle to the next log level. Returns the new level. */
20
+ export function cycleLogLevel() {
21
+ const idx = LOG_LEVELS.indexOf(currentLevel);
22
+ const next = LOG_LEVELS[(idx + 1) % LOG_LEVELS.length];
23
+ setLogLevel(next);
24
+ return next;
25
+ }
26
+ /** Subscribe to level changes. Returns an unsubscribe function. */
27
+ export function onLogLevelChange(fn) {
28
+ listeners.add(fn);
29
+ return () => { listeners.delete(fn); };
30
+ }
31
+ /** Backward-compatible setter — `true` maps to 'verbose'. */
8
32
  export function setVerbose(v) {
9
- verbose = v;
33
+ setLogLevel(v ? 'verbose' : 'normal');
10
34
  }
11
35
  export function isVerbose() {
12
- return verbose;
36
+ return currentLevel !== 'normal';
13
37
  }
14
- /** Log a debug message (only when verbose is on). */
38
+ /** Log a debug message (visible at verbose or debug level). */
15
39
  export function debug(msg) {
16
- if (verbose)
40
+ if (currentLevel !== 'normal')
17
41
  console.error(`[debug] ${msg}`);
18
42
  }
19
- /** Log the command being executed (only when verbose is on). */
43
+ /** Log the command being executed (visible only at debug level). */
20
44
  export function trace(cmd, args) {
21
- if (verbose)
45
+ if (currentLevel === 'debug')
22
46
  console.error(`[exec] ${cmd} ${args.join(' ')}`);
23
47
  }
24
- /** Log a warning that's always shown (not gated by verbose). */
48
+ /** Log a warning always shown regardless of level. */
25
49
  export function warnLog(msg) {
26
50
  console.error(`[warn] ${msg}`);
27
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,IAAc;IAC/C,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,GAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAE9D,IAAI,YAAY,GAAa,QAAQ,CAAC;AAEtC,wEAAwE;AACxE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEvD,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,EAAE,IAAI,SAAS;QAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAE,CAAC;IACxD,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,EAA6B;IAC5D,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,YAAY,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,IAAc;IAC/C,IAAI,YAAY,KAAK,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC"}
package/dist/lib/rpc.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  export declare function rpc(code: string): Promise<string>;
2
2
  export declare function rpcOk(): Promise<boolean>;
3
3
  export declare function healthCheck(): Promise<boolean>;
4
+ export interface AppHealthDetail {
5
+ api: boolean;
6
+ rpc: boolean;
7
+ dbConnected: boolean;
8
+ overall: 'healthy' | 'degraded' | 'down';
9
+ }
10
+ export declare function getAppHealth(): Promise<AppHealthDetail>;
4
11
  export declare function getReleaseBin(): string;
5
12
  //# sourceMappingURL=rpc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvD;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9C;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvD;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9C;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CAC1C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAmB7D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/lib/rpc.js CHANGED
@@ -22,6 +22,27 @@ export async function healthCheck() {
22
22
  return false;
23
23
  }
24
24
  }
25
+ export async function getAppHealth() {
26
+ const [api, rpc_ok, db] = await Promise.all([
27
+ healthCheck(),
28
+ rpcOk(),
29
+ (async () => {
30
+ try {
31
+ const out = await rpc(':ok = Ecto.Adapters.SQL.query!(Cdrcisco.Repo, "SELECT 1") |> elem(0) |> IO.inspect()');
32
+ return out.includes('ok');
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ })(),
38
+ ]);
39
+ let overall = 'down';
40
+ if (api && rpc_ok && db)
41
+ overall = 'healthy';
42
+ else if (api || rpc_ok)
43
+ overall = 'degraded';
44
+ return { api, rpc: rpc_ok, dbConnected: db, overall };
45
+ }
25
46
  export function getReleaseBin() {
26
47
  return RELEASE_BIN;
27
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,+BAA+B,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,+BAA+B,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,WAAW,EAAE;QACb,KAAK,EAAE;QACP,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,sFAAsF,CAAC,CAAC;gBAC9G,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE;KACL,CAAC,CAAC;IAEH,IAAI,OAAO,GAA+B,MAAM,CAAC;IACjD,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;QAAE,OAAO,GAAG,SAAS,CAAC;SACxC,IAAI,GAAG,IAAI,MAAM;QAAE,OAAO,GAAG,UAAU,CAAC;IAE7C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -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":"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"}
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"}
@@ -56,11 +56,54 @@ export async function getSystemStats() {
56
56
  }
57
57
  return `${cpuStr} | ${memStr} | ${diskStr}`;
58
58
  }
59
- function formatBytes(bytes) {
59
+ export function formatBytes(bytes) {
60
60
  const gb = bytes / (1024 * 1024 * 1024);
61
61
  if (gb >= 1)
62
62
  return `${gb.toFixed(1)}GB`;
63
63
  const mb = bytes / (1024 * 1024);
64
64
  return `${mb.toFixed(0)}MB`;
65
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
+ }
66
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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"}
@@ -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"}
@@ -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;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,2CAwC1D"}
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"}
@@ -14,6 +14,10 @@ function StepIcon({ status }) {
14
14
  }
15
15
  }
16
16
  export function StepList({ steps, expanded }) {
17
- return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, children: steps.map((step, i) => (_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}` }))] })), step.output && step.output.length > 0 && (step.status === 'error' || step.status === 'running' || expanded) && (_jsx(Box, { flexDirection: "column", paddingLeft: 4, children: step.output.map((line, j) => (_jsx(Text, { dimColor: true, children: `│ ${line}` }, j))) }))] }, i))) }));
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;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,CAAC,CACtB,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,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAC9G,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,KAAC,IAAI,IAAS,QAAQ,kBAAE,KAAK,IAAI,EAAE,IAAxB,CAAC,CAA+B,CAC5C,CAAC,GACE,CACP,KA/BO,CAAC,CAgCL,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"}
@@ -6,4 +6,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,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"}
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 +1 @@
1
- {"version":3,"file":"DbSizeView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DbSizeView.tsx"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,2CAqBrD"}
1
+ {"version":3,"file":"DbSizeView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DbSizeView.tsx"],"names":[],"mappings":"AAOA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,2CAuBrD"}
@@ -1,15 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { composeExec } from '../../lib/compose.js';
3
3
  import { DB_USER, DB_NAME, PG_ENV } from '../../lib/db.js';
4
- import { AppShell, Section, ShellOutput, Spinner, StatusLine } from '../components/index.js';
4
+ import { AppShell, Section, Spinner, StatusLine } from '../components/index.js';
5
5
  import { useAsyncTask } from '../hooks/index.js';
6
+ import { parsePsqlScalar } from '../../utils/parsePsql.js';
6
7
  export function DbSizeView({ onBack }) {
7
8
  const sizeTask = useAsyncTask(async () => {
8
9
  const result = await composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-c',
9
10
  `SELECT pg_size_pretty(pg_database_size('${DB_NAME}')) AS database_size;`], { env: PG_ENV, pipe: true });
10
- return (result.stdout ?? '').trim();
11
+ return parsePsqlScalar((result.stdout ?? '').trim());
11
12
  });
12
13
  const sizeDone = sizeTask.status === 'done' || sizeTask.status === 'error';
13
- return (_jsx(AppShell, { command: "ct db size", onBack: onBack, isComplete: sizeDone, children: _jsxs(Section, { title: "Database Size", children: [sizeTask.status === 'pending' && _jsx(Spinner, { label: "Querying database size..." }), sizeTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Could not query database size" }), sizeTask.status === 'done' && sizeTask.data && _jsx(ShellOutput, { content: sizeTask.data })] }) }));
14
+ return (_jsx(AppShell, { command: "ct db size", onBack: onBack, isComplete: sizeDone, children: _jsxs(Section, { title: "Database Size", children: [sizeTask.status === 'pending' && _jsx(Spinner, { label: "Querying database size..." }), sizeTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Could not query database size" }), sizeTask.status === 'done' && sizeTask.data && (_jsx(StatusLine, { status: "ok", label: `Database size: ${sizeTask.data}` }))] }) }));
14
15
  }
15
16
  //# sourceMappingURL=DbSizeView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DbSizeView.js","sourceRoot":"","sources":["../../../src/ui/views/DbSizeView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAmB;IAEpD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EACnC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;YAC1C,2CAA2C,OAAO,uBAAuB,CAAC,EAC3E,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC;IAE3E,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,YAAY,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,YACjE,MAAC,OAAO,IAAC,KAAK,EAAC,eAAe,aAC3B,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,2BAA2B,GAAG,EAC9E,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,+BAA+B,GAAG,EACjG,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAI,IAC/E,GACD,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"DbSizeView.js","sourceRoot":"","sources":["../../../src/ui/views/DbSizeView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAM3D,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAmB;IAEpD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EACnC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;YAC1C,2CAA2C,OAAO,uBAAuB,CAAC,EAC3E,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC;IAE3E,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,YAAY,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,YACjE,MAAC,OAAO,IAAC,KAAK,EAAC,eAAe,aAC3B,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,2BAA2B,GAAG,EAC9E,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,+BAA+B,GAAG,EACjG,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,CAC9C,KAAC,UAAU,IAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAE,kBAAkB,QAAQ,CAAC,IAAI,EAAE,GAAI,CACrE,IACO,GACD,CACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DbTablesView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DbTablesView.tsx"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CAsC/D"}
1
+ {"version":3,"file":"DbTablesView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DbTablesView.tsx"],"names":[],"mappings":"AAOA,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA4C/D"}