@lukoweb/apitogo 0.1.86 → 0.1.88

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 (75) hide show
  1. package/dist/cli/cli.js +10755 -1987
  2. package/dist/declarations/cli/platform/apply/index.d.ts +3 -0
  3. package/dist/declarations/cli/platform/client/deploy-server.d.ts +16 -0
  4. package/dist/declarations/cli/platform/client/platform-api.d.ts +397 -0
  5. package/dist/declarations/cli/platform/config.d.ts +20 -0
  6. package/dist/declarations/cli/platform/errors.d.ts +16 -0
  7. package/dist/declarations/cli/platform/helpers/backend-packaging.d.ts +11 -0
  8. package/dist/declarations/cli/platform/helpers/deploy-artifact-hash.d.ts +14 -0
  9. package/dist/declarations/cli/platform/helpers/dev-portal-backend-job.d.ts +25 -0
  10. package/dist/declarations/cli/platform/helpers/dev-portal-backend.d.ts +11 -0
  11. package/dist/declarations/cli/platform/helpers/dev-portal-landing.d.ts +99 -0
  12. package/dist/declarations/cli/platform/helpers/dev-portal-manifest.d.ts +167 -0
  13. package/dist/declarations/cli/platform/helpers/dev-portal-plan-sync.d.ts +20 -0
  14. package/dist/declarations/cli/platform/helpers/dev-portal-secrets.d.ts +61 -0
  15. package/dist/declarations/cli/platform/helpers/dev-portal-settings-kinds.d.ts +8 -0
  16. package/dist/declarations/cli/platform/helpers/dev-portal-site-api-url.d.ts +12 -0
  17. package/dist/declarations/cli/platform/helpers/dev-portal-site-validation.d.ts +22 -0
  18. package/dist/declarations/cli/platform/helpers/dev-portal-urls.d.ts +17 -0
  19. package/dist/declarations/cli/platform/helpers/fetch-retry.d.ts +17 -0
  20. package/dist/declarations/cli/platform/helpers/free-projects-quota.d.ts +14 -0
  21. package/dist/declarations/cli/platform/helpers/gateway-plan-sync.d.ts +26 -0
  22. package/dist/declarations/cli/platform/helpers/gateway-readiness.d.ts +11 -0
  23. package/dist/declarations/cli/platform/helpers/job-status.d.ts +12 -0
  24. package/dist/declarations/cli/platform/helpers/merge-dev-portal-settings.d.ts +26 -0
  25. package/dist/declarations/cli/platform/helpers/npm-build.d.ts +34 -0
  26. package/dist/declarations/cli/platform/helpers/openapi-gateway-servers.d.ts +23 -0
  27. package/dist/declarations/cli/platform/helpers/openapi.d.ts +24 -0
  28. package/dist/declarations/cli/platform/helpers/package-files.d.ts +1 -0
  29. package/dist/declarations/cli/platform/helpers/paid-gateway-platform-compat.d.ts +22 -0
  30. package/dist/declarations/cli/platform/helpers/platform-plan-catalog.d.ts +27 -0
  31. package/dist/declarations/cli/platform/helpers/platform-plan.d.ts +17 -0
  32. package/dist/declarations/cli/platform/helpers/poll.d.ts +21 -0
  33. package/dist/declarations/cli/platform/helpers/progress.d.ts +45 -0
  34. package/dist/declarations/cli/platform/helpers/project-name.d.ts +8 -0
  35. package/dist/declarations/cli/platform/helpers/public-routes.d.ts +4 -0
  36. package/dist/declarations/cli/platform/helpers/publish-ledger.d.ts +30 -0
  37. package/dist/declarations/cli/platform/helpers/publish-preflight.d.ts +60 -0
  38. package/dist/declarations/cli/platform/helpers/status.d.ts +7 -0
  39. package/dist/declarations/cli/platform/helpers/stripe-webhook.d.ts +3 -0
  40. package/dist/declarations/cli/platform/helpers/tarball.d.ts +11 -0
  41. package/dist/declarations/cli/platform/helpers/validate-dev-portal-readiness.d.ts +48 -0
  42. package/dist/declarations/cli/platform/helpers/wait-for-gateway-actions.d.ts +9 -0
  43. package/dist/declarations/cli/platform/helpers/warm-pool.d.ts +35 -0
  44. package/dist/declarations/cli/platform/helpers/zip.d.ts +6 -0
  45. package/dist/declarations/cli/platform/tools/backend.d.ts +45 -0
  46. package/dist/declarations/cli/platform/tools/dev-portal-bootstrap-shared.d.ts +25 -0
  47. package/dist/declarations/cli/platform/tools/dev-portal-publish.d.ts +45 -0
  48. package/dist/declarations/cli/platform/tools/dev-portal-site-build.d.ts +12 -0
  49. package/dist/declarations/cli/platform/tools/dev-portal.d.ts +84 -0
  50. package/dist/declarations/cli/platform/tools/gateway.d.ts +140 -0
  51. package/dist/declarations/cli/platform/tools/infrastructure.d.ts +47 -0
  52. package/dist/declarations/cli/platform/tools/lifecycle.d.ts +40 -0
  53. package/dist/declarations/cli/platform/tools/platform-plan.d.ts +43 -0
  54. package/dist/declarations/cli/platform/tools/projects.d.ts +27 -0
  55. package/dist/declarations/cli/platform/tools/subscription.d.ts +13 -0
  56. package/dist/declarations/config/landing-manifest.d.ts +5 -0
  57. package/dist/declarations/config/local-manifest.d.ts +5 -0
  58. package/dist/declarations/config/validators/ModulesSchema.d.ts +21 -0
  59. package/dist/declarations/config/validators/ZudokuConfig.d.ts +5 -0
  60. package/dist/flat-config.d.ts +2 -0
  61. package/docs/cli/commands.md +14 -9
  62. package/docs/cli/go-live.md +2 -2
  63. package/docs/cli/setup.md +1 -1
  64. package/docs/guides/environment-variables.md +1 -1
  65. package/package.json +14 -2
  66. package/src/app/apitogoBrandTheme.ts +30 -29
  67. package/src/app/defaultTheme.css +56 -56
  68. package/src/config/validators/ModulesSchema.ts +2 -0
  69. package/src/lib/authentication/providers/dev-portal-auth-pages.tsx +45 -18
  70. package/src/lib/components/Header.tsx +8 -5
  71. package/src/lib/components/HeaderAuthActions.tsx +5 -7
  72. package/src/lib/components/Layout.tsx +13 -4
  73. package/src/lib/components/Main.tsx +3 -2
  74. package/src/lib/components/MobileTopNavigation.tsx +2 -5
  75. package/src/lib/components/ThemeSwitch.tsx +41 -25
