@neurcode-ai/cli 0.9.34 → 0.9.35

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 (40) hide show
  1. package/README.md +2 -1
  2. package/dist/api-client.d.ts +14 -1
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +4 -1
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/commands/ask.d.ts.map +1 -1
  7. package/dist/commands/ask.js +15 -2
  8. package/dist/commands/ask.js.map +1 -1
  9. package/dist/commands/plan.d.ts.map +1 -1
  10. package/dist/commands/plan.js +81 -2
  11. package/dist/commands/plan.js.map +1 -1
  12. package/dist/commands/policy.d.ts.map +1 -1
  13. package/dist/commands/policy.js +95 -0
  14. package/dist/commands/policy.js.map +1 -1
  15. package/dist/commands/verify.d.ts +6 -0
  16. package/dist/commands/verify.d.ts.map +1 -1
  17. package/dist/commands/verify.js +365 -56
  18. package/dist/commands/verify.js.map +1 -1
  19. package/dist/index.js +68 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/utils/change-contract.d.ts +55 -0
  22. package/dist/utils/change-contract.d.ts.map +1 -0
  23. package/dist/utils/change-contract.js +158 -0
  24. package/dist/utils/change-contract.js.map +1 -0
  25. package/dist/utils/policy-audit.d.ts +2 -2
  26. package/dist/utils/policy-audit.d.ts.map +1 -1
  27. package/dist/utils/policy-audit.js.map +1 -1
  28. package/dist/utils/policy-compiler.d.ts +68 -0
  29. package/dist/utils/policy-compiler.d.ts.map +1 -0
  30. package/dist/utils/policy-compiler.js +170 -0
  31. package/dist/utils/policy-compiler.js.map +1 -0
  32. package/dist/utils/project-root.d.ts +16 -0
  33. package/dist/utils/project-root.d.ts.map +1 -1
  34. package/dist/utils/project-root.js +123 -9
  35. package/dist/utils/project-root.js.map +1 -1
  36. package/dist/utils/scope-telemetry.d.ts +21 -0
  37. package/dist/utils/scope-telemetry.d.ts.map +1 -0
  38. package/dist/utils/scope-telemetry.js +35 -0
  39. package/dist/utils/scope-telemetry.js.map +1 -0
  40. package/package.json +3 -2
@@ -17,6 +17,7 @@
17
17
  * - If nothing is found, fall back to the starting directory.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.resolveNeurcodeProjectRootWithTrace = resolveNeurcodeProjectRootWithTrace;
20
21
  exports.resolveNeurcodeProjectRoot = resolveNeurcodeProjectRoot;
21
22
  const child_process_1 = require("child_process");
22
23
  const fs_1 = require("fs");
@@ -63,27 +64,87 @@ function findNearestRepoLinksRoot(startDir, boundary) {
63
64
  }
64
65
  return null;
65
66
  }
