@neurcode-ai/cli 0.14.0 → 0.15.0
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/README.md +60 -8
- package/dist/api-client.d.ts +284 -0
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +111 -0
- package/dist/api-client.js.map +1 -1
- package/dist/commands/activate.d.ts +82 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +551 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/admission.d.ts +67 -0
- package/dist/commands/admission.d.ts.map +1 -0
- package/dist/commands/admission.js +350 -0
- package/dist/commands/admission.js.map +1 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +2045 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/demo.d.ts +3 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +102 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +58 -44
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +44 -22
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/profile.d.ts +14 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +118 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/quickstart.d.ts +2 -2
- package/dist/commands/quickstart.d.ts.map +1 -1
- package/dist/commands/quickstart.js +31 -30
- package/dist/commands/quickstart.js.map +1 -1
- package/dist/commands/remediate-export.d.ts +6 -1
- package/dist/commands/remediate-export.d.ts.map +1 -1
- package/dist/commands/remediate-export.js +359 -7
- package/dist/commands/remediate-export.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +84 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +98 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/runtime-adapter.d.ts +8 -0
- package/dist/commands/runtime-adapter.d.ts.map +1 -0
- package/dist/commands/runtime-adapter.js +375 -0
- package/dist/commands/runtime-adapter.js.map +1 -0
- package/dist/commands/runtime-doctor.d.ts +6 -0
- package/dist/commands/runtime-doctor.d.ts.map +1 -0
- package/dist/commands/runtime-doctor.js +478 -0
- package/dist/commands/runtime-doctor.js.map +1 -0
- package/dist/commands/runtime-report.d.ts +13 -0
- package/dist/commands/runtime-report.d.ts.map +1 -0
- package/dist/commands/runtime-report.js +81 -0
- package/dist/commands/runtime-report.js.map +1 -0
- package/dist/commands/runtime-sync.d.ts +17 -0
- package/dist/commands/runtime-sync.d.ts.map +1 -0
- package/dist/commands/runtime-sync.js +656 -0
- package/dist/commands/runtime-sync.js.map +1 -0
- package/dist/commands/runtime.d.ts +16 -0
- package/dist/commands/runtime.d.ts.map +1 -0
- package/dist/commands/runtime.js +380 -0
- package/dist/commands/runtime.js.map +1 -0
- package/dist/commands/session-hook.d.ts +35 -0
- package/dist/commands/session-hook.d.ts.map +1 -0
- package/dist/commands/session-hook.js +1297 -0
- package/dist/commands/session-hook.js.map +1 -0
- package/dist/commands/session.d.ts +91 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +1226 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/whoami.d.ts +7 -4
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +59 -34
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -5
- package/dist/config.js.map +1 -1
- package/dist/daemon/routes.d.ts.map +1 -1
- package/dist/daemon/routes.js +8 -0
- package/dist/daemon/routes.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +88 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/governance/impact-analysis.d.ts +27 -0
- package/dist/governance/impact-analysis.d.ts.map +1 -0
- package/dist/governance/impact-analysis.js +274 -0
- package/dist/governance/impact-analysis.js.map +1 -0
- package/dist/index.js +472 -29
- package/dist/index.js.map +1 -1
- package/dist/intent-engine/matcher.d.ts.map +1 -1
- package/dist/intent-engine/matcher.js +3 -12
- package/dist/intent-engine/matcher.js.map +1 -1
- package/dist/utils/admission-artifact.d.ts +59 -0
- package/dist/utils/admission-artifact.d.ts.map +1 -0
- package/dist/utils/admission-artifact.js +410 -0
- package/dist/utils/admission-artifact.js.map +1 -0
- package/dist/utils/agent-adapter-setup.d.ts +80 -0
- package/dist/utils/agent-adapter-setup.d.ts.map +1 -0
- package/dist/utils/agent-adapter-setup.js +577 -0
- package/dist/utils/agent-adapter-setup.js.map +1 -0
- package/dist/utils/agent-guard-supervisor.d.ts +75 -0
- package/dist/utils/agent-guard-supervisor.d.ts.map +1 -0
- package/dist/utils/agent-guard-supervisor.js +388 -0
- package/dist/utils/agent-guard-supervisor.js.map +1 -0
- package/dist/utils/agent-guard.d.ts +92 -0
- package/dist/utils/agent-guard.d.ts.map +1 -0
- package/dist/utils/agent-guard.js +326 -0
- package/dist/utils/agent-guard.js.map +1 -0
- package/dist/utils/agent-session-launcher.d.ts +89 -0
- package/dist/utils/agent-session-launcher.d.ts.map +1 -0
- package/dist/utils/agent-session-launcher.js +308 -0
- package/dist/utils/agent-session-launcher.js.map +1 -0
- package/dist/utils/bash-command-analysis.d.ts +19 -0
- package/dist/utils/bash-command-analysis.d.ts.map +1 -0
- package/dist/utils/bash-command-analysis.js +295 -0
- package/dist/utils/bash-command-analysis.js.map +1 -0
- package/dist/utils/consequence-nudges.d.ts +30 -0
- package/dist/utils/consequence-nudges.d.ts.map +1 -0
- package/dist/utils/consequence-nudges.js +313 -0
- package/dist/utils/consequence-nudges.js.map +1 -0
- package/dist/utils/drift-intelligence.d.ts.map +1 -1
- package/dist/utils/drift-intelligence.js +29 -7
- package/dist/utils/drift-intelligence.js.map +1 -1
- package/dist/utils/git-coverage.d.ts +57 -0
- package/dist/utils/git-coverage.d.ts.map +1 -0
- package/dist/utils/git-coverage.js +302 -0
- package/dist/utils/git-coverage.js.map +1 -0
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +2 -1
- package/dist/utils/gitignore.js.map +1 -1
- package/dist/utils/governed-intent.d.ts +10 -0
- package/dist/utils/governed-intent.d.ts.map +1 -0
- package/dist/utils/governed-intent.js +108 -0
- package/dist/utils/governed-intent.js.map +1 -0
- package/dist/utils/hook-heartbeat.d.ts +55 -0
- package/dist/utils/hook-heartbeat.d.ts.map +1 -0
- package/dist/utils/hook-heartbeat.js +116 -0
- package/dist/utils/hook-heartbeat.js.map +1 -0
- package/dist/utils/intent-continuity.d.ts +21 -0
- package/dist/utils/intent-continuity.d.ts.map +1 -0
- package/dist/utils/intent-continuity.js +192 -0
- package/dist/utils/intent-continuity.js.map +1 -0
- package/dist/utils/messages.d.ts +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +24 -21
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/runtime-companion.d.ts +137 -0
- package/dist/utils/runtime-companion.d.ts.map +1 -0
- package/dist/utils/runtime-companion.js +231 -0
- package/dist/utils/runtime-companion.js.map +1 -0
- package/dist/utils/runtime-connection.d.ts +46 -0
- package/dist/utils/runtime-connection.d.ts.map +1 -0
- package/dist/utils/runtime-connection.js +148 -0
- package/dist/utils/runtime-connection.js.map +1 -0
- package/dist/utils/runtime-evidence.d.ts +68 -0
- package/dist/utils/runtime-evidence.d.ts.map +1 -0
- package/dist/utils/runtime-evidence.js +248 -0
- package/dist/utils/runtime-evidence.js.map +1 -0
- package/dist/utils/runtime-live.d.ts +33 -0
- package/dist/utils/runtime-live.d.ts.map +1 -0
- package/dist/utils/runtime-live.js +361 -0
- package/dist/utils/runtime-live.js.map +1 -0
- package/dist/utils/runtime-outbox.d.ts +76 -0
- package/dist/utils/runtime-outbox.d.ts.map +1 -0
- package/dist/utils/runtime-outbox.js +410 -0
- package/dist/utils/runtime-outbox.js.map +1 -0
- package/dist/utils/runtime-receipt.d.ts +50 -0
- package/dist/utils/runtime-receipt.d.ts.map +1 -0
- package/dist/utils/runtime-receipt.js +223 -0
- package/dist/utils/runtime-receipt.js.map +1 -0
- package/dist/utils/state.d.ts +21 -0
- package/dist/utils/state.d.ts.map +1 -1
- package/dist/utils/state.js +30 -0
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/structural-understanding.d.ts +334 -0
- package/dist/utils/structural-understanding.d.ts.map +1 -0
- package/dist/utils/structural-understanding.js +2316 -0
- package/dist/utils/structural-understanding.js.map +1 -0
- package/dist/utils/v0-governance.d.ts +197 -0
- package/dist/utils/v0-governance.d.ts.map +1 -0
- package/dist/utils/v0-governance.js +904 -0
- package/dist/utils/v0-governance.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.computeAccurateImpact = computeAccurateImpact;
|
|
37
|
+
/**
|
|
38
|
+
* Accurate change-impact analysis via the TypeScript compiler's real symbol
|
|
39
|
+
* resolution — the deterministic replacement for coarse module-adjacency
|
|
40
|
+
* "blast radius" inflation.
|
|
41
|
+
*
|
|
42
|
+
* Why this exists: the legacy impact computation in drift-intelligence.ts marks
|
|
43
|
+
* every module adjacent (upstream OR downstream) to a changed module as
|
|
44
|
+
* "impacted." That over-reports massively — a small change in one package looks
|
|
45
|
+
* like it touches the whole repo. This module instead resolves the *actual*
|
|
46
|
+
* references to the symbols defined in the changed files, so impact reflects
|
|
47
|
+
* real call/import edges, not topological adjacency.
|
|
48
|
+
*
|
|
49
|
+
* Honesty contract:
|
|
50
|
+
* - It resolves STATIC references only. Dynamic dispatch, DI, reflection, and
|
|
51
|
+
* runtime wiring are NOT visible to static analysis. Callers must treat the
|
|
52
|
+
* result as "symbol-resolved impact," not a guarantee of total blast radius.
|
|
53
|
+
* - It is scoped to the package roots of the changed files for performance, so
|
|
54
|
+
* cross-package references may be under-counted. This is a deliberate
|
|
55
|
+
* precision/recall trade for a command that must stay fast.
|
|
56
|
+
* - It NEVER throws to the caller's hot path: any failure returns
|
|
57
|
+
* { analyzed: false, reason } so the caller can fall back to legacy behavior.
|
|
58
|
+
*
|
|
59
|
+
* Determinism: same files + same source → same result. No network, no LLM.
|
|
60
|
+
*/
|
|
61
|
+
const ts = __importStar(require("typescript"));
|
|
62
|
+
const fs_1 = require("fs");
|
|
63
|
+
const path_1 = require("path");
|
|
64
|
+
const TS_LIKE = /\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/i;
|
|
65
|
+
const SKIP_DIR = /^(node_modules|\.git|dist|build|out|coverage|\.next|vendor)$/i;
|
|
66
|
+
function toRepoRel(projectRoot, abs) {
|
|
67
|
+
return (0, path_1.relative)(projectRoot, abs).split(path_1.sep).join('/');
|
|
68
|
+
}
|
|
69
|
+
/** Bound the program to the changed files' package/src roots, not the whole repo. */
|
|
70
|
+
function scopeRoots(projectRoot, changedRepoRelFiles) {
|
|
71
|
+
const roots = new Set();
|
|
72
|
+
for (const file of changedRepoRelFiles) {
|
|
73
|
+
const parts = file.split('/');
|
|
74
|
+
const pkgIdx = parts.indexOf('packages');
|
|
75
|
+
const appsIdx = parts.indexOf('apps');
|
|
76
|
+
const srcIdx = parts.indexOf('src');
|
|
77
|
+
let depth;
|
|
78
|
+
if (pkgIdx >= 0 && parts[pkgIdx + 1] !== undefined)
|
|
79
|
+
depth = pkgIdx + 2; // packages/<name>
|
|
80
|
+
else if (appsIdx >= 0 && parts[appsIdx + 1] !== undefined)
|
|
81
|
+
depth = appsIdx + 2; // apps/<name>
|
|
82
|
+
else if (srcIdx >= 0)
|
|
83
|
+
depth = srcIdx + 1; // up to and including src
|
|
84
|
+
else
|
|
85
|
+
depth = Math.max(1, parts.length - 1); // the file's directory
|
|
86
|
+
const rootRel = parts.slice(0, depth).join('/');
|
|
87
|
+
roots.add((0, path_1.join)(projectRoot, rootRel));
|
|
88
|
+
}
|
|
89
|
+
return [...roots].filter((r) => (0, fs_1.existsSync)(r));
|
|
90
|
+
}
|
|
91
|
+
function gatherTsFiles(dir, out, cap) {
|
|
92
|
+
if (out.length > cap)
|
|
93
|
+
return;
|
|
94
|
+
let names;
|
|
95
|
+
try {
|
|
96
|
+
names = (0, fs_1.readdirSync)(dir);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
for (const name of names) {
|
|
102
|
+
if (out.length > cap)
|
|
103
|
+
return;
|
|
104
|
+
const p = (0, path_1.join)(dir, name);
|
|
105
|
+
let isDir = false;
|
|
106
|
+
try {
|
|
107
|
+
isDir = (0, fs_1.statSync)(p).isDirectory();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (isDir) {
|
|
113
|
+
if (!SKIP_DIR.test(name))
|
|
114
|
+
gatherTsFiles(p, out, cap);
|
|
115
|
+
}
|
|
116
|
+
else if (TS_LIKE.test(name) && !/\.d\.ts$/i.test(name)) {
|
|
117
|
+
out.push(p);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function resolveAlias(checker, sym) {
|
|
122
|
+
if (sym && sym.flags & ts.SymbolFlags.Alias) {
|
|
123
|
+
try {
|
|
124
|
+
return checker.getAliasedSymbol(sym);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return sym;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return sym;
|
|
131
|
+
}
|
|
132
|
+
/** Top-level declared/exported symbols in a changed source file. */
|
|
133
|
+
function declaredSymbols(sf, checker) {
|
|
134
|
+
const out = [];
|
|
135
|
+
const push = (name) => {
|
|
136
|
+
if (name && ts.isIdentifier(name)) {
|
|
137
|
+
const s = checker.getSymbolAtLocation(name);
|
|
138
|
+
if (s)
|
|
139
|
+
out.push(s);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const visit = (n) => {
|
|
143
|
+
if (ts.isFunctionDeclaration(n))
|
|
144
|
+
push(n.name);
|
|
145
|
+
else if (ts.isClassDeclaration(n))
|
|
146
|
+
push(n.name);
|
|
147
|
+
else if (ts.isInterfaceDeclaration(n))
|
|
148
|
+
push(n.name);
|
|
149
|
+
else if (ts.isTypeAliasDeclaration(n))
|
|
150
|
+
push(n.name);
|
|
151
|
+
else if (ts.isEnumDeclaration(n))
|
|
152
|
+
push(n.name);
|
|
153
|
+
else if (ts.isVariableStatement(n)) {
|
|
154
|
+
for (const d of n.declarationList.declarations)
|
|
155
|
+
push(ts.isIdentifier(d.name) ? d.name : undefined);
|
|
156
|
+
}
|
|
157
|
+
else if (ts.isMethodDeclaration(n) && ts.isIdentifier(n.name))
|
|
158
|
+
push(n.name);
|
|
159
|
+
ts.forEachChild(n, visit);
|
|
160
|
+
};
|
|
161
|
+
ts.forEachChild(sf, visit);
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Compute accurate impacted modules for a change set.
|
|
166
|
+
* @param deriveModulePath maps a repo-relative file path to its module key
|
|
167
|
+
* (caller supplies its own so the module set aligns with changedModules).
|
|
168
|
+
*/
|
|
169
|
+
function computeAccurateImpact(projectRoot, changedRepoRelFiles, deriveModulePath, options = {}) {
|
|
170
|
+
const maxFiles = options.maxProgramFiles ?? 2500;
|
|
171
|
+
const timeBudgetMs = options.timeBudgetMs ?? 6000;
|
|
172
|
+
const none = (reason) => ({
|
|
173
|
+
analyzed: false,
|
|
174
|
+
impactedModules: [],
|
|
175
|
+
referenceCount: 0,
|
|
176
|
+
filesAnalyzed: 0,
|
|
177
|
+
confidence: 'none',
|
|
178
|
+
reason,
|
|
179
|
+
});
|
|
180
|
+
try {
|
|
181
|
+
if (!projectRoot || !(0, fs_1.existsSync)(projectRoot))
|
|
182
|
+
return none('project root not found');
|
|
183
|
+
const tsChanged = changedRepoRelFiles.filter((f) => TS_LIKE.test(f) && !/\.d\.ts$/i.test(f));
|
|
184
|
+
if (tsChanged.length === 0)
|
|
185
|
+
return none('no TypeScript/JavaScript files in change set');
|
|
186
|
+
const started = Date.now();
|
|
187
|
+
const roots = scopeRoots(projectRoot, tsChanged);
|
|
188
|
+
if (roots.length === 0)
|
|
189
|
+
return none('no resolvable scope roots');
|
|
190
|
+
const fileSet = new Set();
|
|
191
|
+
for (const root of roots) {
|
|
192
|
+
const acc = [];
|
|
193
|
+
gatherTsFiles(root, acc, maxFiles + 1);
|
|
194
|
+
for (const f of acc)
|
|
195
|
+
fileSet.add(f);
|
|
196
|
+
if (fileSet.size > maxFiles)
|
|
197
|
+
return none(`program too large (>${maxFiles} files) — scoped analysis skipped`);
|
|
198
|
+
}
|
|
199
|
+
// Ensure changed files are present even if outside the scanned roots.
|
|
200
|
+
for (const rel of tsChanged) {
|
|
201
|
+
const abs = (0, path_1.join)(projectRoot, rel);
|
|
202
|
+
if ((0, fs_1.existsSync)(abs) && (0, fs_1.statSync)(abs).isFile())
|
|
203
|
+
fileSet.add(abs);
|
|
204
|
+
}
|
|
205
|
+
const files = [...fileSet];
|
|
206
|
+
if (files.length === 0)
|
|
207
|
+
return none('no source files gathered');
|
|
208
|
+
const program = ts.createProgram(files, {
|
|
209
|
+
target: ts.ScriptTarget.ES2020,
|
|
210
|
+
module: ts.ModuleKind.CommonJS,
|
|
211
|
+
moduleResolution: ts.ModuleResolutionKind.Node10 ?? ts.ModuleResolutionKind.NodeJs ?? 2,
|
|
212
|
+
allowJs: true,
|
|
213
|
+
noEmit: true,
|
|
214
|
+
skipLibCheck: true,
|
|
215
|
+
noResolve: false,
|
|
216
|
+
});
|
|
217
|
+
const checker = program.getTypeChecker();
|
|
218
|
+
if (Date.now() - started > timeBudgetMs)
|
|
219
|
+
return none('time budget exceeded during program build');
|
|
220
|
+
// Collect target symbols from the changed files.
|
|
221
|
+
const targets = new Set();
|
|
222
|
+
const declNodes = new Set();
|
|
223
|
+
for (const rel of tsChanged) {
|
|
224
|
+
const abs = (0, path_1.join)(projectRoot, rel);
|
|
225
|
+
const sf = program.getSourceFile(abs);
|
|
226
|
+
if (!sf)
|
|
227
|
+
continue;
|
|
228
|
+
for (const s of declaredSymbols(sf, checker)) {
|
|
229
|
+
targets.add(s);
|
|
230
|
+
for (const d of s.declarations ?? [])
|
|
231
|
+
declNodes.add(d);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (targets.size === 0)
|
|
235
|
+
return none('no resolvable top-level symbols in changed files');
|
|
236
|
+
const changedAbs = new Set(tsChanged.map((r) => (0, path_1.join)(projectRoot, r)));
|
|
237
|
+
const impactedModules = new Set();
|
|
238
|
+
let referenceCount = 0;
|
|
239
|
+
for (const sf of program.getSourceFiles()) {
|
|
240
|
+
if (sf.isDeclarationFile)
|
|
241
|
+
continue;
|
|
242
|
+
if (sf.fileName.includes('node_modules'))
|
|
243
|
+
continue;
|
|
244
|
+
if (Date.now() - started > timeBudgetMs)
|
|
245
|
+
return none('time budget exceeded during reference scan');
|
|
246
|
+
const inChangedFile = changedAbs.has(sf.fileName);
|
|
247
|
+
const visit = (n) => {
|
|
248
|
+
if (ts.isIdentifier(n) && !declNodes.has(n.parent)) {
|
|
249
|
+
const sym = checker.getSymbolAtLocation(n);
|
|
250
|
+
if (sym && (targets.has(sym) || targets.has(resolveAlias(checker, sym)))) {
|
|
251
|
+
// A reference inside the changed file itself isn't "impact" elsewhere.
|
|
252
|
+
if (!inChangedFile) {
|
|
253
|
+
referenceCount += 1;
|
|
254
|
+
impactedModules.add(deriveModulePath(toRepoRel(projectRoot, sf.fileName)));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
ts.forEachChild(n, visit);
|
|
259
|
+
};
|
|
260
|
+
ts.forEachChild(sf, visit);
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
analyzed: true,
|
|
264
|
+
impactedModules: [...impactedModules].sort((a, b) => a.localeCompare(b)),
|
|
265
|
+
referenceCount,
|
|
266
|
+
filesAnalyzed: files.length,
|
|
267
|
+
confidence: 'medium',
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
return none(`impact analysis error: ${err instanceof Error ? err.message : String(err)}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=impact-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact-analysis.js","sourceRoot":"","sources":["../../src/governance/impact-analysis.ts"],"names":[],"mappings":"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"}
|