@@ -0,0 +1,40 @@
1
+ import type { PlatformApiClient } from "../client/platform-api.js";
2
+ import type { ApitogoConfig } from "../config.js";
3
+ import type { ProgressReporter } from "../helpers/progress.js";
4
+ interface BootstrapStep {
5
+ step: string;
6
+ status: string;
7
+ detail?: unknown;
8
+ }
9
+ export declare function resolveBootstrapProjectId(client: PlatformApiClient, args: {
10
+ name: string;
11
+ description?: string;
12
+ modules: string[];
13
+ }, steps: BootstrapStep[]): Promise<{
14
+ projectId: string;
15
+ resumed: boolean;
16
+ }>;
17
+ export declare function handleBootstrapProject(client: PlatformApiClient, config: ApitogoConfig, args: {
18
+ name: string;
19
+ description?: string;
20
+ modules?: string[];
21
+ activatedModules?: string[];
22
+ selectFreePlan?: boolean;
23
+ wait?: boolean;
24
+ timeoutMs?: number;
25
+ pollIntervalMs?: number;
26
+ configureGatewayBaseline?: boolean;
27
+ authMode?: "bringYourOwnOidc" | "platformManagedEntra";
28
+ oidcMetadataUrl?: string;
29
+ oidcAllowedIssuers?: string[];
30
+ oidcAudiences?: string[];
31
+ limitsJson?: string;
32
+ publicHealthActionKey?: string;
33
+ }, progress?: ProgressReporter): Promise<string>;
34
+ export declare function handleTeardownProject(client: PlatformApiClient, config: ApitogoConfig, args: {
35
+ projectId?: string;
36
+ wait?: boolean;
37
+ timeoutMs?: number;
38
+ pollIntervalMs?: number;
39
+ }, progress?: ProgressReporter): Promise<string>;
40
+ export {};
@@ -0,0 +1,43 @@
1
+ import type { PlatformApiClient } from "../client/platform-api.js";
2
+ import { type ApitogoConfig } from "../config.js";
3
+ import type { ManifestPlanInput } from "../helpers/dev-portal-manifest.js";
4
+ import type { ProgressReporter } from "../helpers/progress.js";
5
+ export type PlatformPlanChoice = "free" | "starter" | "professional";
6
+ export declare function loadPlatformPlanSelectionPayload(client: PlatformApiClient): Promise<{
7
+ note: string;
8
+ freeProjectsQuota?: import("../helpers/free-projects-quota.js").FreeProjectsQuota | undefined;
9
+ freeProjectsQuotaHint?: string | undefined;
10
+ freePlanAvailable?: boolean | undefined;
11
+ platformPlanCatalog: import("../helpers/platform-plan-catalog.js").PlatformPlanOption[];
12
+ platformPlanUserPrompt: string;
13
+ platformPlanSelectionAgentInstruction: string;
14
+ }>;
15
+ export declare function handleListPlatformPlans(client: PlatformApiClient): Promise<string>;
16
+ export declare function handleWaitForPlatformPlan(client: PlatformApiClient, config: ApitogoConfig, args: {
17
+ projectId?: string;
18
+ wait?: boolean;
19
+ timeoutMs?: number;
20
+ pollIntervalMs?: number;
21
+ }, progress?: ProgressReporter): Promise<string>;
22
+ export declare function handleEnsurePlatformPlan(client: PlatformApiClient, config: ApitogoConfig, args: {
23
+ projectId?: string;
24
+ projectName?: string;
25
+ plan: PlatformPlanChoice;
26
+ currency?: string;
27
+ wait?: boolean;
28
+ timeoutMs?: number;
29
+ pollIntervalMs?: number;
30
+ modules?: string[];
31
+ }, progress?: ProgressReporter): Promise<string>;
32
+ export declare function assertPlatformPlanReadyForPublish(client: PlatformApiClient, projectId: string): Promise<{
33
+ blocked: true;
34
+ payload: Record<string, unknown>;
35
+ } | {
36
+ blocked: false;
37
+ }>;
38
+ export declare function assertPaidGatewayPlansAllowedForPublish(client: PlatformApiClient, projectId: string, plans: ManifestPlanInput[] | undefined): Promise<{
39
+ blocked: true;
40
+ payload: Record<string, unknown>;
41
+ } | {
42
+ blocked: false;
43
+ }>;
@@ -0,0 +1,27 @@
1
+ import type { PlatformApiClient } from "../client/platform-api.js";
2
+ import { type ApitogoConfig } from "../config.js";
3
+ import type { ProgressReporter } from "../helpers/progress.js";
4
+ export declare function handleWhoami(client: PlatformApiClient): Promise<string>;
5
+ export declare function handleListProjects(client: PlatformApiClient): Promise<string>;
6
+ export declare function handleGetProject(client: PlatformApiClient, config: ApitogoConfig, args: {
7
+ projectId?: string;
8
+ includeInfrastructureStatus?: boolean;
9
+ }): Promise<string>;
10
+ export declare function handleCreateProject(client: PlatformApiClient, args: {
11
+ name: string;
12
+ description?: string;
13
+ activatedModules?: string[];
14
+ ownerTenantId?: string;
15
+ }): Promise<string>;
16
+ export declare function handleUpdateProject(client: PlatformApiClient, config: ApitogoConfig, args: {
17
+ projectId?: string;
18
+ name: string;
19
+ description?: string;
20
+ activatedModules?: string[];
21
+ }): Promise<string>;
22
+ export declare function handleDeleteProject(client: PlatformApiClient, config: ApitogoConfig, args: {
23
+ projectId?: string;
24
+ wait?: boolean;
25
+ timeoutMs?: number;
26
+ pollIntervalMs?: number;
27
+ }, progress?: ProgressReporter): Promise<string>;
@@ -0,0 +1,13 @@
1
+ import type { PlatformApiClient } from "../client/platform-api.js";
2
+ import { type ApitogoConfig } from "../config.js";
3
+ export declare function handleGetSubscription(client: PlatformApiClient, config: ApitogoConfig, args: {
4
+ projectId?: string;
5
+ }): Promise<string>;
6
+ export declare function handleSelectFreePlan(client: PlatformApiClient, config: ApitogoConfig, args: {
7
+ projectId?: string;
8
+ }): Promise<string>;
9
+ export declare function handleCreateCheckoutSession(client: PlatformApiClient, config: ApitogoConfig, args: {
10
+ projectId?: string;
11
+ planSlug: string;
12
+ currency?: string;
13
+ }): Promise<string>;
@@ -44,12 +44,17 @@ export declare const LandingManifestContentSchema: z.ZodOptional<z.ZodObject<{
44
44
  browseAllHref: z.ZodOptional<z.ZodString>;
45
45
  browseAllLabel: z.ZodOptional<z.ZodString>;
46
46
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
47
+ layout: z.ZodOptional<z.ZodEnum<{
48
+ grid: "grid";
49
+ list: "list";
50
+ }>>;
47
51
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
48
52
  name: z.ZodString;
49
53
  path: z.ZodString;
50
54
  icon: z.ZodOptional<z.ZodString>;
51
55
  latency: z.ZodOptional<z.ZodString>;
52
56
  summary: z.ZodOptional<z.ZodString>;
57
+ method: z.ZodOptional<z.ZodString>;
53
58
  }, z.core.$strip>>>;
