@boxes-dev/dvb 1.0.31 → 1.0.33
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/dist/bin/dvb.cjs +217 -123
- package/dist/bin/dvb.cjs.map +1 -1
- package/dist/bin/dvbd.cjs +5 -5
- package/dist/devbox/commands/init/codex/index.d.ts.map +1 -1
- package/dist/devbox/commands/init/codex/index.js +8 -15
- package/dist/devbox/commands/init/codex/index.js.map +1 -1
- package/dist/devbox/commands/init/index.d.ts.map +1 -1
- package/dist/devbox/commands/init/index.js +104 -17
- package/dist/devbox/commands/init/index.js.map +1 -1
- package/dist/devbox/commands/init/remote.d.ts.map +1 -1
- package/dist/devbox/commands/init/remote.js +16 -5
- package/dist/devbox/commands/init/remote.js.map +1 -1
- package/dist/devbox/commands/init/state.d.ts +2 -1
- package/dist/devbox/commands/init/state.d.ts.map +1 -1
- package/dist/devbox/commands/init/state.js +1 -0
- package/dist/devbox/commands/init/state.js.map +1 -1
- package/dist/devbox/commands/setup.d.ts.map +1 -1
- package/dist/devbox/commands/setup.js +42 -18
- package/dist/devbox/commands/setup.js.map +1 -1
- package/dist/devbox/controlPlane.d.ts.map +1 -1
- package/dist/devbox/controlPlane.js +23 -19
- package/dist/devbox/controlPlane.js.map +1 -1
- package/dist/devbox/ui/copyableUrl.d.ts +3 -0
- package/dist/devbox/ui/copyableUrl.d.ts.map +1 -0
- package/dist/devbox/ui/copyableUrl.js +7 -0
- package/dist/devbox/ui/copyableUrl.js.map +1 -0
- package/dist/scripts/fix-bashrc.sh +33 -14
- package/dist/scripts/fix-zshrc.sh +56 -0
- package/package.json +1 -1
package/dist/bin/dvbd.cjs
CHANGED
|
@@ -88604,8 +88604,8 @@ var init_otel = __esm({
|
|
|
88604
88604
|
return trimmed && trimmed.length > 0 ? trimmed : void 0;
|
|
88605
88605
|
};
|
|
88606
88606
|
readBuildMetadata = () => {
|
|
88607
|
-
const rawPackageVersion = "1.0.
|
|
88608
|
-
const rawGitSha = "
|
|
88607
|
+
const rawPackageVersion = "1.0.33";
|
|
88608
|
+
const rawGitSha = "fa907b87a93b04d34b7fc28eae6436ee11a6a456";
|
|
88609
88609
|
const packageVersion = typeof rawPackageVersion === "string" ? rawPackageVersion : void 0;
|
|
88610
88610
|
const gitSha = typeof rawGitSha === "string" ? rawGitSha : void 0;
|
|
88611
88611
|
return { packageVersion, gitSha };
|
|
@@ -120522,9 +120522,9 @@ var init_sentry = __esm({
|
|
|
120522
120522
|
sentryEnabled = false;
|
|
120523
120523
|
uncaughtExceptionMonitorInstalled = false;
|
|
120524
120524
|
readBuildMetadata2 = () => {
|
|
120525
|
-
const rawPackageVersion = "1.0.
|
|
120526
|
-
const rawGitSha = "
|
|
120527
|
-
const rawSentryRelease = "boxes-dev-dvb@1.0.
|
|
120525
|
+
const rawPackageVersion = "1.0.33";
|
|
120526
|
+
const rawGitSha = "fa907b87a93b04d34b7fc28eae6436ee11a6a456";
|
|
120527
|
+
const rawSentryRelease = "boxes-dev-dvb@1.0.33+fa907b87a93b04d34b7fc28eae6436ee11a6a456";
|
|
120528
120528
|
const packageVersion = typeof rawPackageVersion === "string" ? rawPackageVersion : void 0;
|
|
120529
120529
|
const gitSha = typeof rawGitSha === "string" ? rawGitSha : void 0;
|
|
120530
120530
|
const sentryRelease = typeof rawSentryRelease === "string" ? rawSentryRelease : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/devbox/commands/init/codex/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/devbox/commands/init/codex/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIxE,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,SAAS,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,+BAA+B,EAChC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAyEzD,QAAA,MAAM,eAAe,GAAU,+KAU5B;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,kBAAkB,CAAC;CAC5B,kBAyCA,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAU,8JAWhC;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,EAAE,MAAM,CAAC;IAClC,2BAA2B,EAAE,MAAM,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACjD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D,kBA8JA,CAAC;AAEF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,+BAA+B,EAC/B,eAAe,EACf,cAAc,EACd,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,GACxB,CAAC;AACF,YAAY,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import { cancel as clackCancel, isCancel, log as clackLog,
|
|
4
|
+
import { cancel as clackCancel, isCancel, log as clackLog, select as clackSelect, } from "@clack/prompts";
|
|
5
5
|
import { resolveSocketInfo } from "@boxes-dev/core";
|
|
6
6
|
import { requestJson, requireDaemonFeatures } from "../../../daemonClient.js";
|
|
7
|
+
import { showCopyableUrl } from "../../../ui/copyableUrl.js";
|
|
7
8
|
import { shellQuote } from "../remote.js";
|
|
8
9
|
import { ensureRemoteCodexInstalled, isRemoteCodexLoggedIn, openBrowser, renderRemoteApplyPrompt, runRemoteCodexExec, runRemoteCodexLogin, } from "./remote.js";
|
|
9
10
|
import { readSetupPlan, readSetupEnvSecretsPlan, readSetupExternalPlan, readSetupExtraArtifactsPlan, readServicesPlan, mergeSetupScans, writeSetupPlan, writeSetupEnvSecretsSchema, writeSetupExternalSchema, writeSetupExtraArtifactsSchema, writeServicesPlan, writeServicesSchema, } from "./plan.js";
|
|
@@ -97,7 +98,6 @@ const uploadSetupPlan = async ({ client, canonical, localSetupPath, remoteSetupP
|
|
|
97
98
|
const runRemoteCodexSetup = async ({ client, canonical, expandedWorkdir, remoteSetupPath, remoteArtifactsBundlePath, remoteArtifactsManifestPath, socketInfo, status, pathSetup, entrypoints, }) => {
|
|
98
99
|
status.stage("Checking Codex login");
|
|
99
100
|
let loggedIn = await isRemoteCodexLoggedIn(client, canonical);
|
|
100
|
-
let upgraded = false;
|
|
101
101
|
if (!loggedIn) {
|
|
102
102
|
const synced = await syncLocalCodexAuthCacheToSprite({
|
|
103
103
|
client,
|
|
@@ -109,9 +109,6 @@ const runRemoteCodexSetup = async ({ client, canonical, expandedWorkdir, remoteS
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
if (!loggedIn) {
|
|
112
|
-
status.stage("Upgrading Codex");
|
|
113
|
-
await ensureRemoteCodexInstalled(client, canonical);
|
|
114
|
-
upgraded = true;
|
|
115
112
|
await requireDaemonFeatures(socketInfo.socketPath, ["ports"]);
|
|
116
113
|
status.stage("Waiting for Codex login");
|
|
117
114
|
let openedUrl = false;
|
|
@@ -137,20 +134,20 @@ const runRemoteCodexSetup = async ({ client, canonical, expandedWorkdir, remoteS
|
|
|
137
134
|
return;
|
|
138
135
|
openedUrl = true;
|
|
139
136
|
status.stop();
|
|
140
|
-
|
|
141
|
-
const action = await
|
|
137
|
+
showCopyableUrl(url, "Codex login URL");
|
|
138
|
+
const action = await clackSelect({
|
|
142
139
|
message: "Open the Codex login URL in your browser?",
|
|
143
140
|
options: [
|
|
144
|
-
{ value: "
|
|
145
|
-
{ value: "
|
|
141
|
+
{ value: "open", label: "Open in browser" },
|
|
142
|
+
{ value: "skip", label: "Skip" },
|
|
146
143
|
],
|
|
147
|
-
initialValue: "
|
|
144
|
+
initialValue: "open",
|
|
148
145
|
});
|
|
149
146
|
if (isCancel(action)) {
|
|
150
147
|
clackCancel("Init canceled.");
|
|
151
148
|
throw new Error("Init canceled.");
|
|
152
149
|
}
|
|
153
|
-
if (action === "
|
|
150
|
+
if (action === "open") {
|
|
154
151
|
const opened = await openBrowser(url);
|
|
155
152
|
if (opened) {
|
|
156
153
|
clackLog.success("Opened browser for Codex login.");
|
|
@@ -200,10 +197,6 @@ const runRemoteCodexSetup = async ({ client, canonical, expandedWorkdir, remoteS
|
|
|
200
197
|
].join(" "));
|
|
201
198
|
}
|
|
202
199
|
}
|
|
203
|
-
if (!upgraded) {
|
|
204
|
-
status.stage("Upgrading Codex");
|
|
205
|
-
await ensureRemoteCodexInstalled(client, canonical);
|
|
206
|
-
}
|
|
207
200
|
status.stage("Applying setup plan");
|
|
208
201
|
const remotePrompt = await renderRemoteApplyPrompt({
|
|
209
202
|
setupPath: remoteSetupPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/devbox/commands/init/codex/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,MAAM,IAAI,WAAW,EACrB,QAAQ,EACR,GAAG,IAAI,QAAQ,EACf,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/devbox/commands/init/codex/index.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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/devbox/commands/init/index.ts"],"names":[],"mappings":"AA4oBA,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,EAAE,kBA6pF3C,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import os from "node:os";
|
|
4
|
-
import { cancel as clackCancel, confirm as clackConfirm, isCancel, log as clackLog, note as clackNote, select as clackSelect,
|
|
4
|
+
import { cancel as clackCancel, confirm as clackConfirm, isCancel, log as clackLog, note as clackNote, select as clackSelect, taskLog as clackTaskLog, } from "@clack/prompts";
|
|
5
5
|
import { resolveSocketInfo } from "@boxes-dev/core";
|
|
6
6
|
import { createSecretStore, loadConfig, createSpritesClient, normalizeGitRemoteUrl, resolveSpritesApiUrl, resolveDevboxProjectDir, SpritesApiError, slugify, } from "@boxes-dev/core";
|
|
7
7
|
import { DAEMON_TIMEOUT_MS, ensureDaemonRunning, requestJson, requireDaemonFeatures, } from "../../daemonClient.js";
|
|
@@ -14,10 +14,11 @@ import { createFileListArchive, createGitMetaArchive, writePatch, } from "./pack
|
|
|
14
14
|
import { bootstrapDevbox, ensureSpriteDaemonService, expandHome, ensureWeztermMuxService, installSpriteDaemon, shellQuote, stageRemoteSetupArtifacts, writeRemoteCodexConfig, } from "./remote.js";
|
|
15
15
|
import { ensureWeztermMuxInstalled } from "../../../wezterm/ensureMux.js";
|
|
16
16
|
import { readRepoMarker, writeRepoMarker } from "./registry.js";
|
|
17
|
+
import { showCopyableUrl } from "../../ui/copyableUrl.js";
|
|
17
18
|
import { INIT_STEP_KEYS, readInitState, writeInitState, } from "./state.js";
|
|
18
19
|
import { ensureSshConfig, ensureSshKey, copyToClipboard, openBrowser, parseGitRemote, readRemoteOrigin, setRemoteOrigin, verifySshAuth, } from "./ssh.js";
|
|
19
20
|
import { ensureKnownHostsFile, ensureLocalMountKey, ensureRemoteMountAccess, ensureSshdService, readLocalMountPublicKey, } from "../mountSsh.js";
|
|
20
|
-
import { createSetupArtifacts, promptForPlanApproval, promptForServicesApproval, readSetupPlan, readSetupEnvSecretsPlan, readSetupExternalPlan, readSetupExtraArtifactsPlan, readServicesPlan, runLocalServicesScan, runLocalSetupEnvSecretsScan, runLocalSetupExternalScan, runLocalSetupExtraArtifactsScan, runRemoteCodexSetup, uploadSetupPlan, mergeSetupScans, writeSetupPlan, writeSetupEnvSecretsSchema, writeSetupExternalSchema, writeSetupExtraArtifactsSchema, writeServicesSchema, } from "./codex/index.js";
|
|
21
|
+
import { createSetupArtifacts, promptForPlanApproval, promptForServicesApproval, readSetupPlan, readSetupEnvSecretsPlan, readSetupExternalPlan, readSetupExtraArtifactsPlan, readServicesPlan, runLocalServicesScan, runLocalSetupEnvSecretsScan, runLocalSetupExternalScan, runLocalSetupExtraArtifactsScan, runRemoteCodexSetup, ensureRemoteCodexInstalled, uploadSetupPlan, mergeSetupScans, writeSetupPlan, writeSetupEnvSecretsSchema, writeSetupExternalSchema, writeSetupExtraArtifactsSchema, writeServicesSchema, } from "./codex/index.js";
|
|
21
22
|
import { mergeServicesToml, splitShellCommand, } from "../servicesToml.js";
|
|
22
23
|
import { runInitStep } from "./progress.js";
|
|
23
24
|
const requireDaemonJsonOk = (response, label) => {
|
|
@@ -283,19 +284,19 @@ const throwInitCanceled = () => {
|
|
|
283
284
|
const promptBeforeOpenBrowser = async ({ url, title, consequence, }) => {
|
|
284
285
|
if (!process.stdin.isTTY)
|
|
285
286
|
return false;
|
|
286
|
-
|
|
287
|
-
const choice = await
|
|
287
|
+
showCopyableUrl(url, title);
|
|
288
|
+
const choice = await clackSelect({
|
|
288
289
|
message: `Open ${title} in your browser?`,
|
|
289
290
|
options: [
|
|
290
|
-
{ value: "
|
|
291
|
-
{ value: "
|
|
291
|
+
{ value: "open", label: "Open in browser" },
|
|
292
|
+
{ value: "skip", label: "Skip" },
|
|
292
293
|
],
|
|
293
|
-
initialValue: "
|
|
294
|
+
initialValue: "open",
|
|
294
295
|
});
|
|
295
296
|
if (isCancel(choice)) {
|
|
296
297
|
throwInitCanceled();
|
|
297
298
|
}
|
|
298
|
-
if (choice === "
|
|
299
|
+
if (choice === "skip") {
|
|
299
300
|
clackLog.warn(consequence);
|
|
300
301
|
return false;
|
|
301
302
|
}
|
|
@@ -890,6 +891,27 @@ export const runInit = async (args) => {
|
|
|
890
891
|
});
|
|
891
892
|
},
|
|
892
893
|
});
|
|
894
|
+
await runInitStep({
|
|
895
|
+
enabled: progressEnabled,
|
|
896
|
+
title: "Ensuring Codex CLI",
|
|
897
|
+
fn: async ({ status, fail }) => {
|
|
898
|
+
try {
|
|
899
|
+
await retryInitStep({
|
|
900
|
+
status,
|
|
901
|
+
title: "Ensuring Codex CLI",
|
|
902
|
+
fn: async () => await ensureRemoteCodexInstalled(client, canonical),
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
catch (error) {
|
|
906
|
+
logger.warn("codex_cli_ensure_failed", {
|
|
907
|
+
box: canonical,
|
|
908
|
+
error: error instanceof Error ? error.message : String(error),
|
|
909
|
+
});
|
|
910
|
+
fail("Ensuring Codex CLI (failed)");
|
|
911
|
+
throw error;
|
|
912
|
+
}
|
|
913
|
+
},
|
|
914
|
+
});
|
|
893
915
|
await runInitStep({
|
|
894
916
|
enabled: progressEnabled,
|
|
895
917
|
title: "Applying setup plan",
|
|
@@ -1004,6 +1026,7 @@ export const runInit = async (args) => {
|
|
|
1004
1026
|
let canonical = (shouldResume && initState?.canonical ? initState.canonical : null) ??
|
|
1005
1027
|
canonicalHint ??
|
|
1006
1028
|
`${username}-${slug}`;
|
|
1029
|
+
const knownAssociatedCanonicals = new Set([existingEntry?.canonical, initState?.canonical].filter((value) => typeof value === "string" && value.length > 0));
|
|
1007
1030
|
const createSprite = async (name) => {
|
|
1008
1031
|
try {
|
|
1009
1032
|
await client.createSprite(name);
|
|
@@ -1023,6 +1046,17 @@ export const runInit = async (args) => {
|
|
|
1023
1046
|
}
|
|
1024
1047
|
};
|
|
1025
1048
|
const skipCreate = shouldResume && initState?.steps.spritesCreated && initState.canonical;
|
|
1049
|
+
if (!skipCreate) {
|
|
1050
|
+
const aliasLookup = await requestJson(socketInfo.socketPath, "GET", `/registry/alias?alias=${encodeURIComponent(alias)}`, DAEMON_TIMEOUT_MS.registry);
|
|
1051
|
+
requireDaemonJsonOk(aliasLookup, "Checking alias (/registry/alias)");
|
|
1052
|
+
const aliasCanonical = aliasLookup.body.canonical;
|
|
1053
|
+
if (aliasCanonical &&
|
|
1054
|
+
aliasCanonical !== canonical &&
|
|
1055
|
+
!knownAssociatedCanonicals.has(aliasCanonical) &&
|
|
1056
|
+
!parsed.force) {
|
|
1057
|
+
throw new Error(`Alias already in use: ${alias}`);
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1026
1060
|
if (!skipCreate) {
|
|
1027
1061
|
canonical = await runInitStep({
|
|
1028
1062
|
enabled: progressEnabled,
|
|
@@ -1030,16 +1064,40 @@ export const runInit = async (args) => {
|
|
|
1030
1064
|
fn: async ({ status }) => {
|
|
1031
1065
|
let nextCanonical = canonical;
|
|
1032
1066
|
const createResult = await createSprite(nextCanonical);
|
|
1033
|
-
if (createResult === "exists"
|
|
1034
|
-
|
|
1035
|
-
|
|
1067
|
+
if (createResult === "exists") {
|
|
1068
|
+
const associatedCanonical = knownAssociatedCanonicals.has(nextCanonical);
|
|
1069
|
+
if (parsed.force) {
|
|
1070
|
+
if (!associatedCanonical) {
|
|
1071
|
+
if (!process.stdin.isTTY || parsed.json) {
|
|
1072
|
+
throw new Error(`Sprite already exists: ${nextCanonical}. Refusing to reuse an unlinked sprite in non-interactive mode.`);
|
|
1073
|
+
}
|
|
1074
|
+
status.stop();
|
|
1075
|
+
const confirmedReuse = await clackConfirm({
|
|
1076
|
+
message: `Sprite "${nextCanonical}" already exists but is not linked to this repo. Reuse it with --force?`,
|
|
1077
|
+
active: "Reuse existing sprite",
|
|
1078
|
+
inactive: "Abort init",
|
|
1079
|
+
initialValue: false,
|
|
1080
|
+
});
|
|
1081
|
+
if (isCancel(confirmedReuse)) {
|
|
1082
|
+
throwInitCanceled();
|
|
1083
|
+
}
|
|
1084
|
+
if (!confirmedReuse) {
|
|
1085
|
+
throw new Error(`Sprite reuse canceled: ${nextCanonical}. Choose a different --name.`);
|
|
1086
|
+
}
|
|
1087
|
+
status.stage("Creating devbox");
|
|
1088
|
+
}
|
|
1036
1089
|
}
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1090
|
+
else {
|
|
1091
|
+
if (canonicalHint) {
|
|
1092
|
+
throw new Error(`Sprite already exists: ${nextCanonical}`);
|
|
1093
|
+
}
|
|
1094
|
+
const suffix = fingerprint.slice(0, 6);
|
|
1095
|
+
nextCanonical = `${nextCanonical}-${suffix}`;
|
|
1096
|
+
status.stage("Resolving devbox name");
|
|
1097
|
+
const second = await createSprite(nextCanonical);
|
|
1098
|
+
if (second === "exists") {
|
|
1099
|
+
throw new Error(`Sprite already exists: ${nextCanonical}`);
|
|
1100
|
+
}
|
|
1043
1101
|
}
|
|
1044
1102
|
}
|
|
1045
1103
|
await updateInitState({
|
|
@@ -1209,6 +1267,7 @@ export const runInit = async (args) => {
|
|
|
1209
1267
|
const skipServicesEnable = shouldResume && initState?.steps.servicesEnabled;
|
|
1210
1268
|
const skipSetupUpload = nonInteractive || (shouldResume && initState?.steps.setupUploaded);
|
|
1211
1269
|
const skipCodexApply = nonInteractive || (shouldResume && initState?.steps.codexApplied);
|
|
1270
|
+
const skipCodexCliEnsure = skipCodexApply || (shouldResume && initState?.steps.codexCliEnsured);
|
|
1212
1271
|
let approvedPlan = null;
|
|
1213
1272
|
const setupTempDir = await fs.mkdtemp(path.join(os.tmpdir(), "devbox-setup-"));
|
|
1214
1273
|
try {
|
|
@@ -2128,6 +2187,9 @@ export const runInit = async (args) => {
|
|
|
2128
2187
|
if (!parsed.json) {
|
|
2129
2188
|
console.warn("Skipping SSH auth setup. Configure git credentials for this repo manually before pulling or pushing.");
|
|
2130
2189
|
}
|
|
2190
|
+
await updateInitState({
|
|
2191
|
+
steps: { sshAuthConfigured: true },
|
|
2192
|
+
});
|
|
2131
2193
|
activeOrigin = "";
|
|
2132
2194
|
}
|
|
2133
2195
|
else {
|
|
@@ -2347,6 +2409,31 @@ export const runInit = async (args) => {
|
|
|
2347
2409
|
});
|
|
2348
2410
|
await updateInitState({ steps: { setupArtifactsStaged: true } });
|
|
2349
2411
|
}
|
|
2412
|
+
if (!skipCodexCliEnsure) {
|
|
2413
|
+
await runInitStep({
|
|
2414
|
+
enabled: progressEnabled,
|
|
2415
|
+
title: "Ensuring Codex CLI",
|
|
2416
|
+
fn: async ({ status, fail }) => {
|
|
2417
|
+
try {
|
|
2418
|
+
await retryInitStep({
|
|
2419
|
+
status,
|
|
2420
|
+
title: "Ensuring Codex CLI",
|
|
2421
|
+
fn: async () => await ensureRemoteCodexInstalled(client, canonical),
|
|
2422
|
+
});
|
|
2423
|
+
await updateInitState({ steps: { codexCliEnsured: true } });
|
|
2424
|
+
}
|
|
2425
|
+
catch (error) {
|
|
2426
|
+
logger.warn("codex_cli_ensure_failed", {
|
|
2427
|
+
box: canonical,
|
|
2428
|
+
fingerprint,
|
|
2429
|
+
error: error instanceof Error ? error.message : String(error),
|
|
2430
|
+
});
|
|
2431
|
+
fail("Ensuring Codex CLI (failed)");
|
|
2432
|
+
throw error;
|
|
2433
|
+
}
|
|
2434
|
+
},
|
|
2435
|
+
});
|
|
2436
|
+
}
|
|
2350
2437
|
if (!skipCodexApply) {
|
|
2351
2438
|
await runInitStep({
|
|
2352
2439
|
enabled: progressEnabled,
|