lsp-intelligence 0.2.1 → 0.3.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.
Files changed (134) hide show
  1. package/dist/adapters/express/index.d.ts +9 -0
  2. package/dist/adapters/express/index.js +46 -0
  3. package/dist/adapters/express/index.js.map +1 -0
  4. package/dist/adapters/next/index.d.ts +10 -0
  5. package/dist/adapters/next/index.js +67 -0
  6. package/dist/adapters/next/index.js.map +1 -0
  7. package/dist/adapters/react/index.d.ts +11 -0
  8. package/dist/adapters/react/index.js +133 -0
  9. package/dist/adapters/react/index.js.map +1 -0
  10. package/dist/adapters/registry.d.ts +22 -0
  11. package/dist/adapters/registry.js +101 -0
  12. package/dist/adapters/registry.js.map +1 -0
  13. package/dist/adapters/types.d.ts +97 -0
  14. package/dist/adapters/types.js +2 -0
  15. package/dist/adapters/types.js.map +1 -0
  16. package/dist/analysis/ts/applyVirtualEdit.d.ts +27 -0
  17. package/dist/analysis/ts/applyVirtualEdit.js +235 -0
  18. package/dist/analysis/ts/applyVirtualEdit.js.map +1 -0
  19. package/dist/analysis/ts/changeRecipes.d.ts +52 -0
  20. package/dist/analysis/ts/changeRecipes.js +14 -0
  21. package/dist/analysis/ts/changeRecipes.js.map +1 -0
  22. package/dist/analysis/ts/compatibility.d.ts +54 -0
  23. package/dist/analysis/ts/compatibility.js +113 -0
  24. package/dist/analysis/ts/compatibility.js.map +1 -0
  25. package/dist/analysis/ts/diffDeclarationShape.d.ts +26 -0
  26. package/dist/analysis/ts/diffDeclarationShape.js +114 -0
  27. package/dist/analysis/ts/diffDeclarationShape.js.map +1 -0
  28. package/dist/analysis/ts/exhaustiveness.d.ts +49 -0
  29. package/dist/analysis/ts/exhaustiveness.js +158 -0
  30. package/dist/analysis/ts/exhaustiveness.js.map +1 -0
  31. package/dist/analysis/ts/extractDeclarationShape.d.ts +30 -0
  32. package/dist/analysis/ts/extractDeclarationShape.js +127 -0
  33. package/dist/analysis/ts/extractDeclarationShape.js.map +1 -0
  34. package/dist/analysis/ts/extractExports.d.ts +19 -0
  35. package/dist/analysis/ts/extractExports.js +178 -0
  36. package/dist/analysis/ts/extractExports.js.map +1 -0
  37. package/dist/analysis/ts/extractRoutes.d.ts +12 -0
  38. package/dist/analysis/ts/extractRoutes.js +165 -0
  39. package/dist/analysis/ts/extractRoutes.js.map +1 -0
  40. package/dist/analysis/ts/parseSourceFile.d.ts +5 -1
  41. package/dist/analysis/ts/parseSourceFile.js +6 -2
  42. package/dist/analysis/ts/parseSourceFile.js.map +1 -1
  43. package/dist/analysis/ts/program/CheckerQueries.d.ts +56 -0
  44. package/dist/analysis/ts/program/CheckerQueries.js +187 -0
  45. package/dist/analysis/ts/program/CheckerQueries.js.map +1 -0
  46. package/dist/analysis/ts/program/ProgramManager.d.ts +27 -0
  47. package/dist/analysis/ts/program/ProgramManager.js +147 -0
  48. package/dist/analysis/ts/program/ProgramManager.js.map +1 -0
  49. package/dist/analysis/ts/program/TypeFacts.d.ts +58 -0
  50. package/dist/analysis/ts/program/TypeFacts.js +68 -0
  51. package/dist/analysis/ts/program/TypeFacts.js.map +1 -0
  52. package/dist/analysis/ts/typeState.d.ts +46 -0
  53. package/dist/analysis/ts/typeState.js +108 -0
  54. package/dist/analysis/ts/typeState.js.map +1 -0
  55. package/dist/ast/diffDeclarationShapes.js +25 -11
  56. package/dist/ast/diffDeclarationShapes.js.map +1 -1
  57. package/dist/ast/extractExportDeclarations.js +8 -3
  58. package/dist/ast/extractExportDeclarations.js.map +1 -1
  59. package/dist/cache/CacheSchema.d.ts +30 -0
  60. package/dist/cache/CacheSchema.js +9 -0
  61. package/dist/cache/CacheSchema.js.map +1 -0
  62. package/dist/cache/CacheStore.d.ts +22 -0
  63. package/dist/cache/CacheStore.js +111 -0
  64. package/dist/cache/CacheStore.js.map +1 -0
  65. package/dist/cache/SemanticCache.d.ts +38 -0
  66. package/dist/cache/SemanticCache.js +87 -0
  67. package/dist/cache/SemanticCache.js.map +1 -0
  68. package/dist/cache/SnapshotFingerprint.d.ts +17 -0
  69. package/dist/cache/SnapshotFingerprint.js +14 -0
  70. package/dist/cache/SnapshotFingerprint.js.map +1 -0
  71. package/dist/engine/DocumentManager.d.ts +16 -0
  72. package/dist/engine/DocumentManager.js +32 -0
  73. package/dist/engine/DocumentManager.js.map +1 -1
  74. package/dist/index.js +6 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/search/adapters/http.d.ts +9 -3
  77. package/dist/search/adapters/http.js +7 -52
  78. package/dist/search/adapters/http.js.map +1 -1
  79. package/dist/search/adapters/react.d.ts +8 -8
  80. package/dist/search/adapters/react.js +3 -88
  81. package/dist/search/adapters/react.js.map +1 -1
  82. package/dist/search/adapters/registry.d.ts +7 -4
  83. package/dist/search/adapters/registry.js +7 -17
  84. package/dist/search/adapters/registry.js.map +1 -1
  85. package/dist/search/expand/graphExpansion.js +47 -14
  86. package/dist/search/expand/graphExpansion.js.map +1 -1
  87. package/dist/search/index/declarationIndex.d.ts +3 -1
  88. package/dist/search/index/declarationIndex.js +4 -2
  89. package/dist/search/index/declarationIndex.js.map +1 -1
  90. package/dist/search/index/routeIndex.d.ts +6 -0
  91. package/dist/search/index/routeIndex.js +19 -0
  92. package/dist/search/index/routeIndex.js.map +1 -0
  93. package/dist/search/index/usageIndex.d.ts +3 -1
  94. package/dist/search/index/usageIndex.js +4 -2
  95. package/dist/search/index/usageIndex.js.map +1 -1
  96. package/dist/search/index/workspaceIndex.d.ts +7 -1
  97. package/dist/search/index/workspaceIndex.js +54 -14
  98. package/dist/search/index/workspaceIndex.js.map +1 -1
  99. package/dist/search/query/compileEffectiveSearchSpec.js +9 -0
  100. package/dist/search/query/compileEffectiveSearchSpec.js.map +1 -1
  101. package/dist/search/query/parseQuery.js +5 -1
  102. package/dist/search/query/parseQuery.js.map +1 -1
  103. package/dist/search/query/planQuery.js +14 -4
  104. package/dist/search/query/planQuery.js.map +1 -1
  105. package/dist/search/ranking/mergeCandidates.d.ts +1 -0
  106. package/dist/search/ranking/mergeCandidates.js +16 -0
  107. package/dist/search/ranking/mergeCandidates.js.map +1 -1
  108. package/dist/search/retrievers/routeRetriever.d.ts +7 -0
  109. package/dist/search/retrievers/routeRetriever.js +64 -0
  110. package/dist/search/retrievers/routeRetriever.js.map +1 -0
  111. package/dist/search/types.d.ts +16 -4
  112. package/dist/session/OverlayStore.d.ts +15 -0
  113. package/dist/session/OverlayStore.js +46 -0
  114. package/dist/session/OverlayStore.js.map +1 -0
  115. package/dist/session/SnapshotResolver.d.ts +31 -0
  116. package/dist/session/SnapshotResolver.js +50 -0
  117. package/dist/session/SnapshotResolver.js.map +1 -0
  118. package/dist/session/WorkspaceSnapshot.d.ts +21 -0
  119. package/dist/session/WorkspaceSnapshot.js +2 -0
  120. package/dist/session/WorkspaceSnapshot.js.map +1 -0
  121. package/dist/tools/composites/apiGuard.d.ts +4 -0
  122. package/dist/tools/composites/apiGuard.js +158 -24
  123. package/dist/tools/composites/apiGuard.js.map +1 -1
  124. package/dist/tools/composites/findCode.js +12 -2
  125. package/dist/tools/composites/findCode.js.map +1 -1
  126. package/dist/tools/composites/rootCauseTrace.js +89 -13
  127. package/dist/tools/composites/rootCauseTrace.js.map +1 -1
  128. package/dist/workflows/simulateChange.d.ts +44 -0
  129. package/dist/workflows/simulateChange.js +194 -0
  130. package/dist/workflows/simulateChange.js.map +1 -0
  131. package/dist/workflows/verifyChangeSet.d.ts +58 -0
  132. package/dist/workflows/verifyChangeSet.js +300 -0
  133. package/dist/workflows/verifyChangeSet.js.map +1 -0
  134. package/package.json +6 -4
