@mrpatronz/nexusflow 0.2.1 → 0.2.3
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.
- package/dist/analyzers/index.d.ts +2 -0
- package/dist/analyzers/index.d.ts.map +1 -1
- package/dist/analyzers/index.js +9 -1
- package/dist/analyzers/index.js.map +1 -1
- package/dist/analyzers/messaging-analyzer.d.ts +17 -0
- package/dist/analyzers/messaging-analyzer.d.ts.map +1 -0
- package/dist/analyzers/messaging-analyzer.js +229 -0
- package/dist/analyzers/messaging-analyzer.js.map +1 -0
- package/dist/analyzers/readme-summarizer.d.ts.map +1 -1
- package/dist/analyzers/readme-summarizer.js +8 -4
- package/dist/analyzers/readme-summarizer.js.map +1 -1
- package/dist/analyzers/run-analyzer.d.ts +15 -0
- package/dist/analyzers/run-analyzer.d.ts.map +1 -0
- package/dist/analyzers/run-analyzer.js +246 -0
- package/dist/analyzers/run-analyzer.js.map +1 -0
- package/dist/core/config.js +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +18 -57
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +30 -14
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/map-generator.d.ts +1 -1
- package/dist/generators/map-generator.d.ts.map +1 -1
- package/dist/generators/map-generator.js +157 -54
- package/dist/generators/map-generator.js.map +1 -1
- package/dist/generators/map-generator.test.js +71 -0
- package/dist/generators/map-generator.test.js.map +1 -1
- package/dist/generators/plan-generator.d.ts +2 -2
- package/dist/generators/plan-generator.d.ts.map +1 -1
- package/dist/generators/plan-generator.js +47 -67
- package/dist/generators/plan-generator.js.map +1 -1
- package/dist/generators/skills-generator.d.ts +15 -0
- package/dist/generators/skills-generator.d.ts.map +1 -0
- package/dist/generators/skills-generator.js +225 -0
- package/dist/generators/skills-generator.js.map +1 -0
- package/dist/gui/assets/index-B3PIuWJS.js +22 -0
- package/dist/gui/assets/index-D-VigurY.css +2 -0
- package/dist/gui/index.html +2 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +16 -85
- package/dist/mcp/server.js.map +1 -1
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -1
- package/gui/src/App.tsx +85 -3
- package/gui/src/features/workspace/WorkspaceList.tsx +85 -3
- package/package.json +1 -1
- package/src/analyzers/index.ts +9 -1
- package/src/analyzers/messaging-analyzer.ts +254 -0
- package/src/analyzers/readme-summarizer.ts +9 -4
- package/src/analyzers/run-analyzer.ts +269 -0
- package/src/core/config.ts +1 -1
- package/src/generators/base.ts +19 -56
- package/src/generators/index.ts +32 -14
- package/src/generators/map-generator.test.ts +78 -0
- package/src/generators/map-generator.ts +164 -53
- package/src/generators/plan-generator.ts +53 -75
- package/src/generators/skills-generator.ts +255 -0
- package/src/mcp/server.ts +16 -89
- package/src/types.ts +54 -0
- package/dist/gui/assets/index-C8W6FoPa.js +0 -21
- package/dist/gui/assets/index-CJn2LW8K.css +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/run-analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,iEAAiE;AACjE,MAAM,eAAe,GAAG,YAAY,CAAC;AAErC,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC;QAC3D,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,iEAAiE;AACjE,MAAM,eAAe,GAAG,YAAY,CAAC;AAErC,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC;QAC3D,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE;YACf,oBAAoB;YACpB,WAAW;YACX,WAAW;YACX,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,WAAW;YACX,sBAAsB;YACtB,mBAAmB;YACnB,cAAc;YACd,UAAU;YACV,UAAU;YACV,WAAW;YACX,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,aAAa;YACb,WAAW;YACX,eAAe;YACf,aAAa;SACd;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QAE3D,8DAA8D;QAC9D,OAAO,EAAE,GAAG,gBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;QACzD,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAuB;IACtD,MAAM,eAAe,EAAE,CAAC;IAExB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAwDrE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAwIjE"}
|
package/dist/generators/base.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* use as their foundation. Now includes rich project analysis data when available.
|
|
5
5
|
*/
|
|
6
6
|
import * as path from 'node:path';
|
|
7
|
-
import * as fs from 'node:fs';
|
|
8
7
|
/**
|
|
9
8
|
* Formats a ProjectAnalysis into a readable markdown section.
|
|
10
9
|
*/
|
|
@@ -12,7 +11,7 @@ function formatProjectSection(analysis, workspacePath) {
|
|
|
12
11
|
const lines = [];
|
|
13
12
|
lines.push(`### ${analysis.name}`);
|
|
14
13
|
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**:
|
|
14
|
+
lines.push(`- **Architecture Map**: [nexusflow-map-${analysis.name}.md](file:///${mapPath}) — **Instruction**: Before modifying this repository, read its architecture map. For exploration, consult the map's section index on demand.`);
|
|
16
15
|
// Tech stack
|
|
17
16
|
const { techStack } = analysis;
|
|
18
17
|
if (techStack.languages.length > 0 && techStack.languages[0] !== 'other') {
|
|
@@ -38,15 +37,7 @@ function formatProjectSection(analysis, workspacePath) {
|
|
|
38
37
|
}
|
|
39
38
|
// API endpoints
|
|
40
39
|
if (analysis.endpoints.length > 0) {
|
|
41
|
-
lines.push(`- **API
|
|
42
|
-
// Show up to 10 endpoints
|
|
43
|
-
const shown = analysis.endpoints.slice(0, 10);
|
|
44
|
-
for (const ep of shown) {
|
|
45
|
-
lines.push(` - \`${ep.method} ${ep.path}\``);
|
|
46
|
-
}
|
|
47
|
-
if (analysis.endpoints.length > 10) {
|
|
48
|
-
lines.push(` - _...and ${analysis.endpoints.length - 10} more_`);
|
|
49
|
-
}
|
|
40
|
+
lines.push(`- **API surface**: ${analysis.endpoints.length} endpoints — see architecture map for details`);
|
|
50
41
|
}
|
|
51
42
|
// Ports
|
|
52
43
|
if (analysis.ports.length > 0) {
|
|
@@ -114,24 +105,17 @@ ${allConfigs.join('\n')}
|
|
|
114
105
|
parts.push(`- **Setup/Mock Command**: \`${mockCommand}\``);
|
|
115
106
|
if (startCommand)
|
|
116
107
|
parts.push(`- **Start/Run Command**: \`${startCommand}\``);
|
|
108
|
+
const standardCommands = [
|
|
109
|
+
'npm run test', 'npm test', 'npm t', 'yarn test', 'yarn t', 'pnpm test', 'pnpm t', 'bun test',
|
|
110
|
+
'dotnet test',
|
|
111
|
+
'pytest', 'python -m unittest', 'python -m pytest',
|
|
112
|
+
'go test', 'go test ./...',
|
|
113
|
+
'cargo test',
|
|
114
|
+
];
|
|
117
115
|
if (testCommand) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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) {
|
|
116
|
+
const normalizedCmd = testCommand.trim().toLowerCase();
|
|
117
|
+
const isStandard = standardCommands.some(cmd => normalizedCmd === cmd || normalizedCmd.startsWith(cmd + ' '));
|
|
118
|
+
if (!isStandard) {
|
|
135
119
|
parts.push(`- **Verification/Test Command**: \`${testCommand}\``);
|
|
136
120
|
}
|
|
137
121
|
}
|
|
@@ -147,38 +131,15 @@ ${parts.join('\n')}
|
|
|
147
131
|
`;
|
|
148
132
|
}
|
|
149
133
|
}
|
|
150
|
-
|
|
151
|
-
const
|
|
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:
|
|
134
|
+
const knowledgePath = path.join(workspacePath, 'nexusflow-knowledge.md').replace(/\\/g, '/');
|
|
135
|
+
const taskSection = `## First Steps
|
|
168
136
|
|
|
169
|
-
|
|
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.
|
|
137
|
+
Your very first task upon entering this workspace is to explore the codebase and align with the user:
|
|
177
138
|
|
|
178
|
-
|
|
139
|
+
1. **Verify Assumptions**: Open [nexusflow-knowledge.md](file:///${knowledgePath}) and fill in the **Project Assumptions** section with a brief description of what each project does, its tech stack, and responsibilities.
|
|
140
|
+
2. **Raise Questions**: Document any outstanding uncertainties or architectural questions in the **Clarifying Questions for the User** section.
|
|
141
|
+
3. **Obtain Approval**: Ask the user to confirm your assumptions and answer your questions before writing any code.
|
|
179
142
|
`;
|
|
180
|
-
}
|
|
181
|
-
const knowledgePath = path.join(workspacePath, 'nexusflow-knowledge.md').replace(/\\/g, '/');
|
|
182
143
|
return `# Multi-Repo Workspace Context
|
|
183
144
|
|
|
184
145
|
## Feature: ${feature.id}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
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;
|
|
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;AAoGjE;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,WAAW,EAAE,EACzB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAgGf;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"}
|
package/dist/generators/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { generateCopilotConfig } from './copilot.js';
|
|
|
7
7
|
import { generateCursorConfig } from './cursor.js';
|
|
8
8
|
import { buildContextContent } from './base.js';
|
|
9
9
|
import { generateImplementationPlan } from './plan-generator.js';
|
|
10
|
-
import {
|
|
10
|
+
import { generateSkills } from './skills-generator.js';
|
|
11
11
|
/** Maps each assistant to its generator function and the file it produces. */
|
|
12
12
|
const GENERATORS = {
|
|
13
13
|
claude: { generate: generateClaudeConfig, outputFile: 'CLAUDE.md' },
|
|
@@ -53,6 +53,18 @@ ${feature.description}
|
|
|
53
53
|
|
|
54
54
|
${repoList}
|
|
55
55
|
|
|
56
|
+
## Project Assumptions (verify with user)
|
|
57
|
+
|
|
58
|
+
<!-- AI assistants: Fill this in during your first session. List each project and describe what you assume its main purpose, tech stack, and responsibilities are. -->
|
|
59
|
+
|
|
60
|
+
_(No assumptions recorded yet. AI assistant to populate.)_
|
|
61
|
+
|
|
62
|
+
## Clarifying Questions for the User
|
|
63
|
+
|
|
64
|
+
<!-- AI assistants: List any clarifying questions or ambiguities about requirements/architecture here. -->
|
|
65
|
+
|
|
66
|
+
_(No open questions recorded yet. AI assistant to populate.)_
|
|
67
|
+
|
|
56
68
|
## Architecture Decisions
|
|
57
69
|
|
|
58
70
|
<!-- AI assistants: append decisions here as they are made during development.
|
|
@@ -74,12 +86,6 @@ ${progressItems}
|
|
|
74
86
|
the same debugging. -->
|
|
75
87
|
|
|
76
88
|
_(No gotchas recorded yet.)_
|
|
77
|
-
|
|
78
|
-
## Open Questions
|
|
79
|
-
|
|
80
|
-
<!-- Add questions that need human input before the AI can proceed. -->
|
|
81
|
-
|
|
82
|
-
_(No open questions.)_
|
|
83
89
|
`;
|
|
84
90
|
}
|
|
85
91
|
/**
|
|
@@ -118,12 +124,22 @@ export async function generateContextFiles(ctx, assistants, workspacePath) {
|
|
|
118
124
|
}
|
|
119
125
|
// Generate per-repo architecture maps
|
|
120
126
|
if (ctx.analysis) {
|
|
127
|
+
const allProduced = new Set();
|
|
128
|
+
for (const [, a] of ctx.analysis) {
|
|
129
|
+
if (a.produces) {
|
|
130
|
+
for (const p of a.produces) {
|
|
131
|
+
allProduced.add(p.name.toLowerCase());
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Also treat the repository name as a produced package concept
|
|
135
|
+
allProduced.add(a.name.toLowerCase());
|
|
136
|
+
}
|
|
121
137
|
for (const repo of ctx.repos) {
|
|
122
138
|
const a = ctx.analysis.get(repo.path);
|
|
123
139
|
if (a) {
|
|
124
140
|
try {
|
|
125
141
|
const { generateRepoMap } = await import('./map-generator.js');
|
|
126
|
-
await generateRepoMap(repo, a, workspacePath);
|
|
142
|
+
await generateRepoMap(repo, a, workspacePath, allProduced);
|
|
127
143
|
console.log(chalk.green(' ✔'), `Generated Architecture Map for ${chalk.bold(repo.name)}`);
|
|
128
144
|
}
|
|
129
145
|
catch (error) {
|
|
@@ -144,21 +160,21 @@ export async function generateContextFiles(ctx, assistants, workspacePath) {
|
|
|
144
160
|
console.error(chalk.red(' ✖'), `Failed to generate ${entry.outputFile} for ${assistant}: ${message}`);
|
|
145
161
|
}
|
|
146
162
|
}
|
|
147
|
-
// Generate
|
|
163
|
+
// Generate implementation plan from dependency analysis (if analysis data available)
|
|
148
164
|
try {
|
|
149
|
-
await
|
|
165
|
+
await generateImplementationPlan(ctx, workspacePath);
|
|
150
166
|
}
|
|
151
167
|
catch (error) {
|
|
152
168
|
const message = error instanceof Error ? error.message : String(error);
|
|
153
|
-
console.error(chalk.red(' ✖'), `Failed to generate
|
|
169
|
+
console.error(chalk.red(' ✖'), `Failed to generate implementation plan: ${message}`);
|
|
154
170
|
}
|
|
155
|
-
// Generate
|
|
171
|
+
// Generate skills files for selected assistants
|
|
156
172
|
try {
|
|
157
|
-
await
|
|
173
|
+
await generateSkills(ctx, assistants, workspacePath);
|
|
158
174
|
}
|
|
159
175
|
catch (error) {
|
|
160
176
|
const message = error instanceof Error ? error.message : String(error);
|
|
161
|
-
console.error(chalk.red(' ✖'), `Failed to generate
|
|
177
|
+
console.error(chalk.red(' ✖'), `Failed to generate skills: ${message}`);
|
|
162
178
|
}
|
|
163
179
|
}
|
|
164
180
|
// Re-export individual generators for direct use
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,5 +11,5 @@ import type { ProjectAnalysis, RepoInfo } from '../types.js';
|
|
|
11
11
|
* @param analysis - The repository analysis result.
|
|
12
12
|
* @param workspacePath - Absolute path to the workspace root directory.
|
|
13
13
|
*/
|
|
14
|
-
export declare function generateRepoMap(repo: RepoInfo, analysis: ProjectAnalysis, workspacePath: string): Promise<void>;
|
|
14
|
+
export declare function generateRepoMap(repo: RepoInfo, analysis: ProjectAnalysis, workspacePath: string, allProducedPackages?: Set<string>): Promise<void>;
|
|
15
15
|
//# sourceMappingURL=map-generator.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAoG7D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,mBAAmB,GAAE,GAAG,CAAC,MAAM,CAAa,GAC3C,OAAO,CAAC,IAAI,CAAC,CA0Yf"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import * as fs from 'node:fs/promises';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { globby } from 'globby';
|
|
9
|
-
import { loadConfig } from '../core/config.js';
|
|
10
9
|
const LANG_PATTERNS = {
|
|
11
10
|
csharp: [
|
|
12
11
|
{
|
|
@@ -104,7 +103,7 @@ const LANG_PATTERNS = {
|
|
|
104
103
|
* @param analysis - The repository analysis result.
|
|
105
104
|
* @param workspacePath - Absolute path to the workspace root directory.
|
|
106
105
|
*/
|
|
107
|
-
export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
106
|
+
export async function generateRepoMap(repo, analysis, workspacePath, allProducedPackages = new Set()) {
|
|
108
107
|
const repoName = repo.name;
|
|
109
108
|
const worktreePath = path.join(workspacePath, repoName);
|
|
110
109
|
const md = [];
|
|
@@ -115,13 +114,6 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
115
114
|
md.push(`> **Regeneration Command**: Run \`nexusflow sync\` to update this map and workspace planning files.`);
|
|
116
115
|
md.push(`> **Note**: Maps are advisory snapshots of the codebase. Always verify route parameters, patterns, and filenames before relying on them.`);
|
|
117
116
|
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
117
|
// 1. Solution/Project Layout
|
|
126
118
|
md.push('## 🏗️ Project Layout');
|
|
127
119
|
md.push('');
|
|
@@ -166,16 +158,52 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
166
158
|
md.push('_No project layout files discovered or error occurred._');
|
|
167
159
|
md.push('');
|
|
168
160
|
}
|
|
161
|
+
// 1.5. Messaging Topology
|
|
162
|
+
md.push('## 📨 Messaging Topology');
|
|
163
|
+
md.push('');
|
|
164
|
+
if (analysis.messaging && (analysis.messaging.publishers.length > 0 || analysis.messaging.subscribers.length > 0)) {
|
|
165
|
+
if (analysis.messaging.publishers.length > 0) {
|
|
166
|
+
md.push('### Publishes');
|
|
167
|
+
md.push('| Message Contract | Topic/Queue/Channel | Publisher (file) |');
|
|
168
|
+
md.push('|---|---|---|');
|
|
169
|
+
for (const p of analysis.messaging.publishers) {
|
|
170
|
+
const fileLink = p.publisherFile
|
|
171
|
+
? `[${path.basename(p.publisherFile)}](file:///${path.join(worktreePath, p.publisherFile)})`
|
|
172
|
+
: '—';
|
|
173
|
+
md.push(`| ${p.contractType} | ${p.topicOrQueue} | ${fileLink} |`);
|
|
174
|
+
}
|
|
175
|
+
md.push('');
|
|
176
|
+
}
|
|
177
|
+
if (analysis.messaging.subscribers.length > 0) {
|
|
178
|
+
md.push('### Subscribes');
|
|
179
|
+
md.push('| Message Contract | Handler (file) | Registered in |');
|
|
180
|
+
md.push('|---|---|---|');
|
|
181
|
+
for (const s of analysis.messaging.subscribers) {
|
|
182
|
+
const handlerLink = s.handlerFile
|
|
183
|
+
? `[${path.basename(s.handlerFile)}](file:///${path.join(worktreePath, s.handlerFile)})`
|
|
184
|
+
: '—';
|
|
185
|
+
const regLink = s.registrationFile
|
|
186
|
+
? `[${path.basename(s.registrationFile)}](file:///${path.join(worktreePath, s.registrationFile)})`
|
|
187
|
+
: '—';
|
|
188
|
+
md.push(`| ${s.contractType} | ${handlerLink} | ${regLink} |`);
|
|
189
|
+
}
|
|
190
|
+
md.push('');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
md.push('_No pub/sub messaging patterns detected in this repository._');
|
|
195
|
+
md.push('');
|
|
196
|
+
}
|
|
169
197
|
// 2. Extensible Usage Pattern Scanning
|
|
170
198
|
md.push('## 💡 Detected Architectural Patterns & Usages');
|
|
171
199
|
md.push('');
|
|
172
200
|
const detectedLanguages = analysis.techStack.languages;
|
|
173
|
-
const
|
|
174
|
-
// Initialize
|
|
201
|
+
const patternExamples = new Map();
|
|
202
|
+
// Initialize examples
|
|
175
203
|
for (const lang of detectedLanguages) {
|
|
176
204
|
const rules = LANG_PATTERNS[lang] || [];
|
|
177
205
|
for (const rule of rules) {
|
|
178
|
-
|
|
206
|
+
patternExamples.set(rule.name, { label: rule.label, description: rule.description });
|
|
179
207
|
}
|
|
180
208
|
}
|
|
181
209
|
// Scan files for pattern usage
|
|
@@ -205,11 +233,12 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
205
233
|
for (const lang of detectedLanguages) {
|
|
206
234
|
const rules = LANG_PATTERNS[lang] || [];
|
|
207
235
|
for (const rule of rules) {
|
|
236
|
+
const val = patternExamples.get(rule.name);
|
|
237
|
+
if (val.firstFile)
|
|
238
|
+
continue; // Already found an example
|
|
208
239
|
rule.regex.lastIndex = 0;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const val = patternCounts.get(rule.name);
|
|
212
|
-
val.count += matches.length;
|
|
240
|
+
if (rule.regex.test(content)) {
|
|
241
|
+
val.firstFile = file.replace(/\\/g, '/');
|
|
213
242
|
}
|
|
214
243
|
}
|
|
215
244
|
}
|
|
@@ -220,36 +249,86 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
220
249
|
// Ignore errors
|
|
221
250
|
}
|
|
222
251
|
md.push('### Static Analysis Findings');
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
252
|
+
let hasFindings = false;
|
|
253
|
+
if (patternExamples.size > 0) {
|
|
254
|
+
for (const [, v] of patternExamples) {
|
|
255
|
+
if (v.firstFile) {
|
|
256
|
+
hasFindings = true;
|
|
257
|
+
const fileLink = `[${path.basename(v.firstFile)}](file:///${path.join(worktreePath, v.firstFile).replace(/\\/g, '/')})`;
|
|
258
|
+
md.push(`- **${v.label}** example: ${fileLink} _(${v.description})_`);
|
|
259
|
+
}
|
|
226
260
|
}
|
|
227
261
|
}
|
|
228
|
-
|
|
262
|
+
if (!hasFindings) {
|
|
229
263
|
md.push('_No architectural usage patterns detected via static analysis._');
|
|
230
264
|
}
|
|
231
265
|
md.push('');
|
|
232
266
|
md.push('### Packages Present (Dependencies)');
|
|
233
|
-
|
|
234
|
-
|
|
267
|
+
// Filter dependencies: only show internal packages produced by repos in this workspace,
|
|
268
|
+
// or those matching a common organization namespace prefix (e.g. if one package is MyOrg.Common, then MyOrg.*).
|
|
269
|
+
const internalPrefixes = Array.from(allProducedPackages).map(p => {
|
|
270
|
+
const parts = p.split('.');
|
|
271
|
+
return parts.length > 1 ? parts[0] + '.' : null;
|
|
272
|
+
}).filter((p) => p !== null);
|
|
273
|
+
const filteredDeps = analysis.dependencies.filter(dep => {
|
|
274
|
+
const depNameLower = dep.name.toLowerCase();
|
|
275
|
+
if (allProducedPackages.has(depNameLower))
|
|
276
|
+
return true;
|
|
277
|
+
return internalPrefixes.some(prefix => depNameLower.startsWith(prefix));
|
|
278
|
+
});
|
|
279
|
+
if (filteredDeps.length > 0) {
|
|
280
|
+
for (const dep of filteredDeps) {
|
|
235
281
|
md.push(`- \`${dep.name}\` (${dep.version || 'unknown version'})`);
|
|
236
282
|
}
|
|
237
283
|
}
|
|
238
284
|
else {
|
|
239
|
-
md.push('_No package dependencies detected._');
|
|
285
|
+
md.push('_No cross-repo or organization-internal package dependencies detected._');
|
|
240
286
|
}
|
|
241
287
|
md.push('');
|
|
242
288
|
// 3. Endpoint Inventory
|
|
243
289
|
md.push('## 🔌 API Endpoints');
|
|
244
290
|
md.push('');
|
|
245
291
|
if (analysis.endpoints.length > 0) {
|
|
246
|
-
md.push('|
|
|
247
|
-
md.push('
|
|
292
|
+
md.push('| Endpoint Group (Router/Module/File) | Route Prefix / Pattern | Verbs | Source File |');
|
|
293
|
+
md.push('|:---|:---|:---|:---|');
|
|
294
|
+
// Group endpoints by source file
|
|
295
|
+
const grouped = new Map();
|
|
248
296
|
for (const ep of analysis.endpoints) {
|
|
249
|
-
const
|
|
250
|
-
|
|
297
|
+
const src = ep.source || 'Unknown';
|
|
298
|
+
if (!grouped.has(src)) {
|
|
299
|
+
grouped.set(src, []);
|
|
300
|
+
}
|
|
301
|
+
grouped.get(src).push(ep);
|
|
302
|
+
}
|
|
303
|
+
const findCommonPrefix = (paths) => {
|
|
304
|
+
if (paths.length === 0)
|
|
305
|
+
return '';
|
|
306
|
+
if (paths.length === 1)
|
|
307
|
+
return paths[0];
|
|
308
|
+
const sorted = [...paths].sort();
|
|
309
|
+
const first = sorted[0].split('/');
|
|
310
|
+
const last = sorted[sorted.length - 1].split('/');
|
|
311
|
+
const common = [];
|
|
312
|
+
for (let i = 0; i < first.length; i++) {
|
|
313
|
+
if (first[i] === last[i]) {
|
|
314
|
+
common.push(first[i]);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const prefix = common.join('/');
|
|
321
|
+
return prefix || '/';
|
|
322
|
+
};
|
|
323
|
+
for (const [src, eps] of grouped) {
|
|
324
|
+
const groupName = src !== 'Unknown' ? path.basename(src, path.extname(src)) : 'Inferred';
|
|
325
|
+
const paths = eps.map(e => e.path);
|
|
326
|
+
const commonPrefix = findCommonPrefix(paths);
|
|
327
|
+
const verbs = Array.from(new Set(eps.map(e => e.method.toUpperCase()))).join(', ');
|
|
328
|
+
const sourceLink = src !== 'Unknown'
|
|
329
|
+
? `[${path.basename(src)}](file:///${path.join(worktreePath, src).replace(/\\/g, '/')})`
|
|
251
330
|
: '—';
|
|
252
|
-
md.push(`| \`${
|
|
331
|
+
md.push(`| ${groupName} | \`${commonPrefix}\` | \`${verbs}\` | ${sourceLink} |`);
|
|
253
332
|
}
|
|
254
333
|
}
|
|
255
334
|
else {
|
|
@@ -304,6 +383,46 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
304
383
|
md.push(`- **Run Command**: \`${testCommand}\``);
|
|
305
384
|
}
|
|
306
385
|
md.push('');
|
|
386
|
+
// 4.5. Running Locally
|
|
387
|
+
md.push('## ▶️ Running Locally');
|
|
388
|
+
md.push('');
|
|
389
|
+
if (analysis.runConfig) {
|
|
390
|
+
const { entryPoints, databases, sharedInfraWarnings, committedSecrets } = analysis.runConfig;
|
|
391
|
+
if (entryPoints.length > 0) {
|
|
392
|
+
md.push('### Entry Points');
|
|
393
|
+
for (const ep of entryPoints) {
|
|
394
|
+
md.push(`- **${ep.type.toUpperCase()} App**: \`${ep.command || 'dotnet run'}\` (configured in \`${ep.projectPath}\`)`);
|
|
395
|
+
}
|
|
396
|
+
md.push('');
|
|
397
|
+
}
|
|
398
|
+
if (databases.length > 0) {
|
|
399
|
+
md.push('### Databases & Data Stores');
|
|
400
|
+
md.push('| Provider | Target Host | Config File |');
|
|
401
|
+
md.push('|---|---|---|');
|
|
402
|
+
for (const db of databases) {
|
|
403
|
+
md.push(`| ${db.provider} | ${db.host} | \`${db.configFile}\` |`);
|
|
404
|
+
}
|
|
405
|
+
md.push('');
|
|
406
|
+
}
|
|
407
|
+
if (sharedInfraWarnings.length > 0) {
|
|
408
|
+
md.push('### ⚠️ Shared Infrastructure Warnings');
|
|
409
|
+
for (const w of sharedInfraWarnings) {
|
|
410
|
+
md.push(`- ${w.warning}`);
|
|
411
|
+
}
|
|
412
|
+
md.push('');
|
|
413
|
+
}
|
|
414
|
+
if (committedSecrets.length > 0) {
|
|
415
|
+
md.push('### 🔒 Potential Committed Secrets');
|
|
416
|
+
for (const s of committedSecrets) {
|
|
417
|
+
md.push(`- **Warning**: Possible plaintext secret/key/password found in \`${s.file}\` (key hint: \`${s.lineHint}\`)`);
|
|
418
|
+
}
|
|
419
|
+
md.push('');
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
md.push('_No run configurations detected._');
|
|
424
|
+
md.push('');
|
|
425
|
+
}
|
|
307
426
|
// 5. Custom Skills
|
|
308
427
|
md.push('## 🛠️ Custom Agent Skills');
|
|
309
428
|
md.push('');
|
|
@@ -343,42 +462,26 @@ export async function generateRepoMap(repo, analysis, workspacePath) {
|
|
|
343
462
|
}
|
|
344
463
|
md.push('');
|
|
345
464
|
// 7. Project-Specific Conventions (Agent-Defined)
|
|
465
|
+
md.push('## 📝 Discovered Conventions');
|
|
466
|
+
md.push('');
|
|
346
467
|
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
468
|
let customConventions = '';
|
|
372
469
|
try {
|
|
373
470
|
customConventions = await fs.readFile(conventionsFile, 'utf-8');
|
|
471
|
+
// Strip the title from the old conventions file if present
|
|
472
|
+
customConventions = customConventions.replace(/^#\s+.+\n?/, '').trim();
|
|
374
473
|
}
|
|
375
474
|
catch { }
|
|
376
475
|
if (customConventions) {
|
|
377
|
-
md.push('## 📝 Project-Specific Conventions (Agent-Defined)');
|
|
378
|
-
md.push('');
|
|
379
476
|
md.push(customConventions);
|
|
380
477
|
md.push('');
|
|
381
478
|
}
|
|
479
|
+
else {
|
|
480
|
+
md.push('<!-- AI assistants: Document any project-specific conventions, gotchas, or coding rules discovered here. -->');
|
|
481
|
+
md.push('');
|
|
482
|
+
md.push('- None recorded yet.');
|
|
483
|
+
md.push('');
|
|
484
|
+
}
|
|
382
485
|
const outPath = path.join(workspacePath, `nexusflow-map-${repoName}.md`);
|
|
383
486
|
await fs.writeFile(outPath, md.join('\n'), 'utf-8');
|
|
384
487
|
}
|