@nexus-framework/cli 0.1.4 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +133 -40
  2. package/dist/cli.js +5 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/adopt.d.ts +4 -2
  5. package/dist/commands/adopt.d.ts.map +1 -1
  6. package/dist/commands/adopt.js +47 -8
  7. package/dist/commands/adopt.js.map +1 -1
  8. package/dist/commands/init.d.ts +1 -0
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +1 -1
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/generators/ai-config.d.ts.map +1 -1
  13. package/dist/generators/ai-config.js +208 -55
  14. package/dist/generators/ai-config.js.map +1 -1
  15. package/dist/generators/docs.d.ts +10 -1
  16. package/dist/generators/docs.d.ts.map +1 -1
  17. package/dist/generators/docs.js +40 -65
  18. package/dist/generators/docs.js.map +1 -1
  19. package/dist/generators/index.d.ts +2 -1
  20. package/dist/generators/index.d.ts.map +1 -1
  21. package/dist/generators/index.js +49 -7
  22. package/dist/generators/index.js.map +1 -1
  23. package/dist/generators/spring-boot.d.ts +12 -0
  24. package/dist/generators/spring-boot.d.ts.map +1 -0
  25. package/dist/generators/spring-boot.js +220 -0
  26. package/dist/generators/spring-boot.js.map +1 -0
  27. package/dist/generators/structure.d.ts +1 -0
  28. package/dist/generators/structure.d.ts.map +1 -1
  29. package/dist/generators/structure.js +90 -24
  30. package/dist/generators/structure.js.map +1 -1
  31. package/dist/prompts/adoption.d.ts +35 -0
  32. package/dist/prompts/adoption.d.ts.map +1 -0
  33. package/dist/prompts/adoption.js +153 -0
  34. package/dist/prompts/adoption.js.map +1 -0
  35. package/dist/prompts/frameworks.d.ts +5 -1
  36. package/dist/prompts/frameworks.d.ts.map +1 -1
  37. package/dist/prompts/frameworks.js +48 -0
  38. package/dist/prompts/frameworks.js.map +1 -1
  39. package/dist/prompts/index.d.ts +2 -1
  40. package/dist/prompts/index.d.ts.map +1 -1
  41. package/dist/prompts/index.js +19 -7
  42. package/dist/prompts/index.js.map +1 -1
  43. package/dist/prompts/persona.d.ts +16 -0
  44. package/dist/prompts/persona.d.ts.map +1 -0
  45. package/dist/prompts/persona.js +79 -0
  46. package/dist/prompts/persona.js.map +1 -0
  47. package/dist/prompts/project-type.d.ts.map +1 -1
  48. package/dist/prompts/project-type.js +6 -1
  49. package/dist/prompts/project-type.js.map +1 -1
  50. package/dist/types/config.d.ts +31 -2
  51. package/dist/types/config.d.ts.map +1 -1
  52. package/dist/types/config.js +7 -1
  53. package/dist/types/config.js.map +1 -1
  54. package/dist/types/index.d.ts +2 -1
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/types/index.js +1 -1
  57. package/dist/types/index.js.map +1 -1
  58. package/dist/utils/file-system.d.ts.map +1 -1
  59. package/dist/utils/file-system.js +4 -2
  60. package/dist/utils/file-system.js.map +1 -1
  61. package/dist/utils/logger.d.ts +2 -2
  62. package/dist/utils/logger.d.ts.map +1 -1
  63. package/dist/utils/logger.js +49 -36
  64. package/dist/utils/logger.js.map +1 -1
  65. package/dist/utils/project-detector.d.ts +20 -4
  66. package/dist/utils/project-detector.d.ts.map +1 -1
  67. package/dist/utils/project-detector.js +156 -27
  68. package/dist/utils/project-detector.js.map +1 -1
  69. package/dist/version.d.ts +1 -1
  70. package/dist/version.js +1 -1
  71. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEhG;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,EAAE,kBAAkB,EAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE"}
