percher 0.4.0 → 0.4.1

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 (174) hide show
  1. package/dist/bin/percher.js +111049 -18287
  2. package/dist/package.json +13 -4
  3. package/dist/src/cli-utils.d.ts +9 -0
  4. package/dist/src/cli-utils.d.ts.map +1 -1
  5. package/dist/src/cli-utils.js +18 -0
  6. package/dist/src/cli-utils.js.map +1 -1
  7. package/dist/src/commands/account.d.ts.map +1 -1
  8. package/dist/src/commands/account.js +63 -7
  9. package/dist/src/commands/account.js.map +1 -1
  10. package/dist/src/commands/admin.d.ts +17 -0
  11. package/dist/src/commands/admin.d.ts.map +1 -0
  12. package/dist/src/commands/admin.js +92 -0
  13. package/dist/src/commands/admin.js.map +1 -0
  14. package/dist/src/commands/apps.d.ts.map +1 -1
  15. package/dist/src/commands/apps.js +60 -8
  16. package/dist/src/commands/apps.js.map +1 -1
  17. package/dist/src/commands/deploys.d.ts.map +1 -1
  18. package/dist/src/commands/deploys.js +12 -2
  19. package/dist/src/commands/deploys.js.map +1 -1
  20. package/dist/src/commands/migrate.d.ts +4 -0
  21. package/dist/src/commands/migrate.d.ts.map +1 -0
  22. package/dist/src/commands/migrate.js +142 -0
  23. package/dist/src/commands/migrate.js.map +1 -0
  24. package/dist/src/commands/sharing.d.ts +23 -0
  25. package/dist/src/commands/sharing.d.ts.map +1 -0
  26. package/dist/src/commands/sharing.js +162 -0
  27. package/dist/src/commands/sharing.js.map +1 -0
  28. package/dist/src/commands/transfers.d.ts +20 -0
  29. package/dist/src/commands/transfers.d.ts.map +1 -0
  30. package/dist/src/commands/transfers.js +117 -0
  31. package/dist/src/commands/transfers.js.map +1 -0
  32. package/dist/src/index.d.ts.map +1 -1
  33. package/dist/src/index.js +42 -4
  34. package/dist/src/index.js.map +1 -1
  35. package/dist/templates/astro/Caddyfile +6 -0
  36. package/dist/templates/astro/Dockerfile +34 -0
  37. package/dist/templates/astro/astro.config.mjs +3 -0
  38. package/dist/templates/astro/package.json +14 -0
  39. package/dist/templates/astro/percher.toml +11 -0
  40. package/dist/templates/astro/src/pages/index.astro +15 -0
  41. package/dist/templates/bun/index.ts +23 -0
  42. package/dist/templates/bun/package.json +8 -0
  43. package/dist/templates/bun/percher.toml +10 -0
  44. package/dist/templates/django/Procfile +1 -0
  45. package/dist/templates/django/app/__init__.py +0 -0
  46. package/dist/templates/django/app/settings.py +44 -0
  47. package/dist/templates/django/app/urls.py +21 -0
  48. package/dist/templates/django/app/wsgi.py +5 -0
  49. package/dist/templates/django/manage.py +19 -0
  50. package/dist/templates/django/percher.toml +11 -0
  51. package/dist/templates/django/requirements.txt +2 -0
  52. package/dist/templates/dotnet/Dockerfile +18 -0
  53. package/dist/templates/dotnet/Program.cs +23 -0
  54. package/dist/templates/dotnet/app.csproj +9 -0
  55. package/dist/templates/dotnet/percher.toml +11 -0
  56. package/dist/templates/eleventy/.eleventy.js +12 -0
  57. package/dist/templates/eleventy/Caddyfile +6 -0
  58. package/dist/templates/eleventy/Dockerfile +34 -0
  59. package/dist/templates/eleventy/package.json +12 -0
  60. package/dist/templates/eleventy/percher.toml +11 -0
  61. package/dist/templates/eleventy/src/_includes/base.njk +12 -0
  62. package/dist/templates/eleventy/src/assets/style.css +12 -0
  63. package/dist/templates/eleventy/src/index.md +10 -0
  64. package/dist/templates/elysia/index.ts +8 -0
  65. package/dist/templates/elysia/package.json +12 -0
  66. package/dist/templates/elysia/percher.toml +11 -0
  67. package/dist/templates/express/index.ts +16 -0
  68. package/dist/templates/express/package.json +11 -0
  69. package/dist/templates/express/percher.toml +11 -0
  70. package/dist/templates/fastify/index.ts +13 -0
  71. package/dist/templates/fastify/package.json +11 -0
  72. package/dist/templates/fastify/percher.toml +11 -0
  73. package/dist/templates/flask/main.py +23 -0
  74. package/dist/templates/flask/percher.toml +11 -0
  75. package/dist/templates/flask/requirements.txt +1 -0
  76. package/dist/templates/go/Dockerfile +11 -0
  77. package/dist/templates/go/go.mod +3 -0
  78. package/dist/templates/go/main.go +53 -0
  79. package/dist/templates/go/percher.toml +11 -0
  80. package/dist/templates/hono/index.ts +12 -0
  81. package/dist/templates/hono/package.json +11 -0
  82. package/dist/templates/hono/percher.toml +11 -0
  83. package/dist/templates/htmx/index.ts +32 -0
  84. package/dist/templates/htmx/package.json +15 -0
  85. package/dist/templates/htmx/percher.toml +11 -0
  86. package/dist/templates/hugo/Caddyfile +6 -0
  87. package/dist/templates/hugo/Dockerfile +32 -0
  88. package/dist/templates/hugo/content/_index.md +7 -0
  89. package/dist/templates/hugo/hugo.toml +11 -0
  90. package/dist/templates/hugo/layouts/index.html +22 -0
  91. package/dist/templates/hugo/percher.toml +11 -0
  92. package/dist/templates/java/Dockerfile +15 -0
  93. package/dist/templates/java/Main.java +77 -0
  94. package/dist/templates/java/percher.toml +11 -0
  95. package/dist/templates/laravel/Dockerfile +15 -0
  96. package/dist/templates/laravel/composer.json +15 -0
  97. package/dist/templates/laravel/percher.toml +11 -0
  98. package/dist/templates/laravel/public/index.php +37 -0
  99. package/dist/templates/nextjs/app/api/health/route.ts +3 -0
  100. package/dist/templates/nextjs/app/layout.tsx +11 -0
  101. package/dist/templates/nextjs/app/page.tsx +10 -0
  102. package/dist/templates/nextjs/next.config.ts +5 -0
  103. package/dist/templates/nextjs/package.json +15 -0
  104. package/dist/templates/nextjs/percher.toml +15 -0
  105. package/dist/templates/node/index.js +26 -0
  106. package/dist/templates/node/index.ts +12 -0
  107. package/dist/templates/node/package.json +8 -0
  108. package/dist/templates/node/percher.toml +10 -0
  109. package/dist/templates/nuxt/app.vue +6 -0
  110. package/dist/templates/nuxt/nuxt.config.ts +4 -0
  111. package/dist/templates/nuxt/package.json +15 -0
  112. package/dist/templates/nuxt/percher.toml +15 -0
  113. package/dist/templates/nuxt/server/api/health.ts +1 -0
  114. package/dist/templates/phoenix/Dockerfile +15 -0
  115. package/dist/templates/phoenix/lib/application.ex +15 -0
  116. package/dist/templates/phoenix/lib/router.ex +39 -0
  117. package/dist/templates/phoenix/mix.exs +30 -0
  118. package/dist/templates/phoenix/percher.toml +11 -0
  119. package/dist/templates/preact/Caddyfile +7 -0
  120. package/dist/templates/preact/Dockerfile +34 -0
  121. package/dist/templates/preact/index.html +12 -0
  122. package/dist/templates/preact/package.json +19 -0
  123. package/dist/templates/preact/percher.toml +11 -0
  124. package/dist/templates/preact/src/main.tsx +13 -0
  125. package/dist/templates/preact/vite.config.ts +6 -0
  126. package/dist/templates/python/main.py +13 -0
  127. package/dist/templates/python/percher.toml +11 -0
  128. package/dist/templates/python/requirements.txt +2 -0
  129. package/dist/templates/rails/Dockerfile +11 -0
  130. package/dist/templates/rails/Gemfile +12 -0
  131. package/dist/templates/rails/config.ru +32 -0
  132. package/dist/templates/rails/percher.toml +11 -0
  133. package/dist/templates/remix/app/root.tsx +19 -0
  134. package/dist/templates/remix/app/routes/_index.tsx +10 -0
  135. package/dist/templates/remix/app/routes/health.tsx +3 -0
  136. package/dist/templates/remix/package.json +30 -0
  137. package/dist/templates/remix/percher.toml +15 -0
  138. package/dist/templates/remix/vite.config.ts +7 -0
  139. package/dist/templates/rust/Cargo.toml +19 -0
  140. package/dist/templates/rust/Dockerfile +14 -0
  141. package/dist/templates/rust/percher.toml +11 -0
  142. package/dist/templates/rust/src/main.rs +45 -0
  143. package/dist/templates/solid/Caddyfile +7 -0
  144. package/dist/templates/solid/Dockerfile +34 -0
  145. package/dist/templates/solid/index.html +12 -0
  146. package/dist/templates/solid/package.json +19 -0
  147. package/dist/templates/solid/percher.toml +11 -0
  148. package/dist/templates/solid/src/main.tsx +13 -0
  149. package/dist/templates/solid/vite.config.ts +6 -0
  150. package/dist/templates/static/index.html +15 -0
  151. package/dist/templates/static/percher.toml +6 -0
  152. package/dist/templates/static/style.css +32 -0
  153. package/dist/templates/sveltekit/package.json +19 -0
  154. package/dist/templates/sveltekit/percher.toml +15 -0
  155. package/dist/templates/sveltekit/src/app.html +12 -0
  156. package/dist/templates/sveltekit/src/routes/+page.svelte +2 -0
  157. package/dist/templates/sveltekit/src/routes/health/+server.ts +5 -0
  158. package/dist/templates/sveltekit/svelte.config.js +8 -0
  159. package/dist/templates/sveltekit/vite.config.js +6 -0
  160. package/dist/templates/vite-react/Caddyfile +7 -0
  161. package/dist/templates/vite-react/Dockerfile +34 -0
  162. package/dist/templates/vite-react/index.html +12 -0
  163. package/dist/templates/vite-react/package.json +22 -0
  164. package/dist/templates/vite-react/percher.toml +11 -0
  165. package/dist/templates/vite-react/src/main.tsx +20 -0
  166. package/dist/templates/vite-react/vite.config.ts +6 -0
  167. package/dist/templates/vite-vue/Caddyfile +7 -0
  168. package/dist/templates/vite-vue/Dockerfile +34 -0
  169. package/dist/templates/vite-vue/index.html +12 -0
  170. package/dist/templates/vite-vue/package.json +19 -0
  171. package/dist/templates/vite-vue/percher.toml +11 -0
  172. package/dist/templates/vite-vue/src/main.ts +12 -0
  173. package/dist/templates/vite-vue/vite.config.ts +6 -0
  174. package/package.json +13 -4
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "percher",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "CLI for the Percher hosting platform — publish apps with one command",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,9 +15,11 @@
15
15
  "default": "./dist/src/index.js"
