agentlint 0.1.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/CHANGELOG.md +32 -0
- package/LICENSE +190 -0
- package/README.md +246 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +351 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/diff/index.d.ts +16 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +204 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +2 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +18 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +369 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +12 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/parsers/base.d.ts +104 -0
- package/dist/parsers/base.d.ts.map +1 -0
- package/dist/parsers/base.js +373 -0
- package/dist/parsers/base.js.map +1 -0
- package/dist/parsers/claude.d.ts +30 -0
- package/dist/parsers/claude.d.ts.map +1 -0
- package/dist/parsers/claude.js +453 -0
- package/dist/parsers/claude.js.map +1 -0
- package/dist/parsers/cursor.d.ts +24 -0
- package/dist/parsers/cursor.d.ts.map +1 -0
- package/dist/parsers/cursor.js +305 -0
- package/dist/parsers/cursor.js.map +1 -0
- package/dist/parsers/factory.d.ts +30 -0
- package/dist/parsers/factory.d.ts.map +1 -0
- package/dist/parsers/factory.js +78 -0
- package/dist/parsers/factory.js.map +1 -0
- package/dist/parsers/index.d.ts +5 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +21 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/policy/index.d.ts +3 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +19 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/loader.d.ts +23 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +252 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/types.d.ts +79 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +99 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/reports/index.d.ts +14 -0
- package/dist/reports/index.d.ts.map +1 -0
- package/dist/reports/index.js +54 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/json.d.ts +16 -0
- package/dist/reports/json.d.ts.map +1 -0
- package/dist/reports/json.js +126 -0
- package/dist/reports/json.js.map +1 -0
- package/dist/reports/sarif.d.ts +20 -0
- package/dist/reports/sarif.d.ts.map +1 -0
- package/dist/reports/sarif.js +169 -0
- package/dist/reports/sarif.js.map +1 -0
- package/dist/reports/text.d.ts +25 -0
- package/dist/reports/text.d.ts.map +1 -0
- package/dist/reports/text.js +283 -0
- package/dist/reports/text.js.map +1 -0
- package/dist/reports/types.d.ts +88 -0
- package/dist/reports/types.d.ts.map +1 -0
- package/dist/reports/types.js +6 -0
- package/dist/reports/types.js.map +1 -0
- package/dist/rules/base.d.ts +16 -0
- package/dist/rules/base.d.ts.map +1 -0
- package/dist/rules/base.js +48 -0
- package/dist/rules/base.js.map +1 -0
- package/dist/rules/engine.d.ts +61 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +195 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/execution.d.ts +33 -0
- package/dist/rules/execution.d.ts.map +1 -0
- package/dist/rules/execution.js +154 -0
- package/dist/rules/execution.js.map +1 -0
- package/dist/rules/filesystem.d.ts +36 -0
- package/dist/rules/filesystem.d.ts.map +1 -0
- package/dist/rules/filesystem.js +227 -0
- package/dist/rules/filesystem.js.map +1 -0
- package/dist/rules/hook.d.ts +25 -0
- package/dist/rules/hook.d.ts.map +1 -0
- package/dist/rules/hook.js +112 -0
- package/dist/rules/hook.js.map +1 -0
- package/dist/rules/index.d.ts +12 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +28 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/instruction.d.ts +25 -0
- package/dist/rules/instruction.d.ts.map +1 -0
- package/dist/rules/instruction.js +162 -0
- package/dist/rules/instruction.js.map +1 -0
- package/dist/rules/network.d.ts +33 -0
- package/dist/rules/network.d.ts.map +1 -0
- package/dist/rules/network.js +145 -0
- package/dist/rules/network.js.map +1 -0
- package/dist/rules/observability.d.ts +25 -0
- package/dist/rules/observability.d.ts.map +1 -0
- package/dist/rules/observability.js +105 -0
- package/dist/rules/observability.js.map +1 -0
- package/dist/rules/scope.d.ts +37 -0
- package/dist/rules/scope.d.ts.map +1 -0
- package/dist/rules/scope.js +173 -0
- package/dist/rules/scope.js.map +1 -0
- package/dist/rules/secrets.d.ts +35 -0
- package/dist/rules/secrets.d.ts.map +1 -0
- package/dist/rules/secrets.js +273 -0
- package/dist/rules/secrets.js.map +1 -0
- package/dist/rules/types.d.ts +58 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +6 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/scanner.d.ts +61 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +441 -0
- package/dist/scanner.js.map +1 -0
- package/dist/utils/hash.d.ts +28 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +94 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cursor configuration parser
|
|
4
|
+
* Handles: .cursorrules
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CursorParser = void 0;
|
|
8
|
+
const base_1 = require("./base");
|
|
9
|
+
const hash_1 = require("../utils/hash");
|
|
10
|
+
class CursorParser extends base_1.BaseParser {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
super(options);
|
|
13
|
+
}
|
|
14
|
+
getToolFamily() {
|
|
15
|
+
return 'cursor';
|
|
16
|
+
}
|
|
17
|
+
canHandle(filePath) {
|
|
18
|
+
const normalizedPath = filePath.toLowerCase();
|
|
19
|
+
return normalizedPath.endsWith('.cursorrules');
|
|
20
|
+
}
|
|
21
|
+
parse(filePath, content) {
|
|
22
|
+
const errors = [];
|
|
23
|
+
const warnings = [];
|
|
24
|
+
try {
|
|
25
|
+
const document = this.createBaseDocument(filePath, content, 'rules', 'text');
|
|
26
|
+
// Cursor rules are typically interactive context
|
|
27
|
+
document.context_profile = {
|
|
28
|
+
primary: 'interactive',
|
|
29
|
+
triggers: [],
|
|
30
|
+
requires_user_confirmation: true,
|
|
31
|
+
runs_in_privileged_env: false,
|
|
32
|
+
};
|
|
33
|
+
// Parse the content
|
|
34
|
+
this.parseRulesContent(document, content, errors, warnings);
|
|
35
|
+
// Derive capabilities from actions
|
|
36
|
+
document.capabilities = this.deriveCapabilities(document.actions);
|
|
37
|
+
// Update parse result
|
|
38
|
+
if (errors.length > 0) {
|
|
39
|
+
document.parse.status = 'partial';
|
|
40
|
+
document.parse.errors = errors;
|
|
41
|
+
}
|
|
42
|
+
if (warnings.length > 0) {
|
|
43
|
+
document.parse.notes = warnings;
|
|
44
|
+
}
|
|
45
|
+
return { document, errors, warnings };
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
49
|
+
return {
|
|
50
|
+
document: null,
|
|
51
|
+
errors: [`Failed to parse ${filePath}: ${errorMsg}`],
|
|
52
|
+
warnings,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
parseRulesContent(doc, content, errors, warnings) {
|
|
57
|
+
const lines = content.split('\n');
|
|
58
|
+
const context = 'interactive';
|
|
59
|
+
let currentBlock = null;
|
|
60
|
+
let inCodeBlock = false;
|
|
61
|
+
let codeBlockStart = 0;
|
|
62
|
+
let codeBlockContent = [];
|
|
63
|
+
for (let i = 0; i < lines.length; i++) {
|
|
64
|
+
const line = lines[i];
|
|
65
|
+
const lineNum = i + 1;
|
|
66
|
+
// Handle code blocks
|
|
67
|
+
if (line.trim().startsWith('```')) {
|
|
68
|
+
if (!inCodeBlock) {
|
|
69
|
+
inCodeBlock = true;
|
|
70
|
+
codeBlockStart = lineNum;
|
|
71
|
+
codeBlockContent = [];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// End of code block - analyze content
|
|
75
|
+
const fullCode = codeBlockContent.join('\n');
|
|
76
|
+
this.analyzeCodeBlock(doc, fullCode, {
|
|
77
|
+
start_line: codeBlockStart,
|
|
78
|
+
end_line: lineNum,
|
|
79
|
+
}, context);
|
|
80
|
+
inCodeBlock = false;
|
|
81
|
+
codeBlockContent = [];
|
|
82
|
+
}
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (inCodeBlock) {
|
|
86
|
+
codeBlockContent.push(line);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Extract rule blocks
|
|
90
|
+
if (this.isRuleStart(line)) {
|
|
91
|
+
if (currentBlock) {
|
|
92
|
+
doc.instruction_blocks.push(currentBlock);
|
|
93
|
+
}
|
|
94
|
+
currentBlock = {
|
|
95
|
+
block_id: (0, hash_1.generateId)('block'),
|
|
96
|
+
kind: this.classifyRuleKind(line),
|
|
97
|
+
text: line,
|
|
98
|
+
anchors: { start_line: lineNum, end_line: lineNum },
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else if (currentBlock && line.trim()) {
|
|
102
|
+
currentBlock.text += '\n' + line;
|
|
103
|
+
currentBlock.anchors.end_line = lineNum;
|
|
104
|
+
}
|
|
105
|
+
else if (!currentBlock && line.trim()) {
|
|
106
|
+
// Start a new block for non-empty lines
|
|
107
|
+
currentBlock = {
|
|
108
|
+
block_id: (0, hash_1.generateId)('block'),
|
|
109
|
+
kind: 'narrative',
|
|
110
|
+
text: line,
|
|
111
|
+
anchors: { start_line: lineNum, end_line: lineNum },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Detect action patterns in the line
|
|
115
|
+
this.detectActionPatterns(doc, line, lineNum, context);
|
|
116
|
+
}
|
|
117
|
+
if (currentBlock) {
|
|
118
|
+
doc.instruction_blocks.push(currentBlock);
|
|
119
|
+
}
|
|
120
|
+
// Extract declared intents from instruction blocks
|
|
121
|
+
doc.declared_intents = this.extractDeclaredIntents(doc.instruction_blocks);
|
|
122
|
+
// Check for instruction override patterns
|
|
123
|
+
this.detectInstructionOverrides(doc, content);
|
|
124
|
+
}
|
|
125
|
+
analyzeCodeBlock(doc, code, anchors, context) {
|
|
126
|
+
// Check if it contains shell commands
|
|
127
|
+
if (this.containsShellCommands(code)) {
|
|
128
|
+
const isDynamic = this.isDynamicShellExecution(code);
|
|
129
|
+
const action = this.createShellAction(code.trim(), anchors, context, isDynamic, isDynamic ? 0.95 : 0.8);
|
|
130
|
+
doc.actions.push(action);
|
|
131
|
+
}
|
|
132
|
+
// Check for URLs
|
|
133
|
+
const urls = this.extractUrls(code);
|
|
134
|
+
for (const url of urls) {
|
|
135
|
+
const networkAction = this.createNetworkAction(url, anchors, context, this.isExecutableUrl(url), 0.85);
|
|
136
|
+
doc.actions.push(networkAction);
|
|
137
|
+
}
|
|
138
|
+
// Check for secrets
|
|
139
|
+
const envVars = this.extractEnvVars(code);
|
|
140
|
+
const secretVars = envVars.filter(v => this.isKnownSecretVar(v));
|
|
141
|
+
if (secretVars.length > 0) {
|
|
142
|
+
const action = this.createSecretsAction(secretVars, [], anchors, context, [], 0.85);
|
|
143
|
+
doc.actions.push(action);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
detectActionPatterns(doc, line, lineNum, context) {
|
|
147
|
+
const anchors = { start_line: lineNum, end_line: lineNum };
|
|
148
|
+
// Check for command patterns like "run X", "execute X", "always run X"
|
|
149
|
+
const commandPatterns = [
|
|
150
|
+
/\balways\s+run\s+["'`]?([^"'`]+)["'`]?/i,
|
|
151
|
+
/\brun\s+tests?\s+(?:using|with)\s+["'`]?([^"'`]+)["'`]?/i,
|
|
152
|
+
/\bexecute\s+["'`]?([^"'`]+)["'`]?/i,
|
|
153
|
+
/\buse\s+["'`]?([^"'`]+)["'`]?\s+(?:to|for)/i,
|
|
154
|
+
];
|
|
155
|
+
for (const pattern of commandPatterns) {
|
|
156
|
+
const match = line.match(pattern);
|
|
157
|
+
if (match && match[1]) {
|
|
158
|
+
const command = match[1].trim();
|
|
159
|
+
if (this.looksLikeCommand(command)) {
|
|
160
|
+
const action = this.createShellAction(command, anchors, context, false, 0.7);
|
|
161
|
+
doc.actions.push(action);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Check for file write patterns
|
|
166
|
+
const writePatterns = [
|
|
167
|
+
/\bwrite\s+(?:to\s+)?["'`]?([^"'`\s]+)["'`]?/i,
|
|
168
|
+
/\bmodify\s+["'`]?([^"'`\s]+)["'`]?/i,
|
|
169
|
+
/\bedit\s+(?:files?\s+in\s+)?["'`]?([^"'`\s]+)["'`]?/i,
|
|
170
|
+
/\bcreate\s+(?:files?\s+in\s+)?["'`]?([^"'`\s]+)["'`]?/i,
|
|
171
|
+
];
|
|
172
|
+
for (const pattern of writePatterns) {
|
|
173
|
+
const match = line.match(pattern);
|
|
174
|
+
if (match && match[1]) {
|
|
175
|
+
const path = match[1];
|
|
176
|
+
if (!path.startsWith('http') && this.looksLikePath(path)) {
|
|
177
|
+
const action = this.createFileWriteAction([path], anchors, context, 0.6);
|
|
178
|
+
doc.actions.push(action);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check for "write anywhere" or unscoped write patterns
|
|
183
|
+
if (/\bwrite\s+(?:to\s+)?(?:any|all|anywhere)/i.test(line)) {
|
|
184
|
+
const action = this.createFileWriteAction(['**/*'], anchors, context, 0.8);
|
|
185
|
+
doc.actions.push(action);
|
|
186
|
+
}
|
|
187
|
+
// Check for network access patterns
|
|
188
|
+
const networkPatterns = [
|
|
189
|
+
/\bfetch\s+(?:from\s+)?["'`]?(https?:\/\/[^"'`\s]+)["'`]?/i,
|
|
190
|
+
/\bdownload\s+(?:from\s+)?["'`]?(https?:\/\/[^"'`\s]+)["'`]?/i,
|
|
191
|
+
/\baccess\s+["'`]?(https?:\/\/[^"'`\s]+)["'`]?/i,
|
|
192
|
+
];
|
|
193
|
+
for (const pattern of networkPatterns) {
|
|
194
|
+
const match = line.match(pattern);
|
|
195
|
+
if (match && match[1]) {
|
|
196
|
+
const url = match[1];
|
|
197
|
+
const action = this.createNetworkAction(url, anchors, context, this.isExecutableUrl(url), 0.7);
|
|
198
|
+
doc.actions.push(action);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Add URLs found in line as links
|
|
202
|
+
const urls = this.extractUrls(line);
|
|
203
|
+
for (const url of urls) {
|
|
204
|
+
doc.links.push({
|
|
205
|
+
kind: 'url',
|
|
206
|
+
target: url,
|
|
207
|
+
anchors,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
detectInstructionOverrides(doc, content) {
|
|
212
|
+
const overridePatterns = [
|
|
213
|
+
/ignore\s+(?:all\s+)?previous\s+(?:rules?|instructions?)/i,
|
|
214
|
+
/disregard\s+(?:all\s+)?(?:previous\s+)?(?:rules?|instructions?)/i,
|
|
215
|
+
/override\s+(?:all\s+)?(?:rules?|restrictions?)/i,
|
|
216
|
+
/bypass\s+(?:all\s+)?(?:safety\s+)?(?:rules?|restrictions?)/i,
|
|
217
|
+
/disable\s+(?:all\s+)?safeguards?/i,
|
|
218
|
+
];
|
|
219
|
+
const lines = content.split('\n');
|
|
220
|
+
for (let i = 0; i < lines.length; i++) {
|
|
221
|
+
const line = lines[i];
|
|
222
|
+
for (const pattern of overridePatterns) {
|
|
223
|
+
if (pattern.test(line)) {
|
|
224
|
+
doc.actions.push({
|
|
225
|
+
action_id: (0, hash_1.generateId)('action'),
|
|
226
|
+
type: 'unknown',
|
|
227
|
+
context: doc.context_profile.primary,
|
|
228
|
+
summary: 'Instruction override pattern detected',
|
|
229
|
+
anchors: { start_line: i + 1, end_line: i + 1 },
|
|
230
|
+
evidence: [
|
|
231
|
+
{
|
|
232
|
+
kind: 'regex',
|
|
233
|
+
value: line.trim(),
|
|
234
|
+
confidence: 0.95,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
isRuleStart(line) {
|
|
243
|
+
// Check for numbered rules, bullet points, or emphasis
|
|
244
|
+
return /^[-*•]\s+/.test(line) ||
|
|
245
|
+
/^\d+[.)]\s+/.test(line) ||
|
|
246
|
+
/^#+\s+/.test(line) ||
|
|
247
|
+
/^\*\*/.test(line);
|
|
248
|
+
}
|
|
249
|
+
classifyRuleKind(line) {
|
|
250
|
+
const lower = line.toLowerCase();
|
|
251
|
+
if (/\b(must|always|never|required|shall)\b/i.test(lower)) {
|
|
252
|
+
return 'rule';
|
|
253
|
+
}
|
|
254
|
+
if (/\b(should|prefer|recommend|consider)\b/i.test(lower)) {
|
|
255
|
+
return 'guideline';
|
|
256
|
+
}
|
|
257
|
+
if (/\b(run|execute|command|install)\b/i.test(lower)) {
|
|
258
|
+
return 'command';
|
|
259
|
+
}
|
|
260
|
+
return 'unknown';
|
|
261
|
+
}
|
|
262
|
+
extractDeclaredIntents(blocks) {
|
|
263
|
+
const intents = [];
|
|
264
|
+
for (const block of blocks) {
|
|
265
|
+
// Extract first line as intent summary
|
|
266
|
+
const firstLine = block.text.split('\n')[0];
|
|
267
|
+
if (firstLine.length < 100) {
|
|
268
|
+
intents.push(firstLine.replace(/^[-*•#\d.)\s]+/, '').trim());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return intents.filter(i => i.length > 0);
|
|
272
|
+
}
|
|
273
|
+
isDynamicShellExecution(text) {
|
|
274
|
+
const patterns = [
|
|
275
|
+
/curl\s+.*\|\s*(?:bash|sh|zsh)/i,
|
|
276
|
+
/wget\s+.*\|\s*(?:bash|sh|zsh)/i,
|
|
277
|
+
/\beval\s+\$/i,
|
|
278
|
+
/\beval\s+["'`]/i,
|
|
279
|
+
];
|
|
280
|
+
return patterns.some(p => p.test(text));
|
|
281
|
+
}
|
|
282
|
+
containsShellCommands(text) {
|
|
283
|
+
const commands = [
|
|
284
|
+
'npm', 'npx', 'yarn', 'pnpm',
|
|
285
|
+
'pip', 'pip3', 'python', 'python3',
|
|
286
|
+
'make', 'cargo', 'go build', 'go run',
|
|
287
|
+
'docker', 'kubectl',
|
|
288
|
+
'git', 'curl', 'wget',
|
|
289
|
+
'bash', 'sh', 'zsh',
|
|
290
|
+
];
|
|
291
|
+
const lower = text.toLowerCase();
|
|
292
|
+
return commands.some(cmd => new RegExp(`\\b${cmd}\\b`, 'i').test(lower));
|
|
293
|
+
}
|
|
294
|
+
looksLikeCommand(text) {
|
|
295
|
+
return this.containsShellCommands(text) ||
|
|
296
|
+
/^[\w-]+\s+/.test(text.trim());
|
|
297
|
+
}
|
|
298
|
+
looksLikePath(text) {
|
|
299
|
+
return /^[./~]/.test(text) ||
|
|
300
|
+
/\.(js|ts|py|rb|go|rs|java|c|cpp|h|hpp|md|txt|json|yaml|yml)$/i.test(text) ||
|
|
301
|
+
/^[\w-]+\//.test(text);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
exports.CursorParser = CursorParser;
|
|
305
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/parsers/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser factory - creates appropriate parser based on file type
|
|
3
|
+
*/
|
|
4
|
+
import { BaseParser, ParserOptions, ParserResult } from './base';
|
|
5
|
+
import { ToolFamily } from '../ir/types';
|
|
6
|
+
export declare class ParserFactory {
|
|
7
|
+
private parsers;
|
|
8
|
+
constructor(options: ParserOptions);
|
|
9
|
+
/**
|
|
10
|
+
* Get the appropriate parser for a file
|
|
11
|
+
*/
|
|
12
|
+
getParser(filePath: string): BaseParser | null;
|
|
13
|
+
/**
|
|
14
|
+
* Parse a file using the appropriate parser
|
|
15
|
+
*/
|
|
16
|
+
parse(filePath: string, content: string): ParserResult;
|
|
17
|
+
/**
|
|
18
|
+
* Check if any parser can handle the file
|
|
19
|
+
*/
|
|
20
|
+
canHandle(filePath: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get supported file patterns
|
|
23
|
+
*/
|
|
24
|
+
getSupportedPatterns(): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Detect tool family from file path
|
|
27
|
+
*/
|
|
28
|
+
detectToolFamily(filePath: string): ToolFamily;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,aAAa;IAOlC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAS9C;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY;IActD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAWhC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;CAe/C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser factory - creates appropriate parser based on file type
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ParserFactory = void 0;
|
|
7
|
+
const claude_1 = require("./claude");
|
|
8
|
+
const cursor_1 = require("./cursor");
|
|
9
|
+
class ParserFactory {
|
|
10
|
+
parsers;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.parsers = [
|
|
13
|
+
new claude_1.ClaudeParser(options),
|
|
14
|
+
new cursor_1.CursorParser(options),
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the appropriate parser for a file
|
|
19
|
+
*/
|
|
20
|
+
getParser(filePath) {
|
|
21
|
+
for (const parser of this.parsers) {
|
|
22
|
+
if (parser.canHandle(filePath)) {
|
|
23
|
+
return parser;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse a file using the appropriate parser
|
|
30
|
+
*/
|
|
31
|
+
parse(filePath, content) {
|
|
32
|
+
const parser = this.getParser(filePath);
|
|
33
|
+
if (!parser) {
|
|
34
|
+
return {
|
|
35
|
+
document: null,
|
|
36
|
+
errors: [`No parser available for file: ${filePath}`],
|
|
37
|
+
warnings: [],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return parser.parse(filePath, content);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if any parser can handle the file
|
|
44
|
+
*/
|
|
45
|
+
canHandle(filePath) {
|
|
46
|
+
return this.parsers.some(p => p.canHandle(filePath));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get supported file patterns
|
|
50
|
+
*/
|
|
51
|
+
getSupportedPatterns() {
|
|
52
|
+
return [
|
|
53
|
+
'.claude/skills/**/*.md',
|
|
54
|
+
'.claude/agents/**/*.md',
|
|
55
|
+
'.claude/hooks/**',
|
|
56
|
+
'CLAUDE.md',
|
|
57
|
+
'AGENTS.md',
|
|
58
|
+
'.cursorrules',
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Detect tool family from file path
|
|
63
|
+
*/
|
|
64
|
+
detectToolFamily(filePath) {
|
|
65
|
+
const normalizedPath = filePath.toLowerCase();
|
|
66
|
+
if (normalizedPath.includes('.claude/') ||
|
|
67
|
+
normalizedPath.endsWith('claude.md') ||
|
|
68
|
+
normalizedPath.endsWith('agents.md')) {
|
|
69
|
+
return 'claude';
|
|
70
|
+
}
|
|
71
|
+
if (normalizedPath.endsWith('.cursorrules')) {
|
|
72
|
+
return 'cursor';
|
|
73
|
+
}
|
|
74
|
+
return 'unknown';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.ParserFactory = ParserFactory;
|
|
78
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,qCAAwC;AACxC,qCAAwC;AAGxC,MAAa,aAAa;IAChB,OAAO,CAAe;IAE9B,YAAY,OAAsB;QAChC,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,qBAAY,CAAC,OAAO,CAAC;YACzB,IAAI,qBAAY,CAAC,OAAO,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAe;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,CAAC,iCAAiC,QAAQ,EAAE,CAAC;gBACrD,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO;YACL,wBAAwB;YACxB,wBAAwB;YACxB,kBAAkB;YAClB,WAAW;YACX,WAAW;YACX,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE9C,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC;YACnC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC;YACpC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA9ED,sCA8EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base"), exports);
|
|
18
|
+
__exportStar(require("./claude"), exports);
|
|
19
|
+
__exportStar(require("./cursor"), exports);
|
|
20
|
+
__exportStar(require("./factory"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./loader"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy configuration loader
|
|
3
|
+
*/
|
|
4
|
+
import { PolicyConfig } from './types';
|
|
5
|
+
export interface PolicyLoadResult {
|
|
6
|
+
config: PolicyConfig;
|
|
7
|
+
path: string | null;
|
|
8
|
+
errors: string[];
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Load policy configuration from file or defaults
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadPolicy(configPath?: string, workingDir?: string): PolicyLoadResult;
|
|
15
|
+
/**
|
|
16
|
+
* Validate policy configuration
|
|
17
|
+
*/
|
|
18
|
+
export declare function validatePolicy(config: PolicyConfig): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Generate default configuration file content
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateDefaultConfig(): string;
|
|
23
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAWvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA8CrF;AAgFD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAiC7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAkD9C"}
|