rackmind-cli 0.1.2 → 0.1.4

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 (56) hide show
  1. package/README.md +63 -4
  2. package/dist/ai/system-prompt.js +2 -2
  3. package/dist/ai/system-prompt.js.map +1 -1
  4. package/dist/ai/tool-executor.d.ts.map +1 -1
  5. package/dist/ai/tool-executor.js +166 -41
  6. package/dist/ai/tool-executor.js.map +1 -1
  7. package/dist/ai/tools.js +4 -4
  8. package/dist/ai/tools.js.map +1 -1
  9. package/dist/commands/auth.d.ts +4 -0
  10. package/dist/commands/auth.d.ts.map +1 -0
  11. package/dist/commands/auth.js +189 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/connect.d.ts.map +1 -1
  14. package/dist/commands/connect.js +126 -2
  15. package/dist/commands/connect.js.map +1 -1
  16. package/dist/commands/containers.d.ts +7 -2
  17. package/dist/commands/containers.d.ts.map +1 -1
  18. package/dist/commands/containers.js +30 -11
  19. package/dist/commands/containers.js.map +1 -1
  20. package/dist/commands/exec.d.ts +5 -1
  21. package/dist/commands/exec.d.ts.map +1 -1
  22. package/dist/commands/exec.js +20 -3
  23. package/dist/commands/exec.js.map +1 -1
  24. package/dist/commands/lifecycle.d.ts +6 -1
  25. package/dist/commands/lifecycle.d.ts.map +1 -1
  26. package/dist/commands/lifecycle.js +118 -25
  27. package/dist/commands/lifecycle.js.map +1 -1
  28. package/dist/commands/report.js +3 -3
  29. package/dist/commands/report.js.map +1 -1
  30. package/dist/commands/vms.d.ts +7 -2
  31. package/dist/commands/vms.d.ts.map +1 -1
  32. package/dist/commands/vms.js +30 -11
  33. package/dist/commands/vms.js.map +1 -1
  34. package/dist/config/index.d.ts +8 -0
  35. package/dist/config/index.d.ts.map +1 -1
  36. package/dist/config/index.js +40 -1
  37. package/dist/config/index.js.map +1 -1
  38. package/dist/config/types.d.ts +12 -0
  39. package/dist/config/types.d.ts.map +1 -1
  40. package/dist/config/types.js +6 -0
  41. package/dist/config/types.js.map +1 -1
  42. package/dist/index.js +85 -10
  43. package/dist/index.js.map +1 -1
  44. package/dist/server/client.d.ts +19 -2
  45. package/dist/server/client.d.ts.map +1 -1
  46. package/dist/server/client.js +27 -1
  47. package/dist/server/client.js.map +1 -1
  48. package/dist/server/proxmox.d.ts +54 -1
  49. package/dist/server/proxmox.d.ts.map +1 -1
  50. package/dist/server/proxmox.js +159 -35
  51. package/dist/server/proxmox.js.map +1 -1
  52. package/dist/utils/command-safety.d.ts +11 -0
  53. package/dist/utils/command-safety.d.ts.map +1 -0
  54. package/dist/utils/command-safety.js +33 -0
  55. package/dist/utils/command-safety.js.map +1 -0
  56. package/package.json +2 -1
@@ -4,9 +4,15 @@
4
4
  // Authenticates via PVEAPIToken header. Supports self-signed TLS certificates.
5
5
  // Uses native fetch (Node 18+) — no axios needed.
6
6
  // ---------------------------------------------------------------------------
7
- import { Agent } from 'node:https';
7
+ import { Agent } from 'undici';
8
8
  import { logger } from '../utils/logger.js';
9
9
  // ---------------------------------------------------------------------------
10
+ // Per-request TLS agent — avoids global NODE_TLS_REJECT_UNAUTHORIZED mutation
11
+ // ---------------------------------------------------------------------------
12
+ const insecureDispatcher = new Agent({
13
+ connect: { rejectUnauthorized: false },
14
+ });
15
+ // ---------------------------------------------------------------------------
10
16
  // Proxmox API Client
