rackmind-cli 0.1.2

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 (183) hide show
  1. package/README.md +179 -0
  2. package/bin/rackmind.js +6 -0
  3. package/dist/ai/client.d.ts +71 -0
  4. package/dist/ai/client.d.ts.map +1 -0
  5. package/dist/ai/client.js +198 -0
  6. package/dist/ai/client.js.map +1 -0
  7. package/dist/ai/system-prompt.d.ts +20 -0
  8. package/dist/ai/system-prompt.d.ts.map +1 -0
  9. package/dist/ai/system-prompt.js +169 -0
  10. package/dist/ai/system-prompt.js.map +1 -0
  11. package/dist/ai/tool-executor.d.ts +27 -0
  12. package/dist/ai/tool-executor.d.ts.map +1 -0
  13. package/dist/ai/tool-executor.js +184 -0
  14. package/dist/ai/tool-executor.js.map +1 -0
  15. package/dist/ai/tools.d.ts +7 -0
  16. package/dist/ai/tools.d.ts.map +1 -0
  17. package/dist/ai/tools.js +203 -0
  18. package/dist/ai/tools.js.map +1 -0
  19. package/dist/commands/config.d.ts +21 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +169 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/connect.d.ts +7 -0
  24. package/dist/commands/connect.d.ts.map +1 -0
  25. package/dist/commands/connect.js +117 -0
  26. package/dist/commands/connect.js.map +1 -0
  27. package/dist/commands/containers.d.ts +5 -0
  28. package/dist/commands/containers.d.ts.map +1 -0
  29. package/dist/commands/containers.js +83 -0
  30. package/dist/commands/containers.js.map +1 -0
  31. package/dist/commands/exec.d.ts +5 -0
  32. package/dist/commands/exec.d.ts.map +1 -0
  33. package/dist/commands/exec.js +133 -0
  34. package/dist/commands/exec.js.map +1 -0
  35. package/dist/commands/lifecycle.d.ts +7 -0
  36. package/dist/commands/lifecycle.d.ts.map +1 -0
  37. package/dist/commands/lifecycle.js +213 -0
  38. package/dist/commands/lifecycle.js.map +1 -0
  39. package/dist/commands/logs.d.ts +5 -0
  40. package/dist/commands/logs.d.ts.map +1 -0
  41. package/dist/commands/logs.js +117 -0
  42. package/dist/commands/logs.js.map +1 -0
  43. package/dist/commands/report.d.ts +6 -0
  44. package/dist/commands/report.d.ts.map +1 -0
  45. package/dist/commands/report.js +203 -0
  46. package/dist/commands/report.js.map +1 -0
  47. package/dist/commands/servers.d.ts +17 -0
  48. package/dist/commands/servers.d.ts.map +1 -0
  49. package/dist/commands/servers.js +116 -0
  50. package/dist/commands/servers.js.map +1 -0
  51. package/dist/commands/status.d.ts +5 -0
  52. package/dist/commands/status.d.ts.map +1 -0
  53. package/dist/commands/status.js +174 -0
  54. package/dist/commands/status.js.map +1 -0
  55. package/dist/commands/vms.d.ts +5 -0
  56. package/dist/commands/vms.d.ts.map +1 -0
  57. package/dist/commands/vms.js +83 -0
  58. package/dist/commands/vms.js.map +1 -0
  59. package/dist/config/crypto.d.ts +20 -0
  60. package/dist/config/crypto.d.ts.map +1 -0
  61. package/dist/config/crypto.js +78 -0
  62. package/dist/config/crypto.js.map +1 -0
  63. package/dist/config/index.d.ts +21 -0
  64. package/dist/config/index.d.ts.map +1 -0
  65. package/dist/config/index.js +158 -0
  66. package/dist/config/index.js.map +1 -0
  67. package/dist/config/types.d.ts +263 -0
  68. package/dist/config/types.d.ts.map +1 -0
  69. package/dist/config/types.js +83 -0
  70. package/dist/config/types.js.map +1 -0
  71. package/dist/globals.d.ts +22 -0
  72. package/dist/globals.d.ts.map +1 -0
  73. package/dist/globals.js +43 -0
  74. package/dist/globals.js.map +1 -0
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +399 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/interactive/App.d.ts +3 -0
  80. package/dist/interactive/App.d.ts.map +1 -0
  81. package/dist/interactive/App.js +103 -0
  82. package/dist/interactive/App.js.map +1 -0
  83. package/dist/interactive/components/Header.d.ts +8 -0
  84. package/dist/interactive/components/Header.d.ts.map +1 -0
  85. package/dist/interactive/components/Header.js +20 -0
  86. package/dist/interactive/components/Header.js.map +1 -0
  87. package/dist/interactive/components/InputBar.d.ts +9 -0
  88. package/dist/interactive/components/InputBar.d.ts.map +1 -0
  89. package/dist/interactive/components/InputBar.js +89 -0
  90. package/dist/interactive/components/InputBar.js.map +1 -0
  91. package/dist/interactive/components/MessageList.d.ts +9 -0
  92. package/dist/interactive/components/MessageList.d.ts.map +1 -0
  93. package/dist/interactive/components/MessageList.js +28 -0
  94. package/dist/interactive/components/MessageList.js.map +1 -0
  95. package/dist/interactive/components/Spinner.d.ts +7 -0
  96. package/dist/interactive/components/Spinner.d.ts.map +1 -0
  97. package/dist/interactive/components/Spinner.js +19 -0
  98. package/dist/interactive/components/Spinner.js.map +1 -0
  99. package/dist/interactive/components/StatusBar.d.ts +10 -0
  100. package/dist/interactive/components/StatusBar.d.ts.map +1 -0
  101. package/dist/interactive/components/StatusBar.js +7 -0
  102. package/dist/interactive/components/StatusBar.js.map +1 -0
  103. package/dist/interactive/components/StreamingMessage.d.ts +7 -0
  104. package/dist/interactive/components/StreamingMessage.d.ts.map +1 -0
  105. package/dist/interactive/components/StreamingMessage.js +9 -0
  106. package/dist/interactive/components/StreamingMessage.js.map +1 -0
  107. package/dist/interactive/components/ToolIndicator.d.ts +7 -0
  108. package/dist/interactive/components/ToolIndicator.d.ts.map +1 -0
  109. package/dist/interactive/components/ToolIndicator.js +10 -0
  110. package/dist/interactive/components/ToolIndicator.js.map +1 -0
  111. package/dist/interactive/components/ToolOutput.d.ts +8 -0
  112. package/dist/interactive/components/ToolOutput.d.ts.map +1 -0
  113. package/dist/interactive/components/ToolOutput.js +9 -0
  114. package/dist/interactive/components/ToolOutput.js.map +1 -0
  115. package/dist/interactive/components/WelcomeScreen.d.ts +9 -0
  116. package/dist/interactive/components/WelcomeScreen.d.ts.map +1 -0
  117. package/dist/interactive/components/WelcomeScreen.js +8 -0
  118. package/dist/interactive/components/WelcomeScreen.js.map +1 -0
  119. package/dist/interactive/launch.d.ts +6 -0
  120. package/dist/interactive/launch.d.ts.map +1 -0
  121. package/dist/interactive/launch.js +30 -0
  122. package/dist/interactive/launch.js.map +1 -0
  123. package/dist/interactive/slashCommands.d.ts +13 -0
  124. package/dist/interactive/slashCommands.d.ts.map +1 -0
  125. package/dist/interactive/slashCommands.js +102 -0
  126. package/dist/interactive/slashCommands.js.map +1 -0
  127. package/dist/interactive/useRackMind.d.ts +30 -0
  128. package/dist/interactive/useRackMind.d.ts.map +1 -0
  129. package/dist/interactive/useRackMind.js +241 -0
  130. package/dist/interactive/useRackMind.js.map +1 -0
  131. package/dist/oneshot/run.d.ts +2 -0
  132. package/dist/oneshot/run.d.ts.map +1 -0
  133. package/dist/oneshot/run.js +195 -0
  134. package/dist/oneshot/run.js.map +1 -0
  135. package/dist/server/client.d.ts +89 -0
  136. package/dist/server/client.d.ts.map +1 -0
  137. package/dist/server/client.js +239 -0
  138. package/dist/server/client.js.map +1 -0
  139. package/dist/server/proxmox.d.ts +160 -0
  140. package/dist/server/proxmox.d.ts.map +1 -0
  141. package/dist/server/proxmox.js +219 -0
  142. package/dist/server/proxmox.js.map +1 -0
  143. package/dist/server/ssh.d.ts +80 -0
  144. package/dist/server/ssh.d.ts.map +1 -0
  145. package/dist/server/ssh.js +262 -0
  146. package/dist/server/ssh.js.map +1 -0
  147. package/dist/utils/ascii.d.ts +3 -0
  148. package/dist/utils/ascii.d.ts.map +1 -0
  149. package/dist/utils/ascii.js +16 -0
  150. package/dist/utils/ascii.js.map +1 -0
  151. package/dist/utils/format.d.ts +7 -0
  152. package/dist/utils/format.d.ts.map +1 -0
  153. package/dist/utils/format.js +20 -0
  154. package/dist/utils/format.js.map +1 -0
  155. package/dist/utils/history.d.ts +23 -0
  156. package/dist/utils/history.d.ts.map +1 -0
  157. package/dist/utils/history.js +107 -0
  158. package/dist/utils/history.js.map +1 -0
  159. package/dist/utils/logger.d.ts +9 -0
  160. package/dist/utils/logger.d.ts.map +1 -0
  161. package/dist/utils/logger.js +51 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/dist/utils/markdown.d.ts +12 -0
  164. package/dist/utils/markdown.d.ts.map +1 -0
  165. package/dist/utils/markdown.js +76 -0
  166. package/dist/utils/markdown.js.map +1 -0
  167. package/dist/utils/prompt.d.ts +25 -0
  168. package/dist/utils/prompt.d.ts.map +1 -0
  169. package/dist/utils/prompt.js +133 -0
  170. package/dist/utils/prompt.js.map +1 -0
  171. package/dist/utils/retry.d.ts +37 -0
  172. package/dist/utils/retry.d.ts.map +1 -0
  173. package/dist/utils/retry.js +122 -0
  174. package/dist/utils/retry.js.map +1 -0
  175. package/dist/utils/shutdown.d.ts +22 -0
  176. package/dist/utils/shutdown.d.ts.map +1 -0
  177. package/dist/utils/shutdown.js +94 -0
  178. package/dist/utils/shutdown.js.map +1 -0
  179. package/dist/utils/table.d.ts +38 -0
  180. package/dist/utils/table.d.ts.map +1 -0
  181. package/dist/utils/table.js +150 -0
  182. package/dist/utils/table.js.map +1 -0
  183. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/commands/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Stream logs for a guest (container or VM).
