@donotdev/cli 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dependencies-matrix.json +30 -116
  2. package/dist/bin/commands/bump.js +33 -7
  3. package/dist/bin/commands/create-project.js +43 -7
  4. package/dist/bin/commands/deploy.js +7606 -17
  5. package/dist/bin/commands/firebase-setup.d.ts +6 -0
  6. package/dist/bin/commands/firebase-setup.d.ts.map +1 -0
  7. package/dist/bin/commands/firebase-setup.js +7 -0
  8. package/dist/bin/commands/firebase-setup.js.map +1 -0
  9. package/dist/bin/commands/staging.d.ts +11 -0
  10. package/dist/bin/commands/staging.d.ts.map +1 -0
  11. package/dist/bin/commands/staging.js +12 -0
  12. package/dist/bin/commands/staging.js.map +1 -0
  13. package/dist/bin/dndev.js +28 -3
  14. package/dist/bin/donotdev.js +28 -3
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +7671 -39
  18. package/dist/index.js.map +1 -1
  19. package/package.json +1 -1
  20. package/templates/app-demo/src/pages/DetailPage.tsx.example +1 -1
  21. package/templates/app-demo/src/pages/FullPage.tsx.example +3 -3
  22. package/templates/app-demo/src/pages/HomePage.tsx.example +1 -1
  23. package/templates/app-demo/src/pages/components/ComponentRenderer.tsx.example +5 -5
  24. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +3 -3
  25. package/templates/app-next/.env.example +2 -0
  26. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  27. package/templates/app-vite/.env.example +2 -0
  28. package/templates/app-vite/src/pages/HomePage.tsx.example +163 -73
  29. package/templates/functions-firebase/build.mjs.example +26 -10
  30. package/templates/functions-firebase/functions-firebase/build.mjs.example +26 -10
  31. package/templates/functions-firebase/functions.config.js.example +11 -15
  32. package/templates/github-consumer/.github/workflows/ci.yml.example +36 -0
  33. package/templates/root-consumer/.claude/agents/architect.md.example +2 -2
  34. package/templates/root-consumer/.claude/agents/builder.md.example +2 -2
  35. package/templates/root-consumer/.claude/agents/coder.md.example +2 -2
  36. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -3
  37. package/templates/root-consumer/.claude/agents/polisher.md.example +67 -291
  38. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +4 -4
  39. package/templates/root-consumer/.claude/commands/build.md.example +2 -2
  40. package/templates/root-consumer/.claude/commands/polish.md.example +65 -81
  41. package/templates/root-consumer/.env.example +13 -13
  42. package/templates/root-consumer/.gemini/settings.json.example +9 -0
  43. package/templates/root-consumer/.gitignore.example +3 -1
  44. package/templates/root-consumer/AI.md.example +139 -0
  45. package/templates/root-consumer/CLAUDE.md.example +13 -104
  46. package/templates/root-consumer/README.md.example +81 -255
  47. package/templates/root-consumer/entities/Contact.ts.example +126 -0
  48. package/templates/root-consumer/entities/index.ts.example +6 -3
  49. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +41 -342
  50. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +2 -1
  51. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +144 -9
  52. package/templates/root-consumer/guides/dndev/INDEX.md.example +9 -0
  53. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +13 -16
  54. package/templates/root-consumer/guides/dndev/SETUP_BLOG.md.example +263 -0
  55. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +1 -1
  56. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +168 -0
  57. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +5 -12
  58. package/templates/root-consumer/guides/dndev/SETUP_TESTING.md.example +184 -0
  59. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +134 -69
  60. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +66 -44
  61. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +18 -1
  62. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +1 -0
  63. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +2 -1
  64. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +2 -1
  65. package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +180 -108
  66. package/templates/root-consumer/guides/wai-way/context_map.json.example +8 -7
  67. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +4 -4
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Firebase Setup Command Wrapper
3
+ * @description Re-exports firebaseSetup from tooling for CLI bundling.
4
+ */
5
+ export { firebaseSetup as main } from '@donotdev/tooling';
6
+ //# sourceMappingURL=firebase-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-setup.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/firebase-setup.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // packages/cli/src/bin/commands/firebase-setup.ts
2
+ /**
3
+ * @fileoverview Firebase Setup Command Wrapper
4
+ * @description Re-exports firebaseSetup from tooling for CLI bundling.
5
+ */
6
+ export { firebaseSetup as main } from '@donotdev/tooling';
7
+ //# sourceMappingURL=firebase-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-setup.js","sourceRoot":"","sources":["../../../src/bin/commands/firebase-setup.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD;;;GAGG;AAEH,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview Staging Command Wrapper
3
+ * @description Staging is a thin wrapper around deploy with --staging flag.
4
+ * Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
5
+ *
6
+ * @version 0.0.1
7
+ * @since 0.0.1
8
+ * @author AMBROISE PARK Consulting
9
+ */
10
+ export { deploy as main } from '@donotdev/tooling';
11
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // packages/cli/src/bin/commands/staging.ts
2
+ /**
3
+ * @fileoverview Staging Command Wrapper
4
+ * @description Staging is a thin wrapper around deploy with --staging flag.
5
+ * Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
6
+ *
7
+ * @version 0.0.1
8
+ * @since 0.0.1
9
+ * @author AMBROISE PARK Consulting
10
+ */
11
+ export { deploy as main } from '@donotdev/tooling';
12
+ //# sourceMappingURL=staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/bin/dndev.js CHANGED
@@ -53,10 +53,13 @@ Commands:
53
53
  emu [app] Start dev with Firebase emulators
