skannr 0.2.1 → 0.2.2
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/dist/guard/rules-loader.d.ts +1 -1
- package/dist/guard/rules-loader.d.ts.map +1 -1
- package/dist/guard/rules-loader.js +47 -12
- package/dist/guard/rules-loader.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/scanner.d.ts +0 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +0 -7
- package/dist/scanner.js.map +1 -1
- package/package.json +1 -1
- package/src/guard/rules-loader.ts +48 -14
- package/src/index.ts +2 -2
- package/src/scanner.ts +0 -7
- package/gemini-extension/GEMINI.md +0 -26
- package/gemini-extension/gemini-extension.json +0 -12
- package/gemini-extension/package.json +0 -14
- package/gemini-extension/src/server.ts +0 -69
- package/gemini-extension/tsconfig.json +0 -14
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Returns validated rules or throws with a clear error message.
|
|
4
4
|
*/
|
|
5
5
|
import type { GuardRule, GuardConfig } from './types';
|
|
6
|
-
/** Load and validate rules from the project root. */
|
|
6
|
+
/** Load and validate rules from the project root. Falls back to defaults if no file exists. */
|
|
7
7
|
export declare function loadRules(root: string): GuardRule[];
|
|
8
8
|
/** Load guard provider configuration from .skannr/guard.json or env vars. */
|
|
9
9
|
export declare function loadGuardConfig(root: string): GuardConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-loader.d.ts","sourceRoot":"","sources":["../../src/guard/rules-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rules-loader.d.ts","sourceRoot":"","sources":["../../src/guard/rules-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwDtD,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAwBnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA2BzD"}
|
|
@@ -49,21 +49,56 @@ const RULES_PATHS = [
|
|
|
49
49
|
'.skannr/rules.yaml',
|
|
50
50
|
'.skannr/rules.yml',
|
|
51
51
|
];
|
|
52
|
-
/**
|
|
52
|
+
/** Built-in default rules used when no .skannr/rules.json exists. */
|
|
53
|
+
const DEFAULT_RULES = [
|
|
54
|
+
{
|
|
55
|
+
id: 'no-any-type',
|
|
56
|
+
description: 'Do not use the `any` type in TypeScript; use explicit types or `unknown`.',
|
|
57
|
+
severity: 'high',
|
|
58
|
+
fixable: true,
|
|
59
|
+
category: 'type-safety',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'no-console-log',
|
|
63
|
+
description: 'Remove console.log statements before committing; use a proper logger in production code.',
|
|
64
|
+
severity: 'medium',
|
|
65
|
+
fixable: true,
|
|
66
|
+
category: 'code-quality',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'error-handling',
|
|
70
|
+
description: 'Async functions that can throw should have error handling (try/catch or .catch()).',
|
|
71
|
+
severity: 'high',
|
|
72
|
+
fixable: false,
|
|
73
|
+
category: 'reliability',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'no-hardcoded-secrets',
|
|
77
|
+
description: 'Do not hardcode API keys, passwords, tokens, or connection strings. Use environment variables.',
|
|
78
|
+
severity: 'critical',
|
|
79
|
+
fixable: false,
|
|
80
|
+
category: 'security',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'function-complexity',
|
|
84
|
+
description: 'Functions should not exceed ~40 lines. Extract helper functions for complex logic.',
|
|
85
|
+
severity: 'medium',
|
|
86
|
+
fixable: false,
|
|
87
|
+
category: 'maintainability',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'unused-imports',
|
|
91
|
+
description: 'Remove unused imports.',
|
|
92
|
+
severity: 'low',
|
|
93
|
+
fixable: true,
|
|
94
|
+
category: 'code-quality',
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
/** Load and validate rules from the project root. Falls back to defaults if no file exists. */
|
|
53
98
|
function loadRules(root) {
|
|
54
99
|
const rulesPath = findRulesFile(root);
|
|
55
100
|
if (!rulesPath) {
|
|
56
|
-
|
|
57
|
-
`Example:\n` +
|
|
58
|
-
`{\n` +
|
|
59
|
-
` "rules": [{\n` +
|
|
60
|
-
` "id": "no-any-type",\n` +
|
|
61
|
-
` "description": "Do not use the \`any\` type in TypeScript.",\n` +
|
|
62
|
-
` "severity": "high",\n` +
|
|
63
|
-
` "fixable": true,\n` +
|
|
64
|
-
` "category": "type-safety"\n` +
|
|
65
|
-
` }]\n` +
|
|
66
|
-
`}`);
|
|
101
|
+
return DEFAULT_RULES;
|
|
67
102
|
}
|
|
68
103
|
const raw = fs.readFileSync(rulesPath, 'utf-8');
|
|
69
104
|
let parsed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-loader.js","sourceRoot":"","sources":["../../src/guard/rules-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rules-loader.js","sourceRoot":"","sources":["../../src/guard/rules-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare function analyzeProject(options?: AnalyzeOptions & {
|
|
|
10
10
|
export { rankFiles } from './ranker';
|
|
11
11
|
export { rankFilesEnhanced } from './ranker-enhanced';
|
|
12
12
|
export { buildSkeletonForFile } from './skeletonizer';
|
|
13
|
-
export { scanTypeScriptFiles,
|
|
13
|
+
export { scanTypeScriptFiles, scanFiles, discoverModules } from './scanner';
|
|
14
14
|
export { countTokens } from './tokenizer';
|
|
15
15
|
export { buildSkeletonWithMapping, getSymbolDetails, saveMappingToFile, loadMappingFromFile, type SymbolMapping, type SymbolLocation, } from './mapper';
|
|
16
16
|
export type { AnalyzeOptions, AnalysisResult, FileAnalysis, RankedFile, SymbolLineRange, } from './types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EACL,cAAc,EACd,cAAc,EAGf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAG5D,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,cAAc,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,cAAc,CAAC,CAyIzB;AA2BD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EACL,cAAc,EACd,cAAc,EAGf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAG5D,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,cAAc,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,cAAc,CAAC,CAyIzB;AA2BD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.DEFAULT_CACHE_CONFIG = exports.initializeCacheManager = exports.getCacheManager = exports.CacheManager = exports.loadMappingFromFile = exports.saveMappingToFile = exports.getSymbolDetails = exports.buildSkeletonWithMapping = exports.countTokens = exports.discoverModules = exports.scanFiles = exports.
|
|
39
|
+
exports.DEFAULT_CACHE_CONFIG = exports.initializeCacheManager = exports.getCacheManager = exports.CacheManager = exports.loadMappingFromFile = exports.saveMappingToFile = exports.getSymbolDetails = exports.buildSkeletonWithMapping = exports.countTokens = exports.discoverModules = exports.scanFiles = exports.scanTypeScriptFiles = exports.buildSkeletonForFile = exports.rankFilesEnhanced = exports.rankFiles = void 0;
|
|
40
40
|
exports.analyzeProject = analyzeProject;
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const scanner_1 = require("./scanner");
|
|
@@ -164,7 +164,6 @@ var skeletonizer_2 = require("./skeletonizer");
|
|
|
164
164
|
Object.defineProperty(exports, "buildSkeletonForFile", { enumerable: true, get: function () { return skeletonizer_2.buildSkeletonForFile; } });
|
|
165
165
|
var scanner_2 = require("./scanner");
|
|
166
166
|
Object.defineProperty(exports, "scanTypeScriptFiles", { enumerable: true, get: function () { return scanner_2.scanTypeScriptFiles; } });
|
|
167
|
-
Object.defineProperty(exports, "scanRocketChatFiles", { enumerable: true, get: function () { return scanner_2.scanRocketChatFiles; } });
|
|
168
167
|
Object.defineProperty(exports, "scanFiles", { enumerable: true, get: function () { return scanner_2.scanFiles; } });
|
|
169
168
|
Object.defineProperty(exports, "discoverModules", { enumerable: true, get: function () { return scanner_2.discoverModules; } });
|
|
170
169
|
var tokenizer_2 = require("./tokenizer");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,wCA8IC;AAlKD,2CAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts
CHANGED
|
@@ -11,6 +11,5 @@ export interface ScanOptions {
|
|
|
11
11
|
export declare function discoverModules(root: string): string[];
|
|
12
12
|
export declare function scanFiles(rootDir: string, options?: ScanOptions): string[];
|
|
13
13
|
export declare function scanTypeScriptFiles(rootDir: string): string[];
|
|
14
|
-
export declare function scanRocketChatFiles(rootDir: string, moduleKeys?: string[]): string[];
|
|
15
14
|
export declare function readFileContent(filePath: string): string | null;
|
|
16
15
|
//# sourceMappingURL=scanner.d.ts.map
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,gBAAgB,UAe5B,CAAC;AAwCF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,EAAE,CAgD9E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,gBAAgB,UAe5B,CAAC;AAwCF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,EAAE,CAgD9E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D"}
|
package/dist/scanner.js
CHANGED
|
@@ -43,7 +43,6 @@ exports.DEFAULT_EXCLUDES = void 0;
|
|
|
43
43
|
exports.discoverModules = discoverModules;
|
|
44
44
|
exports.scanFiles = scanFiles;
|
|
45
45
|
exports.scanTypeScriptFiles = scanTypeScriptFiles;
|
|
46
|
-
exports.scanRocketChatFiles = scanRocketChatFiles;
|
|
47
46
|
exports.readFileContent = readFileContent;
|
|
48
47
|
const ignore_1 = __importDefault(require("ignore"));
|
|
49
48
|
const fs = __importStar(require("fs"));
|
|
@@ -165,12 +164,6 @@ function scanFiles(rootDir, options = {}) {
|
|
|
165
164
|
function scanTypeScriptFiles(rootDir) {
|
|
166
165
|
return scanFiles(rootDir, { extensions: ['.ts', '.tsx'] });
|
|
167
166
|
}
|
|
168
|
-
function scanRocketChatFiles(rootDir, moduleKeys) {
|
|
169
|
-
return scanFiles(rootDir, {
|
|
170
|
-
extensions: ['.ts', '.tsx'],
|
|
171
|
-
moduleKeys,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
167
|
function readFileContent(filePath) {
|
|
175
168
|
try {
|
|
176
169
|
return fs.readFileSync(filePath, 'utf-8');
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEH,0CAqBC;AAED,8BAgDC;AAED,kDAEC;AAED,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,23 +16,57 @@ const RULES_PATHS = [
|
|
|
16
16
|
'.skannr/rules.yml',
|
|
17
17
|
];
|
|
18
18
|
|
|
19
|
-
/**
|
|
19
|
+
/** Built-in default rules used when no .skannr/rules.json exists. */
|
|
20
|
+
const DEFAULT_RULES: GuardRule[] = [
|
|
21
|
+
{
|
|
22
|
+
id: 'no-any-type',
|
|
23
|
+
description: 'Do not use the `any` type in TypeScript; use explicit types or `unknown`.',
|
|
24
|
+
severity: 'high',
|
|
25
|
+
fixable: true,
|
|
26
|
+
category: 'type-safety',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'no-console-log',
|
|
30
|
+
description: 'Remove console.log statements before committing; use a proper logger in production code.',
|
|
31
|
+
severity: 'medium',
|
|
32
|
+
fixable: true,
|
|
33
|
+
category: 'code-quality',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'error-handling',
|
|
37
|
+
description: 'Async functions that can throw should have error handling (try/catch or .catch()).',
|
|
38
|
+
severity: 'high',
|
|
39
|
+
fixable: false,
|
|
40
|
+
category: 'reliability',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'no-hardcoded-secrets',
|
|
44
|
+
description: 'Do not hardcode API keys, passwords, tokens, or connection strings. Use environment variables.',
|
|
45
|
+
severity: 'critical',
|
|
46
|
+
fixable: false,
|
|
47
|
+
category: 'security',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'function-complexity',
|
|
51
|
+
description: 'Functions should not exceed ~40 lines. Extract helper functions for complex logic.',
|
|
52
|
+
severity: 'medium',
|
|
53
|
+
fixable: false,
|
|
54
|
+
category: 'maintainability',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'unused-imports',
|
|
58
|
+
description: 'Remove unused imports.',
|
|
59
|
+
severity: 'low',
|
|
60
|
+
fixable: true,
|
|
61
|
+
category: 'code-quality',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/** Load and validate rules from the project root. Falls back to defaults if no file exists. */
|
|
20
66
|
export function loadRules(root: string): GuardRule[] {
|
|
21
67
|
const rulesPath = findRulesFile(root);
|
|
22
68
|
if (!rulesPath) {
|
|
23
|
-
|
|
24
|
-
`No rules file found. Create .skannr/rules.json with your team's review rules.\n` +
|
|
25
|
-
`Example:\n` +
|
|
26
|
-
`{\n` +
|
|
27
|
-
` "rules": [{\n` +
|
|
28
|
-
` "id": "no-any-type",\n` +
|
|
29
|
-
` "description": "Do not use the \`any\` type in TypeScript.",\n` +
|
|
30
|
-
` "severity": "high",\n` +
|
|
31
|
-
` "fixable": true,\n` +
|
|
32
|
-
` "category": "type-safety"\n` +
|
|
33
|
-
` }]\n` +
|
|
34
|
-
`}`,
|
|
35
|
-
);
|
|
69
|
+
return DEFAULT_RULES;
|
|
36
70
|
}
|
|
37
71
|
|
|
38
72
|
const raw = fs.readFileSync(rulesPath, 'utf-8');
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import * as path from 'path';
|
|
6
|
-
import { discoverModules, readFileContent, scanFiles,
|
|
6
|
+
import { discoverModules, readFileContent, scanFiles, scanTypeScriptFiles } from './scanner';
|
|
7
7
|
import { rankFiles } from './ranker';
|
|
8
8
|
import { rankFilesEnhanced } from './ranker-enhanced';
|
|
9
9
|
import { buildSkeletonForFile } from './skeletonizer';
|
|
@@ -194,7 +194,7 @@ function resolveExtensions(
|
|
|
194
194
|
export { rankFiles } from './ranker';
|
|
195
195
|
export { rankFilesEnhanced } from './ranker-enhanced';
|
|
196
196
|
export { buildSkeletonForFile } from './skeletonizer';
|
|
197
|
-
export { scanTypeScriptFiles,
|
|
197
|
+
export { scanTypeScriptFiles, scanFiles, discoverModules } from './scanner';
|
|
198
198
|
export { countTokens } from './tokenizer';
|
|
199
199
|
export {
|
|
200
200
|
buildSkeletonWithMapping,
|
package/src/scanner.ts
CHANGED
|
@@ -145,13 +145,6 @@ export function scanTypeScriptFiles(rootDir: string): string[] {
|
|
|
145
145
|
return scanFiles(rootDir, { extensions: ['.ts', '.tsx'] });
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
export function scanRocketChatFiles(rootDir: string, moduleKeys?: string[]): string[] {
|
|
149
|
-
return scanFiles(rootDir, {
|
|
150
|
-
extensions: ['.ts', '.tsx'],
|
|
151
|
-
moduleKeys,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
148
|
export function readFileContent(filePath: string): string | null {
|
|
156
149
|
try {
|
|
157
150
|
return fs.readFileSync(filePath, 'utf-8');
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Universal Code Analyzer
|
|
2
|
-
|
|
3
|
-
You have a tool called `scan_codebase` that scans any repository and returns compressed **skeletons** — function signatures and types without the full implementation bodies.
|
|
4
|
-
|
|
5
|
-
## When to use it
|
|
6
|
-
|
|
7
|
-
Use `scan_codebase` before reading source files. It tells you which files are relevant and shows their structure without burning tokens on full file contents.
|
|
8
|
-
|
|
9
|
-
## Parameters
|
|
10
|
-
|
|
11
|
-
- `question` (**required**): what you want to understand, e.g. `"how are messages sent?"`
|
|
12
|
-
- `root` (**required**): absolute path to the repository, e.g. `/home/user/my-project`
|
|
13
|
-
- `limit`: how many files to return (default: 10)
|
|
14
|
-
- `modules`: narrow the search to specific modules or directories
|
|
15
|
-
|
|
16
|
-
## Example
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
scan_codebase({
|
|
20
|
-
question: "How does the authentication flow work?",
|
|
21
|
-
root: "/home/user/my-project",
|
|
22
|
-
modules: ["auth"]
|
|
23
|
-
})
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
The response includes each file's path, relevance score, skeleton code, and token counts so you can decide what to read in full.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "code-analyzer",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Analyze any codebase and return token-efficient structural skeletons",
|
|
5
|
-
"mcpServers": {
|
|
6
|
-
"code-analyzer": {
|
|
7
|
-
"command": "node",
|
|
8
|
-
"args": ["${extensionPath}/dist/server.js"]
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
"contextFileName": "GEMINI.md"
|
|
12
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
-
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
import { analyzeProject } from '../../dist/index';
|
|
5
|
-
|
|
6
|
-
const server = new Server(
|
|
7
|
-
{ name: 'code-analyzer', version: '0.1.0' },
|
|
8
|
-
{ capabilities: { tools: {} } }
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
12
|
-
tools: [
|
|
13
|
-
{
|
|
14
|
-
name: 'scan_codebase',
|
|
15
|
-
description: 'Analyzes any codebase to answer questions about its structure and architecture. Scans files, generates structural skeletons, and ranks results using hybrid retrieval. Supports TypeScript, JavaScript, and Python. Pass the root path of any repository.',
|
|
16
|
-
inputSchema: {
|
|
17
|
-
type: 'object',
|
|
18
|
-
properties: {
|
|
19
|
-
question: {
|
|
20
|
-
type: 'string',
|
|
21
|
-
description: 'What you want to understand about the codebase',
|
|
22
|
-
},
|
|
23
|
-
root: {
|
|
24
|
-
type: 'string',
|
|
25
|
-
description: 'Absolute path to the repository root',
|
|
26
|
-
},
|
|
27
|
-
limit: {
|
|
28
|
-
type: 'number',
|
|
29
|
-
description: 'Max number of files to return (default: 10)',
|
|
30
|
-
},
|
|
31
|
-
modules: {
|
|
32
|
-
type: 'array',
|
|
33
|
-
items: { type: 'string' },
|
|
34
|
-
description: 'Optional module keys (or directory names) to narrow the search scope',
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
required: ['question', 'root'],
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
}));
|
|
42
|
-
|
|
43
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
44
|
-
if (request.params.name !== 'scan_codebase') {
|
|
45
|
-
throw new Error(`Unknown tool: ${request.params.name}`);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const { question, root, limit = 10, modules } = request.params.arguments as {
|
|
49
|
-
question: string;
|
|
50
|
-
root: string;
|
|
51
|
-
limit?: number;
|
|
52
|
-
modules?: string[];
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const result = await analyzeProject({
|
|
56
|
-
question,
|
|
57
|
-
root,
|
|
58
|
-
limit,
|
|
59
|
-
moduleKeys: modules,
|
|
60
|
-
enhancedRanking: true,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
const transport = new StdioServerTransport();
|
|
69
|
-
server.connect(transport).catch(console.error);
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"outDir": "./dist",
|
|
6
|
-
"rootDir": "./src",
|
|
7
|
-
"strict": true,
|
|
8
|
-
"esModuleInterop": true,
|
|
9
|
-
"skipLibCheck": true,
|
|
10
|
-
"moduleResolution": "node",
|
|
11
|
-
"types": ["node"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["src/**/*"]
|
|
14
|
-
}
|