66
- function resolveNeurcodeProjectRoot(startDir = process.cwd()) {
67
+ function loadLinkedReposForRoot(root) {
68
+ if (!root)
69
+ return [];
70
+ const linksPath = (0, path_1.join)(root, '.neurcode', 'repo-links.json');
71
+ if (!(0, fs_1.existsSync)(linksPath))
72
+ return [];
73
+ return (0, repo_links_1.loadRepoLinks)(root);
74
+ }
75
+ function finalizeTrace(input) {
76
+ const linkedRepoRoot = input.linkedRepoRoot && (0, fs_1.existsSync)((0, path_1.join)(input.linkedRepoRoot, '.neurcode', 'repo-links.json'))
77
+ ? input.linkedRepoRoot
78
+ : (0, fs_1.existsSync)((0, path_1.join)(input.projectRoot, '.neurcode', 'repo-links.json'))
79
+ ? input.projectRoot
80
+ : null;
81
+ const linkedRepos = linkedRepoRoot ? loadLinkedReposForRoot(linkedRepoRoot) : [];
82
+ return {
83
+ startDir: input.startDir,
84
+ projectRoot: input.projectRoot,
85
+ gitRoot: input.gitRoot,
86
+ overrideRequested: input.overrideRequested,
87
+ overrideResolved: input.overrideResolved,
88
+ overrideStatus: input.overrideStatus,
89
+ overrideBlockedReason: input.overrideBlockedReason,
90
+ linkedRepoRoot,
91
+ linkedRepos,
92
+ linkedRepoOverrideUsed: input.linkedRepoOverrideUsed,
93
+ };
94
+ }
95
+ function resolveNeurcodeProjectRootWithTrace(startDir = process.cwd()) {
67
96
  const resolvedStart = canonicalizePath(startDir);
68
97
  const gitRoot = getGitRoot(resolvedStart);
69
98
  const homeDir = canonicalizePath(process.env.HOME || process.env.USERPROFILE || resolvedStart);
99
+ let overrideRequested = null;
100
+ let overrideResolved = null;
101
+ let overrideStatus = 'none';
102
+ let overrideBlockedReason;
103
+ let linkedRepoRoot = null;
104
+ let linkedRepoOverrideUsed = false;
70
105
  const override = process.env.NEURCODE_PROJECT_ROOT || process.env.NEURCODE_ROOT;
71
106
  if (override && override.trim()) {
107
+ overrideRequested = override.trim();
72
108
  const overridePath = canonicalizePath(override.trim());
109
+ overrideResolved = overridePath;
73
110
  if (gitRoot &&
74
111
  !isPathWithin(gitRoot, overridePath) &&
75
112
  process.env.NEURCODE_ALLOW_CROSS_REPO_ROOT !== '1') {
76
- const linksRoot = findNearestRepoLinksRoot(resolvedStart, gitRoot);
113
+ const linksRoot = findNearestRepoLinksRoot(resolvedStart, gitRoot) || gitRoot;
77
114
  const explicitlyLinked = linksRoot
78
115
  ? (0, repo_links_1.isRepoPathExplicitlyLinked)(linksRoot, overridePath)
79
116
  : false;
117
+ linkedRepoRoot = linksRoot;
80
118
  if (explicitlyLinked) {
81
- return overridePath;
119
+ overrideStatus = 'allowed';
120
+ linkedRepoOverrideUsed = true;
121
+ return finalizeTrace({
122
+ startDir: resolvedStart,
123
+ projectRoot: overridePath,
124
+ gitRoot,
125
+ overrideRequested,
126
+ overrideResolved,
127
+ overrideStatus,
128
+ linkedRepoRoot,
129
+ linkedRepoOverrideUsed,
130
+ });
82
131
  }
83
132
  // Ignore invalid cross-repo override and continue with normal root resolution.
133
+ overrideStatus = 'blocked_cross_repo';
134
+ overrideBlockedReason = `Cross-repo override blocked: ${overridePath}`;
84
135
  }
85
136
  else {
86
- return overridePath;
137
+ overrideStatus = 'allowed';
138
+ return finalizeTrace({
139
+ startDir: resolvedStart,
140
+ projectRoot: overridePath,
141
+ gitRoot,
142
+ overrideRequested,
143
+ overrideResolved,
144
+ overrideStatus,
145
+ linkedRepoRoot,
146
+ linkedRepoOverrideUsed,
147
+ });
87
148
  }
88
149
  }
89
150
  let dir = resolvedStart;
@@ -94,18 +155,58 @@ function resolveNeurcodeProjectRoot(startDir = process.cwd()) {
94
155
  if (dir === homeDir &&
95
156
  dir !== resolvedStart &&
96
157
  process.env.NEURCODE_ALLOW_HOME_ROOT !== '1') {
97
- return resolvedStart;
158
+ return finalizeTrace({
159
+ startDir: resolvedStart,
160
+ projectRoot: resolvedStart,
161
+ gitRoot,
162
+ overrideRequested,
163
+ overrideResolved,
164
+ overrideStatus: 'blocked_home_guard',
165
+ overrideBlockedReason: 'Home directory scope was blocked by default guard.',
166
+ linkedRepoRoot,
167
+ linkedRepoOverrideUsed,
168
+ });
98
169
  }
99
- return dir;
170
+ return finalizeTrace({
171
+ startDir: resolvedStart,
172
+ projectRoot: dir,
173
+ gitRoot,
174
+ overrideRequested,
175
+ overrideResolved,
176
+ overrideStatus,
177
+ overrideBlockedReason,
178
+ linkedRepoRoot,
179
+ linkedRepoOverrideUsed,
180
+ });
100
181
  }
101
182
  const legacyLocalConfig = (0, path_1.join)(dir, 'neurcode.config.json');
102
183
  if ((0, fs_1.existsSync)(legacyLocalConfig)) {
103
184
  if (dir === homeDir &&
104
185
  dir !== resolvedStart &&
105
186
  process.env.NEURCODE_ALLOW_HOME_ROOT !== '1') {
106
- return resolvedStart;
187
+ return finalizeTrace({
188
+ startDir: resolvedStart,
189
+ projectRoot: resolvedStart,
190
+ gitRoot,
191
+ overrideRequested,
192
+ overrideResolved,
193
+ overrideStatus: 'blocked_home_guard',
194
+ overrideBlockedReason: 'Home directory scope was blocked by default guard.',
195
+ linkedRepoRoot,
196
+ linkedRepoOverrideUsed,
197
+ });
107
198
  }
108
- return dir;
199
+ return finalizeTrace({
200
+ startDir: resolvedStart,
201
+ projectRoot: dir,
202
+ gitRoot,
203
+ overrideRequested,
204
+ overrideResolved,
205
+ overrideStatus,
206
+ overrideBlockedReason,
207
+ linkedRepoRoot,
208
+ linkedRepoOverrideUsed,
209
+ });
109
210
  }
110
211
  if (boundary && dir === boundary)
111
212
  break;
@@ -114,6 +215,19 @@ function resolveNeurcodeProjectRoot(startDir = process.cwd()) {
114
215
  break;
115
216
  dir = parent;
116
217
  }
117
- return resolvedStart;
218
+ return finalizeTrace({
219
+ startDir: resolvedStart,
220
+ projectRoot: resolvedStart,
221
+ gitRoot,
222
+ overrideRequested,
223
+ overrideResolved,
224
+ overrideStatus,
225
+ overrideBlockedReason,
226
+ linkedRepoRoot,
227
+ linkedRepoOverrideUsed,
228
+ });
229
+ }
230
+ function resolveNeurcodeProjectRoot(startDir = process.cwd()) {
231
+ return resolveNeurcodeProjectRootWithTrace(startDir).projectRoot;
118
232
  }
119
233
  //# sourceMappingURL=project-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ProjectRootResolutionTrace } from './project-root';
2
+ export interface ScopeTelemetryPayload {
3
+ scanRoot: string;
4
+ startDir: string;
5
+ gitRoot: string | null;
6
+ linkedRepoOverrideUsed: boolean;
7
+ linkedRepos: Array<{
8
+ alias: string;
9
+ path: string;
10
+ }>;
11
+ blockedOverride: null | {
12
+ requested: string | null;
13
+ resolved: string | null;
14
+ reason: string;
15
+ };
16
+ }
17
+ export declare function buildScopeTelemetryPayload(trace: ProjectRootResolutionTrace): ScopeTelemetryPayload;
18
+ export declare function printScopeTelemetry(chalk: any, scope: ScopeTelemetryPayload, options?: {
19
+ includeBlockedWarning?: boolean;
20
+ }): void;
21
+ //# sourceMappingURL=scope-telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-telemetry.d.ts","sourceRoot":"","sources":["../../src/utils/scope-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,EAAE,IAAI,GAAG;QACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,0BAA0B,GAChC,qBAAqB,CAmBvB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE;IACR,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,IAAI,CAoBN"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildScopeTelemetryPayload = buildScopeTelemetryPayload;
4
+ exports.printScopeTelemetry = printScopeTelemetry;
5
+ function buildScopeTelemetryPayload(trace) {
6
+ return {
7
+ scanRoot: trace.projectRoot,
8
+ startDir: trace.startDir,
9
+ gitRoot: trace.gitRoot,
10
+ linkedRepoOverrideUsed: trace.linkedRepoOverrideUsed,
11
+ linkedRepos: trace.linkedRepos.map((link) => ({
12
+ alias: link.alias,
13
+ path: link.path,
14
+ })),
15
+ blockedOverride: trace.overrideStatus === 'blocked_cross_repo' || trace.overrideStatus === 'blocked_home_guard'
16
+ ? {
17
+ requested: trace.overrideRequested,
18
+ resolved: trace.overrideResolved,
19
+ reason: trace.overrideBlockedReason || trace.overrideStatus,
20
+ }
21
+ : null,
22
+ };
23
+ }
24
+ function printScopeTelemetry(chalk, scope, options) {
25
+ const linkedRepoSummary = scope.linkedRepos.length > 0
26
+ ? scope.linkedRepos.map((link) => link.alias).join(', ')
27
+ : 'none';
28
+ const overrideLabel = scope.linkedRepoOverrideUsed ? ' (linked override)' : '';
29
+ console.log(chalk.dim(`🔐 Scope root: ${scope.scanRoot}${overrideLabel} | linked repos: ${linkedRepoSummary}`));
30
+ if (options?.includeBlockedWarning && scope.blockedOverride) {
31
+ const requested = scope.blockedOverride.requested || 'unknown';
32
+ console.log(chalk.yellow(`⚠️ Scope override blocked: ${requested} (${scope.blockedOverride.reason})`));
33
+ }
34
+ }
35
+ //# sourceMappingURL=scope-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-telemetry.js","sourceRoot":"","sources":["../../src/utils/scope-telemetry.ts"],"names":[],"mappings":";;AAeA,gEAqBC;AAED,kDA0BC;AAjDD,SAAgB,0BAA0B,CACxC,KAAiC;IAEjC,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,WAAW;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,eAAe,EACb,KAAK,CAAC,cAAc,KAAK,oBAAoB,IAAI,KAAK,CAAC,cAAc,KAAK,oBAAoB;YAC5F,CAAC,CAAC;gBACE,SAAS,EAAE,KAAK,CAAC,iBAAiB;gBAClC,QAAQ,EAAE,KAAK,CAAC,gBAAgB;gBAChC,MAAM,EAAE,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC,cAAc;aAC5D;YACH,CAAC,CAAC,IAAI;KACX,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAU,EACV,KAA4B,EAC5B,OAEC;IAED,MAAM,iBAAiB,GACrB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,aAAa,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,kBAAkB,KAAK,CAAC,QAAQ,GAAG,aAAa,oBAAoB,iBAAiB,EAAE,CACxF,CACF,CAAC;IAEF,IAAI,OAAO,EAAE,qBAAqB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,IAAI,SAAS,CAAC;QAC/D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+BAA+B,SAAS,KAAK,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAC7E,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurcode-ai/cli",
3
- "version": "0.9.34",
3
+ "version": "0.9.35",
4
4
  "description": "Neurcode CLI - AI code governance and diff analysis",
5
5
  "bin": {
6
6
  "neurcode": "dist/index.js"
@@ -45,9 +45,10 @@
45
45
  "ts-morph": "^24.0.0",
46
46
  "uuid": "^9.0.1",
47
47
  "zod": "^4.3.5",
48
- "@neurcode-ai/brain": "0.1.0",
49
48
  "@neurcode-ai/analysis": "0.1.0",
49
+ "@neurcode-ai/brain": "0.1.0",
50
50
  "@neurcode-ai/core": "0.1.0",
51
+ "@neurcode-ai/governance-runtime": "0.1.0",
51
52
  "@neurcode-ai/policy": "0.1.0"
52
53
  },
53
54
  "publishConfig": {