54
54
  format Format code with Prettier
55
55
  deploy [app] Deploy to Firebase
56
+ staging [subcommand] Deploy to staging/UAT (deploy, deploy:hosting, deploy:functions, seed, status)
56
57
  sync-secrets Sync env vars to Firebase/Vercel
58
+ firebase:setup Set up Firebase project, web app, and .env config
57
59
  cacheout [app] Clear build caches
58
60
  bump Update framework packages and peer dependencies
59
- wai Output WAI-WAY activation prompt for AI agents
61
+ agent Configure MCP server for AI agents (Cursor, Claude, Gemini)
62
+ wai Output WAI-WAY activation prompt (paste into any AI agent)
60
63
 
61
64
  Options:
62
65
  -v, --version Display version number
@@ -70,6 +73,7 @@ Examples:
70
73
  dndev create-app my-app --functions --project my-fb-id Set Firebase project (2-min setup)
71
74
  dndev dev Start dev server
72
75
  dndev dev:web Start dev server for 'web' app
76
+ dndev agent Configure MCP for all AI agents
73
77
  dndev wai Output WAI-WAY activation prompt
74
78
 
75
79
  Run 'dndev <command> --help' for command-specific help.`);
@@ -147,7 +151,15 @@ bumpCmd.action(async (commanderOptions) => {
147
151
  throw error;
148
152
  }
149
153
  });
150
- var deployCmd = program.command("deploy [app]").description("Deploy to Firebase").option("-p, --project <project>", "Firebase project ID").option("--skip-build", "skip build step");
154
+ var stagingCmd = program.command("staging [app]").alias("uat").description("Deploy to staging/UAT (shorthand for deploy --staging)").option("-p, --project <project>", "Firebase project ID (overrides .firebaserc)").option("--skip-build", "skip build step").option("--force", "Force deployment / cleanup policy");
155
+ addCommonOptions(stagingCmd);
156
+ stagingCmd.action(async (app, commanderOptions) => {
157
+ const commonOptions = extractCommonOptions(commanderOptions);
158
+ const options = { ...commonOptions, ...commanderOptions, app, staging: true };
159
+ const { main } = await import("./commands/deploy.js");
160
+ await main(options);
161
+ });
162
+ var deployCmd = program.command("deploy [app]").description("Deploy to Firebase").option("-p, --project <project>", "Firebase project ID").option("--skip-build", "skip build step").option("--staging", "Deploy to staging (uses .env.staging, service-account-key.staging.json, .firebaserc staging project)");
151
163
  addCommonOptions(deployCmd);
152
164
  deployCmd.action(async (app, commanderOptions) => {
153
165
  const commonOptions = extractCommonOptions(commanderOptions);
@@ -163,6 +175,14 @@ syncSecretsCmd.action(async (commanderOptions) => {
163
175
  const { main } = await import("./commands/sync-secrets.js");
164
176
  await main(options);
165
177
  });
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
+ });
166
186
  program.command("dev [app]").description("Start development server").action(async (app) => {
167
187
  const { main } = await import("./commands/dev.js");
168
188
  if (app) {
@@ -199,6 +219,11 @@ program.command("preview [app]").description("Preview production build").action(
199
219
  }
200
220
  process.exit(await main());
201
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) => {
223
+ const options = extractCommonOptions(commanderOptions);
224
+ const { main } = await import("./commands/agent-setup.js");
225
+ await main(options);
226
+ });
202
227
  program.command("wai").alias("wai-way").description("Output WAI-WAY activation prompt for AI agents").option("-w, --workflow", "Show workflow summary only").option("-c, --copy", "Copy prompt to clipboard").action(async () => {
203
228
  const { main } = await import("./commands/wai.js");
204
229
  process.exit(await main());
@@ -206,7 +231,7 @@ program.command("wai").alias("wai-way").description("Output WAI-WAY activation p
206
231
  function preprocessArgs(args2) {
207
232
  if (args2.length === 0) return args2;
208
233
  const firstArg = args2[0];
209
- const appCommands = ["dev", "build", "preview", "emu", "deploy"];
234
+ const appCommands = ["dev", "build", "preview", "emu", "deploy", "staging"];
210
235
  if (firstArg && firstArg.includes(":")) {
211
236
  const colonIndex = firstArg.indexOf(":");
212
237
  const command = firstArg.substring(0, colonIndex);
@@ -53,10 +53,13 @@ Commands:
53
53
  emu [app] Start dev with Firebase emulators
54
54
  format Format code with Prettier
55
55
  deploy [app] Deploy to Firebase
56
+ staging [subcommand] Deploy to staging/UAT (deploy, deploy:hosting, deploy:functions, seed, status)
56
57
  sync-secrets Sync env vars to Firebase/Vercel
58
+ firebase:setup Set up Firebase project, web app, and .env config
57
59
  cacheout [app] Clear build caches
58
60
  bump Update framework packages and peer dependencies
59
- wai Output WAI-WAY activation prompt for AI agents
61
+ agent Configure MCP server for AI agents (Cursor, Claude, Gemini)
62
+ wai Output WAI-WAY activation prompt (paste into any AI agent)
60
63
 
61
64
  Options:
62
65
  -v, --version Display version number
@@ -70,6 +73,7 @@ Examples:
70
73
  dndev create-app my-app --functions --project my-fb-id Set Firebase project (2-min setup)
71
74
  dndev dev Start dev server
72
75
  dndev dev:web Start dev server for 'web' app
76
+ dndev agent Configure MCP for all AI agents
73
77
  dndev wai Output WAI-WAY activation prompt
74
78
 
75
79
  Run 'dndev <command> --help' for command-specific help.`);
