@specific.dev/cli 0.1.73 → 0.1.74

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 (68) hide show
  1. package/dist/admin/404/index.html +1 -1
  2. package/dist/admin/404.html +1 -1
  3. package/dist/admin/__next.!KGRlZmF1bHQp.__PAGE__.txt +1 -1
  4. package/dist/admin/__next.!KGRlZmF1bHQp.txt +1 -1
  5. package/dist/admin/__next._full.txt +1 -1
  6. package/dist/admin/__next._head.txt +1 -1
  7. package/dist/admin/__next._index.txt +1 -1
  8. package/dist/admin/__next._tree.txt +1 -1
  9. package/dist/admin/_not-found/__next._full.txt +1 -1
  10. package/dist/admin/_not-found/__next._head.txt +1 -1
  11. package/dist/admin/_not-found/__next._index.txt +1 -1
  12. package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
  13. package/dist/admin/_not-found/__next._not-found.txt +1 -1
  14. package/dist/admin/_not-found/__next._tree.txt +1 -1
  15. package/dist/admin/_not-found/index.html +1 -1
  16. package/dist/admin/_not-found/index.txt +1 -1
  17. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.__PAGE__.txt +1 -1
  18. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.txt +1 -1
  19. package/dist/admin/databases/__next.!KGRlZmF1bHQp.txt +1 -1
  20. package/dist/admin/databases/__next._full.txt +1 -1
  21. package/dist/admin/databases/__next._head.txt +1 -1
  22. package/dist/admin/databases/__next._index.txt +1 -1
  23. package/dist/admin/databases/__next._tree.txt +1 -1
  24. package/dist/admin/databases/index.html +1 -1
  25. package/dist/admin/databases/index.txt +1 -1
  26. package/dist/admin/fullscreen/__next._full.txt +1 -1
  27. package/dist/admin/fullscreen/__next._head.txt +1 -1
  28. package/dist/admin/fullscreen/__next._index.txt +1 -1
  29. package/dist/admin/fullscreen/__next._tree.txt +1 -1
  30. package/dist/admin/fullscreen/__next.fullscreen.__PAGE__.txt +1 -1
  31. package/dist/admin/fullscreen/__next.fullscreen.txt +1 -1
  32. package/dist/admin/fullscreen/databases/__next._full.txt +1 -1
  33. package/dist/admin/fullscreen/databases/__next._head.txt +1 -1
  34. package/dist/admin/fullscreen/databases/__next._index.txt +1 -1
  35. package/dist/admin/fullscreen/databases/__next._tree.txt +1 -1
  36. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.__PAGE__.txt +1 -1
  37. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.txt +1 -1
  38. package/dist/admin/fullscreen/databases/__next.fullscreen.txt +1 -1
  39. package/dist/admin/fullscreen/databases/index.html +1 -1
  40. package/dist/admin/fullscreen/databases/index.txt +1 -1
  41. package/dist/admin/fullscreen/index.html +1 -1
  42. package/dist/admin/fullscreen/index.txt +1 -1
  43. package/dist/admin/index.html +1 -1
  44. package/dist/admin/index.txt +1 -1
  45. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.__PAGE__.txt +1 -1
  46. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.txt +1 -1
  47. package/dist/admin/mail/__next.!KGRlZmF1bHQp.txt +1 -1
  48. package/dist/admin/mail/__next._full.txt +1 -1
  49. package/dist/admin/mail/__next._head.txt +1 -1
  50. package/dist/admin/mail/__next._index.txt +1 -1
  51. package/dist/admin/mail/__next._tree.txt +1 -1
  52. package/dist/admin/mail/index.html +1 -1
  53. package/dist/admin/mail/index.txt +1 -1
  54. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.txt +1 -1
  55. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.__PAGE__.txt +1 -1
  56. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.txt +1 -1
  57. package/dist/admin/workflows/__next._full.txt +1 -1
  58. package/dist/admin/workflows/__next._head.txt +1 -1
  59. package/dist/admin/workflows/__next._index.txt +1 -1
  60. package/dist/admin/workflows/__next._tree.txt +1 -1
  61. package/dist/admin/workflows/index.html +1 -1
  62. package/dist/admin/workflows/index.txt +1 -1
  63. package/dist/cli.js +102 -324
  64. package/dist/postinstall.js +1 -1
  65. package/package.json +1 -1
  66. /package/dist/admin/_next/static/{2GhRJUspcGN_TKmFF6ihm → rlz8iRhM93pN2MuVf1ScD}/_buildManifest.js +0 -0
  67. /package/dist/admin/_next/static/{2GhRJUspcGN_TKmFF6ihm → rlz8iRhM93pN2MuVf1ScD}/_clientMiddlewareManifest.json +0 -0
  68. /package/dist/admin/_next/static/{2GhRJUspcGN_TKmFF6ihm → rlz8iRhM93pN2MuVf1ScD}/_ssgManifest.js +0 -0