1
+ {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEhG;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,EAAE,kBAAkB,EAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE"}
@@ -50,9 +50,11 @@ export async function writeGeneratorResult(projectRoot, files, directories) {
50
50
  for (const dir of directories) {
51
51
  await ensureDirectory(path.join(projectRoot, dir.path));
52
52
  }
53
- // Then write files
53
+ // Then write files (skip empty content files)
54
54
  for (const file of files) {
55
- await writeFile(path.join(projectRoot, file.path), file.content);
55
+ if (file.content.trim()) {
56
+ await writeFile(path.join(projectRoot, file.path), file.content);
57
+ }
56
58
  }
57
59
  }
58
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,KAAsB,EACtB,WAAiC;IAEjC,2BAA2B;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAwB;IACvE,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,KAAsB,EACtB,WAAiC;IAEjC,2BAA2B;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAwB;IACvE,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * NEXUS CLI - Logger Utility
3
3
  *
4
- * Pretty, color-coded terminal output using Chalk.
4
+ * Pretty, color-coded terminal output using Chalk, gradient-string, and boxen.
5
5
  */
6
6
  /** Log an informational message */
7
7
  export declare function info(message: string): void;
@@ -17,7 +17,7 @@ export declare function nexus(message: string): void;
17
17
  export declare function newline(): void;
18
18
  /** Print a horizontal rule */
19
19
  export declare function divider(): void;
20
- /** Print the NEXUS banner */
20
+ /** Print the NEXUS banner with gradient */
21
21
  export declare function banner(version: string): void;
22
22
  /** Print final success with next steps */
23
23
  export declare function complete(projectName: string, displayName?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,mCAAmC;AACnC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,2BAA2B;AAC3B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,yBAAyB;AACzB,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM5C;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAkBxE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAsBvD;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;CAWlB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,mCAAmC;AACnC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,2BAA2B;AAC3B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,yBAAyB;AACzB,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,2CAA2C;AAC3C,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAO5C;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAyBxE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA6BvD;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;CAWlB,CAAC"}
@@ -1,9 +1,13 @@
1
1
  /**
2
2
  * NEXUS CLI - Logger Utility
3
3
  *
4
- * Pretty, color-coded terminal output using Chalk.
4
+ * Pretty, color-coded terminal output using Chalk, gradient-string, and boxen.
5
5
  */
6
+ import boxen from 'boxen';
6
7
  import chalk from 'chalk';
8
+ import gradient from 'gradient-string';
9
+ /** NEXUS brand gradient (cyan → blue → purple) */
10
+ const nexusGradient = gradient(['#00f2ff', '#0090ff', '#7b61ff']);
7
11
  /** Brand colors */
8
12
  const COLORS = {
9
13
  primary: chalk.cyan,
@@ -42,10 +46,11 @@ export function newline() {
42
46
  export function divider() {
43
47
  console.log(COLORS.dim('━'.repeat(50)));
44
48
  }
45
- /** Print the NEXUS banner */
49
+ /** Print the NEXUS banner with gradient */
46
50
  export function banner(version) {
47
51
  newline();
48
- console.log(COLORS.primary.bold(' 🔮 NEXUS CLI') + COLORS.dim(` v${version}`));
52
+ const title = nexusGradient(' 🔮 NEXUS CLI');
53
+ console.log(title + COLORS.dim(` v${version}`));
49
54
  console.log(COLORS.dim(' AI-Native Project Scaffolding'));
50
55
  divider();
51
56
  newline();
@@ -54,44 +59,52 @@ export function banner(version) {
54
59
  export function complete(projectName, displayName) {
55
60
  const prettyName = displayName ?? projectName;
56
61
  newline();
57
- divider();
58
- newline();
59
- console.log(COLORS.success.bold(' ✅ Project created successfully!'));
60
- newline();
61
- console.log(COLORS.bold(` ${prettyName}`));
62
- newline();
63
- console.log(COLORS.bold(' Next steps:'));
64
- console.log(COLORS.primary(` cd ${projectName}`));
65
- console.log(COLORS.primary(' npm run dev'));
66
- newline();
67
- console.log(COLORS.dim(' Open .nexus/docs/ to start filling in your project documentation.'));
68
- console.log(COLORS.dim(' AI tools will use these files to understand your project.'));
69
- newline();
70
- divider();
62
+ const message = [
63
+ COLORS.success.bold('✅ Project created successfully!'),
64
+ '',
65
+ COLORS.bold(prettyName),
66
+ '',
67
+ COLORS.bold('Next steps:'),
68
+ COLORS.primary(` cd ${projectName}`),
69
+ COLORS.primary(' npm run dev'),
70
+ '',
71
+ COLORS.dim('Open .nexus/docs/ to start filling in your project documentation.'),
72
+ COLORS.dim('AI tools will use these files to understand your project.'),
73
+ ].join('\n');
74
+ console.log(boxen(message, {
75
+ padding: 1,
76
+ margin: 0,
77
+ borderStyle: 'round',
78
+ borderColor: 'cyan',
79
+ }));
71
80
  newline();
72
81
  }
73
82
  /** Print adopt-mode completion with next steps */
74
83
  export function adoptComplete(displayName) {
75
84
  newline();
76
- divider();
77
- newline();
78
- console.log(COLORS.success.bold(' ✅ NEXUS adopted successfully!'));
79
- newline();
80
- console.log(COLORS.bold(` "${displayName}" now has NEXUS documentation & AI config.`));
81
- newline();
82
- console.log(COLORS.bold(' What happens next:'));
83
- console.log(COLORS.primary(' 1. Open your AI coding tool (Copilot, Cursor, Windsurf, etc.)'));
84
- console.log(COLORS.primary(' 2. Ask it to do anything (e.g., "add a feature", "fix a bug")'));
85
- console.log(COLORS.primary(' 3. It will detect the template docs and auto-populate them first'));
86
- console.log(COLORS.primary(' 4. It will ask you questions for things it can\'t infer from code'));
87
- newline();
88
- console.log(COLORS.dim(' Files added:'));
89
- console.log(COLORS.dim(' .nexus/docs/ 8 structured documentation files (status: template)'));
90
- console.log(COLORS.dim(' .nexus/ai/ — AI agent instructions (single source of truth)'));
91
- console.log(COLORS.dim(' .cursorrules, .windsurfrules, .clinerules, AGENTS.md — AI tool pointers'));
92
- console.log(COLORS.dim(' .github/copilot-instructions.md — GitHub Copilot config'));
93
- newline();
94
- divider();
85
+ const message = [
86
+ COLORS.success.bold('✅ NEXUS adopted successfully!'),
87
+ '',
88
+ COLORS.bold(`"${displayName}" now has NEXUS documentation & AI config.`),
89
+ '',
90
+ COLORS.bold('What happens next:'),
91
+ COLORS.primary(' 1. Open your AI coding tool (Copilot, Cursor, Windsurf, etc.)'),
92
+ COLORS.primary(' 2. Ask it to do anything (e.g., "add a feature", "fix a bug")'),
93
+ COLORS.primary(' 3. It will detect the template docs and auto-populate them first'),
94
+ COLORS.primary(' 4. It will ask you questions for things it can\'t infer from code'),
95
+ '',
96
+ COLORS.dim('Files added:'),
97
+ COLORS.dim(' .nexus/docs/ — 8 structured documentation files (status: template)'),
98
+ COLORS.dim(' .nexus/ai/ AI agent instructions (single source of truth)'),
99
+ COLORS.dim(' .cursorrules, .windsurfrules, .clinerules, AGENTS.md AI tool pointers'),
100
+ COLORS.dim(' .github/copilot-instructions.md — GitHub Copilot config'),
101
+ ].join('\n');
102
+ console.log(boxen(message, {
103
+ padding: 1,
104
+ margin: 0,
105
+ borderStyle: 'round',
106
+ borderColor: 'cyan',
107
+ }));
95
108
  newline();
96
109
  }
97
110
  export const logger = {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,14 @@ export interface ProjectSignals {
14
14
  hasSrc: boolean;
15
15
  hasTsConfig: boolean;
16
16
  hasNodeModules: boolean;
17
+ hasGoMod: boolean;
18
+ hasCargoToml: boolean;
19
+ hasPyProjectToml: boolean;
20
+ hasFirebaseJson: boolean;
21
+ hasPomXml: boolean;
22
+ hasBuildGradle: boolean;
23
+ isInsideMonorepo: boolean;
24
+ monorepoRoot: string | null;
17
25
  }
18
26
  /** Information extracted from an existing project */
19
27
  export interface ProjectInfo {
@@ -39,7 +47,15 @@ export interface ProjectInfo {
39
47
  /**
40
48
  * Check whether a directory looks like it already contains a project.
41
49
  *
42
- * Returns `true` if a `package.json` exists at the target path.
50
+ * Now supports:
51
+ * - Node.js projects (package.json)
52
+ * - Spring Boot projects (pom.xml, build.gradle)
53
+ * - Cloud Functions (firebase.json, .firebaserc)
54
+ * - Go projects (go.mod)
55
+ * - Rust projects (Cargo.toml)
56
+ * - Python projects (pyproject.toml)
57
+ * - Monorepos (checks parent directories for workspace root)
58
+ *
43
59
  * This is a fast check used to decide whether to show the
44
60
  * "--adopt" suggestion before any heavier analysis.
45
61
  */
@@ -47,9 +63,9 @@ export declare function isExistingProject(targetDir: string): boolean;
47
63
  /**
48
64
  * Inspect a directory and return detailed project information.
49
65
  *
50
- * This reads package.json (if present) and checks for common
51
- * framework/tooling markers so the adopt generator can pre-fill
52
- * as much of the NEXUS documentation as possible.
66
+ * This reads package.json (if present), checks for non-Node.js project
67
+ * markers (go.mod, Cargo.toml, etc.), and detects monorepo structure.
68
+ * The adopt generator uses this to pre-fill NEXUS documentation.
53
69
  */
54
70
  export declare function detectProject(targetDir: string): Promise<ProjectInfo>;
55
71
  //# sourceMappingURL=project-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,oDAAoD;IACpD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wCAAwC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiD3E"}
1
+ {"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IAExB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IAEzB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IAExB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,oDAAoD;IACpD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wCAAwC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA2B5D;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA6E3E"}
@@ -15,25 +15,68 @@ import fs from 'fs-extra';
15
15
  /**
16
16
  * Check whether a directory looks like it already contains a project.
17
17
  *
18
- * Returns `true` if a `package.json` exists at the target path.
18
+ * Now supports:
19
+ * - Node.js projects (package.json)
20
+ * - Spring Boot projects (pom.xml, build.gradle)
21
+ * - Cloud Functions (firebase.json, .firebaserc)
22
+ * - Go projects (go.mod)
23
+ * - Rust projects (Cargo.toml)
24
+ * - Python projects (pyproject.toml)
25
+ * - Monorepos (checks parent directories for workspace root)
26
+ *
19
27
  * This is a fast check used to decide whether to show the
20
28
  * "--adopt" suggestion before any heavier analysis.
21
29
  */
22
30
  export function isExistingProject(targetDir) {
23
- return fs.existsSync(path.join(targetDir, 'package.json'));
31
+ // Check Node.js
32
+ if (fs.existsSync(path.join(targetDir, 'package.json')))
33
+ return true;
34
+ // Check Spring Boot / Maven
35
+ if (fs.existsSync(path.join(targetDir, 'pom.xml')))
36
+ return true;
37
+ if (fs.existsSync(path.join(targetDir, 'build.gradle')))
38
+ return true;
39
+ if (fs.existsSync(path.join(targetDir, 'build.gradle.kts')))
40
+ return true;
41
+ // Check Cloud Functions
42
+ if (fs.existsSync(path.join(targetDir, 'firebase.json')))
43
+ return true;
44
+ if (fs.existsSync(path.join(targetDir, '.firebaserc')))
45
+ return true;
46
+ // Check Go
47
+ if (fs.existsSync(path.join(targetDir, 'go.mod')))
48
+ return true;
49
+ // Check Rust
50
+ if (fs.existsSync(path.join(targetDir, 'Cargo.toml')))
51
+ return true;
52
+ // Check Python
53
+ if (fs.existsSync(path.join(targetDir, 'pyproject.toml')))
54
+ return true;
55
+ // Check if we're inside a monorepo (has parent package.json with workspaces)
56
+ const monorepoRoot = findMonorepoRoot(targetDir);
57
+ if (monorepoRoot)
58
+ return true;
59
+ return false;
24
60
  }
25
61
  /**
26
62
  * Inspect a directory and return detailed project information.
27
63
  *
28
- * This reads package.json (if present) and checks for common
29
- * framework/tooling markers so the adopt generator can pre-fill
30
- * as much of the NEXUS documentation as possible.
64
+ * This reads package.json (if present), checks for non-Node.js project
65
+ * markers (go.mod, Cargo.toml, etc.), and detects monorepo structure.
66
+ * The adopt generator uses this to pre-fill NEXUS documentation.
31
67
  */
32
68
  export async function detectProject(targetDir) {
33
69
  const signals = await detectSignals(targetDir);
34
70
  // Default empty info
35
71
  const info = {
36
- detected: signals.hasPackageJson,
72
+ detected: signals.hasPackageJson ||
73
+ signals.hasGoMod ||
74
+ signals.hasCargoToml ||
75
+ signals.hasPyProjectToml ||
76
+ signals.hasFirebaseJson ||
77
+ signals.hasPomXml ||
78
+ signals.hasBuildGradle ||
79
+ signals.isInsideMonorepo,
37
80
  signals,
38
81
  name: null,
39
82
  description: null,
@@ -43,28 +86,50 @@ export async function detectProject(targetDir) {
43
86
  hasNexus: false,
44
87
  dependencies: [],
45
88
  };
46
- if (!signals.hasPackageJson) {
89
+ // Handle Spring Boot projects (Java/Kotlin)
90
+ if (signals.hasPomXml || signals.hasBuildGradle) {
91
+ info.framework = 'spring-boot';
92
+ info.name = path.basename(targetDir);
93
+ info.description = 'Spring Boot API';
94
+ info.hasNexus = fs.existsSync(path.join(targetDir, '.nexus'));
47
95
  return info;
48
96
  }
49
- // Read package.json
50
- try {
51
- const pkgPath = path.join(targetDir, 'package.json');
52
- const pkg = (await fs.readJSON(pkgPath));
53
- info.name = typeof pkg.name === 'string' ? pkg.name : null;
54
- info.description = typeof pkg.description === 'string' ? pkg.description : null;
55
- // Collect all dependency names
56
- const deps = Object.keys(pkg.dependencies ?? {});
57
- const devDeps = Object.keys(pkg.devDependencies ?? {});
58
- info.dependencies = [...deps, ...devDeps];
59
- // Detect framework
60
- info.framework = detectFramework(info.dependencies);
61
- // Detect test framework
62
- info.testFramework = detectTestFramework(info.dependencies);
63
- // Detect package manager
64
- info.packageManager = await detectPM(targetDir);
97
+ // If no package.json at this level but we're in a monorepo, try reading from monorepo root
98
+ const pkgPath = signals.hasPackageJson
99
+ ? path.join(targetDir, 'package.json')
100
+ : signals.monorepoRoot
101
+ ? path.join(signals.monorepoRoot, 'package.json')
102
+ : null;
103
+ if (pkgPath && fs.existsSync(pkgPath)) {
104
+ try {
105
+ const pkg = (await fs.readJSON(pkgPath));
106
+ info.name = typeof pkg.name === 'string' ? pkg.name : null;
107
+ info.description = typeof pkg.description === 'string' ? pkg.description : null;
108
+ // Collect all dependency names
109
+ const deps = Object.keys(pkg.dependencies ?? {});
110
+ const devDeps = Object.keys(pkg.devDependencies ?? {});
111
+ info.dependencies = [...deps, ...devDeps];
112
+ // Detect framework
113
+ info.framework = detectFramework(info.dependencies);
114
+ // Detect test framework
115
+ info.testFramework = detectTestFramework(info.dependencies);
116
+ // Detect package manager
117
+ info.packageManager = await detectPM(targetDir);
118
+ }
119
+ catch {
120
+ // package.json unreadable — keep defaults
121
+ }
65
122
  }
66
- catch {
67
- // package.json unreadable — keep defaults
123
+ // For non-Node.js projects, set framework to the detected language
124
+ if (!info.framework) {
125
+ if (signals.hasGoMod)
126
+ info.framework = 'go';
127
+ else if (signals.hasCargoToml)
128
+ info.framework = 'rust';
129
+ else if (signals.hasPyProjectToml)
130
+ info.framework = 'python';
131
+ else if (signals.hasFirebaseJson)
132
+ info.framework = 'cloud-functions';
68
133
  }
69
134
  // Check for existing .nexus/
70
135
  info.hasNexus = fs.existsSync(path.join(targetDir, '.nexus'));
@@ -74,16 +139,80 @@ export async function detectProject(targetDir) {
74
139
  * Internal helpers
75
140
  * ────────────────────────────────────────────────────────────── */
76
141
  async function detectSignals(dir) {
77
- const [hasPackageJson, hasGit, hasSrc, hasTsConfig, hasNodeModules] = await Promise.all([
142
+ const [hasPackageJson, hasGit, hasSrc, hasTsConfig, hasNodeModules, hasGoMod, hasCargoToml, hasPyProjectToml, hasFirebaseJson, hasPomXml, hasBuildGradle,] = await Promise.all([
78
143
  fs.pathExists(path.join(dir, 'package.json')),
79
144
  fs.pathExists(path.join(dir, '.git')),
80
145
  fs.pathExists(path.join(dir, 'src')),
81
146
  fs.pathExists(path.join(dir, 'tsconfig.json')),
82
147
  fs.pathExists(path.join(dir, 'node_modules')),
148
+ fs.pathExists(path.join(dir, 'go.mod')),
149
+ fs.pathExists(path.join(dir, 'Cargo.toml')),
150
+ fs.pathExists(path.join(dir, 'pyproject.toml')),
151
+ fs.pathExists(path.join(dir, 'firebase.json')),
152
+ fs.pathExists(path.join(dir, 'pom.xml')),
153
+ fs.pathExists(path.join(dir, 'build.gradle')).then(async (exists) => exists || await fs.pathExists(path.join(dir, 'build.gradle.kts'))),
83
154
  ]);
84
- return { hasPackageJson, hasGit, hasSrc, hasTsConfig, hasNodeModules };
155
+ // Check if we're inside a monorepo
156
+ const monorepoRoot = findMonorepoRoot(dir);
157
+ const isInsideMonorepo = !!monorepoRoot && monorepoRoot !== dir;
158
+ return {
159
+ hasPackageJson,
160
+ hasGit,
161
+ hasSrc,
162
+ hasTsConfig,
163
+ hasNodeModules,
164
+ hasGoMod,
165
+ hasCargoToml,
166
+ hasPyProjectToml,
167
+ hasFirebaseJson,
168
+ hasPomXml,
169
+ hasBuildGradle,
170
+ isInsideMonorepo,
171
+ monorepoRoot,
172
+ };
173
+ }
174
+ /**
175
+ * Walk up the directory tree to find a monorepo root.
176
+ *
177
+ * A monorepo root is identified by a package.json with a `workspaces` field
178
+ * (Yarn/npm/pnpm workspaces) or a `pnpm-workspace.yaml` file.
179
+ *
180
+ * Returns the absolute path to the monorepo root, or null if not found.
181
+ */
182
+ function findMonorepoRoot(startDir) {
183
+ let currentDir = startDir;
184
+ const root = path.parse(currentDir).root;
185
+ // Walk up until we hit the filesystem root
186
+ while (currentDir !== root) {
187
+ const parentDir = path.dirname(currentDir);
188
+ // Check for pnpm-workspace.yaml
189
+ if (fs.existsSync(path.join(parentDir, 'pnpm-workspace.yaml'))) {
190
+ return parentDir;
191
+ }
192
+ // Check for package.json with workspaces
193
+ const pkgPath = path.join(parentDir, 'package.json');
194
+ if (fs.existsSync(pkgPath)) {
195
+ try {
196
+ const pkg = fs.readJSONSync(pkgPath);
197
+ if (pkg.workspaces) {
198
+ return parentDir;
199
+ }
200
+ }
201
+ catch {
202
+ // Ignore unreadable package.json
203
+ }
204
+ }
205
+ currentDir = parentDir;
206
+ }
207
+ return null;
85
208
  }
86
209
  function detectFramework(deps) {
210
+ // Cloud Functions
211
+ if (deps.includes('firebase-functions'))
212
+ return 'cloud-functions';
213
+ if (deps.includes('@google-cloud/functions-framework'))
214
+ return 'cloud-functions';
215
+ // Frontend frameworks
87
216
  if (deps.includes('next'))
88
217
  return 'nextjs';
89
218
  if (deps.includes('nuxt') || deps.includes('nuxt3'))
@@ -1 +1 @@
1
- {"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * Single source of truth for the CLI version.
5
5
  */
6
- export declare const version = "0.1.4";
6
+ export declare const version = "0.2.1";
7
7
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * Single source of truth for the CLI version.
5
5
  */
6
- export const version = '0.1.4';
6
+ export const version = '0.2.1';
7
7
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nexus-framework/cli",
3
- "version": "0.1.4",
4
- "description": "AI-Native Project Scaffolding for the Modern Era generates production-ready, AI-optimized project structures",
3
+ "version": "0.2.1",
4
+ "description": "The AI-Native Development Framework turns every project into an AI-powered workspace with structured docs, progressive memory, and configurable agent personas",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -57,11 +57,13 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@inquirer/prompts": "^7.3.2",
60
+ "boxen": "^8.0.1",
60
61
  "chalk": "^5.3.0",
61
62
  "commander": "^12.1.0",
62
63
  "execa": "^9.5.2",
63
64
  "figlet": "^1.8.0",
64
65
  "fs-extra": "^11.2.0",
66
+ "gradient-string": "^3.0.0",
65
67
  "inquirer": "^12.3.2",
66
68
  "mustache": "^4.2.0",
67
69
  "ora": "^8.1.1",