3
+ */
4
+ export declare function logsCommand(vmidStr: string, lines: number, follow: boolean): Promise<void>;
5
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EhG"}
@@ -0,0 +1,117 @@
1
+ // ---------------------------------------------------------------------------
2
+ // rackmind logs <vmid> — tail container/VM task logs via SSH
3
+ // ---------------------------------------------------------------------------
4
+ // Connects over SSH and streams syslog or journal output from the guest.
5
+ // For LXC: reads the container's syslog via `pct exec <vmid> -- journalctl`
6
+ // For QEMU: reads the host-side task log from /var/log/pve/tasks/
7
+ // Supports --lines <n> to control how many recent lines to show (default 50).
8
+ // Supports --follow (-f) to tail the log in real time.
9
+ // ---------------------------------------------------------------------------
10
+ import chalk from 'chalk';
11
+ import { ServerClient } from '../server/client.js';
12
+ import { formatError, formatDim } from '../utils/format.js';
13
+ import { logger } from '../utils/logger.js';
14
+ /**
15
+ * Stream logs for a guest (container or VM).
16
+ */
17
+ export async function logsCommand(vmidStr, lines, follow) {
18
+ const vmid = parseInt(vmidStr, 10);
19
+ if (isNaN(vmid) || vmid <= 0) {
20
+ process.stderr.write(formatError(`Invalid VMID: "${vmidStr}" — must be a positive number`) + '\n');
21
+ process.exit(1);
22
+ }
23
+ let client = null;
24
+ try {
25
+ client = ServerClient.fromActiveProfile();
26
+ }
27
+ catch (err) {
28
+ const message = err instanceof Error ? err.message : String(err);
29
+ process.stderr.write(formatError(message) + '\n');
30
+ process.exit(1);
31
+ }
32
+ try {
33
+ const node = await client.getNodeName();
34
+ const guestType = await detectGuestType(client, vmid, node);
35
+ if (!guestType) {
36
+ process.stderr.write(formatError(`VMID ${vmid} not found as either an LXC container or QEMU VM`) + '\n');
37
+ process.exit(1);
38
+ }
39
+ const command = buildLogCommand(vmid, guestType, lines, follow);
40
+ process.stderr.write(formatDim(`Tailing logs for ${guestType === 'lxc' ? 'container' : 'VM'} ${vmid}...\n`));
41
+ process.stderr.write(chalk.dim('─'.repeat(60) + '\n'));
42
+ // Handle Ctrl+C gracefully when following
43
+ const cleanup = () => {
44
+ client?.dispose();
45
+ process.exit(0);
46
+ };
47
+ process.on('SIGINT', cleanup);
48
+ if (guestType === 'lxc') {
49
+ // For LXC containers, execute inside the container
50
+ await client.execInContainerStream(vmid, command, (data, stream) => {
51
+ if (stream === 'stdout') {
52
+ process.stdout.write(data);
53
+ }
54
+ else {
55
+ process.stderr.write(chalk.dim(data));
56
+ }
57
+ });
58
+ }
59
+ else {
60
+ // For QEMU VMs, execute on the host
61
+ await client.execOnHostStream(command, (data, stream) => {
62
+ if (stream === 'stdout') {
63
+ process.stdout.write(data);
64
+ }
65
+ else {
66
+ process.stderr.write(chalk.dim(data));
67
+ }
68
+ });
69
+ }
70
+ process.stderr.write(chalk.dim('─'.repeat(60) + '\n'));
71
+ }
72
+ catch (err) {
73
+ const message = err instanceof Error ? err.message : String(err);
74
+ logger.error('Logs command failed', { error: message, vmid });
75
+ process.stderr.write(formatError(message) + '\n');
76
+ process.exit(1);
77
+ }
78
+ finally {
79
+ client.dispose();
80
+ }
81
+ }
82
+ /**
83
+ * Detect whether a VMID is an LXC container or QEMU VM.
84
+ */
85
+ async function detectGuestType(client, vmid, node) {
86
+ try {
87
+ const containers = await client.listContainers(node);
88
+ if (containers.some((ct) => ct.vmid === vmid))
89
+ return 'lxc';
90
+ }
91
+ catch {
92
+ // Ignore — try VMs next
93
+ }
94
+ try {
95
+ const vms = await client.listVMs(node);
96
+ if (vms.some((vm) => vm.vmid === vmid))
97
+ return 'qemu';
98
+ }
99
+ catch {
100
+ // Ignore
101
+ }
102
+ return null;
103
+ }
104
+ /**
105
+ * Build the appropriate log command based on guest type.
106
+ */
107
+ function buildLogCommand(vmid, type, lines, follow) {
108
+ const followFlag = follow ? ' -f' : '';
109
+ const linesFlag = `-n ${lines}`;
110
+ if (type === 'lxc') {
111
+ // Inside the container, try journalctl first, fall back to syslog
112
+ return `journalctl ${linesFlag}${followFlag} --no-pager 2>/dev/null || tail ${linesFlag}${followFlag ? ' -f' : ''} /var/log/syslog 2>/dev/null || tail ${linesFlag}${followFlag ? ' -f' : ''} /var/log/messages 2>/dev/null || echo "No logs found"`;
113
+ }
114
+ // For QEMU VMs, read the host-side qemu log or task log
115
+ return `journalctl ${linesFlag}${followFlag} --no-pager -u qemu-server@${vmid} 2>/dev/null || tail ${linesFlag}${followFlag ? ' -f' : ''} /var/log/pve/qemu-server/${vmid}.log 2>/dev/null || echo "No logs found for VM ${vmid}"`;
116
+ }
117
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type ReportFormat = 'json' | 'stdout';
2
+ /**
3
+ * Generate and display a server health report.
4
+ */
5
+ export declare function reportCommand(format: ReportFormat): Promise<void>;
6
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAmD7C;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvE"}
@@ -0,0 +1,203 @@
1
+ // ---------------------------------------------------------------------------
2
+ // rackmind report — generate a server health report
3
+ // ---------------------------------------------------------------------------
4
+ // Fetches node, container, and VM data from the Proxmox API and renders
5
+ // a comprehensive health overview with resource usage tables.
6
+ // Supports --json for machine-readable output.
7
+ // ---------------------------------------------------------------------------
8
+ import chalk from 'chalk';
9
+ import { ServerClient, } from '../server/client.js';
10
+ import { createTable, formatBytes, formatPercent, formatUptime, formatUsageBar, colorStatus, truncate, printSectionHeader, } from '../utils/table.js';
11
+ import { formatError } from '../utils/format.js';
12
+ import { logger } from '../utils/logger.js';
13
+ /**
14
+ * Generate and display a server health report.
15
+ */
16
+ export async function reportCommand(format) {
17
+ let client = null;
18
+ try {
19
+ client = ServerClient.fromActiveProfile();
20
+ }
21
+ catch (err) {
22
+ const message = err instanceof Error ? err.message : String(err);
23
+ process.stderr.write(formatError(message) + '\n');
24
+ process.exit(1);
25
+ }
26
+ try {
27
+ const node = await client.getNodeName();
28
+ // Fetch all data in parallel
29
+ const [nodes, containers, vms] = await Promise.all([
30
+ client.listNodes(),
31
+ client.listContainers(node),
32
+ client.listVMs(node),
33
+ ]);
34
+ // Sort guests by VMID
35
+ containers.sort((a, b) => a.vmid - b.vmid);
36
+ vms.sort((a, b) => a.vmid - b.vmid);
37
+ const report = buildReportData(node, nodes, containers, vms);
38
+ if (format === 'json') {
39
+ process.stdout.write(JSON.stringify(report, null, 2) + '\n');
40
+ return;
41
+ }
42
+ renderStdoutReport(report, nodes, containers, vms);
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ logger.error('Report command failed', { error: message });
47
+ process.stderr.write(formatError(message) + '\n');
48
+ process.exit(1);
49
+ }
50
+ finally {
51
+ client.dispose();
52
+ }
53
+ }
54
+ /**
55
+ * Build the full report data object.
56
+ */
57
+ function buildReportData(activeNode, nodes, containers, vms) {
58
+ return {
59
+ generatedAt: new Date().toISOString(),
60
+ serverAlias: activeNode,
61
+ node: activeNode,
62
+ nodes: nodes.map((n) => ({
63
+ name: n.node,
64
+ status: n.status,
65
+ cpuUsage: n.cpu,
66
+ maxCpu: n.maxcpu,
67
+ memUsed: n.mem,
68
+ memMax: n.maxmem,
69
+ memPercent: n.maxmem > 0 ? n.mem / n.maxmem : 0,
70
+ diskUsed: n.disk,
71
+ diskMax: n.maxdisk,
72
+ diskPercent: n.maxdisk > 0 ? n.disk / n.maxdisk : 0,
73
+ uptime: n.uptime,
74
+ })),
75
+ containers: containers.map((ct) => ({
76
+ vmid: ct.vmid,
77
+ name: ct.name,
78
+ type: 'lxc',
79
+ status: ct.status,
80
+ cpus: ct.cpus,
81
+ memUsed: ct.mem,
82
+ memMax: ct.maxmem,
83
+ memPercent: ct.maxmem > 0 ? ct.mem / ct.maxmem : 0,
84
+ diskUsed: ct.disk,
85
+ diskMax: ct.maxdisk,
86
+ diskPercent: ct.maxdisk > 0 ? ct.disk / ct.maxdisk : 0,
87
+ uptime: ct.uptime,
88
+ })),
89
+ vms: vms.map((vm) => ({
90
+ vmid: vm.vmid,
91
+ name: vm.name,
92
+ type: 'qemu',
93
+ status: vm.status,
94
+ cpus: vm.cpus,
95
+ memUsed: vm.mem,
96
+ memMax: vm.maxmem,
97
+ memPercent: vm.maxmem > 0 ? vm.mem / vm.maxmem : 0,
98
+ diskUsed: vm.disk,
99
+ diskMax: vm.maxdisk,
100
+ diskPercent: vm.maxdisk > 0 ? vm.disk / vm.maxdisk : 0,
101
+ uptime: vm.uptime,
102
+ })),
103
+ summary: {
104
+ totalContainers: containers.length,
105
+ runningContainers: containers.filter((c) => c.status === 'running').length,
106
+ stoppedContainers: containers.filter((c) => c.status === 'stopped').length,
107
+ totalVMs: vms.length,
108
+ runningVMs: vms.filter((v) => v.status === 'running').length,
109
+ stoppedVMs: vms.filter((v) => v.status === 'stopped').length,
110
+ },
111
+ };
112
+ }
113
+ /**
114
+ * Render the report to stderr as formatted tables.
115
+ */
116
+ function renderStdoutReport(report, nodes, containers, vms) {
117
+ // Title
118
+ process.stderr.write('\n' + chalk.cyan.bold('RackMind Server Health Report') + '\n');
119
+ process.stderr.write(chalk.dim(`Generated: ${report.generatedAt}\n`));
120
+ process.stderr.write(chalk.dim('═'.repeat(60) + '\n'));
121
+ // -- Node summary --------------------------------------------------------
122
+ renderNodesSection(nodes);
123
+ // -- Containers ----------------------------------------------------------
124
+ if (containers.length > 0) {
125
+ renderContainersSection(containers);
126
+ }
127
+ // -- VMs -----------------------------------------------------------------
128
+ if (vms.length > 0) {
129
+ renderVMsSection(vms);
130
+ }
131
+ // -- Summary -------------------------------------------------------------
132
+ renderSummarySection(report.summary);
133
+ }
134
+ function renderNodesSection(nodes) {
135
+ printSectionHeader('Nodes', nodes.length);
136
+ const table = createTable(['Node', 'Status', 'CPU', 'Memory', 'Disk', 'Uptime']);
137
+ for (const n of nodes) {
138
+ const memRatio = n.maxmem > 0 ? n.mem / n.maxmem : 0;
139
+ const diskRatio = n.maxdisk > 0 ? n.disk / n.maxdisk : 0;
140
+ table.push([
141
+ chalk.bold(n.node),
142
+ colorStatus(n.status),
143
+ formatUsageBar(n.cpu),
144
+ `${formatBytes(n.mem)} / ${formatBytes(n.maxmem)} ${formatPercent(memRatio)}`,
145
+ `${formatBytes(n.disk)} / ${formatBytes(n.maxdisk)} ${formatPercent(diskRatio)}`,
146
+ formatUptime(n.uptime),
147
+ ]);
148
+ }
149
+ process.stderr.write(table.toString() + '\n');
150
+ }
151
+ function renderContainersSection(containers) {
152
+ printSectionHeader('LXC Containers', containers.length);
153
+ const table = createTable(['VMID', 'Name', 'Status', 'CPUs', 'Memory', 'Disk', 'Uptime']);
154
+ for (const ct of containers) {
155
+ const memRatio = ct.maxmem > 0 ? ct.mem / ct.maxmem : 0;
156
+ const diskRatio = ct.maxdisk > 0 ? ct.disk / ct.maxdisk : 0;
157
+ table.push([
158
+ String(ct.vmid),
159
+ truncate(ct.name || chalk.dim('(unnamed)'), 20),
160
+ colorStatus(ct.status),
161
+ String(ct.cpus),
162
+ `${formatBytes(ct.mem)} / ${formatBytes(ct.maxmem)} ${formatPercent(memRatio)}`,
163
+ `${formatBytes(ct.disk)} / ${formatBytes(ct.maxdisk)} ${formatPercent(diskRatio)}`,
164
+ formatUptime(ct.uptime),
165
+ ]);
166
+ }
167
+ process.stderr.write(table.toString() + '\n');
168
+ }
169
+ function renderVMsSection(vms) {
170
+ printSectionHeader('QEMU Virtual Machines', vms.length);
171
+ const table = createTable(['VMID', 'Name', 'Status', 'CPUs', 'Memory', 'Disk', 'Uptime']);
172
+ for (const vm of vms) {
173
+ const memRatio = vm.maxmem > 0 ? vm.mem / vm.maxmem : 0;
174
+ const diskRatio = vm.maxdisk > 0 ? vm.disk / vm.maxdisk : 0;
175
+ table.push([
176
+ String(vm.vmid),
177
+ truncate(vm.name || chalk.dim('(unnamed)'), 20),
178
+ colorStatus(vm.status),
179
+ String(vm.cpus),
180
+ `${formatBytes(vm.mem)} / ${formatBytes(vm.maxmem)} ${formatPercent(memRatio)}`,
181
+ `${formatBytes(vm.disk)} / ${formatBytes(vm.maxdisk)} ${formatPercent(diskRatio)}`,
182
+ formatUptime(vm.uptime),
183
+ ]);
184
+ }
185
+ process.stderr.write(table.toString() + '\n');
186
+ }
187
+ function renderSummarySection(summary) {
188
+ printSectionHeader('Summary');
189
+ const totalGuests = summary.totalContainers + summary.totalVMs;
190
+ const totalRunning = summary.runningContainers + summary.runningVMs;
191
+ const totalStopped = summary.stoppedContainers + summary.stoppedVMs;
192
+ process.stderr.write(` Containers: ${chalk.green(summary.runningContainers)} running, ` +
193
+ `${chalk.yellow(summary.stoppedContainers)} stopped ` +
194
+ `${chalk.dim(`(${summary.totalContainers} total)`)}\n`);
195
+ process.stderr.write(` VMs: ${chalk.green(summary.runningVMs)} running, ` +
196
+ `${chalk.yellow(summary.stoppedVMs)} stopped ` +
197
+ `${chalk.dim(`(${summary.totalVMs} total)`)}\n`);
198
+ process.stderr.write(chalk.dim(' ─'.repeat(20) + '\n'));
199
+ process.stderr.write(` Total: ${chalk.green(totalRunning)} running, ` +
200
+ `${chalk.yellow(totalStopped)} stopped ` +
201
+ `${chalk.dim(`(${totalGuests} total)`)}\n\n`);
202
+ }
203
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * List all configured server profiles.
3
+ */
4
+ export declare function serversListCommand(): void;
5
+ /**
6
+ * Add a new server profile (delegates to connect wizard).
7
+ */
8
+ export declare function serversAddCommand(alias: string): Promise<void>;
9
+ /**
10
+ * Remove a server profile.
11
+ */
12
+ export declare function serversRemoveCommand(alias: string): Promise<void>;
13
+ /**
14
+ * Switch the active server profile.
15
+ */
16
+ export declare function serversSwitchCommand(alias: string): void;
17
+ //# sourceMappingURL=servers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAoDzC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAcxD"}
@@ -0,0 +1,116 @@
1
+ // ---------------------------------------------------------------------------
2
+ // rackmind servers — manage server profiles
3
+ // ---------------------------------------------------------------------------
4
+ // Subcommands:
5
+ // rackmind servers — list all servers
6
+ // rackmind servers add <alias> — add a new server (same as connect)
7
+ // rackmind servers remove <alias> — remove a server profile
8
+ // rackmind servers switch <alias> — switch active server
9
+ // ---------------------------------------------------------------------------
10
+ import chalk from 'chalk';
11
+ import Table from 'cli-table3';
12
+ import { listServerProfiles, readConfig, removeServerProfile, setActiveServer, getServerProfile, } from '../config/index.js';
13
+ import { connectCommand } from './connect.js';
14
+ import { formatSuccess, formatError, formatWarning, formatDim } from '../utils/format.js';
15
+ import { promptConfirm } from '../utils/prompt.js';
16
+ /**
17
+ * List all configured server profiles.
18
+ */
19
+ export function serversListCommand() {
20
+ const config = readConfig();
21
+ const profiles = listServerProfiles();
22
+ if (profiles.length === 0) {
23
+ process.stderr.write(formatWarning('No servers configured.\n'));
24
+ process.stderr.write(formatDim(' Run `rackmind servers add <alias>` to add one.\n'));
25
+ return;
26
+ }
27
+ process.stderr.write(chalk.cyan.bold(`\nServer Profiles (${profiles.length})\n\n`));
28
+ const table = new Table({
29
+ head: ['', 'Alias', 'Platform', 'Host', 'API User', 'SSH'],
30
+ style: { head: ['cyan'] },
31
+ chars: {
32
+ top: '─',
33
+ 'top-mid': '┬',
34
+ 'top-left': '┌',
35
+ 'top-right': '┐',
36
+ bottom: '─',
37
+ 'bottom-mid': '┴',
38
+ 'bottom-left': '└',
39
+ 'bottom-right': '┘',
40
+ left: '│',
41
+ 'left-mid': '├',
42
+ mid: '─',
43
+ 'mid-mid': '┼',
44
+ right: '│',
45
+ 'right-mid': '┤',
46
+ middle: '│',
47
+ },
48
+ });
49
+ for (const profile of profiles) {
50
+ const isActive = profile.alias === config.activeServer;
51
+ const marker = isActive ? chalk.green('*') : ' ';
52
+ const sshInfo = profile.sshHost
53
+ ? `${profile.sshUsername}@${profile.sshHost}:${profile.sshPort}`
54
+ : chalk.dim('—');
55
+ table.push([
56
+ marker,
57
+ isActive ? chalk.green.bold(profile.alias) : profile.alias,
58
+ profile.platform,
59
+ `${profile.host}:${profile.port}`,
60
+ profile.apiUser || chalk.dim('—'),
61
+ sshInfo,
62
+ ]);
63
+ }
64
+ process.stderr.write(table.toString() + '\n\n');
65
+ }
66
+ /**
67
+ * Add a new server profile (delegates to connect wizard).
68
+ */
69
+ export async function serversAddCommand(alias) {
70
+ const existing = getServerProfile(alias);
71
+ if (existing) {
72
+ process.stderr.write(formatError(`Server "${alias}" already exists. Use a different alias.\n`));
73
+ process.exit(1);
74
+ }
75
+ await connectCommand(alias);
76
+ }
77
+ /**
78
+ * Remove a server profile.
79
+ */
80
+ export async function serversRemoveCommand(alias) {
81
+ const profile = getServerProfile(alias);
82
+ if (!profile) {
83
+ process.stderr.write(formatError(`Server "${alias}" not found.\n`));
84
+ process.exit(1);
85
+ }
86
+ const confirmed = await promptConfirm(`Remove server "${alias}" (${profile.host})?`, false);
87
+ if (!confirmed) {
88
+ process.stderr.write(formatDim('Cancelled.\n'));
89
+ return;
90
+ }
91
+ const removed = removeServerProfile(alias);
92
+ if (removed) {
93
+ process.stderr.write(formatSuccess(`Server "${alias}" removed.\n`));
94
+ }
95
+ else {
96
+ process.stderr.write(formatError(`Failed to remove server "${alias}".\n`));
97
+ }
98
+ }
99
+ /**
100
+ * Switch the active server profile.
101
+ */
102
+ export function serversSwitchCommand(alias) {
103
+ const profile = getServerProfile(alias);
104
+ if (!profile) {
105
+ process.stderr.write(formatError(`Server "${alias}" not found.\n`));
106
+ process.stderr.write(formatDim('Available servers:\n'));
107
+ const profiles = listServerProfiles();
108
+ for (const p of profiles) {
109
+ process.stderr.write(formatDim(` - ${p.alias} (${p.host})\n`));
110
+ }
111
+ process.exit(1);
112
+ }
113
+ setActiveServer(alias);
114
+ process.stderr.write(formatSuccess(`Active server switched to "${alias}" (${profile.host})\n`));
115
+ }
116
+ //# sourceMappingURL=servers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servers.js","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Show current configuration status and test live connections.
3
+ */
4
+ export declare function statusCommand(): Promise<void>;
5
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AA2CA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAmJnD"}