@calltelemetry/cli 0.4.26 → 0.5.1

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 (168) 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 +135 -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/compose-backend.d.ts +19 -0
  23. package/dist/lib/compose-backend.d.ts.map +1 -0
  24. package/dist/lib/compose-backend.js +78 -0
  25. package/dist/lib/compose-backend.js.map +1 -0
  26. package/dist/lib/deployment.d.ts +6 -0
  27. package/dist/lib/deployment.d.ts.map +1 -0
  28. package/dist/lib/deployment.js +51 -0
  29. package/dist/lib/deployment.js.map +1 -0
  30. package/dist/lib/doctor.d.ts +13 -0
  31. package/dist/lib/doctor.d.ts.map +1 -0
  32. package/dist/lib/doctor.js +82 -0
  33. package/dist/lib/doctor.js.map +1 -0
  34. package/dist/lib/helmfile.d.ts +14 -0
  35. package/dist/lib/helmfile.d.ts.map +1 -0
  36. package/dist/lib/helmfile.js +78 -0
  37. package/dist/lib/helmfile.js.map +1 -0
  38. package/dist/lib/k8s-backend.d.ts +36 -0
  39. package/dist/lib/k8s-backend.d.ts.map +1 -0
  40. package/dist/lib/k8s-backend.js +301 -0
  41. package/dist/lib/k8s-backend.js.map +1 -0
  42. package/dist/lib/k8s-client.d.ts +14 -0
  43. package/dist/lib/k8s-client.d.ts.map +1 -0
  44. package/dist/lib/k8s-client.js +42 -0
  45. package/dist/lib/k8s-client.js.map +1 -0
  46. package/dist/lib/network.d.ts +8 -0
  47. package/dist/lib/network.d.ts.map +1 -1
  48. package/dist/lib/network.js +17 -0
  49. package/dist/lib/network.js.map +1 -1
  50. package/dist/lib/prefs.d.ts +3 -0
  51. package/dist/lib/prefs.d.ts.map +1 -1
  52. package/dist/lib/prefs.js +9 -1
  53. package/dist/lib/prefs.js.map +1 -1
  54. package/dist/shell/commands/config.d.ts +11 -0
  55. package/dist/shell/commands/config.d.ts.map +1 -0
  56. package/dist/shell/commands/config.js +193 -0
  57. package/dist/shell/commands/config.js.map +1 -0
  58. package/dist/shell/commands/connect.d.ts +18 -0
  59. package/dist/shell/commands/connect.d.ts.map +1 -0
  60. package/dist/shell/commands/connect.js +99 -0
  61. package/dist/shell/commands/connect.js.map +1 -0
  62. package/dist/shell/commands/db.d.ts +11 -0
  63. package/dist/shell/commands/db.d.ts.map +1 -0
  64. package/dist/shell/commands/db.js +237 -0
  65. package/dist/shell/commands/db.js.map +1 -0
  66. package/dist/shell/commands/debug.d.ts +15 -0
  67. package/dist/shell/commands/debug.d.ts.map +1 -0
  68. package/dist/shell/commands/debug.js +310 -0
  69. package/dist/shell/commands/debug.js.map +1 -0
  70. package/dist/shell/commands/diag.d.ts +16 -0
  71. package/dist/shell/commands/diag.d.ts.map +1 -0
  72. package/dist/shell/commands/diag.js +607 -0
  73. package/dist/shell/commands/diag.js.map +1 -0
  74. package/dist/shell/commands/registry.d.ts +7 -0
  75. package/dist/shell/commands/registry.d.ts.map +1 -0
  76. package/dist/shell/commands/registry.js +391 -0
  77. package/dist/shell/commands/registry.js.map +1 -0
  78. package/dist/shell/commands/secrets.d.ts +18 -0
  79. package/dist/shell/commands/secrets.d.ts.map +1 -0
  80. package/dist/shell/commands/secrets.js +100 -0
  81. package/dist/shell/commands/secrets.js.map +1 -0
  82. package/dist/shell/commands/services.d.ts +7 -0
  83. package/dist/shell/commands/services.d.ts.map +1 -0
  84. package/dist/shell/commands/services.js +115 -0
  85. package/dist/shell/commands/services.js.map +1 -0
  86. package/dist/shell/commands/show.d.ts +26 -0
  87. package/dist/shell/commands/show.d.ts.map +1 -0
  88. package/dist/shell/commands/show.js +897 -0
  89. package/dist/shell/commands/show.js.map +1 -0
  90. package/dist/shell/commands/system.d.ts +13 -0
  91. package/dist/shell/commands/system.d.ts.map +1 -0
  92. package/dist/shell/commands/system.js +270 -0
  93. package/dist/shell/commands/system.js.map +1 -0
  94. package/dist/shell/commands/test.d.ts +12 -0
  95. package/dist/shell/commands/test.d.ts.map +1 -0
  96. package/dist/shell/commands/test.js +197 -0
  97. package/dist/shell/commands/test.js.map +1 -0
  98. package/dist/shell/commands/users.d.ts +14 -0
  99. package/dist/shell/commands/users.d.ts.map +1 -0
  100. package/dist/shell/commands/users.js +86 -0
  101. package/dist/shell/commands/users.js.map +1 -0
  102. package/dist/shell/completer.d.ts +17 -0
  103. package/dist/shell/completer.d.ts.map +1 -0
  104. package/dist/shell/completer.js +151 -0
  105. package/dist/shell/completer.js.map +1 -0
  106. package/dist/shell/context.d.ts +12 -0
  107. package/dist/shell/context.d.ts.map +1 -0
  108. package/dist/shell/context.js +2 -0
  109. package/dist/shell/context.js.map +1 -0
  110. package/dist/shell/footer.d.ts +8 -0
  111. package/dist/shell/footer.d.ts.map +1 -0
  112. package/dist/shell/footer.js +47 -0
  113. package/dist/shell/footer.js.map +1 -0
  114. package/dist/shell/formatter.d.ts +47 -0
  115. package/dist/shell/formatter.d.ts.map +1 -0
  116. package/dist/shell/formatter.js +135 -0
  117. package/dist/shell/formatter.js.map +1 -0
  118. package/dist/shell/mcp-bridge.d.ts +13 -0
  119. package/dist/shell/mcp-bridge.d.ts.map +1 -0
  120. package/dist/shell/mcp-bridge.js +23 -0
  121. package/dist/shell/mcp-bridge.js.map +1 -0
  122. package/dist/shell/parser.d.ts +36 -0
  123. package/dist/shell/parser.d.ts.map +1 -0
  124. package/dist/shell/parser.js +110 -0
  125. package/dist/shell/parser.js.map +1 -0
  126. package/dist/shell/repl.d.ts +5 -0
  127. package/dist/shell/repl.d.ts.map +1 -0
  128. package/dist/shell/repl.js +273 -0
  129. package/dist/shell/repl.js.map +1 -0
  130. package/dist/shell/sparkline.d.ts +16 -0
  131. package/dist/shell/sparkline.d.ts.map +1 -0
  132. package/dist/shell/sparkline.js +56 -0
  133. package/dist/shell/sparkline.js.map +1 -0
  134. package/dist/shell/theme.d.ts +72 -0
  135. package/dist/shell/theme.d.ts.map +1 -0
  136. package/dist/shell/theme.js +60 -0
  137. package/dist/shell/theme.js.map +1 -0
  138. package/dist/ui/views/DbHealthView.d.ts +6 -0
  139. package/dist/ui/views/DbHealthView.d.ts.map +1 -0
  140. package/dist/ui/views/DbHealthView.js +180 -0
  141. package/dist/ui/views/DbHealthView.js.map +1 -0
  142. package/dist/ui/views/K8sDeployView.d.ts +8 -0
  143. package/dist/ui/views/K8sDeployView.d.ts.map +1 -0
  144. package/dist/ui/views/K8sDeployView.js +81 -0
  145. package/dist/ui/views/K8sDeployView.js.map +1 -0
  146. package/dist/ui/views/K8sRunbookView.d.ts +8 -0
  147. package/dist/ui/views/K8sRunbookView.d.ts.map +1 -0
  148. package/dist/ui/views/K8sRunbookView.js +181 -0
  149. package/dist/ui/views/K8sRunbookView.js.map +1 -0
  150. package/dist/ui/views/K8sServicesView.d.ts +8 -0
  151. package/dist/ui/views/K8sServicesView.d.ts.map +1 -0
  152. package/dist/ui/views/K8sServicesView.js +106 -0
  153. package/dist/ui/views/K8sServicesView.js.map +1 -0
  154. package/dist/ui/views/K8sStatusView.d.ts +8 -0
  155. package/dist/ui/views/K8sStatusView.d.ts.map +1 -0
  156. package/dist/ui/views/K8sStatusView.js +135 -0
  157. package/dist/ui/views/K8sStatusView.js.map +1 -0
  158. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  159. package/dist/ui/views/MainMenu.js +54 -24
  160. package/dist/ui/views/MainMenu.js.map +1 -1
  161. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  162. package/dist/ui/views/SettingsView.js +19 -1
  163. package/dist/ui/views/SettingsView.js.map +1 -1
  164. package/dist/ui/views/SetupWizardView.d.ts +7 -0
  165. package/dist/ui/views/SetupWizardView.d.ts.map +1 -0
  166. package/dist/ui/views/SetupWizardView.js +244 -0
  167. package/dist/ui/views/SetupWizardView.js.map +1 -0
  168. package/package.json +2 -1
