@mrpatronz/nexusflow 0.1.12 โ†’ 0.2.0

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 (80) hide show
  1. package/dist/analyzers/detect-apis.d.ts.map +1 -1
  2. package/dist/analyzers/detect-apis.js +168 -39
  3. package/dist/analyzers/detect-apis.js.map +1 -1
  4. package/dist/analyzers/detect-deps.d.ts +26 -4
  5. package/dist/analyzers/detect-deps.d.ts.map +1 -1
  6. package/dist/analyzers/detect-deps.js +228 -66
  7. package/dist/analyzers/detect-deps.js.map +1 -1
  8. package/dist/analyzers/index.d.ts +1 -1
  9. package/dist/analyzers/index.d.ts.map +1 -1
  10. package/dist/analyzers/index.js +7 -3
  11. package/dist/analyzers/index.js.map +1 -1
  12. package/dist/analyzers/readme-summarizer.d.ts +3 -1
  13. package/dist/analyzers/readme-summarizer.d.ts.map +1 -1
  14. package/dist/analyzers/readme-summarizer.js +43 -19
  15. package/dist/analyzers/readme-summarizer.js.map +1 -1
  16. package/dist/analyzers/tech-stack.d.ts +2 -2
  17. package/dist/analyzers/tech-stack.d.ts.map +1 -1
  18. package/dist/analyzers/tech-stack.js +257 -232
  19. package/dist/analyzers/tech-stack.js.map +1 -1
  20. package/dist/commands/create.d.ts.map +1 -1
  21. package/dist/commands/create.js +15 -8
  22. package/dist/commands/create.js.map +1 -1
  23. package/dist/commands/sync.d.ts.map +1 -1
  24. package/dist/commands/sync.js +31 -0
  25. package/dist/commands/sync.js.map +1 -1
  26. package/dist/core/config.d.ts.map +1 -1
  27. package/dist/core/config.js +25 -0
  28. package/dist/core/config.js.map +1 -1
  29. package/dist/core/graph.d.ts.map +1 -1
  30. package/dist/core/graph.js +1 -2
  31. package/dist/core/graph.js.map +1 -1
  32. package/dist/core/packer.d.ts +2 -1
  33. package/dist/core/packer.d.ts.map +1 -1
  34. package/dist/core/packer.js +36 -30
  35. package/dist/core/packer.js.map +1 -1
  36. package/dist/core/packer.test.js +4 -5
  37. package/dist/core/packer.test.js.map +1 -1
  38. package/dist/core/workspace.d.ts.map +1 -1
  39. package/dist/core/workspace.js +22 -12
  40. package/dist/core/workspace.js.map +1 -1
  41. package/dist/generators/base.d.ts.map +1 -1
  42. package/dist/generators/base.js +63 -31
  43. package/dist/generators/base.js.map +1 -1
  44. package/dist/generators/index.d.ts.map +1 -1
  45. package/dist/generators/index.js +17 -0
  46. package/dist/generators/index.js.map +1 -1
  47. package/dist/generators/map-generator.d.ts +15 -0
  48. package/dist/generators/map-generator.d.ts.map +1 -0
  49. package/dist/generators/map-generator.js +385 -0
  50. package/dist/generators/map-generator.js.map +1 -0
  51. package/dist/generators/map-generator.test.d.ts +2 -0
  52. package/dist/generators/map-generator.test.d.ts.map +1 -0
  53. package/dist/generators/map-generator.test.js +74 -0
  54. package/dist/generators/map-generator.test.js.map +1 -0
  55. package/dist/generators/plan-generator.d.ts +2 -0
  56. package/dist/generators/plan-generator.d.ts.map +1 -1
  57. package/dist/generators/plan-generator.js +104 -8
  58. package/dist/generators/plan-generator.js.map +1 -1
  59. package/dist/types.d.ts +18 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +2 -1
  62. package/src/analyzers/detect-apis.ts +192 -40
  63. package/src/analyzers/detect-deps.ts +246 -69
  64. package/src/analyzers/index.ts +7 -3
  65. package/src/analyzers/readme-summarizer.ts +48 -19
  66. package/src/analyzers/tech-stack.ts +222 -194
  67. package/src/commands/create.ts +16 -10
  68. package/src/commands/sync.ts +35 -0
  69. package/src/core/config.ts +25 -0
  70. package/src/core/graph.ts +1 -2
  71. package/src/core/packer.test.ts +4 -6
  72. package/src/core/packer.ts +42 -43
  73. package/src/core/workspace.ts +23 -13
  74. package/src/generators/base.ts +67 -30
  75. package/src/generators/index.ts +17 -0
  76. package/src/generators/map-generator.test.ts +81 -0
  77. package/src/generators/map-generator.ts +405 -0
  78. package/src/generators/plan-generator.ts +117 -7
  79. package/src/types.ts +13 -0
  80. package/vitest.config.ts +13 -0
