ghagga-core 2.8.0 → 2.9.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 (316) hide show
  1. package/dist/acp/adapter.d.ts +91 -0
  2. package/dist/acp/adapter.d.ts.map +1 -0
  3. package/dist/acp/adapter.js +315 -0
  4. package/dist/acp/adapter.js.map +1 -0
  5. package/dist/acp/index.d.ts +4 -0
  6. package/dist/acp/index.d.ts.map +1 -0
  7. package/dist/acp/index.js +2 -0
  8. package/dist/acp/index.js.map +1 -0
  9. package/dist/acp/types.d.ts +142 -0
  10. package/dist/acp/types.d.ts.map +1 -0
  11. package/dist/acp/types.js +13 -0
  12. package/dist/acp/types.js.map +1 -0
  13. package/dist/adversarial-qa.d.ts +60 -0
  14. package/dist/adversarial-qa.d.ts.map +1 -0
  15. package/dist/adversarial-qa.js +85 -0
  16. package/dist/adversarial-qa.js.map +1 -0
  17. package/dist/agents/audit.d.ts +18 -0
  18. package/dist/agents/audit.d.ts.map +1 -0
  19. package/dist/agents/audit.js +78 -0
  20. package/dist/agents/audit.js.map +1 -0
  21. package/dist/agents/consensus.d.ts +1 -1
  22. package/dist/agents/consensus.d.ts.map +1 -1
  23. package/dist/agents/consensus.js +10 -8
  24. package/dist/agents/consensus.js.map +1 -1
  25. package/dist/agents/diagnostic.d.ts.map +1 -1
  26. package/dist/agents/diagnostic.js +22 -20
  27. package/dist/agents/diagnostic.js.map +1 -1
  28. package/dist/agents/fan-out-lenses.d.ts +41 -0
  29. package/dist/agents/fan-out-lenses.d.ts.map +1 -1
  30. package/dist/agents/fan-out-lenses.js +117 -3
  31. package/dist/agents/fan-out-lenses.js.map +1 -1
  32. package/dist/agents/prompts.d.ts +12 -0
  33. package/dist/agents/prompts.d.ts.map +1 -1
  34. package/dist/agents/prompts.js +31 -0
  35. package/dist/agents/prompts.js.map +1 -1
  36. package/dist/agents/simple.d.ts +1 -1
  37. package/dist/agents/simple.d.ts.map +1 -1
  38. package/dist/agents/simple.js +10 -6
  39. package/dist/agents/simple.js.map +1 -1
  40. package/dist/agents/workflow.d.ts +1 -1
  41. package/dist/agents/workflow.d.ts.map +1 -1
  42. package/dist/agents/workflow.js +9 -8
  43. package/dist/agents/workflow.js.map +1 -1
  44. package/dist/aisvs.d.ts +44 -0
  45. package/dist/aisvs.d.ts.map +1 -0
  46. package/dist/aisvs.js +189 -0
  47. package/dist/aisvs.js.map +1 -0
  48. package/dist/checklist/context.d.ts.map +1 -1
  49. package/dist/checklist/context.js +2 -8
  50. package/dist/checklist/context.js.map +1 -1
  51. package/dist/checklist/defaults.d.ts.map +1 -1
  52. package/dist/checklist/defaults.js.map +1 -1
  53. package/dist/checklist/scorer.d.ts.map +1 -1
  54. package/dist/checklist/scorer.js +105 -12
  55. package/dist/checklist/scorer.js.map +1 -1
  56. package/dist/code-intel/client.d.ts +30 -0
  57. package/dist/code-intel/client.d.ts.map +1 -0
  58. package/dist/code-intel/client.js +91 -0
  59. package/dist/code-intel/client.js.map +1 -0
  60. package/dist/code-intel/context.d.ts +21 -0
  61. package/dist/code-intel/context.d.ts.map +1 -0
  62. package/dist/code-intel/context.js +72 -0
  63. package/dist/code-intel/context.js.map +1 -0
  64. package/dist/code-intel/index.d.ts +10 -0
  65. package/dist/code-intel/index.d.ts.map +1 -0
  66. package/dist/code-intel/index.js +11 -0
  67. package/dist/code-intel/index.js.map +1 -0
  68. package/dist/code-intel/types.d.ts +63 -0
  69. package/dist/code-intel/types.d.ts.map +1 -0
  70. package/dist/code-intel/types.js +9 -0
  71. package/dist/code-intel/types.js.map +1 -0
  72. package/dist/compress/index.d.ts +55 -0
  73. package/dist/compress/index.d.ts.map +1 -0
  74. package/dist/compress/index.js +166 -0
  75. package/dist/compress/index.js.map +1 -0
  76. package/dist/cost-footer.d.ts +38 -0
  77. package/dist/cost-footer.d.ts.map +1 -0
  78. package/dist/cost-footer.js +95 -0
  79. package/dist/cost-footer.js.map +1 -0
  80. package/dist/critique/critique.d.ts +40 -0
  81. package/dist/critique/critique.d.ts.map +1 -0
  82. package/dist/critique/critique.js +194 -0
  83. package/dist/critique/critique.js.map +1 -0
  84. package/dist/critique/cross-model.d.ts +123 -0
  85. package/dist/critique/cross-model.d.ts.map +1 -0
  86. package/dist/critique/cross-model.js +267 -0
  87. package/dist/critique/cross-model.js.map +1 -0
  88. package/dist/critique/index.d.ts +8 -0
  89. package/dist/critique/index.d.ts.map +1 -0
  90. package/dist/critique/index.js +6 -0
  91. package/dist/critique/index.js.map +1 -0
  92. package/dist/critique/prompts.d.ts +11 -0
  93. package/dist/critique/prompts.d.ts.map +1 -0
  94. package/dist/critique/prompts.js +66 -0
  95. package/dist/critique/prompts.js.map +1 -0
  96. package/dist/critique/types.d.ts +84 -0
  97. package/dist/critique/types.d.ts.map +1 -0
  98. package/dist/critique/types.js +13 -0
  99. package/dist/critique/types.js.map +1 -0
  100. package/dist/doc-validation/index.d.ts +9 -0
  101. package/dist/doc-validation/index.d.ts.map +1 -0
  102. package/dist/doc-validation/index.js +9 -0
  103. package/dist/doc-validation/index.js.map +1 -0
  104. package/dist/doc-validation/scanner.d.ts +40 -0
  105. package/dist/doc-validation/scanner.d.ts.map +1 -0
  106. package/dist/doc-validation/scanner.js +163 -0
  107. package/dist/doc-validation/scanner.js.map +1 -0
  108. package/dist/doc-validation/types.d.ts +27 -0
  109. package/dist/doc-validation/types.d.ts.map +1 -0
  110. package/dist/doc-validation/types.js +8 -0
  111. package/dist/doc-validation/types.js.map +1 -0
  112. package/dist/embed.d.ts +27 -0
  113. package/dist/embed.d.ts.map +1 -0
  114. package/dist/embed.js +47 -0
  115. package/dist/embed.js.map +1 -0
  116. package/dist/enhance/enhance.d.ts.map +1 -1
  117. package/dist/enhance/enhance.js +7 -25
  118. package/dist/enhance/enhance.js.map +1 -1
  119. package/dist/enhance/types.d.ts +5 -0
  120. package/dist/enhance/types.d.ts.map +1 -1
  121. package/dist/exploitability/analyzer.d.ts +42 -0
  122. package/dist/exploitability/analyzer.d.ts.map +1 -1
  123. package/dist/exploitability/analyzer.js +225 -0
  124. package/dist/exploitability/analyzer.js.map +1 -1
  125. package/dist/exploitability/index.d.ts +3 -2
  126. package/dist/exploitability/index.d.ts.map +1 -1
  127. package/dist/exploitability/index.js +1 -2
  128. package/dist/exploitability/index.js.map +1 -1
  129. package/dist/exploitability/types.d.ts +27 -0
  130. package/dist/exploitability/types.d.ts.map +1 -1
  131. package/dist/fetch-fix.d.ts +60 -0
  132. package/dist/fetch-fix.d.ts.map +1 -0
  133. package/dist/fetch-fix.js +137 -0
  134. package/dist/fetch-fix.js.map +1 -0
  135. package/dist/flood/index.d.ts +34 -0
  136. package/dist/flood/index.d.ts.map +1 -0
  137. package/dist/flood/index.js +67 -0
  138. package/dist/flood/index.js.map +1 -0
  139. package/dist/format.d.ts.map +1 -1
  140. package/dist/format.js +6 -1
  141. package/dist/format.js.map +1 -1
  142. package/dist/graph/blast-radius.js +2 -2
  143. package/dist/graph/blast-radius.js.map +1 -1
  144. package/dist/graph/call-chain.d.ts +36 -0
  145. package/dist/graph/call-chain.d.ts.map +1 -0
  146. package/dist/graph/call-chain.js +291 -0
  147. package/dist/graph/call-chain.js.map +1 -0
  148. package/dist/graph/index.d.ts +4 -0
  149. package/dist/graph/index.d.ts.map +1 -1
  150. package/dist/graph/index.js +2 -0
  151. package/dist/graph/index.js.map +1 -1
  152. package/dist/graph/reverse-deps.d.ts +37 -0
  153. package/dist/graph/reverse-deps.d.ts.map +1 -0
  154. package/dist/graph/reverse-deps.js +136 -0
  155. package/dist/graph/reverse-deps.js.map +1 -0
  156. package/dist/index.d.ts +50 -11
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +34 -7
  159. package/dist/index.js.map +1 -1
  160. package/dist/injection-corpus.d.ts +41 -0
  161. package/dist/injection-corpus.d.ts.map +1 -0
  162. package/dist/injection-corpus.js +181 -0
  163. package/dist/injection-corpus.js.map +1 -0
  164. package/dist/latent-comms.d.ts +31 -0
  165. package/dist/latent-comms.d.ts.map +1 -0
  166. package/dist/latent-comms.js +139 -0
  167. package/dist/latent-comms.js.map +1 -0
  168. package/dist/memory/pageindex/chunker.d.ts +33 -0
  169. package/dist/memory/pageindex/chunker.d.ts.map +1 -0
  170. package/dist/memory/pageindex/chunker.js +112 -0
  171. package/dist/memory/pageindex/chunker.js.map +1 -0
  172. package/dist/memory/pageindex/example.d.ts +22 -0
  173. package/dist/memory/pageindex/example.d.ts.map +1 -0
  174. package/dist/memory/pageindex/example.js +94 -0
  175. package/dist/memory/pageindex/example.js.map +1 -0
  176. package/dist/memory/pageindex/index.d.ts +15 -0
  177. package/dist/memory/pageindex/index.d.ts.map +1 -0
  178. package/dist/memory/pageindex/index.js +17 -0
  179. package/dist/memory/pageindex/index.js.map +1 -0
  180. package/dist/memory/pageindex/service.d.ts +53 -0
  181. package/dist/memory/pageindex/service.d.ts.map +1 -0
  182. package/dist/memory/pageindex/service.js +229 -0
  183. package/dist/memory/pageindex/service.js.map +1 -0
  184. package/dist/memory/pageindex/types.d.ts +67 -0
  185. package/dist/memory/pageindex/types.d.ts.map +1 -0
  186. package/dist/memory/pageindex/types.js +14 -0
  187. package/dist/memory/pageindex/types.js.map +1 -0
  188. package/dist/memory/persist.d.ts.map +1 -1
  189. package/dist/memory/persist.js +6 -2
  190. package/dist/memory/persist.js.map +1 -1
  191. package/dist/memory/sqlite.d.ts +69 -2
  192. package/dist/memory/sqlite.d.ts.map +1 -1
  193. package/dist/memory/sqlite.js +312 -5
  194. package/dist/memory/sqlite.js.map +1 -1
  195. package/dist/memory/taxonomy.d.ts +34 -0
  196. package/dist/memory/taxonomy.d.ts.map +1 -0
  197. package/dist/memory/taxonomy.js +189 -0
  198. package/dist/memory/taxonomy.js.map +1 -0
  199. package/dist/memory/versioning.d.ts.map +1 -1
  200. package/dist/memory/versioning.js.map +1 -1
  201. package/dist/negative.d.ts +23 -0
  202. package/dist/negative.d.ts.map +1 -0
  203. package/dist/negative.js +40 -0
  204. package/dist/negative.js.map +1 -0
  205. package/dist/pipeline.d.ts.map +1 -1
  206. package/dist/pipeline.js +455 -46
  207. package/dist/pipeline.js.map +1 -1
  208. package/dist/prompt-intel.d.ts +39 -0
  209. package/dist/prompt-intel.d.ts.map +1 -0
  210. package/dist/prompt-intel.js +148 -0
  211. package/dist/prompt-intel.js.map +1 -0
  212. package/dist/providers/cli-bridge.d.ts +4 -0
  213. package/dist/providers/cli-bridge.d.ts.map +1 -1
  214. package/dist/providers/cli-bridge.js +4 -0
  215. package/dist/providers/cli-bridge.js.map +1 -1
  216. package/dist/providers/generate-fn.d.ts +3 -15
  217. package/dist/providers/generate-fn.d.ts.map +1 -1
  218. package/dist/providers/generate-fn.js +3 -30
  219. package/dist/providers/generate-fn.js.map +1 -1
  220. package/dist/providers/index.d.ts.map +1 -1
  221. package/dist/providers/index.js.map +1 -1
  222. package/dist/providers/ollama.d.ts +15 -0
  223. package/dist/providers/ollama.d.ts.map +1 -0
  224. package/dist/providers/ollama.js +30 -0
  225. package/dist/providers/ollama.js.map +1 -0
  226. package/dist/ranking/index.d.ts +9 -0
  227. package/dist/ranking/index.d.ts.map +1 -0
  228. package/dist/ranking/index.js +82 -0
  229. package/dist/ranking/index.js.map +1 -0
  230. package/dist/recursive/circuit-breaker.d.ts +36 -0
  231. package/dist/recursive/circuit-breaker.d.ts.map +1 -0
  232. package/dist/recursive/circuit-breaker.js +62 -0
  233. package/dist/recursive/circuit-breaker.js.map +1 -0
  234. package/dist/recursive/index.d.ts +4 -0
  235. package/dist/recursive/index.d.ts.map +1 -1
  236. package/dist/recursive/index.js +18 -1
  237. package/dist/recursive/index.js.map +1 -1
  238. package/dist/recursive/types.d.ts +2 -0
  239. package/dist/recursive/types.d.ts.map +1 -1
  240. package/dist/recursive/types.js +1 -0
  241. package/dist/recursive/types.js.map +1 -1
  242. package/dist/scope/diff-mapper.js.map +1 -1
  243. package/dist/scope/entity-diff.d.ts +58 -0
  244. package/dist/scope/entity-diff.d.ts.map +1 -0
  245. package/dist/scope/entity-diff.js +224 -0
  246. package/dist/scope/entity-diff.js.map +1 -0
  247. package/dist/scope/extractor.d.ts.map +1 -1
  248. package/dist/scope/extractor.js.map +1 -1
  249. package/dist/scope/index.d.ts +3 -1
  250. package/dist/scope/index.d.ts.map +1 -1
  251. package/dist/scope/index.js +3 -0
  252. package/dist/scope/index.js.map +1 -1
  253. package/dist/scope/parser.d.ts +1 -1
  254. package/dist/scope/parser.d.ts.map +1 -1
  255. package/dist/scope/parser.js.map +1 -1
  256. package/dist/scope/types.d.ts +32 -0
  257. package/dist/scope/types.d.ts.map +1 -1
  258. package/dist/scope/types.js +7 -1
  259. package/dist/scope/types.js.map +1 -1
  260. package/dist/search/index.d.ts +11 -0
  261. package/dist/search/index.d.ts.map +1 -0
  262. package/dist/search/index.js +10 -0
  263. package/dist/search/index.js.map +1 -0
  264. package/dist/search/indexer.d.ts +67 -0
  265. package/dist/search/indexer.d.ts.map +1 -0
  266. package/dist/search/indexer.js +196 -0
  267. package/dist/search/indexer.js.map +1 -0
  268. package/dist/search/searcher.d.ts +34 -0
  269. package/dist/search/searcher.d.ts.map +1 -0
  270. package/dist/search/searcher.js +101 -0
  271. package/dist/search/searcher.js.map +1 -0
  272. package/dist/search/types.d.ts +81 -0
  273. package/dist/search/types.d.ts.map +1 -0
  274. package/dist/search/types.js +8 -0
  275. package/dist/search/types.js.map +1 -0
  276. package/dist/self-improve/index.d.ts +53 -0
  277. package/dist/self-improve/index.d.ts.map +1 -0
  278. package/dist/self-improve/index.js +136 -0
  279. package/dist/self-improve/index.js.map +1 -0
  280. package/dist/semantic-diff/index.d.ts +31 -0
  281. package/dist/semantic-diff/index.d.ts.map +1 -0
  282. package/dist/semantic-diff/index.js +215 -0
  283. package/dist/semantic-diff/index.js.map +1 -0
  284. package/dist/testing/index.d.ts +67 -0
  285. package/dist/testing/index.d.ts.map +1 -0
  286. package/dist/testing/index.js +76 -0
  287. package/dist/testing/index.js.map +1 -0
  288. package/dist/testing/vitest-helpers.d.ts +26 -0
  289. package/dist/testing/vitest-helpers.d.ts.map +1 -0
  290. package/dist/testing/vitest-helpers.js +37 -0
  291. package/dist/testing/vitest-helpers.js.map +1 -0
  292. package/dist/tools/index.d.ts +3 -1
  293. package/dist/tools/index.d.ts.map +1 -1
  294. package/dist/tools/index.js +2 -1
  295. package/dist/tools/index.js.map +1 -1
  296. package/dist/tools/remote-query.d.ts +40 -0
  297. package/dist/tools/remote-query.d.ts.map +1 -0
  298. package/dist/tools/remote-query.js +71 -0
  299. package/dist/tools/remote-query.js.map +1 -0
  300. package/dist/tracing/index.d.ts +39 -0
  301. package/dist/tracing/index.d.ts.map +1 -0
  302. package/dist/tracing/index.js +70 -0
  303. package/dist/tracing/index.js.map +1 -0
  304. package/dist/trajectory.d.ts +65 -0
  305. package/dist/trajectory.d.ts.map +1 -0
  306. package/dist/trajectory.js +126 -0
  307. package/dist/trajectory.js.map +1 -0
  308. package/dist/trust/index.d.ts +34 -0
  309. package/dist/trust/index.d.ts.map +1 -0
  310. package/dist/trust/index.js +78 -0
  311. package/dist/trust/index.js.map +1 -0
  312. package/dist/types.d.ts +144 -5
  313. package/dist/types.d.ts.map +1 -1
  314. package/dist/types.js +2 -11
  315. package/dist/types.js.map +1 -1
  316. package/package.json +1 -3