@@ -0,0 +1,36 @@
1
+ import type { ShellContext } from './context.js';
2
+ export interface OptionDef {
3
+ name: string;
4
+ description: string;
5
+ hasValue: boolean;
6
+ valuesFn?: () => string[];
7
+ }
8
+ export interface CommandNode {
9
+ name: string;
10
+ description: string;
11
+ children?: CommandNode[];
12
+ options?: OptionDef[];
13
+ handler?: (args: string[], opts: Record<string, string>, ctx: ShellContext) => Promise<void>;
14
+ requiresMcp?: string;
15
+ /** If true, accepts an optional ethernet interface name as the first positional arg before subcommands. */
16
+ interfacePositional?: boolean;
17
+ }
18
+ /**
19
+ * Split input into tokens, respecting quoted strings.
20
+ */
21
+ export declare function tokenize(input: string): string[];
22
+ /**
23
+ * Walk the command tree consuming tokens, extracting --options.
24
+ * Returns the deepest matched node, remaining positional args, and parsed options.
25
+ */
26
+ export declare function walkTree(tokens: string[], root: CommandNode): {
27
+ node: CommandNode;
28
+ remaining: string[];
29
+ opts: Record<string, string>;
30
+ };
31
+ /**
32
+ * Tokenize input, walk the command tree, and call the handler.
33
+ * Prints error messages for unknown or incomplete commands.
34
+ */
35
+ export declare function dispatch(input: string, root: CommandNode, ctx: ShellContext): Promise<void>;
36
+ //# sourceMappingURL=parser.d.ts.map
@@ -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;AAGjD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;CAC3B;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;IACrB,2GAA2G;IAC3G,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;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,CAgD1E;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,110 @@
1
+ import { getEthernetInterfaces } from '../lib/network.js';
2
+ /**
3
+ * Split input into tokens, respecting quoted strings.
4
+ */
5
+ export function tokenize(input) {
6
+ const tokens = [];
7
+ let current = '';
8
+ let inQuote = null;
9
+ for (let i = 0; i < input.length; i++) {
10
+ const ch = input[i];
11
+ if (inQuote) {
12
+ if (ch === inQuote) {
13
+ inQuote = null;
14
+ }
15
+ else {
16
+ current += ch;
17
+ }
18
+ }
19
+ else if (ch === '"' || ch === "'") {
20
+ inQuote = ch;
21
+ }
22
+ else if (ch === ' ' || ch === '\t') {
23
+ if (current.length > 0) {
24
+ tokens.push(current);
25
+ current = '';
26
+ }
27
+ }
28
+ else {
29
+ current += ch;
30
+ }
31
+ }
32
+ if (current.length > 0) {
33
+ tokens.push(current);
34
+ }
35
+ return tokens;
36
+ }
37
+ /**
38
+ * Walk the command tree consuming tokens, extracting --options.
39
+ * Returns the deepest matched node, remaining positional args, and parsed options.
40
+ */
41
+ export function walkTree(tokens, root) {
42
+ let node = root;
43
+ const opts = {};
44
+ const remaining = [];
45
+ let i = 0;
46
+ while (i < tokens.length) {
47
+ const token = tokens[i];
48
+ // Handle options
49
+ if (token.startsWith('--')) {
50
+ const optDef = node.options?.find(o => o.name === token);
51
+ if (optDef && optDef.hasValue && i + 1 < tokens.length) {
52
+ opts[token] = tokens[i + 1];
53
+ i += 2;
54
+ }
55
+ else {
56
+ opts[token] = 'true';
57
+ i++;
58
+ }
59
+ continue;
60
+ }
61
+ // If the node accepts an interface positional, consume it before trying children
62
+ if (node.interfacePositional && !opts['--interface']) {
63
+ const ethIfaces = getEthernetInterfaces();
64
+ if (ethIfaces.includes(token)) {
65
+ opts['--interface'] = token;
66
+ i++;
67
+ continue;
68
+ }
69
+ }
70
+ // Try to match a child node
71
+ if (node.children) {
72
+ const child = node.children.find(c => c.name === token);
73
+ if (child) {
74
+ node = child;
75
+ i++;
76
+ continue;
77
+ }
78
+ }
79
+ // No match — treat as positional arg
80
+ remaining.push(token);
81
+ i++;
82
+ }
83
+ return { node, remaining, opts };
84
+ }
85
+ /**
86
+ * Tokenize input, walk the command tree, and call the handler.
87
+ * Prints error messages for unknown or incomplete commands.
88
+ */
89
+ export async function dispatch(input, root, ctx) {
90
+ const trimmed = input.trim();
91
+ if (trimmed.length === 0)
92
+ return;
93
+ const tokens = tokenize(trimmed);
94
+ if (tokens.length === 0)
95
+ return;
96
+ const { node, remaining, opts } = walkTree(tokens, root);
97
+ if (node.handler) {
98
+ await node.handler(remaining, opts, ctx);
99
+ }
100
+ else if (node === root) {
101
+ console.log(`% Unknown command "${tokens[0]}"`);
102
+ }
103
+ else if (node.children && node.children.length > 0) {
104
+ console.log('% Incomplete command');
105
+ }
106
+ else {
107
+ console.log(`% Unknown command "${tokens.join(' ')}"`);
108
+ }
109
+ }
110
+ //# 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,CAqIhD"}
@@ -0,0 +1,273 @@
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
+ // Override readline's built-in column-layout tab completion with a
167
+ // vertical single-column list — one completion per line.
168
+ rl._tabComplete = function (_lastKeypressWasTab) {
169
+ const line = rl.line ?? '';
170
+ const [completions, partial] = completer(line);
171
+ if (completions.length === 0)
172
+ return;
173
+ if (completions.length === 1) {
174
+ // Single match — auto-insert it
175
+ const insert = completions[0].slice(partial.length);
176
+ if (insert)
177
+ rl._insertString(insert);
178
+ rl._refreshLine?.();
179
+ return;
180
+ }
181
+ // Multiple matches — print one per line then redraw the prompt
182
+ process.stdout.write('\r\n');
183
+ for (const c of completions) {
184
+ process.stdout.write(` ${c}\r\n`);
185
+ }
186
+ rl._refreshLine?.();
187
+ };
188
+ const ctx = {
189
+ rl,
190
+ connections: new Map(),
191
+ backend: 'compose',
192
+ historyFile: HISTORY_FILE,
193
+ };
194
+ // Print the framed banner
195
+ console.log('\n' + buildBanner(ctx) + '\n');
196
+ // Wire built-in command handlers
197
+ wireBuiltins(ctx);
198
+ // Wire feature handlers
199
+ wireConnectHandlers();
200
+ wireSecretsHandlers();
201
+ wireUsersHandlers();
202
+ // Load history into readline
203
+ const history = loadHistory();
204
+ const rlAny = rl; // eslint-disable-line @typescript-eslint/no-explicit-any
205
+ if (Array.isArray(rlAny.history)) {
206
+ rlAny.history = [...history].reverse();
207
+ }
208
+ // Set dynamic prompt
209
+ const updatePrompt = () => {
210
+ rl.setPrompt(getPrompt(ctx));
211
+ };
212
+ updatePrompt();
213
+ // Handle ? key for context-sensitive help
214
+ if (process.stdin.isTTY) {
215
+ readline.emitKeypressEvents(process.stdin, rl);
216
+ process.stdin.on('keypress', (_ch, key) => {
217
+ if (key && key.name === undefined && key.sequence === '?') {
218
+ const line = rlAny.line ?? '';
219
+ const cleanLine = line.endsWith('?') ? line.slice(0, -1) : line;
220
+ console.log();
221
+ console.log(showHelp(cleanLine, commandTree));
222
+ rlAny.line = cleanLine;
223
+ rlAny.cursor = cleanLine.length;
224
+ rl.prompt(true);
225
+ }
226
+ });
227
+ }
228
+ // REPL loop
229
+ rl.prompt();
230
+ rl.on('line', async (input) => {
231
+ const trimmed = input.trim();
232
+ if (trimmed.length > 0) {
233
+ saveHistoryLine(trimmed);
234
+ try {
235
+ await dispatch(trimmed, commandTree, ctx);
236
+ }
237
+ catch (err) {
238
+ const msg = err instanceof Error ? err.message : String(err);
239
+ console.error(chalk.red(`${Status.fail.symbol} Error: ${msg}`));
240
+ }
241
+ // Render metrics footer after each command
242
+ try {
243
+ await renderFooter();
244
+ }
245
+ catch {
246
+ // Non-fatal — skip footer if metrics fail
247
+ }
248
+ }
249
+ // Update prompt (connections may have changed)
250
+ updatePrompt();
251
+ // Check if rl is still open (exit/quit may have closed it)
252
+ if (!rlAny.closed) {
253
+ rl.prompt();
254
+ }
255
+ });
256
+ rl.on('close', () => {
257
+ console.log();
258
+ process.exit(0);
259
+ });
260
+ // Handle SIGINT (Ctrl-C) — cancel current line, don't exit
261
+ rl.on('SIGINT', () => {
262
+ rlAny.line = '';
263
+ rlAny.cursor = 0;
264
+ console.log();
265
+ updatePrompt();
266
+ rl.prompt();
267
+ });
268
+ // Wait for the readline to close
269
+ await new Promise((resolve) => {
270
+ rl.on('close', resolve);
271
+ });
272
+ }
273
+ //# 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":"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"}
@@ -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"}