54
59
  }, z.core.$strip>>;
55
60
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -137,12 +137,17 @@ export declare const DevPortalLocalManifestSchema: z.ZodObject<{
137
137
  browseAllHref: z.ZodOptional<z.ZodString>;
138
138
  browseAllLabel: z.ZodOptional<z.ZodString>;
139
139
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
140
+ layout: z.ZodOptional<z.ZodEnum<{
141
+ grid: "grid";
142
+ list: "list";
143
+ }>>;
140
144
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
141
145
  name: z.ZodString;
142
146
  path: z.ZodString;
143
147
  icon: z.ZodOptional<z.ZodString>;
144
148
  latency: z.ZodOptional<z.ZodString>;
145
149
  summary: z.ZodOptional<z.ZodString>;
150
+ method: z.ZodOptional<z.ZodString>;
146
151
  }, z.core.$strip>>>;
147
152
  }, z.core.$strip>>;
148
153
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -63,6 +63,7 @@ export declare const LandingApiShowcaseItemSchema: z.ZodObject<{
63
63
  icon: z.ZodOptional<z.ZodString>;
64
64
  latency: z.ZodOptional<z.ZodString>;
65
65
  summary: z.ZodOptional<z.ZodString>;
66
+ method: z.ZodOptional<z.ZodString>;
66
67
  }, z.core.$strip>;
