@percher/core 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/commands/cache.d.ts +23 -0
  2. package/dist/commands/cache.d.ts.map +1 -0
  3. package/dist/commands/cache.js +24 -0
  4. package/dist/commands/cache.js.map +1 -0
  5. package/dist/commands/capabilities.d.ts +7 -0
  6. package/dist/commands/capabilities.d.ts.map +1 -0
  7. package/dist/commands/capabilities.js +7 -0
  8. package/dist/commands/capabilities.js.map +1 -0
  9. package/dist/commands/claim.d.ts +24 -0
  10. package/dist/commands/claim.d.ts.map +1 -0
  11. package/dist/commands/claim.js +47 -0
  12. package/dist/commands/claim.js.map +1 -0
  13. package/dist/commands/create.d.ts.map +1 -1
  14. package/dist/commands/create.js +1 -1
  15. package/dist/commands/create.js.map +1 -1
  16. package/dist/commands/dashboard.d.ts.map +1 -1
  17. package/dist/commands/dashboard.js +12 -1
  18. package/dist/commands/dashboard.js.map +1 -1
  19. package/dist/commands/doctor.d.ts +126 -0
  20. package/dist/commands/doctor.d.ts.map +1 -1
  21. package/dist/commands/doctor.js +445 -313
  22. package/dist/commands/doctor.js.map +1 -1
  23. package/dist/commands/inspect-link.d.ts +20 -0
  24. package/dist/commands/inspect-link.d.ts.map +1 -0
  25. package/dist/commands/inspect-link.js +28 -0
  26. package/dist/commands/inspect-link.js.map +1 -0
  27. package/dist/commands/migrate-supabase-scripts.d.ts.map +1 -1
  28. package/dist/commands/migrate-supabase-scripts.js +10 -7
  29. package/dist/commands/migrate-supabase-scripts.js.map +1 -1
  30. package/dist/commands/migrate-supabase-sdk.d.ts.map +1 -1
  31. package/dist/commands/migrate-supabase-sdk.js +33 -28
  32. package/dist/commands/migrate-supabase-sdk.js.map +1 -1
  33. package/dist/commands/migrate-supabase-walker.d.ts.map +1 -1
  34. package/dist/commands/migrate-supabase-walker.js +2 -3
  35. package/dist/commands/migrate-supabase-walker.js.map +1 -1
  36. package/dist/commands/preview-branch.d.ts +31 -0
  37. package/dist/commands/preview-branch.d.ts.map +1 -0
  38. package/dist/commands/preview-branch.js +55 -0
  39. package/dist/commands/preview-branch.js.map +1 -0
  40. package/dist/commands/publish-api-error.d.ts +15 -0
  41. package/dist/commands/publish-api-error.d.ts.map +1 -1
  42. package/dist/commands/publish-api-error.js +155 -6
  43. package/dist/commands/publish-api-error.js.map +1 -1
  44. package/dist/commands/publish-failure.d.ts +3 -1
  45. package/dist/commands/publish-failure.d.ts.map +1 -1
  46. package/dist/commands/publish-failure.js +11 -7
  47. package/dist/commands/publish-failure.js.map +1 -1
  48. package/dist/commands/publish.d.ts +15 -0
  49. package/dist/commands/publish.d.ts.map +1 -1
  50. package/dist/commands/publish.js +176 -321
  51. package/dist/commands/publish.js.map +1 -1
  52. package/dist/commands/push.d.ts.map +1 -1
  53. package/dist/commands/push.js +4 -4
  54. package/dist/commands/push.js.map +1 -1
  55. package/dist/commands/redeploy.js +3 -3
  56. package/dist/commands/redeploy.js.map +1 -1
  57. package/dist/commands/rename.d.ts +7 -0
  58. package/dist/commands/rename.d.ts.map +1 -1
  59. package/dist/commands/rename.js +32 -1
  60. package/dist/commands/rename.js.map +1 -1
  61. package/dist/commands/wait-deploy.d.ts +12 -2
  62. package/dist/commands/wait-deploy.d.ts.map +1 -1
  63. package/dist/commands/wait-deploy.js +115 -46
  64. package/dist/commands/wait-deploy.js.map +1 -1
  65. package/dist/errors.d.ts +1 -1
  66. package/dist/errors.d.ts.map +1 -1
  67. package/dist/errors.js.map +1 -1
  68. package/dist/index.d.ts +6 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +6 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/plans.d.ts +14 -1
  73. package/dist/plans.d.ts.map +1 -1
  74. package/dist/plans.js +49 -1
  75. package/dist/plans.js.map +1 -1
  76. package/dist/poll-deployment.d.ts +3 -3
  77. package/dist/poll-deployment.d.ts.map +1 -1
  78. package/dist/poll-deployment.js +5 -4
  79. package/dist/poll-deployment.js.map +1 -1
  80. package/dist/publish-retry.d.ts.map +1 -1
  81. package/dist/publish-retry.js +2 -3
  82. package/dist/publish-retry.js.map +1 -1
  83. package/package.json +4 -4
  84. package/dist/commands/continue.d.ts +0 -48
  85. package/dist/commands/continue.d.ts.map +0 -1
  86. package/dist/commands/continue.js +0 -121
  87. package/dist/commands/continue.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import type { Context } from "../context";
