@neurcode-ai/cli 0.8.4 ā 0.8.6
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/api-client.d.ts +11 -1
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +26 -1
- package/dist/api-client.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +80 -62
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +4 -39
- package/dist/commands/prompt.js.map +1 -1
- package/dist/services/project-knowledge-service.d.ts +127 -0
- package/dist/services/project-knowledge-service.d.ts.map +1 -0
- package/dist/services/project-knowledge-service.js +535 -0
- package/dist/services/project-knowledge-service.js.map +1 -0
- package/dist/services/toolbox-service.d.ts +18 -0
- package/dist/services/toolbox-service.d.ts.map +1 -0
- package/dist/services/toolbox-service.js +64 -0
- package/dist/services/toolbox-service.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project Knowledge Service
|
|
4
|
+
*
|
|
5
|
+
* Detects and maintains persistent knowledge about project tech stack and architecture.
|
|
6
|
+
* This service provides context-aware information that helps the Architect make better decisions.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Tech stack detection (Node.js, Python, Go)
|
|
10
|
+
* - Architecture pattern detection and memory
|
|
11
|
+
* - Persistent storage in .neurcode/architecture.json
|
|
12
|
+
* - Natural language project summaries
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ProjectKnowledgeService = void 0;
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
/**
|
|
20
|
+
* Architecture memory schema
|
|
21
|
+
*/
|
|
22
|
+
const ArchitectureMemorySchema = zod_1.z.object({
|
|
23
|
+
pattern: zod_1.z.enum(['feature-based', 'layered', 'mvc', 'unknown']),
|
|
24
|
+
invariants: zod_1.z.array(zod_1.z.string()),
|
|
25
|
+
domainBoundaries: zod_1.z.array(zod_1.z.string()),
|
|
26
|
+
});
|
|
27
|
+
class ProjectKnowledgeService {
|
|
28
|
+
/**
|
|
29
|
+
* Detect tech stack from project root
|
|
30
|
+
*/
|
|
31
|
+
async detectTechStack(rootPath) {
|
|
32
|
+
const techStack = {
|
|
33
|
+
language: 'unknown',
|
|
34
|
+
};
|
|
35
|
+
// Try Node.js (package.json)
|
|
36
|
+
const packageJsonPath = (0, path_1.join)(rootPath, 'package.json');
|
|
37
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
38
|
+
try {
|
|
39
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
40
|
+
techStack.language = 'node';
|
|
41
|
+
techStack.packageManager = this.detectPackageManager(rootPath);
|
|
42
|
+
techStack.version = packageJson.version;
|
|
43
|
+
// Detect framework
|
|
44
|
+
techStack.framework = this.detectNodeFramework(packageJson);
|
|
45
|
+
// Detect ORM
|
|
46
|
+
techStack.orm = this.detectNodeORM(packageJson);
|
|
47
|
+
// Detect styling
|
|
48
|
+
techStack.styling = this.detectStyling(packageJson);
|
|
49
|
+
// Detect build tool
|
|
50
|
+
techStack.buildTool = this.detectBuildTool(packageJson);
|
|
51
|
+
return techStack;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.warn('Failed to parse package.json:', error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Try Python (requirements.txt or pyproject.toml)
|
|
58
|
+
const requirementsPath = (0, path_1.join)(rootPath, 'requirements.txt');
|
|
59
|
+
const pyprojectPath = (0, path_1.join)(rootPath, 'pyproject.toml');
|
|
60
|
+
if ((0, fs_1.existsSync)(requirementsPath) || (0, fs_1.existsSync)(pyprojectPath)) {
|
|
61
|
+
techStack.language = 'python';
|
|
62
|
+
if ((0, fs_1.existsSync)(requirementsPath)) {
|
|
63
|
+
try {
|
|
64
|
+
const requirements = (0, fs_1.readFileSync)(requirementsPath, 'utf-8');
|
|
65
|
+
techStack.framework = this.detectPythonFramework(requirements);
|
|
66
|
+
techStack.orm = this.detectPythonORM(requirements);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.warn('Failed to read requirements.txt:', error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if ((0, fs_1.existsSync)(pyprojectPath)) {
|
|
73
|
+
try {
|
|
74
|
+
const pyproject = (0, fs_1.readFileSync)(pyprojectPath, 'utf-8');
|
|
75
|
+
// Simple parsing for pyproject.toml (basic implementation)
|
|
76
|
+
if (pyproject.includes('django')) {
|
|
77
|
+
techStack.framework = 'Django';
|
|
78
|
+
}
|
|
79
|
+
else if (pyproject.includes('fastapi')) {
|
|
80
|
+
techStack.framework = 'FastAPI';
|
|
81
|
+
}
|
|
82
|
+
else if (pyproject.includes('flask')) {
|
|
83
|
+
techStack.framework = 'Flask';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.warn('Failed to read pyproject.toml:', error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return techStack;
|
|
91
|
+
}
|
|
92
|
+
// Try Go (go.mod)
|
|
93
|
+
const goModPath = (0, path_1.join)(rootPath, 'go.mod');
|
|
94
|
+
if ((0, fs_1.existsSync)(goModPath)) {
|
|
95
|
+
try {
|
|
96
|
+
const goMod = (0, fs_1.readFileSync)(goModPath, 'utf-8');
|
|
97
|
+
techStack.language = 'go';
|
|
98
|
+
// Extract module name and version
|
|
99
|
+
const moduleMatch = goMod.match(/^module\s+(\S+)/m);
|
|
100
|
+
if (moduleMatch) {
|
|
101
|
+
techStack.version = moduleMatch[1];
|
|
102
|
+
}
|
|
103
|
+
// Detect Go framework
|
|
104
|
+
techStack.framework = this.detectGoFramework(goMod);
|
|
105
|
+
techStack.orm = this.detectGoORM(goMod);
|
|
106
|
+
return techStack;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.warn('Failed to read go.mod:', error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return techStack;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Detect Node.js framework from package.json
|
|
116
|
+
*/
|
|
117
|
+
detectNodeFramework(packageJson) {
|
|
118
|
+
const deps = {
|
|
119
|
+
...packageJson.dependencies,
|
|
120
|
+
...packageJson.devDependencies,
|
|
121
|
+
};
|
|
122
|
+
// React frameworks
|
|
123
|
+
if (deps['next'])
|
|
124
|
+
return 'Next.js';
|
|
125
|
+
if (deps['remix'])
|
|
126
|
+
return 'Remix';
|
|
127
|
+
if (deps['gatsby'])
|
|
128
|
+
return 'Gatsby';
|
|
129
|
+
if (deps['react']) {
|
|
130
|
+
// Check for Vite
|
|
131
|
+
if (deps['vite'])
|
|
132
|
+
return 'React + Vite';
|
|
133
|
+
if (deps['@vitejs/plugin-react'])
|
|
134
|
+
return 'React + Vite';
|
|
135
|
+
return 'React';
|
|
136
|
+
}
|
|
137
|
+
// Vue frameworks
|
|
138
|
+
if (deps['nuxt'])
|
|
139
|
+
return 'Nuxt.js';
|
|
140
|
+
if (deps['vue'])
|
|
141
|
+
return 'Vue.js';
|
|
142
|
+
// Angular
|
|
143
|
+
if (deps['@angular/core'])
|
|
144
|
+
return 'Angular';
|
|
145
|
+
// Backend frameworks
|
|
146
|
+
if (deps['express'])
|
|
147
|
+
return 'Express';
|
|
148
|
+
if (deps['fastify'])
|
|
149
|
+
return 'Fastify';
|
|
150
|
+
if (deps['koa'])
|
|
151
|
+
return 'Koa';
|
|
152
|
+
if (deps['nest'])
|
|
153
|
+
return 'NestJS';
|
|
154
|
+
if (deps['hapi'])
|
|
155
|
+
return 'Hapi';
|
|
156
|
+
// Check scripts for framework hints
|
|
157
|
+
if (packageJson.scripts) {
|
|
158
|
+
if (packageJson.scripts.dev?.includes('next'))
|
|
159
|
+
return 'Next.js';
|
|
160
|
+
if (packageJson.scripts.start?.includes('next'))
|
|
161
|
+
return 'Next.js';
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Detect Node.js ORM from package.json
|
|
167
|
+
*/
|
|
168
|
+
detectNodeORM(packageJson) {
|
|
169
|
+
const deps = {
|
|
170
|
+
...packageJson.dependencies,
|
|
171
|
+
...packageJson.devDependencies,
|
|
172
|
+
};
|
|
173
|
+
if (deps['prisma'])
|
|
174
|
+
return 'Prisma';
|
|
175
|
+
if (deps['typeorm'])
|
|
176
|
+
return 'TypeORM';
|
|
177
|
+
if (deps['sequelize'])
|
|
178
|
+
return 'Sequelize';
|
|
179
|
+
if (deps['mongoose'])
|
|
180
|
+
return 'Mongoose';
|
|
181
|
+
if (deps['drizzle-orm'])
|
|
182
|
+
return 'Drizzle ORM';
|
|
183
|
+
if (deps['kysely'])
|
|
184
|
+
return 'Kysely';
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Detect styling library from package.json
|
|
189
|
+
*/
|
|
190
|
+
detectStyling(packageJson) {
|
|
191
|
+
const deps = {
|
|
192
|
+
...packageJson.dependencies,
|
|
193
|
+
...packageJson.devDependencies,
|
|
194
|
+
};
|
|
195
|
+
if (deps['tailwindcss'])
|
|
196
|
+
return 'Tailwind CSS';
|
|
197
|
+
if (deps['@mui/material'] || deps['@material-ui/core'])
|
|
198
|
+
return 'Material UI';
|
|
199
|
+
if (deps['styled-components'])
|
|
200
|
+
return 'Styled Components';
|
|
201
|
+
if (deps['emotion'])
|
|
202
|
+
return 'Emotion';
|
|
203
|
+
if (deps['sass'] || deps['node-sass'])
|
|
204
|
+
return 'Sass';
|
|
205
|
+
if (deps['less'])
|
|
206
|
+
return 'Less';
|
|
207
|
+
if (deps['bootstrap'])
|
|
208
|
+
return 'Bootstrap';
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Detect build tool from package.json
|
|
213
|
+
*/
|
|
214
|
+
detectBuildTool(packageJson) {
|
|
215
|
+
const deps = {
|
|
216
|
+
...packageJson.dependencies,
|
|
217
|
+
...packageJson.devDependencies,
|
|
218
|
+
};
|
|
219
|
+
if (deps['vite'])
|
|
220
|
+
return 'Vite';
|
|
221
|
+
if (deps['webpack'])
|
|
222
|
+
return 'Webpack';
|
|
223
|
+
if (deps['rollup'])
|
|
224
|
+
return 'Rollup';
|
|
225
|
+
if (deps['esbuild'])
|
|
226
|
+
return 'esbuild';
|
|
227
|
+
if (deps['turbo'])
|
|
228
|
+
return 'Turborepo';
|
|
229
|
+
if (deps['nx'])
|
|
230
|
+
return 'Nx';
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Detect package manager from lock files
|
|
235
|
+
*/
|
|
236
|
+
detectPackageManager(rootPath) {
|
|
237
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'pnpm-lock.yaml')))
|
|
238
|
+
return 'pnpm';
|
|
239
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'yarn.lock')))
|
|
240
|
+
return 'yarn';
|
|
241
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'package-lock.json')))
|
|
242
|
+
return 'npm';
|
|
243
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'bun.lockb')))
|
|
244
|
+
return 'bun';
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Detect Python framework from requirements.txt
|
|
249
|
+
*/
|
|
250
|
+
detectPythonFramework(requirements) {
|
|
251
|
+
const lowerRequirements = requirements.toLowerCase();
|
|
252
|
+
if (lowerRequirements.includes('django'))
|
|
253
|
+
return 'Django';
|
|
254
|
+
if (lowerRequirements.includes('fastapi'))
|
|
255
|
+
return 'FastAPI';
|
|
256
|
+
if (lowerRequirements.includes('flask'))
|
|
257
|
+
return 'Flask';
|
|
258
|
+
if (lowerRequirements.includes('tornado'))
|
|
259
|
+
return 'Tornado';
|
|
260
|
+
if (lowerRequirements.includes('bottle'))
|
|
261
|
+
return 'Bottle';
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Detect Python ORM from requirements.txt
|
|
266
|
+
*/
|
|
267
|
+
detectPythonORM(requirements) {
|
|
268
|
+
const lowerRequirements = requirements.toLowerCase();
|
|
269
|
+
if (lowerRequirements.includes('sqlalchemy'))
|
|
270
|
+
return 'SQLAlchemy';
|
|
271
|
+
if (lowerRequirements.includes('django') && lowerRequirements.includes('orm'))
|
|
272
|
+
return 'Django ORM';
|
|
273
|
+
if (lowerRequirements.includes('peewee'))
|
|
274
|
+
return 'Peewee';
|
|
275
|
+
if (lowerRequirements.includes('tortoise-orm'))
|
|
276
|
+
return 'Tortoise ORM';
|
|
277
|
+
if (lowerRequirements.includes('prisma') || lowerRequirements.includes('prisma-client'))
|
|
278
|
+
return 'Prisma';
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Detect Go framework from go.mod
|
|
283
|
+
*/
|
|
284
|
+
detectGoFramework(goMod) {
|
|
285
|
+
if (goMod.includes('github.com/gin-gonic/gin'))
|
|
286
|
+
return 'Gin';
|
|
287
|
+
if (goMod.includes('github.com/gorilla/mux'))
|
|
288
|
+
return 'Gorilla Mux';
|
|
289
|
+
if (goMod.includes('github.com/labstack/echo'))
|
|
290
|
+
return 'Echo';
|
|
291
|
+
if (goMod.includes('github.com/go-chi/chi'))
|
|
292
|
+
return 'Chi';
|
|
293
|
+
if (goMod.includes('github.com/beego/beego'))
|
|
294
|
+
return 'Beego';
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Detect Go ORM from go.mod
|
|
299
|
+
*/
|
|
300
|
+
detectGoORM(goMod) {
|
|
301
|
+
if (goMod.includes('gorm.io/gorm'))
|
|
302
|
+
return 'GORM';
|
|
303
|
+
if (goMod.includes('github.com/jinzhu/gorm'))
|
|
304
|
+
return 'GORM (legacy)';
|
|
305
|
+
if (goMod.includes('github.com/volatiletech/sqlboiler'))
|
|
306
|
+
return 'SQLBoiler';
|
|
307
|
+
if (goMod.includes('github.com/go-pg/pg'))
|
|
308
|
+
return 'go-pg';
|
|
309
|
+
return undefined;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Detect architecture pattern from folder structure
|
|
313
|
+
*/
|
|
314
|
+
detectArchitecturePattern(rootPath) {
|
|
315
|
+
// Check for Next.js App Router structure
|
|
316
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'app')) || (0, fs_1.existsSync)((0, path_1.join)(rootPath, 'app'))) {
|
|
317
|
+
return 'feature-based'; // Next.js App Router uses feature-based routing
|
|
318
|
+
}
|
|
319
|
+
// Check for feature-based structure (modules, features, domains)
|
|
320
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'modules')) ||
|
|
321
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'features')) ||
|
|
322
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'domains'))) {
|
|
323
|
+
return 'feature-based';
|
|
324
|
+
}
|
|
325
|
+
// Check for layered architecture (controllers, services, models)
|
|
326
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'controllers')) &&
|
|
327
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'services')) &&
|
|
328
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'models'))) {
|
|
329
|
+
return 'layered';
|
|
330
|
+
}
|
|
331
|
+
// Check for MVC structure
|
|
332
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'models')) &&
|
|
333
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'views')) &&
|
|
334
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src', 'controllers'))) {
|
|
335
|
+
return 'mvc';
|
|
336
|
+
}
|
|
337
|
+
// Check for Django-like structure (apps)
|
|
338
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'apps')) ||
|
|
339
|
+
((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'src')) &&
|
|
340
|
+
(0, fs_1.existsSync)((0, path_1.join)(rootPath, 'manage.py')))) {
|
|
341
|
+
return 'feature-based';
|
|
342
|
+
}
|
|
343
|
+
return 'unknown';
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Detect domain boundaries from folder structure
|
|
347
|
+
*/
|
|
348
|
+
detectDomainBoundaries(rootPath) {
|
|
349
|
+
const boundaries = [];
|
|
350
|
+
// Check common patterns
|
|
351
|
+
const srcPath = (0, path_1.join)(rootPath, 'src');
|
|
352
|
+
if ((0, fs_1.existsSync)(srcPath)) {
|
|
353
|
+
// Feature-based boundaries
|
|
354
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'modules'))) {
|
|
355
|
+
boundaries.push('src/modules/*');
|
|
356
|
+
}
|
|
357
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'features'))) {
|
|
358
|
+
boundaries.push('src/features/*');
|
|
359
|
+
}
|
|
360
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'domains'))) {
|
|
361
|
+
boundaries.push('src/domains/*');
|
|
362
|
+
}
|
|
363
|
+
// App Router (Next.js)
|
|
364
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'app'))) {
|
|
365
|
+
boundaries.push('src/app/**/route.ts');
|
|
366
|
+
boundaries.push('src/app/**/page.tsx');
|
|
367
|
+
}
|
|
368
|
+
// Layered architecture boundaries
|
|
369
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'controllers'))) {
|
|
370
|
+
boundaries.push('src/controllers/*');
|
|
371
|
+
}
|
|
372
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'services'))) {
|
|
373
|
+
boundaries.push('src/services/*');
|
|
374
|
+
}
|
|
375
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(srcPath, 'models'))) {
|
|
376
|
+
boundaries.push('src/models/*');
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Django apps
|
|
380
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(rootPath, 'apps'))) {
|
|
381
|
+
boundaries.push('apps/*');
|
|
382
|
+
}
|
|
383
|
+
return boundaries;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Generate default invariants based on architecture pattern
|
|
387
|
+
*/
|
|
388
|
+
generateDefaultInvariants(pattern) {
|
|
389
|
+
const invariants = [];
|
|
390
|
+
switch (pattern) {
|
|
391
|
+
case 'layered':
|
|
392
|
+
invariants.push('No direct database access in controllers');
|
|
393
|
+
invariants.push('Business logic must be in service layer');
|
|
394
|
+
invariants.push('Models should only contain data structures');
|
|
395
|
+
break;
|
|
396
|
+
case 'mvc':
|
|
397
|
+
invariants.push('Models should not contain business logic');
|
|
398
|
+
invariants.push('Views should not contain business logic');
|
|
399
|
+
invariants.push('Controllers should delegate to services');
|
|
400
|
+
break;
|
|
401
|
+
case 'feature-based':
|
|
402
|
+
invariants.push('Features should be self-contained modules');
|
|
403
|
+
invariants.push('No cross-feature dependencies without interfaces');
|
|
404
|
+
invariants.push('Shared code should be in common/shared directory');
|
|
405
|
+
break;
|
|
406
|
+
case 'unknown':
|
|
407
|
+
invariants.push('Follow existing project structure');
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
return invariants;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Read architecture memory from .neurcode/architecture.json
|
|
414
|
+
*/
|
|
415
|
+
async readArchitectureMemory(rootPath) {
|
|
416
|
+
const neurcodeDir = (0, path_1.join)(rootPath, '.neurcode');
|
|
417
|
+
const architecturePath = (0, path_1.join)(neurcodeDir, 'architecture.json');
|
|
418
|
+
if (!(0, fs_1.existsSync)(architecturePath)) {
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
try {
|
|
422
|
+
const content = (0, fs_1.readFileSync)(architecturePath, 'utf-8');
|
|
423
|
+
const parsed = JSON.parse(content);
|
|
424
|
+
const validated = ArchitectureMemorySchema.parse(parsed);
|
|
425
|
+
return validated;
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
console.warn('Failed to read or validate architecture.json:', error);
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Write architecture memory to .neurcode/architecture.json
|
|
434
|
+
*/
|
|
435
|
+
async writeArchitectureMemory(rootPath, memory) {
|
|
436
|
+
const neurcodeDir = (0, path_1.join)(rootPath, '.neurcode');
|
|
437
|
+
const architecturePath = (0, path_1.join)(neurcodeDir, 'architecture.json');
|
|
438
|
+
// Ensure .neurcode directory exists
|
|
439
|
+
if (!(0, fs_1.existsSync)(neurcodeDir)) {
|
|
440
|
+
(0, fs_1.mkdirSync)(neurcodeDir, { recursive: true });
|
|
441
|
+
}
|
|
442
|
+
// Validate before writing
|
|
443
|
+
const validated = ArchitectureMemorySchema.parse(memory);
|
|
444
|
+
// Write to file
|
|
445
|
+
(0, fs_1.writeFileSync)(architecturePath, JSON.stringify(validated, null, 2), 'utf-8');
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Initialize architecture memory with defaults based on folder structure
|
|
449
|
+
*/
|
|
450
|
+
async initializeArchitectureMemory(rootPath) {
|
|
451
|
+
const pattern = this.detectArchitecturePattern(rootPath);
|
|
452
|
+
const domainBoundaries = this.detectDomainBoundaries(rootPath);
|
|
453
|
+
const invariants = this.generateDefaultInvariants(pattern);
|
|
454
|
+
const memory = {
|
|
455
|
+
pattern,
|
|
456
|
+
invariants,
|
|
457
|
+
domainBoundaries,
|
|
458
|
+
};
|
|
459
|
+
// Save to disk
|
|
460
|
+
await this.writeArchitectureMemory(rootPath, memory);
|
|
461
|
+
return memory;
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Get or create architecture memory (reads from disk or initializes)
|
|
465
|
+
*/
|
|
466
|
+
async getArchitectureMemory(rootPath) {
|
|
467
|
+
// Try to read existing
|
|
468
|
+
const existing = await this.readArchitectureMemory(rootPath);
|
|
469
|
+
if (existing) {
|
|
470
|
+
return existing;
|
|
471
|
+
}
|
|
472
|
+
// Initialize if not found
|
|
473
|
+
return await this.initializeArchitectureMemory(rootPath);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Generate natural language project summary
|
|
477
|
+
*/
|
|
478
|
+
async getProjectSummary(rootPath) {
|
|
479
|
+
const techStack = await this.detectTechStack(rootPath);
|
|
480
|
+
const architecture = await this.getArchitectureMemory(rootPath);
|
|
481
|
+
// Build natural language summary
|
|
482
|
+
const parts = [];
|
|
483
|
+
// Tech stack description
|
|
484
|
+
if (techStack.language !== 'unknown') {
|
|
485
|
+
const stackParts = [];
|
|
486
|
+
if (techStack.framework) {
|
|
487
|
+
stackParts.push(techStack.framework);
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
// Fallback to language name
|
|
491
|
+
const languageNames = {
|
|
492
|
+
node: 'Node.js',
|
|
493
|
+
python: 'Python',
|
|
494
|
+
go: 'Go',
|
|
495
|
+
};
|
|
496
|
+
stackParts.push(languageNames[techStack.language] || techStack.language);
|
|
497
|
+
}
|
|
498
|
+
if (techStack.orm) {
|
|
499
|
+
stackParts.push(`using ${techStack.orm}`);
|
|
500
|
+
}
|
|
501
|
+
if (techStack.styling) {
|
|
502
|
+
stackParts.push(`with ${techStack.styling}`);
|
|
503
|
+
}
|
|
504
|
+
if (techStack.buildTool) {
|
|
505
|
+
stackParts.push(`built with ${techStack.buildTool}`);
|
|
506
|
+
}
|
|
507
|
+
parts.push(stackParts.join(' ') + ' project');
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
parts.push('Unknown technology stack');
|
|
511
|
+
}
|
|
512
|
+
// Architecture description
|
|
513
|
+
if (architecture.pattern !== 'unknown') {
|
|
514
|
+
const patternNames = {
|
|
515
|
+
'feature-based': 'feature-based architecture',
|
|
516
|
+
'layered': 'layered architecture',
|
|
517
|
+
'mvc': 'MVC architecture',
|
|
518
|
+
'unknown': 'unknown architecture',
|
|
519
|
+
};
|
|
520
|
+
parts.push(`Follows ${patternNames[architecture.pattern]}`);
|
|
521
|
+
}
|
|
522
|
+
// Add invariants if present
|
|
523
|
+
if (architecture.invariants.length > 0) {
|
|
524
|
+
parts.push(`Key architectural rules: ${architecture.invariants.slice(0, 2).join(', ')}`);
|
|
525
|
+
}
|
|
526
|
+
const summary = parts.join('. ') + '.';
|
|
527
|
+
return {
|
|
528
|
+
techStack,
|
|
529
|
+
architecture,
|
|
530
|
+
summary,
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
exports.ProjectKnowledgeService = ProjectKnowledgeService;
|
|
535
|
+
//# sourceMappingURL=project-knowledge-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-knowledge-service.js","sourceRoot":"","sources":["../../src/services/project-knowledge-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toolbox Service
|
|
3
|
+
*
|
|
4
|
+
* Provides smart, context-aware toolbox summary generation with Top-K
|
|
5
|
+
* relevance filtering. This service is used by both `plan` and `prompt`
|
|
6
|
+
* commands to ensure consistent, intelligent tool selection.
|
|
7
|
+
*/
|
|
8
|
+
import { ProjectMap } from './mapper/ProjectScanner';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a concise "Toolbox Summary" from the asset map
|
|
11
|
+
* Uses Top-K relevance filtering to show only the most relevant tools
|
|
12
|
+
*
|
|
13
|
+
* @param map - Project map containing all global exports
|
|
14
|
+
* @param intent - User's intent/query for relevance scoring
|
|
15
|
+
* @returns Formatted toolbox summary string, or empty string if no exports
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateToolboxSummary(map: ProjectMap, intent: string): string;
|
|
18
|
+
//# sourceMappingURL=toolbox-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbox-service.d.ts","sourceRoot":"","sources":["../../src/services/toolbox-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAc,MAAM,yBAAyB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAmD9E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Toolbox Service
|
|
4
|
+
*
|
|
5
|
+
* Provides smart, context-aware toolbox summary generation with Top-K
|
|
6
|
+
* relevance filtering. This service is used by both `plan` and `prompt`
|
|
7
|
+
* commands to ensure consistent, intelligent tool selection.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.generateToolboxSummary = generateToolboxSummary;
|
|
11
|
+
const RelevanceScorer_1 = require("../utils/RelevanceScorer");
|
|
12
|
+
/**
|
|
13
|
+
* Generate a concise "Toolbox Summary" from the asset map
|
|
14
|
+
* Uses Top-K relevance filtering to show only the most relevant tools
|
|
15
|
+
*
|
|
16
|
+
* @param map - Project map containing all global exports
|
|
17
|
+
* @param intent - User's intent/query for relevance scoring
|
|
18
|
+
* @returns Formatted toolbox summary string, or empty string if no exports
|
|
19
|
+
*/
|
|
20
|
+
function generateToolboxSummary(map, intent) {
|
|
21
|
+
if (map.globalExports.length === 0) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
const totalExports = map.globalExports.length;
|
|
25
|
+
const topK = 20; // Show top 20 most relevant tools
|
|
26
|
+
// Filter exports using relevance scoring
|
|
27
|
+
const relevantExports = (0, RelevanceScorer_1.getTopKTools)(intent, map.globalExports, topK);
|
|
28
|
+
if (relevantExports.length === 0) {
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
// Group filtered exports by file
|
|
32
|
+
const exportsByFile = new Map();
|
|
33
|
+
for (const exp of relevantExports) {
|
|
34
|
+
if (!exportsByFile.has(exp.filePath)) {
|
|
35
|
+
exportsByFile.set(exp.filePath, []);
|
|
36
|
+
}
|
|
37
|
+
exportsByFile.get(exp.filePath).push(exp);
|
|
38
|
+
}
|
|
39
|
+
// Build summary string with header showing count
|
|
40
|
+
const lines = [];
|
|
41
|
+
lines.push(`\n=== Available Tools (Showing ${relevantExports.length} of ${totalExports} tools most relevant to your intent) ===`);
|
|
42
|
+
for (const [filePath, exports] of exportsByFile.entries()) {
|
|
43
|
+
const exportNames = exports
|
|
44
|
+
.map(exp => {
|
|
45
|
+
if (exp.name === 'default')
|
|
46
|
+
return 'default';
|
|
47
|
+
if (exp.signature) {
|
|
48
|
+
// Extract just the function/class name and params for brevity
|
|
49
|
+
const sig = exp.signature.replace(/\s+/g, ' ').trim();
|
|
50
|
+
return sig.length > 60 ? `${exp.name}(...)` : sig;
|
|
51
|
+
}
|
|
52
|
+
return exp.name;
|
|
53
|
+
})
|
|
54
|
+
.join(', ');
|
|
55
|
+
lines.push(`${filePath}: ${exportNames}`);
|
|
56
|
+
}
|
|
57
|
+
lines.push('=== END Available Tools ===');
|
|
58
|
+
if (totalExports > topK) {
|
|
59
|
+
lines.push(`\nš” If you need a tool not listed here, specify the file path in your next request.`);
|
|
60
|
+
}
|
|
61
|
+
lines.push('');
|
|
62
|
+
return lines.join('\n');
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=toolbox-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbox-service.js","sourceRoot":"","sources":["../../src/services/toolbox-service.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAaH,wDAmDC;AA7DD,8DAAwD;AAExD;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CAAC,GAAe,EAAE,MAAc;IACpE,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,kCAAkC;IAEnD,yCAAyC;IACzC,MAAM,eAAe,GAAG,IAAA,8BAAY,EAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEtE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iCAAiC;IACjC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,iDAAiD;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kCAAkC,eAAe,CAAC,MAAM,OAAO,YAAY,0CAA0C,CAAC,CAAC;IAElI,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,OAAO;aACxB,GAAG,CAAC,GAAG,CAAC,EAAE;YACT,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC7C,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,8DAA8D;gBAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACpD,CAAC;YACD,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1C,IAAI,YAAY,GAAG,IAAI,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACrG,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurcode-ai/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.6",
|
|
4
4
|
"description": "Neurcode CLI - AI code governance and diff analysis",
|
|
5
5
|
"bin": {
|
|
6
6
|
"neurcode": "./dist/index.js"
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"glob": "^10.3.10",
|
|
47
47
|
"lowdb": "^1.0.0",
|
|
48
48
|
"ts-morph": "^24.0.0",
|
|
49
|
-
"uuid": "^9.0.1"
|
|
49
|
+
"uuid": "^9.0.1",
|
|
50
|
+
"zod": "^4.3.5"
|
|
50
51
|
},
|
|
51
52
|
"publishConfig": {
|
|
52
53
|
"access": "public"
|