package/dist/cli.js CHANGED
@@ -637,19 +637,19 @@ var init_open = __esm({
637
637
  }
638
638
  const subprocess = childProcess3.spawn(command, cliArguments, childProcessOptions);
639
639
  if (options2.wait) {
640
- return new Promise((resolve10, reject) => {
640
+ return new Promise((resolve9, reject) => {
641
641
  subprocess.once("error", reject);
642
642
  subprocess.once("close", (exitCode) => {
643
643
  if (!options2.allowNonzeroExitCode && exitCode !== 0) {
644
644
  reject(new Error(`Exited with code ${exitCode}`));
645
645
  return;
646
646
  }
647
- resolve10(subprocess);
647
+ resolve9(subprocess);
648
648
  });
649
649
  });
650
650
  }
651
651
  if (isFallbackAttempt) {
652
- return new Promise((resolve10, reject) => {
652
+ return new Promise((resolve9, reject) => {
653
653
  subprocess.once("error", reject);
654
654
  subprocess.once("spawn", () => {
655
655
  subprocess.once("close", (exitCode) => {
@@ -659,17 +659,17 @@ var init_open = __esm({
659
659
  return;
660
660
  }
661
661
  subprocess.unref();
662
- resolve10(subprocess);
662
+ resolve9(subprocess);
663
663
  });
664
664
  });
665
665
  });
666
666
  }
667
667
  subprocess.unref();
668
- return new Promise((resolve10, reject) => {
668
+ return new Promise((resolve9, reject) => {
669
669
  subprocess.once("error", reject);
670
670
  subprocess.once("spawn", () => {
671
671
  subprocess.off("error", reject);
672
- resolve10(subprocess);
672
+ resolve9(subprocess);
673
673
  });
674
674
  });
675
675
  };
@@ -184046,7 +184046,7 @@ async function pollUntilToken(deviceAuth, isCancelled) {
184046
184046
  return null;
184047
184047
  }
184048
184048
  function sleep(ms) {
184049
- return new Promise((resolve10) => setTimeout(resolve10, ms));
184049
+ return new Promise((resolve9) => setTimeout(resolve9, ms));
184050
184050
  }
184051
184051
 
184052
184052
  // src/lib/auth/login.tsx
@@ -184063,7 +184063,7 @@ function LoginUI({
184063
184063
  return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", gap: 1 }, isReauthentication && /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "Session expired. Please log in again."), /* @__PURE__ */ React.createElement(Text, { bold: true }, "Log in to Specific"), state.phase === "waiting-for-browser" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, "Your authentication code:", " ", /* @__PURE__ */ React.createElement(Text, { color: "cyan", bold: true }, state.userCode))), /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: "blue" }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React.createElement(Text, null, " Waiting for authentication in browser...")), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "If the browser didn't open, visit: ", state.verificationUri)) : /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: "blue" }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React.createElement(Text, null, " Initiating login...")));
184064
184064
  }
184065
184065
  function performLogin(options2 = {}) {
184066
- return new Promise((resolve10) => {
184066
+ return new Promise((resolve9) => {
184067
184067
  let currentState = { phase: "initiating" };
184068
184068
  let flowHandle;
184069
184069
  const instance = render(
@@ -184103,14 +184103,14 @@ function performLogin(options2 = {}) {
184103
184103
  process.off("SIGINT", handleExit);
184104
184104
  process.off("SIGTERM", handleExit);
184105
184105
  instance.unmount();
184106
- resolve10({ success: true, userEmail: newState.email });
184106
+ resolve9({ success: true, userEmail: newState.email });
184107
184107
  }, 100);
184108
184108
  } else if (newState.phase === "error") {
184109
184109
  setTimeout(() => {
184110
184110
  process.off("SIGINT", handleExit);
184111
184111
  process.off("SIGTERM", handleExit);
184112
184112
  instance.unmount();
184113
- resolve10({ success: false, error: new Error(newState.message) });
184113
+ resolve9({ success: false, error: new Error(newState.message) });
184114
184114
  }, 100);
184115
184115
  }
184116
184116
  }
@@ -184587,7 +184587,7 @@ function trackEvent(event, properties) {
184587
184587
  event,
184588
184588
  properties: {
184589
184589
  ...properties,
184590
- cli_version: "0.1.73",
184590
+ cli_version: "0.1.74",
184591
184591
  platform: process.platform,
184592
184592
  node_version: process.version,
184593
184593
  project_id: getProjectId()
@@ -186048,10 +186048,10 @@ async function downloadFile(url, destPath, onProgress) {
186048
186048
  });
186049
186049
  }
186050
186050
  }
186051
- await new Promise((resolve10, reject) => {
186051
+ await new Promise((resolve9, reject) => {
186052
186052
  fileStream.end((err) => {
186053
186053
  if (err) reject(err);
186054
- else resolve10();
186054
+ else resolve9();
186055
186055
  });
186056
186056
  });
186057
186057
  fs13.renameSync(partPath, destPath);
@@ -186277,13 +186277,13 @@ async function runReshapeCheck(migrationsDir) {
186277
186277
  try {
186278
186278
  const binary = await ensureBinary(reshapeBinary);
186279
186279
  const reshapePath = binary.executables["reshape"];
186280
- return new Promise((resolve10) => {
186280
+ return new Promise((resolve9) => {
186281
186281
  execFile7(reshapePath, ["check", "--dirs", migrationsDir], (err, _stdout, stderr) => {
186282
186282
  if (err) {
186283
186283
  const errorMsg = stderr.trim() || err.message;
186284
- resolve10({ success: false, error: errorMsg });
186284
+ resolve9({ success: false, error: errorMsg });
186285
186285
  } else {
186286
- resolve10({ success: true });
186286
+ resolve9({ success: true });
186287
186287
  }
186288
186288
  });
186289
186289
  });
@@ -187252,7 +187252,7 @@ var NodeFsHandler = class {
187252
187252
  this._addToNodeFs(path30, initialAdd, wh, depth + 1);
187253
187253
  }
187254
187254
  }).on(EV.ERROR, this._boundHandleError);
187255
- return new Promise((resolve10, reject) => {
187255
+ return new Promise((resolve9, reject) => {
187256
187256
  if (!stream)
187257
187257
  return reject();
187258
187258
  stream.once(STR_END, () => {
@@ -187261,7 +187261,7 @@ var NodeFsHandler = class {
187261
187261
  return;
187262
187262
  }
187263
187263
  const wasThrottled = throttler ? throttler.clear() : false;
187264
- resolve10(void 0);
187264
+ resolve9(void 0);
187265
187265
  previous.getChildren().filter((item) => {
187266
187266
  return item !== directory && !current.has(item);
187267
187267
  }).forEach((item) => {
@@ -188325,7 +188325,7 @@ async function startStorage(storage, port, dataDir) {
188325
188325
  };
188326
188326
  }
188327
188327
  async function runCommand(command, args, env2) {
188328
- return new Promise((resolve10, reject) => {
188328
+ return new Promise((resolve9, reject) => {
188329
188329
  const proc = spawn(command, args, {
188330
188330
  stdio: ["ignore", "pipe", "pipe"],
188331
188331
  env: env2
@@ -188336,7 +188336,7 @@ async function runCommand(command, args, env2) {
188336
188336
  });
188337
188337
  proc.on("close", (code) => {
188338
188338
  if (code === 0) {
188339
- resolve10();
188339
+ resolve9();
188340
188340
  } else {
188341
188341
  reject(new Error(`Command failed with code ${code}: ${stderr}`));
188342
188342
  }
@@ -188345,7 +188345,7 @@ async function runCommand(command, args, env2) {
188345
188345
  });
188346
188346
  }
188347
188347
  async function createPostgresDatabase(postgresPath, dataDir, dbName, env2) {
188348
- return new Promise((resolve10, reject) => {
188348
+ return new Promise((resolve9, reject) => {
188349
188349
  const proc = spawn(
188350
188350
  postgresPath,
188351
188351
  ["--single", "-D", dataDir, "postgres"],
@@ -188359,7 +188359,7 @@ async function createPostgresDatabase(postgresPath, dataDir, dbName, env2) {
188359
188359
  stderr += data.toString();
188360
188360
  });
188361
188361
  proc.on("close", (code) => {
188362
- resolve10();
188362
+ resolve9();
188363
188363
  });
188364
188364
  proc.on("error", reject);
188365
188365
  proc.stdin?.write(`CREATE DATABASE "${dbName}";
@@ -188379,33 +188379,33 @@ async function waitForTcpPort(host, port, timeoutMs = 3e4) {
188379
188379
  throw new Error(`Port ${port} did not become available within timeout`);
188380
188380
  }
188381
188381
  function checkTcpPort(host, port) {
188382
- return new Promise((resolve10) => {
188382
+ return new Promise((resolve9) => {
188383
188383
  const socket = new net.Socket();
188384
188384
  socket.setTimeout(1e3);
188385
188385
  socket.on("connect", () => {
188386
188386
  socket.destroy();
188387
- resolve10(true);
188387
+ resolve9(true);
188388
188388
  });
188389
188389
  socket.on("timeout", () => {
188390
188390
  socket.destroy();
188391
- resolve10(false);
188391
+ resolve9(false);
188392
188392
  });
188393
188393
  socket.on("error", () => {
188394
188394
  socket.destroy();
188395
- resolve10(false);
188395
+ resolve9(false);
188396
188396
  });
188397
188397
  socket.connect(port, host);
188398
188398
  });
188399
188399
  }
188400
188400
  async function stopProcess(proc) {
188401
- return new Promise((resolve10) => {
188401
+ return new Promise((resolve9) => {
188402
188402
  if (proc.killed || proc.exitCode !== null) {
188403
- resolve10();
188403
+ resolve9();
188404
188404
  return;
188405
188405
  }
188406
188406
  proc.once("exit", () => {
188407
188407
  clearTimeout(forceKillTimeout);
188408
- resolve10();
188408
+ resolve9();
188409
188409
  });
188410
188410
  proc.kill("SIGTERM");
188411
188411
  const forceKillTimeout = setTimeout(() => {
@@ -188416,7 +188416,7 @@ async function stopProcess(proc) {
188416
188416
  });
188417
188417
  }
188418
188418
  function sleep2(ms) {
188419
- return new Promise((resolve10) => setTimeout(resolve10, ms));
188419
+ return new Promise((resolve9) => setTimeout(resolve9, ms));
188420
188420
  }
188421
188421
 
188422
188422
  // src/lib/dev/service-runner.ts
@@ -188900,14 +188900,14 @@ function startService(service, resources, secrets, configs, endpointPorts, servi
188900
188900
  ports: endpointPorts,
188901
188901
  process: child,
188902
188902
  async stop() {
188903
- return new Promise((resolve10) => {
188903
+ return new Promise((resolve9) => {
188904
188904
  if (child.killed || child.exitCode !== null) {
188905
- resolve10();
188905
+ resolve9();
188906
188906
  return;
188907
188907
  }
188908
188908
  child.once("exit", () => {
188909
188909
  clearTimeout(forceKillTimeout);
188910
- resolve10();
188910
+ resolve9();
188911
188911
  });
188912
188912
  const pid = child.pid;
188913
188913
  if (pid) {
@@ -189001,7 +189001,7 @@ var InstanceStateManager = class {
189001
189001
  }
189002
189002
  continue;
189003
189003
  }
189004
- await new Promise((resolve10) => setTimeout(resolve10, 100));
189004
+ await new Promise((resolve9) => setTimeout(resolve9, 100));
189005
189005
  } else {
189006
189006
  throw e;
189007
189007
  }
@@ -189334,7 +189334,7 @@ async function startHttpProxy(services, certificate, getState, instanceKey = "de
189334
189334
  handleRequest
189335
189335
  );
189336
189336
  httpsServer.on("upgrade", handleUpgrade);
189337
- return new Promise((resolve10, reject) => {
189337
+ return new Promise((resolve9, reject) => {
189338
189338
  let httpStarted = false;
189339
189339
  let httpsStarted = false;
189340
189340
  let failed = false;
@@ -189345,7 +189345,7 @@ async function startHttpProxy(services, certificate, getState, instanceKey = "de
189345
189345
  "proxy",
189346
189346
  `HTTP/HTTPS proxy started on ports ${HTTP_PORT}/${HTTPS_PORT}`
189347
189347
  );
189348
- resolve10({
189348
+ resolve9({
189349
189349
  httpPort: HTTP_PORT,
189350
189350
  httpsPort: HTTPS_PORT,
189351
189351
  updateServices,
@@ -189357,13 +189357,13 @@ async function startHttpProxy(services, certificate, getState, instanceKey = "de
189357
189357
  writeLog("proxy", "Certificate updated");
189358
189358
  },
189359
189359
  async stop() {
189360
- return new Promise((resolve11) => {
189360
+ return new Promise((resolve10) => {
189361
189361
  let closed = 0;
189362
189362
  const onClose = () => {
189363
189363
  closed++;
189364
189364
  if (closed === 2) {
189365
189365
  clearTimeout(forceCloseTimeout);
189366
- resolve11();
189366
+ resolve10();
189367
189367
  }
189368
189368
  };
189369
189369
  httpServer.close(onClose);
@@ -189371,7 +189371,7 @@ async function startHttpProxy(services, certificate, getState, instanceKey = "de
189371
189371
  const forceCloseTimeout = setTimeout(() => {
189372
189372
  httpServer.closeAllConnections?.();
189373
189373
  httpsServer.closeAllConnections?.();
189374
- resolve11();
189374
+ resolve10();
189375
189375
  }, 2e3);
189376
189376
  });
189377
189377
  }
@@ -189599,7 +189599,7 @@ function serveFileContent(res, filePath, contentType, statusCode = 200) {
189599
189599
  }
189600
189600
  }
189601
189601
  async function startAdminServer(getState) {
189602
- return new Promise((resolve10, reject) => {
189602
+ return new Promise((resolve9, reject) => {
189603
189603
  const server = http.createServer((req, res) => {
189604
189604
  const url = new URL(req.url || "/", "http://localhost");
189605
189605
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -189631,7 +189631,7 @@ async function startAdminServer(getState) {
189631
189631
  }
189632
189632
  const port = addr.port;
189633
189633
  writeLog("admin", `Admin API server started on port ${port}`);
189634
- resolve10({
189634
+ resolve9({
189635
189635
  port,
189636
189636
  stop: () => new Promise((res, rej) => {
189637
189637
  server.close((err) => err ? rej(err) : res());
@@ -189792,33 +189792,33 @@ async function waitForTcpPort2(host, port, timeoutMs = 3e4) {
189792
189792
  throw new Error(`Electric port ${port} did not become available within timeout`);
189793
189793
  }
189794
189794
  function checkTcpPort2(host, port) {
189795
- return new Promise((resolve10) => {
189795
+ return new Promise((resolve9) => {
189796
189796
  const socket = new net2.Socket();
189797
189797
  socket.setTimeout(1e3);
189798
189798
  socket.on("connect", () => {
189799
189799
  socket.destroy();
189800
- resolve10(true);
189800
+ resolve9(true);
189801
189801
  });
189802
189802
  socket.on("timeout", () => {
189803
189803
  socket.destroy();
189804
- resolve10(false);
189804
+ resolve9(false);
189805
189805
  });
189806
189806
  socket.on("error", () => {
189807
189807
  socket.destroy();
189808
- resolve10(false);
189808
+ resolve9(false);
189809
189809
  });
189810
189810
  socket.connect(port, host);
189811
189811
  });
189812
189812
  }
189813
189813
  async function stopProcess2(proc) {
189814
- return new Promise((resolve10) => {
189814
+ return new Promise((resolve9) => {
189815
189815
  if (proc.killed || proc.exitCode !== null) {
189816
- resolve10();
189816
+ resolve9();
189817
189817
  return;
189818
189818
  }
189819
189819
  proc.once("exit", () => {
189820
189820
  clearTimeout(forceKillTimeout);
189821
- resolve10();
189821
+ resolve9();
189822
189822
  });
189823
189823
  proc.kill("SIGTERM");
189824
189824
  const forceKillTimeout = setTimeout(() => {
@@ -189829,7 +189829,7 @@ async function stopProcess2(proc) {
189829
189829
  });
189830
189830
  }
189831
189831
  function sleep3(ms) {
189832
- return new Promise((resolve10) => setTimeout(resolve10, ms));
189832
+ return new Promise((resolve9) => setTimeout(resolve9, ms));
189833
189833
  }
189834
189834
 
189835
189835
  // src/lib/dev/mail-manager.ts
@@ -189924,20 +189924,20 @@ async function startMailServer(mail, smtpPort, apiPort) {
189924
189924
  res.writeHead(404);
189925
189925
  res.end();
189926
189926
  });
189927
- await new Promise((resolve10, reject) => {
189928
- smtpServer.listen(smtpPort, "127.0.0.1", () => resolve10());
189927
+ await new Promise((resolve9, reject) => {
189928
+ smtpServer.listen(smtpPort, "127.0.0.1", () => resolve9());
189929
189929
  smtpServer.on("error", reject);
189930
189930
  });
189931
- await new Promise((resolve10, reject) => {
189932
- httpServer.listen(apiPort, "127.0.0.1", () => resolve10());
189931
+ await new Promise((resolve9, reject) => {
189932
+ httpServer.listen(apiPort, "127.0.0.1", () => resolve9());
189933
189933
  httpServer.on("error", reject);
189934
189934
  });
189935
189935
  const stop = async () => {
189936
- await new Promise((resolve10) => {
189937
- smtpServer.close(() => resolve10());
189936
+ await new Promise((resolve9) => {
189937
+ smtpServer.close(() => resolve9());
189938
189938
  });
189939
- await new Promise((resolve10) => {
189940
- httpServer.close(() => resolve10());
189939
+ await new Promise((resolve9) => {
189940
+ httpServer.close(() => resolve9());
189941
189941
  });
189942
189942
  };
189943
189943
  const resource = {
@@ -190041,33 +190041,33 @@ async function waitForTcpPort3(host, port, timeoutMs = 3e4) {
190041
190041
  );
190042
190042
  }
190043
190043
  function checkTcpPort3(host, port) {
190044
- return new Promise((resolve10) => {
190044
+ return new Promise((resolve9) => {
190045
190045
  const socket = new net3.Socket();
190046
190046
  socket.setTimeout(1e3);
190047
190047
  socket.on("connect", () => {
190048
190048
  socket.destroy();
190049
- resolve10(true);
190049
+ resolve9(true);
190050
190050
  });
190051
190051
  socket.on("timeout", () => {
190052
190052
  socket.destroy();
190053
- resolve10(false);
190053
+ resolve9(false);
190054
190054
  });
190055
190055
  socket.on("error", () => {
190056
190056
  socket.destroy();
190057
- resolve10(false);
190057
+ resolve9(false);
190058
190058
  });
190059
190059
  socket.connect(port, host);
190060
190060
  });
190061
190061
  }
190062
190062
  async function stopProcess3(proc) {
190063
- return new Promise((resolve10) => {
190063
+ return new Promise((resolve9) => {
190064
190064
  if (proc.killed || proc.exitCode !== null) {
190065
- resolve10();
190065
+ resolve9();
190066
190066
  return;
190067
190067
  }
190068
190068
  proc.once("exit", () => {
190069
190069
  clearTimeout(forceKillTimeout);
190070
- resolve10();
190070
+ resolve9();
190071
190071
  });
190072
190072
  proc.kill("SIGTERM");
190073
190073
  const forceKillTimeout = setTimeout(() => {
@@ -190078,7 +190078,7 @@ async function stopProcess3(proc) {
190078
190078
  });
190079
190079
  }
190080
190080
  function sleep4(ms) {
190081
- return new Promise((resolve10) => setTimeout(resolve10, ms));
190081
+ return new Promise((resolve9) => setTimeout(resolve9, ms));
190082
190082
  }
190083
190083
 
190084
190084
  // src/lib/dev/sync-detector.ts
@@ -190443,38 +190443,38 @@ async function waitForTcpPort4(host, port, timeoutMs = 3e4) {
190443
190443
  if (isOpen) {
190444
190444
  return;
190445
190445
  }
190446
- await new Promise((resolve10) => setTimeout(resolve10, 100));
190446
+ await new Promise((resolve9) => setTimeout(resolve9, 100));
190447
190447
  }
190448
190448
  throw new Error(`Temporal port ${port} did not become available within timeout`);
190449
190449
  }
190450
190450
  function checkTcpPort4(host, port) {
190451
- return new Promise((resolve10) => {
190451
+ return new Promise((resolve9) => {
190452
190452
  const socket = new net4.Socket();
190453
190453
  socket.setTimeout(1e3);
190454
190454
  socket.on("connect", () => {
190455
190455
  socket.destroy();
190456
- resolve10(true);
190456
+ resolve9(true);
190457
190457
  });
190458
190458
  socket.on("timeout", () => {
190459
190459
  socket.destroy();
190460
- resolve10(false);
190460
+ resolve9(false);
190461
190461
  });
190462
190462
  socket.on("error", () => {
190463
190463
  socket.destroy();
190464
- resolve10(false);
190464
+ resolve9(false);
190465
190465
  });
190466
190466
  socket.connect(port, host);
190467
190467
  });
190468
190468
  }
190469
190469
  async function stopProcess4(proc) {
190470
- return new Promise((resolve10) => {
190470
+ return new Promise((resolve9) => {
190471
190471
  if (proc.killed || proc.exitCode !== null) {
190472
- resolve10();
190472
+ resolve9();
190473
190473
  return;
190474
190474
  }
190475
190475
  proc.once("exit", () => {
190476
190476
  clearTimeout(forceKillTimeout);
190477
- resolve10();
190477
+ resolve9();
190478
190478
  });
190479
190479
  proc.kill("SIGTERM");
190480
190480
  const forceKillTimeout = setTimeout(() => {
@@ -190949,7 +190949,7 @@ var ProxyRegistryManager = class {
190949
190949
  * This catches cases where the owner process is alive but the proxy has crashed.
190950
190950
  */
190951
190951
  isProxyListening(port, timeoutMs = 1e3) {
190952
- return new Promise((resolve10) => {
190952
+ return new Promise((resolve9) => {
190953
190953
  const socket = new net6.Socket();
190954
190954
  let resolved = false;
190955
190955
  const cleanup = () => {
@@ -190961,15 +190961,15 @@ var ProxyRegistryManager = class {
190961
190961
  socket.setTimeout(timeoutMs);
190962
190962
  socket.on("connect", () => {
190963
190963
  cleanup();
190964
- resolve10(true);
190964
+ resolve9(true);
190965
190965
  });
190966
190966
  socket.on("timeout", () => {
190967
190967
  cleanup();
190968
- resolve10(false);
190968
+ resolve9(false);
190969
190969
  });
190970
190970
  socket.on("error", () => {
190971
190971
  cleanup();
190972
- resolve10(false);
190972
+ resolve9(false);
190973
190973
  });
190974
190974
  socket.connect(port, "127.0.0.1");
190975
190975
  });
@@ -191020,7 +191020,7 @@ var ProxyRegistryManager = class {
191020
191020
  }
191021
191021
  continue;
191022
191022
  }
191023
- await new Promise((resolve10) => setTimeout(resolve10, 100));
191023
+ await new Promise((resolve9) => setTimeout(resolve9, 100));
191024
191024
  } else {
191025
191025
  throw e;
191026
191026
  }
@@ -192697,186 +192697,6 @@ import Spinner5 from "ink-spinner";
192697
192697
  import * as fs26 from "fs";
192698
192698
  import * as path23 from "path";
192699
192699
 
192700
- // src/lib/deploy/build-tester.ts
192701
- import { spawn as spawn6 } from "child_process";
192702
- import { existsSync as existsSync22 } from "fs";
192703
- import { join as join23, resolve as resolve7 } from "path";
192704
- function getDependencyInstallCommand(build, projectDir) {
192705
- if (!build.base) return null;
192706
- switch (build.base) {
192707
- case "node":
192708
- if (existsSync22(join23(projectDir, "pnpm-lock.yaml"))) {
192709
- return "pnpm install --frozen-lockfile";
192710
- } else if (existsSync22(join23(projectDir, "yarn.lock"))) {
192711
- return "yarn install --frozen-lockfile";
192712
- } else if (existsSync22(join23(projectDir, "package-lock.json"))) {
192713
- return "npm ci";
192714
- } else if (existsSync22(join23(projectDir, "package.json"))) {
192715
- return "npm install";
192716
- }
192717
- return null;
192718
- case "python":
192719
- if (existsSync22(join23(projectDir, "poetry.lock"))) {
192720
- return "poetry install --no-interaction";
192721
- } else if (existsSync22(join23(projectDir, "Pipfile.lock"))) {
192722
- return "pipenv install --deploy";
192723
- } else if (existsSync22(join23(projectDir, "Pipfile"))) {
192724
- return "pipenv install";
192725
- } else if (existsSync22(join23(projectDir, "pyproject.toml"))) {
192726
- return "pip install .";
192727
- } else if (existsSync22(join23(projectDir, "requirements.txt"))) {
192728
- return "pip install -r requirements.txt";
192729
- }
192730
- return null;
192731
- case "go":
192732
- return "go mod download";
192733
- case "rust":
192734
- case "java":
192735
- return null;
192736
- default:
192737
- return null;
192738
- }
192739
- }
192740
- function runCommand2(command, projectDir, buildName) {
192741
- return new Promise((resolve10) => {
192742
- const stdout = [];
192743
- const stderr = [];
192744
- writeLog("build-test", `[${buildName}] Running: ${command}`);
192745
- const child = spawn6(command, {
192746
- shell: true,
192747
- cwd: projectDir,
192748
- env: { ...process.env },
192749
- stdio: ["ignore", "pipe", "pipe"]
192750
- });
192751
- child.stdout?.on("data", (data) => {
192752
- const text = data.toString();
192753
- stdout.push(text);
192754
- for (const line of text.split("\n")) {
192755
- if (line.trim()) {
192756
- writeLog(`build-test:${buildName}`, line);
192757
- }
192758
- }
192759
- });
192760
- child.stderr?.on("data", (data) => {
192761
- const text = data.toString();
192762
- stderr.push(text);
192763
- for (const line of text.split("\n")) {
192764
- if (line.trim()) {
192765
- writeLog(`build-test:${buildName}`, line);
192766
- }
192767
- }
192768
- });
192769
- child.on("error", (err) => {
192770
- writeLog("build-test:error", `[${buildName}] Failed to start: ${err.message}`);
192771
- resolve10({
192772
- success: false,
192773
- output: `Failed to start command: ${err.message}`
192774
- });
192775
- });
192776
- child.on("exit", (code) => {
192777
- const output = [...stdout, ...stderr].join("");
192778
- if (code === 0) {
192779
- writeLog("build-test", `[${buildName}] Command succeeded (exit code 0)`);
192780
- resolve10({ success: true, output });
192781
- } else {
192782
- writeLog("build-test:error", `[${buildName}] Command failed with exit code ${code}`);
192783
- resolve10({
192784
- success: false,
192785
- output: output || `Exit code: ${code}`
192786
- });
192787
- }
192788
- });
192789
- });
192790
- }
192791
- async function testBuild(build, projectDir) {
192792
- const startTime = Date.now();
192793
- if (build.dockerfile) {
192794
- writeLog("build-test", `Skipping test for build "${build.name}" (custom Dockerfile)`);
192795
- return {
192796
- buildName: build.name,
192797
- success: true,
192798
- output: "Skipped: custom Dockerfile build",
192799
- durationMs: Date.now() - startTime
192800
- };
192801
- }
192802
- const outputs = [];
192803
- const workDir = build.root ? resolve7(projectDir, build.root) : projectDir;
192804
- writeLog("build-test", `Starting test for build "${build.name}" (base: ${build.base}, workDir: ${workDir})`);
192805
- const depsCommand = getDependencyInstallCommand(build, workDir);
192806
- if (depsCommand) {
192807
- writeLog("build-test", `[${build.name}] Installing dependencies...`);
192808
- const depsResult = await runCommand2(depsCommand, workDir, build.name);
192809
- outputs.push(`[${depsCommand}]
192810
- ${depsResult.output}`);
192811
- if (!depsResult.success) {
192812
- const duration2 = Date.now() - startTime;
192813
- writeLog("build-test:error", `[${build.name}] Dependency installation failed after ${duration2}ms`);
192814
- return {
192815
- buildName: build.name,
192816
- success: false,
192817
- output: outputs.join("\n\n"),
192818
- durationMs: duration2
192819
- };
192820
- }
192821
- writeLog("build-test", `[${build.name}] Dependencies installed successfully`);
192822
- } else {
192823
- writeLog("build-test", `[${build.name}] No dependency installation needed for base "${build.base}"`);
192824
- }
192825
- if (build.command) {
192826
- writeLog("build-test", `[${build.name}] Running build command...`);
192827
- const buildResult = await runCommand2(build.command, workDir, build.name);
192828
- outputs.push(`[${build.command}]
192829
- ${buildResult.output}`);
192830
- if (!buildResult.success) {
192831
- const duration2 = Date.now() - startTime;
192832
- writeLog("build-test:error", `[${build.name}] Build command failed after ${duration2}ms`);
192833
- return {
192834
- buildName: build.name,
192835
- success: false,
192836
- output: outputs.join("\n\n"),
192837
- durationMs: duration2
192838
- };
192839
- }
192840
- writeLog("build-test", `[${build.name}] Build command completed successfully`);
192841
- } else {
192842
- writeLog("build-test", `[${build.name}] No build command defined, skipping`);
192843
- }
192844
- const duration = Date.now() - startTime;
192845
- writeLog("build-test", `[${build.name}] Build test passed in ${duration}ms`);
192846
- return {
192847
- buildName: build.name,
192848
- success: true,
192849
- output: outputs.join("\n\n"),
192850
- durationMs: duration
192851
- };
192852
- }
192853
- async function testAllBuilds(builds, projectDir) {
192854
- if (builds.length === 0) {
192855
- writeLog("build-test", "No builds to test");
192856
- return { results: [], allPassed: true };
192857
- }
192858
- writeLog("build-test", `Testing ${builds.length} build(s) in parallel: ${builds.map((b) => b.name).join(", ")}`);
192859
- writeLog("build-test", `Project directory: ${projectDir}`);
192860
- const results = await Promise.all(
192861
- builds.map((build) => testBuild(build, projectDir))
192862
- );
192863
- const passed = results.filter((r) => r.success).length;
192864
- const failed = results.filter((r) => !r.success).length;
192865
- const totalDuration = results.reduce((sum, r) => sum + r.durationMs, 0);
192866
- if (failed > 0) {
192867
- writeLog("build-test:error", `Build tests completed: ${passed} passed, ${failed} failed`);
192868
- for (const result of results.filter((r) => !r.success)) {
192869
- writeLog("build-test:error", `Failed build: ${result.buildName}`);
192870
- }
192871
- } else {
192872
- writeLog("build-test", `All ${passed} build(s) passed (total: ${totalDuration}ms)`);
192873
- }
192874
- return {
192875
- results,
192876
- allPassed: results.every((r) => r.success)
192877
- };
192878
- }
192879
-
192880
192700
  // src/lib/tarball/create.ts
192881
192701
  import { execSync as execSync4 } from "child_process";
192882
192702
  import * as fs25 from "fs";
@@ -193017,7 +192837,6 @@ function PhaseIndicator({
193017
192837
  showSpinner = true
193018
192838
  }) {
193019
192839
  const phases = [
193020
- "testing-builds",
193021
192840
  "creating-tarball",
193022
192841
  "creating-deployment",
193023
192842
  "uploading",
@@ -193129,7 +192948,7 @@ function formatErrorCode(code) {
193129
192948
  function StructuredError({ error }) {
193130
192949
  return /* @__PURE__ */ React7.createElement(Box7, { flexDirection: "column" }, /* @__PURE__ */ React7.createElement(Text7, { color: "red", bold: true }, formatErrorCode(error.code), ": ", error.message), error.resource && /* @__PURE__ */ React7.createElement(Text7, { dimColor: true }, "Resource: ", error.resource), error.output && /* @__PURE__ */ React7.createElement(Box7, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React7.createElement(Text7, { bold: true }, "Output:"), /* @__PURE__ */ React7.createElement(Text7, null, error.output)));
193131
192950
  }
193132
- function DeployUI({ environment, config, skipBuildTest }) {
192951
+ function DeployUI({ environment, config }) {
193133
192952
  const { exit } = useApp3();
193134
192953
  const [state, setState] = useState6({ phase: "checking-auth" });
193135
192954
  const clientRef = React7.useRef(null);
@@ -193140,7 +192959,7 @@ function DeployUI({ environment, config, skipBuildTest }) {
193140
192959
  const projectId = readProjectId(projectDir);
193141
192960
  if (isLoggedIn()) {
193142
192961
  setState({
193143
- phase: "testing-builds",
192962
+ phase: "creating-tarball",
193144
192963
  projectId
193145
192964
  });
193146
192965
  } else {
@@ -193197,7 +193016,7 @@ function DeployUI({ environment, config, skipBuildTest }) {
193197
193016
  const successResponse = response;
193198
193017
  await saveCredentialsFromToken(successResponse);
193199
193018
  setState(
193200
- (s) => s.projectId ? { phase: "testing-builds", projectId: s.projectId } : { phase: "loading-projects" }
193019
+ (s) => s.projectId ? { phase: "creating-tarball", projectId: s.projectId } : { phase: "loading-projects" }
193201
193020
  );
193202
193021
  }
193203
193022
  };
@@ -193248,7 +193067,7 @@ function DeployUI({ environment, config, skipBuildTest }) {
193248
193067
  } else {
193249
193068
  writeProjectId(project.id);
193250
193069
  setState({
193251
- phase: "testing-builds",
193070
+ phase: "creating-tarball",
193252
193071
  projectId: project.id
193253
193072
  });
193254
193073
  }
@@ -193271,7 +193090,7 @@ function DeployUI({ environment, config, skipBuildTest }) {
193271
193090
  if (cancelled) return;
193272
193091
  writeProjectId(project.id);
193273
193092
  setState({
193274
- phase: "testing-builds",
193093
+ phase: "creating-tarball",
193275
193094
  projectId: project.id
193276
193095
  });
193277
193096
  } catch (err) {
@@ -193432,43 +193251,11 @@ function DeployUI({ environment, config, skipBuildTest }) {
193432
193251
  })();
193433
193252
  }, [state]);
193434
193253
  useEffect4(() => {
193435
- if (state.phase !== "testing-builds" || !state.projectId) return;
193254
+ if (state.phase !== "creating-tarball" || !state.projectId) return;
193436
193255
  let cancelled = false;
193437
- async function runBuildTestsAndDeploy() {
193256
+ async function runDeploy() {
193438
193257
  const projectDir = process.cwd();
193439
193258
  const builds = config.builds || [];
193440
- if (!skipBuildTest && builds.length > 0) {
193441
- writeLog("deploy", `Testing ${builds.length} build(s) locally`);
193442
- try {
193443
- const results = await testAllBuilds(builds, projectDir);
193444
- if (cancelled) return;
193445
- if (!results.allPassed) {
193446
- const failures = results.results.filter((r) => !r.success);
193447
- const errorMsg = failures.map((f) => `Build "${f.buildName}" failed:
193448
- ${f.output}`).join("\n\n");
193449
- writeLog("deploy:error", errorMsg);
193450
- setState({
193451
- phase: "error",
193452
- error: `Build test failed:
193453
- ${errorMsg}`
193454
- });
193455
- return;
193456
- }
193457
- writeLog("deploy", "All builds passed local testing");
193458
- } catch (err) {
193459
- if (cancelled) return;
193460
- const errorMsg = `Build test failed: ${err instanceof Error ? err.message : String(err)}`;
193461
- writeLog("deploy:error", errorMsg);
193462
- setState({
193463
- phase: "error",
193464
- error: errorMsg
193465
- });
193466
- return;
193467
- }
193468
- } else {
193469
- writeLog("deploy", skipBuildTest ? "Skipping build tests (--skip-build-test)" : "No builds to test");
193470
- }
193471
- setState((s) => ({ ...s, phase: "creating-tarball" }));
193472
193259
  writeLog("deploy", `Starting deployment to "${environment}"`);
193473
193260
  writeLog("deploy", `Project directory: ${projectDir}`);
193474
193261
  const client2 = new ApiClient();
@@ -193534,11 +193321,11 @@ ${errorMsg}`
193534
193321
  writeLog("deploy", "Deployment in pending state, waiting for builds to complete");
193535
193322
  setState((s) => ({ ...s, phase: "pending", deployment: deployment2 }));
193536
193323
  }
193537
- runBuildTestsAndDeploy();
193324
+ runDeploy();
193538
193325
  return () => {
193539
193326
  cancelled = true;
193540
193327
  };
193541
- }, [state.projectId, environment, config.builds, skipBuildTest]);
193328
+ }, [state.projectId, environment, config.builds]);
193542
193329
  useEffect4(() => {
193543
193330
  if (state.phase !== "pending" || !state.deployment) return;
193544
193331
  let pollInterval;
@@ -193732,7 +193519,7 @@ ${errorMsg}`
193732
193519
  };
193733
193520
  }, [state.phase, state.deployment?.id]);
193734
193521
  useEffect4(() => {
193735
- if (state.phase === "testing-builds") {
193522
+ if (state.phase === "creating-tarball") {
193736
193523
  trackEvent("deploy_started", { environment });
193737
193524
  }
193738
193525
  }, [state.phase, environment]);
@@ -193827,13 +193614,6 @@ ${errorMsg}`
193827
193614
  return "Preparing";
193828
193615
  };
193829
193616
  return /* @__PURE__ */ React7.createElement(Box7, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { bold: true, color: "cyan" }, "Deploying to ", environment), deployment && /* @__PURE__ */ React7.createElement(Text7, { dimColor: true }, " (", deployment.id, ")")), /* @__PURE__ */ React7.createElement(Box7, { flexDirection: "column" }, /* @__PURE__ */ React7.createElement(
193830
- PhaseIndicator,
193831
- {
193832
- phase: "testing-builds",
193833
- currentPhase: displayPhase,
193834
- label: "Testing builds locally"
193835
- }
193836
- ), /* @__PURE__ */ React7.createElement(
193837
193617
  PhaseIndicator,
193838
193618
  {
193839
193619
  phase: "creating-tarball",
@@ -193887,7 +193667,7 @@ ${errorMsg}`
193887
193667
  }
193888
193668
  ), phase === "error" && /* @__PURE__ */ React7.createElement(Box7, { marginTop: 1, flexDirection: "column" }, deployment?.error ? /* @__PURE__ */ React7.createElement(StructuredError, { error: deployment.error }) : /* @__PURE__ */ React7.createElement(Text7, { color: "red", bold: true }, error), buildOutput && /* @__PURE__ */ React7.createElement(Box7, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React7.createElement(Text7, { bold: true }, "Build output:"), /* @__PURE__ */ React7.createElement(Text7, null, buildOutput))), phase === "success" && /* @__PURE__ */ React7.createElement(Box7, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React7.createElement(Text7, { color: "green" }, "Deployment successful!"), deployment?.publicUrls && Object.keys(deployment.publicUrls).length > 0 && /* @__PURE__ */ React7.createElement(Box7, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React7.createElement(Text7, { bold: true }, "Public URLs:"), Object.entries(deployment.publicUrls).map(([name, url]) => /* @__PURE__ */ React7.createElement(Text7, { key: name }, " ", name, ": ", /* @__PURE__ */ React7.createElement(Text7, { color: "cyan" }, url))))));
193889
193669
  }
193890
- async function deployCommand(environment, options2) {
193670
+ async function deployCommand(environment) {
193891
193671
  const configPath = path23.join(process.cwd(), "specific.hcl");
193892
193672
  if (!fs26.existsSync(configPath)) {
193893
193673
  console.error("Error: No specific.hcl found in current directory");
@@ -193902,21 +193682,19 @@ async function deployCommand(environment, options2) {
193902
193682
  process.exit(1);
193903
193683
  }
193904
193684
  const env2 = environment || "prod";
193905
- const skipBuildTest = options2?.skipBuildTest ?? false;
193906
193685
  render5(
193907
193686
  /* @__PURE__ */ React7.createElement(
193908
193687
  DeployUI,
193909
193688
  {
193910
193689
  environment: env2,
193911
- config,
193912
- skipBuildTest
193690
+ config
193913
193691
  }
193914
193692
  )
193915
193693
  );
193916
193694
  }
193917
193695
 
193918
193696
  // src/commands/exec.tsx
193919
- import { spawn as spawn7 } from "child_process";
193697
+ import { spawn as spawn6 } from "child_process";
193920
193698
  import * as fs27 from "fs";
193921
193699
  import * as path24 from "path";
193922
193700
  async function execCommand(serviceName, command, instanceKey = "default") {
@@ -194077,7 +193855,7 @@ async function execCommand(serviceName, command, instanceKey = "default") {
194077
193855
  effectiveCwd = path24.resolve(process.cwd(), build.root);
194078
193856
  }
194079
193857
  }
194080
- child = spawn7(command[0], command.slice(1), {
193858
+ child = spawn6(command[0], command.slice(1), {
194081
193859
  cwd: effectiveCwd,
194082
193860
  env: {
194083
193861
  ...process.env,
@@ -194101,7 +193879,7 @@ async function execCommand(serviceName, command, instanceKey = "default") {
194101
193879
  }
194102
193880
 
194103
193881
  // src/commands/psql.tsx
194104
- import { spawn as spawn8 } from "child_process";
193882
+ import { spawn as spawn7 } from "child_process";
194105
193883
  import * as fs28 from "fs";
194106
193884
  import * as path25 from "path";
194107
193885
  async function psqlCommand(databaseName, instanceKey = "default", extraArgs = []) {
@@ -194224,7 +194002,7 @@ async function psqlCommand(databaseName, instanceKey = "default", extraArgs = []
194224
194002
  };
194225
194003
  process.on("SIGINT", () => handleSignal("SIGINT"));
194226
194004
  process.on("SIGTERM", () => handleSignal("SIGTERM"));
194227
- child = spawn8(psqlPath, ["-h", dbState.host, "-p", String(dbState.port), "-U", dbState.user, "-d", dbState.dbName, ...extraArgs], {
194005
+ child = spawn7(psqlPath, ["-h", dbState.host, "-p", String(dbState.port), "-U", dbState.user, "-d", dbState.dbName, ...extraArgs], {
194228
194006
  cwd: process.cwd(),
194229
194007
  env: {
194230
194008
  ...process.env,
@@ -194249,7 +194027,7 @@ async function psqlCommand(databaseName, instanceKey = "default", extraArgs = []
194249
194027
  }
194250
194028
 
194251
194029
  // src/commands/reshape.tsx
194252
- import { spawn as spawn9 } from "child_process";
194030
+ import { spawn as spawn8 } from "child_process";
194253
194031
  import * as fs29 from "fs";
194254
194032
  import * as path26 from "path";
194255
194033
  var VALID_ACTIONS = ["start", "complete", "status", "abort", "check"];
@@ -194427,7 +194205,7 @@ async function reshapeCommand(action, databaseName, instanceKey = "default") {
194427
194205
  };
194428
194206
  process.on("SIGINT", () => handleSignal("SIGINT"));
194429
194207
  process.on("SIGTERM", () => handleSignal("SIGTERM"));
194430
- child = spawn9(reshapePath, reshapeArgs, {
194208
+ child = spawn8(reshapePath, reshapeArgs, {
194431
194209
  cwd: process.cwd(),
194432
194210
  env: {
194433
194211
  ...process.env,
@@ -194704,7 +194482,7 @@ function compareVersions(a, b) {
194704
194482
  return 0;
194705
194483
  }
194706
194484
  async function checkForUpdate() {
194707
- const currentVersion = "0.1.73";
194485
+ const currentVersion = "0.1.74";
194708
194486
  const response = await fetch(`${BINARIES_BASE_URL}/latest?t=${Date.now()}`);
194709
194487
  if (!response.ok) {
194710
194488
  throw new Error(`Failed to check for updates: HTTP ${response.status}`);
@@ -194754,7 +194532,7 @@ async function performUpdate(version, onProgress) {
194754
194532
  }
194755
194533
 
194756
194534
  // src/lib/background-update.ts
194757
- import { spawn as spawn10 } from "child_process";
194535
+ import { spawn as spawn9 } from "child_process";
194758
194536
  import * as fs32 from "fs";
194759
194537
  import * as path29 from "path";
194760
194538
  import * as os10 from "os";
@@ -194783,7 +194561,7 @@ function maybeStartBackgroundUpdate() {
194783
194561
  if (process.env.SPECIFIC_BACKGROUND_UPDATE === "1") return;
194784
194562
  if (isRateLimited()) return;
194785
194563
  if (!isBinaryWritable()) return;
194786
- const child = spawn10(process.execPath, [], {
194564
+ const child = spawn9(process.execPath, [], {
194787
194565
  detached: true,
194788
194566
  stdio: "ignore",
194789
194567
  env: {
@@ -194903,7 +194681,7 @@ function updateCommand() {
194903
194681
  var program = new Command();
194904
194682
  var env = "production";
194905
194683
  var envLabel = env !== "production" ? `[${env.toUpperCase()}] ` : "";
194906
- program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.73").enablePositionalOptions();
194684
+ program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.74").enablePositionalOptions();
194907
194685
  program.command("init").description("Initialize project for use with a coding agent").option("--agent <name...>", "Agents to configure (cursor, claude, codex, other)").action((options2) => initCommand(options2));
194908
194686
  program.command("docs [topic]").description("Fetch LLM-optimized documentation").action(docsCommand);
194909
194687
  program.command("check").description("Validate specific.hcl configuration").action(checkCommand);
@@ -194911,8 +194689,8 @@ program.command("dev").description("Start local development environment").option
194911
194689
  const key = options2.key ?? getDefaultKey();
194912
194690
  devCommand(key, options2.tunnel ?? false);
194913
194691
  });
194914
- program.command("deploy [environment]").description("Deploy to Specific infrastructure").option("--skip-build-test", "Skip local build testing before deploy").action((environment, options2) => {
194915
- deployCommand(environment, options2);
194692
+ program.command("deploy [environment]").description("Deploy to Specific infrastructure").action((environment) => {
194693
+ deployCommand(environment);
194916
194694
  });
194917
194695
  program.command("exec <service> [args...]").description("Run a one-off command with service environment").option("-k, --key <key>", "Dev environment namespace (auto-detected from git worktree if not specified)").passThroughOptions().action(async (service, args, options2) => {
194918
194696
  const filteredArgs = args[0] === "--" ? args.slice(1) : args;