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
package/dist/index.js ADDED
@@ -0,0 +1,399 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { formatError } from './utils/format.js';
4
+ import { logger } from './utils/logger.js';
5
+ import { setGlobalOptions, isJsonMode } from './globals.js';
6
+ import { runOneshot } from './oneshot/run.js';
7
+ import { connectCommand } from './commands/connect.js';
8
+ import { statusCommand } from './commands/status.js';
9
+ import { execCommand } from './commands/exec.js';
10
+ import { reportCommand } from './commands/report.js';
11
+ import { containersCommand } from './commands/containers.js';
12
+ import { vmsCommand } from './commands/vms.js';
13
+ import { lifecycleCommand } from './commands/lifecycle.js';
14
+ import { logsCommand } from './commands/logs.js';
15
+ import { configShowCommand, configSetCommand, configResetCommand, configSetApiKeyCommand, configPathCommand, } from './commands/config.js';
16
+ import { needsSetup } from './config/index.js';
17
+ import { printLogo } from './utils/ascii.js';
18
+ import { serversListCommand, serversAddCommand, serversRemoveCommand, serversSwitchCommand, } from './commands/servers.js';
19
+ // ---------------------------------------------------------------------------
20
+ // Global flag handling
21
+ // ---------------------------------------------------------------------------
22
+ function applyGlobalFlags() {
23
+ // --no-color support: disable chalk when requested or when NO_COLOR env is set
24
+ if (process.argv.includes('--no-color') ||
25
+ process.env['NO_COLOR'] !== undefined ||
26
+ process.env['FORCE_COLOR'] === '0') {
27
+ chalk.level = 0;
28
+ }
29
+ // --json implies --quiet (suppress spinners/banners)
30
+ if (process.argv.includes('--json')) {
31
+ setGlobalOptions({ json: true, quiet: true });
32
+ }
33
+ if (process.argv.includes('--quiet')) {
34
+ setGlobalOptions({ quiet: true });
35
+ }
36
+ // --server <url> — extract from argv since Commander hasn't parsed yet
37
+ const serverIdx = process.argv.indexOf('--server');
38
+ if (serverIdx !== -1 && serverIdx + 1 < process.argv.length) {
39
+ setGlobalOptions({ serverUrl: process.argv[serverIdx + 1] ?? null });
40
+ }
41
+ }
42
+ applyGlobalFlags();
43
+ // ---------------------------------------------------------------------------
44
+ // CLI program
45
+ // ---------------------------------------------------------------------------
46
+ const program = new Command();
47
+ program
48
+ .name('rackmind')
49
+ .description('AI-powered infrastructure management for MSPs')
50
+ .version('0.1.0')
51
+ .argument('[prompt]', 'Natural language prompt for one-shot mode')
52
+ .option('--json', 'Output in JSON format')
53
+ .option('--quiet', 'Suppress non-essential output')
54
+ .option('--no-color', 'Disable colored output')
55
+ .option('--server <url>', 'RackMind server URL (default: http://127.0.0.1:3100)')
56
+ .option('-i, --interactive', 'Launch interactive REPL mode')
57
+ .action(async (prompt, options) => {
58
+ try {
59
+ // First-run detection: guide the user through setup
60
+ if (needsSetup()) {
61
+ if (options.json) {
62
+ process.stdout.write(JSON.stringify({
63
+ error: 'Not configured',
64
+ hint: 'Run: rackmind connect <alias>',
65
+ }, null, 2) + '\n');
66
+ return;
67
+ }
68
+ printLogo();
69
+ process.stderr.write(chalk.bold('Welcome to RackMind CLI!\n\n'));
70
+ process.stderr.write('Get started by connecting to your first server:\n\n');
71
+ process.stderr.write(chalk.cyan(' rackmind connect my-server\n\n'));
72
+ process.stderr.write(chalk.dim('This will walk you through setting up your Proxmox host,\n' +
73
+ 'API credentials, and SSH access.\n\n'));
74
+ process.stderr.write(chalk.dim('Other useful commands:\n'));
75
+ process.stderr.write(chalk.dim(' rackmind config set-api-key Set your Anthropic API key\n'));
76
+ process.stderr.write(chalk.dim(' rackmind --help Show all commands\n\n'));
77
+ return;
78
+ }
79
+ if (prompt && !options.interactive) {
80
+ // One-shot mode: rackmind "do something"
81
+ await runOneshot(prompt);
82
+ }
83
+ else {
84
+ // Interactive mode: rackmind (no args) or rackmind -i
85
+ const { launchInteractive } = await import('./interactive/launch.js');
86
+ await launchInteractive();
87
+ }
88
+ }
89
+ catch (err) {
90
+ const message = err instanceof Error ? err.message : String(err);
91
+ logger.error('Unhandled error in main action', { error: message });
92
+ process.stderr.write(formatError(message) + '\n');
93
+ process.exit(1);
94
+ }
95
+ });
96
+ // ---------------------------------------------------------------------------
97
+ // rackmind ask "query" — explicit subcommand for one-shot mode
98
+ // ---------------------------------------------------------------------------
99
+ program
100
+ .command('ask <prompt>')
101
+ .description('Ask RackMind a question about your infrastructure (one-shot mode)')
102
+ .action(async (prompt) => {
103
+ try {
104
+ await runOneshot(prompt);
105
+ }
106
+ catch (err) {
107
+ const message = err instanceof Error ? err.message : String(err);
108
+ process.stderr.write(formatError(message) + '\n');
109
+ process.exit(1);
110
+ }
111
+ });
112
+ // ---------------------------------------------------------------------------
113
+ // rackmind config — view and manage configuration
114
+ // ---------------------------------------------------------------------------
115
+ const configCmd = program.command('config').description('View and manage CLI configuration');
116
+ // rackmind config (no subcommand) — show current config
117
+ configCmd.action(() => {
118
+ configShowCommand();
119
+ });
120
+ // rackmind config set <key> <value>
121
+ configCmd
122
+ .command('set <key> <value>')
123
+ .description('Set a preference value (e.g., model, theme, confirmDestructive)')
124
+ .action((key, value) => {
125
+ try {
126
+ configSetCommand(key, value);
127
+ }
128
+ catch (err) {
129
+ const message = err instanceof Error ? err.message : String(err);
130
+ process.stderr.write(formatError(message) + '\n');
131
+ process.exit(1);
132
+ }
133
+ });
134
+ // rackmind config reset
135
+ configCmd
136
+ .command('reset')
137
+ .description('Reset all preferences to defaults')
138
+ .action(async () => {
139
+ try {
140
+ await configResetCommand();
141
+ }
142
+ catch (err) {
143
+ const message = err instanceof Error ? err.message : String(err);
144
+ process.stderr.write(formatError(message) + '\n');
145
+ process.exit(1);
146
+ }
147
+ });
148
+ // rackmind config set-api-key
149
+ configCmd
150
+ .command('set-api-key')
151
+ .description('Set or update the Anthropic API key')
152
+ .action(async () => {
153
+ try {
154
+ await configSetApiKeyCommand();
155
+ }
156
+ catch (err) {
157
+ const message = err instanceof Error ? err.message : String(err);
158
+ process.stderr.write(formatError(message) + '\n');
159
+ process.exit(1);
160
+ }
161
+ });
162
+ // rackmind config path
163
+ configCmd
164
+ .command('path')
165
+ .description('Print the config file path')
166
+ .action(() => {
167
+ configPathCommand();
168
+ });
169
+ // ---------------------------------------------------------------------------
170
+ // rackmind connect <alias>
171
+ // ---------------------------------------------------------------------------
172
+ program
173
+ .command('connect <alias>')
174
+ .description('Connect to a server by alias (or create a new profile)')
175
+ .action(async (alias) => {
176
+ try {
177
+ await connectCommand(alias);
178
+ }
179
+ catch (err) {
180
+ const message = err instanceof Error ? err.message : String(err);
181
+ process.stderr.write(formatError(message) + '\n');
182
+ process.exit(1);
183
+ }
184
+ });
185
+ // ---------------------------------------------------------------------------
186
+ // rackmind status
187
+ // ---------------------------------------------------------------------------
188
+ program
189
+ .command('status')
190
+ .description('Show active profile, servers, and connection status')
191
+ .action(async () => {
192
+ try {
193
+ await statusCommand();
194
+ }
195
+ catch (err) {
196
+ const message = err instanceof Error ? err.message : String(err);
197
+ process.stderr.write(formatError(message) + '\n');
198
+ process.exit(1);
199
+ }
200
+ });
201
+ // ---------------------------------------------------------------------------
202
+ // rackmind servers [list | add | remove | switch]
203
+ // ---------------------------------------------------------------------------
204
+ const serversCmd = program.command('servers').description('Manage server profiles');
205
+ serversCmd
206
+ .command('list', { isDefault: true })
207
+ .description('List all configured server profiles')
208
+ .action(() => {
209
+ try {
210
+ serversListCommand();
211
+ }
212
+ catch (err) {
213
+ const message = err instanceof Error ? err.message : String(err);
214
+ process.stderr.write(formatError(message) + '\n');
215
+ process.exit(1);
216
+ }
217
+ });
218
+ serversCmd
219
+ .command('add <alias>')
220
+ .description('Add a new server profile')
221
+ .action(async (alias) => {
222
+ try {
223
+ await serversAddCommand(alias);
224
+ }
225
+ catch (err) {
226
+ const message = err instanceof Error ? err.message : String(err);
227
+ process.stderr.write(formatError(message) + '\n');
228
+ process.exit(1);
229
+ }
230
+ });
231
+ serversCmd
232
+ .command('remove <alias>')
233
+ .description('Remove a server profile')
234
+ .action(async (alias) => {
235
+ try {
236
+ await serversRemoveCommand(alias);
237
+ }
238
+ catch (err) {
239
+ const message = err instanceof Error ? err.message : String(err);
240
+ process.stderr.write(formatError(message) + '\n');
241
+ process.exit(1);
242
+ }
243
+ });
244
+ serversCmd
245
+ .command('switch <alias>')
246
+ .description('Switch the active server profile')
247
+ .action((alias) => {
248
+ try {
249
+ serversSwitchCommand(alias);
250
+ }
251
+ catch (err) {
252
+ const message = err instanceof Error ? err.message : String(err);
253
+ process.stderr.write(formatError(message) + '\n');
254
+ process.exit(1);
255
+ }
256
+ });
257
+ // ---------------------------------------------------------------------------
258
+ // rackmind exec "<cmd>" --target=<filter>
259
+ // ---------------------------------------------------------------------------
260
+ program
261
+ .command('exec <cmd>')
262
+ .description('Execute a command on the target server')
263
+ .option('--target <filter>', 'Target server or VM filter')
264
+ .action(async (cmd, options) => {
265
+ try {
266
+ await execCommand(cmd, options.target);
267
+ }
268
+ catch (err) {
269
+ const message = err instanceof Error ? err.message : String(err);
270
+ process.stderr.write(formatError(message) + '\n');
271
+ process.exit(1);
272
+ }
273
+ });
274
+ // ---------------------------------------------------------------------------
275
+ // rackmind report --output=json|stdout
276
+ // ---------------------------------------------------------------------------
277
+ program
278
+ .command('report')
279
+ .description('Generate a server health report')
280
+ .option('--output <format>', 'Output format: json, stdout', 'stdout')
281
+ .option('--json', 'Shorthand for --output json')
282
+ .action(async (options) => {
283
+ try {
284
+ const format = options.json || isJsonMode() ? 'json' : options.output;
285
+ await reportCommand(format);
286
+ }
287
+ catch (err) {
288
+ const message = err instanceof Error ? err.message : String(err);
289
+ process.stderr.write(formatError(message) + '\n');
290
+ process.exit(1);
291
+ }
292
+ });
293
+ // ---------------------------------------------------------------------------
294
+ // rackmind containers (alias: ct) — list LXC containers
295
+ // ---------------------------------------------------------------------------
296
+ program
297
+ .command('containers')
298
+ .alias('ct')
299
+ .description('List all LXC containers')
300
+ .option('--json', 'Output in JSON format')
301
+ .action(async (options) => {
302
+ try {
303
+ await containersCommand(Boolean(options.json) || isJsonMode());
304
+ }
305
+ catch (err) {
306
+ const message = err instanceof Error ? err.message : String(err);
307
+ process.stderr.write(formatError(message) + '\n');
308
+ process.exit(1);
309
+ }
310
+ });
311
+ // ---------------------------------------------------------------------------
312
+ // rackmind vms (alias: vm) — list QEMU VMs
313
+ // ---------------------------------------------------------------------------
314
+ program
315
+ .command('vms')
316
+ .alias('vm')
317
+ .description('List all QEMU virtual machines')
318
+ .option('--json', 'Output in JSON format')
319
+ .action(async (options) => {
320
+ try {
321
+ await vmsCommand(Boolean(options.json) || isJsonMode());
322
+ }
323
+ catch (err) {
324
+ const message = err instanceof Error ? err.message : String(err);
325
+ process.stderr.write(formatError(message) + '\n');
326
+ process.exit(1);
327
+ }
328
+ });
329
+ // ---------------------------------------------------------------------------
330
+ // rackmind start <vmid> — start a container or VM
331
+ // ---------------------------------------------------------------------------
332
+ program
333
+ .command('start <vmid>')
334
+ .description('Start an LXC container or QEMU VM')
335
+ .action(async (vmid) => {
336
+ try {
337
+ await lifecycleCommand(vmid, 'start', false);
338
+ }
339
+ catch (err) {
340
+ const message = err instanceof Error ? err.message : String(err);
341
+ process.stderr.write(formatError(message) + '\n');
342
+ process.exit(1);
343
+ }
344
+ });
345
+ // ---------------------------------------------------------------------------
346
+ // rackmind stop <vmid> — stop a container or VM
347
+ // ---------------------------------------------------------------------------
348
+ program
349
+ .command('stop <vmid>')
350
+ .description('Stop an LXC container or QEMU VM')
351
+ .option('--force', 'Skip confirmation prompt')
352
+ .action(async (vmid, options) => {
353
+ try {
354
+ await lifecycleCommand(vmid, 'stop', Boolean(options.force));
355
+ }
356
+ catch (err) {
357
+ const message = err instanceof Error ? err.message : String(err);
358
+ process.stderr.write(formatError(message) + '\n');
359
+ process.exit(1);
360
+ }
361
+ });
362
+ // ---------------------------------------------------------------------------
363
+ // rackmind restart <vmid> — restart a container or VM
364
+ // ---------------------------------------------------------------------------
365
+ program
366
+ .command('restart <vmid>')
367
+ .description('Restart an LXC container or QEMU VM')
368
+ .option('--force', 'Skip confirmation prompt')
369
+ .action(async (vmid, options) => {
370
+ try {
371
+ await lifecycleCommand(vmid, 'restart', Boolean(options.force));
372
+ }
373
+ catch (err) {
374
+ const message = err instanceof Error ? err.message : String(err);
375
+ process.stderr.write(formatError(message) + '\n');
376
+ process.exit(1);
377
+ }
378
+ });
379
+ // ---------------------------------------------------------------------------
380
+ // rackmind logs <vmid> — tail guest logs
381
+ // ---------------------------------------------------------------------------
382
+ program
383
+ .command('logs <vmid>')
384
+ .description('Tail logs for an LXC container or QEMU VM')
385
+ .option('-n, --lines <count>', 'Number of recent lines to show', '50')
386
+ .option('-f, --follow', 'Follow log output in real time')
387
+ .action(async (vmid, options) => {
388
+ try {
389
+ const lines = parseInt(options.lines, 10);
390
+ await logsCommand(vmid, isNaN(lines) ? 50 : lines, Boolean(options.follow));
391
+ }
392
+ catch (err) {
393
+ const message = err instanceof Error ? err.message : String(err);
394
+ process.stderr.write(formatError(message) + '\n');
395
+ process.exit(1);
396
+ }
397
+ });
398
+ program.parse();
399
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare function App(): React.ReactElement;
3
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/interactive/App.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,wBAAgB,GAAG,IAAI,KAAK,CAAC,YAAY,CAwIxC"}
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // ---------------------------------------------------------------------------
3
+ // App — Root Ink component for the interactive REPL
4
+ // ---------------------------------------------------------------------------
5
+ // Full chat-style interface: welcome screen, message history, streaming
6
+ // responses, tool indicators, input bar, and status bar.
7
+ // ---------------------------------------------------------------------------
8
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
9
+ import { Box, useApp, useInput } from 'ink';
10
+ import { useRackMind } from './useRackMind.js';
11
+ import { WelcomeScreen } from './components/WelcomeScreen.js';
12
+ import { MessageList } from './components/MessageList.js';
13
+ import { StreamingMessage } from './components/StreamingMessage.js';
14
+ import { ToolIndicator } from './components/ToolIndicator.js';
15
+ import { Spinner } from './components/Spinner.js';
16
+ import { InputBar } from './components/InputBar.js';
17
+ import { StatusBar } from './components/StatusBar.js';
18
+ import { handleSlashCommand, createSystemMessage } from './slashCommands.js';
19
+ import { readConfig } from '../config/index.js';
20
+ import { saveSession, generateSessionId } from '../utils/history.js';
21
+ export function App() {
22
+ const { exit } = useApp();
23
+ const { messages, connection, isThinking, streamingText, activeTools, model, sendMessage, clearMessages, connect, } = useRackMind();
24
+ const [displayMessages, setDisplayMessages] = useState([]);
25
+ const config = readConfig();
26
+ const showTimestamps = config.preferences.timestampMessages;
27
+ const sessionIdRef = useRef(generateSessionId());
28
+ // Sync displayMessages with hook messages
29
+ useEffect(() => {
30
+ setDisplayMessages(messages);
31
+ }, [messages]);
32
+ // Auto-connect on mount
33
+ const connectRef = React.useRef(connect);
34
+ connectRef.current = connect;
35
+ useEffect(() => {
36
+ const doConnect = async () => {
37
+ await connectRef.current();
38
+ };
39
+ doConnect().catch(() => {
40
+ // Connection errors are handled inside the hook
41
+ });
42
+ }, []);
43
+ // Add a system message to the display list
44
+ const addSystemMessage = useCallback((content) => {
45
+ const msg = createSystemMessage(content);
46
+ setDisplayMessages((prev) => [...prev, msg]);
47
+ }, []);
48
+ // Handle message submission (slash commands or AI messages)
49
+ const handleSubmit = useCallback((text) => {
50
+ // Check for slash commands first
51
+ const wasSlashCommand = handleSlashCommand(text, {
52
+ addSystemMessage,
53
+ clearMessages: () => {
54
+ clearMessages();
55
+ setDisplayMessages([]);
56
+ },
57
+ exit: () => {
58
+ exit();
59
+ },
60
+ });
61
+ if (wasSlashCommand)
62
+ return;
63
+ // Send to AI
64
+ sendMessage(text).catch(() => {
65
+ // Errors are handled inside the hook
66
+ });
67
+ }, [addSystemMessage, clearMessages, exit, sendMessage]);
68
+ // Save conversation history on unmount
69
+ const displayMessagesRef = useRef(displayMessages);
70
+ displayMessagesRef.current = displayMessages;
71
+ useEffect(() => {
72
+ return () => {
73
+ const msgs = displayMessagesRef.current;
74
+ if (msgs.length > 0) {
75
+ const entries = msgs.map((m) => ({
76
+ role: m.role,
77
+ content: m.content,
78
+ timestamp: m.timestamp,
79
+ }));
80
+ saveSession({
81
+ sessionId: sessionIdRef.current,
82
+ serverAlias: connection.serverAlias,
83
+ model,
84
+ startedAt: new Date().toISOString(),
85
+ entries,
86
+ });
87
+ }
88
+ };
89
+ }, []);
90
+ // Handle Ctrl+C to exit
91
+ useInput((_input, key) => {
92
+ if (key.ctrl && _input === 'c') {
93
+ exit();
94
+ }
95
+ });
96
+ // Determine input placeholder based on state
97
+ let inputPlaceholder;
98
+ if (connection.status !== 'connected') {
99
+ inputPlaceholder = 'Waiting for connection...';
100
+ }
101
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(WelcomeScreen, { connection: connection, model: model }), _jsx(MessageList, { messages: displayMessages, showTimestamps: showTimestamps }), activeTools.length > 0 && _jsx(ToolIndicator, { activeTools: activeTools }), streamingText ? _jsx(StreamingMessage, { text: streamingText }) : null, isThinking && !streamingText && activeTools.length === 0 && _jsx(Spinner, {}), _jsx(InputBar, { onSubmit: handleSubmit, disabled: isThinking || connection.status === 'connecting', placeholder: inputPlaceholder }), _jsx(StatusBar, { connection: connection, model: model, messageCount: displayMessages.length })] }));
102
+ }
103
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/interactive/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { ConnectionState } from '../useRackMind.js';
3
+ interface HeaderProps {
4
+ connection: ConnectionState;
5
+ }
6
+ export declare function Header({ connection }: HeaderProps): React.ReactElement;
7
+ export {};
8
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/interactive/components/Header.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,UAAU,WAAW;IACjB,UAAU,EAAE,eAAe,CAAC;CAC/B;AAED,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CA4BtE"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, Box } from 'ink';
3
+ export function Header({ connection }) {
4
+ const statusText = connection.status === 'connected' && connection.serverAlias
5
+ ? `Connected to ${connection.serverAlias}`
6
+ : connection.status === 'connecting'
7
+ ? 'Connecting...'
8
+ : connection.status === 'error'
9
+ ? `Error: ${connection.error ?? 'unknown'}`
10
+ : 'Not connected';
11
+ const statusColor = connection.status === 'connected'
12
+ ? 'green'
13
+ : connection.status === 'connecting'
14
+ ? 'yellow'
15
+ : connection.status === 'error'
16
+ ? 'red'
17
+ : 'gray';
18
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", bold: true, children: "RackMind" }), _jsx(Text, { dimColor: true, children: ' | ' }), _jsx(Text, { color: statusColor, children: statusText })] }));
19
+ }
20
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/interactive/components/Header.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,UAAU,MAAM,CAAC,EAAE,UAAU,EAAe;IAC9C,MAAM,UAAU,GACZ,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,WAAW;QACvD,CAAC,CAAC,gBAAgB,UAAU,CAAC,WAAW,EAAE;QAC1C,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,YAAY;YAClC,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO;gBAC7B,CAAC,CAAC,UAAU,UAAU,CAAC,KAAK,IAAI,SAAS,EAAE;gBAC3C,CAAC,CAAC,eAAe,CAAC;IAE9B,MAAM,WAAW,GACb,UAAU,CAAC,MAAM,KAAK,WAAW;QAC7B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,YAAY;YAClC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO;gBAC7B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,CAAC;IAErB,OAAO,CACH,MAAC,GAAG,eACA,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,+BAEhB,EACP,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,EAC7B,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,YAAG,UAAU,GAAQ,IAC3C,CACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface InputBarProps {
3
+ onSubmit: (value: string) => void;
4
+ disabled: boolean;
5
+ placeholder?: string;
6
+ }
7
+ export declare function InputBar({ onSubmit, disabled, placeholder }: InputBarProps): React.ReactElement;
8
+ export {};
9
+ //# sourceMappingURL=InputBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBar.d.ts","sourceRoot":"","sources":["../../../src/interactive/components/InputBar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAOrD,UAAU,aAAa;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAmF/F"}