driftdetect 0.4.6 → 0.5.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/LICENSE +21 -0
- package/dist/bin/drift.js +27 -1
- package/dist/bin/drift.js.map +1 -1
- package/dist/commands/approve.d.ts +20 -0
- package/dist/commands/approve.d.ts.map +1 -1
- package/dist/commands/approve.js +38 -72
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/callgraph.js +4 -4
- package/dist/commands/callgraph.js.map +1 -1
- package/dist/commands/check.d.ts +41 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +21 -11
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/coupling.d.ts +17 -0
- package/dist/commands/coupling.d.ts.map +1 -0
- package/dist/commands/coupling.js +726 -0
- package/dist/commands/coupling.js.map +1 -0
- package/dist/commands/error-handling.d.ts +15 -0
- package/dist/commands/error-handling.d.ts.map +1 -0
- package/dist/commands/error-handling.js +608 -0
- package/dist/commands/error-handling.js.map +1 -0
- package/dist/commands/export.d.ts +16 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +46 -50
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/files.d.ts +15 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +27 -48
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/ignore.d.ts +20 -0
- package/dist/commands/ignore.d.ts.map +1 -1
- package/dist/commands/ignore.js +25 -48
- package/dist/commands/ignore.js.map +1 -1
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/migrate-storage.d.ts +23 -0
- package/dist/commands/migrate-storage.d.ts.map +1 -0
- package/dist/commands/migrate-storage.js +337 -0
- package/dist/commands/migrate-storage.js.map +1 -0
- package/dist/commands/report.d.ts +22 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +19 -10
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/scan.d.ts +37 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +233 -8
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/skills.d.ts +16 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +409 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +20 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +74 -72
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/test-topology.d.ts +15 -0
- package/dist/commands/test-topology.d.ts.map +1 -0
- package/dist/commands/test-topology.js +589 -0
- package/dist/commands/test-topology.js.map +1 -0
- package/dist/commands/where.d.ts +15 -0
- package/dist/commands/where.d.ts.map +1 -1
- package/dist/commands/where.js +41 -88
- package/dist/commands/where.js.map +1 -1
- package/dist/commands/wrappers.d.ts +16 -0
- package/dist/commands/wrappers.d.ts.map +1 -0
- package/dist/commands/wrappers.js +181 -0
- package/dist/commands/wrappers.js.map +1 -0
- package/dist/services/pattern-service-factory.d.ts +37 -0
- package/dist/services/pattern-service-factory.d.ts.map +1 -0
- package/dist/services/pattern-service-factory.js +41 -0
- package/dist/services/pattern-service-factory.js.map +1 -0
- package/dist/services/scanner-service.d.ts +210 -0
- package/dist/services/scanner-service.d.ts.map +1 -1
- package/dist/services/scanner-service.js +298 -102
- package/dist/services/scanner-service.js.map +1 -1
- package/dist/workers/detector-worker.d.ts +107 -0
- package/dist/workers/detector-worker.d.ts.map +1 -0
- package/dist/workers/detector-worker.js +293 -0
- package/dist/workers/detector-worker.js.map +1 -0
- package/package.json +18 -17
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Geoffrey Fernald
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/bin/drift.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from 'commander';
|
|
11
11
|
import { VERSION } from '../index.js';
|
|
12
|
-
import { initCommand, scanCommand, checkCommand, statusCommand, approveCommand, ignoreCommand, reportCommand, exportCommand, whereCommand, filesCommand, watchCommand, dashboardCommand, trendsCommand, parserCommand, dnaCommand, boundariesCommand, callgraphCommand, projectsCommand, } from '../commands/index.js';
|
|
12
|
+
import { initCommand, scanCommand, checkCommand, statusCommand, approveCommand, ignoreCommand, reportCommand, exportCommand, whereCommand, filesCommand, watchCommand, dashboardCommand, trendsCommand, parserCommand, dnaCommand, boundariesCommand, callgraphCommand, projectsCommand, skillsCommand, migrateStorageCommand, wrappersCommand, createTestTopologyCommand, createCouplingCommand, createErrorHandlingCommand, } from '../commands/index.js';
|
|
13
13
|
/**
|
|
14
14
|
* Create and configure the main CLI program
|
|
15
15
|
*/
|
|
@@ -40,6 +40,13 @@ function createProgram() {
|
|
|
40
40
|
program.addCommand(boundariesCommand);
|
|
41
41
|
program.addCommand(callgraphCommand);
|
|
42
42
|
program.addCommand(projectsCommand);
|
|
43
|
+
program.addCommand(skillsCommand);
|
|
44
|
+
program.addCommand(migrateStorageCommand);
|
|
45
|
+
program.addCommand(wrappersCommand);
|
|
46
|
+
// Analysis commands (L5-L7 layers)
|
|
47
|
+
program.addCommand(createTestTopologyCommand());
|
|
48
|
+
program.addCommand(createCouplingCommand());
|
|
49
|
+
program.addCommand(createErrorHandlingCommand());
|
|
43
50
|
// Add help examples
|
|
44
51
|
program.addHelpText('after', `
|
|
45
52
|
Examples:
|
|
@@ -81,6 +88,25 @@ Examples:
|
|
|
81
88
|
$ drift projects List all registered projects
|
|
82
89
|
$ drift projects switch <name> Switch active project
|
|
83
90
|
$ drift projects info Show current project details
|
|
91
|
+
$ drift skills List available Agent Skills
|
|
92
|
+
$ drift skills install <name> Install a skill to your project
|
|
93
|
+
$ drift skills info <name> Show skill details
|
|
94
|
+
$ drift migrate-storage Migrate to unified storage format
|
|
95
|
+
$ drift migrate-storage status Check current storage format
|
|
96
|
+
$ drift wrappers Detect framework wrapper patterns
|
|
97
|
+
$ drift wrappers --json Output wrapper analysis as JSON
|
|
98
|
+
$ drift wrappers --verbose Show detailed wrapper information
|
|
99
|
+
$ drift test-topology Show test topology status
|
|
100
|
+
$ drift test-topology coverage Analyze test coverage mapping
|
|
101
|
+
$ drift test-topology uncovered Find untested code
|
|
102
|
+
$ drift test-topology affected Find tests affected by changes
|
|
103
|
+
$ drift coupling Show module coupling status
|
|
104
|
+
$ drift coupling cycles Detect dependency cycles
|
|
105
|
+
$ drift coupling hotspots Find highly coupled modules
|
|
106
|
+
$ drift coupling analyze <mod> Analyze specific module
|
|
107
|
+
$ drift error-handling Show error handling status
|
|
108
|
+
$ drift error-handling gaps Find error handling gaps
|
|
109
|
+
$ drift error-handling unhandled Find unhandled error paths
|
|
84
110
|
|
|
85
111
|
Documentation:
|
|
86
112
|
https://github.com/drift/drift
|
package/dist/bin/drift.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/bin/drift.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/bin/drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approve Command - drift approve
|
|
3
|
+
*
|
|
4
|
+
* Approve a discovered pattern to enforce it.
|
|
5
|
+
*
|
|
6
|
+
* MIGRATION: Now uses IPatternService for pattern operations.
|
|
7
|
+
*
|
|
8
|
+
* @requirements 29.5
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
export interface ApproveOptions {
|
|
12
|
+
/** Approve all patterns matching a category */
|
|
13
|
+
category?: string;
|
|
14
|
+
/** Skip confirmation prompt */
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
/** Enable verbose output */
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const approveCommand: Command;
|
|
20
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoQD,eAAO,MAAM,cAAc,SAMH,CAAC"}
|
package/dist/commands/approve.js
CHANGED
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Approve a discovered pattern to enforce it.
|
|
5
5
|
*
|
|
6
|
+
* MIGRATION: Now uses IPatternService for pattern operations.
|
|
7
|
+
*
|
|
6
8
|
* @requirements 29.5
|
|
7
9
|
*/
|
|
8
10
|
import { Command } from 'commander';
|
|
9
11
|
import * as fs from 'node:fs/promises';
|
|
10
12
|
import * as path from 'node:path';
|
|
11
13
|
import chalk from 'chalk';
|
|
12
|
-
import {
|
|
14
|
+
import { createCLIPatternService } from '../services/pattern-service-factory.js';
|
|
13
15
|
import { createSpinner, status } from '../ui/spinner.js';
|
|
14
16
|
import { confirmPrompt, promptBatchPatternApproval } from '../ui/prompts.js';
|
|
15
17
|
import { createPatternsTable } from '../ui/table.js';
|
|
@@ -41,16 +43,18 @@ async function approveAction(patternId, options) {
|
|
|
41
43
|
status.error('Drift is not initialized. Run `drift init` first.');
|
|
42
44
|
process.exit(1);
|
|
43
45
|
}
|
|
44
|
-
// Initialize pattern
|
|
46
|
+
// Initialize pattern service
|
|
45
47
|
const spinner = createSpinner('Loading patterns...');
|
|
46
48
|
spinner.start();
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
+
const service = createCLIPatternService(rootDir);
|
|
50
|
+
// Get discovered patterns (auto-initializes)
|
|
51
|
+
const discoveredResult = await service.listByStatus('discovered', { limit: 1000 });
|
|
49
52
|
spinner.succeed('Patterns loaded');
|
|
50
53
|
// Handle category-based approval
|
|
51
54
|
if (options.category) {
|
|
52
55
|
const category = options.category;
|
|
53
|
-
const
|
|
56
|
+
const categoryResult = await service.listByCategory(category, { limit: 1000 });
|
|
57
|
+
const discovered = categoryResult.items.filter((p) => p.status === 'discovered');
|
|
54
58
|
if (discovered.length === 0) {
|
|
55
59
|
status.info(`No discovered patterns in category: ${category}`);
|
|
56
60
|
return;
|
|
@@ -62,9 +66,9 @@ async function approveAction(patternId, options) {
|
|
|
62
66
|
id: p.id.slice(0, 13),
|
|
63
67
|
name: p.name.slice(0, 28),
|
|
64
68
|
category: p.category,
|
|
65
|
-
confidence: p.confidence
|
|
66
|
-
locations: p.
|
|
67
|
-
outliers: p.
|
|
69
|
+
confidence: p.confidence,
|
|
70
|
+
locations: p.locationCount,
|
|
71
|
+
outliers: p.outlierCount,
|
|
68
72
|
}));
|
|
69
73
|
console.log(createPatternsTable(rows));
|
|
70
74
|
console.log();
|
|
@@ -82,24 +86,18 @@ async function approveAction(patternId, options) {
|
|
|
82
86
|
let approvedCount = 0;
|
|
83
87
|
for (const pattern of discovered) {
|
|
84
88
|
try {
|
|
85
|
-
|
|
89
|
+
await service.approvePattern(pattern.id);
|
|
86
90
|
approvedCount++;
|
|
87
91
|
if (verbose) {
|
|
88
92
|
console.log(chalk.gray(` Approved: ${pattern.name}`));
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
catch (error) {
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
console.log(chalk.yellow(` Skipped (already approved): ${pattern.name}`));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
throw error;
|
|
96
|
+
if (verbose) {
|
|
97
|
+
console.log(chalk.yellow(` Skipped: ${pattern.name}`));
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
|
-
await store.saveAll();
|
|
103
101
|
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
104
102
|
console.log();
|
|
105
103
|
return;
|
|
@@ -107,7 +105,7 @@ async function approveAction(patternId, options) {
|
|
|
107
105
|
// Handle single pattern approval
|
|
108
106
|
// Check for special pattern IDs
|
|
109
107
|
if (patternId === 'all') {
|
|
110
|
-
const discovered =
|
|
108
|
+
const discovered = discoveredResult.items;
|
|
111
109
|
if (discovered.length === 0) {
|
|
112
110
|
status.info('No discovered patterns to approve');
|
|
113
111
|
return;
|
|
@@ -118,7 +116,7 @@ async function approveAction(patternId, options) {
|
|
|
118
116
|
id: p.id,
|
|
119
117
|
name: p.name,
|
|
120
118
|
category: p.category,
|
|
121
|
-
confidence: p.confidence
|
|
119
|
+
confidence: p.confidence,
|
|
122
120
|
}));
|
|
123
121
|
const selectedIds = await promptBatchPatternApproval(choices);
|
|
124
122
|
if (selectedIds.length === 0) {
|
|
@@ -127,54 +125,34 @@ async function approveAction(patternId, options) {
|
|
|
127
125
|
}
|
|
128
126
|
const approveSpinner = createSpinner('Approving patterns...');
|
|
129
127
|
approveSpinner.start();
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
try {
|
|
133
|
-
store.approve(id);
|
|
134
|
-
approvedCount++;
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
// Skip errors
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
await store.saveAll();
|
|
141
|
-
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
128
|
+
const approved = await service.approveMany(selectedIds);
|
|
129
|
+
approveSpinner.succeed(`Approved ${approved.length} patterns`);
|
|
142
130
|
console.log();
|
|
143
131
|
return;
|
|
144
132
|
}
|
|
145
133
|
// Non-interactive: approve all
|
|
146
134
|
const approveSpinner = createSpinner('Approving all patterns...');
|
|
147
135
|
approveSpinner.start();
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
store.approve(pattern.id);
|
|
152
|
-
approvedCount++;
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
// Skip errors
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
await store.saveAll();
|
|
159
|
-
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
136
|
+
const ids = discovered.map((p) => p.id);
|
|
137
|
+
const approved = await service.approveMany(ids);
|
|
138
|
+
approveSpinner.succeed(`Approved ${approved.length} patterns`);
|
|
160
139
|
console.log();
|
|
161
140
|
return;
|
|
162
141
|
}
|
|
163
142
|
// Approve single pattern by ID
|
|
164
|
-
const pattern =
|
|
143
|
+
const pattern = await service.getPattern(patternId);
|
|
165
144
|
if (!pattern) {
|
|
166
145
|
// Try to find by partial ID match
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
if (matches.length === 0) {
|
|
146
|
+
const searchResult = await service.search(patternId, { limit: 20 });
|
|
147
|
+
if (searchResult.length === 0) {
|
|
170
148
|
status.error(`Pattern not found: ${patternId}`);
|
|
171
149
|
console.log();
|
|
172
150
|
console.log(chalk.gray('Use `drift status -d` to see available patterns'));
|
|
173
151
|
process.exit(1);
|
|
174
152
|
}
|
|
175
|
-
if (
|
|
153
|
+
if (searchResult.length === 1) {
|
|
176
154
|
// Single match, use it
|
|
177
|
-
const match =
|
|
155
|
+
const match = searchResult[0];
|
|
178
156
|
console.log(chalk.gray(`Found pattern: ${match.id}`));
|
|
179
157
|
console.log();
|
|
180
158
|
if (!options.yes) {
|
|
@@ -185,17 +163,11 @@ async function approveAction(patternId, options) {
|
|
|
185
163
|
}
|
|
186
164
|
}
|
|
187
165
|
try {
|
|
188
|
-
|
|
189
|
-
await store.saveAll();
|
|
166
|
+
await service.approvePattern(match.id);
|
|
190
167
|
status.success(`Approved pattern: ${match.name}`);
|
|
191
168
|
}
|
|
192
169
|
catch (error) {
|
|
193
|
-
|
|
194
|
-
status.warning(`Pattern is already approved: ${match.name}`);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
throw error;
|
|
198
|
-
}
|
|
170
|
+
status.warning(`Could not approve pattern: ${match.name}`);
|
|
199
171
|
}
|
|
200
172
|
console.log();
|
|
201
173
|
return;
|
|
@@ -203,17 +175,17 @@ async function approveAction(patternId, options) {
|
|
|
203
175
|
// Multiple matches, show them
|
|
204
176
|
console.log(chalk.yellow(`Multiple patterns match "${patternId}":`));
|
|
205
177
|
console.log();
|
|
206
|
-
const rows =
|
|
178
|
+
const rows = searchResult.slice(0, 10).map((p) => ({
|
|
207
179
|
id: p.id.slice(0, 13),
|
|
208
180
|
name: p.name.slice(0, 28),
|
|
209
181
|
category: p.category,
|
|
210
|
-
confidence: p.confidence
|
|
211
|
-
locations: p.
|
|
212
|
-
outliers: p.
|
|
182
|
+
confidence: p.confidence,
|
|
183
|
+
locations: p.locationCount,
|
|
184
|
+
outliers: p.outlierCount,
|
|
213
185
|
}));
|
|
214
186
|
console.log(createPatternsTable(rows));
|
|
215
|
-
if (
|
|
216
|
-
console.log(chalk.gray(` ... and ${
|
|
187
|
+
if (searchResult.length > 10) {
|
|
188
|
+
console.log(chalk.gray(` ... and ${searchResult.length - 10} more`));
|
|
217
189
|
}
|
|
218
190
|
console.log();
|
|
219
191
|
console.log(chalk.gray('Please specify a more specific pattern ID'));
|
|
@@ -226,7 +198,7 @@ async function approveAction(patternId, options) {
|
|
|
226
198
|
console.log(` Name: ${pattern.name}`);
|
|
227
199
|
console.log(` Category: ${pattern.category}`);
|
|
228
200
|
console.log(` Status: ${pattern.status}`);
|
|
229
|
-
console.log(` Confidence: ${(pattern.confidence
|
|
201
|
+
console.log(` Confidence: ${(pattern.confidence * 100).toFixed(0)}% (${pattern.confidenceLevel})`);
|
|
230
202
|
console.log(` Locations: ${pattern.locations.length}`);
|
|
231
203
|
console.log(` Outliers: ${pattern.outliers.length}`);
|
|
232
204
|
console.log(` Severity: ${pattern.severity}`);
|
|
@@ -247,17 +219,11 @@ async function approveAction(patternId, options) {
|
|
|
247
219
|
}
|
|
248
220
|
// Approve the pattern
|
|
249
221
|
try {
|
|
250
|
-
|
|
251
|
-
await store.saveAll();
|
|
222
|
+
await service.approvePattern(patternId);
|
|
252
223
|
status.success(`Approved pattern: ${pattern.name}`);
|
|
253
224
|
}
|
|
254
225
|
catch (error) {
|
|
255
|
-
|
|
256
|
-
status.error(`Cannot approve pattern from status: ${pattern.status}`);
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
throw error;
|
|
260
|
-
}
|
|
226
|
+
status.error(`Cannot approve pattern from status: ${pattern.status}`);
|
|
261
227
|
}
|
|
262
228
|
console.log();
|
|
263
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { Command } from 'commander';
|
|
|
10
10
|
import * as fs from 'node:fs/promises';
|
|
11
11
|
import * as path from 'node:path';
|
|
12
12
|
import chalk from 'chalk';
|
|
13
|
-
import { createCallGraphAnalyzer, createBoundaryScanner, createSecurityPrioritizer, createImpactAnalyzer, createDeadCodeDetector, createCoverageAnalyzer,
|
|
13
|
+
import { createCallGraphAnalyzer, createBoundaryScanner, createSecurityPrioritizer, createImpactAnalyzer, createDeadCodeDetector, createCoverageAnalyzer, createUnifiedScanner, detectProjectStack, } from 'driftdetect-core';
|
|
14
14
|
import { createSpinner } from '../ui/spinner.js';
|
|
15
15
|
/** Directory name for drift configuration */
|
|
16
16
|
const DRIFT_DIR = '.drift';
|
|
@@ -131,14 +131,14 @@ async function buildAction(options) {
|
|
|
131
131
|
'**/*.java',
|
|
132
132
|
'**/*.php',
|
|
133
133
|
];
|
|
134
|
-
// Step 1: Run
|
|
134
|
+
// Step 1: Run unified data access scanner (tree-sitter based)
|
|
135
135
|
spinner?.text('🌳 Scanning with tree-sitter (semantic analysis)...');
|
|
136
|
-
const
|
|
136
|
+
const unifiedScanner = createUnifiedScanner({
|
|
137
137
|
rootDir,
|
|
138
138
|
verbose: options.verbose ?? false,
|
|
139
139
|
autoDetect: true,
|
|
140
140
|
});
|
|
141
|
-
const semanticResult = await
|
|
141
|
+
const semanticResult = await unifiedScanner.scanDirectory({ patterns: filePatterns });
|
|
142
142
|
// Use semantic results as primary source
|
|
143
143
|
const dataAccessPoints = semanticResult.accessPoints;
|
|
144
144
|
const semanticStats = semanticResult.stats;
|