@boxes-dev/dvb 1.0.42 → 1.0.44

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 (87) hide show
  1. package/dist/bin/dvb.cjs +4160 -3307
  2. package/dist/bin/dvb.cjs.map +1 -1
  3. package/dist/bin/dvbd.cjs +5 -5
  4. package/dist/devbox/cli.d.ts.map +1 -1
  5. package/dist/devbox/cli.js +2 -2
  6. package/dist/devbox/cli.js.map +1 -1
  7. package/dist/devbox/commands/agent.d.ts.map +1 -1
  8. package/dist/devbox/commands/agent.js +5 -1
  9. package/dist/devbox/commands/agent.js.map +1 -1
  10. package/dist/devbox/commands/boxSelect.d.ts.map +1 -1
  11. package/dist/devbox/commands/boxSelect.js +7 -7
  12. package/dist/devbox/commands/boxSelect.js.map +1 -1
  13. package/dist/devbox/commands/connect.d.ts.map +1 -1
  14. package/dist/devbox/commands/connect.js +6 -5
  15. package/dist/devbox/commands/connect.js.map +1 -1
  16. package/dist/devbox/commands/destroy.d.ts.map +1 -1
  17. package/dist/devbox/commands/destroy.js +4 -1
  18. package/dist/devbox/commands/destroy.js.map +1 -1
  19. package/dist/devbox/commands/init/args.d.ts +0 -2
  20. package/dist/devbox/commands/init/args.d.ts.map +1 -1
  21. package/dist/devbox/commands/init/args.js +0 -12
  22. package/dist/devbox/commands/init/args.js.map +1 -1
  23. package/dist/devbox/commands/init/codex/artifacts.d.ts +25 -2
  24. package/dist/devbox/commands/init/codex/artifacts.d.ts.map +1 -1
  25. package/dist/devbox/commands/init/codex/artifacts.js +134 -1
  26. package/dist/devbox/commands/init/codex/artifacts.js.map +1 -1
  27. package/dist/devbox/commands/init/codex/index.d.ts +3 -1
  28. package/dist/devbox/commands/init/codex/index.d.ts.map +1 -1
  29. package/dist/devbox/commands/init/codex/index.js +149 -11
  30. package/dist/devbox/commands/init/codex/index.js.map +1 -1
  31. package/dist/devbox/commands/init/codex/local.d.ts +16 -8
  32. package/dist/devbox/commands/init/codex/local.d.ts.map +1 -1
  33. package/dist/devbox/commands/init/codex/local.js +79 -19
  34. package/dist/devbox/commands/init/codex/local.js.map +1 -1
  35. package/dist/devbox/commands/init/finalizeFlow.d.ts +56 -0
  36. package/dist/devbox/commands/init/finalizeFlow.d.ts.map +1 -0
  37. package/dist/devbox/commands/init/finalizeFlow.js +601 -0
  38. package/dist/devbox/commands/init/finalizeFlow.js.map +1 -0
  39. package/dist/devbox/commands/init/index.d.ts.map +1 -1
  40. package/dist/devbox/commands/init/index.js +154 -2006
  41. package/dist/devbox/commands/init/index.js.map +1 -1
  42. package/dist/devbox/commands/init/provisionFlow.d.ts +34 -0
  43. package/dist/devbox/commands/init/provisionFlow.d.ts.map +1 -0
  44. package/dist/devbox/commands/init/provisionFlow.js +319 -0
  45. package/dist/devbox/commands/init/provisionFlow.js.map +1 -0
  46. package/dist/devbox/commands/init/session.d.ts +56 -0
  47. package/dist/devbox/commands/init/session.d.ts.map +1 -0
  48. package/dist/devbox/commands/init/session.js +150 -0
  49. package/dist/devbox/commands/init/session.js.map +1 -0
  50. package/dist/devbox/commands/init/setupArtifactsValidation.d.ts +28 -0
  51. package/dist/devbox/commands/init/setupArtifactsValidation.d.ts.map +1 -0
  52. package/dist/devbox/commands/init/setupArtifactsValidation.js +113 -0
  53. package/dist/devbox/commands/init/setupArtifactsValidation.js.map +1 -0
  54. package/dist/devbox/commands/init/setupPlanFlow.d.ts +28 -0
  55. package/dist/devbox/commands/init/setupPlanFlow.d.ts.map +1 -0
  56. package/dist/devbox/commands/init/setupPlanFlow.js +840 -0
  57. package/dist/devbox/commands/init/setupPlanFlow.js.map +1 -0
  58. package/dist/devbox/commands/init/statusFlow.d.ts +26 -0
  59. package/dist/devbox/commands/init/statusFlow.d.ts.map +1 -0
  60. package/dist/devbox/commands/init/statusFlow.js +152 -0
  61. package/dist/devbox/commands/init/statusFlow.js.map +1 -0
  62. package/dist/devbox/commands/list.js +1 -1
  63. package/dist/devbox/commands/list.js.map +1 -1
  64. package/dist/devbox/commands/mount.d.ts.map +1 -1
  65. package/dist/devbox/commands/mount.js +5 -1
  66. package/dist/devbox/commands/mount.js.map +1 -1
  67. package/dist/devbox/commands/mountSsh.js +2 -2
  68. package/dist/devbox/commands/mountSsh.js.map +1 -1
  69. package/dist/devbox/commands/ports.d.ts.map +1 -1
  70. package/dist/devbox/commands/ports.js +9 -2
  71. package/dist/devbox/commands/ports.js.map +1 -1
  72. package/dist/devbox/commands/services.d.ts.map +1 -1
  73. package/dist/devbox/commands/services.js +5 -1
  74. package/dist/devbox/commands/services.js.map +1 -1
  75. package/dist/devbox/commands/sessions.d.ts.map +1 -1
  76. package/dist/devbox/commands/sessions.js +12 -3
  77. package/dist/devbox/commands/sessions.js.map +1 -1
  78. package/dist/devbox/commands/wezterm.d.ts.map +1 -1
  79. package/dist/devbox/commands/wezterm.js +5 -1
  80. package/dist/devbox/commands/wezterm.js.map +1 -1
  81. package/dist/devbox/completions/index.d.ts.map +1 -1
  82. package/dist/devbox/completions/index.js +0 -1
  83. package/dist/devbox/completions/index.js.map +1 -1
  84. package/dist/prompts/local-scan-env-secrets.md +2 -0
  85. package/dist/prompts/local-scan-external.md +2 -0
  86. package/dist/prompts/local-scan-extra-artifacts.md +2 -0
  87. package/package.json +1 -1
