@neurcode-ai/cli 0.9.48 → 0.9.49

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 (39) hide show
  1. package/LICENSE +201 -0
  2. package/dist/commands/fix.d.ts +12 -0
  3. package/dist/commands/fix.d.ts.map +1 -0
  4. package/dist/commands/fix.js +380 -0
  5. package/dist/commands/fix.js.map +1 -0
  6. package/dist/commands/generate.d.ts +7 -0
  7. package/dist/commands/generate.d.ts.map +1 -0
  8. package/dist/commands/generate.js +117 -0
  9. package/dist/commands/generate.js.map +1 -0
  10. package/dist/commands/plan-show.d.ts +6 -0
  11. package/dist/commands/plan-show.d.ts.map +1 -0
  12. package/dist/commands/plan-show.js +33 -0
  13. package/dist/commands/plan-show.js.map +1 -0
  14. package/dist/commands/start-intent.d.ts +6 -0
  15. package/dist/commands/start-intent.d.ts.map +1 -0
  16. package/dist/commands/start-intent.js +65 -0
  17. package/dist/commands/start-intent.js.map +1 -0
  18. package/dist/commands/verify.d.ts.map +1 -1
  19. package/dist/commands/verify.js +604 -137
  20. package/dist/commands/verify.js.map +1 -1
  21. package/dist/index.js +115 -55
  22. package/dist/index.js.map +1 -1
  23. package/dist/mcp/context-injector.d.ts +45 -0
  24. package/dist/mcp/context-injector.d.ts.map +1 -0
  25. package/dist/mcp/context-injector.js +587 -0
  26. package/dist/mcp/context-injector.js.map +1 -0
  27. package/dist/mcp/proximity.d.ts +3 -0
  28. package/dist/mcp/proximity.d.ts.map +1 -0
  29. package/dist/mcp/proximity.js +135 -0
  30. package/dist/mcp/proximity.js.map +1 -0
  31. package/dist/utils/git.d.ts +8 -0
  32. package/dist/utils/git.d.ts.map +1 -1
  33. package/dist/utils/git.js +55 -0
  34. package/dist/utils/git.js.map +1 -1
  35. package/dist/utils/plan-sync.d.ts +34 -0
  36. package/dist/utils/plan-sync.d.ts.map +1 -0
  37. package/dist/utils/plan-sync.js +265 -0
  38. package/dist/utils/plan-sync.js.map +1 -0
  39. package/package.json +7 -8
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractRequestedFilePathsFromPrompt = extractRequestedFilePathsFromPrompt;
4
+ exports.findClosestAllowedFile = findClosestAllowedFile;
5
+ const FILE_PATH_PATTERN = /(?:^|[\s([{"'])((?:[A-Za-z0-9_.-]+\/)+(?:[A-Za-z0-9_.-]+\.(?:tsx|ts|jsx|js|mjs|cjs|json|tf|py|go|java|rs|md)))/g;
6
+ const BACKTICK_PATTERN = /`([^`]+)`/g;
7
+ const NOISE_TOKENS = new Set([
8
+ 'src',
9
+ 'app',
10
+ 'apps',
11
+ 'lib',
12
+ 'libs',
13
+ 'package',
14
+ 'packages',
15
+ 'module',
16
+ 'modules',
17
+ 'index',
18
+ 'main',
19
+ 'test',
20
+ 'tests',
21
+ 'spec',
22
+ 'ts',
23
+ 'tsx',
24
+ 'js',
25
+ 'jsx',
26
+ 'mjs',
27
+ 'cjs',
28
+ 'json',
29
+ 'tf',
30
+ 'py',
31
+ 'go',
32
+ 'java',
33
+ 'rs',
34
+ 'md',
35
+ ]);
36
+ function normalizePath(value) {
37
+ return value.replace(/\\/g, '/').replace(/^\.\//, '').trim();
38
+ }
39
+ function isLikelyFilePath(value) {
40
+ const normalized = normalizePath(value);
41
+ if (!normalized || !normalized.includes('/'))
42
+ return false;
43
+ return /\.[A-Za-z0-9]+$/.test(normalized);
44
+ }
45
+ function splitTokens(value) {
46
+ const normalized = value
47
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
48
+ .replace(/[^A-Za-z0-9]+/g, ' ')
49
+ .trim()
50
+ .toLowerCase();
51
+ if (!normalized)
52
+ return [];
53
+ return normalized
54
+ .split(/\s+/)
55
+ .filter((token) => Boolean(token) && !NOISE_TOKENS.has(token));
56
+ }
57
+ function fileNameFromPath(pathValue) {
58
+ const normalized = normalizePath(pathValue);
59
+ const segments = normalized.split('/');
60
+ const fileName = segments[segments.length - 1] || normalized;
61
+ return fileName.replace(/\.[^.]+$/, '');
62
+ }
63
+ function directorySegments(pathValue) {
64
+ const normalized = normalizePath(pathValue);
65
+ const segments = normalized.split('/').filter(Boolean);
66
+ return segments.slice(0, -1);
67
+ }
68
+ function extractRequestedFilePathsFromPrompt(prompt, maxItems = 3) {
69
+ const output = [];
70
+ const seen = new Set();
71
+ const limitedMax = Math.max(1, Math.floor(maxItems));
72
+ const pushCandidate = (candidateRaw) => {
73
+ const candidate = normalizePath(candidateRaw.replace(/[),.;:'"]+$/g, ''));
74
+ if (!isLikelyFilePath(candidate))
75
+ return;
76
+ if (seen.has(candidate))
77
+ return;
78
+ seen.add(candidate);
79
+ output.push(candidate);
80
+ };
81
+ let match;
82
+ while ((match = BACKTICK_PATTERN.exec(prompt)) !== null) {
83
+ if (output.length >= limitedMax)
84
+ break;
85
+ pushCandidate(match[1] || '');
86
+ }
87
+ while ((match = FILE_PATH_PATTERN.exec(prompt)) !== null) {
88
+ if (output.length >= limitedMax)
89
+ break;
90
+ pushCandidate(match[1] || '');
91
+ }
92
+ return output.slice(0, limitedMax);
93
+ }
94
+ function findClosestAllowedFile(requestedPath, allowedFiles) {
95
+ const normalizedRequested = normalizePath(requestedPath);
96
+ if (!normalizedRequested || !Array.isArray(allowedFiles) || allowedFiles.length === 0) {
97
+ return null;
98
+ }
99
+ const requestedDirs = directorySegments(normalizedRequested);
100
+ const requestedNameTokens = splitTokens(fileNameFromPath(normalizedRequested));
101
+ const requestedAllTokens = splitTokens(normalizedRequested);
102
+ let bestPath = null;
103
+ let bestScore = 0;
104
+ let bestHasSignal = false;
105
+ for (const candidateRaw of allowedFiles) {
106
+ const candidate = normalizePath(candidateRaw);
107
+ if (!candidate)
108
+ continue;
109
+ const candidateDirs = directorySegments(candidate);
110
+ const candidateNameTokens = splitTokens(fileNameFromPath(candidate));
111
+ const candidateAllTokens = splitTokens(candidate);
112
+ let sharedDirPrefix = 0;
113
+ while (sharedDirPrefix < requestedDirs.length &&
114
+ sharedDirPrefix < candidateDirs.length &&
115
+ requestedDirs[sharedDirPrefix] === candidateDirs[sharedDirPrefix]) {
116
+ sharedDirPrefix += 1;
117
+ }
118
+ const requestedNameSet = new Set(requestedNameTokens);
119
+ const requestedAllSet = new Set(requestedAllTokens);
120
+ const nameOverlap = candidateNameTokens.filter((token) => requestedNameSet.has(token)).length;
121
+ const allOverlap = candidateAllTokens.filter((token) => requestedAllSet.has(token)).length;
122
+ const hasSignal = sharedDirPrefix > 0 || nameOverlap > 0 || allOverlap >= 2;
123
+ const score = (sharedDirPrefix * 8) + (nameOverlap * 6) + (allOverlap * 2);
124
+ if (score > bestScore) {
125
+ bestScore = score;
126
+ bestPath = candidate;
127
+ bestHasSignal = hasSignal;
128
+ }
129
+ }
130
+ if (!bestHasSignal || bestScore <= 0) {
131
+ return null;
132
+ }
133
+ return bestPath;
134
+ }
135
+ //# sourceMappingURL=proximity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proximity.js","sourceRoot":"","sources":["../../src/mcp/proximity.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,11 @@
7
7
  */
8
8
  /** Git's canonical empty tree hash - safe to use when repo has only one commit */
9
9
  export declare const GIT_EMPTY_TREE = "4b825dc642cb6eb9a060e54bf8d69288fbee4904";
10
+ export interface DefaultDiffContext {
11
+ mode: 'base' | 'staged';
12
+ baseRef: string | null;
13
+ currentBranch: string | null;
14
+ }
10
15
  /**
11
16
  * Execute a git command with large buffer
12
17
  */
@@ -15,6 +20,9 @@ export declare function execGitCommand(command: string, options?: {
15
20
  stdio?: any;
16
21
  cwd?: string;
17
22
  }): string;
23
+ export declare function detectCurrentGitBranch(cwd?: string): string | null;
24
+ export declare function detectDefaultBaseRef(cwd?: string): string | null;
25
+ export declare function resolveDefaultDiffContext(cwd?: string): DefaultDiffContext;
18
26
  /**
19
27
  * Get diff from a base ref to current work tree.
20
28
  * If base is invalid (e.g. HEAD~1 on initial commit), falls back to diff from empty tree to HEAD
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,kFAAkF;AAClF,eAAO,MAAM,cAAc,6CAA6C,CAAC;AAOzE;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAO9H;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,kFAAkF;AAClF,eAAO,MAAM,cAAc,6CAA6C,CAAC;AAOzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAO9H;AAmBD,wBAAgB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED,wBAAgB,yBAAyB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAkB1E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD"}
package/dist/utils/git.js CHANGED
@@ -9,6 +9,9 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.GIT_EMPTY_TREE = void 0;
11
11
  exports.execGitCommand = execGitCommand;
12
+ exports.detectCurrentGitBranch = detectCurrentGitBranch;
13
+ exports.detectDefaultBaseRef = detectDefaultBaseRef;
14
+ exports.resolveDefaultDiffContext = resolveDefaultDiffContext;
12
15
  exports.getDiffFromBase = getDiffFromBase;
13
16
  const child_process_1 = require("child_process");
14
17
  /** Git's canonical empty tree hash - safe to use when repo has only one commit */
@@ -27,6 +30,58 @@ function execGitCommand(command, options = {}) {
27
30
  };
28
31
  return (0, child_process_1.execSync)(command, execOptions);
29
32
  }
33
+ function tryExecGit(command, cwd) {
34
+ try {
35
+ return (0, child_process_1.execSync)(command, {
36
+ ...EXEC_OPTS,
37
+ cwd,
38
+ stdio: ['ignore', 'pipe', 'pipe'],
39
+ }).trim();
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ function gitRefExists(ref, cwd) {
46
+ const value = tryExecGit(`git rev-parse --verify --quiet ${ref}`, cwd);
47
+ return Boolean(value);
48
+ }
49
+ function detectCurrentGitBranch(cwd) {
50
+ const value = tryExecGit('git rev-parse --abbrev-ref HEAD', cwd);
51
+ if (!value || value === 'HEAD')
52
+ return null;
53
+ return value;
54
+ }
55
+ function detectDefaultBaseRef(cwd) {
56
+ // Prefer explicit origin branches for normal PR workflows.
57
+ if (gitRefExists('refs/remotes/origin/main', cwd))
58
+ return 'origin/main';
59
+ if (gitRefExists('refs/remotes/origin/master', cwd))
60
+ return 'origin/master';
61
+ // Fallback to local branch names if remote refs are unavailable.
62
+ if (gitRefExists('refs/heads/main', cwd))
63
+ return 'main';
64
+ if (gitRefExists('refs/heads/master', cwd))
65
+ return 'master';
66
+ return null;
67
+ }
68
+ function resolveDefaultDiffContext(cwd) {
69
+ const currentBranch = detectCurrentGitBranch(cwd);
70
+ const baseRef = detectDefaultBaseRef(cwd);
71
+ if (baseRef) {
72
+ return {
73
+ mode: 'base',
74
+ baseRef,
75
+ currentBranch,
76
+ };
77
+ }
78
+ // When branch/base cannot be resolved, fall back to staged diff.
79
+ return {
80
+ mode: 'staged',
81
+ baseRef: null,
82
+ currentBranch,
83
+ };
84
+ }
30
85
  /**
31
86
  * Get diff from a base ref to current work tree.
32
87
  * If base is invalid (e.g. HEAD~1 on initial commit), falls back to diff from empty tree to HEAD
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAeH,wCAOC;AAOD,0CAOC;AAlCD,iDAA4E;AAE5E,kFAAkF;AACrE,QAAA,cAAc,GAAG,0CAA0C,CAAC;AAEzE,MAAM,SAAS,GAAsC;IACnD,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,aAAa;CAC7C,CAAC;AAEF;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAe,EAAE,UAAoE,EAAE;IACpH,MAAM,WAAW,GAAsC;QACrD,GAAG,SAAS;QACZ,GAAG,OAAO;KACX,CAAC;IAEF,OAAO,IAAA,wBAAQ,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,YAAY,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,IAAA,wBAAQ,EAAC,YAAY,sBAAc,OAAO,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAqBH,wCAOC;AAmBD,wDAIC;AAED,oDAUC;AAED,8DAkBC;AAOD,0CAOC;AA/FD,iDAA4E;AAE5E,kFAAkF;AACrE,QAAA,cAAc,GAAG,0CAA0C,CAAC;AAEzE,MAAM,SAAS,GAAsC;IACnD,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,aAAa;CAC7C,CAAC;AAQF;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAe,EAAE,UAAoE,EAAE;IACpH,MAAM,WAAW,GAAsC;QACrD,GAAG,SAAS;QACZ,GAAG,OAAO;KACX,CAAC;IAEF,OAAO,IAAA,wBAAQ,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,GAAY;IAC/C,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,OAAO,EAAE;YACvB,GAAG,SAAS;YACZ,GAAG;YACH,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,GAAY;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,kCAAkC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,sBAAsB,CAAC,GAAY;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,2DAA2D;IAC3D,IAAI,YAAY,CAAC,0BAA0B,EAAE,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC;IACxE,IAAI,YAAY,CAAC,4BAA4B,EAAE,GAAG,CAAC;QAAE,OAAO,eAAe,CAAC;IAE5E,iEAAiE;IACjE,IAAI,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACxD,IAAI,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,yBAAyB,CAAC,GAAY;IACpD,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,aAAa;SACd,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,YAAY,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,IAAA,wBAAQ,EAAC,YAAY,sBAAc,OAAO,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface LocalPlanData {
2
+ intent: string;
3
+ expectedFiles: string[];
4
+ constraints: string[];
5
+ createdAt: string;
6
+ lastUpdated: string;
7
+ }
8
+ export interface LocalPlanSnapshot extends LocalPlanData {
9
+ path: string;
10
+ existed: boolean;
11
+ }
12
+ export declare function resolveLocalPlanPath(projectRoot: string): string;
13
+ export declare function ensureLocalPlan(projectRoot: string): LocalPlanSnapshot;
14
+ export interface PlanSyncUpdateResult {
15
+ path: string;
16
+ addedFiles: string[];
17
+ expectedFiles: string[];
18
+ intent: string;
19
+ constraints: string[];
20
+ createdAt: string;
21
+ lastUpdated: string;
22
+ }
23
+ export declare function addExpectedFilesToLocalPlan(projectRoot: string, files: string[]): PlanSyncUpdateResult;
24
+ export interface IntentPlanInitializationResult {
25
+ path: string;
26
+ intent: string;
27
+ detectedSignals: Array<'auth' | 'api' | 'ui'>;
28
+ expectedFiles: string[];
29
+ constraints: string[];
30
+ createdAt: string;
31
+ lastUpdated: string;
32
+ }
33
+ export declare function initializeLocalPlanFromIntent(projectRoot: string, intentInput: string): IntentPlanInitializationResult;
34
+ //# sourceMappingURL=plan-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-sync.d.ts","sourceRoot":"","sources":["../../src/utils/plan-sync.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAoFD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAMD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAkDtE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,oBAAoB,CAqCtB;AAyFD,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,8BAA8B,CAuBhC"}
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveLocalPlanPath = resolveLocalPlanPath;
4
+ exports.ensureLocalPlan = ensureLocalPlan;
5
+ exports.addExpectedFilesToLocalPlan = addExpectedFilesToLocalPlan;
6
+ exports.initializeLocalPlanFromIntent = initializeLocalPlanFromIntent;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const PLAN_DIRNAME = '.neurcode';
10
+ const PLAN_FILENAME = 'plan.json';
11
+ function nowIso() {
12
+ return new Date().toISOString();
13
+ }
14
+ function normalizeText(value) {
15
+ return value.replace(/\s+/g, ' ').trim();
16
+ }
17
+ function normalizeRepoPath(value) {
18
+ return value.replace(/\\/g, '/').replace(/^\.\//, '').trim();
19
+ }
20
+ function dedupeValues(values) {
21
+ const seen = new Set();
22
+ const out = [];
23
+ for (const value of values) {
24
+ const normalized = normalizeText(value);
25
+ if (!normalized)
26
+ continue;
27
+ const key = normalized.toLowerCase();
28
+ if (seen.has(key))
29
+ continue;
30
+ seen.add(key);
31
+ out.push(normalized);
32
+ }
33
+ return out;
34
+ }
35
+ function dedupePaths(paths) {
36
+ const seen = new Set();
37
+ const out = [];
38
+ for (const path of paths) {
39
+ const normalized = normalizeRepoPath(path);
40
+ if (!normalized)
41
+ continue;
42
+ const key = normalized.toLowerCase();
43
+ if (seen.has(key))
44
+ continue;
45
+ seen.add(key);
46
+ out.push(normalized);
47
+ }
48
+ return out;
49
+ }
50
+ function coerceLocalPlan(value) {
51
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
52
+ const now = nowIso();
53
+ return {
54
+ intent: '',
55
+ expectedFiles: [],
56
+ constraints: [],
57
+ createdAt: now,
58
+ lastUpdated: now,
59
+ };
60
+ }
61
+ const record = value;
62
+ const intent = typeof record.intent === 'string' ? normalizeText(record.intent) : '';
63
+ const expectedFilesRaw = Array.isArray(record.expectedFiles) ? record.expectedFiles : [];
64
+ const expectedFiles = dedupePaths(expectedFilesRaw.filter((item) => typeof item === 'string'));
65
+ const constraintsRaw = Array.isArray(record.constraints) ? record.constraints : [];
66
+ const constraints = dedupeValues(constraintsRaw.filter((item) => typeof item === 'string'));
67
+ const createdAt = typeof record.createdAt === 'string' && record.createdAt.trim().length > 0
68
+ ? record.createdAt
69
+ : typeof record.lastUpdated === 'string' && record.lastUpdated.trim().length > 0
70
+ ? record.lastUpdated
71
+ : nowIso();
72
+ const lastUpdated = typeof record.lastUpdated === 'string' && record.lastUpdated.trim().length > 0
73
+ ? record.lastUpdated
74
+ : createdAt;
75
+ return {
76
+ intent,
77
+ expectedFiles,
78
+ constraints,
79
+ createdAt,
80
+ lastUpdated,
81
+ };
82
+ }
83
+ function resolveLocalPlanPath(projectRoot) {
84
+ return (0, path_1.join)(projectRoot, PLAN_DIRNAME, PLAN_FILENAME);
85
+ }
86
+ function writeLocalPlan(path, data) {
87
+ (0, fs_1.writeFileSync)(path, `${JSON.stringify(data, null, 2)}\n`, 'utf-8');
88
+ }
89
+ function ensureLocalPlan(projectRoot) {
90
+ const planDir = (0, path_1.join)(projectRoot, PLAN_DIRNAME);
91
+ const planPath = resolveLocalPlanPath(projectRoot);
92
+ (0, fs_1.mkdirSync)(planDir, { recursive: true });
93
+ if (!(0, fs_1.existsSync)(planPath)) {
94
+ const now = nowIso();
95
+ const freshPlan = {
96
+ intent: '',
97
+ expectedFiles: [],
98
+ constraints: [],
99
+ createdAt: now,
100
+ lastUpdated: now,
101
+ };
102
+ writeLocalPlan(planPath, freshPlan);
103
+ return {
104
+ ...freshPlan,
105
+ path: planPath,
106
+ existed: false,
107
+ };
108
+ }
109
+ try {
110
+ const raw = (0, fs_1.readFileSync)(planPath, 'utf-8');
111
+ const parsed = JSON.parse(raw);
112
+ const coerced = coerceLocalPlan(parsed);
113
+ if (JSON.stringify(coerced) !== JSON.stringify(parsed)) {
114
+ writeLocalPlan(planPath, coerced);
115
+ }
116
+ return {
117
+ ...coerced,
118
+ path: planPath,
119
+ existed: true,
120
+ };
121
+ }
122
+ catch {
123
+ const now = nowIso();
124
+ const repaired = {
125
+ intent: '',
126
+ expectedFiles: [],
127
+ constraints: [],
128
+ createdAt: now,
129
+ lastUpdated: now,
130
+ };
131
+ writeLocalPlan(planPath, repaired);
132
+ return {
133
+ ...repaired,
134
+ path: planPath,
135
+ existed: true,
136
+ };
137
+ }
138
+ }
139
+ function addExpectedFilesToLocalPlan(projectRoot, files) {
140
+ const plan = ensureLocalPlan(projectRoot);
141
+ const incoming = dedupePaths(files);
142
+ const existingSet = new Set(plan.expectedFiles.map((item) => item.toLowerCase()));
143
+ const addedFiles = [];
144
+ for (const file of incoming) {
145
+ const key = file.toLowerCase();
146
+ if (existingSet.has(key))
147
+ continue;
148
+ existingSet.add(key);
149
+ addedFiles.push(file);
150
+ }
151
+ const shouldUpdateTimestamp = incoming.length > 0;
152
+ const nextExpectedFiles = shouldUpdateTimestamp
153
+ ? dedupePaths([...plan.expectedFiles, ...addedFiles])
154
+ : plan.expectedFiles;
155
+ const nextLastUpdated = shouldUpdateTimestamp ? nowIso() : plan.lastUpdated;
156
+ const nextPlan = {
157
+ intent: plan.intent,
158
+ expectedFiles: nextExpectedFiles,
159
+ constraints: plan.constraints,
160
+ createdAt: plan.createdAt,
161
+ lastUpdated: nextLastUpdated,
162
+ };
163
+ writeLocalPlan(plan.path, nextPlan);
164
+ return {
165
+ path: plan.path,
166
+ addedFiles,
167
+ expectedFiles: nextPlan.expectedFiles,
168
+ intent: nextPlan.intent,
169
+ constraints: nextPlan.constraints,
170
+ createdAt: nextPlan.createdAt,
171
+ lastUpdated: nextPlan.lastUpdated,
172
+ };
173
+ }
174
+ const INTENT_HEURISTIC_RULES = [
175
+ {
176
+ id: 'auth',
177
+ pattern: /\b(auth|authentication|authorization|jwt|token|login|rbac|role)\b/i,
178
+ files: [
179
+ 'src/core/auth.ts',
180
+ 'src/core/auth-service.ts',
181
+ 'src/core/middleware/auth.ts',
182
+ 'src/api/auth.ts',
183
+ ],
184
+ constraints: [
185
+ 'Preserve authentication and authorization checks.',
186
+ 'Validate auth inputs before request handling.',
187
+ ],
188
+ },
189
+ {
190
+ id: 'api',
191
+ pattern: /\b(api|endpoint|route|controller|backend|server)\b/i,
192
+ files: [
193
+ 'src/core/api.ts',
194
+ 'src/core/routes.ts',
195
+ 'src/core/handlers.ts',
196
+ 'src/api/index.ts',
197
+ ],
198
+ constraints: [
199
+ 'Validate inputs at API boundaries.',
200
+ 'Keep endpoint changes localized to API/core layers.',
201
+ ],
202
+ },
203
+ {
204
+ id: 'ui',
205
+ pattern: /\b(ui|frontend|component|react|page|screen)\b/i,
206
+ files: [
207
+ 'src/ui/app.tsx',
208
+ 'src/ui/users.tsx',
209
+ 'src/ui/components/AuthForm.tsx',
210
+ 'src/ui/components/index.ts',
211
+ ],
212
+ constraints: [
213
+ 'Keep business logic out of UI components.',
214
+ 'Use core/service layers for data access.',
215
+ ],
216
+ },
217
+ ];
218
+ const DEFAULT_INTENT_FILES = ['src/core/index.ts'];
219
+ const DEFAULT_INTENT_CONSTRAINTS = ['Keep changes scoped to planned files.'];
220
+ function buildIntentHeuristic(intent) {
221
+ const normalizedIntent = normalizeText(intent);
222
+ const detectedSignals = INTENT_HEURISTIC_RULES
223
+ .filter((rule) => rule.pattern.test(normalizedIntent))
224
+ .map((rule) => rule.id);
225
+ const expectedFiles = dedupePaths(detectedSignals.length > 0
226
+ ? INTENT_HEURISTIC_RULES
227
+ .filter((rule) => detectedSignals.includes(rule.id))
228
+ .flatMap((rule) => rule.files)
229
+ : DEFAULT_INTENT_FILES).slice(0, 12);
230
+ const constraints = dedupeValues([
231
+ ...DEFAULT_INTENT_CONSTRAINTS,
232
+ ...INTENT_HEURISTIC_RULES
233
+ .filter((rule) => detectedSignals.includes(rule.id))
234
+ .flatMap((rule) => rule.constraints),
235
+ ]).slice(0, 8);
236
+ return {
237
+ detectedSignals,
238
+ expectedFiles,
239
+ constraints,
240
+ };
241
+ }
242
+ function initializeLocalPlanFromIntent(projectRoot, intentInput) {
243
+ const intent = normalizeText(intentInput);
244
+ const plan = ensureLocalPlan(projectRoot);
245
+ const heuristic = buildIntentHeuristic(intent);
246
+ const now = nowIso();
247
+ const nextPlan = {
248
+ intent,
249
+ expectedFiles: heuristic.expectedFiles,
250
+ constraints: heuristic.constraints,
251
+ createdAt: now,
252
+ lastUpdated: now,
253
+ };
254
+ writeLocalPlan(plan.path, nextPlan);
255
+ return {
256
+ path: plan.path,
257
+ intent: nextPlan.intent,
258
+ detectedSignals: heuristic.detectedSignals,
259
+ expectedFiles: nextPlan.expectedFiles,
260
+ constraints: nextPlan.constraints,
261
+ createdAt: nextPlan.createdAt,
262
+ lastUpdated: nextPlan.lastUpdated,
263
+ };
264
+ }
265
+ //# sourceMappingURL=plan-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-sync.js","sourceRoot":"","sources":["../../src/utils/plan-sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurcode-ai/cli",
3
- "version": "0.9.48",
3
+ "version": "0.9.49",
4
4
  "description": "Neurcode CLI - AI code governance and diff analysis",
5
5
  "bin": {
6
6
  "neurcode": "dist/index.js"
@@ -11,12 +11,6 @@
11
11
  "dist",
12
12
  "README.md"
13
13
  ],
14
- "scripts": {
15
- "build": "rm -rf dist && tsc && chmod +x dist/index.js",
16
- "dev": "tsc --watch",
17
- "start": "node dist/index.js",
18
- "prepublishOnly": "npm run build"
19
- },
20
14
  "keywords": [
21
15
  "cli",
22
16
  "code-governance",
@@ -67,5 +61,10 @@
67
61
  "@types/node": "^20.10.0",
68
62
  "@types/uuid": "^9.0.8",
69
63
  "typescript": "^5.3.0"
64
+ },
65
+ "scripts": {
66
+ "build": "rm -rf dist && tsc && chmod +x dist/index.js",
67
+ "dev": "tsc --watch",
68
+ "start": "node dist/index.js"
70
69
  }
71
- }
70
+ }