@neurcode-ai/cli 0.9.33 → 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 (41) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +2 -1
  3. package/dist/api-client.d.ts +14 -1
  4. package/dist/api-client.d.ts.map +1 -1
  5. package/dist/api-client.js +4 -1
  6. package/dist/api-client.js.map +1 -1
  7. package/dist/commands/ask.d.ts.map +1 -1
  8. package/dist/commands/ask.js +15 -2
  9. package/dist/commands/ask.js.map +1 -1
  10. package/dist/commands/plan.d.ts.map +1 -1
  11. package/dist/commands/plan.js +81 -2
  12. package/dist/commands/plan.js.map +1 -1
  13. package/dist/commands/policy.d.ts.map +1 -1
  14. package/dist/commands/policy.js +95 -0
  15. package/dist/commands/policy.js.map +1 -1
  16. package/dist/commands/verify.d.ts +6 -0
  17. package/dist/commands/verify.d.ts.map +1 -1
  18. package/dist/commands/verify.js +365 -56
  19. package/dist/commands/verify.js.map +1 -1
  20. package/dist/index.js +68 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/utils/change-contract.d.ts +55 -0
  23. package/dist/utils/change-contract.d.ts.map +1 -0
  24. package/dist/utils/change-contract.js +158 -0
  25. package/dist/utils/change-contract.js.map +1 -0
  26. package/dist/utils/policy-audit.d.ts +2 -2
  27. package/dist/utils/policy-audit.d.ts.map +1 -1
  28. package/dist/utils/policy-audit.js.map +1 -1
  29. package/dist/utils/policy-compiler.d.ts +68 -0
  30. package/dist/utils/policy-compiler.d.ts.map +1 -0
  31. package/dist/utils/policy-compiler.js +170 -0
  32. package/dist/utils/policy-compiler.js.map +1 -0
  33. package/dist/utils/project-root.d.ts +16 -0
  34. package/dist/utils/project-root.d.ts.map +1 -1
  35. package/dist/utils/project-root.js +123 -9
  36. package/dist/utils/project-root.js.map +1 -1
  37. package/dist/utils/scope-telemetry.d.ts +21 -0
  38. package/dist/utils/scope-telemetry.d.ts.map +1 -0
  39. package/dist/utils/scope-telemetry.js +35 -0
  40. package/dist/utils/scope-telemetry.js.map +1 -0
  41. package/package.json +13 -13
@@ -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.33",
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"
@@ -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",
@@ -37,11 +31,7 @@
37
31
  "node": ">=18.0.0"
38
32
  },
39
33
  "dependencies": {
40
- "@neurcode-ai/analysis": "workspace:*",
41
- "@neurcode-ai/brain": "workspace:*",
42
- "@neurcode-ai/core": "workspace:*",
43
34
  "@neurcode-ai/diff-parser": "^0.1.0",
44
- "@neurcode-ai/policy": "workspace:*",
45
35
  "@neurcode-ai/policy-engine": "^0.1.0",
46
36
  "better-sqlite3": "^12.5.0",
47
37
  "chalk": "^4.1.2",
@@ -54,7 +44,12 @@
54
44
  "open": "^10.1.0",
55
45
  "ts-morph": "^24.0.0",
56
46
  "uuid": "^9.0.1",
57
- "zod": "^4.3.5"
47
+ "zod": "^4.3.5",
48
+ "@neurcode-ai/analysis": "0.1.0",
49
+ "@neurcode-ai/brain": "0.1.0",
50
+ "@neurcode-ai/core": "0.1.0",
51
+ "@neurcode-ai/governance-runtime": "0.1.0",
52
+ "@neurcode-ai/policy": "0.1.0"
58
53
  },
59
54
  "publishConfig": {
60
55
  "access": "public"
@@ -65,5 +60,10 @@
65
60
  "@types/node": "^20.10.0",
66
61
  "@types/uuid": "^9.0.8",
67
62
  "typescript": "^5.3.0"
63
+ },
64
+ "scripts": {
65
+ "build": "rm -rf dist && tsc && chmod +x dist/index.js",
66
+ "dev": "tsc --watch",
67
+ "start": "node dist/index.js"
68
68
  }
69
- }
69
+ }