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.
- package/README.md +63 -4
- package/dist/ai/system-prompt.js +2 -2
- package/dist/ai/system-prompt.js.map +1 -1
- package/dist/ai/tool-executor.d.ts.map +1 -1
- package/dist/ai/tool-executor.js +166 -41
- package/dist/ai/tool-executor.js.map +1 -1
- package/dist/ai/tools.js +4 -4
- package/dist/ai/tools.js.map +1 -1
- package/dist/commands/auth.d.ts +4 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +189 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +126 -2
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/containers.d.ts +7 -2
- package/dist/commands/containers.d.ts.map +1 -1
- package/dist/commands/containers.js +30 -11
- package/dist/commands/containers.js.map +1 -1
- package/dist/commands/exec.d.ts +5 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +20 -3
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/lifecycle.d.ts +6 -1
- package/dist/commands/lifecycle.d.ts.map +1 -1
- package/dist/commands/lifecycle.js +118 -25
- package/dist/commands/lifecycle.js.map +1 -1
- package/dist/commands/report.js +3 -3
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/vms.d.ts +7 -2
- package/dist/commands/vms.d.ts.map +1 -1
- package/dist/commands/vms.js +30 -11
- package/dist/commands/vms.js.map +1 -1
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +40 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +12 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +6 -0
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +85 -10
- package/dist/index.js.map +1 -1
- package/dist/server/client.d.ts +19 -2
- package/dist/server/client.d.ts.map +1 -1
- package/dist/server/client.js +27 -1
- package/dist/server/client.js.map +1 -1
- package/dist/server/proxmox.d.ts +54 -1
- package/dist/server/proxmox.d.ts.map +1 -1
- package/dist/server/proxmox.js +159 -35
- package/dist/server/proxmox.js.map +1 -1
- package/dist/utils/command-safety.d.ts +11 -0
- package/dist/utils/command-safety.d.ts.map +1 -0
- package/dist/utils/command-safety.js +33 -0
- package/dist/utils/command-safety.js.map +1 -0
- package/package.json +2 -1
package/dist/server/proxmox.js
CHANGED
|
@@ -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 '
|
|
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
|
-
//
|
|
45
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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": {
|