@nodetool-ai/deploy 0.7.0-rc.11

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 (133) hide show
  1. package/dist/admin-client.d.ts +58 -0
  2. package/dist/admin-client.d.ts.map +1 -0
  3. package/dist/admin-client.js +275 -0
  4. package/dist/admin-client.js.map +1 -0
  5. package/dist/admin-operations.d.ts +197 -0
  6. package/dist/admin-operations.d.ts.map +1 -0
  7. package/dist/admin-operations.js +433 -0
  8. package/dist/admin-operations.js.map +1 -0
  9. package/dist/admin-routes.d.ts +306 -0
  10. package/dist/admin-routes.d.ts.map +1 -0
  11. package/dist/admin-routes.js +383 -0
  12. package/dist/admin-routes.js.map +1 -0
  13. package/dist/api-user-manager.d.ts +72 -0
  14. package/dist/api-user-manager.d.ts.map +1 -0
  15. package/dist/api-user-manager.js +89 -0
  16. package/dist/api-user-manager.js.map +1 -0
  17. package/dist/auth.d.ts +67 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +142 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/collection-routes.d.ts +37 -0
  22. package/dist/collection-routes.d.ts.map +1 -0
  23. package/dist/collection-routes.js +43 -0
  24. package/dist/collection-routes.js.map +1 -0
  25. package/dist/compose.d.ts +52 -0
  26. package/dist/compose.d.ts.map +1 -0
  27. package/dist/compose.js +153 -0
  28. package/dist/compose.js.map +1 -0
  29. package/dist/configure.d.ts +87 -0
  30. package/dist/configure.d.ts.map +1 -0
  31. package/dist/configure.js +104 -0
  32. package/dist/configure.js.map +1 -0
  33. package/dist/deploy-to-gcp.d.ts +67 -0
  34. package/dist/deploy-to-gcp.d.ts.map +1 -0
  35. package/dist/deploy-to-gcp.js +268 -0
  36. package/dist/deploy-to-gcp.js.map +1 -0
  37. package/dist/deploy-to-runpod.d.ts +53 -0
  38. package/dist/deploy-to-runpod.d.ts.map +1 -0
  39. package/dist/deploy-to-runpod.js +207 -0
  40. package/dist/deploy-to-runpod.js.map +1 -0
  41. package/dist/deploy.d.ts +54 -0
  42. package/dist/deploy.d.ts.map +1 -0
  43. package/dist/deploy.js +82 -0
  44. package/dist/deploy.js.map +1 -0
  45. package/dist/deployment-config.d.ts +1073 -0
  46. package/dist/deployment-config.d.ts.map +1 -0
  47. package/dist/deployment-config.js +536 -0
  48. package/dist/deployment-config.js.map +1 -0
  49. package/dist/docker-run.d.ts +85 -0
  50. package/dist/docker-run.d.ts.map +1 -0
  51. package/dist/docker-run.js +202 -0
  52. package/dist/docker-run.js.map +1 -0
  53. package/dist/docker.d.ts +98 -0
  54. package/dist/docker.d.ts.map +1 -0
  55. package/dist/docker.js +396 -0
  56. package/dist/docker.js.map +1 -0
  57. package/dist/fly.d.ts +40 -0
  58. package/dist/fly.d.ts.map +1 -0
  59. package/dist/fly.js +291 -0
  60. package/dist/fly.js.map +1 -0
  61. package/dist/gcp.d.ts +59 -0
  62. package/dist/gcp.d.ts.map +1 -0
  63. package/dist/gcp.js +339 -0
  64. package/dist/gcp.js.map +1 -0
  65. package/dist/google-cloud-run-api.d.ts +134 -0
  66. package/dist/google-cloud-run-api.d.ts.map +1 -0
  67. package/dist/google-cloud-run-api.js +532 -0
  68. package/dist/google-cloud-run-api.js.map +1 -0
  69. package/dist/huggingface.d.ts +69 -0
  70. package/dist/huggingface.d.ts.map +1 -0
  71. package/dist/huggingface.js +346 -0
  72. package/dist/huggingface.js.map +1 -0
  73. package/dist/image-builder.d.ts +35 -0
  74. package/dist/image-builder.d.ts.map +1 -0
  75. package/dist/image-builder.js +157 -0
  76. package/dist/image-builder.js.map +1 -0
  77. package/dist/image-spec.d.ts +41 -0
  78. package/dist/image-spec.d.ts.map +1 -0
  79. package/dist/image-spec.js +49 -0
  80. package/dist/image-spec.js.map +1 -0
  81. package/dist/index.d.ts +33 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +45 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/manager.d.ts +121 -0
  86. package/dist/manager.d.ts.map +1 -0
  87. package/dist/manager.js +225 -0
  88. package/dist/manager.js.map +1 -0
  89. package/dist/progress.d.ts +91 -0
  90. package/dist/progress.d.ts.map +1 -0
  91. package/dist/progress.js +262 -0
  92. package/dist/progress.js.map +1 -0
  93. package/dist/railway.d.ts +65 -0
  94. package/dist/railway.d.ts.map +1 -0
  95. package/dist/railway.js +284 -0
  96. package/dist/railway.js.map +1 -0
  97. package/dist/remote-users.d.ts +74 -0
  98. package/dist/remote-users.d.ts.map +1 -0
  99. package/dist/remote-users.js +172 -0
  100. package/dist/remote-users.js.map +1 -0
  101. package/dist/runpod-api.d.ts +206 -0
  102. package/dist/runpod-api.d.ts.map +1 -0
  103. package/dist/runpod-api.js +703 -0
  104. package/dist/runpod-api.js.map +1 -0
  105. package/dist/runpod.d.ts +82 -0
  106. package/dist/runpod.d.ts.map +1 -0
  107. package/dist/runpod.js +188 -0
  108. package/dist/runpod.js.map +1 -0
  109. package/dist/self-hosted.d.ts +157 -0
  110. package/dist/self-hosted.d.ts.map +1 -0
  111. package/dist/self-hosted.js +799 -0
  112. package/dist/self-hosted.js.map +1 -0
  113. package/dist/ssh.d.ts +166 -0
  114. package/dist/ssh.d.ts.map +1 -0
  115. package/dist/ssh.js +430 -0
  116. package/dist/ssh.js.map +1 -0
  117. package/dist/state.d.ts +83 -0
  118. package/dist/state.d.ts.map +1 -0
  119. package/dist/state.js +368 -0
  120. package/dist/state.js.map +1 -0
  121. package/dist/storage-routes.d.ts +55 -0
  122. package/dist/storage-routes.d.ts.map +1 -0
  123. package/dist/storage-routes.js +160 -0
  124. package/dist/storage-routes.js.map +1 -0
  125. package/dist/sync.d.ts +38 -0
  126. package/dist/sync.d.ts.map +1 -0
  127. package/dist/sync.js +130 -0
  128. package/dist/sync.js.map +1 -0
  129. package/dist/workflow-syncer.d.ts +51 -0
  130. package/dist/workflow-syncer.d.ts.map +1 -0
  131. package/dist/workflow-syncer.js +192 -0
  132. package/dist/workflow-syncer.js.map +1 -0
  133. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-config.d.ts","sourceRoot":"","sources":["../src/deployment-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,536 @@
