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,263 @@
1
+ import { z } from 'zod';
2
+ export type ServerPlatform = 'proxmox' | 'linux' | 'docker' | 'synology';
3
+ export type SSHAuthType = 'password' | 'key';
4
+ export type ConnectionStatus = 'connected' | 'disconnected' | 'error';
5
+ export declare const ServerProfileSchema: z.ZodObject<{
6
+ /** Unique display name / alias for this server */
7
+ alias: z.ZodString;
8
+ /** Server platform type */
9
+ platform: z.ZodEnum<["proxmox", "linux", "docker", "synology"]>;
10
+ /** Proxmox host (e.g., 192.168.1.100) */
11
+ host: z.ZodString;
12
+ /** Proxmox API port (default: 8006) */
13
+ port: z.ZodDefault<z.ZodNumber>;
14
+ /** Proxmox API user (e.g., root@pam) */
15
+ apiUser: z.ZodDefault<z.ZodString>;
16
+ /** Proxmox API token ID (e.g., root@pam!rackmind) */
17
+ apiTokenId: z.ZodDefault<z.ZodString>;
18
+ /** Encrypted API token secret */
19
+ encryptedTokenSecret: z.ZodDefault<z.ZodString>;
20
+ /** SSH host (defaults to Proxmox host) */
21
+ sshHost: z.ZodDefault<z.ZodString>;
22
+ /** SSH port (default: 22) */
23
+ sshPort: z.ZodDefault<z.ZodNumber>;
24
+ /** SSH username (default: root) */
25
+ sshUsername: z.ZodDefault<z.ZodString>;
26
+ /** SSH auth method */
27
+ sshAuthType: z.ZodDefault<z.ZodEnum<["password", "key"]>>;
28
+ /** Encrypted SSH password */
29
+ encryptedSshPassword: z.ZodDefault<z.ZodString>;
30
+ /** Path to SSH private key (not encrypted, just a path) */
31
+ sshPrivateKeyPath: z.ZodDefault<z.ZodString>;
32
+ /** Whether to allow self-signed TLS certificates */
33
+ allowSelfSigned: z.ZodDefault<z.ZodBoolean>;
34
+ /** Optional Proxmox node name override */
35
+ node: z.ZodOptional<z.ZodString>;
36
+ /** Timestamp of creation */
37
+ createdAt: z.ZodDefault<z.ZodNumber>;
38
+ /** Last successful connection timestamp */
39
+ lastConnectedAt: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ alias: string;
42
+ platform: "proxmox" | "linux" | "docker" | "synology";
43
+ host: string;
44
+ port: number;
45
+ apiUser: string;
46
+ apiTokenId: string;
47
+ encryptedTokenSecret: string;
48
+ sshHost: string;
49
+ sshPort: number;
50
+ sshUsername: string;
51
+ sshAuthType: "password" | "key";
52
+ encryptedSshPassword: string;
53
+ sshPrivateKeyPath: string;
54
+ allowSelfSigned: boolean;
55
+ createdAt: number;
56
+ lastConnectedAt: number | null;
57
+ node?: string | undefined;
58
+ }, {
59
+ alias: string;
60
+ platform: "proxmox" | "linux" | "docker" | "synology";
61
+ host: string;
62
+ port?: number | undefined;
63
+ apiUser?: string | undefined;
64
+ apiTokenId?: string | undefined;
65
+ encryptedTokenSecret?: string | undefined;
66
+ sshHost?: string | undefined;
67
+ sshPort?: number | undefined;
68
+ sshUsername?: string | undefined;
69
+ sshAuthType?: "password" | "key" | undefined;
70
+ encryptedSshPassword?: string | undefined;
71
+ sshPrivateKeyPath?: string | undefined;
72
+ allowSelfSigned?: boolean | undefined;
73
+ node?: string | undefined;
74
+ createdAt?: number | undefined;
75
+ lastConnectedAt?: number | null | undefined;
76
+ }>;
77
+ export type ServerProfile = z.infer<typeof ServerProfileSchema>;
78
+ export declare const PreferencesSchema: z.ZodObject<{
79
+ /** AI model to use */
80
+ model: z.ZodDefault<z.ZodString>;
81
+ /** Color theme */
82
+ theme: z.ZodDefault<z.ZodEnum<["dark", "light"]>>;
83
+ /** Require confirmation for destructive actions */
84
+ confirmDestructive: z.ZodDefault<z.ZodBoolean>;
85
+ /** Show timestamps on messages */
86
+ timestampMessages: z.ZodDefault<z.ZodBoolean>;
87
+ }, "strip", z.ZodTypeAny, {
88
+ model: string;
89
+ theme: "dark" | "light";
90
+ confirmDestructive: boolean;
91
+ timestampMessages: boolean;
92
+ }, {
93
+ model?: string | undefined;
94
+ theme?: "dark" | "light" | undefined;
95
+ confirmDestructive?: boolean | undefined;
96
+ timestampMessages?: boolean | undefined;
97
+ }>;
98
+ export type Preferences = z.infer<typeof PreferencesSchema>;
99
+ export declare const RackMindConfigSchema: z.ZodObject<{
100
+ /** Config schema version for future migrations */
101
+ version: z.ZodDefault<z.ZodString>;
102
+ /** Currently active server alias */
103
+ activeServer: z.ZodDefault<z.ZodNullable<z.ZodString>>;
104
+ /** Anthropic API key (encrypted) */
105
+ encryptedAnthropicApiKey: z.ZodDefault<z.ZodString>;
106
+ /** Registered server profiles keyed by alias */
107
+ servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
108
+ /** Unique display name / alias for this server */
109
+ alias: z.ZodString;
110
+ /** Server platform type */
111
+ platform: z.ZodEnum<["proxmox", "linux", "docker", "synology"]>;
112
+ /** Proxmox host (e.g., 192.168.1.100) */
113
+ host: z.ZodString;
114
+ /** Proxmox API port (default: 8006) */
115
+ port: z.ZodDefault<z.ZodNumber>;
116
+ /** Proxmox API user (e.g., root@pam) */
117
+ apiUser: z.ZodDefault<z.ZodString>;
118
+ /** Proxmox API token ID (e.g., root@pam!rackmind) */
119
+ apiTokenId: z.ZodDefault<z.ZodString>;
120
+ /** Encrypted API token secret */
121
+ encryptedTokenSecret: z.ZodDefault<z.ZodString>;
122
+ /** SSH host (defaults to Proxmox host) */
123
+ sshHost: z.ZodDefault<z.ZodString>;
124
+ /** SSH port (default: 22) */
125
+ sshPort: z.ZodDefault<z.ZodNumber>;
126
+ /** SSH username (default: root) */
127
+ sshUsername: z.ZodDefault<z.ZodString>;
128
+ /** SSH auth method */
129
+ sshAuthType: z.ZodDefault<z.ZodEnum<["password", "key"]>>;
130
+ /** Encrypted SSH password */
131
+ encryptedSshPassword: z.ZodDefault<z.ZodString>;
132
+ /** Path to SSH private key (not encrypted, just a path) */
133
+ sshPrivateKeyPath: z.ZodDefault<z.ZodString>;
134
+ /** Whether to allow self-signed TLS certificates */
135
+ allowSelfSigned: z.ZodDefault<z.ZodBoolean>;
136
+ /** Optional Proxmox node name override */
137
+ node: z.ZodOptional<z.ZodString>;
138
+ /** Timestamp of creation */
139
+ createdAt: z.ZodDefault<z.ZodNumber>;
140
+ /** Last successful connection timestamp */
141
+ lastConnectedAt: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
142
+ }, "strip", z.ZodTypeAny, {
143
+ alias: string;
144
+ platform: "proxmox" | "linux" | "docker" | "synology";
145
+ host: string;
146
+ port: number;
147
+ apiUser: string;
148
+ apiTokenId: string;
149
+ encryptedTokenSecret: string;
150
+ sshHost: string;
151
+ sshPort: number;
152
+ sshUsername: string;
153
+ sshAuthType: "password" | "key";
154
+ encryptedSshPassword: string;
155
+ sshPrivateKeyPath: string;
156
+ allowSelfSigned: boolean;
157
+ createdAt: number;
158
+ lastConnectedAt: number | null;
159
+ node?: string | undefined;
160
+ }, {
161
+ alias: string;
162
+ platform: "proxmox" | "linux" | "docker" | "synology";
163
+ host: string;
164
+ port?: number | undefined;
165
+ apiUser?: string | undefined;
166
+ apiTokenId?: string | undefined;
167
+ encryptedTokenSecret?: string | undefined;
168
+ sshHost?: string | undefined;
169
+ sshPort?: number | undefined;
170
+ sshUsername?: string | undefined;
171
+ sshAuthType?: "password" | "key" | undefined;
172
+ encryptedSshPassword?: string | undefined;
173
+ sshPrivateKeyPath?: string | undefined;
174
+ allowSelfSigned?: boolean | undefined;
175
+ node?: string | undefined;
176
+ createdAt?: number | undefined;
177
+ lastConnectedAt?: number | null | undefined;
178
+ }>>>;
179
+ /** User preferences */
180
+ preferences: z.ZodDefault<z.ZodObject<{
181
+ /** AI model to use */
182
+ model: z.ZodDefault<z.ZodString>;
183
+ /** Color theme */
184
+ theme: z.ZodDefault<z.ZodEnum<["dark", "light"]>>;
185
+ /** Require confirmation for destructive actions */
186
+ confirmDestructive: z.ZodDefault<z.ZodBoolean>;
187
+ /** Show timestamps on messages */
188
+ timestampMessages: z.ZodDefault<z.ZodBoolean>;
189
+ }, "strip", z.ZodTypeAny, {
190
+ model: string;
191
+ theme: "dark" | "light";
192
+ confirmDestructive: boolean;
193
+ timestampMessages: boolean;
194
+ }, {
195
+ model?: string | undefined;
196
+ theme?: "dark" | "light" | undefined;
197
+ confirmDestructive?: boolean | undefined;
198
+ timestampMessages?: boolean | undefined;
199
+ }>>;
200
+ }, "strip", z.ZodTypeAny, {
201
+ version: string;
202
+ activeServer: string | null;
203
+ encryptedAnthropicApiKey: string;
204
+ servers: Record<string, {
205
+ alias: string;
206
+ platform: "proxmox" | "linux" | "docker" | "synology";
207
+ host: string;
208
+ port: number;
209
+ apiUser: string;
210
+ apiTokenId: string;
211
+ encryptedTokenSecret: string;
212
+ sshHost: string;
213
+ sshPort: number;
214
+ sshUsername: string;
215
+ sshAuthType: "password" | "key";
216
+ encryptedSshPassword: string;
217
+ sshPrivateKeyPath: string;
218
+ allowSelfSigned: boolean;
219
+ createdAt: number;
220
+ lastConnectedAt: number | null;
221
+ node?: string | undefined;
222
+ }>;
223
+ preferences: {
224
+ model: string;
225
+ theme: "dark" | "light";
226
+ confirmDestructive: boolean;
227
+ timestampMessages: boolean;
228
+ };
229
+ }, {
230
+ version?: string | undefined;
231
+ activeServer?: string | null | undefined;
232
+ encryptedAnthropicApiKey?: string | undefined;
233
+ servers?: Record<string, {
234
+ alias: string;
235
+ platform: "proxmox" | "linux" | "docker" | "synology";
236
+ host: string;
237
+ port?: number | undefined;
238
+ apiUser?: string | undefined;
239
+ apiTokenId?: string | undefined;
240
+ encryptedTokenSecret?: string | undefined;
241
+ sshHost?: string | undefined;
242
+ sshPort?: number | undefined;
243
+ sshUsername?: string | undefined;
244
+ sshAuthType?: "password" | "key" | undefined;
245
+ encryptedSshPassword?: string | undefined;
246
+ sshPrivateKeyPath?: string | undefined;
247
+ allowSelfSigned?: boolean | undefined;
248
+ node?: string | undefined;
249
+ createdAt?: number | undefined;
250
+ lastConnectedAt?: number | null | undefined;
251
+ }> | undefined;
252
+ preferences?: {
253
+ model?: string | undefined;
254
+ theme?: "dark" | "light" | undefined;
255
+ confirmDestructive?: boolean | undefined;
256
+ timestampMessages?: boolean | undefined;
257
+ } | undefined;
258
+ }>;
259
+ export type RackMindConfig = z.infer<typeof RackMindConfigSchema>;
260
+ export declare function getDefaultConfig(): RackMindConfig;
261
+ export declare function getDefaultPreferences(): Preferences;
262
+ export declare function getDefaultServerProfile(alias: string, host: string, platform?: ServerPlatform): ServerProfile;
263
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;AAC7C,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AAMtE,eAAO,MAAM,mBAAmB;IAC5B,kDAAkD;;IAElD,2BAA2B;;IAI3B,yCAAyC;;IAEzC,uCAAuC;;IAEvC,wCAAwC;;IAExC,qDAAqD;;IAErD,iCAAiC;;IAIjC,0CAA0C;;IAE1C,6BAA6B;;IAE7B,mCAAmC;;IAEnC,sBAAsB;;IAEtB,6BAA6B;;IAE7B,2DAA2D;;IAI3D,oDAAoD;;IAEpD,0CAA0C;;IAE1C,4BAA4B;;IAE5B,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE7C,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;IAC1B,sBAAsB;;IAEtB,kBAAkB;;IAElB,mDAAmD;;IAEnD,kCAAkC;;;;;;;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,oBAAoB;IAC7B,kDAAkD;;IAElD,oCAAoC;;IAEpC,oCAAoC;;IAEpC,gDAAgD;;QAhEhD,kDAAkD;;QAElD,2BAA2B;;QAI3B,yCAAyC;;QAEzC,uCAAuC;;QAEvC,wCAAwC;;QAExC,qDAAqD;;QAErD,iCAAiC;;QAIjC,0CAA0C;;QAE1C,6BAA6B;;QAE7B,mCAAmC;;QAEnC,sBAAsB;;QAEtB,6BAA6B;;QAE7B,2DAA2D;;QAI3D,oDAAoD;;QAEpD,0CAA0C;;QAE1C,4BAA4B;;QAE5B,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4B3C,uBAAuB;;QArBvB,sBAAsB;;QAEtB,kBAAkB;;QAElB,mDAAmD;;QAEnD,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBpC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,wBAAgB,gBAAgB,IAAI,cAAc,CAEjD;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD;AAED,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,cAA0B,GACrC,aAAa,CAOf"}
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod';
2
+ // ---------------------------------------------------------------------------
3
+ // Zod schemas
4
+ // ---------------------------------------------------------------------------
5
+ export const ServerProfileSchema = z.object({
6
+ /** Unique display name / alias for this server */
7
+ alias: z.string().min(1),
8
+ /** Server platform type */
9
+ platform: z.enum(['proxmox', 'linux', 'docker', 'synology']),
10
+ // -- Proxmox API connection (only for 'proxmox' platform) ---------------
11
+ /** Proxmox host (e.g., 192.168.1.100) */
12
+ host: z.string().min(1),
13
+ /** Proxmox API port (default: 8006) */
14
+ port: z.number().int().positive().default(8006),
15
+ /** Proxmox API user (e.g., root@pam) */
16
+ apiUser: z.string().default(''),
17
+ /** Proxmox API token ID (e.g., root@pam!rackmind) */
18
+ apiTokenId: z.string().default(''),
19
+ /** Encrypted API token secret */
20
+ encryptedTokenSecret: z.string().default(''),
21
+ // -- SSH connection ------------------------------------------------------
22
+ /** SSH host (defaults to Proxmox host) */
23
+ sshHost: z.string().default(''),
24
+ /** SSH port (default: 22) */
25
+ sshPort: z.number().int().positive().default(22),
26
+ /** SSH username (default: root) */
27
+ sshUsername: z.string().default('root'),
28
+ /** SSH auth method */
29
+ sshAuthType: z.enum(['password', 'key']).default('password'),
30
+ /** Encrypted SSH password */
31
+ encryptedSshPassword: z.string().default(''),
32
+ /** Path to SSH private key (not encrypted, just a path) */
33
+ sshPrivateKeyPath: z.string().default(''),
34
+ // -- Metadata -----------------------------------------------------------
35
+ /** Whether to allow self-signed TLS certificates */
36
+ allowSelfSigned: z.boolean().default(true),
37
+ /** Optional Proxmox node name override */
38
+ node: z.string().optional(),
39
+ /** Timestamp of creation */
40
+ createdAt: z.number().default(() => Date.now()),
41
+ /** Last successful connection timestamp */
42
+ lastConnectedAt: z.number().nullable().default(null),
43
+ });
44
+ export const PreferencesSchema = z.object({
45
+ /** AI model to use */
46
+ model: z.string().default('claude-sonnet-4-5'),
47
+ /** Color theme */
48
+ theme: z.enum(['dark', 'light']).default('dark'),
49
+ /** Require confirmation for destructive actions */
50
+ confirmDestructive: z.boolean().default(true),
51
+ /** Show timestamps on messages */
52
+ timestampMessages: z.boolean().default(true),
53
+ });
54
+ export const RackMindConfigSchema = z.object({
55
+ /** Config schema version for future migrations */
56
+ version: z.string().default('1'),
57
+ /** Currently active server alias */
58
+ activeServer: z.string().nullable().default(null),
59
+ /** Anthropic API key (encrypted) */
60
+ encryptedAnthropicApiKey: z.string().default(''),
61
+ /** Registered server profiles keyed by alias */
62
+ servers: z.record(z.string(), ServerProfileSchema).default({}),
63
+ /** User preferences */
64
+ preferences: PreferencesSchema.default({}),
65
+ });
66
+ // ---------------------------------------------------------------------------
67
+ // Defaults
68
+ // ---------------------------------------------------------------------------
69
+ export function getDefaultConfig() {
70
+ return RackMindConfigSchema.parse({});
71
+ }
72
+ export function getDefaultPreferences() {
73
+ return PreferencesSchema.parse({});
74
+ }
75
+ export function getDefaultServerProfile(alias, host, platform = 'proxmox') {
76
+ return ServerProfileSchema.parse({
77
+ alias,
78
+ host,
79
+ platform,
80
+ sshHost: host,
81
+ });
82
+ }
83
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface GlobalOptions {
2
+ /** Output in JSON format (suppress human-readable tables/spinners) */
3
+ json: boolean;
4
+ /** Suppress non-essential output (spinners, banners, hints) */
5
+ quiet: boolean;
6
+ /** Override the rackmind server URL */
7
+ serverUrl: string | null;
8
+ }
9
+ /** Set global options from Commander's parsed flags. Call once at startup. */
10
+ export declare function setGlobalOptions(opts: Partial<GlobalOptions>): void;
11
+ /** Read the current global option values. */
12
+ export declare function getGlobalOptions(): Readonly<GlobalOptions>;
13
+ /** True when --json is active. Use this to decide between table and JSON output. */
14
+ export declare function isJsonMode(): boolean;
15
+ /** True when --quiet is active. Gates spinners, banners, and hints. */
16
+ export declare function isQuietMode(): boolean;
17
+ /**
18
+ * Write to stderr only if --quiet is NOT set.
19
+ * Returns false (did nothing) when quiet, true when it wrote.
20
+ */
21
+ export declare function info(message: string): boolean;
22
+ //# sourceMappingURL=globals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC1B,sEAAsE;IACtE,IAAI,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,KAAK,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAQD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAInE;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,uEAAuE;AACvE,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI7C"}
@@ -0,0 +1,43 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Global CLI options — shared state set during arg parsing
3
+ // ---------------------------------------------------------------------------
4
+ // Commander sets these from the root program options. Subcommands and
5
+ // utility functions read them to alter output behavior.
6
+ // ---------------------------------------------------------------------------
7
+ const state = {
8
+ json: false,
9
+ quiet: false,
10
+ serverUrl: null,
11
+ };
12
+ /** Set global options from Commander's parsed flags. Call once at startup. */
13
+ export function setGlobalOptions(opts) {
14
+ if (opts.json !== undefined)
15
+ state.json = opts.json;
16
+ if (opts.quiet !== undefined)
17
+ state.quiet = opts.quiet;
18
+ if (opts.serverUrl !== undefined)
19
+ state.serverUrl = opts.serverUrl;
20
+ }
21
+ /** Read the current global option values. */
22
+ export function getGlobalOptions() {
23
+ return state;
24
+ }
25
+ /** True when --json is active. Use this to decide between table and JSON output. */
26
+ export function isJsonMode() {
27
+ return state.json;
28
+ }
29
+ /** True when --quiet is active. Gates spinners, banners, and hints. */
30
+ export function isQuietMode() {
31
+ return state.quiet;
32
+ }
33
+ /**
34
+ * Write to stderr only if --quiet is NOT set.
35
+ * Returns false (did nothing) when quiet, true when it wrote.
36
+ */
37
+ export function info(message) {
38
+ if (state.quiet)
39
+ return false;
40
+ process.stderr.write(message);
41
+ return true;
42
+ }
43
+ //# sourceMappingURL=globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globals.js","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAC9E,sEAAsE;AACtE,wDAAwD;AACxD,8EAA8E;AAW9E,MAAM,KAAK,GAAkB;IACzB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;CAClB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,IAA4B;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,gBAAgB;IAC5B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU;IACtB,OAAO,KAAK,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW;IACvB,OAAO,KAAK,CAAC,KAAK,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAChC,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}