3
+ export declare const cacheResetInputSchema: z.ZodObject<{
4
+ app: z.ZodOptional<z.ZodString>;
5
+ }, z.core.$strip>;
6
+ export type CacheResetInput = z.infer<typeof cacheResetInputSchema>;
7
+ /**
8
+ * `percher cache reset` — clear the app's build cache. Bumps the per-app
9
+ * cache-generation token so the next deploy mounts a fresh (empty) BuildKit
10
+ * cache and does a one-time cold dependency install; the old mount ages out via
11
+ * the daemon GC. `publish --no-cache` stays the one-shot escape hatch — this
12
+ * makes the next NORMAL deploy clean too.
13
+ */
14
+ export declare function cacheReset(ctx: Context, input?: CacheResetInput): Promise<{
15
+ ok: boolean;
16
+ app: {
17
+ id: string;
18
+ name: string;
19
+ };
20
+ cacheGeneration: number;
21
+ message: string;
22
+ }>;
23
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,KAAK,GAAE,eAAoB,GAC1B,OAAO,CAAC;IACT,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CASD"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { readPercherTomlAppName } from "../app-name";
3
+ import { PercherCoreError } from "../errors";
4
+ export const cacheResetInputSchema = z.object({
5
+ app: z.string().optional(),
6
+ });
7
+ /**
8
+ * `percher cache reset` — clear the app's build cache. Bumps the per-app
9
+ * cache-generation token so the next deploy mounts a fresh (empty) BuildKit
10
+ * cache and does a one-time cold dependency install; the old mount ages out via
11
+ * the daemon GC. `publish --no-cache` stays the one-shot escape hatch — this
12
+ * makes the next NORMAL deploy clean too.
13
+ */
14
+ export async function cacheReset(ctx, input = {}) {
15
+ const name = input.app ?? readPercherTomlAppName(ctx.cwd);
16
+ if (!name) {
17
+ throw new PercherCoreError("No app specified and no percher.toml found", {
18
+ code: "env.no-app",
19
+ hint: "Pass an app name or run from a directory with percher.toml.",
20
+ });
21
+ }
22
+ return ctx.client.apps.resetCache(name);
23
+ }
24
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAGH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,QAAyB,EAAE;IAO3B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,EAAE;YACvE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,6DAA6D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ import type { Context } from "../context";
3
+ export declare const capabilitiesInputSchema: z.ZodObject<{}, z.core.$strip>;
4
+ export type CapabilitiesInput = z.infer<typeof capabilitiesInputSchema>;
5
+ /** Discovery: platform features + account plan, limits and usage. */
6
+ export declare function capabilities(ctx: Context, _input?: CapabilitiesInput): Promise<import("@percher/client").Capabilities>;
7
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/commands/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,uBAAuB,gCAAe,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,qEAAqE;AACrE,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,iBAAsB,mDAE9E"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ export const capabilitiesInputSchema = z.object({});
3
+ /** Discovery: platform features + account plan, limits and usage. */
4
+ export async function capabilities(ctx, _input = {}) {
5
+ return ctx.client.platform.capabilities();
6
+ }
7
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/commands/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAGpD,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,SAA4B,EAAE;IAC7E,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import type { Context } from "../context";
3
+ export declare const claimInputSchema: z.ZodObject<{
4
+ app: z.ZodOptional<z.ZodString>;
5
+ claimToken: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>;
7
+ export type ClaimInput = z.infer<typeof claimInputSchema>;
8
+ export type ClaimResult = {
9
+ status: "claimed";
10
+ app: string;
11
+ url: string;
12
+ summary: string;
13
+ } | {
14
+ status: "needs_token";
15
+ summary: string;
16
+ };
17
+ /**
18
+ * Claims an anonymous app into the signed-in account. App + token default
19
+ * to the locally persisted anon-claim state from the original anonymous
20
+ * publish, so a bare call works in the same project. The persisted state
21
+ * is cleared on success.
22
+ */
23
+ export declare function claim(ctx: Context, input?: ClaimInput): Promise<ClaimResult>;
24
+ //# sourceMappingURL=claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,gBAAgB;;;iBAS3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,UAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CA6BtF"}
@@ -0,0 +1,47 @@
1
+ import { loadConfig, saveConfig } from "@percher/client";
2
+ import { z } from "zod";
3
+ import { readPercherTomlAppName } from "../app-name";
4
+ export const claimInputSchema = z.object({
5
+ app: z
6
+ .string()
7
+ .optional()
8
+ .describe("App name to claim (defaults to the persisted anon state or percher.toml)"),
9
+ claimToken: z
10
+ .string()
11
+ .optional()
12
+ .describe("The one-time claim token returned by the anonymous publish (pcl_…)"),
13
+ });
14
+ /**
15
+ * Claims an anonymous app into the signed-in account. App + token default
16
+ * to the locally persisted anon-claim state from the original anonymous
17
+ * publish, so a bare call works in the same project. The persisted state
18
+ * is cleared on success.
19
+ */
20
+ export async function claim(ctx, input = {}) {
21
+ const state = loadConfig().anonClaim;
22
+ const app = input.app ?? state?.app ?? readPercherTomlAppName(ctx.cwd) ?? undefined;
23
+ const claimToken = input.claimToken ?? state?.claimToken;
24
+ if (!app) {
25
+ return {
26
+ status: "needs_token",
27
+ summary: "No app to claim. Pass --app (or run from the project that published it) and the claim token.",
28
+ };
29
+ }
30
+ if (!claimToken) {
31
+ return {
32
+ status: "needs_token",
33
+ summary: "No claim token found. Pass claimToken explicitly — it was returned by the anonymous publish.",
34
+ };
35
+ }
36
+ const result = await ctx.client.apps.claim(app, { claimToken });
37
+ // Clear the persisted anon state — the app now belongs to a real account.
38
+ if (state)
39
+ saveConfig({ anonClaim: null });
40
+ return {
41
+ status: "claimed",
42
+ app: result.name,
43
+ url: result.url,
44
+ summary: `Claimed ${result.name} — anonymous restrictions lift on the next deploy.`,
45
+ };
46
+ }
47
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0EAA0E,CAAC;IACvF,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;CAClF,CAAC,CAAC;AAOH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,QAAoB,EAAE;IAC9D,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,SAAS,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACpF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,EAAE,UAAU,CAAC;IAEzD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,OAAO,EACL,8FAA8F;SACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,OAAO,EACL,8FAA8F;SACjG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,0EAA0E;IAC1E,IAAI,KAAK;QAAE,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,WAAW,MAAM,CAAC,IAAI,oDAAoD;KACpF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAiB,KAAK,cAAc,EAAoB,MAAM,cAAc,CAAC;AAIpF,eAAO,MAAM,iBAAiB;;;;;iBAO5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAkDpF"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAiB,KAAK,cAAc,EAAoB,MAAM,cAAc,CAAC;AAEpF,eAAO,MAAM,iBAAiB;;;;;iBAO5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAkDpF"}
@@ -1,8 +1,8 @@
1
1
  import { join, resolve } from "node:path";