1
+ /**
2
+ * Deployment configuration management for NodeTool.
3
+ *
4
+ * This module provides a Terraform-like deployment configuration system where all
5
+ * deployments (self-hosted, RunPod, GCP) are managed through a single deployment.yaml file.
6
+ */
7
+ import { z } from "zod";
8
+ import * as fs from "fs/promises";
9
+ import * as path from "path";
10
+ import * as os from "os";
11
+ import * as crypto from "crypto";
12
+ import * as yaml from "js-yaml";
13
+ import { createLogger } from "@nodetool-ai/config";
14
+ const log = createLogger("nodetool.deploy.config");
15
+ // ============================================================================
16
+ // Enums
17
+ // ============================================================================
18
+ export const DeploymentType = {
19
+ DOCKER: "docker",
20
+ RUNPOD: "runpod",
21
+ GCP: "gcp",
22
+ FLY: "fly",
23
+ RAILWAY: "railway",
24
+ HUGGINGFACE: "huggingface"
25
+ };
26
+ export const DeploymentStatus = {
27
+ UNKNOWN: "unknown",
28
+ PENDING: "pending",
29
+ DEPLOYING: "deploying",
30
+ RUNNING: "running",
31
+ ACTIVE: "active",
32
+ SERVING: "serving",
33
+ ERROR: "error",
34
+ STOPPED: "stopped",
35
+ DESTROYED: "destroyed"
36
+ };
37
+ const DeploymentStatusEnum = z.enum([
38
+ "unknown",
39
+ "pending",
40
+ "deploying",
41
+ "running",
42
+ "active",
43
+ "serving",
44
+ "error",
45
+ "stopped",
46
+ "destroyed"
47
+ ]);
48
+ // ============================================================================
49
+ // Helper: expand ~ in paths
50
+ // ============================================================================
51
+ function expandUser(p) {
52
+ if (p.startsWith("~")) {
53
+ return path.join(os.homedir(), p.slice(1));
54
+ }
55
+ return p;
56
+ }
57
+ /**
58
+ * Helper to create a `.default({})` that applies nested field defaults.
59
+ *
60
+ * Zod v4 does not re-parse the default value, so we use a factory function
61
+ * that runs `schema.parse({})` on each access to fill in sub-defaults.
62
+ */
63
+ function withEmptyDefault(schema) {
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ return schema.default(() => schema.parse({}));
66
+ }
67
+ // ============================================================================
68
+ // Self-Hosted Deployment Schemas
69
+ // ============================================================================
70
+ export const SSHConfigSchema = z.object({
71
+ user: z.string(),
72
+ key_path: z
73
+ .string()
74
+ .optional()
75
+ .transform((v) => (v ? expandUser(v) : v)),
76
+ password: z.string().optional(),
77
+ port: z.number().int().default(22)
78
+ });
79
+ export const ContainerConfigSchema = z.object({
80
+ name: z.string(),
81
+ port: z.number().int(),
82
+ gpu: z.string().optional(),
83
+ environment: z.record(z.string(), z.string()).optional(),
84
+ workflows: z.array(z.string()).optional()
85
+ });
86
+ export const ServerPathsSchema = z.object({
87
+ workspace: z.string().default("~/nodetool_data/workspace"),
88
+ hf_cache: z.string().default("~/nodetool_data/hf-cache")
89
+ });
90
+ export const PersistentPathsSchema = z.object({
91
+ users_file: z.string().default("/workspace/users.yaml"),
92
+ db_path: z.string().default("/workspace/nodetool.db"),
93
+ chroma_path: z.string().default("/workspace/chroma"),
94
+ hf_cache: z.string().default("/workspace/hf-cache"),
95
+ asset_bucket: z.string().default("/workspace/assets"),
96
+ logs_path: z.string().optional().default("/workspace/logs")
97
+ });
98
+ export const SelfHostedStateSchema = z.object({
99
+ last_deployed: z.string().nullable().optional().default(null),
100
+ status: DeploymentStatusEnum.default("unknown"),
101
+ container_id: z.string().nullable().optional().default(null),
102
+ container_name: z.string().nullable().optional().default(null),
103
+ url: z.string().nullable().optional().default(null),
104
+ container_hash: z.string().nullable().optional().default(null),
105
+ container_run_hash: z.string().nullable().optional().default(null)
106
+ });
107
+ export const ImageConfigSchema = z.object({
108
+ name: z.string(),
109
+ tag: z.string().default("latest"),
110
+ registry: z.string().default("docker.io")
111
+ });
112
+ /** Get the full image name including tag. */
113
+ export function imageConfigFullName(image) {
114
+ if (image.name.includes("@"))
115
+ return image.name;
116
+ const lastSegment = image.name.split("/").pop() ?? image.name;
117
+ if (lastSegment.includes(":"))
118
+ return image.name;
119
+ return `${image.name}:${image.tag}`;
120
+ }
121
+ export const NginxConfigSchema = z
122
+ .object({
123
+ enabled: z.boolean().default(false),
124
+ ssl_cert_path: z
125
+ .string()
126
+ .optional()
127
+ .transform((v) => (v ? expandUser(v) : v)),
128
+ ssl_key_path: z
129
+ .string()
130
+ .optional()
131
+ .transform((v) => (v ? expandUser(v) : v)),
132
+ http_port: z.number().int().default(80),
133
+ https_port: z.number().int().default(443),
134
+ config_dir: z
135
+ .string()
136
+ .default("~/nodetool_data/nginx/conf.d")
137
+ .transform(expandUser),
138
+ custom_config_path: z
139
+ .string()
140
+ .optional()
141
+ .transform((v) => (v ? expandUser(v) : v))
142
+ })
143
+ .refine((data) => {
144
+ if (data.ssl_cert_path && !data.ssl_key_path)
145
+ return false;
146
+ if (data.ssl_key_path && !data.ssl_cert_path)
147
+ return false;
148
+ return true;
149
+ }, {
150
+ message: "Both ssl_cert_path and ssl_key_path must be provided together"
151
+ });
152
+ export const DockerDeploymentSchema = z.object({
153
+ type: z.literal("docker").default("docker"),
154
+ enabled: z.boolean().default(true),
155
+ host: z.string(),
156
+ ssh: SSHConfigSchema.optional(),
157
+ paths: withEmptyDefault(ServerPathsSchema),
158
+ persistent_paths: PersistentPathsSchema.optional(),
159
+ image: ImageConfigSchema,
160
+ container: ContainerConfigSchema,
161
+ server_auth_token: z.string().optional(),
162
+ state: withEmptyDefault(SelfHostedStateSchema)
163
+ });
164
+ /** Get server URL for a Docker deployment. */
165
+ export function dockerDeploymentGetServerUrl(d) {
166
+ const hostPort = d.container.port === 7777 ? 8000 : d.container.port;
167
+ return `http://${d.host}:${hostPort}`;
168
+ }
169
+ // ============================================================================
170
+ // Platform-Specific State Schemas
171
+ // ============================================================================
172
+ export const FlyStateSchema = z.object({
173
+ last_deployed: z.string().nullable().optional().default(null),
174
+ status: DeploymentStatusEnum.default("unknown"),
175
+ url: z.string().nullable().optional().default(null),
176
+ app: z.string().nullable().optional().default(null),
177
+ region: z.string().nullable().optional().default(null)
178
+ });
179
+ export const RailwayStateSchema = z.object({
180
+ last_deployed: z.string().nullable().optional().default(null),
181
+ status: DeploymentStatusEnum.default("unknown"),
182
+ url: z.string().nullable().optional().default(null),
183
+ project: z.string().nullable().optional().default(null),
184
+ service: z.string().nullable().optional().default(null),
185
+ image_tag: z.string().nullable().optional().default(null)
186
+ });
187
+ export const HuggingFaceStateSchema = z.object({
188
+ last_deployed: z.string().nullable().optional().default(null),
189
+ status: DeploymentStatusEnum.default("unknown"),
190
+ repo: z.string().nullable().optional().default(null),
191
+ space_url: z.string().nullable().optional().default(null)
192
+ });
193
+ // ============================================================================
194
+ // Fly.io Deployment Schema
195
+ // ============================================================================
196
+ export const FlyDeploymentSchema = z.object({
197
+ type: z.literal("fly").default("fly"),
198
+ enabled: z.boolean().default(true),
199
+ app: z.string(),
200
+ region: z.string().default("iad"),
201
+ image: z.string(), // path to nodetool-image.yaml
202
+ environment: z.record(z.string(), z.string()).optional(),
203
+ volumes: z
204
+ .array(z.object({
205
+ name: z.string(),
206
+ mount: z.string(),
207
+ size: z.number().int().default(10)
208
+ }))
209
+ .optional(),
210
+ state: withEmptyDefault(FlyStateSchema)
211
+ });
212
+ // ============================================================================
213
+ // Railway Deployment Schema
214
+ // ============================================================================
215
+ export const RailwayDeploymentSchema = z.object({
216
+ type: z.literal("railway").default("railway"),
217
+ enabled: z.boolean().default(true),
218
+ project: z.string(),
219
+ service: z.string(),
220
+ image: z.string(),
221
+ environment: z.record(z.string(), z.string()).optional(),
222
+ state: withEmptyDefault(RailwayStateSchema)
223
+ });
224
+ // ============================================================================
225
+ // HuggingFace Spaces Deployment Schema
226
+ // ============================================================================
227
+ export const HuggingFaceDeploymentSchema = z.object({
228
+ type: z.literal("huggingface").default("huggingface"),
229
+ enabled: z.boolean().default(true),
230
+ repo: z.string(),
231
+ space_type: z.literal("docker").default("docker"),
232
+ hardware: z.string().optional(),
233
+ image: z.string(),
234
+ environment: z.record(z.string(), z.string()).optional(),
235
+ state: withEmptyDefault(HuggingFaceStateSchema)
236
+ });
237
+ // ============================================================================
238
+ // RunPod Deployment Schemas
239
+ // ============================================================================
240
+ export const RunPodBuildConfigSchema = z.object({
241
+ platform: z.string().default("linux/amd64"),
242
+ no_cache: z.boolean().default(false)
243
+ });
244
+ export const RunPodImageConfigSchema = z.object({
245
+ name: z.string(),
246
+ tag: z.string(),
247
+ registry: z.string().default("docker.io"),
248
+ build: withEmptyDefault(RunPodBuildConfigSchema)
249
+ });
250
+ export function runPodImageConfigFullName(image) {
251
+ return `${image.name}:${image.tag}`;
252
+ }
253
+ export const RunPodTemplateConfigSchema = z.object({
254
+ name: z.string(),
255
+ gpu_types: z.array(z.string()).default([]),
256
+ data_centers: z.array(z.string()).default([]),
257
+ network_volume_id: z.string().optional(),
258
+ allowed_cuda_versions: z.array(z.string()).default([])
259
+ });
260
+ export const RunPodEndpointConfigSchema = z.object({
261
+ name: z.string(),
262
+ workers_min: z.number().int().default(0),
263
+ workers_max: z.number().int().default(3),
264
+ idle_timeout: z.number().int().default(60),
265
+ execution_timeout: z.number().int().optional(),
266
+ flashboot: z.boolean().default(false),
267
+ gpu_count: z.number().int().optional()
268
+ });
269
+ export const RunPodStateSchema = z.object({
270
+ template_id: z.string().nullable().optional().default(null),
271
+ endpoint_id: z.string().nullable().optional().default(null),
272
+ endpoint_url: z.string().nullable().optional().default(null),
273
+ last_deployed: z.string().nullable().optional().default(null),
274
+ status: DeploymentStatusEnum.default("unknown"),
275
+ last_build_hash: z.string().nullable().optional().default(null)
276
+ });
277
+ export const RunPodDockerConfigSchema = z.object({
278
+ username: z.string().optional(),
279
+ registry: z.string().default("docker.io")
280
+ });
281
+ export const RunPodDeploymentSchema = z.object({
282
+ type: z.literal("runpod").default("runpod"),
283
+ enabled: z.boolean().default(true),
284
+ image: RunPodImageConfigSchema,
285
+ gpu_types: z.array(z.string()).default([]),
286
+ gpu_count: z.number().int().optional(),
287
+ cpu_flavors: z.array(z.string()).default([]),
288
+ vcpu_count: z.number().int().optional(),
289
+ data_centers: z.array(z.string()).default([]),
290
+ network_volume_id: z.string().optional(),
291
+ allowed_cuda_versions: z.array(z.string()).default([]),
292
+ docker: withEmptyDefault(RunPodDockerConfigSchema),
293
+ platform: z.string().default("linux/amd64"),
294
+ template_name: z.string().optional(),
295
+ compute_type: z.string().default("GPU"),
296
+ workers_min: z.number().int().default(0),
297
+ workers_max: z.number().int().default(3),
298
+ idle_timeout: z.number().int().default(5),
299
+ execution_timeout: z.number().int().optional(),
300
+ flashboot: z.boolean().default(false),
301
+ environment: z.record(z.string(), z.string()).optional(),
302
+ persistent_paths: PersistentPathsSchema.optional(),
303
+ workflows: z.array(z.string()).default([]),
304
+ state: withEmptyDefault(RunPodStateSchema)
305
+ });
306
+ export function runPodDeploymentGetServerUrl(d) {
307
+ return d.state.endpoint_url ?? undefined;
308
+ }
309
+ // ============================================================================
310
+ // GCP Deployment Schemas
311
+ // ============================================================================
312
+ export const GCPBuildConfigSchema = z.object({
313
+ platform: z.string().default("linux/amd64")
314
+ });
315
+ export const GCPImageConfigSchema = z.object({
316
+ registry: z.string().default("us-docker.pkg.dev"),
317
+ repository: z.string(),
318
+ tag: z.string(),
319
+ build: withEmptyDefault(GCPBuildConfigSchema)
320
+ });
321
+ export function gcpImageConfigFullName(image) {
322
+ return `${image.registry}/${image.repository}:${image.tag}`;
323
+ }
324
+ export const GCPResourceConfigSchema = z.object({
325
+ cpu: z.string().default("4"),
326
+ memory: z.string().default("16Gi"),
327
+ min_instances: z.number().int().default(0),
328
+ max_instances: z.number().int().default(3),
329
+ concurrency: z.number().int().default(80),
330
+ timeout: z.number().int().default(3600),
331
+ gpu_type: z.string().optional(),
332
+ gpu_count: z.number().int().optional()
333
+ });
334
+ export const GCPStorageConfigSchema = z.object({
335
+ gcs_bucket: z.string().optional(),
336
+ gcs_mount_path: z.string().default("/mnt/gcs")
337
+ });
338
+ export const GCPIAMConfigSchema = z.object({
339
+ service_account: z.string().optional(),
340
+ allow_unauthenticated: z.boolean().default(false)
341
+ });
342
+ export const GCPStateSchema = z.object({
343
+ service_url: z.string().nullable().optional().default(null),
344
+ last_deployed: z.string().nullable().optional().default(null),
345
+ status: DeploymentStatusEnum.default("unknown"),
346
+ revision: z.string().nullable().optional().default(null)
347
+ });
348
+ export const GCPDeploymentSchema = z.object({
349
+ type: z.literal("gcp").default("gcp"),
350
+ enabled: z.boolean().default(true),
351
+ project_id: z.string(),
352
+ region: z.string().default("us-central1"),
353
+ service_name: z.string(),
354
+ image: GCPImageConfigSchema,
355
+ resources: withEmptyDefault(GCPResourceConfigSchema),
356
+ storage: GCPStorageConfigSchema.optional(),
357
+ iam: withEmptyDefault(GCPIAMConfigSchema),
358
+ persistent_paths: PersistentPathsSchema.optional(),
359
+ workflows: z.array(z.string()).default([]),
360
+ state: withEmptyDefault(GCPStateSchema)
361
+ });
362
+ export function gcpDeploymentGetServerUrl(d) {
363
+ return d.state.service_url ?? undefined;
364
+ }
365
+ // ============================================================================
366
+ // Main Configuration Schemas
367
+ // ============================================================================
368
+ export const DefaultsConfigSchema = z.object({
369
+ chat_provider: z.string().default("llama_cpp"),
370
+ default_model: z.string().default(""),
371
+ log_level: z.string().default("INFO"),
372
+ auth_provider: z.string().default("local"),
373
+ extra: z.record(z.string(), z.unknown()).default({})
374
+ });
375
+ /**
376
+ * Discriminated union for deployment types.
377
+ */
378
+ const AnyDeploymentSchema = z.discriminatedUnion("type", [
379
+ DockerDeploymentSchema,
380
+ RunPodDeploymentSchema,
381
+ GCPDeploymentSchema,
382
+ FlyDeploymentSchema,
383
+ RailwayDeploymentSchema,
384
+ HuggingFaceDeploymentSchema
385
+ ]);
386
+ export const DeploymentConfigSchema = z.object({
387
+ version: z.string().default("2.0"),
388
+ defaults: withEmptyDefault(DefaultsConfigSchema),
389
+ deployments: z.record(z.string(), AnyDeploymentSchema).default({})
390
+ });
391
+ /** Parse and validate raw data into a DeploymentConfig. */
392
+ export function parseDeploymentConfig(data) {
393
+ return DeploymentConfigSchema.parse(data);
394
+ }
395
+ // ============================================================================
396
+ // Configuration Loading and Saving
397
+ // ============================================================================
398
+ export const DEPLOYMENT_CONFIG_FILE = "deployment.yaml";
399
+ /**
400
+ * Get the default deployment config directory.
401
+ * Uses XDG_CONFIG_HOME on Linux, ~/Library/Application Support on macOS,
402
+ * APPDATA on Windows, falling back to ~/.config/nodetool.
403
+ */
404
+ function getDefaultConfigDir() {
405
+ const plat = process.platform;
406
+ if (plat === "darwin") {
407
+ return path.join(os.homedir(), "Library", "Application Support", "nodetool");
408
+ }
409
+ if (plat === "win32") {
410
+ return process.env.APPDATA
411
+ ? path.join(process.env.APPDATA, "nodetool")
412
+ : path.join(os.homedir(), ".config", "nodetool");
413
+ }
414
+ // Linux / other
415
+ return process.env.XDG_CONFIG_HOME
416
+ ? path.join(process.env.XDG_CONFIG_HOME, "nodetool")
417
+ : path.join(os.homedir(), ".config", "nodetool");
418
+ }
419
+ /** Get the path to the deployment configuration file. */
420
+ export function getDeploymentConfigPath() {
421
+ return path.join(getDefaultConfigDir(), DEPLOYMENT_CONFIG_FILE);
422
+ }
423
+ /**
424
+ * Load deployment configuration from deployment.yaml.
425
+ *
426
+ * Automatically generates and saves server_auth_token for self-hosted
427
+ * deployments that don't have one.
428
+ */
429
+ export async function loadDeploymentConfig() {
430
+ const configPath = getDeploymentConfigPath();
431
+ try {
432
+ const stat = await fs.stat(configPath);
433
+ if (!stat.isFile()) {
434
+ throw new Error(`${configPath} is not a file.`);
435
+ }
436
+ }
437
+ catch (err) {
438
+ if (err.code === "ENOENT") {
439
+ throw new Error(`Deployment configuration not found at ${configPath}. Run 'nodetool deploy init' to create it.`);
440
+ }
441
+ throw err;
442
+ }
443
+ const raw = await fs.readFile(configPath, "utf-8");
444
+ const data = yaml.load(raw, { schema: yaml.JSON_SCHEMA });
445
+ if (!data) {
446
+ return parseDeploymentConfig({});
447
+ }
448
+ const config = parseDeploymentConfig(data);
449
+ // Auto-generate server_auth_token for Docker deployments
450
+ let configUpdated = false;
451
+ for (const deployment of Object.values(config.deployments)) {
452
+ if (deployment.type === "docker") {
453
+ if (!deployment.server_auth_token) {
454
+ deployment.server_auth_token = crypto
455
+ .randomBytes(32)
456
+ .toString("base64url");
457
+ configUpdated = true;
458
+ }
459
+ }
460
+ }
461
+ if (configUpdated) {
462
+ await saveDeploymentConfig(config);
463
+ }
464
+ return config;
465
+ }
466
+ /**
467
+ * Save deployment configuration to deployment.yaml.
468
+ *
469
+ * Performs an atomic write via a temporary file to prevent corruption.
470
+ */
471
+ export async function saveDeploymentConfig(config) {
472
+ const configPath = getDeploymentConfigPath();
473
+ const dir = path.dirname(configPath);
474
+ await fs.mkdir(dir, { recursive: true });
475
+ // Serialize — strip undefined and null values via JSON round-trip
476
+ const data = JSON.parse(JSON.stringify(config, (_key, value) => value === null ? undefined : value));
477
+ const yamlStr = yaml.dump(data, {
478
+ flowLevel: -1,
479
+ sortKeys: false,
480
+ noCompatMode: true
481
+ });
482
+ const tempPath = configPath + ".tmp";
483
+ try {
484
+ await fs.writeFile(tempPath, yamlStr, { encoding: "utf-8", mode: 0o600 });
485
+ await fs.rename(tempPath, configPath);
486
+ }
487
+ catch (err) {
488
+ await fs.unlink(tempPath).catch((cleanupErr) => {
489
+ // ENOENT means the temp file was never created — expected. Anything
490
+ // else is worth knowing about.
491
+ if (cleanupErr.code !== "ENOENT") {
492
+ log.warn(`Failed to clean up temp config file ${tempPath} after write error`, cleanupErr);
493
+ }
494
+ });
495
+ throw err;
496
+ }
497
+ }
498
+ /**
499
+ * Initialize a new deployment configuration file with defaults.
500
+ */
501
+ export async function initDeploymentConfig() {
502
+ const configPath = getDeploymentConfigPath();
503
+ let exists = false;
504
+ try {
505
+ await fs.stat(configPath);
506
+ exists = true;
507
+ }
508
+ catch {
509
+ // file does not exist
510
+ }
511
+ if (exists) {
512
+ throw new Error(`Deployment configuration already exists at ${configPath}`);
513
+ }
514
+ const config = parseDeploymentConfig({});
515
+ await saveDeploymentConfig(config);
516
+ return config;
517
+ }
518
+ /**
519
+ * Merge default environment variables with deployment-specific overrides.
520
+ */
521
+ export function mergeDefaultsWithEnv(defaults, deploymentEnv) {
522
+ const env = {};
523
+ env["CHAT_PROVIDER"] = defaults.chat_provider;
524
+ env["DEFAULT_MODEL"] = defaults.default_model;
525
+ env["LOG_LEVEL"] = defaults.log_level;
526
+ env["AUTH_PROVIDER"] = defaults.auth_provider;
527
+ for (const [k, v] of Object.entries(defaults.extra)) {
528
+ if (v != null)
529
+ env[k] = String(v);
530
+ }
531
+ if (deploymentEnv) {
532
+ Object.assign(env, deploymentEnv);
533
+ }
534
+ return env;
535
+ }
536
+ //# sourceMappingURL=deployment-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-config.js","sourceRoot":"","sources":["../src/deployment-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Docker run command generation for self-hosted deployments.
3
+ *
4
+ * This module generates docker run commands from deployment configuration,
5
+ * supporting GPU assignments, volume mounts, and environment variables.
6
+ */
7
+ export declare const INTERNAL_API_PORT = 7777;
8
+ export declare const APP_ENV_PORT = 8000;
9
+ /** Persistent storage paths for deployment data. */
10
+ interface PersistentPaths {
11
+ usersFile: string;
12
+ dbPath: string;
13
+ chromaPath: string;
14
+ hfCache: string;
15
+ assetBucket: string;
16
+ logsPath?: string;
17
+ }
18
+ /** Paths on the remote server. */
19
+ interface ServerPaths {
20
+ workspace: string;
21
+ hfCache: string;
22
+ }
23
+ /** Docker container configuration. */
24
+ interface ContainerConfig {
25
+ name: string;
26
+ port: number;
27
+ gpu?: string;
28
+ environment?: Record<string, string>;
29
+ workflows?: string[];
30
+ }
31
+ /** Docker image configuration. */
32
+ interface ImageConfig {
33
+ name: string;
34
+ tag: string;
35
+ registry: string;
36
+ }
37
+ /** Compute the full image name (name:tag). */
38
+ export declare function imageFullName(image: ImageConfig): string;
39
+ /** Deployment shape expected by DockerRunGenerator (camelCase accessors). */
40
+ export interface DockerRunDeployment {
41
+ image: ImageConfig;
42
+ container: ContainerConfig;
43
+ paths: ServerPaths;
44
+ persistentPaths?: PersistentPaths;
45
+ serverAuthToken?: string;
46
+ }
47
+ /**
48
+ * Generates docker run command from deployment settings.
49
+ *
50
+ * Handles conversion of NodeTool deployment configuration into a docker run
51
+ * command suitable for single container deployment.
52
+ */
53
+ export declare class DockerRunGenerator {
54
+ readonly deployment: DockerRunDeployment;
55
+ readonly container: ContainerConfig;
56
+ readonly runtimeCommand: string;
57
+ constructor(deployment: DockerRunDeployment, runtimeCommand?: string);
58
+ /** Generate docker run command as a string. */
59
+ generateCommand(): string;
60
+ /**
61
+ * Generate a hash of the docker run configuration.
62
+ * Can be used to detect changes in the configuration.
63
+ */
64
+ generateHash(): string;
65
+ /** Get the full container name. */
66
+ getContainerName(): string;
67
+ private buildVolumes;
68
+ private buildEnvironment;
69
+ private resolveHostPort;
70
+ private buildGpuArgs;
71
+ }
72
+ /**
73
+ * Generate docker run command from deployment configuration.
74
+ */
75
+ export declare function generateDockerRunCommand(deployment: DockerRunDeployment): string;
76
+ /**
77
+ * Get hash of the docker run configuration for change detection.
78
+ */
79
+ export declare function getDockerRunHash(deployment: DockerRunDeployment): string;
80
+ /**
81
+ * Get the container name for the deployment.
82
+ */
83
+ export declare function getContainerName(deployment: DockerRunDeployment): string;
84
+ export {};
85
+ //# sourceMappingURL=docker-run.d.ts.map