@@ -3,12 +3,16 @@
3
3
  * Builds the shared markdown context content that all AI assistant generators
4
4
  * use as their foundation. Now includes rich project analysis data when available.
5
5
  */
6
+ import * as path from 'node:path';
7
+ import * as fs from 'node:fs';
6
8
  /**
7
9
  * Formats a ProjectAnalysis into a readable markdown section.
8
10
  */
9
- function formatProjectSection(analysis) {
11
+ function formatProjectSection(analysis, workspacePath) {
10
12
  const lines = [];
11
13
  lines.push(`### ${analysis.name}`);
14
+ const mapPath = path.join(workspacePath, `nexusflow-map-${analysis.name}.md`).replace(/\\/g, '/');
15
+ lines.push(`- **Architecture Map**: [nexusflow-map-${analysis.name}.md](file:///${mapPath}) โ€” **Instruction**: You MUST read this architecture map before exploring or modifying the \`${analysis.name}\` repository to understand its layout, API endpoints, test commands, and detected usage patterns.`);
12
16
  // Tech stack
13
17
  const { techStack } = analysis;
14
18
  if (techStack.languages.length > 0 && techStack.languages[0] !== 'other') {
@@ -62,13 +66,14 @@ function formatProjectSection(analysis) {
62
66
  */
63
67
  export function buildContextContent(ctx) {
64
68
  const { feature, repos, analysis } = ctx;
69
+ const workspacePath = feature.workspacePath;
65
70
  // Build project sections โ€” rich if analysis is available, simple if not
66
71
  let projectSections;
67
72
  if (analysis && analysis.size > 0) {
68
73
  const sections = repos.map((r) => {
69
74
  const a = analysis.get(r.path);
70
75
  if (a)
71
- return formatProjectSection(a);
76
+ return formatProjectSection(a, workspacePath);
72
77
  return `### ${r.name}\n- **Path**: \`${r.path}\``;
73
78
  });
74
79
  projectSections = sections.join('\n\n');
@@ -103,14 +108,33 @@ ${allConfigs.join('\n')}
103
108
  // Resumption commands section
104
109
  let resumptionSection = '';
105
110
  if (feature.resumption) {
106
- const { testCommand, mockCommand, startCommand } = feature.resumption;
111
+ let { testCommand, mockCommand, startCommand } = feature.resumption;
107
112
  const parts = [];
108
113
  if (mockCommand)
109
114
  parts.push(`- **Setup/Mock Command**: \`${mockCommand}\``);
110
115
  if (startCommand)
111
116
  parts.push(`- **Start/Run Command**: \`${startCommand}\``);
112
- if (testCommand)
113
- parts.push(`- **Verification/Test Command**: \`${testCommand}\``);
117
+ if (testCommand) {
118
+ if (testCommand === 'npm run test') {
119
+ const hasJs = repos.some(r => {
120
+ const a = analysis?.get(r.path);
121
+ return a?.techStack.languages.includes('typescript') || a?.techStack.languages.includes('javascript');
122
+ });
123
+ const hasCsharp = repos.some(r => {
124
+ const a = analysis?.get(r.path);
125
+ return a?.techStack.languages.includes('csharp');
126
+ });
127
+ if (hasCsharp && !hasJs) {
128
+ testCommand = 'dotnet test';
129
+ }
130
+ else if (!hasJs && !hasCsharp) {
131
+ testCommand = undefined;
132
+ }
133
+ }
134
+ if (testCommand) {
135
+ parts.push(`- **Verification/Test Command**: \`${testCommand}\``);
136
+ }
137
+ }
114
138
  if (parts.length > 0) {
115
139
  resumptionSection = `
116
140
  ---
@@ -123,14 +147,45 @@ ${parts.join('\n')}
123
147
  `;
124
148
  }
125
149
  }
150
+ // Check if overview.md already exists
151
+ const overviewFile = path.join(workspacePath, 'nexusflow-overview.md');
152
+ const hasOverview = fs.existsSync(overviewFile);
153
+ let taskSection = '';
154
+ if (hasOverview) {
155
+ taskSection = `## Task & Step-by-Step Maintenance
156
+
157
+ The universal reference file **\`nexusflow-overview.md\`** has already been created. Your task is to:
158
+
159
+ 1. **Keep it Updated**: Maintain and update \`nexusflow-overview.md\` with any new architectural findings, layout changes, or assumptions.
160
+ 2. **Review Assumptions**: Ensure that inter-repo relationships and package dependencies documented there reflect the current codebase.
161
+ 3. **Address Open Questions**: If there are outstanding items in the "Clarifying Questions for the User" section, discuss them with the user.
162
+ `;
163
+ }
164
+ else {
165
+ taskSection = `## Task & Step-by-Step Initialization
166
+
167
+ Your very first task upon entering this workspace is to analyze the codebase and document it in a universal reference file:
168
+
169
+ 1. **Create \`nexusflow-overview.md\`** at the workspace root.
170
+ 2. **Project Assumptions**: For each project, write down a clear assumption of what it does, its primary tech stack, and its core responsibilities.
171
+ 3. **Inter-Repo Relationships**: Document how the repos relate:
172
+ - Shared libraries/packages (producers and consumers).
173
+ - API boundaries (which repos expose APIs, which ones consume them).
174
+ - Data flows and dependencies.
175
+ 4. **Clarifying Questions**: If any feature requirements, architectural patterns, or API contracts are unclear, list them explicitly under a section called **"Clarifying Questions for the User"**.
176
+ 5. **Universal Reference**: Keep this file updated. This acts as a universal reference so that any LLM assistant (Claude, Antigravity, Codex, Cursor, Copilot) joining this workspace instantly understands the project landscape.
177
+
178
+ Once you have created \`nexusflow-overview.md\` and compiled your questions, ask the user to verify your assumptions and answer your questions before proceeding to write code.
179
+ `;
180
+ }
181
+ const knowledgePath = path.join(workspacePath, 'nexusflow-knowledge.md').replace(/\\/g, '/');
126
182
  return `# Multi-Repo Workspace Context
127
183
 
128
184
  ## Feature: ${feature.id}
129
185
 
130
186
  **Description:** ${feature.description}
131
187
 
132
- **Branch:** \`${feature.branchName}\`
133
- **Created:** ${feature.createdAt}
188
+ > For the detailed feature specification, architecture decisions, and session memory, see [nexusflow-knowledge.md](file:///${knowledgePath}).
134
189
 
135
190
  ---
136
191
 
@@ -144,30 +199,7 @@ ${existingConfigsSection}
144
199
  ${resumptionSection}
145
200
  ---
146
201
 
147
- ## Codebase Context (Repomix)
148
-
149
- A packed, token-efficient version of the entire multi-repo codebase is automatically generated and updated at the workspace root:
150
- - **File**: \`nexusflow-context.xml\`
151
- - **Purpose**: Contains the aggregated source code and structure of all projects in the workspace.
152
- - **Usage**: You can read this file directly to understand relationships or search for code patterns across all projects without needing to manually traverse directories.
153
-
154
- ---
155
-
156
- ## Task & Step-by-Step Initialization
157
-
158
- Your very first task upon entering this workspace is to analyze the codebase and document it in a universal reference file:
159
-
160
- 1. **Create \`nexusflow-overview.md\`** at the workspace root.
161
- 2. **Project Assumptions**: For each project, write down a clear assumption of what it does, its primary tech stack, and its core responsibilities.
162
- 3. **Inter-Repo Relationships**: Document how the repos relate:
163
- - Shared libraries/packages (producers and consumers).
164
- - API boundaries (which repos expose APIs, which ones consume them).
165
- - Data flows and dependencies.
166
- 4. **Clarifying Questions**: If any feature requirements, architectural patterns, or API contracts are unclear, list them explicitly under a section called **"Clarifying Questions for the User"**.
167
- 5. **Universal Reference**: Keep this file updated. This acts as a universal reference so that any LLM assistant (Claude, Antigravity, Codex, Cursor, Copilot) joining this workspace instantly understands the project landscape.
168
-
169
- Once you have created \`nexusflow-overview.md\` and compiled your questions, ask the user to verify your assumptions and answer your questions before proceeding to write code.
170
-
202
+ ${taskSection}
171
203
  ---
172
204
 
173
205
  ## Guidelines
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA8FjE;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,WAAW,EAAE,EACzB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAmEf;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA8FjE;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,WAAW,EAAE,EACzB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAoFf;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC"}
@@ -116,6 +116,23 @@ export async function generateContextFiles(ctx, assistants, workspacePath) {
116
116
  const message = error instanceof Error ? error.message : String(error);
117
117
  console.error(chalk.red(' โœ–'), `Failed to generate universal context files: ${message}`);
118
118
  }
119
+ // Generate per-repo architecture maps
120
+ if (ctx.analysis) {
121
+ for (const repo of ctx.repos) {
122
+ const a = ctx.analysis.get(repo.path);
123
+ if (a) {
124
+ try {
125
+ const { generateRepoMap } = await import('./map-generator.js');
126
+ await generateRepoMap(repo, a, workspacePath);
127
+ console.log(chalk.green(' โœ”'), `Generated Architecture Map for ${chalk.bold(repo.name)}`);
128
+ }
129
+ catch (error) {
130
+ const message = error instanceof Error ? error.message : String(error);
131
+ console.error(chalk.red(' โœ–'), `Failed to generate Architecture Map for ${repo.name}: ${message}`);
132
+ }
133
+ }
134
+ }
135
+ }
119
136
  for (const assistant of assistants) {
120
137
  const entry = GENERATORS[assistant];
121
138
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,UAAU,GAMZ;IACF,MAAM,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE;IACnE,WAAW,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE;IACxE,KAAK,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EAAE;IACjE,OAAO,EAAE,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,iCAAiC,EAAE;IAC3F,MAAM,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,6BAA6B,EAAE;CACtF,CAAC;AAEF;;GAEG;AACH,SAAS,qBAAqB,CAAC,GAAqB;IAClD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAEzC,oDAAoD;IACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACjF,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO;oBACpC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC1C,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,mCAAmC;IACnC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,mCAAmC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtG,OAAO,2BAA2B,OAAO,CAAC,EAAE;;;;;;;;EAQ5C,OAAO,CAAC,WAAW;;gBAEL,OAAO,CAAC,UAAU;eACnB,OAAO,CAAC,SAAS;;;;EAI9B,QAAQ;;;;;;;;;;;;;;EAcR,aAAa;;;;;;;;;;;;;;;CAed,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAqB,EACrB,UAAyB,EACzB,aAAqB;IAErB,iEAAiE;IACjE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAClB,uBAAuB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CACpD,CAAC;QAEF,uDAAuD;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;QAC9G,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,qEAAqE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,+CAA+C,OAAO,EAAE,CACzD,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAClB,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,SAAS,EAAE,CAC7D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,sBAAsB,KAAK,CAAC,UAAU,QAAQ,SAAS,KAAK,OAAO,EAAE,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,2BAA2B,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,oDAAoD,OAAO,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,CAAC;QACH,MAAM,0BAA0B,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,2CAA2C,OAAO,EAAE,CACrD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @module generators/map-generator
3
+ * Generates a nexusflow-map-<repo>.md file for each repository in the workspace.
4
+ * Provides a localized, token-efficient architectural map for AI assistants.
5
+ */
6
+ import type { ProjectAnalysis, RepoInfo } from '../types.js';
7
+ /**
8
+ * Generates a `nexusflow-map-<repo>.md` file in the workspace root.
9
+ *
10
+ * @param repo - The repository metadata.
11
+ * @param analysis - The repository analysis result.
12
+ * @param workspacePath - Absolute path to the workspace root directory.
13
+ */
14
+ export declare function generateRepoMap(repo: RepoInfo, analysis: ProjectAnalysis, workspacePath: string): Promise<void>;
15
+ //# sourceMappingURL=map-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-generator.d.ts","sourceRoot":"","sources":["../../src/generators/map-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqG7D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Rf"}
@@ -0,0 +1,385 @@
1
+ /**
2
+ * @module generators/map-generator
3
+ * Generates a nexusflow-map-<repo>.md file for each repository in the workspace.
4
+ * Provides a localized, token-efficient architectural map for AI assistants.
5
+ */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ import { globby } from 'globby';
9
+ import { loadConfig } from '../core/config.js';
10
+ const LANG_PATTERNS = {
11
+ csharp: [
12
+ {
13
+ name: 'FluentValidation',
14
+ label: 'FluentValidation Validator subclasses',
15
+ regex: /:\s*AbstractValidator\s*</g,
16
+ description: 'Used for domain/command validation rules.'
17
+ },
18
+ {
19
+ name: 'MediatR Handlers',
20
+ label: 'MediatR Request Handlers',
21
+ regex: /:\s*IRequestHandler\s*</g,
22
+ description: 'Used for CQRS command/query handler pattern.'
23
+ },
24
+ {
25
+ name: 'MediatR Requests',
26
+ label: 'MediatR Requests/Commands',
27
+ regex: /:\s*IRequest\b(?!Handler)/g,
28
+ description: 'Used for MediatR command/query dispatching.'
29
+ },
30
+ {
31
+ name: 'AutoMapper Profiles',
32
+ label: 'AutoMapper Mapping Profiles',
33
+ regex: /:\s*Profile\b/g,
34
+ description: 'Used for object-to-object mappings.'
35
+ },
36
+ {
37
+ name: 'DataAnnotations',
38
+ label: 'DataAnnotations Validation Attributes',
39
+ regex: /using\s+System\.ComponentModel\.DataAnnotations;/g,
40
+ description: 'Used for property-level attribute validation.'
41
+ }
42
+ ],
43
+ typescript: [
44
+ {
45
+ name: 'Zod Schemas',
46
+ label: 'Zod Object Schemas',
47
+ regex: /z\.object\s*\(/g,
48
+ description: 'Used for schema parsing/validation.'
49
+ },
50
+ {
51
+ name: 'NestJS Controllers',
52
+ label: 'NestJS Routing Controllers',
53
+ regex: /@Controller\s*\(/g,
54
+ description: 'Used for controller routing endpoints.'
55
+ },
56
+ {
57
+ name: 'NestJS Injectables',
58
+ label: 'NestJS Injectable Services',
59
+ regex: /@Injectable\s*\(\)/g,
60
+ description: 'Used for dependency injection services.'
61
+ },
62
+ {
63
+ name: 'React Components',
64
+ label: 'React Functional Components',
65
+ regex: /React\.FC/g,
66
+ description: 'Used for component UI views.'
67
+ }
68
+ ],
69
+ javascript: [
70
+ {
71
+ name: 'Zod Schemas',
72
+ label: 'Zod Object Schemas',
73
+ regex: /z\.object\s*\(/g,
74
+ description: 'Used for schema parsing/validation.'
75
+ }
76
+ ],
77
+ python: [
78
+ {
79
+ name: 'Pydantic Models',
80
+ label: 'Pydantic BaseModel subclasses',
81
+ regex: /class\s+\w+\s*\(\s*BaseModel\s*\)/g,
82
+ description: 'Used for data schemas and validation.'
83
+ },
84
+ {
85
+ name: 'FastAPI Routers',
86
+ label: 'FastAPI APIRouter instances',
87
+ regex: /=([\s\S]*?)APIRouter\s*\(/g,
88
+ description: 'Used for endpoint routing.'
89
+ }
90
+ ],
91
+ go: [
92
+ {
93
+ name: 'Go JSON tags',
94
+ label: 'Go JSON struct tags',
95
+ regex: /`json:"[^"]+"`/g,
96
+ description: 'Used for struct serialization/deserialization.'
97
+ }
98
+ ]
99
+ };
100
+ /**
101
+ * Generates a `nexusflow-map-<repo>.md` file in the workspace root.
102
+ *
103
+ * @param repo - The repository metadata.
104
+ * @param analysis - The repository analysis result.
105
+ * @param workspacePath - Absolute path to the workspace root directory.
106
+ */
107
+ export async function generateRepoMap(repo, analysis, workspacePath) {
108
+ const repoName = repo.name;
109
+ const worktreePath = path.join(workspacePath, repoName);
110
+ const md = [];
111
+ md.push(`# Repository Architecture Map โ€” ${repoName}`);
112
+ md.push('');
113
+ md.push(`> **Repository Path**: \`${worktreePath}\``);
114
+ md.push(`> **Generated At**: ${new Date().toISOString()} (UTC)`);
115
+ md.push(`> **Regeneration Command**: Run \`nexusflow sync\` to update this map and workspace planning files.`);
116
+ md.push(`> **Note**: Maps are advisory snapshots of the codebase. Always verify route parameters, patterns, and filenames before relying on them.`);
117
+ md.push('');
118
+ const config = await loadConfig();
119
+ if (config.packContextXml) {
120
+ const contextXmlPath = path.join(workspacePath, `nexusflow-context-${repoName}.xml`).replace(/\\/g, '/');
121
+ md.push(`> **AI-friendly Packed Context**: [nexusflow-context-${repoName}.xml](file:///${contextXmlPath})`);
122
+ md.push(`> โ€” **Instruction**: If you need a complete, AI-friendly XML snapshot of this repository's codebase, read this file.`);
123
+ md.push('');
124
+ }
125
+ // 1. Solution/Project Layout
126
+ md.push('## ๐Ÿ—๏ธ Project Layout');
127
+ md.push('');
128
+ try {
129
+ const slnFiles = await globby('**/*.sln', {
130
+ cwd: worktreePath,
131
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
132
+ });
133
+ const csprojFiles = await globby('**/*.csproj', {
134
+ cwd: worktreePath,
135
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
136
+ });
137
+ const packageJsons = await globby('**/package.json', {
138
+ cwd: worktreePath,
139
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
140
+ });
141
+ if (slnFiles.length > 0) {
142
+ md.push('### .NET Solutions');
143
+ for (const sln of slnFiles) {
144
+ md.push(`- **Solution**: \`${sln}\``);
145
+ }
146
+ md.push('');
147
+ }
148
+ if (csprojFiles.length > 0) {
149
+ md.push('### .NET Projects');
150
+ for (const csproj of csprojFiles) {
151
+ const isTest = csproj.toLowerCase().includes('test') || csproj.toLowerCase().includes('spec');
152
+ const role = isTest ? 'Test Suite' : 'App/Library';
153
+ md.push(`- \`${csproj}\` (${role})`);
154
+ }
155
+ md.push('');
156
+ }
157
+ if (packageJsons.length > 0) {
158
+ md.push('### npm Packages & Modules');
159
+ for (const pj of packageJsons) {
160
+ md.push(`- \`${pj}\``);
161
+ }
162
+ md.push('');
163
+ }
164
+ }
165
+ catch {
166
+ md.push('_No project layout files discovered or error occurred._');
167
+ md.push('');
168
+ }
169
+ // 2. Extensible Usage Pattern Scanning
170
+ md.push('## ๐Ÿ’ก Detected Architectural Patterns & Usages');
171
+ md.push('');
172
+ const detectedLanguages = analysis.techStack.languages;
173
+ const patternCounts = new Map();
174
+ // Initialize counts
175
+ for (const lang of detectedLanguages) {
176
+ const rules = LANG_PATTERNS[lang] || [];
177
+ for (const rule of rules) {
178
+ patternCounts.set(rule.name, { label: rule.label, count: 0, description: rule.description });
179
+ }
180
+ }
181
+ // Scan files for pattern usage
182
+ try {
183
+ const extensions = detectedLanguages.map(l => {
184
+ if (l === 'csharp')
185
+ return 'cs';
186
+ if (l === 'typescript')
187
+ return 'ts';
188
+ if (l === 'javascript')
189
+ return 'js';
190
+ if (l === 'python')
191
+ return 'py';
192
+ if (l === 'go')
193
+ return 'go';
194
+ return '';
195
+ }).filter(ext => ext !== '');
196
+ if (extensions.length > 0) {
197
+ const globPattern = extensions.length === 1 ? `**/*.${extensions[0]}` : `**/*.{${extensions.join(',')}}`;
198
+ const srcFiles = await globby(globPattern, {
199
+ cwd: worktreePath,
200
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
201
+ });
202
+ for (const file of srcFiles) {
203
+ const fullPath = path.join(worktreePath, file);
204
+ const content = await fs.readFile(fullPath, 'utf-8');
205
+ for (const lang of detectedLanguages) {
206
+ const rules = LANG_PATTERNS[lang] || [];
207
+ for (const rule of rules) {
208
+ rule.regex.lastIndex = 0;
209
+ const matches = content.match(rule.regex);
210
+ if (matches) {
211
+ const val = patternCounts.get(rule.name);
212
+ val.count += matches.length;
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ catch {
220
+ // Ignore errors
221
+ }
222
+ md.push('### Static Analysis Findings');
223
+ if (patternCounts.size > 0) {
224
+ for (const [, v] of patternCounts) {
225
+ md.push(`- **${v.label}**: Found ${v.count} occurrence(s). _(${v.description})_`);
226
+ }
227
+ }
228
+ else {
229
+ md.push('_No architectural usage patterns detected via static analysis._');
230
+ }
231
+ md.push('');
232
+ md.push('### Packages Present (Dependencies)');
233
+ if (analysis.dependencies.length > 0) {
234
+ for (const dep of analysis.dependencies) {
235
+ md.push(`- \`${dep.name}\` (${dep.version || 'unknown version'})`);
236
+ }
237
+ }
238
+ else {
239
+ md.push('_No package dependencies detected._');
240
+ }
241
+ md.push('');
242
+ // 3. Endpoint Inventory
243
+ md.push('## ๐Ÿ”Œ API Endpoints');
244
+ md.push('');
245
+ if (analysis.endpoints.length > 0) {
246
+ md.push('| Method | Route | Controller/Source File |');
247
+ md.push('|:---|:---|:---|');
248
+ for (const ep of analysis.endpoints) {
249
+ const sourceLink = ep.source
250
+ ? `[${path.basename(ep.source)}](file:///${path.join(worktreePath, ep.source)})`
251
+ : 'โ€”';
252
+ md.push(`| \`${ep.method}\` | \`${ep.path}\` | ${sourceLink} |`);
253
+ }
254
+ }
255
+ else {
256
+ md.push('_No endpoints detected._');
257
+ }
258
+ md.push('');
259
+ // 4. Test Landscape
260
+ md.push('## ๐Ÿงช Test Landscape & Command');
261
+ md.push('');
262
+ const testFrameworks = [];
263
+ let testCommand = '';
264
+ for (const dep of analysis.dependencies) {
265
+ const name = dep.name.toLowerCase();
266
+ if (name.includes('xunit'))
267
+ testFrameworks.push('xUnit');
268
+ if (name.includes('mstest') || name.includes('microsoft.testplatform'))
269
+ testFrameworks.push('MSTest');
270
+ if (name.includes('nunit'))
271
+ testFrameworks.push('NUnit');
272
+ if (name.includes('jest'))
273
+ testFrameworks.push('Jest');
274
+ if (name.includes('vitest'))
275
+ testFrameworks.push('Vitest');
276
+ if (name.includes('cypress'))
277
+ testFrameworks.push('Cypress');
278
+ if (name.includes('playwright'))
279
+ testFrameworks.push('Playwright');
280
+ }
281
+ if (analysis.techStack.languages.includes('csharp')) {
282
+ testCommand = 'dotnet test';
283
+ try {
284
+ const slns = await globby('**/*.sln', {
285
+ cwd: worktreePath,
286
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
287
+ });
288
+ if (slns.length > 0) {
289
+ testCommand = `dotnet test ${slns[0]}`;
290
+ }
291
+ }
292
+ catch { }
293
+ }
294
+ else if (analysis.techStack.languages.includes('typescript') || analysis.techStack.languages.includes('javascript')) {
295
+ testCommand = 'npm test';
296
+ }
297
+ if (testFrameworks.length > 0) {
298
+ md.push(`- **Frameworks**: ${testFrameworks.join(', ')}`);
299
+ }
300
+ else {
301
+ md.push('- **Frameworks**: None explicitly detected');
302
+ }
303
+ if (testCommand) {
304
+ md.push(`- **Run Command**: \`${testCommand}\``);
305
+ }
306
+ md.push('');
307
+ // 5. Custom Skills
308
+ md.push('## ๐Ÿ› ๏ธ Custom Agent Skills');
309
+ md.push('');
310
+ try {
311
+ const skills = await globby('**/SKILL.md', {
312
+ cwd: worktreePath,
313
+ absolute: true,
314
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
315
+ });
316
+ if (skills.length > 0) {
317
+ md.push('The following custom agent skills are available in this repository:');
318
+ for (const skill of skills) {
319
+ const relativeSkill = path.relative(worktreePath, skill);
320
+ const skillName = path.basename(path.dirname(skill));
321
+ md.push(`- **${skillName}**: [${relativeSkill}](file:///${skill})`);
322
+ }
323
+ }
324
+ else {
325
+ md.push('_No custom agent skills found in this repository._');
326
+ }
327
+ }
328
+ catch {
329
+ md.push('_No custom agent skills found in this repository._');
330
+ }
331
+ md.push('');
332
+ // 6. AI Configurations
333
+ md.push('## ๐Ÿ“„ AI Assistant Configurations');
334
+ md.push('');
335
+ if (analysis.existingAIConfigs.length > 0) {
336
+ md.push('Incorporate instructions from these local configurations:');
337
+ for (const config of analysis.existingAIConfigs) {
338
+ md.push(`- [${config.relativePath}](file:///${path.join(worktreePath, config.relativePath)}) (${config.assistant})`);
339
+ }
340
+ }
341
+ else {
342
+ md.push('_No pre-existing AI configurations found in this repository._');
343
+ }
344
+ md.push('');
345
+ // 7. Project-Specific Conventions (Agent-Defined)
346
+ const conventionsFile = path.join(workspacePath, `nexusflow-conventions-${repoName}.md`);
347
+ let hasConventions = false;
348
+ try {
349
+ await fs.access(conventionsFile);
350
+ hasConventions = true;
351
+ }
352
+ catch { }
353
+ if (!hasConventions) {
354
+ const starterContent = [
355
+ `# Project Conventions โ€” ${repoName}`,
356
+ '',
357
+ `<!--`,
358
+ `This file is dedicated for the AI assistant and developers to document project-specific conventions.`,
359
+ `Any corrections or guidelines discovered during implementation should be appended here.`,
360
+ `The NexusFlow generator will automatically merge these into the architecture map during sync.`,
361
+ `-->`,
362
+ '',
363
+ `## ๐Ÿ“Œ Custom Rules & Discovered Conventions`,
364
+ '- ',
365
+ ].join('\n');
366
+ try {
367
+ await fs.writeFile(conventionsFile, starterContent, 'utf-8');
368
+ }
369
+ catch { }
370
+ }
371
+ let customConventions = '';
372
+ try {
373
+ customConventions = await fs.readFile(conventionsFile, 'utf-8');
374
+ }
375
+ catch { }
376
+ if (customConventions) {
377
+ md.push('## ๐Ÿ“ Project-Specific Conventions (Agent-Defined)');
378
+ md.push('');
379
+ md.push(customConventions);
380
+ md.push('');
381
+ }
382
+ const outPath = path.join(workspacePath, `nexusflow-map-${repoName}.md`);
383
+ await fs.writeFile(outPath, md.join('\n'), 'utf-8');
384
+ }
385
+ //# sourceMappingURL=map-generator.js.map