@@ -0,0 +1,58 @@
1
+ interface DiagnosticSummary {
2
+ filePath: string;
3
+ errorCount: number;
4
+ errors: Array<{
5
+ line: number;
6
+ message: string;
7
+ code?: string;
8
+ }>;
9
+ }
10
+ interface ApiSummary {
11
+ semver: string;
12
+ breaking: number;
13
+ risky: number;
14
+ safe: number;
15
+ entries: any[];
16
+ }
17
+ interface TestGap {
18
+ symbol: string;
19
+ filePath: string;
20
+ hasTests: boolean;
21
+ }
22
+ interface TypeRisks {
23
+ /** Switches that are no longer exhaustive due to changed enums */
24
+ nonExhaustiveSwitches: Array<{
25
+ filePath: string;
26
+ line: number;
27
+ missingMembers: string[];
28
+ enumName: string;
29
+ }>;
30
+ /** Exports whose type changed in a potentially incompatible way */
31
+ signatureChanges: Array<{
32
+ symbol: string;
33
+ filePath: string;
34
+ changeKind: string;
35
+ }>;
36
+ }
37
+ export interface VerifyResult {
38
+ base: string | undefined;
39
+ changedFiles: string[];
40
+ diagnostics: DiagnosticSummary[];
41
+ totalErrors: number;
42
+ api: ApiSummary | null;
43
+ testGaps: TestGap[];
44
+ /** Phase 3A: type-state risks found in changed files */
45
+ typeRisks: TypeRisks;
46
+ /** Phase 3A: shell commands the developer should run next */
47
+ suggestedCommands: string[];
48
+ /** Phase 3A: ordered list of what to check or fix */
49
+ nextSteps: string[];
50
+ /** Phase 3A: clear verdict */
51
+ verdict: 'safe' | 'needs-attention' | 'has-errors';
52
+ /** Phase 3A: one sentence explaining the verdict */
53
+ verdictReason: string;
54
+ warnings: string[];
55
+ elapsedMs: number;
56
+ }
57
+ export declare const verifyChangeSet: import("../tools/registry.js").ToolDef;
58
+ export {};
@@ -0,0 +1,300 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../tools/registry.js';
3
+ import { getMergeBase } from '../git/getMergeBase.js';
4
+ import { getChangedFiles } from '../git/getChangedFiles.js';
5
+ import { apiGuard } from '../tools/composites/apiGuard.js';
6
+ import { findTestFiles } from '../tools/composites/findTestFiles.js';
7
+ import { pathToUri, relativePath } from '../engine/positions.js';
8
+ import { waitForDiagnostics } from '../engine/waitForDiagnostics.js';
9
+ import { programManager } from '../analysis/ts/program/ProgramManager.js';
10
+ import { CheckerQueries } from '../analysis/ts/program/CheckerQueries.js';
11
+ import { findNonExhaustiveSwitches } from '../analysis/ts/exhaustiveness.js';
12
+ import * as fs from 'fs';
13
+ import { parseSourceContent } from '../analysis/ts/parseSourceFile.js';
14
+ import { extractExports } from '../analysis/ts/extractExports.js';
15
+ import { getBaseFileContent } from '../git/getBaseFileContent.js';
16
+ // ---------------------------------------------------------------------------
17
+ // Tool
18
+ // ---------------------------------------------------------------------------
19
+ export const verifyChangeSet = defineTool({
20
+ name: 'verify_changes',
21
+ description: 'Full pre-merge verification: diagnostics on changed files, API contract check, type-state risks (exhaustiveness, compatibility), test coverage gaps. ' +
22
+ 'Returns a structured verdict with specific next steps and suggested commands.',
23
+ schema: z.object({
24
+ base: z.string().optional().describe('Git base branch (auto-detected if omitted)'),
25
+ paths: z.array(z.string()).optional().describe('Limit to specific paths'),
26
+ }),
27
+ async handler(params, engine) {
28
+ const startTime = Date.now();
29
+ const warnings = [];
30
+ // Step 1: Determine changed files
31
+ const base = engine.gitAvailable ? getMergeBase(engine.workspaceRoot, params.base) : undefined;
32
+ if (!base) {
33
+ return earlyReturn(startTime, { verdict: 'needs-attention', verdictReason: 'Git not available — run with base branch or from a git repository', warnings: ['Could not determine git base'] });
34
+ }
35
+ let changedFiles = getChangedFiles(engine.workspaceRoot, base);
36
+ if (params.paths?.length) {
37
+ changedFiles = changedFiles.filter((f) => params.paths.some((p) => f.includes(p)));
38
+ }
39
+ if (changedFiles.length === 0) {
40
+ return earlyReturn(startTime, { verdict: 'safe', verdictReason: 'No changed files — nothing to verify', warnings: ['No changed files found'] });
41
+ }
42
+ // Step 2: Diagnostics on changed files (using cached diagnostics from LSP push)
43
+ const diagnostics = [];
44
+ let totalErrors = 0;
45
+ for (const filePath of changedFiles) {
46
+ try {
47
+ const uri = pathToUri(filePath);
48
+ await engine.prepareFile(filePath);
49
+ await waitForDiagnostics(engine.docManager, uri, 1500);
50
+ const fileDiags = engine.docManager.getCachedDiagnostics(uri);
51
+ const errors = fileDiags
52
+ .filter((d) => d.severity === 1)
53
+ .map((d) => ({
54
+ line: (d.range?.start?.line ?? 0) + 1,
55
+ message: d.message ?? 'Unknown error',
56
+ code: d.code != null ? `TS${d.code}` : undefined,
57
+ }));
58
+ if (errors.length > 0) {
59
+ diagnostics.push({ filePath: relativePath(filePath, engine.workspaceRoot), errorCount: errors.length, errors });
60
+ totalErrors += errors.length;
61
+ }
62
+ }
63
+ catch {
64
+ // Skip files that can't be diagnosed
65
+ }
66
+ }
67
+ // Step 3: API contract guard
68
+ let api = null;
69
+ const hasExportFiles = changedFiles.some((f) => /\.(ts|tsx|js|jsx)$/.test(f));
70
+ if (hasExportFiles) {
71
+ try {
72
+ const guardResult = await apiGuard.handler({ scope: 'changed', base: params.base }, engine);
73
+ api = {
74
+ semver: guardResult.summary?.recommendedSemver ?? 'patch',
75
+ breaking: guardResult.summary?.breaking ?? 0,
76
+ risky: guardResult.summary?.risky ?? 0,
77
+ safe: guardResult.summary?.safe ?? 0,
78
+ entries: guardResult.entries ?? [],
79
+ };
80
+ }
81
+ catch (err) {
82
+ warnings.push(`api_guard failed: ${err?.message ?? 'unknown'}`);
83
+ }
84
+ }
85
+ // Step 4: Phase 3A — Type-state risks via Phase 2D (exhaustiveness + compatibility)
86
+ const typeRisks = { nonExhaustiveSwitches: [], signatureChanges: [] };
87
+ try {
88
+ const tsProgram = programManager.getOrBuild(engine.workspaceRoot);
89
+ const queries = new CheckerQueries(tsProgram);
90
+ for (const filePath of changedFiles) {
91
+ try {
92
+ const baseContent = getBaseFileContent(filePath, base, engine.workspaceRoot);
93
+ if (!baseContent)
94
+ continue;
95
+ const currentContent = fs.readFileSync(filePath, 'utf-8');
96
+ const baseSf = parseSourceContent(baseContent, filePath);
97
+ const currentSf = parseSourceContent(currentContent, filePath);
98
+ const baseExports = extractExports(baseSf);
99
+ const currentExports = extractExports(currentSf);
100
+ // Find changed enums and check exhaustiveness impact
101
+ const baseEnums = new Map(baseExports.filter(e => e.kind === 'enum').map(e => [e.name, e]));
102
+ const currentEnums = new Map(currentExports.filter(e => e.kind === 'enum').map(e => [e.name, e]));
103
+ for (const [enumName] of currentEnums) {
104
+ if (baseEnums.has(enumName)) {
105
+ // Enum existed before — check if members changed
106
+ const baseMembers = queries.getEnumMembers(filePath, enumName) ?? [];
107
+ // Members in current version (use AST directly)
108
+ const currentSfEnum = currentSf.statements.find((s) => s.kind !== undefined &&
109
+ s.name?.text === enumName &&
110
+ s.members !== undefined);
111
+ if (currentSfEnum) {
112
+ // Use addedMemberImpact for each new member to find affected switches
113
+ const nonExhaustive = findNonExhaustiveSwitches(tsProgram, filePath, enumName);
114
+ for (const sw of nonExhaustive) {
115
+ typeRisks.nonExhaustiveSwitches.push({
116
+ filePath: relativePath(sw.filePath, engine.workspaceRoot),
117
+ line: sw.line,
118
+ missingMembers: sw.missingMembers,
119
+ enumName,
120
+ });
121
+ }
122
+ }
123
+ }
124
+ }
125
+ // Collect signature changes from api entries if available
126
+ if (api) {
127
+ for (const entry of api.entries) {
128
+ if (entry.risk !== 'safe' && (entry.kind === 'param_required' || entry.kind === 'return_type_changed' || entry.kind === 'param_removed')) {
129
+ typeRisks.signatureChanges.push({
130
+ symbol: entry.exportName,
131
+ filePath: relativePath(entry.filePath, engine.workspaceRoot),
132
+ changeKind: entry.kind,
133
+ });
134
+ }
135
+ }
136
+ }
137
+ }
138
+ catch {
139
+ // Best-effort per file
140
+ }
141
+ }
142
+ }
143
+ catch (err) {
144
+ warnings.push(`Type-risk analysis failed: ${err?.message ?? 'unknown'}`);
145
+ }
146
+ // Step 5: Test coverage gaps for high-risk changed symbols
147
+ const testGaps = [];
148
+ if (api?.entries) {
149
+ const breaking = api.entries.filter((e) => e.risk === 'breaking').slice(0, 5);
150
+ for (const entry of breaking) {
151
+ try {
152
+ const testResult = await findTestFiles.handler({ symbol: entry.exportName }, engine);
153
+ const hasTests = !testResult.includes('No test files') && !testResult.includes('No references');
154
+ testGaps.push({ symbol: entry.exportName, filePath: entry.filePath, hasTests });
155
+ }
156
+ catch {
157
+ testGaps.push({ symbol: entry.exportName, filePath: entry.filePath, hasTests: false });
158
+ }
159
+ }
160
+ }
161
+ // Step 6: Phase 3A — Build verdict, next steps, and suggested commands
162
+ const { verdict, verdictReason, nextSteps, suggestedCommands } = buildVerdict({
163
+ totalErrors,
164
+ api,
165
+ typeRisks,
166
+ testGaps,
167
+ changedFiles: changedFiles.map((f) => relativePath(f, engine.workspaceRoot)),
168
+ workspaceRoot: engine.workspaceRoot,
169
+ });
170
+ return {
171
+ base,
172
+ changedFiles: changedFiles.map((f) => relativePath(f, engine.workspaceRoot)),
173
+ diagnostics,
174
+ totalErrors,
175
+ api,
176
+ testGaps,
177
+ typeRisks,
178
+ suggestedCommands,
179
+ nextSteps,
180
+ verdict,
181
+ verdictReason,
182
+ warnings,
183
+ elapsedMs: Date.now() - startTime,
184
+ };
185
+ },
186
+ });
187
+ function buildVerdict(input) {
188
+ const { totalErrors, api, typeRisks, testGaps, changedFiles } = input;
189
+ const nextSteps = [];
190
+ const suggestedCommands = [];
191
+ // Hard errors first
192
+ if (totalErrors > 0) {
193
+ nextSteps.push(`Fix ${totalErrors} TypeScript error(s) in changed files before merging`);
194
+ suggestedCommands.push('npx tsc --noEmit');
195
+ for (const entry of (api?.entries ?? []).filter((e) => e.risk === 'breaking').slice(0, 3)) {
196
+ for (const step of (entry.migrationSteps ?? []))
197
+ nextSteps.push(step);
198
+ }
199
+ return {
200
+ verdict: 'has-errors',
201
+ verdictReason: `${totalErrors} TypeScript error(s) found in changed files`,
202
+ nextSteps,
203
+ suggestedCommands,
204
+ };
205
+ }
206
+ // Breaking API changes
207
+ const breaking = api?.breaking ?? 0;
208
+ const switchIssues = typeRisks.nonExhaustiveSwitches.length;
209
+ const sigChanges = typeRisks.signatureChanges.length;
210
+ if (breaking > 0 || switchIssues > 0 || sigChanges > 0) {
211
+ if (breaking > 0) {
212
+ nextSteps.push(`${breaking} breaking API change(s) — update consumers before merging`);
213
+ for (const entry of (api?.entries ?? []).filter((e) => e.risk === 'breaking').slice(0, 3)) {
214
+ for (const step of (entry.migrationSteps ?? []))
215
+ nextSteps.push(step);
216
+ if (entry.filesToInspect?.length) {
217
+ suggestedCommands.push(`# Check consumers of ${entry.exportName}:`);
218
+ suggestedCommands.push(`grep -r '${entry.exportName}' --include='*.ts' src/`);
219
+ }
220
+ }
221
+ }
222
+ if (switchIssues > 0) {
223
+ nextSteps.push(`${switchIssues} non-exhaustive switch statement(s) — add cases for new enum members`);
224
+ const affected = [...new Set(typeRisks.nonExhaustiveSwitches.map(s => s.filePath))].slice(0, 2);
225
+ suggestedCommands.push(`# Fix exhaustiveness in: ${affected.join(', ')}`);
226
+ }
227
+ if (sigChanges > 0) {
228
+ nextSteps.push(`${sigChanges} signature change(s) — verify all callers pass the correct arguments`);
229
+ for (const sc of typeRisks.signatureChanges.slice(0, 3)) {
230
+ suggestedCommands.push(`grep -r '${sc.symbol}(' --include='*.ts' src/`);
231
+ }
232
+ }
233
+ // Test gaps
234
+ const untested = testGaps.filter((g) => !g.hasTests);
235
+ if (untested.length > 0) {
236
+ nextSteps.push(`${untested.length} breaking export(s) lack test coverage`);
237
+ }
238
+ const reasons = [];
239
+ if (breaking > 0)
240
+ reasons.push(`${breaking} breaking API change(s)`);
241
+ if (switchIssues > 0)
242
+ reasons.push(`${switchIssues} exhaustiveness issue(s)`);
243
+ if (sigChanges > 0)
244
+ reasons.push(`${sigChanges} signature change(s)`);
245
+ return {
246
+ verdict: 'needs-attention',
247
+ verdictReason: reasons.join(', '),
248
+ nextSteps,
249
+ suggestedCommands,
250
+ };
251
+ }
252
+ // Risky-only changes
253
+ const risky = api?.risky ?? 0;
254
+ if (risky > 0) {
255
+ nextSteps.push(`${risky} risky (non-breaking) API change(s) — review before release`);
256
+ if (api?.semver === 'minor') {
257
+ nextSteps.push('Bump the minor version when releasing (new functionality added)');
258
+ }
259
+ return {
260
+ verdict: 'needs-attention',
261
+ verdictReason: `${risky} risky change(s) — recommend review before release`,
262
+ nextSteps,
263
+ suggestedCommands,
264
+ };
265
+ }
266
+ // Safe
267
+ nextSteps.push('All checks passed — safe to merge');
268
+ if (changedFiles.length > 0) {
269
+ const ext = changedFiles[0].endsWith('.ts') ? 'ts' : 'js';
270
+ suggestedCommands.push('npm test');
271
+ }
272
+ return {
273
+ verdict: 'safe',
274
+ verdictReason: 'No errors, no breaking changes, no type risks detected',
275
+ nextSteps,
276
+ suggestedCommands,
277
+ };
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Early return helper
281
+ // ---------------------------------------------------------------------------
282
+ function earlyReturn(startTime, overrides) {
283
+ return {
284
+ base: undefined,
285
+ changedFiles: [],
286
+ diagnostics: [],
287
+ totalErrors: 0,
288
+ api: null,
289
+ testGaps: [],
290
+ typeRisks: { nonExhaustiveSwitches: [], signatureChanges: [] },
291
+ suggestedCommands: [],
292
+ nextSteps: [],
293
+ verdict: 'safe',
294
+ verdictReason: '',
295
+ warnings: [],
296
+ elapsedMs: Date.now() - startTime,
297
+ ...overrides,
298
+ };
299
+ }
300
+ //# sourceMappingURL=verifyChangeSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyChangeSet.js","sourceRoot":"","sources":["../../src/workflows/verifyChangeSet.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lsp-intelligence",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "LSP-powered code intelligence MCP server for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,14 +8,13 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
- ".npmrc",
12
11
  "README.md",
13
12
  "LICENSE"
14
13
  ],
15
14
  "scripts": {
16
15
  "clean": "rm -rf dist",
17
16
  "build": "rm -rf dist && tsc",
18
- "prepublishOnly": "rm -rf dist && tsc",
17
+ "prepack": "npm run clean && npm run build",
19
18
  "start": "tsx src/index.ts",
20
19
  "test": "vitest run",
21
20
  "test:watch": "vitest",
@@ -41,5 +40,8 @@
41
40
  "engines": {
42
41
  "node": ">=20.0.0"
43
42
  },
44
- "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
43
+ "publishConfig": {
44
+ "registry": "https://registry.npmjs.org",
45
+ "access": "public"
46
+ }
45
47
  }