16
16
  }
17
17
  },
18
- "files": ["dist"],
18
+ "files": [
19
+ "dist"
20
+ ],
19
21
  "scripts": {
20
- "build": "tsc -p tsconfig.json && bun build bin/percher.ts --outfile dist/bin/percher.js --target node --format esm && node -e \"require('fs').chmodSync('dist/bin/percher.js',0o755)\"",
22
+ "build": "tsc -p tsconfig.json && bun build bin/percher.ts --outfile dist/bin/percher.js --target node --format esm && node scripts/copy-templates.mjs && node -e \"require('fs').chmodSync('dist/bin/percher.js',0o755)\"",
21
23
  "test": "bun test",
22
24
  "typecheck": "tsc --noEmit"
23
25
  },
@@ -41,5 +43,12 @@
41
43
  "type": "git",
42
44
  "url": "https://github.com/mattiasmalmborg/percher"
43
45
  },
44
- "keywords": ["hosting", "deploy", "cli", "paas", "bun", "ai"]
46
+ "keywords": [
47
+ "hosting",
48
+ "deploy",
49
+ "cli",
50
+ "paas",
51
+ "bun",
52
+ "ai"
53
+ ]
45
54
  }
@@ -5,6 +5,15 @@ export declare class SilentExitError {
5
5
  constructor(exitCode?: number);
6
6
  }
