@donotdev/cli 0.0.14 → 0.0.16

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 (184) hide show
  1. package/dependencies-matrix.json +372 -88
  2. package/dist/bin/commands/agent-setup.js +7 -1
  3. package/dist/bin/commands/build.js +141 -44
  4. package/dist/bin/commands/bump.js +81 -41
  5. package/dist/bin/commands/cacheout.js +37 -9
  6. package/dist/bin/commands/create-app.js +276 -121
  7. package/dist/bin/commands/create-project.js +506 -217
  8. package/dist/bin/commands/deploy.js +1785 -694
  9. package/dist/bin/commands/dev.js +177 -43
  10. package/dist/bin/commands/doctor.d.ts +6 -0
  11. package/dist/bin/commands/doctor.d.ts.map +1 -0
  12. package/dist/bin/commands/{lint.js → doctor.js} +1215 -156
  13. package/dist/bin/commands/doctor.js.map +1 -0
  14. package/dist/bin/commands/emu.js +451 -104
  15. package/dist/bin/commands/format.js +37 -9
  16. package/dist/bin/commands/make-admin.js +77499 -11
  17. package/dist/bin/commands/preview.js +181 -43
  18. package/dist/bin/commands/setup.d.ts +6 -0
  19. package/dist/bin/commands/setup.d.ts.map +1 -0
  20. package/dist/bin/commands/setup.js +11733 -0
  21. package/dist/bin/commands/setup.js.map +1 -0
  22. package/dist/bin/commands/supabase-setup.d.ts +6 -0
  23. package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
  24. package/dist/bin/commands/supabase-setup.js +7 -0
  25. package/dist/bin/commands/supabase-setup.js.map +1 -0
  26. package/dist/bin/commands/sync-secrets.js +211 -34
  27. package/dist/bin/commands/type-check.d.ts +14 -0
  28. package/dist/bin/commands/type-check.d.ts.map +1 -0
  29. package/dist/bin/commands/type-check.js +2049 -0
  30. package/dist/bin/commands/type-check.js.map +1 -0
  31. package/dist/bin/commands/wai.js +3 -1
  32. package/dist/bin/dndev.js +73 -52
  33. package/dist/bin/donotdev.js +54 -45
  34. package/dist/index.js +4212 -3050
  35. package/package.json +3 -3
  36. package/templates/app-demo/src/App.tsx.example +1 -0
  37. package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
  38. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
  39. package/templates/app-demo/src/themes.css.example +5 -12
  40. package/templates/app-expo/.env.example +44 -0
  41. package/templates/app-expo/.expo/README.md.example +5 -0
  42. package/templates/app-expo/.gitignore.example +36 -0
  43. package/templates/app-expo/README.md.example +58 -0
  44. package/templates/app-expo/app/.gitkeep +2 -0
  45. package/templates/app-expo/app/_layout.tsx.example +41 -0
  46. package/templates/app-expo/app/form.tsx.example +52 -0
  47. package/templates/app-expo/app/index.tsx.example +89 -0
  48. package/templates/app-expo/app/list.tsx.example +32 -0
  49. package/templates/app-expo/app/profile.tsx.example +76 -0
  50. package/templates/app-expo/app/signin.tsx.example +53 -0
  51. package/templates/app-expo/app.json.example +39 -0
  52. package/templates/app-expo/assets/adaptive-icon.png +0 -0
  53. package/templates/app-expo/assets/favicon.png +0 -0
  54. package/templates/app-expo/assets/icon.png +0 -0
  55. package/templates/app-expo/assets/splash.png +0 -0
  56. package/templates/app-expo/babel.config.js.example +10 -0
  57. package/templates/app-expo/eas.json.example +20 -0
  58. package/templates/app-expo/expo-env.d.ts.example +4 -0
  59. package/templates/app-expo/metro.config.js.example +20 -0
  60. package/templates/app-expo/service-account-key.json.example +12 -0
  61. package/templates/app-expo/src/config/app.ts.example +46 -0
  62. package/templates/app-expo/src/config/providers.ts.example +7 -0
  63. package/templates/app-expo/tsconfig.json.example +19 -0
  64. package/templates/app-next/.env.example +4 -33
  65. package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
  66. package/templates/app-next/src/app/layout.tsx.example +7 -6
  67. package/templates/app-next/src/config/providers.ts.example +7 -0
  68. package/templates/app-next/src/globals.css.example +2 -11
  69. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  70. package/templates/app-next/src/themes.css.example +10 -13
  71. package/templates/app-vite/.env.example +3 -32
  72. package/templates/app-vite/index.html.example +2 -24
  73. package/templates/app-vite/src/App.tsx.example +2 -0
  74. package/templates/app-vite/src/config/providers.ts.example +7 -0
  75. package/templates/app-vite/src/globals.css.example +2 -12
  76. package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
  77. package/templates/app-vite/src/pages/HomePage.tsx.example +2 -2
  78. package/templates/app-vite/src/themes.css.example +109 -79
  79. package/templates/app-vite/vercel.json.example +11 -0
  80. package/templates/functions-firebase/README.md.example +1 -1
  81. package/templates/functions-firebase/build.mjs.example +2 -72
  82. package/templates/functions-firebase/functions-firebase/.env.example.example +24 -26
  83. package/templates/functions-firebase/functions-firebase/README.md.example +1 -1
  84. package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
  85. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  86. package/templates/functions-firebase/functions.config.js.example +1 -1
  87. package/templates/functions-supabase/supabase/config.toml.example +59 -0
  88. package/templates/functions-supabase/supabase/functions/.env.example +13 -0
  89. package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
  90. package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
  91. package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
  92. package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
  93. package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
  94. package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
  95. package/templates/functions-supabase/supabase/functions/deno.json.example +8 -0
  96. package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
  97. package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
  98. package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
  99. package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
  100. package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
  101. package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
  102. package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
  103. package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
  104. package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
  105. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
  106. package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
  107. package/templates/functions-vercel/vercel.json.example +1 -1
  108. package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
  109. package/templates/github/workflows/firebase-deploy.yml.example +1 -1
  110. package/templates/overlay-firebase/env.fragment.example +34 -0
  111. package/templates/overlay-firebase/env.fragment.expo.example +34 -0
  112. package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
  113. package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
  114. package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
  115. package/templates/overlay-supabase/env.fragment.example +12 -0
  116. package/templates/overlay-supabase/env.fragment.expo.example +12 -0
  117. package/templates/overlay-supabase/env.fragment.nextjs.example +12 -0
  118. package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
  119. package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
  120. package/templates/overlay-supabase/vercel.headers.example +23 -0
  121. package/templates/overlay-supabase/vercel.json.example +22 -0
  122. package/templates/overlay-vercel/env.fragment.example +34 -0
  123. package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
  124. package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
  125. package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
  126. package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
  127. package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
  128. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
  129. package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
  130. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
  131. package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
  132. package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
  133. package/templates/root-consumer/.clinerules.example +1 -0
  134. package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
  135. package/templates/root-consumer/.cursorrules.example +1 -0
  136. package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
  137. package/templates/root-consumer/.windsurfrules.example +1 -0
  138. package/templates/root-consumer/AI.md.example +44 -123
  139. package/templates/root-consumer/CLAUDE.md.example +1 -134
  140. package/templates/root-consumer/CONVENTIONS.md.example +1 -0
  141. package/templates/root-consumer/GEMINI.md.example +1 -0
  142. package/templates/root-consumer/firebase.json.example +1 -1
  143. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +22 -2
  144. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
  145. package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
  146. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +101 -32
  147. package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -2
  148. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
  149. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +241 -12
  150. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +13 -7
  151. package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +60 -0
  152. package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
  153. package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +62 -0
  154. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
  155. package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
  156. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
  157. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
  158. package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
  159. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +7 -8
  160. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
  161. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
  162. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
  163. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
  164. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +55 -15
  165. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
  166. package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
  167. package/dist/bin/commands/lint.d.ts +0 -11
  168. package/dist/bin/commands/lint.d.ts.map +0 -1
  169. package/dist/bin/commands/lint.js.map +0 -1
  170. package/dist/bin/commands/staging.d.ts +0 -11
  171. package/dist/bin/commands/staging.d.ts.map +0 -1
  172. package/dist/bin/commands/staging.js +0 -12
  173. package/dist/bin/commands/staging.js.map +0 -1
  174. package/templates/app-payload/.env.example +0 -28
  175. package/templates/app-payload/README.md.example +0 -233
  176. package/templates/app-payload/collections/Company.ts.example +0 -125
  177. package/templates/app-payload/collections/Hero.ts.example +0 -62
  178. package/templates/app-payload/collections/Media.ts.example +0 -41
  179. package/templates/app-payload/collections/Products.ts.example +0 -115
  180. package/templates/app-payload/collections/Services.ts.example +0 -104
  181. package/templates/app-payload/collections/Testimonials.ts.example +0 -92
  182. package/templates/app-payload/collections/Users.ts.example +0 -35
  183. package/templates/app-payload/src/server.ts.example +0 -79
  184. package/templates/app-payload/tsconfig.json.example +0 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-check.js","sourceRoot":"","sources":["../../../src/bin/commands/type-check.ts"],"names":[],"mappings":"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"}
