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,441 @@
1
+ "use strict";
2
+ /**
3
+ * AgentLint Scanner
4
+ * Core orchestration for parsing, rule evaluation, and report generation
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.Scanner = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const glob_1 = require("glob");
44
+ const types_1 = require("./ir/types");
45
+ const factory_1 = require("./parsers/factory");
46
+ const engine_1 = require("./rules/engine");
47
+ const types_2 = require("./policy/types");
48
+ const hash_1 = require("./utils/hash");
49
+ /**
50
+ * Main scanner class
51
+ */
52
+ class Scanner {
53
+ parserFactory;
54
+ ruleEngine;
55
+ options;
56
+ constructor(options = {}) {
57
+ this.options = {
58
+ root: options.root || process.cwd(),
59
+ include: options.include || types_2.DEFAULT_POLICY.scan.include,
60
+ exclude: options.exclude || types_2.DEFAULT_POLICY.scan.exclude,
61
+ policy: options.policy || types_2.DEFAULT_POLICY,
62
+ ciMode: options.ciMode || false,
63
+ };
64
+ const sourceId = (0, hash_1.generateId)('src');
65
+ this.parserFactory = new factory_1.ParserFactory({
66
+ sourceId,
67
+ minConfidence: this.options.policy.scan.min_parse_confidence,
68
+ });
69
+ this.ruleEngine = new engine_1.RuleEngine({
70
+ minConfidence: this.options.policy.policy.min_finding_confidence,
71
+ disabledRules: this.options.policy.rules.disable,
72
+ severityOverrides: this.options.policy.rules.severity_overrides,
73
+ });
74
+ }
75
+ /**
76
+ * Run the scan
77
+ */
78
+ async scan() {
79
+ const errors = [];
80
+ // Find files to scan
81
+ const files = await this.findFiles();
82
+ if (files.length === 0) {
83
+ const status = this.options.policy.policy.no_supported_files_as === 'fail' ? 'fail' :
84
+ this.options.policy.policy.no_supported_files_as === 'warn' ? 'warn' : 'pass';
85
+ const exitCode = status === 'fail' ? 4 : 0;
86
+ return {
87
+ documents: [],
88
+ findings: [],
89
+ capabilitySummary: this.createEmptyCapabilitySummary(),
90
+ recommendedPermissions: this.createEmptyPermissionManifest(),
91
+ status,
92
+ exitCode,
93
+ errors: ['No supported agent configuration files found'],
94
+ };
95
+ }
96
+ // Parse all files
97
+ const documents = [];
98
+ for (const file of files) {
99
+ try {
100
+ const content = fs.readFileSync(file, 'utf-8');
101
+ const relativePath = path.relative(this.options.root, file);
102
+ const result = this.parserFactory.parse(relativePath, content);
103
+ if (result.document) {
104
+ documents.push(result.document);
105
+ }
106
+ if (result.errors.length > 0) {
107
+ errors.push(...result.errors);
108
+ }
109
+ }
110
+ catch (e) {
111
+ const msg = e instanceof Error ? e.message : String(e);
112
+ errors.push(`Failed to read ${file}: ${msg}`);
113
+ }
114
+ }
115
+ // Compute capability summary
116
+ const capabilitySummary = this.computeCapabilitySummary(documents);
117
+ // Run rule engine
118
+ const findings = this.ruleEngine.evaluateAll(documents, capabilitySummary);
119
+ // Generate recommended permissions
120
+ const recommendedPermissions = this.generateRecommendedPermissions(capabilitySummary);
121
+ // Determine status and exit code
122
+ const { status, exitCode } = this.determineStatus(findings, errors);
123
+ return {
124
+ documents,
125
+ findings,
126
+ capabilitySummary,
127
+ recommendedPermissions,
128
+ status,
129
+ exitCode,
130
+ errors,
131
+ };
132
+ }
133
+ /**
134
+ * Find files matching the include/exclude patterns
135
+ */
136
+ async findFiles() {
137
+ const allFiles = [];
138
+ for (const pattern of this.options.include) {
139
+ const matches = await (0, glob_1.glob)(pattern, {
140
+ cwd: this.options.root,
141
+ absolute: true,
142
+ ignore: this.options.exclude,
143
+ nodir: true,
144
+ });
145
+ allFiles.push(...matches);
146
+ }
147
+ // Filter to only files we can handle
148
+ const supportedFiles = allFiles.filter(f => {
149
+ const relativePath = path.relative(this.options.root, f);
150
+ return this.parserFactory.canHandle(relativePath);
151
+ });
152
+ // Deduplicate
153
+ return [...new Set(supportedFiles)];
154
+ }
155
+ /**
156
+ * Compute capability summary from all documents
157
+ */
158
+ computeCapabilitySummary(documents) {
159
+ const summary = {
160
+ filesystem: {
161
+ read: [],
162
+ write: [],
163
+ touches_sensitive_paths: [],
164
+ },
165
+ shell_exec: {
166
+ enabled: false,
167
+ dynamic_detected: false,
168
+ examples: [],
169
+ },
170
+ network: {
171
+ outbound: false,
172
+ inbound: false,
173
+ allowed_domains: [],
174
+ fetches_executable: false,
175
+ },
176
+ secrets: {
177
+ env_vars_referenced: [],
178
+ files_referenced: [],
179
+ propagation_detected: false,
180
+ },
181
+ git: {
182
+ ops: [],
183
+ },
184
+ contexts: {
185
+ has_hooks: false,
186
+ has_ci_context: false,
187
+ },
188
+ };
189
+ for (const doc of documents) {
190
+ // Check context
191
+ if (doc.doc_type === 'hook') {
192
+ summary.contexts.has_hooks = true;
193
+ }
194
+ if (doc.context_profile.runs_in_privileged_env) {
195
+ summary.contexts.has_ci_context = true;
196
+ }
197
+ // Process actions
198
+ for (const action of doc.actions) {
199
+ switch (action.type) {
200
+ case 'shell_exec':
201
+ summary.shell_exec.enabled = true;
202
+ if (action.shell?.dynamic) {
203
+ summary.shell_exec.dynamic_detected = true;
204
+ }
205
+ if (action.shell?.command && summary.shell_exec.examples.length < 5) {
206
+ summary.shell_exec.examples.push(action.shell.command);
207
+ }
208
+ break;
209
+ case 'network_call':
210
+ if (action.network?.direction === 'outbound') {
211
+ summary.network.outbound = true;
212
+ }
213
+ if (action.network?.direction === 'inbound') {
214
+ summary.network.inbound = true;
215
+ }
216
+ if (action.network?.domains) {
217
+ summary.network.allowed_domains.push(...action.network.domains);
218
+ }
219
+ if (action.network?.fetches_executable) {
220
+ summary.network.fetches_executable = true;
221
+ }
222
+ break;
223
+ case 'file_write':
224
+ if (action.filesystem?.paths) {
225
+ summary.filesystem.write.push(...action.filesystem.paths);
226
+ }
227
+ if (action.filesystem?.sensitive_paths_touched) {
228
+ summary.filesystem.touches_sensitive_paths.push(...action.filesystem.sensitive_paths_touched);
229
+ }
230
+ break;
231
+ case 'file_read':
232
+ if (action.filesystem?.paths) {
233
+ summary.filesystem.read.push(...action.filesystem.paths);
234
+ }
235
+ break;
236
+ case 'git_operation':
237
+ if (action.git?.operation) {
238
+ summary.git.ops.push(action.git.operation);
239
+ }
240
+ break;
241
+ }
242
+ // Check for secrets
243
+ if (action.secrets) {
244
+ if (action.secrets.reads_env_vars) {
245
+ summary.secrets.env_vars_referenced.push(...action.secrets.reads_env_vars);
246
+ }
247
+ if (action.secrets.reads_files) {
248
+ summary.secrets.files_referenced.push(...action.secrets.reads_files);
249
+ }
250
+ if (action.secrets.propagates_to && action.secrets.propagates_to.length > 0) {
251
+ summary.secrets.propagation_detected = true;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ // Deduplicate arrays
257
+ summary.filesystem.read = [...new Set(summary.filesystem.read)];
258
+ summary.filesystem.write = [...new Set(summary.filesystem.write)];
259
+ summary.filesystem.touches_sensitive_paths = [...new Set(summary.filesystem.touches_sensitive_paths)];
260
+ summary.network.allowed_domains = [...new Set(summary.network.allowed_domains)];
261
+ summary.secrets.env_vars_referenced = [...new Set(summary.secrets.env_vars_referenced)];
262
+ summary.secrets.files_referenced = [...new Set(summary.secrets.files_referenced)];
263
+ summary.git.ops = [...new Set(summary.git.ops)];
264
+ return summary;
265
+ }
266
+ /**
267
+ * Generate recommended permission manifest based on detected capabilities
268
+ */
269
+ generateRecommendedPermissions(summary) {
270
+ // Generate a conservative (restrictive) manifest based on what we detected
271
+ return {
272
+ manifest_version: types_1.PERMISSIONS_VERSION,
273
+ permissions: {
274
+ filesystem: {
275
+ read: summary.filesystem.read.length > 0 ? summary.filesystem.read : ['**/*'],
276
+ write: summary.filesystem.write.filter(p => !this.isBroadPath(p)),
277
+ delete: [],
278
+ },
279
+ shell_exec: {
280
+ // Recommend disabling shell if dynamic execution was detected
281
+ enabled: summary.shell_exec.enabled && !summary.shell_exec.dynamic_detected,
282
+ allowed_commands: summary.shell_exec.examples
283
+ .filter(cmd => !this.isDynamicCommand(cmd))
284
+ .slice(0, 10),
285
+ },
286
+ network: {
287
+ // Recommend disabling network if executable fetching was detected
288
+ outbound: summary.network.outbound && !summary.network.fetches_executable,
289
+ allowed_domains: summary.network.allowed_domains,
290
+ },
291
+ secrets: {
292
+ // Recommend no secret access
293
+ env_vars: [],
294
+ files: [],
295
+ },
296
+ git: {
297
+ allowed_ops: summary.git.ops,
298
+ },
299
+ },
300
+ };
301
+ }
302
+ isBroadPath(path) {
303
+ return ['**/*', '**', '*', './'].includes(path);
304
+ }
305
+ isDynamicCommand(cmd) {
306
+ return /curl.*\|.*(?:bash|sh)/i.test(cmd) ||
307
+ /wget.*\|.*(?:bash|sh)/i.test(cmd) ||
308
+ /\beval\b/i.test(cmd);
309
+ }
310
+ /**
311
+ * Determine scan status and exit code based on findings
312
+ */
313
+ determineStatus(findings, errors) {
314
+ const policy = this.options.policy.policy;
315
+ // Check for high severity findings
316
+ if (policy.fail_on !== 'none') {
317
+ const failFindings = this.ruleEngine.filterBySeverity(findings, policy.fail_on);
318
+ if (failFindings.length > 0) {
319
+ return { status: 'fail', exitCode: 1 };
320
+ }
321
+ }
322
+ // Check for warning severity findings
323
+ if (policy.warn_on !== 'none') {
324
+ const warnFindings = this.ruleEngine.filterBySeverity(findings, policy.warn_on);
325
+ if (warnFindings.length > 0) {
326
+ return { status: 'warn', exitCode: 0 };
327
+ }
328
+ }
329
+ // Check for parse errors in strict mode
330
+ if (policy.strict && errors.length > 0) {
331
+ return { status: 'fail', exitCode: 4 };
332
+ }
333
+ return { status: 'pass', exitCode: 0 };
334
+ }
335
+ createEmptyCapabilitySummary() {
336
+ return {
337
+ filesystem: { read: [], write: [], touches_sensitive_paths: [] },
338
+ shell_exec: { enabled: false, dynamic_detected: false, examples: [] },
339
+ network: { outbound: false, inbound: false, allowed_domains: [], fetches_executable: false },
340
+ secrets: { env_vars_referenced: [], files_referenced: [], propagation_detected: false },
341
+ git: { ops: [] },
342
+ contexts: { has_hooks: false, has_ci_context: false },
343
+ };
344
+ }
345
+ createEmptyPermissionManifest() {
346
+ return {
347
+ manifest_version: types_1.PERMISSIONS_VERSION,
348
+ permissions: {
349
+ filesystem: { read: [], write: [], delete: [] },
350
+ shell_exec: { enabled: false, allowed_commands: [] },
351
+ network: { outbound: false, allowed_domains: [] },
352
+ secrets: { env_vars: [], files: [] },
353
+ git: { allowed_ops: [] },
354
+ },
355
+ };
356
+ }
357
+ /**
358
+ * Create report data for output generation
359
+ */
360
+ createReportData(result) {
361
+ const documentSummaries = result.documents.map(doc => ({
362
+ doc_id: doc.doc_id,
363
+ path: doc.path,
364
+ tool_family: doc.tool_family,
365
+ doc_type: doc.doc_type,
366
+ format: doc.format,
367
+ hash: doc.hash.value,
368
+ parse: doc.parse,
369
+ context_profile: doc.context_profile,
370
+ action_counts: {
371
+ shell_exec: doc.actions.filter(a => a.type === 'shell_exec').length,
372
+ file_write: doc.actions.filter(a => a.type === 'file_write').length,
373
+ network_call: doc.actions.filter(a => a.type === 'network_call').length,
374
+ secrets: doc.actions.filter(a => a.secrets && (a.secrets.reads_env_vars?.length || a.secrets.reads_files?.length)).length,
375
+ },
376
+ }));
377
+ const counts = this.ruleEngine.countBySeverity(result.findings);
378
+ const report = {
379
+ report_version: types_1.REPORT_VERSION,
380
+ schema_version: types_1.IR_SCHEMA_VERSION,
381
+ generated_at: new Date().toISOString(),
382
+ tool: {
383
+ name: 'agentlint',
384
+ version: '0.1.0',
385
+ build: {
386
+ os: process.platform,
387
+ arch: process.arch,
388
+ },
389
+ },
390
+ inputs: {
391
+ scan_root: this.options.root,
392
+ sources: [],
393
+ include: this.options.include,
394
+ exclude: this.options.exclude,
395
+ tool_mode: this.options.policy.scan.tool_mode,
396
+ },
397
+ policy: {
398
+ ci_mode: this.options.ciMode,
399
+ fail_on: this.options.policy.policy.fail_on,
400
+ warn_on: this.options.policy.policy.warn_on,
401
+ min_confidence: this.options.policy.policy.min_finding_confidence,
402
+ rules_disabled: this.options.policy.rules.disable,
403
+ severity_overrides: this.options.policy.rules.severity_overrides,
404
+ },
405
+ summary: {
406
+ documents_scanned: result.documents.length,
407
+ files_matched: result.documents.length,
408
+ parse: {
409
+ ok: result.documents.filter(d => d.parse.status === 'ok').length,
410
+ partial: result.documents.filter(d => d.parse.status === 'partial').length,
411
+ failed: result.documents.filter(d => d.parse.status === 'failed').length,
412
+ },
413
+ contexts: {
414
+ has_hooks: result.capabilitySummary.contexts.has_hooks,
415
+ has_ci_context: result.capabilitySummary.contexts.has_ci_context,
416
+ },
417
+ counts_by_severity: counts,
418
+ status: result.status,
419
+ exit_code: result.exitCode,
420
+ },
421
+ documents: documentSummaries,
422
+ capability_summary: result.capabilitySummary,
423
+ recommended_permissions: result.recommendedPermissions,
424
+ findings: result.findings,
425
+ diff: null,
426
+ errors: result.errors.map(e => ({ code: 'INTERNAL_ERROR', message: e })),
427
+ annotations: {},
428
+ };
429
+ return {
430
+ report,
431
+ findings: result.findings,
432
+ capabilitySummary: result.capabilitySummary,
433
+ recommendedPermissions: result.recommendedPermissions,
434
+ documents: documentSummaries,
435
+ status: result.status,
436
+ exitCode: result.exitCode,
437
+ };
438
+ }
439
+ }
440
+ exports.Scanner = Scanner;
441
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Hash utilities for AgentLint
3
+ */
4
+ /**
5
+ * Generate SHA256 hash of content
6
+ */
7
+ export declare function sha256(content: string): string;
8
+ /**
9
+ * Generate a stable finding ID based on rule, path, line, and evidence
10
+ */
11
+ export declare function generateFindingId(ruleId: string, path: string, startLine: number, evidence: string): string;
12
+ /**
13
+ * Generate location-based fingerprint
14
+ */
15
+ export declare function generateLocationFingerprint(ruleId: string, path: string, startLine: number, endLine: number): string;
16
+ /**
17
+ * Generate content-based fingerprint
18
+ */
19
+ export declare function generateContentFingerprint(ruleId: string, evidence: string): string;
20
+ /**
21
+ * Generate a unique ID
22
+ */
23
+ export declare function generateId(prefix?: string): string;
24
+ /**
25
+ * Generate document hash
26
+ */
27
+ export declare function hashDocument(content: string): string;
28
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAYD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,MAAa,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Hash utilities for AgentLint
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.sha256 = sha256;
40
+ exports.generateFindingId = generateFindingId;
41
+ exports.generateLocationFingerprint = generateLocationFingerprint;
42
+ exports.generateContentFingerprint = generateContentFingerprint;
43
+ exports.generateId = generateId;
44
+ exports.hashDocument = hashDocument;
45
+ const crypto = __importStar(require("crypto"));
46
+ /**
47
+ * Generate SHA256 hash of content
48
+ */
49
+ function sha256(content) {
50
+ return crypto.createHash('sha256').update(content).digest('hex');
51
+ }
52
+ /**
53
+ * Generate a stable finding ID based on rule, path, line, and evidence
54
+ */
55
+ function generateFindingId(ruleId, path, startLine, evidence) {
56
+ const normalized = `${ruleId}|${path}|${startLine}|${normalizeEvidence(evidence)}`;
57
+ return `sha256:${sha256(normalized).substring(0, 16)}`;
58
+ }
59
+ /**
60
+ * Generate location-based fingerprint
61
+ */
62
+ function generateLocationFingerprint(ruleId, path, startLine, endLine) {
63
+ const data = `${ruleId}|${path}|${startLine}|${endLine}`;
64
+ return `sha256:${sha256(data).substring(0, 16)}`;
65
+ }
66
+ /**
67
+ * Generate content-based fingerprint
68
+ */
69
+ function generateContentFingerprint(ruleId, evidence) {
70
+ const data = `${ruleId}|${normalizeEvidence(evidence)}`;
71
+ return `sha256:${sha256(data).substring(0, 16)}`;
72
+ }
73
+ /**
74
+ * Normalize evidence string for consistent hashing
75
+ */
76
+ function normalizeEvidence(evidence) {
77
+ return evidence
78
+ .trim()
79
+ .replace(/\s+/g, ' ')
80
+ .toLowerCase();
81
+ }
82
+ /**
83
+ * Generate a unique ID
84
+ */
85
+ function generateId(prefix = 'id') {
86
+ return `${prefix}_${crypto.randomBytes(8).toString('hex')}`;
87
+ }
88
+ /**
89
+ * Generate document hash
90
+ */
91
+ function hashDocument(content) {
92
+ return `sha256:${sha256(content)}`;
93
+ }
94
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOH,wBAEC;AAKD,8CAQC;AAKD,kEAQC;AAKD,gEAMC;AAeD,gCAEC;AAKD,oCAEC;AApED,+CAAiC;AAEjC;;GAEG;AACH,SAAgB,MAAM,CAAC,OAAe;IACpC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,IAAY,EACZ,SAAiB,EACjB,QAAgB;IAEhB,MAAM,UAAU,GAAG,GAAG,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnF,OAAO,UAAU,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,MAAc,EACd,IAAY,EACZ,SAAiB,EACjB,OAAe;IAEf,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;IACzD,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,MAAc,EACd,QAAgB;IAEhB,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxD,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,QAAQ;SACZ,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,SAAiB,IAAI;IAC9C,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './hash';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,18 @@
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("./hash"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}