7
7
  export declare function writeLine(ctx: Context, line: string): Promise<void>;
8
+ /**
9
+ * Print an "unknown command" usage hint to stderr. cac never surfaces
10
+ * an unmatched command — its `runMatchedCommand()` just returns when
11
+ * `matchedCommand` is undefined — so the CLI has to detect the no-match
12
+ * case itself and emit this. Pair it with a non-zero exit so scripts
13
+ * and agents see the failure instead of an empty exit 0. (dogfood
14
+ * Fas 2 F2-#1.)
15
+ */
16
+ export declare function writeUnknownCommand(ctx: Context, name: string): Promise<void>;
8
17
  /** ISO timestamp → "YYYY-MM-DD HH:MM:SS" in UTC for stable, sortable output. */
9
18
  export declare function formatDeployTimestamp(iso: string): string;
10
19
  export declare function formatStatus(status: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,gGAAgG;AAChG,qBAAa,eAAe;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,GAAE,MAAU;CAC1C;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,MAAM,GAAG,SAAS,CAsBpB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAsCf"}
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,gGAAgG;AAChG,qBAAa,eAAe;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,GAAE,MAAU;CAC1C;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnF;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,MAAM,GAAG,SAAS,CAsBpB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -16,6 +16,24 @@ export async function writeLine(ctx, line) {
16
16
  writer.releaseLock();
17
17
  }
18
18
  }
