@specific.dev/cli 0.1.132 → 0.1.133

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 (67) 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 +46 -42
  64. package/package.json +1 -1
  65. /package/dist/admin/_next/static/{QhvYQwbwiUXVu-lpkuczQ → k4CkHzJBOS7_uNab7bdAE}/_buildManifest.js +0 -0
  66. /package/dist/admin/_next/static/{QhvYQwbwiUXVu-lpkuczQ → k4CkHzJBOS7_uNab7bdAE}/_clientMiddlewareManifest.json +0 -0
  67. /package/dist/admin/_next/static/{QhvYQwbwiUXVu-lpkuczQ → k4CkHzJBOS7_uNab7bdAE}/_ssgManifest.js +0 -0
package/dist/cli.js CHANGED
@@ -373693,7 +373693,7 @@ function trackEvent(event, properties) {
373693
373693
  event,
373694
373694
  properties: {
373695
373695
  ...properties,
373696
- cli_version: "0.1.132",
373696
+ cli_version: "0.1.133",
373697
373697
  platform: process.platform,
373698
373698
  node_version: process.version,
373699
373699
  project_id: getProjectId()
@@ -377799,7 +377799,7 @@ function compareVersions(a, b) {
377799
377799
  return 0;
377800
377800
  }
377801
377801
  async function checkForUpdate() {
377802
- const currentVersion = "0.1.132";
377802
+ const currentVersion = "0.1.133";
377803
377803
  const response = await fetch(`${BINARIES_BASE_URL}/latest?t=${Date.now()}`);
377804
377804
  if (!response.ok) {
377805
377805
  throw new Error(`Failed to check for updates: HTTP ${response.status}`);
@@ -378066,54 +378066,58 @@ async function projectListCommand() {
378066
378066
  }
378067
378067
 
378068
378068
  // src/commands/status.tsx
378069
- async function statusCommand() {
378070
- try {
378071
- const projectId = readProjectId();
378072
- const token = await getValidAccessToken();
378073
- const client2 = new SpecificClient({ accessToken: token });
378074
- const status = await client2.getProjectStatus(projectId);
378075
- console.log(`${status.name} (${status.id})`);
378076
- if (status.environments.length === 0) {
378077
- console.log("");
378078
- console.log("No environments found.");
378079
- return;
378080
- }
378081
- for (const env2 of status.environments) {
378082
- console.log("");
378083
- console.log(`Environment: ${env2.name} (${env2.id})`);
378084
- console.log(` Status: ${env2.status}`);
378085
- if (env2.activeDeployment) {
378086
- console.log(
378087
- ` Active deployment: ${env2.activeDeployment.id} (${env2.activeDeployment.state})`
378088
- );
378089
- } else {
378090
- console.log(` Active deployment: none`);
378091
- }
378092
- if (env2.inProgressDeployments.length > 0) {
378093
- console.log(` In progress:`);
378094
- for (const d of env2.inProgressDeployments) {
378095
- console.log(` - ${d.id} (${d.state})`);
378096
- }
378097
- }
378098
- if (env2.publicUrls && Object.keys(env2.publicUrls).length > 0) {
378099
- console.log(` Public URLs:`);
378100
- for (const [serviceName, url] of Object.entries(env2.publicUrls)) {
378101
- console.log(` - ${serviceName}: ${url}`);
378102
- }
378069
+ import React12, { useState as useState11, useEffect as useEffect11 } from "react";
378070
+ import { render as render10, Text as Text12, Box as Box11 } from "ink";
378071
+ import Spinner7 from "ink-spinner";
378072
+ function statusColor(s) {
378073
+ switch (s) {
378074
+ case "active":
378075
+ return "green";
378076
+ case "deploying":
378077
+ return "yellow";
378078
+ case "failed":
378079
+ return "red";
378080
+ case "none":
378081
+ return "gray";
378082
+ }
378083
+ }
378084
+ function StatusUI() {
378085
+ const [state, setState] = useState11({ phase: "loading" });
378086
+ useEffect11(() => {
378087
+ (async () => {
378088
+ try {
378089
+ const projectId = readProjectId();
378090
+ const token = await getValidAccessToken();
378091
+ const client2 = new SpecificClient({ accessToken: token });
378092
+ const status2 = await client2.getProjectStatus(projectId);
378093
+ setState({ phase: "success", status: status2 });
378094
+ } catch (err) {
378095
+ setState({
378096
+ phase: "error",
378097
+ error: err instanceof Error ? err.message : String(err)
378098
+ });
378103
378099
  }
378104
- }
378105
- } catch (error) {
378106
- const message = error instanceof Error ? error.message : "Unknown error occurred";
378107
- console.error(`Failed to get status: ${message}`);
378108
- process.exit(1);
378100
+ })();
378101
+ }, []);
378102
+ if (state.phase === "loading") {
378103
+ return /* @__PURE__ */ React12.createElement(Box11, null, /* @__PURE__ */ React12.createElement(Text12, { color: "blue" }, /* @__PURE__ */ React12.createElement(Spinner7, { type: "dots" })), /* @__PURE__ */ React12.createElement(Text12, null, " Loading project status..."));
378109
378104
  }
378105
+ if (state.phase === "error") {
378106
+ process.exitCode = 1;
378107
+ return /* @__PURE__ */ React12.createElement(Text12, { color: "red" }, "Failed to get status: ", state.error);
378108
+ }
378109
+ const status = state.status;
378110
+ return /* @__PURE__ */ React12.createElement(Box11, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ React12.createElement(Text12, null, /* @__PURE__ */ React12.createElement(Text12, { bold: true }, status.name), /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, " (", status.id, ")")), status.environments.length === 0 ? /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, "No environments found.") : status.environments.map((env2) => /* @__PURE__ */ React12.createElement(Box11, { key: env2.id, flexDirection: "column" }, /* @__PURE__ */ React12.createElement(Text12, null, /* @__PURE__ */ React12.createElement(Text12, { bold: true, color: "cyan" }, env2.name), /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, " (", env2.id, ")")), /* @__PURE__ */ React12.createElement(Text12, null, " ", "Status: ", /* @__PURE__ */ React12.createElement(Text12, { color: statusColor(env2.status), bold: true }, env2.status)), /* @__PURE__ */ React12.createElement(Text12, null, " ", "Active deployment:", " ", env2.activeDeployment ? /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(Text12, { color: "green" }, env2.activeDeployment.id), /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, " (", env2.activeDeployment.state, ")")) : /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, "none")), env2.inProgressDeployment && /* @__PURE__ */ React12.createElement(Text12, null, " ", "In progress:", " ", /* @__PURE__ */ React12.createElement(Text12, { color: "yellow" }, env2.inProgressDeployment.id), /* @__PURE__ */ React12.createElement(Text12, { dimColor: true }, " (", env2.inProgressDeployment.state, ")")), env2.publicUrls && Object.keys(env2.publicUrls).length > 0 && /* @__PURE__ */ React12.createElement(Box11, { flexDirection: "column" }, /* @__PURE__ */ React12.createElement(Text12, null, " ", "Public URLs:"), Object.entries(env2.publicUrls).map(([serviceName, url]) => /* @__PURE__ */ React12.createElement(Text12, { key: serviceName }, " - ", /* @__PURE__ */ React12.createElement(Text12, { color: "cyan" }, serviceName), ": ", /* @__PURE__ */ React12.createElement(Text12, { color: "blue" }, url)))))));
378111
+ }
378112
+ function statusCommand() {
378113
+ render10(/* @__PURE__ */ React12.createElement(StatusUI, null));
378110
378114
  }
378111
378115
 
378112
378116
  // src/cli-program.tsx
378113
378117
  var program = new Command();
378114
378118
  var env = "production";
378115
378119
  var envLabel = env !== "production" ? `[${env.toUpperCase()}] ` : "";
378116
- program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.132").enablePositionalOptions();
378120
+ program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.133").enablePositionalOptions();
378117
378121
  program.command("init").description("Initialize project for use with a coding agent").option("--agent <name...>", "Agents to configure (cursor, claude, codex, other)").addHelpText("after", `
378118
378122
  Examples:
378119
378123
  $ specific init
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specific.dev/cli",
3
- "version": "0.1.132",
3
+ "version": "0.1.133",
4
4
  "description": "CLI for Specific infrastructure-as-code",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",