@@ -147,7 +151,15 @@ bumpCmd.action(async (commanderOptions) => {
147
151
  throw error;
148
152
  }
149
153
  });
150
- var deployCmd = program.command("deploy [app]").description("Deploy to Firebase").option("-p, --project <project>", "Firebase project ID").option("--skip-build", "skip build step");
154
+ var stagingCmd = program.command("staging [app]").alias("uat").description("Deploy to staging/UAT (shorthand for deploy --staging)").option("-p, --project <project>", "Firebase project ID (overrides .firebaserc)").option("--skip-build", "skip build step").option("--force", "Force deployment / cleanup policy");
155
+ addCommonOptions(stagingCmd);
156
+ stagingCmd.action(async (app, commanderOptions) => {
157
+ const commonOptions = extractCommonOptions(commanderOptions);
158
+ const options = { ...commonOptions, ...commanderOptions, app, staging: true };
159
+ const { main } = await import("./commands/deploy.js");
160
+ await main(options);
161
+ });
162
+ var deployCmd = program.command("deploy [app]").description("Deploy to Firebase").option("-p, --project <project>", "Firebase project ID").option("--skip-build", "skip build step").option("--staging", "Deploy to staging (uses .env.staging, service-account-key.staging.json, .firebaserc staging project)");
151
163
  addCommonOptions(deployCmd);
152
164
  deployCmd.action(async (app, commanderOptions) => {
153
165
  const commonOptions = extractCommonOptions(commanderOptions);
@@ -163,6 +175,14 @@ syncSecretsCmd.action(async (commanderOptions) => {
163
175
  const { main } = await import("./commands/sync-secrets.js");
164
176
  await main(options);
165
177
  });
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
+ });
166
186
  program.command("dev [app]").description("Start development server").action(async (app) => {
167
187
  const { main } = await import("./commands/dev.js");
168
188
  if (app) {
@@ -199,6 +219,11 @@ program.command("preview [app]").description("Preview production build").action(
199
219
  }
200
220
  process.exit(await main());
201
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) => {
223
+ const options = extractCommonOptions(commanderOptions);
224
+ const { main } = await import("./commands/agent-setup.js");
225
+ await main(options);
226
+ });
202
227
  program.command("wai").alias("wai-way").description("Output WAI-WAY activation prompt for AI agents").option("-w, --workflow", "Show workflow summary only").option("-c, --copy", "Copy prompt to clipboard").action(async () => {
203
228
  const { main } = await import("./commands/wai.js");
204
229
  process.exit(await main());
@@ -206,7 +231,7 @@ program.command("wai").alias("wai-way").description("Output WAI-WAY activation p
206
231
  function preprocessArgs(args2) {
207
232
  if (args2.length === 0) return args2;
208
233
  const firstArg = args2[0];
209
- const appCommands = ["dev", "build", "preview", "emu", "deploy"];
234
+ const appCommands = ["dev", "build", "preview", "emu", "deploy", "staging"];
210
235
  if (firstArg && firstArg.includes(":")) {
211
236
  const colonIndex = firstArg.indexOf(":");
212
237
  const command = firstArg.substring(0, colonIndex);
package/dist/index.d.ts CHANGED
@@ -4,5 +4,5 @@
4
4
  * Thin wrapper around @donotdev/tooling for public distribution.
5
5
  * Tooling is the source of truth for all CLI code.
6
6
  */
7
- export { createApp, createProject, format, dev, build, preview, emu, cacheout, syncSecrets, deploy, } from '@donotdev/tooling';
7
+ export { createApp, createProject, format, dev, build, preview, emu, cacheout, syncSecrets, deploy, staging, } from '@donotdev/tooling';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,aAAa,EACb,MAAM,EACN,GAAG,EACH,KAAK,EACL,OAAO,EACP,GAAG,EACH,QAAQ,EACR,WAAW,EACX,MAAM,GACP,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,aAAa,EACb,MAAM,EACN,GAAG,EACH,KAAK,EACL,OAAO,EACP,GAAG,EACH,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,GACR,MAAM,mBAAmB,CAAC"}