19
+ /**
20
+ * Print an "unknown command" usage hint to stderr. cac never surfaces
21
+ * an unmatched command — its `runMatchedCommand()` just returns when
22
+ * `matchedCommand` is undefined — so the CLI has to detect the no-match
23
+ * case itself and emit this. Pair it with a non-zero exit so scripts
24
+ * and agents see the failure instead of an empty exit 0. (dogfood
25
+ * Fas 2 F2-#1.)
26
+ */
27
+ export async function writeUnknownCommand(ctx, name) {
28
+ const writer = ctx.stderr.getWriter();
29
+ try {
30
+ await writer.write(new TextEncoder().encode(`${pc.red("error:")} unknown command \`${name}\`\n` +
31
+ `Run \`percher --help\` to see available commands.\n`));
32
+ }
33
+ finally {
34
+ writer.releaseLock();
35
+ }
36
+ }
19
37
  /** ISO timestamp → "YYYY-MM-DD HH:MM:SS" in UTC for stable, sortable output. */
20
38
  export function formatDeployTimestamp(iso) {
21
39
  const d = new Date(iso);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAuUpE"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA4B/B,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA2YpE"}
@@ -1,6 +1,22 @@
1
1
  import * as core from "@percher/core";
2
2
  import pc from "picocolors";
3
3
  import { SilentExitError, writeLine } from "../cli-utils";
4
+ /**
5
+ * FUTURE_account-deletion-guards Fas 4 — human-readable next-action
6
+ * per blocker kind. Mirrors the plan's "Recovery (Fas 4 MCP)" table
7
+ * (docs/plans/FUTURE_account-deletion-guards.md §2.2) so the CLI's
8
+ * exit messaging matches what the MCP recovery contract will surface
9
+ * once those tools land.
10
+ */
11
+ const BLOCKER_ACTIONS = {
12
+ apps_owned: "Delete or transfer each app: `bunx percher delete <name>` or `bunx percher transfer <email> --app <name>`.",
13
+ apps_with_collaborators: "Revoke each collaborator: `bunx percher share revoke <shareId> --app <name>` (list IDs with `bunx percher share list --app <name>`).",
14
+ apps_with_pending_invites: "Revoke the pending invite (`bunx percher share revoke <shareId> --app <name>`) or wait for it to expire.",
15
+ apps_with_active_pr_previews: "Close or merge the open pull requests so the preview webhook tears the apps down, then re-run preview.",
16
+ pending_outgoing_transfers: "Cancel each transfer: `bunx percher transfer --cancel <transferId> --app <name>`, or wait for the recipient to decline/expire.",
17
+ deploys_in_progress: "Wait for the in-flight deploy to finish (usually a few minutes), then retry.",
18
+ active_restore_jobs: "Wait for the active restore job to finish (usually a few minutes), then retry.",
19
+ };
4
20
  export function registerAccountCommands(cli, ctx) {
5
21
  // cac matches commands by single first-token equality (see comment in
6
22
  // github.ts). Multi-word `account export` / `account delete` would
@@ -8,7 +24,7 @@ export function registerAccountCommands(cli, ctx) {
8
24
  // [action] ...` and keep the multi-word registrations below for
9
25
  // --help discoverability only.
10
26
  cli
11
- .command("account [action] [...rest]", "Account management: export (GDPR data portability) | delete (GDPR erasure)")
27
+ .command("account [action] [...rest]", "Account management: export (GDPR data portability) | preview-delete (inspect deletion blockers) | delete (GDPR erasure)")
12
28
  .option("--out <file>", "(export only) Output file path")
13
29
  .option("--include-app-data", "(export only) Also download per-app PocketBase tarballs (creates a directory)")
14
30
  .option("--confirm <email>", "(delete only) Your email — must match the signed-in account")
@@ -40,27 +56,59 @@ export function registerAccountCommands(cli, ctx) {
40
56
  await writeLine(ctx, pc.dim("Note: encrypted env-var values are not included (only the keys + metadata). Build logs are excluded too — request via `percher logs` if needed."));
41
57
  return;
42
58
  }
59
+ if (action === "preview-delete") {
60
+ if (!ctx.client.token) {
61
+ await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
62
+ throw new SilentExitError();
63
+ }
64
+ const preview = await core.accountDeletionPreview(ctx, {});
65
+ if (preview.canDelete) {
66
+ await writeLine(ctx, `${pc.green("✓")} No blockers — your account is ready to delete. Run: percher account delete --confirm <your-email>`);
67
+ return;
68
+ }
69
+ await writeLine(ctx, `${pc.yellow("!")} Account deletion is blocked by ${preview.blockers.length} ${preview.blockers.length === 1 ? "category" : "categories"} (${preview.ownedAppCount} owned ${preview.ownedAppCount === 1 ? "app" : "apps"}):`);
70
+ for (const blocker of preview.blockers) {
71
+ const action = BLOCKER_ACTIONS[blocker.kind] ?? "Clear via the dashboard or API.";
72
+ await writeLine(ctx, "");
73
+ await writeLine(ctx, ` ${pc.bold(blocker.kind)} (${blocker.count})`);
74
+ await writeLine(ctx, ` → ${action}`);
75
+ const previewDetails = blocker.details.slice(0, 5);
76
+ for (const detail of previewDetails) {
77
+ const ref = detail.ref ? ` (${detail.ref})` : "";
78
+ const name = detail.appName ?? detail.appId ?? "—";
79
+ await writeLine(ctx, ` · ${name}${ref}`);
80
+ }
81
+ if (blocker.details.length > previewDetails.length) {
82
+ await writeLine(ctx, pc.dim(` … ${blocker.details.length - previewDetails.length} more`));
83
+ }
84
+ }
85
+ await writeLine(ctx, pc.dim("\nResolve each category above, then re-run `percher account preview-delete` to confirm. Once canDelete=true, run `percher account delete --confirm <your-email>`."));
86
+ // Exit-code 2: "not blocked by error, but user action needed"
87
+ // — matches the convention from `bun create` / `git status`
88
+ // where a clean-but-not-done state has its own non-zero code.
89
+ throw new SilentExitError(2);
90
+ }
43
91
  if (action === "delete") {
44
92
  if (!ctx.client.token) {
45
93
  await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
46
94
  throw new SilentExitError();
47
95
  }
48
96
  if (!options.confirm) {
49
- await writeLine(ctx, `${pc.red("✗")} Pass --confirm <your-email> to proceed. This is a permanent, cascading delete.`);
97
+ await writeLine(ctx, `${pc.red("✗")} Pass --confirm <your-email> to proceed. Account deletion is fail-closed — owned apps, accepted collaborators, pending invites, open PR previews, pending transfers, in-flight deploys, and active restores must all be cleared first.`);
50
98
  throw new SilentExitError();
51
99
  }
52
100
  if (!options.yes) {
53
- const answer = await ctx.prompt(`${pc.red("!")} This will permanently delete your account, all apps, deploys, env vars, domains, and shared access. Type "delete my account" to confirm:`);
101
+ const answer = await ctx.prompt(`${pc.red("!")} This will request deletion of your account. The server will reject the request if any apps, collaborators, pending invites, PR previews, pending transfers, in-flight deploys, or active restores remain — clear those first. On a clean account the request is accepted asynchronously and finalization completes within seconds; your API tokens are revoked immediately. Type "delete my account" to confirm:`);
54
102
  if (answer.trim().toLowerCase() !== "delete my account") {
55
103
  await writeLine(ctx, "Cancelled.");
56
104
  return;
57
105
  }
58
106
  }
59
- await core.accountDelete(ctx, { confirm: options.confirm });
60
- await writeLine(ctx, `${pc.green("✓")} Account deleted.`);
107
+ const accepted = await core.accountDelete(ctx, { confirm: options.confirm });
108
+ await writeLine(ctx, `${pc.green("✓")} Account deletion started. Finalization runs asynchronously (job ${pc.dim(accepted.finalizeJobId)}); usually completes within a few seconds. Your API tokens have already been revoked.`);
61
109
  return;
62
110
  }
63
- throw new Error(`Unknown account action "${action ?? ""}". Use: export | delete.`);
111
+ throw new Error(`Unknown account action "${action ?? ""}". Use: export | preview-delete | delete.`);
64
112
  });
