@calltelemetry/cli 0.4.25 → 0.5.0

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 (174) hide show
  1. package/dist/commands/diag.d.ts.map +1 -1
  2. package/dist/commands/diag.js +29 -0
  3. package/dist/commands/diag.js.map +1 -1
  4. package/dist/commands/k8s.d.ts +3 -0
  5. package/dist/commands/k8s.d.ts.map +1 -0
  6. package/dist/commands/k8s.js +192 -0
  7. package/dist/commands/k8s.js.map +1 -0
  8. package/dist/commands/network.d.ts +3 -0
  9. package/dist/commands/network.d.ts.map +1 -0
  10. package/dist/commands/network.js +120 -0
  11. package/dist/commands/network.js.map +1 -0
  12. package/dist/commands/shell.d.ts +3 -0
  13. package/dist/commands/shell.d.ts.map +1 -0
  14. package/dist/commands/shell.js +10 -0
  15. package/dist/commands/shell.js.map +1 -0
  16. package/dist/index.js +7 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/backend.d.ts +85 -0
  19. package/dist/lib/backend.d.ts.map +1 -0
  20. package/dist/lib/backend.js +6 -0
  21. package/dist/lib/backend.js.map +1 -0
  22. package/dist/lib/bundle.d.ts.map +1 -1
  23. package/dist/lib/bundle.js +3 -0
  24. package/dist/lib/bundle.js.map +1 -1
  25. package/dist/lib/compose-backend.d.ts +19 -0
  26. package/dist/lib/compose-backend.d.ts.map +1 -0
  27. package/dist/lib/compose-backend.js +78 -0
  28. package/dist/lib/compose-backend.js.map +1 -0
  29. package/dist/lib/deployment.d.ts +6 -0
  30. package/dist/lib/deployment.d.ts.map +1 -0
  31. package/dist/lib/deployment.js +51 -0
  32. package/dist/lib/deployment.js.map +1 -0
  33. package/dist/lib/doctor.d.ts +13 -0
  34. package/dist/lib/doctor.d.ts.map +1 -0
  35. package/dist/lib/doctor.js +82 -0
  36. package/dist/lib/doctor.js.map +1 -0
  37. package/dist/lib/helmfile.d.ts +14 -0
  38. package/dist/lib/helmfile.d.ts.map +1 -0
  39. package/dist/lib/helmfile.js +78 -0
  40. package/dist/lib/helmfile.js.map +1 -0
  41. package/dist/lib/k8s-backend.d.ts +36 -0
  42. package/dist/lib/k8s-backend.d.ts.map +1 -0
  43. package/dist/lib/k8s-backend.js +301 -0
  44. package/dist/lib/k8s-backend.js.map +1 -0
  45. package/dist/lib/k8s-client.d.ts +14 -0
  46. package/dist/lib/k8s-client.d.ts.map +1 -0
  47. package/dist/lib/k8s-client.js +42 -0
  48. package/dist/lib/k8s-client.js.map +1 -0
  49. package/dist/lib/metadata-artifacts.d.ts +2 -0
  50. package/dist/lib/metadata-artifacts.d.ts.map +1 -0
  51. package/dist/lib/metadata-artifacts.js +36 -0
  52. package/dist/lib/metadata-artifacts.js.map +1 -0
  53. package/dist/lib/offline-steps.d.ts.map +1 -1
  54. package/dist/lib/offline-steps.js +3 -0
  55. package/dist/lib/offline-steps.js.map +1 -1
  56. package/dist/lib/prefs.d.ts +3 -0
  57. package/dist/lib/prefs.d.ts.map +1 -1
  58. package/dist/lib/prefs.js +9 -1
  59. package/dist/lib/prefs.js.map +1 -1
  60. package/dist/shell/commands/config.d.ts +11 -0
  61. package/dist/shell/commands/config.d.ts.map +1 -0
  62. package/dist/shell/commands/config.js +193 -0
  63. package/dist/shell/commands/config.js.map +1 -0
  64. package/dist/shell/commands/connect.d.ts +18 -0
  65. package/dist/shell/commands/connect.d.ts.map +1 -0
  66. package/dist/shell/commands/connect.js +99 -0
  67. package/dist/shell/commands/connect.js.map +1 -0
  68. package/dist/shell/commands/db.d.ts +11 -0
  69. package/dist/shell/commands/db.d.ts.map +1 -0
  70. package/dist/shell/commands/db.js +237 -0
  71. package/dist/shell/commands/db.js.map +1 -0
  72. package/dist/shell/commands/debug.d.ts +15 -0
  73. package/dist/shell/commands/debug.d.ts.map +1 -0
  74. package/dist/shell/commands/debug.js +310 -0
  75. package/dist/shell/commands/debug.js.map +1 -0
  76. package/dist/shell/commands/diag.d.ts +16 -0
  77. package/dist/shell/commands/diag.d.ts.map +1 -0
  78. package/dist/shell/commands/diag.js +555 -0
  79. package/dist/shell/commands/diag.js.map +1 -0
  80. package/dist/shell/commands/registry.d.ts +7 -0
  81. package/dist/shell/commands/registry.d.ts.map +1 -0
  82. package/dist/shell/commands/registry.js +391 -0
  83. package/dist/shell/commands/registry.js.map +1 -0
  84. package/dist/shell/commands/secrets.d.ts +18 -0
  85. package/dist/shell/commands/secrets.d.ts.map +1 -0
  86. package/dist/shell/commands/secrets.js +100 -0
  87. package/dist/shell/commands/secrets.js.map +1 -0
  88. package/dist/shell/commands/services.d.ts +7 -0
  89. package/dist/shell/commands/services.d.ts.map +1 -0
  90. package/dist/shell/commands/services.js +115 -0
  91. package/dist/shell/commands/services.js.map +1 -0
  92. package/dist/shell/commands/show.d.ts +26 -0
  93. package/dist/shell/commands/show.d.ts.map +1 -0
  94. package/dist/shell/commands/show.js +897 -0
  95. package/dist/shell/commands/show.js.map +1 -0
  96. package/dist/shell/commands/system.d.ts +13 -0
  97. package/dist/shell/commands/system.d.ts.map +1 -0
  98. package/dist/shell/commands/system.js +270 -0
  99. package/dist/shell/commands/system.js.map +1 -0
  100. package/dist/shell/commands/test.d.ts +12 -0
  101. package/dist/shell/commands/test.d.ts.map +1 -0
  102. package/dist/shell/commands/test.js +197 -0
  103. package/dist/shell/commands/test.js.map +1 -0
  104. package/dist/shell/commands/users.d.ts +14 -0
  105. package/dist/shell/commands/users.d.ts.map +1 -0
  106. package/dist/shell/commands/users.js +86 -0
  107. package/dist/shell/commands/users.js.map +1 -0
  108. package/dist/shell/completer.d.ts +16 -0
  109. package/dist/shell/completer.d.ts.map +1 -0
  110. package/dist/shell/completer.js +124 -0
  111. package/dist/shell/completer.js.map +1 -0
  112. package/dist/shell/context.d.ts +12 -0
  113. package/dist/shell/context.d.ts.map +1 -0
  114. package/dist/shell/context.js +2 -0
  115. package/dist/shell/context.js.map +1 -0
  116. package/dist/shell/footer.d.ts +8 -0
  117. package/dist/shell/footer.d.ts.map +1 -0
  118. package/dist/shell/footer.js +47 -0
  119. package/dist/shell/footer.js.map +1 -0
  120. package/dist/shell/formatter.d.ts +47 -0
  121. package/dist/shell/formatter.d.ts.map +1 -0
  122. package/dist/shell/formatter.js +135 -0
  123. package/dist/shell/formatter.js.map +1 -0
  124. package/dist/shell/mcp-bridge.d.ts +13 -0
  125. package/dist/shell/mcp-bridge.d.ts.map +1 -0
  126. package/dist/shell/mcp-bridge.js +23 -0
  127. package/dist/shell/mcp-bridge.js.map +1 -0
  128. package/dist/shell/parser.d.ts +33 -0
  129. package/dist/shell/parser.d.ts.map +1 -0
  130. package/dist/shell/parser.js +100 -0
  131. package/dist/shell/parser.js.map +1 -0
  132. package/dist/shell/repl.d.ts +5 -0
  133. package/dist/shell/repl.d.ts.map +1 -0
  134. package/dist/shell/repl.js +251 -0
  135. package/dist/shell/repl.js.map +1 -0
  136. package/dist/shell/sparkline.d.ts +16 -0
  137. package/dist/shell/sparkline.d.ts.map +1 -0
  138. package/dist/shell/sparkline.js +56 -0
  139. package/dist/shell/sparkline.js.map +1 -0
  140. package/dist/shell/theme.d.ts +72 -0
  141. package/dist/shell/theme.d.ts.map +1 -0
  142. package/dist/shell/theme.js +60 -0
  143. package/dist/shell/theme.js.map +1 -0
  144. package/dist/ui/views/DbHealthView.d.ts +6 -0
  145. package/dist/ui/views/DbHealthView.d.ts.map +1 -0
  146. package/dist/ui/views/DbHealthView.js +180 -0
  147. package/dist/ui/views/DbHealthView.js.map +1 -0
  148. package/dist/ui/views/K8sDeployView.d.ts +8 -0
  149. package/dist/ui/views/K8sDeployView.d.ts.map +1 -0
  150. package/dist/ui/views/K8sDeployView.js +81 -0
  151. package/dist/ui/views/K8sDeployView.js.map +1 -0
  152. package/dist/ui/views/K8sRunbookView.d.ts +8 -0
  153. package/dist/ui/views/K8sRunbookView.d.ts.map +1 -0
  154. package/dist/ui/views/K8sRunbookView.js +181 -0
  155. package/dist/ui/views/K8sRunbookView.js.map +1 -0
  156. package/dist/ui/views/K8sServicesView.d.ts +8 -0
  157. package/dist/ui/views/K8sServicesView.d.ts.map +1 -0
  158. package/dist/ui/views/K8sServicesView.js +106 -0
  159. package/dist/ui/views/K8sServicesView.js.map +1 -0
  160. package/dist/ui/views/K8sStatusView.d.ts +8 -0
  161. package/dist/ui/views/K8sStatusView.d.ts.map +1 -0
  162. package/dist/ui/views/K8sStatusView.js +135 -0
  163. package/dist/ui/views/K8sStatusView.js.map +1 -0
  164. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  165. package/dist/ui/views/MainMenu.js +54 -24
  166. package/dist/ui/views/MainMenu.js.map +1 -1
  167. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  168. package/dist/ui/views/SettingsView.js +19 -1
  169. package/dist/ui/views/SettingsView.js.map +1 -1
  170. package/dist/ui/views/SetupWizardView.d.ts +7 -0
  171. package/dist/ui/views/SetupWizardView.d.ts.map +1 -0
  172. package/dist/ui/views/SetupWizardView.js +244 -0
  173. package/dist/ui/views/SetupWizardView.js.map +1 -0
  174. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/shell/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA+BhD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,WAAW,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAsC1E;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Split input into tokens, respecting quoted strings.
