driftdetect-mcp 0.4.0 → 0.4.3
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/server.d.ts +12 -2
- package/dist/bin/server.d.ts.map +1 -1
- package/dist/bin/server.js +25 -5
- package/dist/bin/server.js.map +1 -1
- package/dist/enterprise-server.d.ts +78 -0
- package/dist/enterprise-server.d.ts.map +1 -0
- package/dist/enterprise-server.js +201 -0
- package/dist/enterprise-server.js.map +1 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/cache.d.ts +86 -0
- package/dist/infrastructure/cache.d.ts.map +1 -0
- package/dist/infrastructure/cache.js +271 -0
- package/dist/infrastructure/cache.js.map +1 -0
- package/dist/infrastructure/cursor-manager.d.ts +86 -0
- package/dist/infrastructure/cursor-manager.d.ts.map +1 -0
- package/dist/infrastructure/cursor-manager.js +175 -0
- package/dist/infrastructure/cursor-manager.js.map +1 -0
- package/dist/infrastructure/error-handler.d.ts +82 -0
- package/dist/infrastructure/error-handler.d.ts.map +1 -0
- package/dist/infrastructure/error-handler.js +226 -0
- package/dist/infrastructure/error-handler.js.map +1 -0
- package/dist/infrastructure/index.d.ts +19 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +26 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/metrics.d.ts +104 -0
- package/dist/infrastructure/metrics.d.ts.map +1 -0
- package/dist/infrastructure/metrics.js +291 -0
- package/dist/infrastructure/metrics.js.map +1 -0
- package/dist/infrastructure/rate-limiter.d.ts +59 -0
- package/dist/infrastructure/rate-limiter.d.ts.map +1 -0
- package/dist/infrastructure/rate-limiter.js +132 -0
- package/dist/infrastructure/rate-limiter.js.map +1 -0
- package/dist/infrastructure/response-builder.d.ts +104 -0
- package/dist/infrastructure/response-builder.d.ts.map +1 -0
- package/dist/infrastructure/response-builder.js +207 -0
- package/dist/infrastructure/response-builder.js.map +1 -0
- package/dist/infrastructure/token-estimator.d.ts +48 -0
- package/dist/infrastructure/token-estimator.d.ts.map +1 -0
- package/dist/infrastructure/token-estimator.js +131 -0
- package/dist/infrastructure/token-estimator.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1074 -17
- package/dist/server.js.map +1 -1
- package/dist/tools/detail/code-examples.d.ts +33 -0
- package/dist/tools/detail/code-examples.d.ts.map +1 -0
- package/dist/tools/detail/code-examples.js +126 -0
- package/dist/tools/detail/code-examples.js.map +1 -0
- package/dist/tools/detail/dna-check.d.ts +32 -0
- package/dist/tools/detail/dna-check.d.ts.map +1 -0
- package/dist/tools/detail/dna-check.js +231 -0
- package/dist/tools/detail/dna-check.js.map +1 -0
- package/dist/tools/detail/dna-profile.d.ts +37 -0
- package/dist/tools/detail/dna-profile.d.ts.map +1 -0
- package/dist/tools/detail/dna-profile.js +101 -0
- package/dist/tools/detail/dna-profile.js.map +1 -0
- package/dist/tools/detail/file-patterns.d.ts +39 -0
- package/dist/tools/detail/file-patterns.d.ts.map +1 -0
- package/dist/tools/detail/file-patterns.js +103 -0
- package/dist/tools/detail/file-patterns.js.map +1 -0
- package/dist/tools/detail/files-list.d.ts +30 -0
- package/dist/tools/detail/files-list.d.ts.map +1 -0
- package/dist/tools/detail/files-list.js +99 -0
- package/dist/tools/detail/files-list.js.map +1 -0
- package/dist/tools/detail/impact-analysis.d.ts +53 -0
- package/dist/tools/detail/impact-analysis.d.ts.map +1 -0
- package/dist/tools/detail/impact-analysis.js +130 -0
- package/dist/tools/detail/impact-analysis.js.map +1 -0
- package/dist/tools/detail/index.d.ts +23 -0
- package/dist/tools/detail/index.d.ts.map +1 -0
- package/dist/tools/detail/index.js +200 -0
- package/dist/tools/detail/index.js.map +1 -0
- package/dist/tools/detail/pattern-get.d.ts +45 -0
- package/dist/tools/detail/pattern-get.d.ts.map +1 -0
- package/dist/tools/detail/pattern-get.js +87 -0
- package/dist/tools/detail/pattern-get.js.map +1 -0
- package/dist/tools/detail/reachability.d.ts +60 -0
- package/dist/tools/detail/reachability.d.ts.map +1 -0
- package/dist/tools/detail/reachability.js +168 -0
- package/dist/tools/detail/reachability.js.map +1 -0
- package/dist/tools/discovery/capabilities.d.ts +28 -0
- package/dist/tools/discovery/capabilities.d.ts.map +1 -0
- package/dist/tools/discovery/capabilities.js +112 -0
- package/dist/tools/discovery/capabilities.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +13 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +30 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/projects.d.ts +26 -0
- package/dist/tools/discovery/projects.d.ts.map +1 -0
- package/dist/tools/discovery/projects.js +210 -0
- package/dist/tools/discovery/projects.js.map +1 -0
- package/dist/tools/discovery/status.d.ts +42 -0
- package/dist/tools/discovery/status.d.ts.map +1 -0
- package/dist/tools/discovery/status.js +157 -0
- package/dist/tools/discovery/status.js.map +1 -0
- package/dist/tools/exploration/contracts-list.d.ts +35 -0
- package/dist/tools/exploration/contracts-list.d.ts.map +1 -0
- package/dist/tools/exploration/contracts-list.js +106 -0
- package/dist/tools/exploration/contracts-list.js.map +1 -0
- package/dist/tools/exploration/files-list.d.ts +29 -0
- package/dist/tools/exploration/files-list.d.ts.map +1 -0
- package/dist/tools/exploration/files-list.js +94 -0
- package/dist/tools/exploration/files-list.js.map +1 -0
- package/dist/tools/exploration/index.d.ts +17 -0
- package/dist/tools/exploration/index.d.ts.map +1 -0
- package/dist/tools/exploration/index.js +126 -0
- package/dist/tools/exploration/index.js.map +1 -0
- package/dist/tools/exploration/patterns-list.d.ts +40 -0
- package/dist/tools/exploration/patterns-list.d.ts.map +1 -0
- package/dist/tools/exploration/patterns-list.js +172 -0
- package/dist/tools/exploration/patterns-list.js.map +1 -0
- package/dist/tools/exploration/security-summary.d.ts +49 -0
- package/dist/tools/exploration/security-summary.d.ts.map +1 -0
- package/dist/tools/exploration/security-summary.js +111 -0
- package/dist/tools/exploration/security-summary.js.map +1 -0
- package/dist/tools/exploration/trends.d.ts +49 -0
- package/dist/tools/exploration/trends.d.ts.map +1 -0
- package/dist/tools/exploration/trends.js +147 -0
- package/dist/tools/exploration/trends.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/orchestration/context.d.ts +72 -0
- package/dist/tools/orchestration/context.d.ts.map +1 -0
- package/dist/tools/orchestration/context.js +499 -0
- package/dist/tools/orchestration/context.js.map +1 -0
- package/dist/tools/orchestration/index.d.ts +11 -0
- package/dist/tools/orchestration/index.d.ts.map +1 -0
- package/dist/tools/orchestration/index.js +56 -0
- package/dist/tools/orchestration/index.js.map +1 -0
- package/dist/tools/registry.d.ts +41 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +64 -0
- package/dist/tools/registry.js.map +1 -0
- package/package.json +11 -11
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift_files_list - File Listing
|
|
3
|
+
*
|
|
4
|
+
* Exploration tool that lists files with pattern counts.
|
|
5
|
+
* Helps find files relevant to a task.
|
|
6
|
+
*/
|
|
7
|
+
import { createResponseBuilder, cursorManager, Errors, } from '../../infrastructure/index.js';
|
|
8
|
+
import { minimatch } from 'minimatch';
|
|
9
|
+
const DEFAULT_LIMIT = 30;
|
|
10
|
+
const MAX_LIMIT = 100;
|
|
11
|
+
export async function handleFilesList(store, args) {
|
|
12
|
+
const builder = createResponseBuilder();
|
|
13
|
+
await store.load();
|
|
14
|
+
// Parse cursor if provided
|
|
15
|
+
let startOffset = 0;
|
|
16
|
+
if (args.cursor) {
|
|
17
|
+
const cursorData = cursorManager.decode(args.cursor);
|
|
18
|
+
if (!cursorData) {
|
|
19
|
+
throw Errors.invalidCursor();
|
|
20
|
+
}
|
|
21
|
+
startOffset = cursorData.offset ?? 0;
|
|
22
|
+
}
|
|
23
|
+
// Get all files from manifest
|
|
24
|
+
const allFiles = store.getAllFiles();
|
|
25
|
+
// Build file summaries
|
|
26
|
+
let fileSummaries = [];
|
|
27
|
+
for (const file of allFiles) {
|
|
28
|
+
const fileData = store.queryFile({ path: file });
|
|
29
|
+
if (!fileData || !('patterns' in fileData))
|
|
30
|
+
continue;
|
|
31
|
+
const patterns = fileData.patterns;
|
|
32
|
+
// Filter by path glob
|
|
33
|
+
if (args.path && !minimatch(file, args.path)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// Filter by category
|
|
37
|
+
let filteredPatterns = patterns;
|
|
38
|
+
if (args.category) {
|
|
39
|
+
filteredPatterns = patterns.filter(p => p.category === args.category);
|
|
40
|
+
}
|
|
41
|
+
// Filter by minimum patterns
|
|
42
|
+
const minPatterns = args.minPatterns ?? 1;
|
|
43
|
+
if (filteredPatterns.length < minPatterns) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const categories = [...new Set(filteredPatterns.map(p => p.category))];
|
|
47
|
+
const hasOutliers = filteredPatterns.some(p => (p.outliers?.length ?? 0) > 0);
|
|
48
|
+
fileSummaries.push({
|
|
49
|
+
file,
|
|
50
|
+
patternCount: filteredPatterns.length,
|
|
51
|
+
categories,
|
|
52
|
+
hasOutliers,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Sort by pattern count (most patterns first)
|
|
56
|
+
fileSummaries.sort((a, b) => b.patternCount - a.patternCount);
|
|
57
|
+
const totalCount = fileSummaries.length;
|
|
58
|
+
const limit = Math.min(args.limit ?? DEFAULT_LIMIT, MAX_LIMIT);
|
|
59
|
+
// Apply pagination
|
|
60
|
+
fileSummaries = fileSummaries.slice(startOffset, startOffset + limit);
|
|
61
|
+
// Build pagination info
|
|
62
|
+
const hasMore = startOffset + limit < totalCount;
|
|
63
|
+
const pagination = {
|
|
64
|
+
hasMore,
|
|
65
|
+
totalCount,
|
|
66
|
+
pageSize: limit,
|
|
67
|
+
cursor: hasMore
|
|
68
|
+
? cursorManager.createOffsetCursor(startOffset + limit, args)
|
|
69
|
+
: undefined,
|
|
70
|
+
};
|
|
71
|
+
// Build summary
|
|
72
|
+
let summary = `Found ${totalCount} files with patterns`;
|
|
73
|
+
if (args.path) {
|
|
74
|
+
summary += ` matching "${args.path}"`;
|
|
75
|
+
}
|
|
76
|
+
if (args.category) {
|
|
77
|
+
summary += ` in ${args.category}`;
|
|
78
|
+
}
|
|
79
|
+
summary += `. Showing ${fileSummaries.length}.`;
|
|
80
|
+
return builder
|
|
81
|
+
.withSummary(summary)
|
|
82
|
+
.withData({ files: fileSummaries })
|
|
83
|
+
.withPagination(pagination)
|
|
84
|
+
.withHints({
|
|
85
|
+
nextActions: fileSummaries.length > 0
|
|
86
|
+
? [
|
|
87
|
+
`Use drift_file_patterns with path="${fileSummaries[0]?.file}" for full details`,
|
|
88
|
+
]
|
|
89
|
+
: ['Try a different path pattern or category filter'],
|
|
90
|
+
relatedTools: ['drift_file_patterns', 'drift_patterns_list'],
|
|
91
|
+
})
|
|
92
|
+
.buildContent();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=files-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-list.js","sourceRoot":"","sources":["../../../src/tools/exploration/files-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exploration Tools
|
|
3
|
+
*
|
|
4
|
+
* Layer 2: Paginated listing tools for exploring patterns, files, and analysis.
|
|
5
|
+
* These return summaries with IDs for use with detail tools.
|
|
6
|
+
*/
|
|
7
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
export declare const EXPLORATION_TOOLS: Tool[];
|
|
9
|
+
export { handlePatternsList } from './patterns-list.js';
|
|
10
|
+
export { handleSecuritySummary } from './security-summary.js';
|
|
11
|
+
export { handleContractsList } from './contracts-list.js';
|
|
12
|
+
export { handleTrends } from './trends.js';
|
|
13
|
+
export type { PatternSummary, PatternsListData } from './patterns-list.js';
|
|
14
|
+
export type { SecuritySummaryData } from './security-summary.js';
|
|
15
|
+
export type { ContractSummary, ContractsListData } from './contracts-list.js';
|
|
16
|
+
export type { TrendItem, TrendsData } from './trends.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/exploration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAS/D,eAAO,MAAM,iBAAiB,EAAE,IAAI,EA2GnC,CAAC;AAGF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exploration Tools
|
|
3
|
+
*
|
|
4
|
+
* Layer 2: Paginated listing tools for exploring patterns, files, and analysis.
|
|
5
|
+
* These return summaries with IDs for use with detail tools.
|
|
6
|
+
*/
|
|
7
|
+
const PATTERN_CATEGORIES = [
|
|
8
|
+
'api', 'auth', 'security', 'errors', 'logging',
|
|
9
|
+
'data-access', 'config', 'testing', 'performance',
|
|
10
|
+
'components', 'styling', 'structural', 'types',
|
|
11
|
+
'accessibility', 'documentation',
|
|
12
|
+
];
|
|
13
|
+
export const EXPLORATION_TOOLS = [
|
|
14
|
+
{
|
|
15
|
+
name: 'drift_patterns_list',
|
|
16
|
+
description: 'List patterns with summaries. Returns pattern IDs for use with drift_pattern_get. Supports filtering by category, status, and confidence.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
categories: {
|
|
21
|
+
type: 'array',
|
|
22
|
+
items: { type: 'string' },
|
|
23
|
+
description: `Filter by categories: ${PATTERN_CATEGORIES.join(', ')}`,
|
|
24
|
+
},
|
|
25
|
+
status: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
enum: ['all', 'approved', 'discovered', 'ignored'],
|
|
28
|
+
description: 'Filter by approval status (default: all)',
|
|
29
|
+
},
|
|
30
|
+
minConfidence: {
|
|
31
|
+
type: 'number',
|
|
32
|
+
description: 'Minimum confidence 0.0-1.0 (default: 0)',
|
|
33
|
+
},
|
|
34
|
+
search: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Search pattern names and descriptions',
|
|
37
|
+
},
|
|
38
|
+
limit: {
|
|
39
|
+
type: 'number',
|
|
40
|
+
description: 'Max patterns to return (default: 20, max: 50)',
|
|
41
|
+
},
|
|
42
|
+
cursor: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Pagination cursor from previous response',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: [],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'drift_security_summary',
|
|
52
|
+
description: 'Get security posture overview. Shows sensitive data access patterns, security issues, and data flow summary. Use before working on security-sensitive code.',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
focus: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
enum: ['all', 'critical', 'data-access', 'auth'],
|
|
59
|
+
description: 'Focus area (default: all)',
|
|
60
|
+
},
|
|
61
|
+
limit: {
|
|
62
|
+
type: 'number',
|
|
63
|
+
description: 'Max items per section (default: 10)',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
required: [],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'drift_contracts_list',
|
|
71
|
+
description: 'List API contracts between frontend and backend. Shows verified contracts, mismatches, and discovered endpoints.',
|
|
72
|
+
inputSchema: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
status: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
enum: ['all', 'verified', 'mismatch', 'discovered'],
|
|
78
|
+
description: 'Filter by contract status (default: all)',
|
|
79
|
+
},
|
|
80
|
+
limit: {
|
|
81
|
+
type: 'number',
|
|
82
|
+
description: 'Max contracts to return (default: 20)',
|
|
83
|
+
},
|
|
84
|
+
cursor: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'Pagination cursor',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
required: [],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'drift_trends',
|
|
94
|
+
description: 'Get pattern trend analysis. Shows how patterns have changed over time, regressions, and improvements.',
|
|
95
|
+
inputSchema: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
period: {
|
|
99
|
+
type: 'string',
|
|
100
|
+
enum: ['7d', '30d', '90d'],
|
|
101
|
+
description: 'Time period to analyze (default: 7d)',
|
|
102
|
+
},
|
|
103
|
+
category: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
description: 'Filter trends by category',
|
|
106
|
+
},
|
|
107
|
+
severity: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
enum: ['all', 'critical', 'warning'],
|
|
110
|
+
description: 'Filter by severity (default: all)',
|
|
111
|
+
},
|
|
112
|
+
limit: {
|
|
113
|
+
type: 'number',
|
|
114
|
+
description: 'Max trends to return (default: 20)',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
required: [],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
// Handler exports
|
|
122
|
+
export { handlePatternsList } from './patterns-list.js';
|
|
123
|
+
export { handleSecuritySummary } from './security-summary.js';
|
|
124
|
+
export { handleContractsList } from './contracts-list.js';
|
|
125
|
+
export { handleTrends } from './trends.js';
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/exploration/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift_patterns_list - Pattern Listing
|
|
3
|
+
*
|
|
4
|
+
* Exploration tool that lists patterns with summaries.
|
|
5
|
+
* Returns pattern IDs for use with drift_pattern_get.
|
|
6
|
+
*
|
|
7
|
+
* OPTIMIZED: Uses data lake pattern shards for category-specific queries,
|
|
8
|
+
* and pattern index view for full listings.
|
|
9
|
+
*/
|
|
10
|
+
import type { PatternStore, DataLake } from 'driftdetect-core';
|
|
11
|
+
export interface PatternSummary {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
category: string;
|
|
15
|
+
subcategory: string;
|
|
16
|
+
confidence: number;
|
|
17
|
+
confidenceLevel: string;
|
|
18
|
+
status: string;
|
|
19
|
+
locationCount: number;
|
|
20
|
+
outlierCount: number;
|
|
21
|
+
}
|
|
22
|
+
export interface PatternsListData {
|
|
23
|
+
patterns: PatternSummary[];
|
|
24
|
+
/** Response source for debugging */
|
|
25
|
+
_source?: 'lake' | 'store';
|
|
26
|
+
}
|
|
27
|
+
export declare function handlePatternsList(store: PatternStore, args: {
|
|
28
|
+
categories?: string[];
|
|
29
|
+
status?: string;
|
|
30
|
+
minConfidence?: number;
|
|
31
|
+
search?: string;
|
|
32
|
+
limit?: number;
|
|
33
|
+
cursor?: string;
|
|
34
|
+
}, dataLake?: DataLake): Promise<{
|
|
35
|
+
content: Array<{
|
|
36
|
+
type: string;
|
|
37
|
+
text: string;
|
|
38
|
+
}>;
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=patterns-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns-list.d.ts","sourceRoot":"","sources":["../../../src/tools/exploration/patterns-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAmB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQhF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAYD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IACJ,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,EACD,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoF7D"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift_patterns_list - Pattern Listing
|
|
3
|
+
*
|
|
4
|
+
* Exploration tool that lists patterns with summaries.
|
|
5
|
+
* Returns pattern IDs for use with drift_pattern_get.
|
|
6
|
+
*
|
|
7
|
+
* OPTIMIZED: Uses data lake pattern shards for category-specific queries,
|
|
8
|
+
* and pattern index view for full listings.
|
|
9
|
+
*/
|
|
10
|
+
import { createResponseBuilder, cursorManager, Errors, } from '../../infrastructure/index.js';
|
|
11
|
+
const VALID_CATEGORIES = [
|
|
12
|
+
'api', 'auth', 'security', 'errors', 'logging',
|
|
13
|
+
'data-access', 'config', 'testing', 'performance',
|
|
14
|
+
'components', 'styling', 'structural', 'types',
|
|
15
|
+
'accessibility', 'documentation',
|
|
16
|
+
];
|
|
17
|
+
const DEFAULT_LIMIT = 20;
|
|
18
|
+
const MAX_LIMIT = 50;
|
|
19
|
+
export async function handlePatternsList(store, args, dataLake) {
|
|
20
|
+
const builder = createResponseBuilder();
|
|
21
|
+
// Validate categories
|
|
22
|
+
if (args.categories) {
|
|
23
|
+
for (const cat of args.categories) {
|
|
24
|
+
if (!VALID_CATEGORIES.includes(cat)) {
|
|
25
|
+
throw Errors.invalidCategory(cat, VALID_CATEGORIES);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Parse cursor if provided
|
|
30
|
+
let startOffset = 0;
|
|
31
|
+
if (args.cursor) {
|
|
32
|
+
const cursorData = cursorManager.decode(args.cursor);
|
|
33
|
+
if (!cursorData) {
|
|
34
|
+
throw Errors.invalidCursor();
|
|
35
|
+
}
|
|
36
|
+
startOffset = cursorData.offset ?? 0;
|
|
37
|
+
}
|
|
38
|
+
const limit = Math.min(args.limit ?? DEFAULT_LIMIT, MAX_LIMIT);
|
|
39
|
+
// OPTIMIZATION: Try data lake first
|
|
40
|
+
if (dataLake) {
|
|
41
|
+
const lakeResult = await tryGetPatternsFromLake(dataLake, args, startOffset, limit);
|
|
42
|
+
if (lakeResult) {
|
|
43
|
+
return buildResponse(builder, lakeResult, args, startOffset, limit, 'lake');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Fallback: Use pattern store directly
|
|
47
|
+
await store.initialize();
|
|
48
|
+
let patterns = store.getAll();
|
|
49
|
+
// Filter by categories
|
|
50
|
+
if (args.categories && args.categories.length > 0) {
|
|
51
|
+
const cats = new Set(args.categories);
|
|
52
|
+
patterns = patterns.filter(p => cats.has(p.category));
|
|
53
|
+
}
|
|
54
|
+
// Filter by status
|
|
55
|
+
if (args.status && args.status !== 'all') {
|
|
56
|
+
patterns = patterns.filter(p => p.status === args.status);
|
|
57
|
+
}
|
|
58
|
+
// Filter by confidence
|
|
59
|
+
if (args.minConfidence !== undefined) {
|
|
60
|
+
patterns = patterns.filter(p => p.confidence.score >= args.minConfidence);
|
|
61
|
+
}
|
|
62
|
+
// Filter by search
|
|
63
|
+
if (args.search) {
|
|
64
|
+
const searchLower = args.search.toLowerCase();
|
|
65
|
+
patterns = patterns.filter(p => p.name.toLowerCase().includes(searchLower) ||
|
|
66
|
+
p.description.toLowerCase().includes(searchLower) ||
|
|
67
|
+
p.subcategory.toLowerCase().includes(searchLower));
|
|
68
|
+
}
|
|
69
|
+
// Sort by confidence (highest first)
|
|
70
|
+
patterns.sort((a, b) => b.confidence.score - a.confidence.score);
|
|
71
|
+
const totalCount = patterns.length;
|
|
72
|
+
// Apply pagination
|
|
73
|
+
const paginatedPatterns = patterns.slice(startOffset, startOffset + limit);
|
|
74
|
+
// Map to summaries
|
|
75
|
+
const summaries = paginatedPatterns.map(p => ({
|
|
76
|
+
id: p.id,
|
|
77
|
+
name: p.name,
|
|
78
|
+
category: p.category,
|
|
79
|
+
subcategory: p.subcategory,
|
|
80
|
+
confidence: Math.round(p.confidence.score * 100) / 100,
|
|
81
|
+
confidenceLevel: p.confidence.level,
|
|
82
|
+
status: p.status,
|
|
83
|
+
locationCount: p.locations.length,
|
|
84
|
+
outlierCount: p.outliers.length,
|
|
85
|
+
}));
|
|
86
|
+
return buildResponse(builder, { summaries, totalCount }, args, startOffset, limit, 'store');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Try to get patterns from data lake (optimized path)
|
|
90
|
+
*/
|
|
91
|
+
async function tryGetPatternsFromLake(dataLake, args, offset, limit) {
|
|
92
|
+
try {
|
|
93
|
+
await dataLake.initialize();
|
|
94
|
+
// Build query options, only including defined properties
|
|
95
|
+
// (exactOptionalPropertyTypes requires this approach)
|
|
96
|
+
const queryOptions = {
|
|
97
|
+
offset,
|
|
98
|
+
limit,
|
|
99
|
+
};
|
|
100
|
+
if (args.categories?.length) {
|
|
101
|
+
queryOptions.categories = args.categories;
|
|
102
|
+
}
|
|
103
|
+
if (args.status && args.status !== 'all') {
|
|
104
|
+
queryOptions.status = args.status;
|
|
105
|
+
}
|
|
106
|
+
if (args.minConfidence !== undefined) {
|
|
107
|
+
queryOptions.minConfidence = args.minConfidence;
|
|
108
|
+
}
|
|
109
|
+
if (args.search) {
|
|
110
|
+
queryOptions.search = args.search;
|
|
111
|
+
}
|
|
112
|
+
const result = await dataLake.query.getPatterns(queryOptions);
|
|
113
|
+
if (result.items.length === 0 && result.total === 0) {
|
|
114
|
+
return null; // No data in lake, fall back to store
|
|
115
|
+
}
|
|
116
|
+
const summaries = result.items.map(p => ({
|
|
117
|
+
id: p.id,
|
|
118
|
+
name: p.name,
|
|
119
|
+
category: p.category,
|
|
120
|
+
subcategory: p.subcategory,
|
|
121
|
+
confidence: Math.round(p.confidence * 100) / 100,
|
|
122
|
+
confidenceLevel: p.confidenceLevel,
|
|
123
|
+
status: p.status,
|
|
124
|
+
locationCount: p.locationCount,
|
|
125
|
+
outlierCount: p.outlierCount,
|
|
126
|
+
}));
|
|
127
|
+
return { summaries, totalCount: result.total };
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build the response
|
|
135
|
+
*/
|
|
136
|
+
function buildResponse(builder, data, args, startOffset, limit, source) {
|
|
137
|
+
const { summaries, totalCount } = data;
|
|
138
|
+
// Build pagination info
|
|
139
|
+
const hasMore = startOffset + limit < totalCount;
|
|
140
|
+
const pagination = {
|
|
141
|
+
hasMore,
|
|
142
|
+
totalCount,
|
|
143
|
+
pageSize: limit,
|
|
144
|
+
cursor: hasMore
|
|
145
|
+
? cursorManager.createOffsetCursor(startOffset + limit, args)
|
|
146
|
+
: undefined,
|
|
147
|
+
};
|
|
148
|
+
// Build summary
|
|
149
|
+
let summary = `Found ${totalCount} patterns`;
|
|
150
|
+
if (args.categories?.length) {
|
|
151
|
+
summary += ` in ${args.categories.join(', ')}`;
|
|
152
|
+
}
|
|
153
|
+
if (args.status && args.status !== 'all') {
|
|
154
|
+
summary += ` (${args.status})`;
|
|
155
|
+
}
|
|
156
|
+
summary += `. Showing ${summaries.length}.`;
|
|
157
|
+
return builder
|
|
158
|
+
.withSummary(summary)
|
|
159
|
+
.withData({ patterns: summaries, _source: source })
|
|
160
|
+
.withPagination(pagination)
|
|
161
|
+
.withHints({
|
|
162
|
+
nextActions: summaries.length > 0
|
|
163
|
+
? [
|
|
164
|
+
`Use drift_pattern_get with id="${summaries[0]?.id}" for full details`,
|
|
165
|
+
'Use drift_code_examples with categories to see implementations',
|
|
166
|
+
]
|
|
167
|
+
: ['Try different filters or run drift scan to discover patterns'],
|
|
168
|
+
relatedTools: ['drift_pattern_get', 'drift_code_examples', 'drift_file_patterns'],
|
|
169
|
+
})
|
|
170
|
+
.buildContent();
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=patterns-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns-list.js","sourceRoot":"","sources":["../../../src/tools/exploration/patterns-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift_security_summary - Security Posture Overview
|
|
3
|
+
*
|
|
4
|
+
* Exploration tool that provides security-focused analysis:
|
|
5
|
+
* - Sensitive data access patterns
|
|
6
|
+
* - Security issues
|
|
7
|
+
* - Data flow summary
|
|
8
|
+
*/
|
|
9
|
+
import type { BoundaryStore } from 'driftdetect-core';
|
|
10
|
+
export interface SecuritySummaryData {
|
|
11
|
+
overview: {
|
|
12
|
+
totalTables: number;
|
|
13
|
+
totalAccessPoints: number;
|
|
14
|
+
sensitiveFields: number;
|
|
15
|
+
violations: number;
|
|
16
|
+
};
|
|
17
|
+
sensitiveData: {
|
|
18
|
+
credentials: number;
|
|
19
|
+
financial: number;
|
|
20
|
+
health: number;
|
|
21
|
+
pii: number;
|
|
22
|
+
};
|
|
23
|
+
topTables: Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
accessCount: number;
|
|
26
|
+
hasSensitive: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
topSensitiveFields: Array<{
|
|
29
|
+
field: string;
|
|
30
|
+
type: string;
|
|
31
|
+
accessCount: number;
|
|
32
|
+
}>;
|
|
33
|
+
recentViolations: Array<{
|
|
34
|
+
file: string;
|
|
35
|
+
line: number;
|
|
36
|
+
message: string;
|
|
37
|
+
severity: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
export declare function handleSecuritySummary(store: BoundaryStore, args: {
|
|
41
|
+
focus?: string;
|
|
42
|
+
limit?: number;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
content: Array<{
|
|
45
|
+
type: string;
|
|
46
|
+
text: string;
|
|
47
|
+
}>;
|
|
48
|
+
}>;
|
|
49
|
+
//# sourceMappingURL=security-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-summary.d.ts","sourceRoot":"","sources":["../../../src/tools/exploration/security-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC,CAAC;IACH,kBAAkB,EAAE,KAAK,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,gBAAgB,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAID,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6G7D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift_security_summary - Security Posture Overview
|
|
3
|
+
*
|
|
4
|
+
* Exploration tool that provides security-focused analysis:
|
|
5
|
+
* - Sensitive data access patterns
|
|
6
|
+
* - Security issues
|
|
7
|
+
* - Data flow summary
|
|
8
|
+
*/
|
|
9
|
+
import { createResponseBuilder } from '../../infrastructure/index.js';
|
|
10
|
+
const DEFAULT_LIMIT = 10;
|
|
11
|
+
export async function handleSecuritySummary(store, args) {
|
|
12
|
+
const builder = createResponseBuilder();
|
|
13
|
+
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
14
|
+
await store.initialize();
|
|
15
|
+
const accessMap = store.getAccessMap();
|
|
16
|
+
const sensitiveFields = store.getSensitiveAccess();
|
|
17
|
+
const rules = store.getRules();
|
|
18
|
+
const violations = rules ? store.checkAllViolations() : [];
|
|
19
|
+
// Count sensitive data by type
|
|
20
|
+
const sensitiveByType = {
|
|
21
|
+
credentials: 0,
|
|
22
|
+
financial: 0,
|
|
23
|
+
health: 0,
|
|
24
|
+
pii: 0,
|
|
25
|
+
};
|
|
26
|
+
for (const field of sensitiveFields) {
|
|
27
|
+
const type = field.sensitivityType;
|
|
28
|
+
if (type in sensitiveByType) {
|
|
29
|
+
sensitiveByType[type]++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Get top tables by access count
|
|
33
|
+
const tableEntries = Object.entries(accessMap.tables)
|
|
34
|
+
.map(([name, info]) => ({
|
|
35
|
+
name,
|
|
36
|
+
accessCount: info.accessedBy.length,
|
|
37
|
+
hasSensitive: info.sensitiveFields.length > 0,
|
|
38
|
+
}))
|
|
39
|
+
.sort((a, b) => b.accessCount - a.accessCount)
|
|
40
|
+
.slice(0, limit);
|
|
41
|
+
// Get top sensitive fields
|
|
42
|
+
const fieldCounts = new Map();
|
|
43
|
+
for (const field of sensitiveFields) {
|
|
44
|
+
const key = field.table ? `${field.table}.${field.field}` : field.field;
|
|
45
|
+
const existing = fieldCounts.get(key);
|
|
46
|
+
if (existing) {
|
|
47
|
+
existing.count++;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
fieldCounts.set(key, { type: field.sensitivityType, count: 1 });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const topSensitiveFields = Array.from(fieldCounts.entries())
|
|
54
|
+
.map(([field, { type, count }]) => ({ field, type, accessCount: count }))
|
|
55
|
+
.sort((a, b) => b.accessCount - a.accessCount)
|
|
56
|
+
.slice(0, limit);
|
|
57
|
+
// Get recent violations
|
|
58
|
+
const recentViolations = violations
|
|
59
|
+
.slice(0, limit)
|
|
60
|
+
.map(v => ({
|
|
61
|
+
file: v.file,
|
|
62
|
+
line: v.line,
|
|
63
|
+
message: v.message,
|
|
64
|
+
severity: v.severity,
|
|
65
|
+
}));
|
|
66
|
+
const data = {
|
|
67
|
+
overview: {
|
|
68
|
+
totalTables: accessMap.stats.totalTables,
|
|
69
|
+
totalAccessPoints: accessMap.stats.totalAccessPoints,
|
|
70
|
+
sensitiveFields: accessMap.stats.totalSensitiveFields,
|
|
71
|
+
violations: violations.length,
|
|
72
|
+
},
|
|
73
|
+
sensitiveData: sensitiveByType,
|
|
74
|
+
topTables: tableEntries,
|
|
75
|
+
topSensitiveFields,
|
|
76
|
+
recentViolations,
|
|
77
|
+
};
|
|
78
|
+
// Build summary
|
|
79
|
+
let summary = `${accessMap.stats.totalTables} tables, ${accessMap.stats.totalAccessPoints} access points. `;
|
|
80
|
+
summary += `${accessMap.stats.totalSensitiveFields} sensitive fields. `;
|
|
81
|
+
if (violations.length > 0) {
|
|
82
|
+
summary += `⚠️ ${violations.length} boundary violations.`;
|
|
83
|
+
}
|
|
84
|
+
else if (rules) {
|
|
85
|
+
summary += '✓ No violations.';
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
summary += 'No boundary rules configured.';
|
|
89
|
+
}
|
|
90
|
+
const hints = {
|
|
91
|
+
nextActions: [
|
|
92
|
+
violations.length > 0
|
|
93
|
+
? 'Review violations and update boundary rules'
|
|
94
|
+
: 'Use drift_patterns_list to explore security patterns',
|
|
95
|
+
],
|
|
96
|
+
relatedTools: ['drift_patterns_list'],
|
|
97
|
+
};
|
|
98
|
+
if (sensitiveByType.credentials > 0) {
|
|
99
|
+
hints.warnings = [`${sensitiveByType.credentials} credential access points detected`];
|
|
100
|
+
}
|
|
101
|
+
if (violations.length > 0) {
|
|
102
|
+
hints.warnings = hints.warnings ?? [];
|
|
103
|
+
hints.warnings.push(`${violations.length} boundary violations need attention`);
|
|
104
|
+
}
|
|
105
|
+
return builder
|
|
106
|
+
.withSummary(summary)
|
|
107
|
+
.withData(data)
|
|
108
|
+
.withHints(hints)
|
|
109
|
+
.buildContent();
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=security-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-summary.js","sourceRoot":"","sources":["../../../src/tools/exploration/security-summary.ts"],"names":[],"mappings":"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"}
|