@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,193 @@
1
+ /**
2
+ * Shell command handlers for the `config` command group.
3
+ */
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import { writeFileSafe } from '../../lib/fs.js';
6
+ import { getPaths } from '../../lib/paths.js';
7
+ import { enableIpv6, disableIpv6 } from '../../lib/ipv6.js';
8
+ import { enableOtel, disableOtel } from '../../lib/otel.js';
9
+ import { setPostgresVersion } from '../../lib/postgres.js';
10
+ import { resetCerts } from '../../lib/certs.js';
11
+ import { rpc } from '../../lib/rpc.js';
12
+ import { banner, statusLine, stepProgress } from '../formatter.js';
13
+ // ── config logging ──────────────────────────────────────────────────────────
14
+ export async function handleLogging(args, _opts, _ctx) {
15
+ const level = args[0];
16
+ if (!level) {
17
+ console.log('% Usage: config logging <debug|info|warning|error>');
18
+ return;
19
+ }
20
+ const validLevels = ['debug', 'info', 'warning', 'error'];
21
+ if (!validLevels.includes(level)) {
22
+ console.log(statusLine(`Invalid logging level '${level}'`, 'fail', `valid: ${validLevels.join(', ')}`));
23
+ return;
24
+ }
25
+ try {
26
+ const { composeFile } = getPaths();
27
+ if (!existsSync(composeFile)) {
28
+ console.log(statusLine('docker-compose.yml not found', 'fail'));
29
+ return;
30
+ }
31
+ const content = readFileSync(composeFile, 'utf-8');
32
+ const updated = content.replace(/LOGGING_LEVEL=\w+/, `LOGGING_LEVEL=${level}`);
33
+ await writeFileSafe(composeFile, updated);
34
+ console.log(statusLine(`Logging level set to ${level}`, 'ok', 'restart services to apply'));
35
+ }
36
+ catch (err) {
37
+ const msg = err instanceof Error ? err.message : String(err);
38
+ console.log(statusLine(`Failed to set logging level: ${msg}`, 'fail'));
39
+ }
40
+ }
41
+ // ── config ipv6 ─────────────────────────────────────────────────────────────
42
+ export async function handleIpv6(args, _opts, _ctx) {
43
+ const action = args[0];
44
+ if (!action || !['enable', 'disable'].includes(action)) {
45
+ console.log('% Usage: config ipv6 <enable|disable>');
46
+ return;
47
+ }
48
+ try {
49
+ if (action === 'enable') {
50
+ await enableIpv6();
51
+ console.log(statusLine('IPv6 enabled', 'ok', 'restart services to apply'));
52
+ }
53
+ else {
54
+ await disableIpv6();
55
+ console.log(statusLine('IPv6 disabled', 'ok', 'restart services to apply'));
56
+ }
57
+ }
58
+ catch (err) {
59
+ const msg = err instanceof Error ? err.message : String(err);
60
+ console.log(statusLine(`IPv6 ${action} failed: ${msg}`, 'fail'));
61
+ }
62
+ }
63
+ // ── config otel ─────────────────────────────────────────────────────────────
64
+ export async function handleOtel(args, _opts, _ctx) {
65
+ const action = args[0];
66
+ if (!action || !['enable', 'disable'].includes(action)) {
67
+ console.log('% Usage: config otel <enable|disable>');
68
+ return;
69
+ }
70
+ try {
71
+ if (action === 'enable') {
72
+ await enableOtel();
73
+ console.log(statusLine('OpenTelemetry enabled', 'ok', 'restart services to apply'));
74
+ }
75
+ else {
76
+ await disableOtel();
77
+ console.log(statusLine('OpenTelemetry disabled', 'ok', 'restart services to apply'));
78
+ }
79
+ }
80
+ catch (err) {
81
+ const msg = err instanceof Error ? err.message : String(err);
82
+ console.log(statusLine(`OTel ${action} failed: ${msg}`, 'fail'));
83
+ }
84
+ }
85
+ // ── config postgres ─────────────────────────────────────────────────────────
86
+ export async function handlePostgres(args, _opts, _ctx) {
87
+ const version = args[0];
88
+ if (!version) {
89
+ const { postgresSupportedVersions } = getPaths();
90
+ console.log('% Usage: config postgres <version>');
91
+ console.log(` Supported versions: ${postgresSupportedVersions.join(', ')}`);
92
+ return;
93
+ }
94
+ try {
95
+ await setPostgresVersion(version);
96
+ console.log(statusLine(`PostgreSQL version set to ${version}`, 'ok', 'applies on next update'));
97
+ }
98
+ catch (err) {
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ console.log(statusLine(`Failed to set PostgreSQL version: ${msg}`, 'fail'));
101
+ }
102
+ }
103
+ // ── config certs reset ──────────────────────────────────────────────────────
104
+ export async function handleCertsReset(_args, _opts, _ctx) {
105
+ try {
106
+ console.log(banner('Certificate Reset'));
107
+ console.log(stepProgress('Regenerating self-signed certificates', 'running'));
108
+ await resetCerts();
109
+ console.log(stepProgress('Regenerating self-signed certificates', 'done'));
110
+ console.log(statusLine('Certificates reset', 'ok', 'restart services to apply'));
111
+ }
112
+ catch (err) {
113
+ const msg = err instanceof Error ? err.message : String(err);
114
+ console.log(stepProgress('Certificate reset', 'fail', msg));
115
+ }
116
+ }
117
+ // ── config audit run ────────────────────────────────────────────────────────
118
+ export async function handleAuditRun(_args, _opts, _ctx) {
119
+ try {
120
+ console.log(banner('Configuration Audit'));
121
+ console.log(stepProgress('Running audit', 'running'));
122
+ const output = await rpc('Cdrcisco.ConfigAudit.run() |> inspect(pretty: true) |> IO.puts()');
123
+ console.log(stepProgress('Running audit', 'done'));
124
+ if (output.trim()) {
125
+ console.log(output.trim());
126
+ }
127
+ console.log(statusLine('Audit complete', 'ok'));
128
+ }
129
+ catch (err) {
130
+ const msg = err instanceof Error ? err.message : String(err);
131
+ console.log(stepProgress('Audit', 'fail', msg));
132
+ }
133
+ }
134
+ // ── config audit diff ───────────────────────────────────────────────────────
135
+ export async function handleAuditReport(args, _opts, _ctx) {
136
+ const id = args[0];
137
+ try {
138
+ console.log(banner('Audit Report'));
139
+ console.log(stepProgress('Fetching drift report', 'running'));
140
+ const code = id
141
+ ? `Cdrcisco.ConfigAudit.diff(${JSON.stringify(id)}) |> inspect(pretty: true) |> IO.puts()`
142
+ : 'Cdrcisco.ConfigAudit.last_report() |> inspect(pretty: true) |> IO.puts()';
143
+ const output = await rpc(code);
144
+ console.log(stepProgress('Fetching drift report', 'done'));
145
+ if (output.trim()) {
146
+ console.log(output.trim());
147
+ }
148
+ console.log(statusLine('Report retrieved', 'ok'));
149
+ }
150
+ catch (err) {
151
+ const msg = err instanceof Error ? err.message : String(err);
152
+ console.log(stepProgress('Report', 'fail', msg));
153
+ }
154
+ }
155
+ // ── Wire handlers into command tree ─────────────────────────────────────────
156
+ export function wireConfigHandlers(configNode) {
157
+ if (!configNode.children)
158
+ return;
159
+ for (const child of configNode.children) {
160
+ switch (child.name) {
161
+ case 'logging':
162
+ child.handler = handleLogging;
163
+ break;
164
+ case 'ipv6':
165
+ child.handler = handleIpv6;
166
+ break;
167
+ case 'otel':
168
+ child.handler = handleOtel;
169
+ break;
170
+ case 'postgres':
171
+ child.handler = handlePostgres;
172
+ break;
173
+ case 'certs':
174
+ child.handler = handleCertsReset;
175
+ break;
176
+ case 'audit':
177
+ if (child.children) {
178
+ for (const ac of child.children) {
179
+ switch (ac.name) {
180
+ case 'run':
181
+ ac.handler = handleAuditRun;
182
+ break;
183
+ case 'report':
184
+ ac.handler = handleAuditReport;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ break;
190
+ }
191
+ }
192
+ }
193
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/shell/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ShellContext } from '../context.js';
2
+ /**
3
+ * connect <name> <type> --host <host> | --url <url>
4
+ */
5
+ export declare function connectHandler(args: string[], opts: Record<string, string>, ctx: ShellContext): Promise<void>;
6
+ /**
7
+ * disconnect <name>
8
+ */
9
+ export declare function disconnectHandler(args: string[], _opts: Record<string, string>, ctx: ShellContext): Promise<void>;
10
+ /**
11
+ * show connections — list active MCP connections
12
+ */
13
+ export declare function showConnectionsHandler(_args: string[], _opts: Record<string, string>, ctx: ShellContext): Promise<void>;
14
+ /**
15
+ * Wire connect/disconnect handlers into the command tree.
16
+ */
17
+ export declare function wireConnectHandlers(): void;
18
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,eAAe,CAAC;AAYjE;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAqB1C"}
@@ -0,0 +1,99 @@
1
+ import { McpBridge } from '../mcp-bridge.js';
2
+ import { statusLine } from '../formatter.js';
3
+ import { commandTree } from './registry.js';
4
+ const VALID_TYPES = ['cucm', 'dashboard', 'phone', 'ris'];
5
+ function isValidType(t) {
6
+ return VALID_TYPES.includes(t);
7
+ }
8
+ /**
9
+ * connect <name> <type> --host <host> | --url <url>
10
+ */
11
+ export async function connectHandler(args, opts, ctx) {
12
+ const name = args[0];
13
+ const type = args[1];
14
+ if (!name || !type) {
15
+ console.log('Usage: connect <name> <type> --host <host>');
16
+ console.log('Types: cucm, dashboard, phone, ris');
17
+ return;
18
+ }
19
+ if (!isValidType(type)) {
20
+ console.log(`% Invalid connection type "${type}". Valid types: ${VALID_TYPES.join(', ')}`);
21
+ return;
22
+ }
23
+ const host = opts['--host'] ?? opts['--url'] ?? 'localhost';
24
+ if (ctx.connections.has(name)) {
25
+ console.log(`% Connection "${name}" already exists. Disconnect first.`);
26
+ return;
27
+ }
28
+ const bridge = new McpBridge(name, type, host);
29
+ await bridge.connect();
30
+ const conn = { name, type };
31
+ ctx.connections.set(name, conn);
32
+ console.log(statusLine(`Connected to ${name} (${type}) at ${host}`, 'ok'));
33
+ // Update prompt to show active connection
34
+ const rlAny = ctx.rl; // eslint-disable-line @typescript-eslint/no-explicit-any
35
+ rlAny.setPrompt(`ct(${name})# `);
36
+ }
37
+ /**
38
+ * disconnect <name>
39
+ */
40
+ export async function disconnectHandler(args, _opts, ctx) {
41
+ const name = args[0];
42
+ if (!name) {
43
+ console.log('Usage: disconnect <name>');
44
+ return;
45
+ }
46
+ if (!ctx.connections.has(name)) {
47
+ console.log(`% No connection named "${name}"`);
48
+ return;
49
+ }
50
+ ctx.connections.delete(name);
51
+ console.log(statusLine(`Disconnected from ${name}`, 'info'));
52
+ // Reset prompt if no connections remain
53
+ const rlAny = ctx.rl; // eslint-disable-line @typescript-eslint/no-explicit-any
54
+ if (ctx.connections.size === 0) {
55
+ rlAny.setPrompt('ct# ');
56
+ }
57
+ else {
58
+ // Show the first remaining connection in prompt
59
+ const first = ctx.connections.keys().next().value;
60
+ rlAny.setPrompt(`ct(${first})# `);
61
+ }
62
+ }
63
+ /**
64
+ * show connections — list active MCP connections
65
+ */
66
+ export async function showConnectionsHandler(_args, _opts, ctx) {
67
+ if (ctx.connections.size === 0) {
68
+ console.log('No active connections.');
69
+ return;
70
+ }
71
+ console.log('Active MCP Connections:');
72
+ for (const [name, conn] of ctx.connections) {
73
+ console.log(` ${name.padEnd(16)} ${conn.type}`);
74
+ }
75
+ }
76
+ /**
77
+ * Wire connect/disconnect handlers into the command tree.
78
+ */
79
+ export function wireConnectHandlers() {
80
+ const connectNode = commandTree.children?.find(c => c.name === 'connect');
81
+ if (connectNode) {
82
+ connectNode.handler = connectHandler;
83
+ connectNode.options = [
84
+ { name: '--host', description: 'Host address', hasValue: true },
85
+ { name: '--url', description: 'URL address', hasValue: true },
86
+ ];
87
+ }
88
+ const disconnectNode = commandTree.children?.find(c => c.name === 'disconnect');
89
+ if (disconnectNode) {
90
+ disconnectNode.handler = disconnectHandler;
91
+ }
92
+ // Wire "show connections" handler
93
+ const showNode = commandTree.children?.find(c => c.name === 'show');
94
+ const connectionsNode = showNode?.children?.find(c => c.name === 'connections');
95
+ if (connectionsNode) {
96
+ connectionsNode.handler = showConnectionsHandler;
97
+ }
98
+ }
99
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/shell/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ShellContext } from '../context.js';
2
+ import type { CommandNode } from '../parser.js';
3
+ export declare function handleBackup(args: string[], opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
4
+ export declare function handleRestore(args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
5
+ export declare function handleCompact(_args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
6
+ export declare function handlePurge(args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
7
+ export declare function handleMigrateRun(_args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
8
+ export declare function handleMigrateRollback(args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
9
+ export declare function handleMigrateWatch(_args: string[], _opts: Record<string, string>, ctx: ShellContext): Promise<void>;
10
+ export declare function wireDbHandlers(databaseNode: CommandNode): void;
11
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/db.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQhD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlH;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BpH;AAID,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrH;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDlH;AAID,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxH;AAID,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5H;AAID,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCzH;AAID,wBAAgB,cAAc,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAoC9D"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Shell command handlers for the `database` command group.
3
+ */
4
+ import { existsSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { mkdir } from 'node:fs/promises';
7
+ import { composeExec } from '../../lib/compose.js';
8
+ import { DB_USER, DB_NAME, PG_ENV } from '../../lib/db.js';
9
+ import { getPaths } from '../../lib/paths.js';
10
+ import { rpc } from '../../lib/rpc.js';
11
+ import { banner, statusLine, stepProgress } from '../formatter.js';
12
+ function psql(query, pipe = true) {
13
+ return composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-c', query], { env: PG_ENV, pipe });
14
+ }
15
+ // ── database backup ─────────────────────────────────────────────────────────
16
+ export async function handleBackup(args, opts, _ctx) {
17
+ try {
18
+ const { dbDumpsDir } = getPaths();
19
+ const targetDir = opts['--path'] ?? dbDumpsDir;
20
+ if (!existsSync(targetDir)) {
21
+ await mkdir(targetDir, { recursive: true });
22
+ }
23
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
24
+ const filename = `backup-${timestamp}.sql`;
25
+ const filepath = join(targetDir, filename);
26
+ console.log(banner('Database Backup'));
27
+ console.log(stepProgress('Creating pg_dump', 'running'));
28
+ await composeExec('db', [
29
+ 'pg_dump', '-U', DB_USER, '-d', DB_NAME, '-f', `/tmp/${filename}`,
30
+ ], { env: PG_ENV });
31
+ // Copy out of container
32
+ await composeExec('db', ['cp', `/tmp/${filename}`, `/backups/${filename}`], { env: PG_ENV });
33
+ console.log(stepProgress('Creating pg_dump', 'done', filepath));
34
+ console.log(statusLine('Backup complete', 'ok', filepath));
35
+ }
36
+ catch (err) {
37
+ const msg = err instanceof Error ? err.message : String(err);
38
+ console.log(stepProgress('Creating pg_dump', 'fail', msg));
39
+ }
40
+ }
41
+ // ── database restore ────────────────────────────────────────────────────────
42
+ export async function handleRestore(args, _opts, _ctx) {
43
+ const file = args[0];
44
+ if (!file) {
45
+ console.log('% Usage: database restore <file>');
46
+ return;
47
+ }
48
+ if (!existsSync(file)) {
49
+ console.log(statusLine(`Backup file not found: ${file}`, 'fail'));
50
+ return;
51
+ }
52
+ try {
53
+ console.log(banner('Database Restore'));
54
+ console.log(stepProgress('Restoring database', 'running', file));
55
+ await composeExec('db', [
56
+ 'psql', '-U', DB_USER, '-d', DB_NAME, '-f', file,
57
+ ], { env: PG_ENV });
58
+ console.log(stepProgress('Restoring database', 'done'));
59
+ console.log(statusLine('Restore complete', 'ok'));
60
+ }
61
+ catch (err) {
62
+ const msg = err instanceof Error ? err.message : String(err);
63
+ console.log(stepProgress('Restoring database', 'fail', msg));
64
+ }
65
+ }
66
+ // ── database compact ────────────────────────────────────────────────────────
67
+ export async function handleCompact(_args, _opts, _ctx) {
68
+ try {
69
+ console.log(banner('Database Compact'));
70
+ console.log(stepProgress('VACUUM FULL', 'running'));
71
+ await composeExec('db', [
72
+ 'psql', '-U', DB_USER, '-d', DB_NAME, '-c', 'VACUUM FULL;',
73
+ ], { env: PG_ENV });
74
+ console.log(stepProgress('VACUUM FULL', 'done'));
75
+ console.log(stepProgress('ANALYZE', 'running'));
76
+ await composeExec('db', [
77
+ 'psql', '-U', DB_USER, '-d', DB_NAME, '-c', 'ANALYZE;',
78
+ ], { env: PG_ENV });
79
+ console.log(stepProgress('ANALYZE', 'done'));
80
+ console.log(statusLine('Compact complete', 'ok'));
81
+ }
82
+ catch (err) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ console.log(stepProgress('Compact', 'fail', msg));
85
+ }
86
+ }
87
+ // ── database purge ──────────────────────────────────────────────────────────
88
+ export async function handlePurge(args, _opts, _ctx) {
89
+ const table = args[0];
90
+ const daysStr = args[1];
91
+ if (!table || !daysStr) {
92
+ console.log('% Usage: database purge <table> <days>');
93
+ return;
94
+ }
95
+ const days = parseInt(daysStr, 10);
96
+ if (isNaN(days) || days <= 0) {
97
+ console.log(statusLine('Days must be a positive number', 'fail'));
98
+ return;
99
+ }
100
+ try {
101
+ console.log(banner(`Purge ${table}`));
102
+ // Verify table exists
103
+ const existsResult = await psql(`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = 'public' AND table_name = '${table}');`);
104
+ if (!(existsResult.stdout ?? '').includes('t')) {
105
+ console.log(statusLine(`Table '${table}' does not exist`, 'fail'));
106
+ return;
107
+ }
108
+ // Verify inserted_at column
109
+ const colResult = await psql(`SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = 'public' AND table_name = '${table}' AND column_name = 'inserted_at');`);
110
+ if (!(colResult.stdout ?? '').includes('t')) {
111
+ console.log(statusLine(`Table '${table}' has no 'inserted_at' column`, 'fail'));
112
+ return;
113
+ }
114
+ // Count affected rows
115
+ const countResult = await psql(`SELECT COUNT(*) FROM ${table} WHERE inserted_at < NOW() - INTERVAL '${days} days';`);
116
+ const count = (countResult.stdout ?? '').trim();
117
+ console.log(statusLine(`Found ${count} records older than ${days} days`, 'info'));
118
+ console.log(stepProgress('Purging records', 'running'));
119
+ await psql(`DELETE FROM ${table} WHERE inserted_at < NOW() - INTERVAL '${days} days';`);
120
+ console.log(stepProgress('Purging records', 'done', `${count} rows removed`));
121
+ console.log(statusLine('Purge complete', 'ok', `Run 'database compact' to reclaim disk space`));
122
+ }
123
+ catch (err) {
124
+ const msg = err instanceof Error ? err.message : String(err);
125
+ console.log(stepProgress('Purge', 'fail', msg));
126
+ }
127
+ }
128
+ // ── database migrate run ────────────────────────────────────────────────────
129
+ export async function handleMigrateRun(_args, _opts, _ctx) {
130
+ try {
131
+ console.log(banner('Run Migrations'));
132
+ console.log(stepProgress('Running pending migrations', 'running'));
133
+ const output = await rpc('Ecto.Migrator.run(Cdrcisco.Repo, :up, all: true) |> inspect() |> IO.puts()');
134
+ console.log(stepProgress('Running pending migrations', 'done'));
135
+ if (output.trim()) {
136
+ console.log(output.trim());
137
+ }
138
+ console.log(statusLine('Migrations applied', 'ok'));
139
+ }
140
+ catch (err) {
141
+ const msg = err instanceof Error ? err.message : String(err);
142
+ console.log(stepProgress('Migrations', 'fail', msg));
143
+ }
144
+ }
145
+ // ── database migrate rollback ───────────────────────────────────────────────
146
+ export async function handleMigrateRollback(args, _opts, _ctx) {
147
+ const steps = args[0] ? parseInt(args[0], 10) : 1;
148
+ if (isNaN(steps) || steps <= 0) {
149
+ console.log(statusLine('Steps must be a positive number', 'fail'));
150
+ return;
151
+ }
152
+ try {
153
+ console.log(banner('Rollback Migrations'));
154
+ console.log(stepProgress(`Rolling back ${steps} migration(s)`, 'running'));
155
+ const output = await rpc(`Ecto.Migrator.run(Cdrcisco.Repo, :down, step: ${steps}) |> inspect() |> IO.puts()`);
156
+ console.log(stepProgress(`Rolling back ${steps} migration(s)`, 'done'));
157
+ if (output.trim()) {
158
+ console.log(output.trim());
159
+ }
160
+ console.log(statusLine('Rollback complete', 'ok'));
161
+ }
162
+ catch (err) {
163
+ const msg = err instanceof Error ? err.message : String(err);
164
+ console.log(stepProgress('Rollback', 'fail', msg));
165
+ }
166
+ }
167
+ // ── database migrate watch ──────────────────────────────────────────────────
168
+ export async function handleMigrateWatch(_args, _opts, ctx) {
169
+ console.log(banner('Migration Watch'));
170
+ console.log('Polling migration count every 5s. Press Ctrl-C to stop.\n');
171
+ let running = true;
172
+ const onSigint = () => {
173
+ running = false;
174
+ };
175
+ process.once('SIGINT', onSigint);
176
+ try {
177
+ while (running) {
178
+ try {
179
+ const output = await rpc('Ecto.Migrator.migrations(Cdrcisco.Repo) |> length() |> IO.puts()');
180
+ const count = output.trim();
181
+ const ts = new Date().toLocaleTimeString();
182
+ console.log(statusLine(`${ts} — ${count} migration(s) applied`, 'info'));
183
+ }
184
+ catch (err) {
185
+ const msg = err instanceof Error ? err.message : String(err);
186
+ console.log(statusLine(`Poll failed: ${msg}`, 'warn'));
187
+ }
188
+ // Wait 5s, but break early if stopped
189
+ for (let i = 0; i < 50 && running; i++) {
190
+ await new Promise(r => setTimeout(r, 100));
191
+ }
192
+ }
193
+ }
194
+ finally {
195
+ process.removeListener('SIGINT', onSigint);
196
+ console.log('\nWatch stopped.');
197
+ }
198
+ }
199
+ // ── Wire handlers into command tree ─────────────────────────────────────────
200
+ export function wireDbHandlers(databaseNode) {
201
+ if (!databaseNode.children)
202
+ return;
203
+ for (const child of databaseNode.children) {
204
+ switch (child.name) {
205
+ case 'backup':
206
+ child.handler = handleBackup;
207
+ break;
208
+ case 'restore':
209
+ child.handler = handleRestore;
210
+ break;
211
+ case 'compact':
212
+ child.handler = handleCompact;
213
+ break;
214
+ case 'purge':
215
+ child.handler = handlePurge;
216
+ break;
217
+ case 'migrate':
218
+ if (child.children) {
219
+ for (const mc of child.children) {
220
+ switch (mc.name) {
221
+ case 'up':
222
+ mc.handler = handleMigrateRun;
223
+ break;
224
+ case 'down':
225
+ mc.handler = handleMigrateRollback;
226
+ break;
227
+ case 'watch':
228
+ mc.handler = handleMigrateWatch;
229
+ break;
230
+ }
231
+ }
232
+ }
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/shell/commands/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Shell command handlers for the `debug` command tree.
3
+ *
4
+ * debug network — Network connectivity diagnostics
5
+ * debug database — Database health checks
6
+ * debug service — Recent service logs + systemd journal
7
+ * debug showtech — 19-step support bundle collection
8
+ * debug packet-capture start|stop|list <host> — CUCM MCP packet capture
9
+ * debug trace start|stop <host> — CUCM MCP trace
10
+ * debug ris <device> — RIS device query
11
+ * debug sdl-trace <host> <call-id> — SDL trace call flow
12
+ */
13
+ import type { CommandNode } from '../parser.js';
14
+ export declare function wireDebugHandlers(debugNode: CommandNode): void;
15
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA6ShD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAwC9D"}