@@ -0,0 +1,601 @@
1
+ import path from "node:path";
2
+ import { confirm as clackConfirm, isCancel, log as clackLog, note as clackNote, select as clackSelect, } from "@clack/prompts";
3
+ import { resolveSocketInfo, SpritesApiError, } from "@boxes-dev/core";
4
+ import { logger } from "../../logger.js";
5
+ import { showCopyableUrl } from "../../ui/copyableUrl.js";
6
+ import { writeRepoMarker } from "./registry.js";
7
+ import { expandHome, shellQuote, stageRemoteSetupArtifacts } from "./remote.js";
8
+ import { ensureSshConfig, ensureSshKey, copyToClipboard, openBrowser, parseGitRemote, readRemoteOrigin, setRemoteOrigin, verifySshAuth, } from "./ssh.js";
9
+ import { runRemoteCodexSetup } from "./codex/index.js";
10
+ import {} from "./codex/plan.js";
11
+ import { mergeServicesToml, splitShellCommand, } from "../servicesToml.js";
12
+ import { runInitStep } from "./progress.js";
13
+ const buildServicesTomlUpdates = (services) => {
14
+ const updates = {};
15
+ for (const service of services) {
16
+ const name = service.name.trim();
17
+ if (!name) {
18
+ throw new Error("Service name is required in setup.json services.");
19
+ }
20
+ const parts = splitShellCommand(service.command ?? "");
21
+ const [cmd, ...args] = parts;
22
+ if (!cmd) {
23
+ throw new Error(`Service "${name}" is missing a command.`);
24
+ }
25
+ updates[name] = {
26
+ name,
27
+ cmd,
28
+ ...(args.length > 0 ? { args } : {}),
29
+ ...(service.httpPort !== null ? { httpPort: service.httpPort } : {}),
30
+ };
31
+ }
32
+ return updates;
33
+ };
34
+ const writeRemoteServicesToml = async ({ client, canonical, workdir, services, }) => {
35
+ if (services.length === 0)
36
+ return;
37
+ let baseContent = "";
38
+ try {
39
+ const bytes = await client.readFile(canonical, {
40
+ path: "devbox.toml",
41
+ workingDir: workdir,
42
+ });
43
+ baseContent = Buffer.from(bytes).toString("utf8");
44
+ }
45
+ catch (error) {
46
+ if (!(error instanceof SpritesApiError && error.status === 404)) {
47
+ throw error;
48
+ }
49
+ }
50
+ const updates = buildServicesTomlUpdates(services);
51
+ if (Object.keys(updates).length === 0)
52
+ return;
53
+ const merged = mergeServicesToml(baseContent, updates);
54
+ await client.writeFile(canonical, path.posix.join(workdir.replace(/\/$/, ""), "devbox.toml"), Buffer.from(merged));
55
+ };
56
+ const enableRemoteServices = async ({ client, canonical, services, status, }) => {
57
+ if (services.length === 0)
58
+ return;
59
+ logger.info("init_services_enable_start", {
60
+ box: canonical,
61
+ serviceCount: services.length,
62
+ });
63
+ for (const service of services) {
64
+ const name = service.name.trim();
65
+ if (!name) {
66
+ throw new Error("Service name is required in setup.json services.");
67
+ }
68
+ status?.stage(`Enabling service: ${name}`);
69
+ const parts = splitShellCommand(service.command ?? "");
70
+ const [cmd, ...args] = parts;
71
+ if (!cmd) {
72
+ throw new Error(`Service "${name}" is missing a command.`);
73
+ }
74
+ const input = {
75
+ cmd,
76
+ ...(args.length > 0 ? { args } : {}),
77
+ ...(service.httpPort !== null ? { httpPort: service.httpPort } : {}),
78
+ };
79
+ await client.createService(canonical, name, input);
80
+ }
81
+ logger.info("init_services_enable_complete", { box: canonical });
82
+ };
83
+ const promptBeforeOpenBrowser = async ({ url, title, consequence, throwInitCanceled, }) => {
84
+ if (!process.stdin.isTTY)
85
+ return false;
86
+ showCopyableUrl(url, title);
87
+ const choice = await clackSelect({
88
+ message: `Open ${title} in your browser?`,
89
+ options: [
90
+ { value: "open", label: "Open in browser" },
91
+ { value: "skip", label: "Skip" },
92
+ ],
93
+ initialValue: "open",
94
+ });
95
+ if (isCancel(choice)) {
96
+ throwInitCanceled();
97
+ }
98
+ if (choice === "skip") {
99
+ clackLog.warn(consequence);
100
+ return false;
101
+ }
102
+ return true;
103
+ };
104
+ const ensureWorkdirOwnership = async ({ client, canonical, workdir, status, }) => {
105
+ const checkResult = await client.exec(canonical, [
106
+ "/bin/bash",
107
+ "-lc",
108
+ [
109
+ "set -euo pipefail",
110
+ `dir=${shellQuote(workdir)}`,
111
+ 'if [ ! -d "$dir" ]; then',
112
+ ' echo "Missing workdir: $dir" >&2',
113
+ " exit 1",
114
+ "fi",
115
+ 'stat -c %U "$dir"',
116
+ ].join("\n"),
117
+ ]);
118
+ if (checkResult.exitCode !== 0) {
119
+ const details = checkResult.stderr || checkResult.stdout || "";
120
+ throw new Error(details
121
+ ? `Failed to check workdir ownership: ${details.trim()}`
122
+ : `Failed to check workdir ownership (exit ${checkResult.exitCode})`);
123
+ }
124
+ const owner = checkResult.stdout.trim();
125
+ if (!owner || owner === "sprite")
126
+ return;
127
+ status.stage("Fixing workdir ownership");
128
+ const chownResult = await client.exec(canonical, [
129
+ "/bin/bash",
130
+ "-lc",
131
+ `sudo -n chown -R sprite:sprite ${shellQuote(workdir)}`,
132
+ ]);
133
+ if (chownResult.exitCode !== 0) {
134
+ const details = chownResult.stderr || chownResult.stdout || "";
135
+ throw new Error(details
136
+ ? `Failed to update workdir ownership: ${details.trim()}`
137
+ : `Failed to update workdir ownership (exit ${chownResult.exitCode})`);
138
+ }
139
+ };
140
+ const ensureGitSafeDirectory = async ({ client, canonical, workdir, status, }) => {
141
+ status.stage("Configuring git safe.directory");
142
+ logger.info("init_git_safe_directory_configure_start", {
143
+ box: canonical,
144
+ workdir,
145
+ });
146
+ const script = [
147
+ "set -euo pipefail",
148
+ `repo=${shellQuote(workdir)}`,
149
+ 'if [ ! -d "$repo" ]; then',
150
+ ' echo "Missing repo workdir: $repo" >&2',
151
+ " exit 1",
152
+ "fi",
153
+ 'if [ ! -d "$repo/.git" ]; then',
154
+ " exit 0",
155
+ "fi",
156
+ "if ! command -v git >/dev/null 2>&1; then",
157
+ " exit 0",
158
+ "fi",
159
+ "",
160
+ "ensure_safe_in_file() {",
161
+ ' cfg="$1"',
162
+ ' existing="$(git config --file "$cfg" --get-all safe.directory 2>/dev/null || true)"',
163
+ ' if printf \'%s\\n\' "$existing" | grep -Fxq "$repo"; then',
164
+ " return 0",
165
+ " fi",
166
+ ' git config --file "$cfg" --add safe.directory "$repo"',
167
+ "}",
168
+ "",
169
+ // Ensure the repo is trusted for the sprite user (most devbox flows).
170
+ 'ensure_safe_in_file "/home/sprite/.gitconfig"',
171
+ // If we created/modified the file as root, best-effort fix the owner.
172
+ 'if [ "$(id -u)" -eq 0 ]; then',
173
+ " chown sprite:sprite /home/sprite/.gitconfig >/dev/null 2>&1 || true",
174
+ "elif command -v sudo >/dev/null 2>&1; then",
175
+ " sudo -n chown sprite:sprite /home/sprite/.gitconfig >/dev/null 2>&1 || true",
176
+ "fi",
177
+ "",
178
+ // Best-effort: also trust the repo for root, in case tools run git as root.
179
+ 'if [ "$(id -u)" -eq 0 ]; then',
180
+ ' ensure_safe_in_file "/root/.gitconfig"',
181
+ "elif command -v sudo >/dev/null 2>&1; then",
182
+ ' root_existing="$(sudo -n git config --file /root/.gitconfig --get-all safe.directory 2>/dev/null || true)"',
183
+ ' if ! printf \'%s\\n\' "$root_existing" | grep -Fxq "$repo"; then',
184
+ ' sudo -n git config --file /root/.gitconfig --add safe.directory "$repo" >/dev/null 2>&1 || true',
185
+ " fi",
186
+ "fi",
187
+ ].join("\n");
188
+ const result = await client.exec(canonical, [
189
+ "/bin/bash",
190
+ "--noprofile",
191
+ "--norc",
192
+ "-e",
193
+ "-u",
194
+ "-o",
195
+ "pipefail",
196
+ "-c",
197
+ script,
198
+ ]);
199
+ if (result.exitCode !== 0) {
200
+ const details = result.stderr || result.stdout || "";
201
+ throw new Error(details
202
+ ? `Failed to configure git safe.directory: ${details.trim()}`
203
+ : `Failed to configure git safe.directory (exit ${result.exitCode})`);
204
+ }
205
+ logger.info("init_git_safe_directory_configure_complete", {
206
+ box: canonical,
207
+ workdir,
208
+ });
209
+ };
210
+ const runFinalizeFlow = async ({ client, canonical, alias, workdir, projectDir, fingerprint, projectOrigin, projectCreatedAt, finalApprovedPlan, shouldResume, nonInteractive, progressEnabled, parsed, skipCodexApply, skipServicesConfig, skipServicesEnable, remoteSetupPath, remoteArtifactsBundlePath, remoteArtifactsManifestPath, socketInfo, pathSetup, initCodexProxyOptions, throwInitCanceled, getInitState, updateInitState, updateRegistryProjectStatus, resolveInitStatus, retryInitStep, recordCodexCheckpoint, }) => {
211
+ const expandedWorkdir = expandHome(workdir);
212
+ await runInitStep({
213
+ enabled: progressEnabled,
214
+ title: "Ensuring workdir ownership",
215
+ fn: async ({ status }) => {
216
+ await retryInitStep({
217
+ status,
218
+ title: "Ensuring workdir ownership",
219
+ fn: async () => await ensureWorkdirOwnership({
220
+ client,
221
+ canonical,
222
+ workdir: expandedWorkdir,
223
+ status,
224
+ }),
225
+ });
226
+ },
227
+ });
228
+ const skipGitSafeDirectory = Boolean(shouldResume && getInitState()?.steps.gitSafeDirectoryConfigured);
229
+ if (!skipGitSafeDirectory) {
230
+ await runInitStep({
231
+ enabled: progressEnabled,
232
+ title: "Configuring git safe.directory",
233
+ fn: async ({ status }) => {
234
+ await ensureGitSafeDirectory({
235
+ client,
236
+ canonical,
237
+ workdir: expandedWorkdir,
238
+ status,
239
+ });
240
+ await updateInitState({
241
+ steps: { gitSafeDirectoryConfigured: true },
242
+ });
243
+ },
244
+ });
245
+ }
246
+ const skipSshAuth = Boolean(nonInteractive || (shouldResume && getInitState()?.steps.sshAuthConfigured));
247
+ if (!skipSshAuth) {
248
+ const { remoteOrigin, remoteInfo } = await runInitStep({
249
+ enabled: progressEnabled,
250
+ title: "Checking git remote for SSH auth",
251
+ fn: async () => {
252
+ const remoteOrigin = await readRemoteOrigin(client, canonical, expandedWorkdir);
253
+ const remoteInfo = remoteOrigin ? parseGitRemote(remoteOrigin) : null;
254
+ return { remoteOrigin, remoteInfo };
255
+ },
256
+ });
257
+ if (!remoteOrigin) {
258
+ if (!parsed.json) {
259
+ console.warn("Warning: unable to detect remote origin on sprite. Skipping SSH setup.");
260
+ }
261
+ }
262
+ else if (!remoteInfo) {
263
+ if (!parsed.json) {
264
+ console.warn(`Warning: unrecognized git remote format (${remoteOrigin}). Skipping SSH setup.`);
265
+ }
266
+ }
267
+ else {
268
+ let activeOrigin = remoteOrigin;
269
+ if (remoteInfo.protocol === "https") {
270
+ if (!parsed.json) {
271
+ clackNote([
272
+ `Origin is HTTPS (${remoteOrigin}).`,
273
+ "",
274
+ "This only changes the remote devbox checkout (your local checkout is unchanged).",
275
+ "SSH key auth on the remote devbox will not work unless this remote uses SSH:",
276
+ remoteInfo.sshUrl,
277
+ ].join("\n"), "Git remote");
278
+ }
279
+ const shouldSwitch = await clackSelect({
280
+ message: `Use SSH auth for ${remoteInfo.host} on the remote devbox checkout?`,
281
+ options: [
282
+ {
283
+ value: "switch",
284
+ label: "Use SSH on remote devbox (Recommended)",
285
+ },
286
+ { value: "keep", label: "Keep HTTPS (Skip SSH auth setup)" },
287
+ { value: "cancel", label: "Cancel init" },
288
+ ],
289
+ initialValue: "switch",
290
+ });
291
+ if (isCancel(shouldSwitch) || shouldSwitch === "cancel") {
292
+ throwInitCanceled();
293
+ }
294
+ if (shouldSwitch === "keep") {
295
+ if (!parsed.json) {
296
+ console.warn("Skipping SSH auth setup. Configure git credentials for this repo manually before pulling or pushing.");
297
+ }
298
+ await updateInitState({
299
+ steps: { sshAuthConfigured: true },
300
+ });
301
+ activeOrigin = "";
302
+ }
303
+ else {
304
+ await runInitStep({
305
+ enabled: progressEnabled,
306
+ title: "Updating remote devbox checkout to SSH git remote",
307
+ fn: async () => {
308
+ await setRemoteOrigin(client, canonical, expandedWorkdir, remoteInfo.sshUrl);
309
+ },
310
+ });
311
+ activeOrigin = remoteInfo.sshUrl;
312
+ }
313
+ }
314
+ if (activeOrigin) {
315
+ const publicKey = await runInitStep({
316
+ enabled: progressEnabled,
317
+ title: "Generating SSH key",
318
+ fn: async () => await ensureSshKey(client, canonical, `${alias}@devbox`),
319
+ });
320
+ await runInitStep({
321
+ enabled: progressEnabled,
322
+ title: "Updating SSH config",
323
+ fn: async () => await ensureSshConfig(client, canonical, remoteInfo.host),
324
+ });
325
+ if (!parsed.json) {
326
+ clackNote(publicKey, `Add this SSH public key to ${remoteInfo.host}`);
327
+ const copied = await copyToClipboard(publicKey);
328
+ if (copied) {
329
+ clackLog.success("Copied SSH public key to clipboard.");
330
+ }
331
+ else {
332
+ clackLog.warn("Could not copy the SSH key automatically.");
333
+ }
334
+ const shouldOpen = await promptBeforeOpenBrowser({
335
+ url: remoteInfo.settingsUrl,
336
+ title: `${remoteInfo.host} SSH key page`,
337
+ consequence: [
338
+ "Skipping browser open.",
339
+ "You must add the SSH key before git pull/push will work via SSH.",
340
+ ].join(" "),
341
+ throwInitCanceled,
342
+ });
343
+ if (shouldOpen) {
344
+ const opened = openBrowser(remoteInfo.settingsUrl);
345
+ if (!opened) {
346
+ clackLog.warn("Unable to open the browser automatically.");
347
+ }
348
+ }
349
+ }
350
+ const added = await clackConfirm({
351
+ message: "Have you added the SSH key?",
352
+ active: "Yes, verify now",
353
+ inactive: "Not yet",
354
+ initialValue: true,
355
+ });
356
+ if (isCancel(added)) {
357
+ throwInitCanceled();
358
+ }
359
+ if (!added) {
360
+ if (!parsed.json) {
361
+ console.warn("Skipping SSH verification. Add the key and re-run `dvb init --resume` to verify.");
362
+ }
363
+ }
364
+ else {
365
+ const verified = await runInitStep({
366
+ enabled: progressEnabled,
367
+ title: "Verifying git SSH auth",
368
+ fn: async () => await verifySshAuth(client, canonical, remoteInfo.host, expandedWorkdir),
369
+ });
370
+ if (!verified) {
371
+ if (!parsed.json) {
372
+ console.warn("SSH auth verification failed. Confirm the key is added and that the repo access is granted.");
373
+ }
374
+ }
375
+ else {
376
+ await updateInitState({
377
+ steps: { sshAuthConfigured: true },
378
+ });
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
384
+ if (!skipServicesConfig) {
385
+ await runInitStep({
386
+ enabled: progressEnabled,
387
+ title: "Writing devbox.toml services",
388
+ fn: async () => {
389
+ await writeRemoteServicesToml({
390
+ client,
391
+ canonical,
392
+ workdir: expandedWorkdir,
393
+ services: finalApprovedPlan.services.backgroundServices,
394
+ });
395
+ await updateInitState({ steps: { servicesConfigWritten: true } });
396
+ },
397
+ });
398
+ }
399
+ const projectMeta = {
400
+ fingerprint,
401
+ canonical,
402
+ alias,
403
+ workdir,
404
+ origin: projectOrigin,
405
+ createdAt: projectCreatedAt,
406
+ };
407
+ const projectMetaPath = `/home/sprite/.devbox/projects/${fingerprint}.json`;
408
+ await runInitStep({
409
+ enabled: progressEnabled,
410
+ title: "Registering project",
411
+ fn: async () => {
412
+ let existing = {};
413
+ try {
414
+ const raw = await client.readFile(canonical, {
415
+ path: projectMetaPath,
416
+ });
417
+ const parsed = JSON.parse(Buffer.from(raw).toString("utf8"));
418
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
419
+ existing = parsed;
420
+ }
421
+ }
422
+ catch (error) {
423
+ if (!(error instanceof SpritesApiError && error.status === 404)) {
424
+ throw error;
425
+ }
426
+ }
427
+ const existingCheckpoints = existing.checkpoints &&
428
+ typeof existing.checkpoints === "object" &&
429
+ !Array.isArray(existing.checkpoints)
430
+ ? existing.checkpoints
431
+ : {};
432
+ const stateCheckpoints = getInitState()?.checkpoints ?? {};
433
+ const merged = {
434
+ ...existing,
435
+ ...projectMeta,
436
+ checkpoints: { ...existingCheckpoints, ...stateCheckpoints },
437
+ };
438
+ await client.writeFile(canonical, projectMetaPath, Buffer.from(JSON.stringify(merged, null, 2)));
439
+ },
440
+ });
441
+ await runInitStep({
442
+ enabled: progressEnabled,
443
+ title: "Writing local metadata",
444
+ fn: async () => {
445
+ await writeRepoMarker(projectDir, { fingerprint, canonical, alias });
446
+ },
447
+ });
448
+ const skipSetupArtifactsStage = Boolean(skipCodexApply ||
449
+ (shouldResume && getInitState()?.steps.setupArtifactsStaged));
450
+ if (!skipSetupArtifactsStage) {
451
+ await runInitStep({
452
+ enabled: progressEnabled,
453
+ title: "Staging setup artifacts",
454
+ fn: async ({ status }) => {
455
+ status.stage("Copying repo artifacts and staging external files");
456
+ await stageRemoteSetupArtifacts({
457
+ client,
458
+ canonical,
459
+ workdir: expandedWorkdir,
460
+ artifactsBundlePath: remoteArtifactsBundlePath,
461
+ artifactsManifestPath: remoteArtifactsManifestPath,
462
+ });
463
+ },
464
+ });
465
+ await updateInitState({ steps: { setupArtifactsStaged: true } });
466
+ }
467
+ if (!skipCodexApply) {
468
+ await runInitStep({
469
+ enabled: progressEnabled,
470
+ title: "Snapshotting filesystem (pre-setup)",
471
+ fn: async ({ status, fail, ok }) => {
472
+ try {
473
+ const checkpoint = await retryInitStep({
474
+ status,
475
+ title: "Snapshotting filesystem (pre-setup)",
476
+ fn: async () => await recordCodexCheckpoint({
477
+ client,
478
+ canonical,
479
+ phase: "preCodexSetup",
480
+ }),
481
+ });
482
+ if (checkpoint.id) {
483
+ ok(`Snapshot created: ${checkpoint.id}`);
484
+ }
485
+ }
486
+ catch (error) {
487
+ logger.warn("init_checkpoint_create_failed", {
488
+ box: canonical,
489
+ fingerprint,
490
+ phase: "pre-codex-setup",
491
+ error: error instanceof Error ? error.message : String(error),
492
+ });
493
+ fail("Snapshotting filesystem (pre-setup) (failed)");
494
+ throw error;
495
+ }
496
+ },
497
+ });
498
+ if (!skipServicesEnable) {
499
+ await runInitStep({
500
+ enabled: progressEnabled,
501
+ title: "Enabling devbox services",
502
+ fn: async ({ status }) => {
503
+ await enableRemoteServices({
504
+ client,
505
+ canonical,
506
+ services: finalApprovedPlan.services.backgroundServices,
507
+ status,
508
+ });
509
+ await updateInitState({ steps: { servicesEnabled: true } });
510
+ },
511
+ });
512
+ }
513
+ await runInitStep({
514
+ enabled: progressEnabled,
515
+ title: "Running Codex setup",
516
+ fn: async ({ status }) => {
517
+ await runRemoteCodexSetup({
518
+ client,
519
+ canonical,
520
+ expandedWorkdir,
521
+ remoteSetupPath,
522
+ remoteArtifactsBundlePath,
523
+ remoteArtifactsManifestPath,
524
+ socketInfo,
525
+ status,
526
+ pathSetup,
527
+ entrypoints: finalApprovedPlan.services.appEntrypoints,
528
+ emitCodexOutput: !parsed.json,
529
+ ...(initCodexProxyOptions
530
+ ? { proxyOptions: initCodexProxyOptions }
531
+ : {}),
532
+ });
533
+ },
534
+ });
535
+ await updateInitState({ steps: { codexApplied: true } });
536
+ await updateRegistryProjectStatus(resolveInitStatus(getInitState()?.steps, getInitState()?.complete));
537
+ await runInitStep({
538
+ enabled: progressEnabled,
539
+ title: "Snapshotting filesystem (post-setup)",
540
+ fn: async ({ status, fail, ok }) => {
541
+ try {
542
+ const checkpoint = await retryInitStep({
543
+ status,
544
+ title: "Snapshotting filesystem (post-setup)",
545
+ fn: async () => await recordCodexCheckpoint({
546
+ client,
547
+ canonical,
548
+ phase: "postCodexSetup",
549
+ }),
550
+ });
551
+ if (checkpoint.id) {
552
+ ok(`Snapshot created: ${checkpoint.id}`);
553
+ }
554
+ }
555
+ catch (error) {
556
+ logger.warn("init_checkpoint_create_failed", {
557
+ box: canonical,
558
+ fingerprint,
559
+ phase: "post-codex-setup",
560
+ error: error instanceof Error ? error.message : String(error),
561
+ });
562
+ fail("Snapshotting filesystem (post-setup) (failed)");
563
+ throw error;
564
+ }
565
+ },
566
+ });
567
+ }
568
+ const finalStatus = resolveInitStatus(getInitState()?.steps, getInitState()?.complete);
569
+ const isComplete = finalStatus === "complete";
570
+ await runInitStep({
571
+ enabled: progressEnabled,
572
+ title: "Finalizing init",
573
+ fn: async () => {
574
+ await updateInitState({ complete: isComplete });
575
+ await updateRegistryProjectStatus(finalStatus);
576
+ },
577
+ });
578
+ if (parsed.json) {
579
+ console.log(JSON.stringify({
580
+ ok: true,
581
+ status: finalStatus,
582
+ canonical,
583
+ alias,
584
+ workdir,
585
+ fingerprint,
586
+ }, null, 2));
587
+ return;
588
+ }
589
+ if (!isComplete) {
590
+ console.log(`devbox initialized (setup incomplete): ${alias} -> ${canonical}`);
591
+ console.log(`workdir: ${workdir}`);
592
+ console.log("next: run `dvb init --resume` from this repo to finish setup");
593
+ console.log("sprites: synced to control plane");
594
+ return;
595
+ }
596
+ console.log(`devbox initialized: ${alias} -> ${canonical}`);
597
+ console.log(`workdir: ${workdir}`);
598
+ console.log("sprites: synced to control plane");
599
+ };
600
+ export { runFinalizeFlow };
601
+ //# sourceMappingURL=finalizeFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalizeFlow.js","sourceRoot":"","sources":["../../../../src/devbox/commands/init/finalizeFlow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/devbox/commands/init/index.ts"],"names":[],"mappings":"AAipBA,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,EAAE,kBAm6F3C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/devbox/commands/init/index.ts"],"names":[],"mappings":"AAoVA,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,EAAE,kBAg4B3C,CAAC"}