@@ -296,4 +296,229 @@ export function analyzeExploitability(findings, graph) {
296
296
  }
297
297
  return findings;
298
298
  }
299
+ // ─── Symbol Extraction ────────────────────────────────────────
300
+ /**
301
+ * Regex patterns to extract imported symbols from a file for a specific package.
302
+ *
303
+ * Matches:
304
+ * import { merge, get } from 'lodash'
305
+ * import { merge, get } from "lodash"
306
+ * import defaultExport from 'lodash'
307
+ * import * as _ from 'lodash'
308
+ * from lodash import merge, get (Python)
309
+ * const { merge } = require('lodash')
310
+ */
311
+ function buildImportSymbolPatterns(packageName) {
312
+ // Escape special regex chars in package name (e.g., @angular/core)
313
+ const escaped = packageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
314
+ return [
315
+ // ES named imports: import { x, y } from 'pkg'
316
+ new RegExp(`import\\s+(?:type\\s+)?\\{([^}]+)\\}\\s+from\\s+['"]${escaped}(?:/[^'"]*)?['"]`, 'g'),
317
+ // ES default import: import x from 'pkg'
318
+ new RegExp(`import\\s+(\\w+)\\s+from\\s+['"]${escaped}(?:/[^'"]*)?['"]`, 'g'),
319
+ // ES namespace import: import * as x from 'pkg'
320
+ new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+['"]${escaped}(?:/[^'"]*)?['"]`, 'g'),
321
+ // CommonJS destructured: const { x, y } = require('pkg')
322
+ new RegExp(`(?:const|let|var)\\s+\\{([^}]+)\\}\\s*=\\s*require\\s*\\(\\s*['"]${escaped}(?:/[^'"]*)?['"]\\s*\\)`, 'g'),
323
+ // CommonJS default: const x = require('pkg')
324
+ new RegExp(`(?:const|let|var)\\s+(\\w+)\\s*=\\s*require\\s*\\(\\s*['"]${escaped}(?:/[^'"]*)?['"]\\s*\\)`, 'g'),
325
+ // Python: from pkg import x, y
326
+ new RegExp(`from\\s+${escaped}(?:\\.\\w+)*\\s+import\\s+([\\w,\\s]+)`, 'g'),
327
+ ];
328
+ }
329
+ /**
330
+ * Extract imported symbol names from file content for a given package.
331
+ *
332
+ * @param content - File source content
333
+ * @param packageName - External package to search for
334
+ * @returns Array of imported symbol names (deduplicated)
335
+ */
336
+ export function extractImportedSymbols(content, packageName) {
337
+ const patterns = buildImportSymbolPatterns(packageName);
338
+ const symbols = new Set();
339
+ let isNamespaceImport = false;
340
+ for (const pattern of patterns) {
341
+ for (const match of content.matchAll(pattern)) {
342
+ const captured = match[1];
343
+ if (!captured)
344
+ continue;
345
+ // Check if this is a namespace import (import * as x)
346
+ if (pattern.source.includes('\\*\\s+as')) {
347
+ isNamespaceImport = true;
348
+ symbols.add(captured.trim());
349
+ continue;
350
+ }
351
+ // Parse comma-separated symbol names
352
+ const names = captured
353
+ .split(',')
354
+ .map((s) => s
355
+ .trim()
356
+ .replace(/\s+as\s+\w+/g, '')
357
+ .trim())
358
+ .filter(Boolean);
359
+ for (const name of names) {
360
+ symbols.add(name);
361
+ }
362
+ }
363
+ }
364
+ return [...symbols].map((s) => (isNamespaceImport && symbols.size === 1 ? `${s}.*` : s));
365
+ }
366
+ // ─── Call Detection ───────────────────────────────────────────
367
+ /**
368
+ * Detect which of the given symbols are actually called in file content.
369
+ *
370
+ * Uses regex to find function-call-like patterns: `symbol(`, `symbol.`, `symbol[`
371
+ * Excludes matches inside comments (single-line // and multi-line).
372
+ *
373
+ * @param content - File source content
374
+ * @param symbols - Symbol names to search for
375
+ * @returns Array of symbols that appear to be used (called/accessed)
376
+ */
377
+ export function detectSymbolCalls(content, symbols) {
378
+ if (symbols.length === 0)
379
+ return [];
380
+ // Strip single-line and multi-line comments to reduce false positives
381
+ const stripped = content
382
+ .replace(/\/\/.*$/gm, '')
383
+ .replace(/\/\*[\s\S]*?\*\//g, '')
384
+ .replace(/#.*$/gm, ''); // Python comments
385
+ const called = [];
386
+ for (const symbol of symbols) {
387
+ // Handle namespace symbols (e.g., "_.something")
388
+ if (symbol.endsWith('.*')) {
389
+ const ns = symbol.slice(0, -2);
390
+ const nsPattern = new RegExp(`\\b${escapeRegex(ns)}\\s*\\.\\s*\\w+`, 'g');
391
+ if (nsPattern.test(stripped)) {
392
+ called.push(symbol);
393
+ }
394
+ continue;
395
+ }
396
+ // Match: symbol(, symbol., symbol[, symbol`
397
+ // This catches function calls, method access, property access, template literals
398
+ const callPattern = new RegExp(`\\b${escapeRegex(symbol)}\\s*[.([:\`]`, 'g');
399
+ // Also match: symbol as standalone usage (e.g., passed as callback: arr.map(symbol))
400
+ const refPattern = new RegExp(`[,(]\\s*${escapeRegex(symbol)}\\s*[,)]`, 'g');
401
+ if (callPattern.test(stripped) || refPattern.test(stripped)) {
402
+ called.push(symbol);
403
+ }
404
+ }
405
+ return called;
406
+ }
407
+ /**
408
+ * Escape special regex characters in a string.
409
+ */
410
+ function escapeRegex(str) {
411
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
412
+ }
413
+ // ─── Usage Analysis ───────────────────────────────────────────
414
+ /**
415
+ * Analyze function-level usage of vulnerable packages in CVE findings.
416
+ *
417
+ * For each Trivy CVE finding that has import sites (from exploitability analysis),
418
+ * reads the importing files, extracts the imported symbols, and checks if those
419
+ * symbols are actually called.
420
+ *
421
+ * Degrades gracefully:
422
+ * - No graph → skips analysis (no usageLabel set)
423
+ * - No import sites → labels as not-in-use
424
+ * - Namespace imports → labels as imported-not-called (can't determine specific usage)
425
+ *
426
+ * @param findings - Review findings (already enriched with exploitability)
427
+ * @param graph - The project's dependency graph (null if unavailable)
428
+ * @param readFile - Callback to read file content by path
429
+ * @returns The same findings array with usage fields added to CVE findings
430
+ */
431
+ export async function analyzeUsage(findings, graph, readFile) {
432
+ if (!graph)
433
+ return findings;
434
+ // Only process findings that already have exploitability analysis
435
+ const vulnPackages = extractVulnPackages(findings);
436
+ if (vulnPackages.size === 0)
437
+ return findings;
438
+ for (const [packageName, indices] of vulnPackages) {
439
+ // Skip unparseable packages
440
+ if (packageName.startsWith('__unparseable_')) {
441
+ continue;
442
+ }
443
+ // Find import sites (reuse from exploitability or recompute)
444
+ const importSites = tracePackageImports(graph, packageName);
445
+ if (importSites.length === 0) {
446
+ const detail = {
447
+ usageLabel: 'not-in-use',
448
+ importedSymbols: [],
449
+ calledSymbols: [],
450
+ filesScanned: [],
451
+ reason: 'Package is not imported by any project file',
452
+ };
453
+ for (const idx of indices) {
454
+ const finding = findings[idx];
455
+ if (finding) {
456
+ finding.usageLabel = 'not-in-use';
457
+ finding.usageDetail = detail;
458
+ }
459
+ }
460
+ continue;
461
+ }
462
+ // Read each import site, extract symbols, check for calls
463
+ const allImportedSymbols = new Set();
464
+ const allCalledSymbols = new Set();
465
+ const filesScanned = [];
466
+ let hasNamespaceImport = false;
467
+ for (const site of importSites) {
468
+ const content = await readFile(site);
469
+ if (!content)
470
+ continue;
471
+ filesScanned.push(site);
472
+ const symbols = extractImportedSymbols(content, packageName);
473
+ for (const sym of symbols) {
474
+ allImportedSymbols.add(sym);
475
+ if (sym.endsWith('.*')) {
476
+ hasNamespaceImport = true;
477
+ }
478
+ }
479
+ const called = detectSymbolCalls(content, symbols);
480
+ for (const sym of called) {
481
+ allCalledSymbols.add(sym);
482
+ }
483
+ }
484
+ // Classify
485
+ const importedSymbols = [...allImportedSymbols];
486
+ const calledSymbols = [...allCalledSymbols];
487
+ let usageLabel;
488
+ let reason;
489
+ if (calledSymbols.length > 0) {
490
+ usageLabel = 'in-use';
491
+ reason = `${calledSymbols.length} symbol(s) from ${packageName} are called: ${calledSymbols.join(', ')}`;
492
+ }
493
+ else if (importedSymbols.length === 0) {
494
+ // Side-effect import (import 'pkg') — no symbols extracted
495
+ usageLabel = 'imported-not-called';
496
+ reason = 'Package is imported (side-effect) but no specific symbols are extracted';
497
+ }
498
+ else if (hasNamespaceImport) {
499
+ usageLabel = 'imported-not-called';
500
+ reason =
501
+ 'Package is imported via namespace (import * as) — specific function usage cannot be determined';
502
+ }
503
+ else {
504
+ usageLabel = 'imported-not-called';
505
+ reason = `Package symbols imported (${importedSymbols.join(', ')}) but none are called in code`;
506
+ }
507
+ const detail = {
508
+ usageLabel,
509
+ importedSymbols,
510
+ calledSymbols,
511
+ filesScanned,
512
+ reason,
513
+ };
514
+ for (const idx of indices) {
515
+ const finding = findings[idx];
516
+ if (finding) {
517
+ finding.usageLabel = usageLabel;
518
+ finding.usageDetail = detail;
519
+ }
520
+ }
521
+ }
522
+ return findings;
523
+ }
299
524
  //# sourceMappingURL=analyzer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/exploitability/analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/exploitability/analyzer.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * Enriches Trivy vulnerability findings with labels indicating
6
6
  * whether the vulnerable code path is actually reachable.
7
7
  */
8
- export type { ExploitabilityDetail, ExploitabilityLabel } from './types.js';
9
- export { analyzeExploitability, checkReachability, extractVulnPackages, findEntryPoints, tracePackageImports, } from './analyzer.js';
8
+ export type { ExploitabilityDetail, ExploitabilityLabel, UsageDetail, UsageLabel, } from './types.js';
9
+ export type { FileReader } from './analyzer.js';
10
+ export { analyzeExploitability, analyzeUsage, checkReachability, detectSymbolCalls, extractImportedSymbols, extractVulnPackages, findEntryPoints, tracePackageImports, } from './analyzer.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exploitability/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAI5E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exploitability/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
@@ -5,6 +5,5 @@
5
5
  * Enriches Trivy vulnerability findings with labels indicating
6
6
  * whether the vulnerable code path is actually reachable.
7
7
  */
8
- // ─── Analyzer ──────────────────────────────────────────────────
9
- export { analyzeExploitability, checkReachability, extractVulnPackages, findEntryPoints, tracePackageImports, } from './analyzer.js';
8
+ export { analyzeExploitability, analyzeUsage, checkReachability, detectSymbolCalls, extractImportedSymbols, extractVulnPackages, findEntryPoints, tracePackageImports, } from './analyzer.js';
10
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exploitability/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,kEAAkE;AAElE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exploitability/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
@@ -29,4 +29,31 @@ export interface ExploitabilityDetail {
29
29
  /** Human-readable explanation of the classification */
30
30
  reason: string;
31
31
  }
32
+ /**
33
+ * Function-level usage classification for a CVE finding.
34
+ *
35
+ * Refines exploitability by checking whether the vulnerable function
36
+ * is actually called in the project's code:
37
+ *
38
+ * - `in-use`: at least one imported symbol from the vulnerable package is called
39
+ * - `imported-not-called`: package is imported but no vulnerable symbols are called
40
+ * - `not-in-use`: package is not imported by any project file
41
+ */
42
+ export type UsageLabel = 'in-use' | 'imported-not-called' | 'not-in-use';
43
+ /**
44
+ * Detailed usage analysis result for a single CVE finding.
45
+ * Attached to ReviewFinding alongside ExploitabilityDetail.
46
+ */
47
+ export interface UsageDetail {
48
+ /** Usage classification */
49
+ usageLabel: UsageLabel;
50
+ /** Symbols imported from the vulnerable package across all import sites */
51
+ importedSymbols: string[];
52
+ /** Subset of importedSymbols that are actually called in project code */
53
+ calledSymbols: string[];
54
+ /** Files that were scanned for symbol usage */
55
+ filesScanned: string[];
56
+ /** Human-readable explanation of the classification */
57
+ reason: string;
58
+ }
32
59
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exploitability/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,yBAAyB,GAAG,iBAAiB,CAAC;AAIhG;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,KAAK,EAAE,mBAAmB,CAAC;IAE3B,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,gEAAgE;IAChE,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exploitability/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,yBAAyB,GAAG,iBAAiB,CAAC;AAIhG;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,KAAK,EAAE,mBAAmB,CAAC;IAE3B,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,gEAAgE;IAChE,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,qBAAqB,GAAG,YAAY,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,UAAU,EAAE,UAAU,CAAC;IAEvB,2EAA2E;IAC3E,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,yEAAyE;IACzE,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Fetch & fix — pull review comments from GitHub PRs, batch-resolve
3
+ * them, and push fixes. Closes the review loop: ghagga finds issues,
4
+ * fetch-fix resolves them.
5
+ *
6
+ * Flow:
7
+ * 1. Fetch unresolved review comments from a PR
8
+ * 2. Parse each comment into a structured fix request
9
+ * 3. Group by file for efficient batch fixing
10
+ * 4. Apply fixes (via LLM or deterministic rules)
11
+ * 5. Report what was fixed vs what needs manual attention
12
+ */
13
+ export interface ReviewComment {
14
+ id: number;
15
+ body: string;
16
+ path: string;
17
+ line: number | null;
18
+ author: string;
19
+ createdAt: string;
20
+ resolved: boolean;
21
+ }
22
+ export interface FixRequest {
23
+ commentId: number;
24
+ file: string;
25
+ line: number | null;
26
+ issue: string;
27
+ suggestedFix: string | null;
28
+ severity: 'critical' | 'major' | 'minor' | 'nit';
29
+ autoFixable: boolean;
30
+ }
31
+ export interface FixResult {
32
+ commentId: number;
33
+ file: string;
34
+ status: 'fixed' | 'skipped' | 'manual' | 'error';
35
+ action: string;
36
+ error?: string;
37
+ }
38
+ export interface FetchFixReport {
39
+ prNumber: number;
40
+ totalComments: number;
41
+ fixRequests: FixRequest[];
42
+ results: FixResult[];
43
+ fixedCount: number;
44
+ skippedCount: number;
45
+ manualCount: number;
46
+ }
47
+ export declare function parseCommentSeverity(body: string): FixRequest['severity'];
48
+ export declare function extractSuggestion(body: string): string | null;
49
+ export declare function isAutoFixable(comment: ReviewComment): boolean;
50
+ export declare function parseFixRequest(comment: ReviewComment): FixRequest;
51
+ export declare function groupByFile(requests: FixRequest[]): Map<string, FixRequest[]>;
52
+ export type FixApplier = (file: string, requests: FixRequest[]) => Promise<FixResult[]> | FixResult[];
53
+ /**
54
+ * Simple auto-fixer: applies GitHub suggestion blocks directly.
55
+ * Only handles comments with ```suggestion``` blocks.
56
+ */
57
+ export declare function createAutoFixer(): FixApplier;
58
+ export declare function fetchAndFix(comments: ReviewComment[], applier: FixApplier, prNumber: number): Promise<FetchFixReport>;
59
+ export declare function formatFetchFixReport(report: FetchFixReport): string;
60
+ //# sourceMappingURL=fetch-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-fix.d.ts","sourceRoot":"","sources":["../src/fetch-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACjD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAeD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAMzE;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAG7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAUlE;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAO7E;AAID,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,UAAU,EAAE,KACnB,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC;AAExC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAmB5C;AAID,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAgCnE"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Fetch & fix — pull review comments from GitHub PRs, batch-resolve
3
+ * them, and push fixes. Closes the review loop: ghagga finds issues,
4
+ * fetch-fix resolves them.
5
+ *
6
+ * Flow:
7
+ * 1. Fetch unresolved review comments from a PR
8
+ * 2. Parse each comment into a structured fix request
9
+ * 3. Group by file for efficient batch fixing
10
+ * 4. Apply fixes (via LLM or deterministic rules)
11
+ * 5. Report what was fixed vs what needs manual attention
12
+ */
13
+ // ── Comment parsing ──
14
+ const SEVERITY_KEYWORDS = {
15
+ critical: 'critical',
16
+ security: 'critical',
17
+ bug: 'major',
18
+ error: 'major',
19
+ warning: 'minor',
20
+ nit: 'nit',
21
+ style: 'nit',
22
+ typo: 'nit',
23
+ };
24
+ export function parseCommentSeverity(body) {
25
+ const lower = body.toLowerCase();
26
+ for (const [keyword, severity] of Object.entries(SEVERITY_KEYWORDS)) {
27
+ if (lower.includes(keyword))
28
+ return severity;
29
+ }
30
+ return 'minor';
31
+ }
32
+ const SUGGESTION_RE = /```suggestion\n([\s\S]*?)```/;
33
+ export function extractSuggestion(body) {
34
+ const match = SUGGESTION_RE.exec(body);
35
+ return match ? match[1]?.trim() : null;
36
+ }
37
+ export function isAutoFixable(comment) {
38
+ // Auto-fixable if there's a GitHub suggestion block
39
+ return SUGGESTION_RE.test(comment.body);
40
+ }
41
+ export function parseFixRequest(comment) {
42
+ return {
43
+ commentId: comment.id,
44
+ file: comment.path,
45
+ line: comment.line,
46
+ issue: comment.body.split('\n')[0]?.slice(0, 200), // first line as summary
47
+ suggestedFix: extractSuggestion(comment.body),
48
+ severity: parseCommentSeverity(comment.body),
49
+ autoFixable: isAutoFixable(comment),
50
+ };
51
+ }
52
+ // ── Batch grouping ──
53
+ export function groupByFile(requests) {
54
+ const groups = new Map();
55
+ for (const req of requests) {
56
+ if (!groups.has(req.file))
57
+ groups.set(req.file, []);
58
+ groups.get(req.file)?.push(req);
59
+ }
60
+ return groups;
61
+ }
62
+ /**
63
+ * Simple auto-fixer: applies GitHub suggestion blocks directly.
64
+ * Only handles comments with ```suggestion``` blocks.
65
+ */
66
+ export function createAutoFixer() {
67
+ return (_file, requests) => {
68
+ return requests.map((req) => {
69
+ if (!req.autoFixable || !req.suggestedFix) {
70
+ return {
71
+ commentId: req.commentId,
72
+ file: req.file,
73
+ status: 'manual',
74
+ action: 'No auto-fix available — needs manual resolution',
75
+ };
76
+ }
77
+ return {
78
+ commentId: req.commentId,
79
+ file: req.file,
80
+ status: 'fixed',
81
+ action: `Applied suggestion: ${req.suggestedFix.slice(0, 100)}`,
82
+ };
83
+ });
84
+ };
85
+ }
86
+ // ── Orchestrator ──
87
+ export async function fetchAndFix(comments, applier, prNumber) {
88
+ // Filter to unresolved comments only
89
+ const unresolved = comments.filter((c) => !c.resolved);
90
+ // Parse into fix requests
91
+ const fixRequests = unresolved.map(parseFixRequest);
92
+ // Group by file
93
+ const grouped = groupByFile(fixRequests);
94
+ // Apply fixes per file
95
+ const results = [];
96
+ for (const [file, requests] of grouped) {
97
+ const fileResults = await applier(file, requests);
98
+ results.push(...fileResults);
99
+ }
100
+ return {
101
+ prNumber,
102
+ totalComments: comments.length,
103
+ fixRequests,
104
+ results,
105
+ fixedCount: results.filter((r) => r.status === 'fixed').length,
106
+ skippedCount: results.filter((r) => r.status === 'skipped').length,
107
+ manualCount: results.filter((r) => r.status === 'manual').length,
108
+ };
109
+ }
110
+ // ── Formatting ──
111
+ export function formatFetchFixReport(report) {
112
+ const lines = [];
113
+ lines.push(`## Fetch & Fix Report — PR #${report.prNumber}\n`);
114
+ lines.push(`**Comments**: ${report.totalComments} | **Fix requests**: ${report.fixRequests.length} | **Fixed**: ${report.fixedCount} | **Manual**: ${report.manualCount}\n`);
115
+ if (report.results.length === 0) {
116
+ lines.push('No unresolved comments to fix.\n');
117
+ return lines.join('\n');
118
+ }
119
+ const fixed = report.results.filter((r) => r.status === 'fixed');
120
+ const manual = report.results.filter((r) => r.status === 'manual');
121
+ if (fixed.length > 0) {
122
+ lines.push('### Auto-fixed\n');
123
+ for (const r of fixed) {
124
+ lines.push(`- ✅ \`${r.file}\` — ${r.action}`);
125
+ }
126
+ lines.push('');
127
+ }
128
+ if (manual.length > 0) {
129
+ lines.push('### Needs manual attention\n');
130
+ for (const r of manual) {
131
+ lines.push(`- 🔧 \`${r.file}\` — ${r.action}`);
132
+ }
133
+ lines.push('');
134
+ }
135
+ return lines.join('\n');
136
+ }
137
+ //# sourceMappingURL=fetch-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-fix.js","sourceRoot":"","sources":["../src/fetch-fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Flood / spam PR detection.
3
+ *
4
+ * Inspects lightweight PR metadata and returns a FloodResult that tells
5
+ * the pipeline whether to skip, run a lightweight review, or run a full
6
+ * review. No network calls — pure computation.
7
+ */
8
+ export interface FloodSignal {
9
+ type: 'bot' | 'mass_prs' | 'empty_description' | 'huge_diff';
10
+ confidence: number;
11
+ detail: string;
12
+ }
13
+ export interface FloodResult {
14
+ isFlood: boolean;
15
+ signals: FloodSignal[];
16
+ recommendation: 'skip' | 'lightweight' | 'full';
17
+ }
18
+ /**
19
+ * Analyse PR metadata and return a FloodResult.
20
+ *
21
+ * Decision rules (applied in order, most severe wins):
22
+ * 1. Bot author → confidence 1.0, recommendation "skip"
23
+ * 2. Mass PRs (> 5) → confidence 0.9, recommendation "lightweight"
24
+ * 3. Huge diff (> 5 k) → confidence 0.8, recommendation "lightweight"
25
+ * 4. Empty description with generic title → confidence 0.7, recommendation "lightweight"
26
+ */
27
+ export declare function detectFlood(input: {
28
+ authorLogin: string;
29
+ prTitle: string;
30
+ prBody: string | null;
31
+ linesChanged: number;
32
+ recentPrCount?: number;
33
+ }): FloodResult;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flood/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,mBAAmB,GAAG,WAAW,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;CACjD;AAKD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,WAAW,CAqDd"}