67
68
  export declare const LandingApiShowcaseSchema: z.ZodOptional<z.ZodObject<{
68
69
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -71,12 +72,17 @@ export declare const LandingApiShowcaseSchema: z.ZodOptional<z.ZodObject<{
71
72
  browseAllHref: z.ZodOptional<z.ZodString>;
72
73
  browseAllLabel: z.ZodOptional<z.ZodString>;
73
74
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
75
+ layout: z.ZodOptional<z.ZodEnum<{
76
+ grid: "grid";
77
+ list: "list";
78
+ }>>;
74
79
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
75
80
  name: z.ZodString;
76
81
  path: z.ZodString;
77
82
  icon: z.ZodOptional<z.ZodString>;
78
83
  latency: z.ZodOptional<z.ZodString>;
79
84
  summary: z.ZodOptional<z.ZodString>;
85
+ method: z.ZodOptional<z.ZodString>;
80
86
  }, z.core.$strip>>>;
81
87
  }, z.core.$strip>>;
82
88
  export declare const LandingPricingCtaSchema: z.ZodOptional<z.ZodObject<{
@@ -174,12 +180,17 @@ export declare const LandingContentSchema: z.ZodOptional<z.ZodObject<{
174
180
  browseAllHref: z.ZodOptional<z.ZodString>;
175
181
  browseAllLabel: z.ZodOptional<z.ZodString>;
176
182
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
183
+ layout: z.ZodOptional<z.ZodEnum<{
184
+ grid: "grid";
185
+ list: "list";
186
+ }>>;
177
187
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
178
188
  name: z.ZodString;
179
189
  path: z.ZodString;
180
190
  icon: z.ZodOptional<z.ZodString>;
181
191
  latency: z.ZodOptional<z.ZodString>;
182
192
  summary: z.ZodOptional<z.ZodString>;
193
+ method: z.ZodOptional<z.ZodString>;
183
194
  }, z.core.$strip>>>;
184
195
  }, z.core.$strip>>;
185
196
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -303,12 +314,17 @@ export declare const LandingModuleSchema: z.ZodObject<{
303
314
  browseAllHref: z.ZodOptional<z.ZodString>;
304
315
  browseAllLabel: z.ZodOptional<z.ZodString>;
305
316
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
317
+ layout: z.ZodOptional<z.ZodEnum<{
318
+ grid: "grid";
319
+ list: "list";
320
+ }>>;
306
321
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
307
322
  name: z.ZodString;
308
323
  path: z.ZodString;
309
324
  icon: z.ZodOptional<z.ZodString>;
310
325
  latency: z.ZodOptional<z.ZodString>;
311
326
  summary: z.ZodOptional<z.ZodString>;
327
+ method: z.ZodOptional<z.ZodString>;
312
328
  }, z.core.$strip>>>;
313
329
  }, z.core.$strip>>;
314
330
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -553,12 +569,17 @@ export declare const ModulesSchema: z.ZodOptional<z.ZodObject<{
553
569
  browseAllHref: z.ZodOptional<z.ZodString>;
554
570
  browseAllLabel: z.ZodOptional<z.ZodString>;
555
571
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
572
+ layout: z.ZodOptional<z.ZodEnum<{
573
+ grid: "grid";
574
+ list: "list";
575
+ }>>;
556
576
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
557
577
  name: z.ZodString;
558
578
  path: z.ZodString;
559
579
  icon: z.ZodOptional<z.ZodString>;
560
580
  latency: z.ZodOptional<z.ZodString>;
561
581
  summary: z.ZodOptional<z.ZodString>;
582
+ method: z.ZodOptional<z.ZodString>;
562
583
  }, z.core.$strip>>>;
563
584
  }, z.core.$strip>>;
564
585
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -6933,12 +6933,17 @@ export declare const ZudokuConfig: z.ZodObject<{
6933
6933
  browseAllHref: z.ZodOptional<z.ZodString>;
6934
6934
  browseAllLabel: z.ZodOptional<z.ZodString>;
6935
6935
  autoFromOpenApi: z.ZodOptional<z.ZodBoolean>;
6936
+ layout: z.ZodOptional<z.ZodEnum<{
6937
+ grid: "grid";
6938
+ list: "list";
6939
+ }>>;
6936
6940
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
6937
6941
  name: z.ZodString;
6938
6942
  path: z.ZodString;
6939
6943
  icon: z.ZodOptional<z.ZodString>;
6940
6944
  latency: z.ZodOptional<z.ZodString>;
6941
6945
  summary: z.ZodOptional<z.ZodString>;
6946
+ method: z.ZodOptional<z.ZodString>;
6942
6947
  }, z.core.$strip>>>;
