@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,14 @@
1
+ import type { ShellContext } from '../context.js';
2
+ /**
3
+ * users list — list all users across all organizations
4
+ */
5
+ export declare function usersListHandler(_args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
6
+ /**
7
+ * users reset-password — reset a user's password by user ID
8
+ */
9
+ export declare function usersResetPasswordHandler(args: string[], _opts: Record<string, string>, ctx: ShellContext): Promise<void>;
10
+ /**
11
+ * Wire user handlers into the command tree.
12
+ */
13
+ export declare function wireUsersHandlers(): void;
14
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CASxC"}
@@ -0,0 +1,86 @@
1
+ import { table, statusLine, banner } from '../formatter.js';
2
+ import { commandTree } from './registry.js';
3
+ import { listOrgs, listOrgUsers, resetUserPassword, generateUserPassword } from '../../lib/users.js';
4
+ /**
5
+ * users list — list all users across all organizations
6
+ */
7
+ export async function usersListHandler(_args, _opts, _ctx) {
8
+ try {
9
+ const orgs = await listOrgs();
10
+ if (orgs.length === 0) {
11
+ console.log('No organizations found.');
12
+ return;
13
+ }
14
+ for (const org of orgs) {
15
+ console.log(banner(`Organization: ${org.name}`));
16
+ const users = await listOrgUsers(org.id);
17
+ if (users.length === 0) {
18
+ console.log(' No users.');
19
+ continue;
20
+ }
21
+ const rows = users.map(u => [
22
+ String(u.id),
23
+ u.email,
24
+ u.role,
25
+ u.roles.join(', ') || '-',
26
+ ]);
27
+ console.log(table(['ID', 'Email', 'Role', 'Roles'], rows));
28
+ }
29
+ }
30
+ catch (err) {
31
+ const msg = err instanceof Error ? err.message : String(err);
32
+ console.log(statusLine('Failed to list users', 'fail', msg));
33
+ }
34
+ }
35
+ /**
36
+ * users reset-password — reset a user's password by user ID
37
+ */
38
+ export async function usersResetPasswordHandler(args, _opts, ctx) {
39
+ const userIdStr = args[0];
40
+ if (!userIdStr) {
41
+ console.log('Usage: users reset-password <user-id>');
42
+ return;
43
+ }
44
+ const userId = parseInt(userIdStr, 10);
45
+ if (isNaN(userId)) {
46
+ console.log(`% Invalid user ID "${userIdStr}"`);
47
+ return;
48
+ }
49
+ const question = (prompt) => new Promise(resolve => ctx.rl.question(prompt, resolve));
50
+ const answer = await question('Generate random password? [Y/n]: ');
51
+ let password;
52
+ if (answer.trim().toLowerCase() === 'n') {
53
+ password = await question('Enter new password: ');
54
+ if (!password || password.length < 8) {
55
+ console.log('% Password must be at least 8 characters');
56
+ return;
57
+ }
58
+ }
59
+ else {
60
+ password = generateUserPassword();
61
+ }
62
+ try {
63
+ await resetUserPassword(userId, password);
64
+ console.log(statusLine(`Password reset for user ${userId}`, 'ok'));
65
+ console.log(` New password: ${password}`);
66
+ }
67
+ catch (err) {
68
+ const msg = err instanceof Error ? err.message : String(err);
69
+ console.log(statusLine('Password reset failed', 'fail', msg));
70
+ }
71
+ }
72
+ /**
73
+ * Wire user handlers into the command tree.
74
+ */
75
+ export function wireUsersHandlers() {
76
+ const usersNode = commandTree.children?.find(c => c.name === 'users');
77
+ if (!usersNode?.children)
78
+ return;
79
+ const listNode = usersNode.children.find(c => c.name === 'list');
80
+ if (listNode)
81
+ listNode.handler = usersListHandler;
82
+ const resetNode = usersNode.children.find(c => c.name === 'reset-password');
83
+ if (resetNode)
84
+ resetNode.handler = usersResetPasswordHandler;
85
+ }
86
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/shell/commands/users.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CompleterResult } from 'node:readline';
2
+ import type { CommandNode } from './parser.js';
3
+ import type { ShellContext } from './context.js';
4
+ /**
5
+ * Create a readline-compatible completer function.
6
+ */
7
+ export declare function createCompleter(root: CommandNode, _ctx: ShellContext): (line: string) => CompleterResult;
8
+ /**
9
+ * Walk the tree to the current position and return valid next tokens.
10
+ */
11
+ export declare function getCompletions(line: string, root: CommandNode): string[];
12
+ /**
13
+ * Format IOS-style ? help output for the current line context.
14
+ */
15
+ export declare function showHelp(line: string, root: CommandNode): string;
16
+ //# sourceMappingURL=completer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completer.d.ts","sourceRoot":"","sources":["../../src/shell/completer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,YAAY,GACjB,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CASnC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAyDxE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CA+DhE"}
@@ -0,0 +1,124 @@
1
+ import { tokenize } from './parser.js';
2
+ /**
3
+ * Create a readline-compatible completer function.
4
+ */
5
+ export function createCompleter(root, _ctx) {
6
+ return (line) => {
7
+ const completions = getCompletions(line, root);
8
+ // The partial word being completed
9
+ const tokens = tokenize(line);
10
+ const partial = line.endsWith(' ') ? '' : (tokens[tokens.length - 1] ?? '');
11
+ const hits = completions.filter(c => c.startsWith(partial));
12
+ return [hits.length > 0 ? hits : completions, partial];
13
+ };
14
+ }
15
+ /**
16
+ * Walk the tree to the current position and return valid next tokens.
17
+ */
18
+ export function getCompletions(line, root) {
19
+ const tokens = tokenize(line);
20
+ const trailingSpace = line.endsWith(' ');
21
+ let node = root;
22
+ let consumed = 0;
23
+ // Walk through fully-typed tokens
24
+ const tokensToWalk = trailingSpace ? tokens : tokens.slice(0, -1);
25
+ for (const token of tokensToWalk) {
26
+ if (token.startsWith('--')) {
27
+ consumed++;
28
+ // Skip option values
29
+ const optDef = node.options?.find(o => o.name === token);
30
+ if (optDef?.hasValue)
31
+ consumed++;
32
+ continue;
33
+ }
34
+ if (node.children) {
35
+ const child = node.children.find(c => c.name === token);
36
+ if (child) {
37
+ node = child;
38
+ consumed++;
39
+ continue;
40
+ }
41
+ }
42
+ // Unknown token — can't complete further
43
+ return [];
44
+ }
45
+ // Collect completions from current node
46
+ const completions = [];
47
+ if (node.children) {
48
+ const partial = (!trailingSpace && tokens.length > consumed)
49
+ ? tokens[tokens.length - 1] ?? ''
50
+ : '';
51
+ for (const child of node.children) {
52
+ if (child.name.startsWith(partial)) {
53
+ completions.push(child.name);
54
+ }
55
+ }
56
+ }
57
+ if (node.options) {
58
+ const partial = (!trailingSpace && tokens.length > consumed)
59
+ ? tokens[tokens.length - 1] ?? ''
60
+ : '';
61
+ for (const opt of node.options) {
62
+ if (opt.name.startsWith(partial)) {
63
+ completions.push(opt.name);
64
+ }
65
+ }
66
+ }
67
+ return completions;
68
+ }
69
+ /**
70
+ * Format IOS-style ? help output for the current line context.
71
+ */
72
+ export function showHelp(line, root) {
73
+ const tokens = tokenize(line);
74
+ const trailingSpace = line.endsWith(' ') || tokens.length === 0;
75
+ let node = root;
76
+ // Walk fully completed tokens
77
+ const tokensToWalk = trailingSpace ? tokens : tokens.slice(0, -1);
78
+ for (const token of tokensToWalk) {
79
+ if (token.startsWith('--'))
80
+ continue;
81
+ if (node.children) {
82
+ const child = node.children.find(c => c.name === token);
83
+ if (child) {
84
+ node = child;
85
+ continue;
86
+ }
87
+ }
88
+ return '% Unrecognized command\n';
89
+ }
90
+ const partial = (!trailingSpace && tokens.length > 0)
91
+ ? tokens[tokens.length - 1] ?? ''
92
+ : '';
93
+ const lines = [];
94
+ // List matching children
95
+ if (node.children) {
96
+ const matches = partial
97
+ ? node.children.filter(c => c.name.startsWith(partial))
98
+ : node.children;
99
+ // Find max name length for alignment
100
+ const maxLen = matches.reduce((max, c) => Math.max(max, c.name.length), 0);
101
+ for (const child of matches) {
102
+ lines.push(` ${child.name.padEnd(maxLen + 2)}${child.description}`);
103
+ }
104
+ }
105
+ // List matching options
106
+ if (node.options) {
107
+ const matches = partial
108
+ ? node.options.filter(o => o.name.startsWith(partial))
109
+ : node.options;
110
+ const maxLen = matches.reduce((max, o) => Math.max(max, o.name.length), 0);
111
+ for (const opt of matches) {
112
+ lines.push(` ${opt.name.padEnd(maxLen + 2)}${opt.description}`);
113
+ }
114
+ }
115
+ // Show <cr> if the current node has a handler (is executable)
116
+ if (node.handler && (trailingSpace || partial === '')) {
117
+ lines.push(' <cr>');
118
+ }
119
+ if (lines.length === 0) {
120
+ return '% No completions available\n';
121
+ }
122
+ return lines.join('\n') + '\n';
123
+ }
124
+ //# sourceMappingURL=completer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completer.js","sourceRoot":"","sources":["../../src/shell/completer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAiB,EACjB,IAAkB;IAElB,OAAO,CAAC,IAAY,EAAmB,EAAE;QACvC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,mCAAmC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,kCAAkC;IAClC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,QAAQ,EAAE,CAAC;YACX,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACzD,IAAI,MAAM,EAAE,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,GAAG,KAAK,CAAC;gBACb,QAAQ,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;QACH,CAAC;QACD,yCAAyC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAiB;IACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhE,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,GAAG,KAAK,CAAC;gBACb,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;QACjC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,yBAAyB;IACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAElB,qCAAqC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAEjB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,EAAE,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type * as readline from 'node:readline';
2
+ export interface McpConnection {
3
+ name: string;
4
+ type: 'cucm' | 'dashboard' | 'phone' | 'ris';
5
+ }
6
+ export interface ShellContext {
7
+ rl: readline.Interface;
8
+ connections: Map<string, McpConnection>;
9
+ backend: 'compose' | 'k8s';
10
+ historyFile: string;
11
+ }
12
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/shell/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;CAE9C;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,OAAO,EAAE,SAAS,GAAG,KAAK,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/shell/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Render a single-line metrics footer after each command.
3
+ *
4
+ * ─────────────────────────────────────────────────────
5
+ * CPU ██░░ 12% │ RAM ████░░ 61% │ Disk ███░ 78%
6
+ */
7
+ export declare function renderFooter(): Promise<void>;
8
+ //# sourceMappingURL=footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../src/shell/footer.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAwClD"}
@@ -0,0 +1,47 @@
1
+ import chalk from 'chalk';
2
+ import os from 'node:os';
3
+ import { Box, thresholdColor } from './theme.js';
4
+ import { meterBar } from './sparkline.js';
5
+ /**
6
+ * Render a single-line metrics footer after each command.
7
+ *
8
+ * ─────────────────────────────────────────────────────
9
+ * CPU ██░░ 12% │ RAM ████░░ 61% │ Disk ███░ 78%
10
+ */
11
+ export async function renderFooter() {
12
+ const width = Math.min(process.stdout.columns ?? 60, 70);
13
+ // Gather metrics synchronously where possible
14
+ const totalMem = os.totalmem();
15
+ const freeMem = os.freemem();
16
+ const usedMem = totalMem - freeMem;
17
+ const ramPct = Math.round((usedMem / totalMem) * 100);
18
+ const cpus = os.cpus();
19
+ const load1m = os.loadavg()[0];
20
+ const cpuPct = Math.min(100, Math.round((load1m / cpus.length) * 100));
21
+ // Disk — async but quick
22
+ let diskPct = 0;
23
+ try {
24
+ const { execa } = await import('execa');
25
+ const { stdout } = await execa('df', ['-h', '/']);
26
+ const lines = stdout.split('\n');
27
+ if (lines.length >= 2) {
28
+ const match = lines[1].match(/(\d+)%/);
29
+ diskPct = match ? parseInt(match[1], 10) : 0;
30
+ }
31
+ }
32
+ catch {
33
+ // leave at 0
34
+ }
35
+ const cpuColor = thresholdColor(cpuPct);
36
+ const ramColor = thresholdColor(ramPct);
37
+ const diskColor = thresholdColor(diskPct);
38
+ const cpuBar = meterBar(cpuPct, 8);
39
+ const ramBar = meterBar(ramPct, 8);
40
+ const diskBar = meterBar(diskPct, 8);
41
+ const sep = chalk.dim(` ${Box.v} `);
42
+ const line = chalk.dim(Box.h.repeat(width));
43
+ const metrics = `${chalk.bold('CPU')} ${cpuBar}${sep}${chalk.bold('RAM')} ${ramBar}${sep}${chalk.bold('Disk')} ${diskBar}`;
44
+ console.log(line);
45
+ console.log(metrics);
46
+ }
47
+ //# sourceMappingURL=footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/shell/footer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import chalk from 'chalk';
2
+ import type { StatusKey } from './theme.js';
3
+ /**
4
+ * Render a Unicode box-drawing table with auto-sized columns.
5
+ *
6
+ * ┌──────────────────┬──────────┬─────────────┬────────────┐
7
+ * │ Device │ Model │ IP │ Status │
8
+ * ├──────────────────┼──────────┼─────────────┼────────────┤
9
+ * │ SEP001122334455 │ CP-8845 │ 192.168.1.1 │ ● Registered│
10
+ * └──────────────────┴──────────┴─────────────┴────────────┘
11
+ */
12
+ export declare function table(headers: string[], rows: string[][], opts?: {
13
+ maxWidth?: number;
14
+ title?: string;
15
+ borderColor?: typeof chalk.green;
16
+ }): string;
17
+ /**
18
+ * Render a status line with symbol and color.
19
+ * ✓ Admin API — responding (12ms)
20
+ * ✗ SFTP — connection timeout
21
+ */
22
+ export declare function statusLine(label: string, status: StatusKey, detail?: string): string;
23
+ /**
24
+ * Render a bold section banner spanning the terminal width.
25
+ * ━━━ System Health ━━━━━━━━━━━━━━━━━━━━━━━━━
26
+ */
27
+ export declare function banner(text: string): string;
28
+ /**
29
+ * Render key-value pairs with right-aligned keys and colored values.
30
+ * Version: 0.8.5
31
+ * Backend: Docker Compose
32
+ * Uptime: 12d 4h 23m
33
+ */
34
+ export declare function kv(pairs: [string, string][]): string;
35
+ /**
36
+ * Render step-progress lines for multi-step operations.
37
+ * ✓ Exporting tables (2.3s)
38
+ * ● Compressing data...
39
+ * ○ Uploading to S3
40
+ */
41
+ export declare function stepProgress(stepName: string, status: 'running' | 'done' | 'fail' | 'waiting', detail?: string): string;
42
+ /**
43
+ * Render a progress bar with percentage and optional size info.
44
+ * [████████████░░░░░░░░] 62% 4.2 GB / 6.8 GB
45
+ */
46
+ export declare function progressBar(pct: number, width?: number, detail?: string): string;
47
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/shell/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,IAAI,CAAC,EAAE;IACL,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC;CAClC,GACA,MAAM,CAyER;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3C;AAED;;;;;GAKG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAKpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,EAC/C,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5E"}
@@ -0,0 +1,135 @@
1
+ import chalk from 'chalk';
2
+ import { Status, Box, visibleLength, padEnd, truncate } from './theme.js';
3
+ import { meterBar } from './sparkline.js';
4
+ /**
5
+ * Render a Unicode box-drawing table with auto-sized columns.
6
+ *
7
+ * ┌──────────────────┬──────────┬─────────────┬────────────┐
8
+ * │ Device │ Model │ IP │ Status │
9
+ * ├──────────────────┼──────────┼─────────────┼────────────┤
10
+ * │ SEP001122334455 │ CP-8845 │ 192.168.1.1 │ ● Registered│
11
+ * └──────────────────┴──────────┴─────────────┴────────────┘
12
+ */
13
+ export function table(headers, rows, opts) {
14
+ const maxWidth = opts?.maxWidth ?? process.stdout.columns ?? 120;
15
+ const border = opts?.borderColor ?? chalk.dim;
16
+ // Calculate column widths from content
17
+ const colWidths = headers.map((h, i) => {
18
+ let max = visibleLength(h);
19
+ for (const row of rows) {
20
+ const cell = row[i] ?? '';
21
+ max = Math.max(max, visibleLength(cell));
22
+ }
23
+ return max;
24
+ });
25
+ // Account for padding (1 space each side) and border characters
26
+ const totalBorderWidth = colWidths.length + 1; // │ between each col + outer │
27
+ const totalPadding = colWidths.length * 2; // 1 space padding each side
28
+ const totalContentWidth = colWidths.reduce((s, w) => s + w, 0);
29
+ const totalWidth = totalContentWidth + totalPadding + totalBorderWidth;
30
+ // Shrink columns proportionally if too wide
31
+ if (totalWidth > maxWidth && headers.length > 0) {
32
+ const availableForContent = maxWidth - totalPadding - totalBorderWidth;
33
+ if (availableForContent > headers.length * 4) {
34
+ const scale = availableForContent / totalContentWidth;
35
+ for (let i = 0; i < colWidths.length; i++) {
36
+ colWidths[i] = Math.max(4, Math.floor(colWidths[i] * scale));
37
+ }
38
+ }
39
+ }
40
+ const drawHLine = (left, mid, right, h) => {
41
+ const segments = colWidths.map((w) => h.repeat(w + 2));
42
+ return border(left + segments.join(mid) + right);
43
+ };
44
+ const drawRow = (cells) => {
45
+ const parts = cells.map((cell, i) => {
46
+ const w = colWidths[i] ?? visibleLength(cell);
47
+ const content = visibleLength(cell) > w ? truncate(cell, w) : padEnd(cell, w);
48
+ return ' ' + content + ' ';
49
+ });
50
+ return border(Box.v) + parts.join(border(Box.v)) + border(Box.v);
51
+ };
52
+ const lines = [];
53
+ // Title row
54
+ if (opts?.title) {
55
+ const innerWidth = colWidths.reduce((s, w) => s + w + 2, 0) + colWidths.length - 1;
56
+ lines.push(border(Box.tl + Box.h.repeat(innerWidth) + Box.tr));
57
+ const titlePadded = padEnd(` ${opts.title}`, innerWidth);
58
+ lines.push(border(Box.v) + chalk.bold(titlePadded) + border(Box.v));
59
+ lines.push(drawHLine(Box.lt, Box.tt, Box.rt, Box.h));
60
+ }
61
+ else {
62
+ lines.push(drawHLine(Box.tl, Box.tt, Box.tr, Box.h));
63
+ }
64
+ // Header row
65
+ lines.push(drawRow(headers.map((h) => chalk.bold(h))));
66
+ // Header separator
67
+ lines.push(drawHLine(Box.lt, Box.x, Box.rt, Box.h));
68
+ // Data rows
69
+ for (const row of rows) {
70
+ lines.push(drawRow(row));
71
+ }
72
+ // Bottom border
73
+ lines.push(drawHLine(Box.bl, Box.bt, Box.br, Box.h));
74
+ return lines.join('\n');
75
+ }
76
+ /**
77
+ * Render a status line with symbol and color.
78
+ * ✓ Admin API — responding (12ms)
79
+ * ✗ SFTP — connection timeout
80
+ */
81
+ export function statusLine(label, status, detail) {
82
+ const s = Status[status] ?? Status.info;
83
+ const symbol = s.color(s.symbol);
84
+ const suffix = detail ? chalk.dim(` \u2014 ${detail}`) : '';
85
+ return `${symbol} ${s.color(label)}${suffix}`;
86
+ }
87
+ /**
88
+ * Render a bold section banner spanning the terminal width.
89
+ * ━━━ System Health ━━━━━━━━━━━━━━━━━━━━━━━━━
90
+ */
91
+ export function banner(text) {
92
+ const width = Math.min(process.stdout.columns ?? 60, 60);
93
+ const prefix = Box.hBold.repeat(3) + ' ';
94
+ const suffix = ' ' + Box.hBold.repeat(Math.max(0, width - text.length - 6));
95
+ return '\n' + chalk.bold(prefix + text + suffix);
96
+ }
97
+ /**
98
+ * Render key-value pairs with right-aligned keys and colored values.
99
+ * Version: 0.8.5
100
+ * Backend: Docker Compose
101
+ * Uptime: 12d 4h 23m
102
+ */
103
+ export function kv(pairs) {
104
+ const maxKeyLen = pairs.reduce((max, [k]) => Math.max(max, k.length), 0);
105
+ return pairs
106
+ .map(([k, v]) => ` ${chalk.dim(k.padStart(maxKeyLen))}: ${chalk.cyan(v)}`)
107
+ .join('\n');
108
+ }
109
+ /**
110
+ * Render step-progress lines for multi-step operations.
111
+ * ✓ Exporting tables (2.3s)
112
+ * ● Compressing data...
113
+ * ○ Uploading to S3
114
+ */
115
+ export function stepProgress(stepName, status, detail) {
116
+ const indicators = {
117
+ done: { symbol: Status.ok.symbol, color: chalk.green },
118
+ running: { symbol: Status.running.symbol, color: chalk.cyan },
119
+ fail: { symbol: Status.fail.symbol, color: chalk.red },
120
+ waiting: { symbol: Status.waiting.symbol, color: chalk.gray },
121
+ };
122
+ const ind = indicators[status] ?? indicators.running;
123
+ const suffix = detail ? chalk.dim(` (${detail})`) : '';
124
+ return ` ${ind.color(ind.symbol)} ${ind.color(stepName)}${suffix}`;
125
+ }
126
+ /**
127
+ * Render a progress bar with percentage and optional size info.
128
+ * [████████████░░░░░░░░] 62% 4.2 GB / 6.8 GB
129
+ */
130
+ export function progressBar(pct, width = 20, detail) {
131
+ const bar = meterBar(pct, width);
132
+ const suffix = detail ? ` ${chalk.dim(detail)}` : '';
133
+ return ` ${bar}${suffix}`;
134
+ }
135
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/shell/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Stub MCP bridge — will be replaced with real stdio child-process bridge.
3
+ */
4
+ export declare class McpBridge {
5
+ name: string;
6
+ type: string;
7
+ host: string;
8
+ constructor(name: string, type: string, host: string);
9
+ connect(): Promise<void>;
10
+ callTool(name: string, _params: Record<string, unknown>): Promise<unknown>;
11
+ close(): void;
12
+ }
13
+ //# sourceMappingURL=mcp-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-bridge.d.ts","sourceRoot":"","sources":["../../src/shell/mcp-bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAS;IAEX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;gBAFZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAGf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhF,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Stub MCP bridge — will be replaced with real stdio child-process bridge.
3
+ */
4
+ export class McpBridge {
5
+ name;
6
+ type;
7
+ host;
8
+ constructor(name, type, host) {
9
+ this.name = name;
10
+ this.type = type;
11
+ this.host = host;
12
+ }
13
+ async connect() {
14
+ /* TODO: spawn child process */
15
+ }
16
+ async callTool(name, _params) {
17
+ throw new Error(`MCP bridge not yet implemented — cannot call tool "${name}"`);
18
+ }
19
+ close() {
20
+ /* TODO: kill child process */
21
+ }
22
+ }
23
+ //# sourceMappingURL=mcp-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/shell/mcp-bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,SAAS;IAEX;IACA;IACA;IAHT,YACS,IAAY,EACZ,IAAY,EACZ,IAAY;QAFZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;IAClB,CAAC;IAEJ,KAAK,CAAC,OAAO;QACX,+BAA+B;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAgC;QAC3D,MAAM,IAAI,KAAK,CAAC,sDAAsD,IAAI,GAAG,CAAC,CAAC;IACjF,CAAC;IAED,KAAK;QACH,8BAA8B;IAChC,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { ShellContext } from './context.js';
2
+ export interface OptionDef {
3
+ name: string;
4
+ description: string;
5
+ hasValue: boolean;
6
+ }
7
+ export interface CommandNode {
8
+ name: string;
9
+ description: string;
10
+ children?: CommandNode[];
11
+ options?: OptionDef[];
12
+ handler?: (args: string[], opts: Record<string, string>, ctx: ShellContext) => Promise<void>;
13
+ requiresMcp?: string;
14
+ }
15
+ /**
16
+ * Split input into tokens, respecting quoted strings.
17
+ */
18
+ export declare function tokenize(input: string): string[];
19
+ /**
20
+ * Walk the command tree consuming tokens, extracting --options.
21
+ * Returns the deepest matched node, remaining positional args, and parsed options.
22
+ */
23
+ export declare function walkTree(tokens: string[], root: CommandNode): {
24
+ node: CommandNode;
25
+ remaining: string[];
26
+ opts: Record<string, string>;
27
+ };
28
+ /**
29
+ * Tokenize input, walk the command tree, and call the handler.
30
+ * Prints error messages for unknown or incomplete commands.
31
+ */
32
+ export declare function dispatch(input: string, root: CommandNode, ctx: ShellContext): Promise<void>;
33
+ //# sourceMappingURL=parser.d.ts.map