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.
Files changed (136) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +190 -0
  3. package/README.md +246 -0
  4. package/dist/cli/index.d.ts +7 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +351 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/diff/index.d.ts +16 -0
  9. package/dist/diff/index.d.ts.map +1 -0
  10. package/dist/diff/index.js +204 -0
  11. package/dist/diff/index.js.map +1 -0
  12. package/dist/index.d.ts +21 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +55 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/ir/index.d.ts +2 -0
  17. package/dist/ir/index.d.ts.map +1 -0
  18. package/dist/ir/index.js +18 -0
  19. package/dist/ir/index.js.map +1 -0
  20. package/dist/ir/types.d.ts +369 -0
  21. package/dist/ir/types.d.ts.map +1 -0
  22. package/dist/ir/types.js +12 -0
  23. package/dist/ir/types.js.map +1 -0
  24. package/dist/parsers/base.d.ts +104 -0
  25. package/dist/parsers/base.d.ts.map +1 -0
  26. package/dist/parsers/base.js +373 -0
  27. package/dist/parsers/base.js.map +1 -0
  28. package/dist/parsers/claude.d.ts +30 -0
  29. package/dist/parsers/claude.d.ts.map +1 -0
  30. package/dist/parsers/claude.js +453 -0
  31. package/dist/parsers/claude.js.map +1 -0
  32. package/dist/parsers/cursor.d.ts +24 -0
  33. package/dist/parsers/cursor.d.ts.map +1 -0
  34. package/dist/parsers/cursor.js +305 -0
  35. package/dist/parsers/cursor.js.map +1 -0
  36. package/dist/parsers/factory.d.ts +30 -0
  37. package/dist/parsers/factory.d.ts.map +1 -0
  38. package/dist/parsers/factory.js +78 -0
  39. package/dist/parsers/factory.js.map +1 -0
  40. package/dist/parsers/index.d.ts +5 -0
  41. package/dist/parsers/index.d.ts.map +1 -0
  42. package/dist/parsers/index.js +21 -0
  43. package/dist/parsers/index.js.map +1 -0
  44. package/dist/policy/index.d.ts +3 -0
  45. package/dist/policy/index.d.ts.map +1 -0
  46. package/dist/policy/index.js +19 -0
  47. package/dist/policy/index.js.map +1 -0
  48. package/dist/policy/loader.d.ts +23 -0
  49. package/dist/policy/loader.d.ts.map +1 -0
  50. package/dist/policy/loader.js +252 -0
  51. package/dist/policy/loader.js.map +1 -0
  52. package/dist/policy/types.d.ts +79 -0
  53. package/dist/policy/types.d.ts.map +1 -0
  54. package/dist/policy/types.js +99 -0
  55. package/dist/policy/types.js.map +1 -0
  56. package/dist/reports/index.d.ts +14 -0
  57. package/dist/reports/index.d.ts.map +1 -0
  58. package/dist/reports/index.js +54 -0
  59. package/dist/reports/index.js.map +1 -0
  60. package/dist/reports/json.d.ts +16 -0
  61. package/dist/reports/json.d.ts.map +1 -0
  62. package/dist/reports/json.js +126 -0
  63. package/dist/reports/json.js.map +1 -0
  64. package/dist/reports/sarif.d.ts +20 -0
  65. package/dist/reports/sarif.d.ts.map +1 -0
  66. package/dist/reports/sarif.js +169 -0
  67. package/dist/reports/sarif.js.map +1 -0
  68. package/dist/reports/text.d.ts +25 -0
  69. package/dist/reports/text.d.ts.map +1 -0
  70. package/dist/reports/text.js +283 -0
  71. package/dist/reports/text.js.map +1 -0
  72. package/dist/reports/types.d.ts +88 -0
  73. package/dist/reports/types.d.ts.map +1 -0
  74. package/dist/reports/types.js +6 -0
  75. package/dist/reports/types.js.map +1 -0
  76. package/dist/rules/base.d.ts +16 -0
  77. package/dist/rules/base.d.ts.map +1 -0
  78. package/dist/rules/base.js +48 -0
  79. package/dist/rules/base.js.map +1 -0
  80. package/dist/rules/engine.d.ts +61 -0
  81. package/dist/rules/engine.d.ts.map +1 -0
  82. package/dist/rules/engine.js +195 -0
  83. package/dist/rules/engine.js.map +1 -0
  84. package/dist/rules/execution.d.ts +33 -0
  85. package/dist/rules/execution.d.ts.map +1 -0
  86. package/dist/rules/execution.js +154 -0
  87. package/dist/rules/execution.js.map +1 -0
  88. package/dist/rules/filesystem.d.ts +36 -0
  89. package/dist/rules/filesystem.d.ts.map +1 -0
  90. package/dist/rules/filesystem.js +227 -0
  91. package/dist/rules/filesystem.js.map +1 -0
  92. package/dist/rules/hook.d.ts +25 -0
  93. package/dist/rules/hook.d.ts.map +1 -0
  94. package/dist/rules/hook.js +112 -0
  95. package/dist/rules/hook.js.map +1 -0
  96. package/dist/rules/index.d.ts +12 -0
  97. package/dist/rules/index.d.ts.map +1 -0
  98. package/dist/rules/index.js +28 -0
  99. package/dist/rules/index.js.map +1 -0
  100. package/dist/rules/instruction.d.ts +25 -0
  101. package/dist/rules/instruction.d.ts.map +1 -0
  102. package/dist/rules/instruction.js +162 -0
  103. package/dist/rules/instruction.js.map +1 -0
  104. package/dist/rules/network.d.ts +33 -0
  105. package/dist/rules/network.d.ts.map +1 -0
  106. package/dist/rules/network.js +145 -0
  107. package/dist/rules/network.js.map +1 -0
  108. package/dist/rules/observability.d.ts +25 -0
  109. package/dist/rules/observability.d.ts.map +1 -0
  110. package/dist/rules/observability.js +105 -0
  111. package/dist/rules/observability.js.map +1 -0
  112. package/dist/rules/scope.d.ts +37 -0
  113. package/dist/rules/scope.d.ts.map +1 -0
  114. package/dist/rules/scope.js +173 -0
  115. package/dist/rules/scope.js.map +1 -0
  116. package/dist/rules/secrets.d.ts +35 -0
  117. package/dist/rules/secrets.d.ts.map +1 -0
  118. package/dist/rules/secrets.js +273 -0
  119. package/dist/rules/secrets.js.map +1 -0
  120. package/dist/rules/types.d.ts +58 -0
  121. package/dist/rules/types.d.ts.map +1 -0
  122. package/dist/rules/types.js +6 -0
  123. package/dist/rules/types.js.map +1 -0
  124. package/dist/scanner.d.ts +61 -0
  125. package/dist/scanner.d.ts.map +1 -0
  126. package/dist/scanner.js +441 -0
  127. package/dist/scanner.js.map +1 -0
  128. package/dist/utils/hash.d.ts +28 -0
  129. package/dist/utils/hash.d.ts.map +1 -0
  130. package/dist/utils/hash.js +94 -0
  131. package/dist/utils/hash.js.map +1 -0
  132. package/dist/utils/index.d.ts +2 -0
  133. package/dist/utils/index.d.ts.map +1 -0
  134. package/dist/utils/index.js +18 -0
  135. package/dist/utils/index.js.map +1 -0
  136. 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,5 @@
1
+ export * from './base';
2
+ export * from './claude';
3
+ export * from './cursor';
4
+ export * from './factory';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from './types';
2
+ export * from './loader';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}