6943
6948
  }, z.core.$strip>>;
6944
6949
  pricingCta: z.ZodOptional<z.ZodObject<{
@@ -575,12 +575,14 @@ export interface _Schema21 {
575
575
  browseAllHref?: string
576
576
  browseAllLabel?: string
577
577
  autoFromOpenApi?: boolean
578
+ layout?: ("grid" | "list")
578
579
  items?: {
579
580
  name: string
580
581
  path: string
581
582
  icon?: string
582
583
  latency?: string
583
584
  summary?: string
585
+ method?: string
584
586
  }[]
585
587
  }
586
588
  pricingCta?: {
@@ -4,17 +4,20 @@ description: APItoGo CLI command catalog by category.
4
4
  sidebar_icon: wrench
5
5
  ---
6
6
 
7
- Commands are exposed by the **`apitogo`** binary (`@lukoweb/apitogo`). Platform commands delegate to
8
- `@lukoweb/apitogo-mcp` (`apitogo-apply`, `apitogo-status`, `apitogo-teardown`).
7
+ Commands are exposed by the **`apitogo`** binary (`@lukoweb/apitogo`). The CLI is the **source of
8
+ truth** for init, config, apply, status, teardown, project create, and check. MCP tools spawn these
9
+ same commands so agents and humans get identical behavior.
9
10
 
10
11
  ## Lifecycle (prefer these)
11
12
 
12
13
  | Command | Role |
13
14
  | ------- | ---- |
14
- | `init` | Scaffold portal locally (no platform calls) |
15
- | `config` / `make-config` | Write or update `apitogo.config.json` (interactive: backend, OpenAPI, pages, plans) |
15
+ | `init` | Scaffold portal (create-apitogo + OpenAPI discovery + secrets) |
16
+ | `config` / `make-config` | Write or update `apitogo.config.json` (interactive or flags) |
16
17
  | `dev` | Local preview server |
17
18
  | `build` | Production build (`--preview` to serve locally) |
19
+ | `check` | Publish readiness (secrets, manifest, site validation) |
20
+ | `project create` | Create a platform project (plan unselected) |
18
21
  | `apply` | Publish config to platform (apihub + portal) |
19
22
  | `status` | Account, project, and live readiness |
20
23
  | `teardown --yes` | Delete the linked platform project |
@@ -23,10 +26,10 @@ Commands are exposed by the **`apitogo`** binary (`@lukoweb/apitogo`). Platform
23
26
 
24
27
  | Command | Role |
25
28
  | ------- | ---- |
26
- | `init [dir]` | Create `package.json`, stubs, and initial `apitogo.config.json` |
27
- | `config` | Interactive on TTY: backend, OpenAPI, pages, plans (apply each immediately); flags for site/theme/auth |
29
+ | `init [dir]` | Named folder; `--install` (default), `--overwrite`, `--json`, `--openapi-search` |
30
+ | `config` | Interactive on TTY; flags: `--openapi`, `--page-*`, `--plan`, `--backend`, `--theme`, `--patch`, `--json` |
28
31
 
29
- `npm create @lukoweb/apitogo@latest` is an interactive alternative to `init` for new folders.
32
+ `npm create @lukoweb/apitogo@latest` remains an interactive alternative for new folders.
30
33
 
31
34
  See [Make config (CLI)](../configuration/make-config.mdx) for all `config` flags.
32
35
 
@@ -42,6 +45,8 @@ See [Make config (CLI)](../configuration/make-config.mdx) for all `config` flags
42
45
 
43
46
  | Command | Role |
44
47
  | ------- | ---- |
48
+ | `project create --name` | Create platform project only |
49
+ | `check` | Dry-run publish readiness |
45
50
  | `apply` | Full publish — project, plans, apihub, portal backend/frontend |
46
51
  | `apply --only <resource>` | Limit to `apihub`, `portal-backend`, or `portal-frontend` |
47
52
  | `apply --force` | Redeploy selected resources even when healthy |
@@ -50,7 +55,7 @@ See [Make config (CLI)](../configuration/make-config.mdx) for all `config` flags
50
55
  | `status` | Whoami + project + live verification |
51
56
  | `teardown --yes` | Delete platform project (confirmation required) |
52
57
 
53
- Env: `APITOGO_API_KEY_ID`, `APITOGO_API_SECRET`. Optional: `APITOGO_API_URL`, `APITOGO_MCP_PATH`.
58
+ Env: `APITOGO_API_KEY_ID`, `APITOGO_API_SECRET`. Optional: `APITOGO_API_URL`.
54
59
 
55
60
  ## Hand-edit exceptions
56
61
 
@@ -77,4 +82,4 @@ These print a redirect message — use the replacement:
77
82
  - [Overview](./overview.md)
78
83
  - [Shape](./shape.md)
79
84
  - [Go live](./go-live.md)
80
- - [MCP tools](../mcp/tools.md) — agent tool catalog
85
+ - [MCP tools](../mcp/tools.md) — agent tool catalog (spawn the CLI)
@@ -6,8 +6,8 @@ sidebar_icon: rocket
6
6
  ---
7
7
 
8
8
  **Go live** publishes your shaped portal to APItoGo hosting, optionally deploys the backend, upserts
9
- gateway plans, and verifies the live site. `apitogo apply` uses the same engine as MCP
10
- `publish_dev_portal`.
9
+ gateway plans, and verifies the live site. `apitogo apply` is the source of truth; MCP
10
+ `publish_dev_portal` spawns the same CLI.
11
11
 
12
12
  ## Before you publish
13
13
 
package/docs/cli/setup.md CHANGED
@@ -85,7 +85,7 @@ Optional:
85
85
  | Variable | Purpose |
86
86
  | ------------------ | ---------------------------------------------------- |
87
87
  | `APITOGO_API_URL` | Override platform API base URL |
88
- | `APITOGO_MCP_PATH` | Local `@lukoweb/apitogo-mcp` checkout for apply/status/teardown |
88
+ | `APITOGO_CLI_PATH` | Local `@lukoweb/apitogo` / doc-tool checkout for MCP spawn |
89
89
 
90
90
  Never commit secrets. Site auth secrets (OIDC, Stripe) belong in the portal **`.env`** as
91
91
  `APITOGO_CONFIG_AUTHENTICATION__*` — see [Go live](./go-live.md).
@@ -87,6 +87,6 @@ interface ImportMeta {
87
87
  | -------- | ------- |
88
88
  | `APITOGO_API_KEY_ID` / `APITOGO_API_SECRET` | Required for MCP and CLI apply/status/teardown |
89
89
  | `APITOGO_DOC_TOOL_PATH` | Optional local doc-tool for scaffold |
90
- | `APITOGO_MCP_PATH` | Optional local MCP checkout for CLI apply/status/teardown |
90
+ | `APITOGO_CLI_PATH` | Optional local `@lukoweb/apitogo` / doc-tool checkout for MCP spawn |
91
91
 
92
92
  See [MCP overview](../mcp/overview.md) and [CLI overview](../cli/overview.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukoweb/apitogo",
3
- "version": "0.1.86",
3
+ "version": "0.1.88",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css",
@@ -161,6 +161,10 @@
161
161
  "./config-loader": {
162
162
  "types": "./dist/declarations/config/apitogo-config-loader.d.ts",
163
163
  "default": "./src/config/apitogo-config-loader.ts"
164
+ },
165
+ "./apply": {
166
+ "types": "./dist/declarations/cli/platform/apply/index.d.ts",
167
+ "default": "./src/cli/platform/apply/index.ts"
164
168
  }
165
169
  },
166
170
  "scripts": {
@@ -175,6 +179,7 @@
175
179
  },
176
180
  "dependencies": {
177
181
  "@apidevtools/json-schema-ref-parser": "15.3.1",
182
+ "@apidevtools/swagger-parser": "^12.1.0",
178
183
  "@envelop/core": "5.5.1",
179
184
  "@graphql-typed-document-node/core": "3.2.0",
180
185
  "@hono/node-server": "1.19.11",
@@ -223,6 +228,7 @@
223
228
  "@zudoku/httpsnippet": "10.0.9",
224
229
  "@zudoku/react-helmet-async": "2.0.5",
225
230
  "@zuplo/mcp": "0.0.32",
231
+ "archiver": "^8.0.0",
226
232
  "bs58": "6.0.0",
227
233
  "class-variance-authority": "0.7.1",
228
234
  "clsx": "2.1.1",
@@ -244,6 +250,7 @@
244
250
  "hast-util-to-string": "3.0.1",
245
251
  "hono": "4.12.5",
246
252
  "http-terminator": "3.2.0",
253
+ "ignore": "^7.0.5",
247
254
  "javascript-stringify": "2.1.0",
248
255
  "json-schema-to-typescript-lite": "15.0.0",
249
256
  "loglevel": "1.9.2",
@@ -280,9 +287,9 @@
280
287
  "shiki": "3.23.0",
281
288
  "sitemap": "9.0.1",
282
289
  "strip-ansi": "7.2.0",
283
- "tar": "7.5.10",
284
290
  "tailwind-merge": "3.5.0",
285
291
  "tailwindcss": "4.2.1",
292
+ "tar": "7.5.10",
286
293
  "tw-animate-css": "1.4.0",
287
294
  "unified": "11.0.5",
288
295
  "unist-util-visit": "5.1.0",
@@ -302,6 +309,7 @@
302
309
  "@testing-library/jest-dom": "6.9.1",
303
310
  "@testing-library/react": "16.3.2",
304
311
  "@testing-library/user-event": "14.6.1",
312
+ "@types/archiver": "^8.0.0",
305
313
  "@types/estree": "1.0.8",
306
314
  "@types/glob-parent": "5.1.3",
307
315
  "@types/hast": "3.0.4",
@@ -483,6 +491,10 @@
483
491
  "./config-loader": {
484
492
  "types": "./dist/declarations/config/apitogo-config-loader.d.ts",
485
493
  "default": "./src/config/apitogo-config-loader.ts"
494
+ },
495
+ "./apply": {
496
+ "types": "./dist/declarations/cli/platform/apply/index.d.ts",
497
+ "default": "./src/cli/platform/apply/index.ts"
486
498
  }
487
499
  },
488
500
  "access": "public"
@@ -3,44 +3,45 @@ import type { ZudokuConfig } from "../config/validators/ZudokuConfig.js";
3
3
  /**
4
4
  * APIToGo brand theme for per-site overrides via apitogo.config.
5
5
  * Keep in sync with defaultTheme.css (full palette including sidebar/chart tokens).
6
+ * Sourced from Sample-API-Website-UI (teal brand + navy/mist surfaces).
6
7
  */
7
8
  export const apitogoBrandTheme: NonNullable<ZudokuConfig["theme"]> = {
8
9
  fonts: {
9
- sans: "IBM Plex Sans",
10
+ sans: "Inter",
10
11
  mono: "JetBrains Mono",
11
12
  },
12
13
  light: {
13
- background: "#F5F6F9",
14
- foreground: "#0E1016",
15
- card: "#FFFFFF",
16
- cardForeground: "#0E1016",
17
- primary: "#E11D2A",
14
+ background: "#ffffff",
15
+ foreground: "#252b3b",
16
+ card: "#ffffff",
17
+ cardForeground: "#252b3b",
18
+ primary: "#0d9488",
18
19
  primaryForeground: "#ffffff",
19
- secondary: "#FAFBFC",
20
- secondaryForeground: "#0E1016",
21
- muted: "#FAFBFC",
22
- mutedForeground: "#565E70",
23
- accent: "rgba(225, 29, 42, 0.08)",
24
- accentForeground: "#E11D2A",
25
- border: "#E6E8EF",
26
- input: "#D6DAE3",
27
- ring: "#E11D2A",
20
+ secondary: "#f4f6fb",
21
+ secondaryForeground: "#252b3b",
22
+ muted: "#e9edf5",
23
+ mutedForeground: "rgba(37, 43, 59, 0.55)",
24
+ accent: "rgba(13, 148, 136, 0.1)",
25
+ accentForeground: "#0d9488",
26
+ border: "#d9deea",
27
+ input: "#d9deea",
28
+ ring: "#0d9488",
28
29
  },
29
30
  dark: {
30
- background: "#0B0D12",
31
- foreground: "#EDEFF5",
32
- card: "#14171F",
33
- cardForeground: "#EDEFF5",
34
- primary: "#F23645",
31
+ background: "#252b3b",
32
+ foreground: "#e9edf5",
33
+ card: "#2b3243",
34
+ cardForeground: "#e9edf5",
35
+ primary: "#0d9488",
35
36
  primaryForeground: "#ffffff",
36
- secondary: "#191D27",
37
- secondaryForeground: "#EDEFF5",
38
- muted: "#191D27",
39
- mutedForeground: "#A6AEBF",
40
- accent: "rgba(242, 54, 69, 0.13)",
41
- accentForeground: "#F23645",
42
- border: "#252B37",
43
- input: "#333A48",
44
- ring: "#F23645",
37
+ secondary: "#1e2330",
38
+ secondaryForeground: "#e9edf5",
39
+ muted: "#1e2330",
40
+ mutedForeground: "rgba(217, 222, 234, 0.58)",
41
+ accent: "rgba(13, 148, 136, 0.12)",
42
+ accentForeground: "#0d9488",
43
+ border: "rgba(217, 222, 234, 0.18)",
44
+ input: "#323a4f",
45
+ ring: "#0d9488",
45
46
  },
46
47
  };
@@ -1,77 +1,77 @@
1
1
  /**
2
2
  * Default APIToGo brand theme for scaffolded sites.
3
- * Color tokens sourced from webapp-template/APIToGo.dc.html (:root dark + light override).
3
+ * Color tokens sourced from Sample-API-Website-UI (teal brand + navy/mist surfaces).
4
4
  */
5
5
 
6
6
  :root {
7
7
  --radius: 0.625rem;
8
- --background: #f5f6f9;
9
- --foreground: #0e1016;
8
+ --background: #ffffff;
9
+ --foreground: #252b3b;
10
10
  --card: #ffffff;
11
- --card-foreground: #0e1016;
11
+ --card-foreground: #252b3b;
12
12
  --popover: #ffffff;
13
- --popover-foreground: #0e1016;
14
- --primary: #e11d2a;
13
+ --popover-foreground: #252b3b;
14
+ --primary: #0d9488;
15
15
  --primary-foreground: #ffffff;
16
- --secondary: #fafbfc;
17
- --secondary-foreground: #0e1016;
18
- --muted: #fafbfc;
19
- --muted-foreground: #565e70;
20
- --accent: rgba(225, 29, 42, 0.08);
21
- --accent-foreground: #e11d2a;
22
- --destructive: #e11d2a;
16
+ --secondary: #f4f6fb;
17
+ --secondary-foreground: #252b3b;
18
+ --muted: #e9edf5;
19
+ --muted-foreground: rgba(37, 43, 59, 0.55);
20
+ --accent: rgba(13, 148, 136, 0.1);
21
+ --accent-foreground: #0d9488;
22
+ --destructive: #e02424;
23
23
  --warning: oklch(0.84 0.16 84);
24
24
  --warning-foreground: oklch(0.47 0.14 46.2);
25
- --border: #e6e8ef;
26
- --input: #d6dae3;
27
- --ring: #e11d2a;
28
- --chart-1: #e11d2a;
29
- --chart-2: #0e9e63;
30
- --chart-3: #4e5ac0;
31
- --chart-4: #8a92a3;
32
- --chart-5: #565e70;
25
+ --border: #d9deea;
26
+ --input: #d9deea;
27
+ --ring: #0d9488;
28
+ --chart-1: #0d9488;
29
+ --chart-2: #0e9f6e;
30
+ --chart-3: #3f83f8;
31
+ --chart-4: #8b95af;
32
+ --chart-5: #454e66;
33
33
  --sidebar: #ffffff;
34
- --sidebar-foreground: #0e1016;
35
- --sidebar-primary: #e11d2a;
34
+ --sidebar-foreground: #252b3b;
35
+ --sidebar-primary: #0d9488;
36
36
  --sidebar-primary-foreground: #ffffff;
37
- --sidebar-accent: #fafbfc;
38
- --sidebar-accent-foreground: #0e1016;
39
- --sidebar-border: #e6e8ef;
40
- --sidebar-ring: #e11d2a;
37
+ --sidebar-accent: #f4f6fb;
38
+ --sidebar-accent-foreground: #252b3b;
39
+ --sidebar-border: #d9deea;
40
+ --sidebar-ring: #0d9488;
41
41
  }
42
42
 
43
43
  .dark {
44
- --background: #0b0d12;
45
- --foreground: #edeff5;
46
- --card: #14171f;
47
- --card-foreground: #edeff5;
48
- --popover: #1d222d;
49
- --popover-foreground: #edeff5;
50
- --primary: #f23645;
44
+ --background: #252b3b;
45
+ --foreground: #e9edf5;
46
+ --card: #2b3243;
47
+ --card-foreground: #e9edf5;
48
+ --popover: #2b3243;
49
+ --popover-foreground: #e9edf5;
50
+ --primary: #0d9488;
51
51
  --primary-foreground: #ffffff;
52
- --secondary: #191d27;
53
- --secondary-foreground: #edeff5;
54
- --muted: #191d27;
55
- --muted-foreground: #a6aebf;
56
- --accent: rgba(242, 54, 69, 0.13);
57
- --accent-foreground: #f23645;
58
- --destructive: #f23645;
52
+ --secondary: #1e2330;
53
+ --secondary-foreground: #e9edf5;
54
+ --muted: #1e2330;
55
+ --muted-foreground: rgba(217, 222, 234, 0.58);
56
+ --accent: rgba(13, 148, 136, 0.12);
57
+ --accent-foreground: #0d9488;
58
+ --destructive: #e02424;
59
59
  --warning: oklch(0.41 0.11 46);
60
60
  --warning-foreground: oklch(0.99 0.02 95);
61
- --border: #252b37;
62
- --input: #333a48;
63
- --ring: #f23645;
64
- --chart-1: #f23645;
65
- --chart-2: #16c784;
66
- --chart-3: #aeb9e8;
67
- --chart-4: #6b7385;
68
- --chart-5: #a6aebf;
69
- --sidebar: #0e1119;
70
- --sidebar-foreground: #edeff5;
71
- --sidebar-primary: #f23645;
61
+ --border: rgba(217, 222, 234, 0.18);
62
+ --input: #323a4f;
63
+ --ring: #0d9488;
64
+ --chart-1: #0d9488;
65
+ --chart-2: #0e9f6e;
66
+ --chart-3: #3f83f8;
67
+ --chart-4: #8b95af;
68
+ --chart-5: #b9c1d6;
69
+ --sidebar: #1e2330;
70
+ --sidebar-foreground: #e9edf5;
71
+ --sidebar-primary: #0d9488;
72
72
  --sidebar-primary-foreground: #ffffff;
73
- --sidebar-accent: #191d27;
74
- --sidebar-accent-foreground: #edeff5;
75
- --sidebar-border: #252b37;
76
- --sidebar-ring: #f23645;
73
+ --sidebar-accent: #252b3b;
74
+ --sidebar-accent-foreground: #e9edf5;
75
+ --sidebar-border: rgba(217, 222, 234, 0.18);
76
+ --sidebar-ring: #0d9488;
77
77
  }