@@ -7305,7 +7305,9 @@ async function main() {
7305
7305
  const aiMdPath = joinPath(projectRoot, "AI.md");
7306
7306
  if (!pathExists(aiMdPath)) {
7307
7307
  log.error("AI.md not found in project root.");
7308
- log.warn('Run "dndev init" to scaffold a new project, or create AI.md manually.');
7308
+ log.warn(
7309
+ 'Run "dndev init" to scaffold a new project, or create AI.md manually.'
7310
+ );
7309
7311
  return 1;
7310
7312
  }
7311
7313
  const content = readSync(aiMdPath);
package/dist/bin/dndev.js CHANGED
@@ -32,8 +32,11 @@ var init_utils = __esm({
32
32
 
33
33
  // packages/cli/src/bin/dndev.mjs
34
34
  init_utils();
35
+ import { readFileSync } from "node:fs";
35
36
  import { Command } from "commander";
36
- var CLI_VERSION = "0.0.1";
37
+ var CLI_VERSION = JSON.parse(
38
+ readFileSync(new URL("../../package.json", import.meta.url), "utf-8")
39
+ ).version;
37
40
  var args = process.argv.slice(2);
38
41
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v")) {
39
42
  console.log(CLI_VERSION);
@@ -50,12 +53,15 @@ Commands:
50
53
  dev [app] Start development server
51
54
  build [app] Build for production
52
55
  preview [app] Preview production build
53
- emu [app] Start dev with Firebase emulators
56
+ emu [app] Start dev with local backend
54
57
  format Format code with Prettier
58
+ tc [app] Type-check TypeScript (all packages or specific app)
55
59
  deploy [app] Deploy to Firebase
56
60
  staging [subcommand] Deploy to staging/UAT (deploy, deploy:hosting, deploy:functions, seed, status)
57
- sync-secrets Sync env vars to Firebase/Vercel
58
- firebase:setup Set up Firebase project, web app, and .env config
61
+ sync-secrets Sync env vars to Firebase/Vercel/GitHub Secrets
62
+ make-admin [userId] Set a user as admin (custom claims / app_metadata)
63
+ setup [provider] Set up provider credentials (firebase, supabase, vercel, stripe, oauth, auth)
64
+ doctor Check project health: validate provider connections and .env files
59
65
  cacheout [app] Clear build caches
60
66
  bump Update framework packages and peer dependencies
61
67
  agent Configure MCP server for AI agents (Cursor, Claude, Gemini)
@@ -85,11 +91,11 @@ function extractCommonOptions(commanderOptions) {
85
91
  const quiet = process.env.QUIET === "true" || process.env.QUIET === "1" || commanderOptions.quiet || false;
86
92
  const debug = process.env.DEBUG === "true" || process.env.DEBUG === "1" || commanderOptions.debug || false;
87
93
  const verbose = !debug && (process.env.VERBOSE === "true" || process.env.VERBOSE === "1" || commanderOptions.verbose || false);
88
- const dryRun = process.env.DRY_RUN === "true" || process.env.DRY_RUN === "1" || commanderOptions.dryRun || commanderOptions.dry || false;
94
+ const dryRun = process.env.DRY_RUN === "true" || process.env.DRY_RUN === "1" || commanderOptions.dryRun || false;
89
95
  return { dryRun, quiet, verbose, debug };
90
96
  }
91
97
  function addCommonOptions(cmd) {
92
- cmd.option("--dry-run, --dry", "Preview changes without applying").option("--verbose", "Verbose output").option("--debug", "Debug output").option("--quiet, -q", "Quiet output (errors only)");
98
+ cmd.option("-d, --dry-run", "Preview changes without applying").option("--verbose", "Verbose output").option("--debug", "Debug output").option("-q, --quiet", "Quiet output (errors only)");
93
99
  }
94
100
  program.command("init [name]").alias("create-project").description("Create a new DoNotDev project").action(async (name) => {
95
101
  const { main } = await import("./commands/create-project.js");
@@ -117,7 +123,22 @@ formatCmd.action(async (commanderOptions) => {
117
123
  const options = { ...commonOptions, ...commanderOptions };
118
124
  try {
119
125
  const { main } = await import("./commands/format.js");
120
- await main(options);
126
+ process.exitCode = await main(options);
127
+ } catch (error) {
128
+ if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
129
+ process.exit(error.context?.exitCode || 1);
130
+ }
131
+ throw error;
132
+ }
133
+ });
134
+ var tcCmd = program.command("tc [app]").alias("type-check").description("TypeScript type-check (runs bun run type-check in all packages)");
135
+ addCommonOptions(tcCmd);
136
+ tcCmd.action(async (app, commanderOptions) => {
137
+ const commonOptions = extractCommonOptions(commanderOptions);
138
+ const options = { ...commonOptions, app };
139
+ try {
140
+ const { main } = await import("./commands/type-check.js");
141
+ process.exit(await main(options));
121
142
  } catch (error) {
122
143
  if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
123
144
  process.exit(error.context?.exitCode || 1);
@@ -134,7 +155,7 @@ cacheoutCmd.action(async (app, commanderOptions) => {
134
155
  options.app = app;
135
156
  }
136
157
  const { main } = await import("./commands/cacheout.js");
137
- await main(options);
158
+ process.exitCode = await main(options);
138
159
  });
139
160
  var bumpCmd = program.command("bump").description("Update framework packages and peer dependencies to latest compatible versions");
140
161
  addCommonOptions(bumpCmd);
@@ -143,7 +164,7 @@ bumpCmd.action(async (commanderOptions) => {
143
164
  const options = { ...commonOptions, ...commanderOptions };
144
165
  try {
145
166
  const { main } = await import("./commands/bump.js");
146
- await main(options);
167
+ process.exitCode = await main(options);
147
168
  } catch (error) {
148
169
  if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
149
170
  process.exit(error.context?.exitCode || 1);
@@ -167,59 +188,59 @@ deployCmd.action(async (app, commanderOptions) => {
167
188
  const { main } = await import("./commands/deploy.js");
168
189
  await main(options);
169
190
  });
170
- var syncSecretsCmd = program.command("sync-secrets").description("Sync env vars to Firebase/Vercel").option("-e, --env-file <file>", "environment file path").option("--platform <platform>", "platform (firebase|vercel)").option("-p, --project <project>", "project ID");
191
+ var syncSecretsCmd = program.command("sync-secrets").description("Sync env vars to Firebase/Vercel or GitHub Secrets").option("-e, --env-file <file>", "environment file path").option("--target <target>", "sync target: runtime (default) or github").option("--platform <platform>", "platform (firebase|vercel) for runtime target").option("-p, --project <project>", "project ID").option("--repo <repo>", "GitHub repo (owner/repo) for github target");
171
192
  addCommonOptions(syncSecretsCmd);
172
193
  syncSecretsCmd.action(async (commanderOptions) => {
173
194
  const commonOptions = extractCommonOptions(commanderOptions);
174
195
  const options = { ...commonOptions, ...commanderOptions };
196
+ if (options.project) {
197
+ options.projectId = options.project;
198
+ }
175
199
  const { main } = await import("./commands/sync-secrets.js");
176
- await main(options);
200
+ process.exitCode = await main(options);
177
201
  });
178
- var firebaseSetupCmd = program.command("firebase:setup").description("Set up Firebase project, web app, and .env config").option("-a, --app <app>", "app name (if multiple apps)");
179
- addCommonOptions(firebaseSetupCmd);
180
- firebaseSetupCmd.action(async (commanderOptions) => {
181
- const commonOptions = extractCommonOptions(commanderOptions);
182
- const options = { ...commonOptions, ...commanderOptions };
183
- const { main } = await import("./commands/firebase-setup.js");
184
- await main(options);
185
- });
186
- program.command("dev [app]").description("Start development server").action(async (app) => {
187
- const { main } = await import("./commands/dev.js");
188
- if (app) {
189
- process.argv = [process.argv[0], process.argv[1], app];
190
- } else {
191
- process.argv = [process.argv[0], process.argv[1]];
192
- }
193
- process.exit(await main());
202
+ var makeAdminCmd = program.command("make-admin [userId]").alias("ma").description("Set a user as admin (custom claims / app_metadata)").option("--project <projectId>", "Project ID (Firebase or Supabase)").option("--project-id <projectId>", "Project ID (alias for --project)").option("--super", "Assign super role (isAdmin=true, isSuper=true, role=super)");
203
+ addCommonOptions(makeAdminCmd);
204
+ makeAdminCmd.action(async (userId, commanderOptions) => {
205
+ const args2 = [];
206
+ if (userId) args2.push(userId);
207
+ if (commanderOptions.project) args2.push(`--project=${commanderOptions.project}`);
208
+ if (commanderOptions.projectId) args2.push(`--project-id=${commanderOptions.projectId}`);
209
+ if (commanderOptions.super) args2.push("--super");
210
+ const { main } = await import("./commands/make-admin.js");
211
+ await main(args2);
194
212
  });
195
- program.command("emu [app]").description("Start dev with Firebase emulators").action(async (app) => {
196
- const { main } = await import("./commands/emu.js");
197
- if (app) {
198
- process.argv = [process.argv[0], process.argv[1], app];
199
- } else {
200
- process.argv = [process.argv[0], process.argv[1]];
201
- }
202
- process.exit(await main());
213
+ var setupCmd = program.command("setup [provider]").description("Set up provider credentials and connections (firebase, supabase, vercel, stripe, oauth, auth)").option("-a, --app <app>", "app name (if multiple apps)").option("--skip-doctor", "Skip running doctor after setup");
214
+ addCommonOptions(setupCmd);
215
+ setupCmd.action(async (provider, commanderOptions) => {
216
+ const commonOptions = extractCommonOptions(commanderOptions);
217
+ const options = { ...commonOptions, provider, app: commanderOptions.app, skipDoctor: commanderOptions.skipDoctor };
218
+ const { main } = await import("./commands/setup.js");
219
+ process.exitCode = await main(options);
203
220
  });
204
- program.command("build [app]").description("Build for production").action(async (app) => {
205
- const { main } = await import("./commands/build.js");
206
- if (app) {
207
- process.argv = [process.argv[0], process.argv[1], app];
208
- } else {
209
- process.argv = [process.argv[0], process.argv[1]];
210
- }
211
- process.exit(await main());
221
+ var doctorCmd = program.command("doctor").description("Check project health: validate provider connections and .env files").option("-a, --app <app>", "app name (if multiple apps)").option("-c, --check <check>", "run a single check (env, firebase, supabase, stripe, auth)");
222
+ addCommonOptions(doctorCmd);
223
+ doctorCmd.action(async (commanderOptions) => {
224
+ const commonOptions = extractCommonOptions(commanderOptions);
225
+ const options = { ...commonOptions, app: commanderOptions.app, check: commanderOptions.check };
226
+ const { main } = await import("./commands/doctor.js");
227
+ process.exit(await main(options));
212
228
  });
213
- program.command("preview [app]").description("Preview production build").action(async (app) => {
214
- const { main } = await import("./commands/preview.js");
215
- if (app) {
216
- process.argv = [process.argv[0], process.argv[1], app];
217
- } else {
218
- process.argv = [process.argv[0], process.argv[1]];
229
+ async function runAppCommand(commandPath, app) {
230
+ const savedArgv = process.argv;
231
+ process.argv = app ? [savedArgv[0], savedArgv[1], app] : [savedArgv[0], savedArgv[1]];
232
+ try {
233
+ const { main } = await import(commandPath);
234
+ process.exit(await main());
235
+ } finally {
236
+ process.argv = savedArgv;
219
237
  }
220
- process.exit(await main());
221
- });
222
- program.command("agent").alias("agent:setup").description("Configure MCP server for all AI agents (Cursor, Claude Code, Gemini, Claude Desktop)").option("--dry-run, --dry", "Preview changes without applying").action(async (commanderOptions) => {
238
+ }
239
+ program.command("dev [app]").description("Start development server").action((app) => runAppCommand("./commands/dev.js", app));
240
+ program.command("emu [app]").description("Start dev with local backend").action((app) => runAppCommand("./commands/emu.js", app));
241
+ program.command("build [app]").description("Build for production").action((app) => runAppCommand("./commands/build.js", app));
242
+ program.command("preview [app]").description("Preview production build").action((app) => runAppCommand("./commands/preview.js", app));
243
+ program.command("agent").alias("agent:setup").description("Configure MCP server for all AI agents (Cursor, Claude Code, Gemini, Claude Desktop)").option("-d, --dry-run", "Preview changes without applying").action(async (commanderOptions) => {
223
244
  const options = extractCommonOptions(commanderOptions);
224
245
  const { main } = await import("./commands/agent-setup.js");
225
246
  await main(options);
@@ -32,8 +32,11 @@ var init_utils = __esm({
32
32
 
33
33
  // packages/cli/src/bin/dndev.mjs
34
34
  init_utils();
35
+ import { readFileSync } from "node:fs";
35
36
  import { Command } from "commander";
36
- var CLI_VERSION = "0.0.1";
37
+ var CLI_VERSION = JSON.parse(
38
+ readFileSync(new URL("../../package.json", import.meta.url), "utf-8")
39
+ ).version;
37
40
  var args = process.argv.slice(2);
38
41
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v")) {
39
42
  console.log(CLI_VERSION);
@@ -50,12 +53,14 @@ Commands:
50
53
  dev [app] Start development server
51
54
  build [app] Build for production
52
55
  preview [app] Preview production build
53
- emu [app] Start dev with Firebase emulators
56
+ emu [app] Start dev with local backend
54
57
  format Format code with Prettier
58
+ tc [app] Type-check TypeScript (all packages or specific app)
55
59
  deploy [app] Deploy to Firebase
56
60
  staging [subcommand] Deploy to staging/UAT (deploy, deploy:hosting, deploy:functions, seed, status)
57
- sync-secrets Sync env vars to Firebase/Vercel
61
+ sync-secrets Sync env vars to Firebase/Vercel/GitHub Secrets
58
62
  firebase:setup Set up Firebase project, web app, and .env config
63
+ supabase:setup Set up Supabase project URL and keys in .env
59
64
  cacheout [app] Clear build caches
60
65
  bump Update framework packages and peer dependencies
61
66
  agent Configure MCP server for AI agents (Cursor, Claude, Gemini)
@@ -85,11 +90,11 @@ function extractCommonOptions(commanderOptions) {
85
90
  const quiet = process.env.QUIET === "true" || process.env.QUIET === "1" || commanderOptions.quiet || false;
86
91
  const debug = process.env.DEBUG === "true" || process.env.DEBUG === "1" || commanderOptions.debug || false;
87
92
  const verbose = !debug && (process.env.VERBOSE === "true" || process.env.VERBOSE === "1" || commanderOptions.verbose || false);
88
- const dryRun = process.env.DRY_RUN === "true" || process.env.DRY_RUN === "1" || commanderOptions.dryRun || commanderOptions.dry || false;
93
+ const dryRun = process.env.DRY_RUN === "true" || process.env.DRY_RUN === "1" || commanderOptions.dryRun || false;
89
94
  return { dryRun, quiet, verbose, debug };
90
95
  }
91
96
  function addCommonOptions(cmd) {
92
- cmd.option("--dry-run, --dry", "Preview changes without applying").option("--verbose", "Verbose output").option("--debug", "Debug output").option("--quiet, -q", "Quiet output (errors only)");
97
+ cmd.option("-d, --dry-run", "Preview changes without applying").option("--verbose", "Verbose output").option("--debug", "Debug output").option("-q, --quiet", "Quiet output (errors only)");
93
98
  }
94
99
  program.command("init [name]").alias("create-project").description("Create a new DoNotDev project").action(async (name) => {
95
100
  const { main } = await import("./commands/create-project.js");
@@ -117,7 +122,22 @@ formatCmd.action(async (commanderOptions) => {
117
122
  const options = { ...commonOptions, ...commanderOptions };
118
123
  try {
119
124
  const { main } = await import("./commands/format.js");
120
- await main(options);
125
+ process.exitCode = await main(options);
126
+ } catch (error) {
127
+ if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
128
+ process.exit(error.context?.exitCode || 1);
129
+ }
130
+ throw error;
131
+ }
132
+ });
133
+ var tcCmd = program.command("tc [app]").alias("type-check").description("TypeScript type-check (runs bun run type-check in all packages)");
134
+ addCommonOptions(tcCmd);
135
+ tcCmd.action(async (app, commanderOptions) => {
136
+ const commonOptions = extractCommonOptions(commanderOptions);
137
+ const options = { ...commonOptions, app };
138
+ try {
139
+ const { main } = await import("./commands/type-check.js");
140
+ process.exit(await main(options));
121
141
  } catch (error) {
122
142
  if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
123
143
  process.exit(error.context?.exitCode || 1);
@@ -134,7 +154,7 @@ cacheoutCmd.action(async (app, commanderOptions) => {
134
154
  options.app = app;
135
155
  }
136
156
  const { main } = await import("./commands/cacheout.js");
137
- await main(options);
157
+ process.exitCode = await main(options);
138
158
  });
139
159
  var bumpCmd = program.command("bump").description("Update framework packages and peer dependencies to latest compatible versions");
140
160
  addCommonOptions(bumpCmd);
@@ -143,7 +163,7 @@ bumpCmd.action(async (commanderOptions) => {
143
163
  const options = { ...commonOptions, ...commanderOptions };
144
164
  try {
145
165
  const { main } = await import("./commands/bump.js");
146
- await main(options);
166
+ process.exitCode = await main(options);
147
167
  } catch (error) {
148
168
  if (error.code === "invalid-argument" || error.name === "DoNotDevError") {
149
169
  process.exit(error.context?.exitCode || 1);
@@ -167,13 +187,16 @@ deployCmd.action(async (app, commanderOptions) => {
167
187
  const { main } = await import("./commands/deploy.js");
168
188
  await main(options);
169
189
  });
170
- var syncSecretsCmd = program.command("sync-secrets").description("Sync env vars to Firebase/Vercel").option("-e, --env-file <file>", "environment file path").option("--platform <platform>", "platform (firebase|vercel)").option("-p, --project <project>", "project ID");
190
+ var syncSecretsCmd = program.command("sync-secrets").description("Sync env vars to Firebase/Vercel or GitHub Secrets").option("-e, --env-file <file>", "environment file path").option("--target <target>", "sync target: runtime (default) or github").option("--platform <platform>", "platform (firebase|vercel) for runtime target").option("-p, --project <project>", "project ID").option("--repo <repo>", "GitHub repo (owner/repo) for github target");
171
191
  addCommonOptions(syncSecretsCmd);
172
192
  syncSecretsCmd.action(async (commanderOptions) => {
173
193
  const commonOptions = extractCommonOptions(commanderOptions);
174
194
  const options = { ...commonOptions, ...commanderOptions };
195
+ if (options.project) {
196
+ options.projectId = options.project;
197
+ }
175
198
  const { main } = await import("./commands/sync-secrets.js");
176
- await main(options);
199
+ process.exitCode = await main(options);
177
200
  });
178
201
  var firebaseSetupCmd = program.command("firebase:setup").description("Set up Firebase project, web app, and .env config").option("-a, --app <app>", "app name (if multiple apps)");
179
202
  addCommonOptions(firebaseSetupCmd);
@@ -183,43 +206,29 @@ firebaseSetupCmd.action(async (commanderOptions) => {
183
206
  const { main } = await import("./commands/firebase-setup.js");
184
207
  await main(options);
185
208
  });
186
- program.command("dev [app]").description("Start development server").action(async (app) => {
187
- const { main } = await import("./commands/dev.js");
188
- if (app) {
189
- process.argv = [process.argv[0], process.argv[1], app];
190
- } else {
191
- process.argv = [process.argv[0], process.argv[1]];
192
- }
193
- process.exit(await main());
194
- });
195
- program.command("emu [app]").description("Start dev with Firebase emulators").action(async (app) => {
196
- const { main } = await import("./commands/emu.js");
197
- if (app) {
198
- process.argv = [process.argv[0], process.argv[1], app];
199
- } else {
200
- process.argv = [process.argv[0], process.argv[1]];
201
- }
202
- process.exit(await main());
203
- });
204
- program.command("build [app]").description("Build for production").action(async (app) => {
205
- const { main } = await import("./commands/build.js");
206
- if (app) {
207
- process.argv = [process.argv[0], process.argv[1], app];
208
- } else {
209
- process.argv = [process.argv[0], process.argv[1]];
210
- }
211
- process.exit(await main());
209
+ var supabaseSetupCmd = program.command("supabase:setup").description("Set up Supabase project URL and keys in .env").option("-a, --app <app>", "app name (if multiple apps)");
210
+ addCommonOptions(supabaseSetupCmd);
211
+ supabaseSetupCmd.action(async (commanderOptions) => {
212
+ const commonOptions = extractCommonOptions(commanderOptions);
213
+ const options = { ...commonOptions, ...commanderOptions };
214
+ const { main } = await import("./commands/supabase-setup.js");
215
+ await main(options);
212
216
  });
213
- program.command("preview [app]").description("Preview production build").action(async (app) => {
214
- const { main } = await import("./commands/preview.js");
215
- if (app) {
216
- process.argv = [process.argv[0], process.argv[1], app];
217
- } else {
218
- process.argv = [process.argv[0], process.argv[1]];
217
+ async function runAppCommand(commandPath, app) {
218
+ const savedArgv = process.argv;
219
+ process.argv = app ? [savedArgv[0], savedArgv[1], app] : [savedArgv[0], savedArgv[1]];
220
+ try {
221
+ const { main } = await import(commandPath);
222
+ process.exit(await main());
223
+ } finally {
224
+ process.argv = savedArgv;
219
225
  }
220
- process.exit(await main());
221
- });
222
- program.command("agent").alias("agent:setup").description("Configure MCP server for all AI agents (Cursor, Claude Code, Gemini, Claude Desktop)").option("--dry-run, --dry", "Preview changes without applying").action(async (commanderOptions) => {
226
+ }
227
+ program.command("dev [app]").description("Start development server").action((app) => runAppCommand("./commands/dev.js", app));
228
+ program.command("emu [app]").description("Start dev with local backend").action((app) => runAppCommand("./commands/emu.js", app));
229
+ program.command("build [app]").description("Build for production").action((app) => runAppCommand("./commands/build.js", app));
230
+ program.command("preview [app]").description("Preview production build").action((app) => runAppCommand("./commands/preview.js", app));
231
+ program.command("agent").alias("agent:setup").description("Configure MCP server for all AI agents (Cursor, Claude Code, Gemini, Claude Desktop)").option("-d, --dry-run", "Preview changes without applying").action(async (commanderOptions) => {
223
232
  const options = extractCommonOptions(commanderOptions);
224
233
  const { main } = await import("./commands/agent-setup.js");
225
234
  await main(options);