2
+ import { APP_NAME_RE } from "@percher/shared";
2
3
  import { z } from "zod";
3
4
  import { PercherCoreError } from "../errors";
4
5
  import { listTemplates, scaffoldTemplate } from "../templates";
5
- const APP_NAME_RE = /^[a-z][a-z0-9-]{2,39}$/;
6
6
  export const createInputSchema = z.object({
7
7
  name: z
8
8
  .string()
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAuB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEpF,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,EAAE,oEAAoE,CAAC;IAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAUH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAY,EAAE,KAAkB;IAC3D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,KAAK,CAAC,QAAQ,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1E;YACE,IAAI,EAAE,yBAAyB;YAC/B,IAAI,EAAE,mEAAmE;SAC1E,CACF,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,SAAiB,CAAC;IACtB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,gBAAgB,CAAC,gDAAgD,EAAE;gBAC3E,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;gBAC9B,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,0CAA0C;aACjD,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAuB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,EAAE,oEAAoE,CAAC;IAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAUH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAY,EAAE,KAAkB;IAC3D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,KAAK,CAAC,QAAQ,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1E;YACE,IAAI,EAAE,yBAAyB;YAC/B,IAAI,EAAE,mEAAmE;SAC1E,CACF,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,SAAiB,CAAC;IACtB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,gBAAgB,CAAC,gDAAgD,EAAE;gBAC3E,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;gBAC9B,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,0CAA0C;aACjD,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AASlE,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBzF"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAclE,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BzF"}
@@ -10,6 +10,10 @@ const DEFAULT_BASE = "https://percher.app";
10
10
  // apps/dashboard/app/apps/[name]/page.tsx; we deliberately don't mirror
11
11
  // it here so the CLI doesn't drift behind dashboard changes.
12
12
  const TAB_SHAPE = /^[a-z][a-z0-9-]{0,31}$/;
13
+ // Tabs that are sections of the per-app /settings page (anchor-linked), not
14
+ // top-level segment routes. `github` is the load-bearing one — `dashboard
15
+ // github` is how the docs point users at the GitHub connect/install card.
16
+ const SETTINGS_ANCHOR_TABS = new Set(["github", "env", "domains", "crash-diagnosis"]);
13
17
  export async function dashboard(ctx, input = {}) {
14
18
  const name = input.app ?? readPercherTomlAppName(ctx.cwd);
15
19
  if (!name) {
@@ -26,7 +30,14 @@ export async function dashboard(ctx, input = {}) {
26
30
  });
27
31
  }
28
32
  const base = ctx.env.PERCHER_DASHBOARD_URL ?? DEFAULT_BASE;
29
- const url = `${base}/apps/${encodeURIComponent(name)}?tab=${tab}`;
33
+ const appBase = `${base}/apps/${encodeURIComponent(name)}`;
34
+ // Settings sub-sections live under /settings with an anchor, not as a `?tab=`
35
+ // query (the legacy ?tab= redirect doesn't cover them — `?tab=github` lands on
36
+ // the overview). Everything else keeps the back-compat `?tab=` form, which the
37
+ // dashboard redirects to the right segment route.
38
+ const url = SETTINGS_ANCHOR_TABS.has(tab)
39
+ ? `${appBase}/settings#${tab}`
40
+ : `${appBase}?tab=${tab}`;
30
41
  await ctx.openUrl(url);
31
42
  return url;
32
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAGH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,6DAA6D;AAC7D,wEAAwE;AACxE,6DAA6D;AAC7D,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,QAAwB,EAAE;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,EAAE;YACvE,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,6DAA6D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,GAAG,EAAE;YACjD,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,iEAAiE;SACxE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,YAAY,CAAC;IAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,SAAS,kBAAkB,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClE,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAGH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,6DAA6D;AAC7D,wEAAwE;AACxE,6DAA6D;AAC7D,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,QAAwB,EAAE;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,EAAE;YACvE,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,6DAA6D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,GAAG,EAAE;YACjD,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,iEAAiE;SACxE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,YAAY,CAAC;IAC3D,MAAM,OAAO,GAAG,GAAG,IAAI,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3D,8EAA8E;IAC9E,+EAA+E;IAC/E,+EAA+E;IAC/E,kDAAkD;IAClD,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,CAAC,CAAC,GAAG,OAAO,aAAa,GAAG,EAAE;QAC9B,CAAC,CAAC,GAAG,OAAO,QAAQ,GAAG,EAAE,CAAC;IAC5B,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,5 +1,7 @@
1
+ import type { BuildProblem, CrashReport } from "@percher/client";
1
2
  import { z } from "zod";
2
3
  import type { Context } from "../context";
4
+ import { type ClassifiedError } from "../error-classifier";
3
5
  import { type PublishRecovery, type ReasonCode } from "../recovery";
4
6
  export declare const doctorInputSchema: z.ZodObject<{
5
7
  app: z.ZodOptional<z.ZodString>;
@@ -72,5 +74,129 @@ export interface DoctorResult {
72
74
  export declare const STUCK_DEPLOY_THRESHOLD_MS: number;
73
75
  export declare function isStuckDeploy(status: string, createdAt: string, now?: number): boolean;
74
76
  export declare function doctor(ctx: Context, input?: DoctorInput): Promise<DoctorResult>;
77
+ /**
78
+ * FUTURE12 Phase 2b — pre-resolved `replaced` outcome. We resolve in
79
+ * `doctor()` (async) so `deriveVerdict` stays synchronous; the dispatch
80
+ * just consumes the recovery + url + summary that resolveReplaced
81
+ * already computed.
82
+ */
83
+ export interface ReplacedResolution {
84
+ recovery: PublishRecovery;
85
+ url?: string;
86
+ summary: string;
87
+ resolvedDeployId?: string;
88
+ }
89
+ export interface VerdictContext {
90
+ appName?: string;
91
+ /** True when the caller passed --app explicitly (we don't depend on cwd toml). */
92
+ appProvided?: boolean;
93
+ /** Latest known app.status from /diagnostics, if we got that far. */
94
+ appStatus?: string;
95
+ /** Latest known lastDeploy.status, if any. */
96
+ lastDeployStatus?: string;
97
+ /** lastDeploy.id — needed to point wait_deploy at the right deploy. */
98
+ lastDeployId?: string;
99
+ /**
100
+ * FUTURE12 Phase 2b — additional structured signals captured from
101
+ * the diagnostics payload so `deriveVerdict` can dispatch
102
+ * runtime/route/replaced cases without re-parsing `checks[]`.
103
+ */
104
+ containerState?: string;
105
+ containerRunning?: boolean;
106
+ containerHealthy?: boolean;
107
+ publicRouteHealthy?: boolean;
108
+ lastCrashSeverity?: string;
109
+ lastCrashAt?: string;
110
+ /** Pre-resolved `replaced` outcome (recovery + summary + url). */
111
+ replacedResolution?: ReplacedResolution;
112
+ /**
113
+ * FUTURE12 Codex round 5 fix — agent-supplied dispatch hint. When
114
+ * present, the verdict breaks the otherwise-recursive `run_doctor`
115
+ * loop by emitting a concrete fallback (`inspect_build_log` for
116
+ * `mode: "deploy"` + build_failed; `ask_user` with crash details
117
+ * for `mode: "runtime"` + runtime_crashed). Phase 2c replaces
118
+ * those fallbacks with mode-specific deep analysis using the
119
+ * `buildLogClassification` and `crashReport` fields below.
120
+ */
121
+ inputMode?: "auto" | "deploy" | "runtime" | "config" | "env" | "account";
122
+ /**
123
+ * FUTURE12 Phase 2c — pre-fetched build-log classification for
124
+ * `mode: "deploy"` on a failed deploy. doctor() runs `classifyError`
125
+ * against the deploy's `errorMessage` + `buildLog` before calling
126
+ * `deriveVerdict` so the dispatch can route to a specific recovery
127
+ * (`set_env_vars` / `fix_problems`) instead of always
128
+ * `inspect_build_log`. Null when classification didn't yield a
129
+ * known pattern; undefined when the fetch wasn't attempted.
130
+ */
131
+ buildLogClassification?: ClassifiedError | null;
132
+ /** Deployment.problems — structured BuildProblems extracted by the
133
+ * API parser. Promoted to `recoveryFixProblems` when present. */
134
+ buildProblems?: BuildProblem[];
135
+ /**
136
+ * FUTURE12 Phase 2c — pre-fetched crash report for `mode:
137
+ * "runtime"`. Surfaced in the `ask_user` prompt when the analysis
138
+ * status is "completed" so the agent can echo the AI-generated
139
+ * explanation + suggestion instead of asking the user to dig
140
+ * through the dashboard.
141
+ */
142
+ crashReport?: CrashReport | null;
143
+ }
144
+ /** Shape every verdict rule returns — consumed by `summarize`. */
145
+ export interface DoctorVerdict {
146
+ status: DoctorStatus;
147
+ diagnosis?: DoctorDiagnosis;
148
+ recovery: PublishRecovery;
149
+ summary: string;
150
+ }
151
+ /** Inputs shared by every verdict rule, derived once per run. */
152
+ export interface VerdictRuleContext {
153
+ checks: DoctorCheck[];
154
+ vctx: VerdictContext;
155
+ findCheck(name: string): DoctorCheck | undefined;
156
+ /** `checks` minus rows excluded from verdict derivation (see builder). */
157
+ verdictChecks: DoctorCheck[];
158
+ /** Container stopped/exited (but present), or failing its health probe. */
159
+ containerDown: boolean;
160
+ }
161
+ /**
162
+ * One row of the verdict rule table. `when` decides whether the rule
163
+ * applies; `verdict` builds the outcome and is only called after
164
+ * `when` returned true for the same context.
165
+ */
166
+ export interface VerdictRule {
167
+ /** Stable identifier — tests pin rule order by id. Never reuse one. */
168
+ id: string;
169
+ when(ctx: VerdictRuleContext): boolean;
170
+ verdict(ctx: VerdictRuleContext): DoctorVerdict;
171
+ }
172
+ export declare function buildVerdictRuleContext(checks: DoctorCheck[], vctx: VerdictContext): VerdictRuleContext;
173
+ /**
174
+ * Verdict rule table — evaluated top-to-bottom, FIRST MATCH WINS.
175
+ * Array order is load-bearing: earlier rules shadow later ones, and
176
+ * several rules are only correct because a more specific rule sits
177
+ * above them. Each rule carries its ordering rationale as a comment;
178
+ * insert new rules at a justified position, never just append.
179
+ *
180
+ * FUTURE12 Phase 2a — pattern-match the check list against the
181
+ * blocking cases doctor handles today. Anything we don't recognise
182
+ * yet falls through to a safe `needs_action` / `ask_user` so an
183
+ * agent doesn't think it can auto-resolve from a generic failure.
184
+ * Phase 2b adds the deploy/build/runtime/replaced-specific paths.
185
+ *
186
+ * Two Codex P2 fixes baked into Phase 2a (review of fc267a3):
187
+ *
188
+ * 1. An invalid cwd `percher.toml` MUST NOT block the verdict when
189
+ * the caller passed `--app` — that target was resolved
190
+ * independently of cwd toml. Pre-fix, `doctor --app foo` against
191
+ * a healthy app would still come back blocked/config_invalid if
192
+ * the local toml happened to be broken.
193
+ * 2. Transitional states (`lastDeploy.status` queued/building/
194
+ * deploying, or `app.status` provisioning) MUST surface as
195
+ * `in_progress` + `wait_deploy`, not the warn-collapsed `ok`.
196
+ * Pre-fix, those states looked fully resolved to MCP agents and
197
+ * the new `in_progress` doctor status was effectively
198
+ * unreachable.
199
+ */
200
+ export declare const VERDICT_RULES: ReadonlyArray<VerdictRule>;
75
201
  export {};
76
202
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,UAAU,EAShB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBA2B5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAKT;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+azF"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,UAAU,EAShB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBA2B5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAKT;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqbzF;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,eAAe,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACzE;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChD;sEACkE;IAClE,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AA+BD,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACjD,0EAA0E;IAC1E,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,2EAA2E;IAC3E,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,kBAAkB,GAAG,aAAa,CAAC;CACjD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,cAAc,GACnB,kBAAkB,CAqBpB;AAsDD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,WAAW,CAgkBpD,CAAC"}