65
113
  // Help-only registrations. Unreachable in practice (cac falls through
66
114
  // to the parent `account [action] ...` above), but kept so the help
@@ -73,7 +121,12 @@ export function registerAccountCommands(cli, ctx) {
73
121
  // Unreachable — handled by parent `account [action] ...` action.
74
122
  });
75
123
  cli
76
- .command("account delete", "Permanently delete your account and all apps (GDPR Art. 17)")
124
+ .command("account preview-delete", "Inspect what would block `account delete` (pure read — no mutation). Lists each blocker category + an action hint per kind. Exit code 0 if the account is clean, 2 if blocked.")
125
+ .action(async () => {
126
+ // Unreachable — handled by parent `account [action] ...` action.
127
+ });
128
+ cli
129
+ .command("account delete", "Request account deletion (GDPR Art. 17). Fail-closed: clear owned apps + collaborators + pending invites + PR previews + pending transfers + in-flight deploys + active restores first.")
77
130
  .option("--confirm <email>", "Your email address — must match the signed-in account")
78
131
  .option("--yes", "Skip the interactive confirmation prompt (still requires --confirm)")
79
132
  .action(async () => {
@@ -194,6 +247,9 @@ export function registerAccountCommands(cli, ctx) {
194
247
  if (result.configGenerated) {
195
248
  await writeLine(ctx, `${pc.green("✓")} Imported from ${result.provider} — percher.toml generated`);
196
249
  }
250
+ for (const file of result.scaffoldedFiles) {
251
+ await writeLine(ctx, `${pc.green("✓")} wrote ${file}`);
252
+ }
197
253
  for (const w of result.warnings) {
198
254
  await writeLine(ctx, `${pc.yellow("!")} ${w}`);
199
255
  }
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Context } from "@percher/core";
2
+ import type { CAC } from "cac";
3
+ /**
4
+ * FUTURE18 Fas 4 — operator-only `percher admin reconcile-routes`.
5
+ *
6
+ * The endpoint itself is gated by `isAdminEmail()` server-side, so a
7
+ * non-admin who runs this gets a clean 403. The command stays visible
8
+ * in `--help` because there's no client-side admin detection (and
9
+ * adding one would mean shipping the admin allowlist to every CLI).
10
+ * The "(admin only)" label in the description tells non-admins they
11
+ * shouldn't bother.
12
+ *
13
+ * NOT exposed via MCP — agents must not be able to mutate Caddy state
14
+ * on a user request.
15
+ */
16
+ export declare function registerAdminCommands(cli: CAC, ctx: Context): void;
17
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAqHlE"}
@@ -0,0 +1,92 @@
1
+ import * as core from "@percher/core";
2
+ import pc from "picocolors";
3
+ import { SilentExitError, writeLine } from "../cli-utils";
4
+ /**
5
+ * FUTURE18 Fas 4 — operator-only `percher admin reconcile-routes`.
6
+ *
7
+ * The endpoint itself is gated by `isAdminEmail()` server-side, so a
8
+ * non-admin who runs this gets a clean 403. The command stays visible
9
+ * in `--help` because there's no client-side admin detection (and
10
+ * adding one would mean shipping the admin allowlist to every CLI).
11
+ * The "(admin only)" label in the description tells non-admins they
12
+ * shouldn't bother.
13
+ *
14
+ * NOT exposed via MCP — agents must not be able to mutate Caddy state
15
+ * on a user request.
16
+ */
17
+ export function registerAdminCommands(cli, ctx) {
18
+ // cac matches commands by single first-token equality (see comment
19
+ // in github.ts / account.ts), so multi-word `admin reconcile-routes`
20
+ // would never bind to argv[0]="admin". Dispatch through a parent
21
+ // `admin [action]` and add help-only registrations below for
22
+ // discoverability.
23
+ cli
24
+ .command("admin [action] [...rest]", "Operator commands (admin only): reconcile-routes")
25
+ .option("--app <name>", "(reconcile-routes) Limit to a single app by name")
26
+ .option("--app-id <id>", "(reconcile-routes) Limit to a single app by id")
27
+ .option("--dry-run", "(reconcile-routes) Read-only diff — no Caddy mutations, returns missing/extra/host drift")
28
+ .option("--json", "(reconcile-routes) Output JSON instead of formatted text")
29
+ .action(async (action, _rest, options) => {
30
+ if (action === "reconcile-routes") {
31
+ if (!ctx.client.token) {
32
+ await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
33
+ throw new SilentExitError();
34
+ }
35
+ const result = await core.adminReconcileRoutes(ctx, {
36
+ appName: options.app,
37
+ appId: options.appId,
38
+ dryRun: Boolean(options.dryRun),
39
+ });
40
+ if (options.json) {
41
+ await writeLine(ctx, JSON.stringify(result, null, 2));
42
+ return;
43
+ }
44
+ if (options.dryRun) {
45
+ const missing = result.missingRoute ?? 0;
46
+ const hostDrift = result.missingHost ?? 0;
47
+ const extra = result.extraRoute ?? 0;
48
+ const drift = result.dryRunDrift ?? [];
49
+ if (missing === 0 && hostDrift === 0 && extra === 0) {
50
+ await writeLine(ctx, `${pc.green("✓")} No drift — Caddy matches expected routes.`);
51
+ return;
52
+ }
53
+ await writeLine(ctx, `${pc.yellow("!")} drift: ${missing} missing route(s), ${hostDrift} missing host(s), ${extra} extra route(s)`);
54
+ for (const d of drift) {
55
+ const label = d.kind === "missing_route"
56
+ ? pc.red("MISSING")
57
+ : d.kind === "missing_host"
58
+ ? pc.yellow("HOST_DRIFT")
59
+ : pc.dim("EXTRA");
60
+ const target = d.appName ? `[${d.appName}] ` : "";
61
+ await writeLine(ctx, ` ${label} ${target}${d.routeId} (${d.routeType}) — ${d.hosts.join(", ")}`);
62
+ }
63
+ await writeLine(ctx, pc.dim(`Repair: percher admin reconcile-routes${options.app ? ` --app ${options.app}` : ""}`));
64
+ return;
65
+ }
66
+ // Live reconcile.
67
+ if (result.errors === 0) {
68
+ await writeLine(ctx, `${pc.green("✓")} reconciled ${result.reconciled}, recovered ${result.recovered}, stale ${result.stale}, errors 0`);
69
+ return;
70
+ }
71
+ await writeLine(ctx, `${pc.yellow("!")} reconciled ${result.reconciled}, errors ${result.errors} (app=${result.appRouteErrors} pb=${result.pbRouteErrors} sleeping=${result.sleepingRouteErrors})`);
72
+ for (const e of result.perAppErrors) {
73
+ await writeLine(ctx, ` ${pc.red("✗")} [${e.appName}] ${e.routeId} (${e.routeType}) — ${e.errorCode}: ${e.cause}`);
74
+ }
75
+ throw new SilentExitError(1);
76
+ }
77
+ throw new Error(`Unknown admin action "${action ?? ""}". Use: reconcile-routes.`);
78
+ });
79
+ // Help-only registration so `percher --help` advertises the
80
+ // subcommand. cac falls through to the parent `admin [action] ...`
81
+ // above for the actual dispatch.
82
+ cli
83
+ .command("admin reconcile-routes", "(admin only) Reconcile Caddy routes against DB state — fixes silent route loss")
84
+ .option("--app <name>", "Limit to a single app by name")
85
+ .option("--app-id <id>", "Limit to a single app by id")
86
+ .option("--dry-run", "Read-only diff — no Caddy mutations")
87
+ .option("--json", "Output JSON instead of formatted text")
88
+ .action(async () => {
89
+ // Unreachable — handled by parent `admin [action] ...`.
90
+ });
91
+ }
92
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/commands/admin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAQ,EAAE,GAAY;IAC1D,mEAAmE;IACnE,qEAAqE;IACrE,iEAAiE;IACjE,6DAA6D;IAC7D,mBAAmB;IACnB,GAAG;SACA,OAAO,CAAC,0BAA0B,EAAE,kDAAkD,CAAC;SACvF,MAAM,CAAC,cAAc,EAAE,kDAAkD,CAAC;SAC1E,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CACL,WAAW,EACX,0FAA0F,CAC3F;SACA,MAAM,CAAC,QAAQ,EAAE,0DAA0D,CAAC;SAC5E,MAAM,CACL,KAAK,EACH,MAA0B,EAC1B,KAAe,EACf,OAKC,EACD,EAAE;QACF,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBACzE,MAAM,IAAI,eAAe,EAAE,CAAC;YAC9B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE;gBAClD,OAAO,EAAE,OAAO,CAAC,GAAG;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;gBACvC,IAAI,OAAO,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;oBACnF,OAAO;gBACT,CAAC;gBACD,MAAM,SAAS,CACb,GAAG,EACH,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,OAAO,sBAAsB,SAAS,qBAAqB,KAAK,iBAAiB,CAC9G,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,KAAK,GACT,CAAC,CAAC,IAAI,KAAK,eAAe;wBACxB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;wBACnB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;4BACzB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;4BACzB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACxB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClD,MAAM,SAAS,CACb,GAAG,EACH,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;gBACJ,CAAC;gBACD,MAAM,SAAS,CACb,GAAG,EACH,EAAE,CAAC,GAAG,CACJ,yCAAyC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtF,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,kBAAkB;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,SAAS,CACb,GAAG,EACH,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,eAAe,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,KAAK,YAAY,CACnH,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,SAAS,CACb,GAAG,EACH,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,YAAY,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,aAAa,aAAa,MAAM,CAAC,mBAAmB,GAAG,CAC9K,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,SAAS,CACb,GAAG,EACH,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,CAC7F,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,IAAI,EAAE,2BAA2B,CAAC,CAAC;IACpF,CAAC,CACF,CAAC;IAEJ,4DAA4D;IAC5D,mEAAmE;IACnE,iCAAiC;IACjC,GAAG;SACA,OAAO,CACN,wBAAwB,EACxB,gFAAgF,CACjF;SACA,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,wDAAwD;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA0B/B;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CAmNf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA8TjE"}
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA0B/B;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CAoPf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA0VjE"}
@@ -42,6 +42,25 @@ export async function handlePublishResult(ctx, result, options = {}) {
42
42
  }
43
43
  throw new SilentExitError();
44
44
  }
45
+ case "auth_pending": {
46
+ // FUTURE16 Fas 3 — only the MCP wrapper emits auth_pending; the
47
+ // CLI's `percher publish` calls core.publish directly and goes
48
+ // through the legacy `needs_login` path with an interactive
49
+ // login flow. This case exists purely to keep the switch
50
+ // exhaustive against the shared PublishStatus enum — if a
51
+ // future refactor reroutes the CLI through the MCP wrapper
52
+ // we'd want to print something reasonable instead of crashing
53
+ // through assertNever. Fall back to the same hint as
54
+ // needs_login plus a pointer at `percher login`.
55
+ if (result.loginUrl) {
56
+ await writeLine(ctx, `${pc.yellow("!")} Not logged in. Authorize here:`);
57
+ await writeLine(ctx, ` ${result.loginUrl}`);
58
+ }
59
+ else {
60
+ await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
61
+ }
62
+ throw new SilentExitError();
63
+ }
45
64
  case "queued": {
46
65
  // FUTURE11 async path — caller passed waitForLive: false (currently
47
66
  // only reachable via the MCP/programmatic path, but PublishStatus
@@ -173,11 +192,21 @@ export async function handlePublishResult(ctx, result, options = {}) {
173
192
  if (result.cacheReused) {
174
193
  await writeLine(ctx, pc.dim(" Build cache: reused — identical bundle, redeployed without re-upload (--no-cache to force a fresh build)"));
175
194
  }
176
- else if (result.cacheHit === true) {
177
- await writeLine(ctx, pc.dim(" Build cache: hit (reused image — re-run with --no-cache if your changes aren't reflected)"));
178
- }
179
- else if (result.cacheHit === false) {
180
- await writeLine(ctx, pc.dim(" Build cache: miss (fresh build)"));
195
+ else {
196
+ // FUTURE11 Fas 4 — three-valued cache status. Falls back to
197
+ // the legacy boolean when cacheStatus is absent (server is
198
+ // pre-Fas-4 or the row was never populated).
199
+ const status = result.cacheStatus ??
200
+ (result.cacheHit === true ? "image_reused" : result.cacheHit === false ? "fresh" : null);
201
+ if (status === "image_reused") {
202
+ await writeLine(ctx, pc.dim(" Build cache: hit (reused image — re-run with --no-cache if your changes aren't reflected)"));
203
+ }
204
+ else if (status === "layer_hit") {
205
+ await writeLine(ctx, pc.dim(" Build cache: layer hit (Docker reused unchanged layers — full nixpacks/build skipped)"));
206
+ }
207
+ else if (status === "fresh") {
208
+ await writeLine(ctx, pc.dim(" Build cache: miss (fresh build)"));
209
+ }
181
210
  }
182
211
  if (result.replacedPreview) {
183
212
  await writeLine(ctx, pc.dim(" (replaced previous preview — free plan keeps 1 preview slot per app)"));
@@ -213,8 +242,20 @@ export function registerAppsCommands(cli, ctx) {
213
242
  .option("--force", "Overwrite existing percher.toml")
214
243
  .option("--name <name>", "Override detected app name")
215
244
  .action(async (options) => {
216
- const result = await core.init(ctx, { force: options.force, name: options.name });
245
+ // FUTURE11 Fas 5 — CLI is the interactive surface; let init's
246
+ // suspicious-name detector prompt the user instead of silently
247
+ // baking a temp-dir slug into the app URL. MCP and other
248
+ // non-CLI callers omit `interactive` so the detector falls
249
+ // back to `process.stdin.isTTY`.
250
+ const result = await core.init(ctx, {
251
+ force: options.force,
252
+ name: options.name,
253
+ interactive: true,
254
+ });
217
255
  await writeLine(ctx, `${pc.green("✓")} wrote ${result.path}`);
256
+ for (const file of result.scaffoldedFiles) {
257
+ await writeLine(ctx, `${pc.green("✓")} wrote ${file}`);
258
+ }
218
259
  });
219
260
  cli
220
261
  .command("publish", "Publish this project to Percher (recommended deploy command)")
@@ -308,10 +349,21 @@ export function registerAppsCommands(cli, ctx) {
308
349
  // wording as publish so users learn one signal across both
309
350
  // commands. Codex P3 follow-up on 9e5ceee — push was blind to
310
351
  // the exact stale-cache scenario --no-cache was added to fix.
311
- if (result.deployment?.cacheHit === true) {
352
+ // FUTURE11 Fas 4 — three-valued cache status with legacy
353
+ // boolean fallback. Mirrored from the publish output above.
354
+ const status = result.deployment?.cacheStatus ??
355
+ (result.deployment?.cacheHit === true
356
+ ? "image_reused"
357
+ : result.deployment?.cacheHit === false
358
+ ? "fresh"
359
+ : null);
360
+ if (status === "image_reused") {
312
361
  await writeLine(ctx, pc.dim(" Build cache: hit (reused image — re-run with --no-cache if your changes aren't reflected)"));
313
362
  }
314
- else if (result.deployment?.cacheHit === false) {
363
+ else if (status === "layer_hit") {
364
+ await writeLine(ctx, pc.dim(" Build cache: layer hit (Docker reused unchanged layers — full nixpacks/build skipped)"));
365
+ }
366
+ else if (status === "fresh") {
315
367
  await writeLine(ctx, pc.dim(" Build cache: miss (fresh build)"));
316
368
  }
317
369
  }