3
+ */
4
+ export function tokenize(input) {
5
+ const tokens = [];
6
+ let current = '';
7
+ let inQuote = null;
8
+ for (let i = 0; i < input.length; i++) {
9
+ const ch = input[i];
10
+ if (inQuote) {
11
+ if (ch === inQuote) {
12
+ inQuote = null;
13
+ }
14
+ else {
15
+ current += ch;
16
+ }
17
+ }
18
+ else if (ch === '"' || ch === "'") {
19
+ inQuote = ch;
20
+ }
21
+ else if (ch === ' ' || ch === '\t') {
22
+ if (current.length > 0) {
23
+ tokens.push(current);
24
+ current = '';
25
+ }
26
+ }
27
+ else {
28
+ current += ch;
29
+ }
30
+ }
31
+ if (current.length > 0) {
32
+ tokens.push(current);
33
+ }
34
+ return tokens;
35
+ }
36
+ /**
37
+ * Walk the command tree consuming tokens, extracting --options.
38
+ * Returns the deepest matched node, remaining positional args, and parsed options.
39
+ */
40
+ export function walkTree(tokens, root) {
41
+ let node = root;
42
+ const opts = {};
43
+ const remaining = [];
44
+ let i = 0;
45
+ while (i < tokens.length) {
46
+ const token = tokens[i];
47
+ // Handle options
48
+ if (token.startsWith('--')) {
49
+ const optDef = node.options?.find(o => o.name === token);
50
+ if (optDef && optDef.hasValue && i + 1 < tokens.length) {
51
+ opts[token] = tokens[i + 1];
52
+ i += 2;
53
+ }
54
+ else {
55
+ opts[token] = 'true';
56
+ i++;
57
+ }
58
+ continue;
59
+ }
60
+ // Try to match a child node
61
+ if (node.children) {
62
+ const child = node.children.find(c => c.name === token);
63
+ if (child) {
64
+ node = child;
65
+ i++;
66
+ continue;
67
+ }
68
+ }
69
+ // No match — treat as positional arg
70
+ remaining.push(token);
71
+ i++;
72
+ }
73
+ return { node, remaining, opts };
74
+ }
75
+ /**
76
+ * Tokenize input, walk the command tree, and call the handler.
77
+ * Prints error messages for unknown or incomplete commands.
78
+ */
79
+ export async function dispatch(input, root, ctx) {
80
+ const trimmed = input.trim();
81
+ if (trimmed.length === 0)
82
+ return;
83
+ const tokens = tokenize(trimmed);
84
+ if (tokens.length === 0)
85
+ return;
86
+ const { node, remaining, opts } = walkTree(tokens, root);
87
+ if (node.handler) {
88
+ await node.handler(remaining, opts, ctx);
89
+ }
90
+ else if (node === root) {
91
+ console.log(`% Unknown command "${tokens[0]}"`);
92
+ }
93
+ else if (node.children && node.children.length > 0) {
94
+ console.log('% Incomplete command');
95
+ }
96
+ else {
97
+ console.log(`% Unknown command "${tokens.join(' ')}"`);
98
+ }
99
+ }
100
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/shell/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Start the interactive IOS-style shell.
3
+ */
4
+ export declare function startShell(): Promise<void>;
5
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAqLA;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgHhD"}
@@ -0,0 +1,251 @@
1
+ import * as readline from 'node:readline';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { existsSync, readFileSync, appendFileSync, mkdirSync } from 'node:fs';
5
+ import { createCompleter, showHelp } from './completer.js';
6
+ import { dispatch } from './parser.js';
7
+ import { commandTree } from './commands/registry.js';
8
+ import { wireConnectHandlers } from './commands/connect.js';
9
+ import { wireSecretsHandlers } from './commands/secrets.js';
10
+ import { wireUsersHandlers } from './commands/users.js';
11
+ import { LOGO } from '../lib/brand.js';
12
+ import { Box, Status } from './theme.js';
13
+ import { renderFooter } from './footer.js';
14
+ import chalk from 'chalk';
15
+ const CT_DIR = join(homedir(), '.ct');
16
+ const HISTORY_FILE = join(CT_DIR, 'shell_history');
17
+ const MAX_HISTORY = 500;
18
+ /**
19
+ * Build the framed startup banner.
20
+ */
21
+ function buildBanner(ctx) {
22
+ const lines = [];
23
+ // Split the logo into lines and find the max width
24
+ const logoLines = LOGO.split('\n');
25
+ const logoMaxWidth = Math.max(...logoLines.map((l) => l.length));
26
+ // Inner content: logo + status info + help hints
27
+ const contentLines = [];
28
+ for (const l of logoLines) {
29
+ contentLines.push(l.padEnd(logoMaxWidth));
30
+ }
31
+ contentLines.push('');
32
+ const version = '0.4.26';
33
+ const backendLabel = ctx.backend === 'k8s' ? 'Kubernetes' : 'Compose';
34
+ const statusSymbol = Status.online.color(Status.online.symbol);
35
+ contentLines.push(` ${chalk.bold('CallTelemetry Voice OS')} ${chalk.dim('v' + version)}`);
36
+ contentLines.push(` ${statusSymbol} ${chalk.dim('Backend:')} ${chalk.cyan(backendLabel)} ${statusSymbol} ${chalk.dim('Status:')} ${chalk.green('Ready')}`);
37
+ contentLines.push('');
38
+ contentLines.push(` ${chalk.dim('\u2328 Tab to complete \u2022 ? for help \u2022 exit to quit')}`);
39
+ contentLines.push('');
40
+ // Calculate the widest content line for the frame
41
+ // We need to strip ANSI to measure visible width
42
+ // eslint-disable-next-line no-control-regex
43
+ const stripAnsi = (s) => s.replace(/\x1B\[[0-9;]*m/g, '');
44
+ const maxVisible = Math.max(...contentLines.map((l) => stripAnsi(l).length));
45
+ const innerWidth = Math.max(maxVisible + 2, 62);
46
+ // Top border
47
+ lines.push(chalk.cyan(Box.tl + Box.h.repeat(innerWidth) + Box.tr));
48
+ // Content rows, padded inside the frame
49
+ for (const cl of contentLines) {
50
+ const visible = stripAnsi(cl).length;
51
+ const padding = innerWidth - visible;
52
+ lines.push(chalk.cyan(Box.v) + cl + ' '.repeat(Math.max(0, padding)) + chalk.cyan(Box.v));
53
+ }
54
+ // Bottom border
55
+ lines.push(chalk.cyan(Box.bl + Box.h.repeat(innerWidth) + Box.br));
56
+ return lines.join('\n');
57
+ }
58
+ /**
59
+ * Build a dynamic prompt reflecting connection state.
60
+ */
61
+ function getPrompt(ctx) {
62
+ const parts = [];
63
+ if (ctx.connections.size > 0) {
64
+ const names = [...ctx.connections.keys()].join(',');
65
+ parts.push(chalk.cyan(`(${names})`));
66
+ }
67
+ return `${chalk.bold.cyan('ct')}${parts.join('')}${chalk.cyan('>')} `;
68
+ }
69
+ /**
70
+ * Load command history from disk.
71
+ */
72
+ function loadHistory() {
73
+ try {
74
+ if (!existsSync(HISTORY_FILE))
75
+ return [];
76
+ const raw = readFileSync(HISTORY_FILE, 'utf-8');
77
+ return raw.split('\n').filter(Boolean).slice(-MAX_HISTORY);
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ }
83
+ /**
84
+ * Append a line to the history file.
85
+ */
86
+ function saveHistoryLine(line) {
87
+ try {
88
+ mkdirSync(CT_DIR, { recursive: true });
89
+ appendFileSync(HISTORY_FILE, line + '\n', 'utf-8');
90
+ }
91
+ catch {
92
+ // Silently ignore history write failures
93
+ }
94
+ }
95
+ /**
96
+ * Wire up built-in shell commands (help, history, clear, exit, quit, whoami).
97
+ */
98
+ function wireBuiltins(ctx) {
99
+ const tree = commandTree;
100
+ const findChild = (name) => tree.children?.find((c) => c.name === name);
101
+ // exit / quit
102
+ const exitNode = findChild('exit');
103
+ if (exitNode) {
104
+ exitNode.handler = async () => {
105
+ console.log(chalk.dim('Goodbye.'));
106
+ ctx.rl.close();
107
+ };
108
+ }
109
+ const quitNode = findChild('quit');
110
+ if (quitNode) {
111
+ quitNode.handler = async () => {
112
+ console.log(chalk.dim('Goodbye.'));
113
+ ctx.rl.close();
114
+ };
115
+ }
116
+ // help
117
+ const helpNode = findChild('help');
118
+ if (helpNode) {
119
+ helpNode.handler = async () => {
120
+ console.log(showHelp('', commandTree));
121
+ };
122
+ }
123
+ // clear
124
+ const clearNode = findChild('clear');
125
+ if (clearNode) {
126
+ clearNode.handler = async () => {
127
+ process.stdout.write('\x1B[2J\x1B[H');
128
+ };
129
+ }
130
+ // history
131
+ const historyNode = findChild('history');
132
+ if (historyNode) {
133
+ historyNode.handler = async () => {
134
+ const history = loadHistory();
135
+ if (history.length === 0) {
136
+ console.log('No command history.');
137
+ return;
138
+ }
139
+ history.forEach((line, i) => {
140
+ console.log(` ${String(i + 1).padStart(4)} ${line}`);
141
+ });
142
+ };
143
+ }
144
+ // whoami
145
+ const whoamiNode = findChild('whoami');
146
+ if (whoamiNode) {
147
+ whoamiNode.handler = async (_args, _opts, c) => {
148
+ const user = process.env.USER ?? process.env.USERNAME ?? 'unknown';
149
+ const host = process.env.HOSTNAME ?? 'localhost';
150
+ console.log(`${user}@${host} backend=${c.backend} connections=${c.connections.size}`);
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Start the interactive IOS-style shell.
156
+ */
157
+ export async function startShell() {
158
+ const completer = createCompleter(commandTree, null);
159
+ const rl = readline.createInterface({
160
+ input: process.stdin,
161
+ output: process.stdout,
162
+ completer,
163
+ terminal: true,
164
+ prompt: '', // Set dynamically below
165
+ });
166
+ const ctx = {
167
+ rl,
168
+ connections: new Map(),
169
+ backend: 'compose',
170
+ historyFile: HISTORY_FILE,
171
+ };
172
+ // Print the framed banner
173
+ console.log('\n' + buildBanner(ctx) + '\n');
174
+ // Wire built-in command handlers
175
+ wireBuiltins(ctx);
176
+ // Wire feature handlers
177
+ wireConnectHandlers();
178
+ wireSecretsHandlers();
179
+ wireUsersHandlers();
180
+ // Load history into readline
181
+ const history = loadHistory();
182
+ const rlAny = rl; // eslint-disable-line @typescript-eslint/no-explicit-any
183
+ if (Array.isArray(rlAny.history)) {
184
+ rlAny.history = [...history].reverse();
185
+ }
186
+ // Set dynamic prompt
187
+ const updatePrompt = () => {
188
+ rl.setPrompt(getPrompt(ctx));
189
+ };
190
+ updatePrompt();
191
+ // Handle ? key for context-sensitive help
192
+ if (process.stdin.isTTY) {
193
+ readline.emitKeypressEvents(process.stdin, rl);
194
+ process.stdin.on('keypress', (_ch, key) => {
195
+ if (key && key.name === undefined && key.sequence === '?') {
196
+ const line = rlAny.line ?? '';
197
+ const cleanLine = line.endsWith('?') ? line.slice(0, -1) : line;
198
+ console.log();
199
+ console.log(showHelp(cleanLine, commandTree));
200
+ rlAny.line = cleanLine;
201
+ rlAny.cursor = cleanLine.length;
202
+ rl.prompt(true);
203
+ }
204
+ });
205
+ }
206
+ // REPL loop
207
+ rl.prompt();
208
+ rl.on('line', async (input) => {
209
+ const trimmed = input.trim();
210
+ if (trimmed.length > 0) {
211
+ saveHistoryLine(trimmed);
212
+ try {
213
+ await dispatch(trimmed, commandTree, ctx);
214
+ }
215
+ catch (err) {
216
+ const msg = err instanceof Error ? err.message : String(err);
217
+ console.error(chalk.red(`${Status.fail.symbol} Error: ${msg}`));
218
+ }
219
+ // Render metrics footer after each command
220
+ try {
221
+ await renderFooter();
222
+ }
223
+ catch {
224
+ // Non-fatal — skip footer if metrics fail
225
+ }
226
+ }
227
+ // Update prompt (connections may have changed)
228
+ updatePrompt();
229
+ // Check if rl is still open (exit/quit may have closed it)
230
+ if (!rlAny.closed) {
231
+ rl.prompt();
232
+ }
233
+ });
234
+ rl.on('close', () => {
235
+ console.log();
236
+ process.exit(0);
237
+ });
238
+ // Handle SIGINT (Ctrl-C) — cancel current line, don't exit
239
+ rl.on('SIGINT', () => {
240
+ rlAny.line = '';
241
+ rlAny.cursor = 0;
242
+ console.log();
243
+ updatePrompt();
244
+ rl.prompt();
245
+ });
246
+ // Wait for the readline to close
247
+ await new Promise((resolve) => {
248
+ rl.on('close', resolve);
249
+ });
250
+ }
251
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Render an array of numbers as a sparkline string.
3
+ * Auto-scales to min/max of the data.
4
+ */
5
+ export declare function sparkline(data: number[], width?: number): string;
6
+ /**
7
+ * Render a meter bar: filled and empty blocks with percentage.
8
+ * ████████░░░░░░░░ 67%
9
+ */
10
+ export declare function meterBar(pct: number, width?: number): string;
11
+ /**
12
+ * Render an inline metric with optional sparkline history.
13
+ * CPU ▃▅▇▅▃ 23% (load 1.2)
14
+ */
15
+ export declare function inlineMetric(label: string, pct: number, history: number[], detail?: string): string;
16
+ //# sourceMappingURL=sparkline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sparkline.d.ts","sourceRoot":"","sources":["../../src/shell/sparkline.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBhE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAQxD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAMR"}
@@ -0,0 +1,56 @@
1
+ import chalk from 'chalk';
2
+ import { thresholdColor } from './theme.js';
3
+ const BLOCKS = ['\u2581', '\u2582', '\u2583', '\u2584', '\u2585', '\u2586', '\u2587', '\u2588'];
4
+ const EMPTY_BLOCK = '\u2591';
5
+ const FILLED_BLOCK = '\u2588';
6
+ /**
7
+ * Render an array of numbers as a sparkline string.
8
+ * Auto-scales to min/max of the data.
9
+ */
10
+ export function sparkline(data, width) {
11
+ if (data.length === 0)
12
+ return '';
13
+ const w = width ?? data.length;
14
+ // Pad or trim data to fit width
15
+ let values = data;
16
+ if (values.length < w) {
17
+ const pad = new Array(w - values.length).fill(values[0] ?? 0);
18
+ values = [...pad, ...values];
19
+ }
20
+ else if (values.length > w) {
21
+ values = values.slice(values.length - w);
22
+ }
23
+ const min = Math.min(...values);
24
+ const max = Math.max(...values);
25
+ const range = max - min || 1;
26
+ return values
27
+ .map((v) => {
28
+ const idx = Math.round(((v - min) / range) * (BLOCKS.length - 1));
29
+ return BLOCKS[Math.max(0, Math.min(BLOCKS.length - 1, idx))];
30
+ })
31
+ .join('');
32
+ }
33
+ /**
34
+ * Render a meter bar: filled and empty blocks with percentage.
35
+ * ████████░░░░░░░░ 67%
36
+ */
37
+ export function meterBar(pct, width = 20) {
38
+ const clamped = Math.max(0, Math.min(100, pct));
39
+ const filled = Math.round((clamped / 100) * width);
40
+ const empty = width - filled;
41
+ const color = thresholdColor(clamped);
42
+ const bar = color(FILLED_BLOCK.repeat(filled)) + chalk.dim(EMPTY_BLOCK.repeat(empty));
43
+ return `${bar} ${color(String(Math.round(clamped)) + '%')}`;
44
+ }
45
+ /**
46
+ * Render an inline metric with optional sparkline history.
47
+ * CPU ▃▅▇▅▃ 23% (load 1.2)
48
+ */
49
+ export function inlineMetric(label, pct, history, detail) {
50
+ const color = thresholdColor(pct);
51
+ const spark = history.length > 0 ? ' ' + sparkline(history, 6) : '';
52
+ const pctStr = color(String(Math.round(pct)) + '%');
53
+ const detailStr = detail ? chalk.dim(` (${detail})`) : '';
54
+ return `${chalk.bold(label)}${spark} ${pctStr}${detailStr}`;
55
+ }
56
+ //# sourceMappingURL=sparkline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sparkline.js","sourceRoot":"","sources":["../../src/shell/sparkline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAChG,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,KAAc;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;IAC/B,gCAAgC;IAChC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAa,CAAC;QAC1E,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAE7B,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAK,GAAG,EAAE;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,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,cAAc,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,OAAO,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,GAAW,EACX,OAAiB,EACjB,MAAe;IAEf,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,72 @@
1
+ import chalk from 'chalk';
2
+ export declare const Status: {
3
+ readonly ok: {
4
+ readonly symbol: "✓";
5
+ readonly color: import("chalk").ChalkInstance;
6
+ };
7
+ readonly fail: {
8
+ readonly symbol: "✗";
9
+ readonly color: import("chalk").ChalkInstance;
10
+ };
11
+ readonly warn: {
12
+ readonly symbol: "⚠";
13
+ readonly color: import("chalk").ChalkInstance;
14
+ };
15
+ readonly info: {
16
+ readonly symbol: "ℹ";
17
+ readonly color: import("chalk").ChalkInstance;
18
+ };
19
+ readonly running: {
20
+ readonly symbol: "●";
21
+ readonly color: import("chalk").ChalkInstance;
22
+ };
23
+ readonly waiting: {
24
+ readonly symbol: "○";
25
+ readonly color: import("chalk").ChalkInstance;
26
+ };
27
+ readonly online: {
28
+ readonly symbol: "●";
29
+ readonly color: import("chalk").ChalkInstance;
30
+ };
31
+ readonly offline: {
32
+ readonly symbol: "○";
33
+ readonly color: import("chalk").ChalkInstance;
34
+ };
35
+ readonly degraded: {
36
+ readonly symbol: "◐";
37
+ readonly color: import("chalk").ChalkInstance;
38
+ };
39
+ };
40
+ export type StatusKey = keyof typeof Status;
41
+ export declare const Box: {
42
+ readonly h: "─";
43
+ readonly v: "│";
44
+ readonly tl: "┌";
45
+ readonly tr: "┐";
46
+ readonly bl: "└";
47
+ readonly br: "┘";
48
+ readonly lt: "├";
49
+ readonly rt: "┤";
50
+ readonly tt: "┬";
51
+ readonly bt: "┴";
52
+ readonly x: "┼";
53
+ readonly hBold: "━";
54
+ readonly vBold: "┃";
55
+ };
56
+ /**
57
+ * Return a chalk color function based on percentage thresholds.
58
+ */
59
+ export declare function thresholdColor(pct: number, warn?: number, crit?: number): typeof chalk.red;
60
+ /**
61
+ * Strip ANSI escape codes to get the visible character length.
62
+ */
63
+ export declare function visibleLength(str: string): number;
64
+ /**
65
+ * Pad a string to a target visible width, accounting for ANSI codes.
66
+ */
67
+ export declare function padEnd(str: string, width: number): string;
68
+ /**
69
+ * Truncate a string to a max visible width, adding ellipsis if needed.
70
+ */
71
+ export declare function truncate(str: string, maxWidth: number): string;
72
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/shell/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAE5C,eAAO,MAAM,GAAG;;;;;;;;;;;;;;CAKN,CAAC;AAEX;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,SAAK,EACT,IAAI,SAAK,GACR,OAAO,KAAK,CAAC,GAAG,CAIlB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU9D"}
@@ -0,0 +1,60 @@
1
+ import chalk from 'chalk';
2
+ export const Status = {
3
+ ok: { symbol: '\u2713', color: chalk.green },
4
+ fail: { symbol: '\u2717', color: chalk.red },
5
+ warn: { symbol: '\u26A0', color: chalk.yellow },
6
+ info: { symbol: '\u2139', color: chalk.blue },
7
+ running: { symbol: '\u25CF', color: chalk.cyan },
8
+ waiting: { symbol: '\u25CB', color: chalk.gray },
9
+ online: { symbol: '\u25CF', color: chalk.green },
10
+ offline: { symbol: '\u25CB', color: chalk.gray },
11
+ degraded: { symbol: '\u25D0', color: chalk.yellow },
12
+ };
13
+ export const Box = {
14
+ h: '\u2500', v: '\u2502',
15
+ tl: '\u250C', tr: '\u2510', bl: '\u2514', br: '\u2518',
16
+ lt: '\u251C', rt: '\u2524', tt: '\u252C', bt: '\u2534', x: '\u253C',
17
+ hBold: '\u2501', vBold: '\u2503',
18
+ };
19
+ /**
20
+ * Return a chalk color function based on percentage thresholds.
21
+ */
22
+ export function thresholdColor(pct, warn = 70, crit = 90) {
23
+ if (pct >= crit)
24
+ return chalk.red;
25
+ if (pct >= warn)
26
+ return chalk.yellow;
27
+ return chalk.green;
28
+ }
29
+ /**
30
+ * Strip ANSI escape codes to get the visible character length.
31
+ */
32
+ export function visibleLength(str) {
33
+ // eslint-disable-next-line no-control-regex
34
+ return str.replace(/\x1B\[[0-9;]*m/g, '').length;
35
+ }
36
+ /**
37
+ * Pad a string to a target visible width, accounting for ANSI codes.
38
+ */
39
+ export function padEnd(str, width) {
40
+ const visible = visibleLength(str);
41
+ if (visible >= width)
42
+ return str;
43
+ return str + ' '.repeat(width - visible);
44
+ }
45
+ /**
46
+ * Truncate a string to a max visible width, adding ellipsis if needed.
47
+ */
48
+ export function truncate(str, maxWidth) {
49
+ if (maxWidth < 1)
50
+ return '';
51
+ const visible = visibleLength(str);
52
+ if (visible <= maxWidth)
53
+ return str;
54
+ // Strip ANSI, truncate plain text, re-wrap would be complex.
55
+ // For simplicity, strip all ANSI, truncate, add ellipsis.
56
+ // eslint-disable-next-line no-control-regex
57
+ const plain = str.replace(/\x1B\[[0-9;]*m/g, '');
58
+ return plain.slice(0, maxWidth - 1) + '\u2026';
59
+ }
60
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/shell/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;IAClD,IAAI,EAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;IAChD,IAAI,EAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;IACnD,IAAI,EAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;IACjD,OAAO,EAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;IACjD,OAAO,EAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;IACjD,MAAM,EAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;IAClD,OAAO,EAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;CAC3C,CAAC;AAIX,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;IACxB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ;IACtD,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;IACnE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,IAAI,GAAG,EAAE,EACT,IAAI,GAAG,EAAE;IAET,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAClC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,GAAG,CAAC;IAEpC,6DAA6D;IAC7D,0DAA0D;IAC1D,4CAA4C;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACjD,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface DbHealthViewProps {
2
+ onBack?: () => void;
3
+ }
4
+ export declare function DbHealthView({ onBack }: DbHealthViewProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=DbHealthView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DbHealthView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DbHealthView.tsx"],"names":[],"mappings":"AAQA,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AA+KD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CAkOzD"}