11
17
  // ---------------------------------------------------------------------------
12
18
  export class ProxmoxClient {
@@ -39,31 +45,21 @@ export class ProxmoxClient {
39
45
  headers['Content-Type'] = 'application/json';
40
46
  init.body = JSON.stringify(body);
41
47
  }
42
- // Handle self-signed certificates
48
+ // Handle self-signed certificates via per-request dispatcher
43
49
  if (this.allowSelfSigned) {
44
- // Node 18+ supports dispatcher option for custom agents
45
- // We use the undici-compatible approach via env or agent
46
- init['dispatcher'] = new Agent({
47
- rejectUnauthorized: false,
48
- });
50
+ // @ts-expect-error -- Node.js native fetch supports undici dispatcher
51
+ init.dispatcher = insecureDispatcher;
49
52
  }
50
53
  return init;
51
54
  }
52
55
  async request(method, path, body) {
53
56
  const url = `${this.baseUrl}${path}`;
54
57
  logger.debug(`Proxmox API ${method} ${path}`);
55
- // For self-signed certs, we need to temporarily disable TLS verification
56
- // Node's native fetch doesn't support custom agents directly,
57
- // so we use the NODE_TLS_REJECT_UNAUTHORIZED approach scoped to this request
58
- const originalTlsSetting = process.env['NODE_TLS_REJECT_UNAUTHORIZED'];
59
58
  try {
60
- if (this.allowSelfSigned) {
61
- process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
62
- }
63
59
  const response = await fetch(url, this.buildFetchOptions(method, body));
64
60
  if (!response.ok) {
65
61
  const errorBody = await response.text().catch(() => 'unknown');
66
- throw new ProxmoxApiError(`Proxmox API error: ${response.status} ${response.statusText}`, response.status, errorBody);
62
+ throw ProxmoxApiError.fromHttpStatus(response.status, response.statusText, errorBody, path);
67
63
  }
68
64
  const json = (await response.json());
69
65
  return json.data;
@@ -73,25 +69,7 @@ export class ProxmoxClient {
73
69
  throw err;
74
70
  const message = err instanceof Error ? err.message : String(err);
75
71
  logger.error(`Proxmox API request failed: ${method} ${path}`, { error: message });
76
- if (message.includes('ECONNREFUSED')) {
77
- throw new ProxmoxApiError(`Cannot connect to Proxmox at ${this.baseUrl} — connection refused`, 0, message);
78
- }
79
- if (message.includes('ETIMEDOUT') || message.includes('timeout')) {
80
- throw new ProxmoxApiError(`Connection to Proxmox timed out — check host and port`, 0, message);
81
- }
82
- if (message.includes('ENOTFOUND')) {
83
- throw new ProxmoxApiError(`Cannot resolve Proxmox hostname — check host configuration`, 0, message);
84
- }
85
- throw new ProxmoxApiError(`Proxmox API request failed: ${message}`, 0, message);
86
- }
87
- finally {
88
- // Restore original TLS setting
89
- if (originalTlsSetting === undefined) {
90
- delete process.env['NODE_TLS_REJECT_UNAUTHORIZED'];
91
- }
92
- else {
93
- process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = originalTlsSetting;
94
- }
72
+ throw ProxmoxApiError.fromNetworkError(message, this.baseUrl);
95
73
  }
96
74
  }
97
75
  async get(path) {
@@ -186,6 +164,84 @@ export class ProxmoxClient {
186
164
  const query = type ? `?type=${encodeURIComponent(type)}` : '';
187
165
  return await this.get(`/cluster/resources${query}`);
188
166
  }
167
+ /**
168
+ * List all LXC containers across ALL cluster nodes via /cluster/resources.
169
+ * Returns enriched ProxmoxContainer-compatible objects with a `node` field.
170
+ */
171
+ async listAllContainers() {
172
+ const resources = await this.listResources('vm');
173
+ return resources
174
+ .filter((r) => r.type === 'lxc')
175
+ .map((r) => ({
176
+ vmid: r.vmid ?? 0,
177
+ name: r.name ?? '',
178
+ status: r.status,
179
+ type: r.type,
180
+ cpus: r.maxcpu ?? 0,
181
+ mem: r.mem ?? 0,
182
+ maxmem: r.maxmem ?? 0,
183
+ disk: r.disk ?? 0,
184
+ maxdisk: r.maxdisk ?? 0,
185
+ uptime: r.uptime ?? 0,
186
+ netin: r.netin ?? 0,
187
+ netout: r.netout ?? 0,
188
+ node: r.node,
189
+ }));
190
+ }
191
+ /**
192
+ * List all QEMU VMs across ALL cluster nodes via /cluster/resources.
193
+ * Returns enriched ProxmoxVM-compatible objects with a `node` field.
194
+ */
195
+ async listAllVMs() {
196
+ const resources = await this.listResources('vm');
197
+ return resources
198
+ .filter((r) => r.type === 'qemu')
199
+ .map((r) => ({
200
+ vmid: r.vmid ?? 0,
201
+ name: r.name ?? '',
202
+ status: r.status,
203
+ cpus: r.maxcpu ?? 0,
204
+ mem: r.mem ?? 0,
205
+ maxmem: r.maxmem ?? 0,
206
+ disk: r.disk ?? 0,
207
+ maxdisk: r.maxdisk ?? 0,
208
+ uptime: r.uptime ?? 0,
209
+ netin: r.netin ?? 0,
210
+ netout: r.netout ?? 0,
211
+ node: r.node,
212
+ }));
213
+ }
214
+ // -----------------------------------------------------------------------
215
+ // Task management
216
+ // -----------------------------------------------------------------------
217
+ /** Get the status of a task by its UPID */
218
+ async getTaskStatus(node, upid) {
219
+ return await this.get(`/nodes/${encodeURIComponent(node)}/tasks/${encodeURIComponent(upid)}/status`);
220
+ }
221
+ /**
222
+ * Poll a task until it completes or times out.
223
+ * @param node The node where the task is running
224
+ * @param upid The UPID string returned by the action
225
+ * @param timeoutMs Maximum time to wait (default: 30 seconds)
226
+ * @param pollIntervalMs How often to poll (default: 1 second)
227
+ * @returns The final task status
228
+ */
229
+ async waitForTask(node, upid, timeoutMs = 30_000, pollIntervalMs = 1_000) {
230
+ const startTime = Date.now();
231
+ while (Date.now() - startTime < timeoutMs) {
232
+ const status = await this.getTaskStatus(node, upid);
233
+ // Proxmox reports "running" for in-progress tasks and "stopped" for completed tasks
234
+ if (status.status !== 'running') {
235
+ // Check for failed task
236
+ if (status.exitstatus && status.exitstatus !== 'OK') {
237
+ throw new ProxmoxApiError(`Task failed: ${status.exitstatus}`, 0, JSON.stringify(status));
238
+ }
239
+ return status;
240
+ }
241
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
242
+ }
243
+ throw new ProxmoxApiError(`Task timed out after ${Math.round(timeoutMs / 1000)}s — the operation may still be running on the server. UPID: ${upid}`, 0, upid);
244
+ }
189
245
  // -----------------------------------------------------------------------
190
246
  // Utility: auto-detect node name
191
247
  // -----------------------------------------------------------------------
@@ -209,11 +265,79 @@ export class ProxmoxClient {
209
265
  export class ProxmoxApiError extends Error {
210
266
  statusCode;
211
267
  responseBody;
212
- constructor(message, statusCode, responseBody) {
268
+ suggestion;
269
+ constructor(message, statusCode, responseBody, suggestion = '') {
213
270
  super(message);
214
271
  this.name = 'ProxmoxApiError';
215
272
  this.statusCode = statusCode;
216
273
  this.responseBody = responseBody;
274
+ this.suggestion = suggestion;
275
+ }
276
+ /** Format the error with suggestion for display to the user */
277
+ toUserMessage() {
278
+ if (this.suggestion) {
279
+ return `${this.message}\n Suggestion: ${this.suggestion}`;
280
+ }
281
+ return this.message;
282
+ }
283
+ /** Create an error from an HTTP status code with actionable suggestions */
284
+ static fromHttpStatus(status, statusText, responseBody, path) {
285
+ switch (status) {
286
+ case 401:
287
+ return new ProxmoxApiError(`Authentication failed (401) for ${path}`, status, responseBody, 'Check your API token ID and secret. Token format should be: user@realm!tokenid. ' +
288
+ 'Verify the token has not been revoked in Datacenter > Permissions > API Tokens.');
289
+ case 403:
290
+ return new ProxmoxApiError(`Permission denied (403) for ${path}`, status, responseBody, 'Your API token lacks the required permissions for this operation. ' +
291
+ 'Check Datacenter > Permissions > API Tokens and ensure the token ' +
292
+ 'has the appropriate role (e.g., PVEAuditor for read-only, PVEAdmin for management). ' +
293
+ 'If using a token with "Privilege Separation" enabled, the token needs its own ACL entries.');
294
+ case 404:
295
+ return new ProxmoxApiError(`Resource not found (404): ${path}`, status, responseBody, 'The requested resource does not exist. Check that the VMID, node name, ' +
296
+ 'or resource identifier is correct.');
297
+ case 500:
298
+ return new ProxmoxApiError(`Proxmox internal server error (500) for ${path}`, status, responseBody, 'This is a server-side error in Proxmox. Check the Proxmox syslog ' +
299
+ '(/var/log/syslog) and pveproxy logs for details.');
300
+ case 595:
301
+ return new ProxmoxApiError(`Proxmox API connection error (595) for ${path}`, status, responseBody, 'The Proxmox API proxy could not reach the target node. ' +
302
+ 'Ensure all cluster nodes are online and corosync is healthy.');
303
+ default:
304
+ return new ProxmoxApiError(`Proxmox API error: ${status} ${statusText} for ${path}`, status, responseBody);
305
+ }
306
+ }
307
+ /** Create an error from a network-level failure with actionable suggestions */
308
+ static fromNetworkError(message, baseUrl) {
309
+ if (message.includes('ECONNREFUSED')) {
310
+ return new ProxmoxApiError(`Cannot connect to Proxmox at ${baseUrl} — connection refused`, 0, message, 'Verify that: (1) the Proxmox host is reachable, ' +
311
+ '(2) port 8006 is open (check firewall rules: iptables -L or pve-firewall status), ' +
312
+ '(3) the pveproxy service is running (systemctl status pveproxy).');
313
+ }
314
+ if (message.includes('ETIMEDOUT') || message.includes('timeout')) {
315
+ return new ProxmoxApiError(`Connection to Proxmox timed out at ${baseUrl}`, 0, message, 'The host did not respond in time. Check: (1) the host IP/hostname is correct, ' +
316
+ '(2) port 8006 is not blocked by a firewall between you and the server, ' +
317
+ '(3) the server is not overloaded.');
318
+ }
319
+ if (message.includes('ENOTFOUND')) {
320
+ return new ProxmoxApiError(`Cannot resolve Proxmox hostname in ${baseUrl}`, 0, message, 'DNS lookup failed. Verify the hostname is correct and your DNS resolver ' +
321
+ 'can reach it. Try using an IP address instead.');
322
+ }
323
+ if (message.includes('CERT_HAS_EXPIRED') ||
324
+ message.includes('UNABLE_TO_VERIFY_LEAF_SIGNATURE') ||
325
+ message.includes('DEPTH_ZERO_SELF_SIGNED_CERT') ||
326
+ message.includes('self-signed certificate') ||
327
+ message.includes('certificate')) {
328
+ return new ProxmoxApiError(`TLS certificate error connecting to ${baseUrl}`, 0, message, 'Proxmox uses a self-signed certificate by default. ' +
329
+ 'Run "rackmind connect <alias>" and enable "Allow self-signed TLS certificates", ' +
330
+ 'or install a valid certificate on your Proxmox host.');
331
+ }
332
+ return new ProxmoxApiError(`Proxmox API request failed: ${message}`, 0, message, 'Check network connectivity to your Proxmox host and verify the host/port configuration.');
333
+ }
334
+ /**
335
+ * Parse a UPID string to extract the node name.
336
+ * UPID format: UPID:node:pid:pstart:starttime:type:id:user:
337
+ */
338
+ static parseUpidNode(upid) {
339
+ const parts = upid.split(':');
340
+ return parts.length >= 2 ? (parts[1] ?? null) : null;
217
341
  }
218
342
  }
219
343
  //# sourceMappingURL=proxmox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxmox.js","sourceRoot":"","sources":["../../src/server/proxmox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxmox.js","sourceRoot":"","sources":["../../src/server/proxmox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Patterns that match potentially destructive shell commands */
2
+ export declare const DANGEROUS_PATTERNS: {
3
+ pattern: RegExp;
4
+ label: string;
5
+ }[];
6
+ /**
7
+ * Check a command string against the dangerous patterns blocklist.
8
+ * Returns the first matching label, or `null` if the command is safe.
9
+ */
10
+ export declare function matchDangerousPattern(command: string): string | null;
11
+ //# sourceMappingURL=command-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-safety.d.ts","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"AAOA,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAYlE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE"}
@@ -0,0 +1,33 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Command safety — blocklist of dangerous shell patterns
3
+ // ---------------------------------------------------------------------------
4
+ // Shared between `exec` command and AI tool executor to prevent accidental
5
+ // or AI-initiated destructive operations without explicit user consent.
6
+ // ---------------------------------------------------------------------------
7
+ /** Patterns that match potentially destructive shell commands */
8
+ export const DANGEROUS_PATTERNS = [
9
+ {
10
+ pattern: /\brm\s+(-[a-zA-Z]*f|-[a-zA-Z]*r|--force|--recursive)/i,
11
+ label: 'rm with force/recursive',
12
+ },
13
+ { pattern: /\bmkfs\b/i, label: 'mkfs (format filesystem)' },
14
+ { pattern: /\bdd\s+.*of=/i, label: 'dd (raw disk write)' },
15
+ { pattern: /\bfdisk\b/i, label: 'fdisk (partition table)' },
16
+ { pattern: /:\(\)\s*\{/, label: 'fork bomb' },
17
+ { pattern: /\b(shutdown|reboot|poweroff|halt)\b/i, label: 'shutdown/reboot/poweroff' },
18
+ { pattern: /\bsystemctl\s+(stop|disable|mask)\b/i, label: 'systemctl stop/disable/mask' },
19
+ { pattern: />\s*\/dev\//i, label: 'write to /dev/' },
20
+ ];
21
+ /**
22
+ * Check a command string against the dangerous patterns blocklist.
23
+ * Returns the first matching label, or `null` if the command is safe.
24
+ */
25
+ export function matchDangerousPattern(command) {
26
+ for (const { pattern, label } of DANGEROUS_PATTERNS) {
27
+ if (pattern.test(command)) {
28
+ return label;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ //# sourceMappingURL=command-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-safety.js","sourceRoot":"","sources":["../../src/utils/command-safety.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,8EAA8E;AAE9E,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACpE;QACI,OAAO,EAAE,uDAAuD;QAChE,KAAK,EAAE,yBAAyB;KACnC;IACD,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3D,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAC1D,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC3D,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE;IAC7C,EAAE,OAAO,EAAE,sCAAsC,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACtF,EAAE,OAAO,EAAE,sCAAsC,EAAE,KAAK,EAAE,6BAA6B,EAAE;IACzF,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rackmind-cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "CLI interface for RackMind — Claude Code-style terminal experience for managing servers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -49,6 +49,7 @@
49
49
  "ora": "^8.2.0",
50
50
  "react": "^18.3.1",
51
51
  "ssh2": "^1.17.0",
52
+ "undici": "^7.24.5",
52
53
  "zod": "^3.24.4"
53
54
  },
54
55
  "devDependencies": {