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
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Ollama provider — calls a local Ollama instance via OpenAI-compatible API.
3
+ *
4
+ * Uses @ai-sdk/openai pointed at http://localhost:11434/v1.
5
+ * No API key required — Ollama accepts 'ollama' as a dummy key.
6
+ */
7
+ import { createOpenAI } from '@ai-sdk/openai';
8
+ import { generateText } from 'ai';
9
+ /** Default Ollama local inference endpoint (OpenAI-compatible) */
10
+ const DEFAULT_OLLAMA_BASE_URL = 'http://localhost:11434/v1';
11
+ /**
12
+ * Create a GenerateTextFn that calls a local Ollama instance.
13
+ *
14
+ * @param model - Ollama model tag (e.g., 'llama3', 'qwen2.5-coder:7b')
15
+ * @param baseURL - Ollama endpoint. Defaults to 'http://localhost:11434/v1'.
16
+ */
17
+ export function createOllamaGenerateFn(model, baseURL = DEFAULT_OLLAMA_BASE_URL) {
18
+ const ollama = createOpenAI({ baseURL, apiKey: 'ollama' });
19
+ const ollamaModel = ollama(model);
20
+ return async (system, prompt) => {
21
+ const result = await generateText({ model: ollamaModel, system, prompt });
22
+ return {
23
+ text: result.text,
24
+ tokensUsed: (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0),
25
+ provider: 'ollama',
26
+ model,
27
+ };
28
+ };
29
+ }
30
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAGlC,kEAAkE;AAClE,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAa,EACb,OAAO,GAAG,uBAAuB;IAEjC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,OAAO,KAAK,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;YAChF,QAAQ,EAAE,QAAQ;YAClB,KAAK;SACN,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { EmbeddingProvider } from '../embed.js';
2
+ import type { ReviewFinding } from '../types.js';
3
+ /**
4
+ * Rerank findings using embedding similarity to HIGH_PRIORITY_REF.
5
+ * Combined score = severity_weight × (cosine_similarity + context_boost)
6
+ * Falls back to original order if embeddingProvider is not available.
7
+ */
8
+ export declare function rankFindings(findings: ReviewFinding[], embeddingProvider: EmbeddingProvider | null | undefined): Promise<ReviewFinding[]>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ranking/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyDjD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GACtD,OAAO,CAAC,aAAa,EAAE,CAAC,CA4B1B"}
@@ -0,0 +1,82 @@
1
+ import { cosineSimilarity } from '../embed.js';
2
+ // Reference text that represents "high priority review concern"
3
+ // This is a fixed reference — we embed it once and compare all findings to it
4
+ const HIGH_PRIORITY_REF = 'critical security vulnerability authentication bypass memory corruption data exposure injection attack';
5
+ // File paths that get a context boost (auth, security, payment critical paths)
6
+ const HIGH_PRIORITY_PATTERNS = [
7
+ /auth/i,
8
+ /security/i,
9
+ /payment/i,
10
+ /credential/i,
11
+ /token/i,
12
+ /secret/i,
13
+ /password/i,
14
+ /crypto/i,
15
+ /encrypt/i,
16
+ /session/i,
17
+ ];
18
+ const CONTEXT_BOOST = 0.2;
19
+ /**
20
+ * Severity numeric weight (higher = more important).
21
+ */
22
+ function severityWeight(severity) {
23
+ switch (severity?.toLowerCase()) {
24
+ case 'critical':
25
+ return 4;
26
+ case 'high':
27
+ return 3;
28
+ case 'medium':
29
+ return 2;
30
+ case 'low':
31
+ return 1;
32
+ default:
33
+ return 1;
34
+ }
35
+ }
36
+ /**
37
+ * Check if a file path matches any high-priority pattern.
38
+ */
39
+ function hasContextBoost(filePath) {
40
+ if (!filePath)
41
+ return false;
42
+ return HIGH_PRIORITY_PATTERNS.some((p) => p.test(filePath));
43
+ }
44
+ /**
45
+ * Build a text representation of a finding for embedding.
46
+ * ReviewFinding uses `message` as the primary text field (no `title` or `description`).
47
+ */
48
+ function findingToText(f) {
49
+ return [f.message ?? '', f.category ?? '', f.file ?? ''].filter(Boolean).join(' ');
50
+ }
51
+ /**
52
+ * Rerank findings using embedding similarity to HIGH_PRIORITY_REF.
53
+ * Combined score = severity_weight × (cosine_similarity + context_boost)
54
+ * Falls back to original order if embeddingProvider is not available.
55
+ */
56
+ export async function rankFindings(findings, embeddingProvider) {
57
+ if (!embeddingProvider || findings.length <= 1) {
58
+ return findings;
59
+ }
60
+ try {
61
+ // Embed all findings + reference in one batch
62
+ const texts = [HIGH_PRIORITY_REF, ...findings.map(findingToText)];
63
+ const embeddings = await embeddingProvider.embedBatch(texts);
64
+ const refEmbedding = embeddings[0];
65
+ const findingEmbeddings = embeddings.slice(1);
66
+ const scored = findings.map((finding, i) => {
67
+ const embedding = findingEmbeddings[i];
68
+ const similarity = cosineSimilarity(refEmbedding, embedding);
69
+ const boost = hasContextBoost(finding.file) ? CONTEXT_BOOST : 0;
70
+ const relevance = Math.min(1, similarity + boost);
71
+ const combined = severityWeight(finding.severity) * relevance;
72
+ return { finding, combined };
73
+ });
74
+ scored.sort((a, b) => b.combined - a.combined);
75
+ return scored.map((s) => s.finding);
76
+ }
77
+ catch {
78
+ // Non-fatal — return original order on any error
79
+ return findings;
80
+ }
81
+ }
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ranking/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Circuit Breaker — Loop Detection for Recursive Review
3
+ *
4
+ * Detects when the same findings are appearing across iterations
5
+ * by fingerprinting finding sets and tracking consecutive matches.
6
+ */
7
+ import type { ReviewFinding } from '../types.js';
8
+ export interface CircuitBreakerState {
9
+ previousFingerprints: string[];
10
+ consecutiveSimilarCount: number;
11
+ threshold: number;
12
+ }
13
+ export interface CircuitBreakerResult {
14
+ shouldBreak: boolean;
15
+ reason?: string;
16
+ }
17
+ /**
18
+ * Compute a deterministic fingerprint for a set of findings.
19
+ * Sorts by (file, line, category) before hashing to be order-independent.
20
+ */
21
+ export declare function fingerprintFindings(findings: ReviewFinding[]): string;
22
+ /**
23
+ * Check if the current findings trigger the circuit breaker.
24
+ * Returns shouldBreak=true if the same fingerprint has appeared
25
+ * `threshold` times consecutively.
26
+ */
27
+ export declare function checkCircuitBreaker(findings: ReviewFinding[], state: CircuitBreakerState): CircuitBreakerResult;
28
+ /**
29
+ * Update circuit breaker state after an iteration.
30
+ */
31
+ export declare function updateCircuitBreakerState(findings: ReviewFinding[], state: CircuitBreakerState): CircuitBreakerState;
32
+ /**
33
+ * Create initial circuit breaker state.
34
+ */
35
+ export declare function createCircuitBreakerState(threshold?: number): CircuitBreakerState;
36
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/recursive/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAMrE;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,CAetB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,mBAAmB,GACzB,mBAAmB,CAUrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,SAAI,GAAG,mBAAmB,CAM5E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Circuit Breaker — Loop Detection for Recursive Review
3
+ *
4
+ * Detects when the same findings are appearing across iterations
5
+ * by fingerprinting finding sets and tracking consecutive matches.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ // ─── Fingerprinting ────────────────────────────────────────────
9
+ /**
10
+ * Compute a deterministic fingerprint for a set of findings.
11
+ * Sorts by (file, line, category) before hashing to be order-independent.
12
+ */
13
+ export function fingerprintFindings(findings) {
14
+ const keys = findings
15
+ .map((f) => `${f.file ?? ''}:${f.line ?? 0}:${f.category ?? ''}`)
16
+ .sort()
17
+ .join('|');
18
+ return createHash('sha256').update(keys).digest('hex').slice(0, 16);
19
+ }
20
+ // ─── Circuit Breaker Logic ─────────────────────────────────────
21
+ /**
22
+ * Check if the current findings trigger the circuit breaker.
23
+ * Returns shouldBreak=true if the same fingerprint has appeared
24
+ * `threshold` times consecutively.
25
+ */
26
+ export function checkCircuitBreaker(findings, state) {
27
+ const fingerprint = fingerprintFindings(findings);
28
+ const lastFingerprint = state.previousFingerprints[state.previousFingerprints.length - 1];
29
+ if (fingerprint === lastFingerprint) {
30
+ const newCount = state.consecutiveSimilarCount + 1;
31
+ if (newCount >= state.threshold) {
32
+ return {
33
+ shouldBreak: true,
34
+ reason: `circuit-break: identical findings (fingerprint ${fingerprint}) in ${newCount} consecutive iterations`,
35
+ };
36
+ }
37
+ }
38
+ return { shouldBreak: false };
39
+ }
40
+ /**
41
+ * Update circuit breaker state after an iteration.
42
+ */
43
+ export function updateCircuitBreakerState(findings, state) {
44
+ const fingerprint = fingerprintFindings(findings);
45
+ const lastFingerprint = state.previousFingerprints[state.previousFingerprints.length - 1];
46
+ return {
47
+ previousFingerprints: [...state.previousFingerprints, fingerprint],
48
+ consecutiveSimilarCount: fingerprint === lastFingerprint ? state.consecutiveSimilarCount + 1 : 0,
49
+ threshold: state.threshold,
50
+ };
51
+ }
52
+ /**
53
+ * Create initial circuit breaker state.
54
+ */
55
+ export function createCircuitBreakerState(threshold = 2) {
56
+ return {
57
+ previousFingerprints: [],
58
+ consecutiveSimilarCount: 0,
59
+ threshold,
60
+ };
61
+ }
62
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/recursive/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBzC,kEAAkE;AAElE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,MAAM,IAAI,GAAG,QAAQ;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;SAChE,IAAI,EAAE;SACN,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,kEAAkE;AAElE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,KAA0B;IAE1B,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1F,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACnD,IAAI,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,kDAAkD,WAAW,QAAQ,QAAQ,yBAAyB;aAC/G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAyB,EACzB,KAA0B;IAE1B,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1F,OAAO;QACL,oBAAoB,EAAE,CAAC,GAAG,KAAK,CAAC,oBAAoB,EAAE,WAAW,CAAC;QAClE,uBAAuB,EACrB,WAAW,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAS,GAAG,CAAC;IACrD,OAAO;QACL,oBAAoB,EAAE,EAAE;QACxB,uBAAuB,EAAE,CAAC;QAC1B,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -25,6 +25,10 @@ export interface RecursiveReviewInput {
25
25
  config?: Partial<RecursiveReviewConfig>;
26
26
  /** Optional progress callback */
27
27
  onProgress?: (message: string) => void;
28
+ /** Feature flags forwarded from ReviewInput.features */
29
+ features?: {
30
+ circuitBreaker?: boolean;
31
+ };
28
32
  }
29
33
  /**
30
34
  * Run the recursive review loop.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recursive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,qEAAqE;IACrE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAE1B,kDAAkD;IAClD,UAAU,EAAE,cAAc,CAAC;IAE3B,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAExC,iCAAiC;IACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAmFvC;AA4ED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9F,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recursive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,qEAAqE;IACrE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAE1B,kDAAkD;IAClD,UAAU,EAAE,cAAc,CAAC;IAE3B,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAExC,iCAAiC;IACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,wDAAwD;IACxD,QAAQ,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAqGvC;AA4ED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9F,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
@@ -11,6 +11,7 @@
11
11
  * 4. Check convergence (max 2 iterations or no new issues)
12
12
  * 5. Build regression report
13
13
  */
14
+ import { checkCircuitBreaker, createCircuitBreakerState, updateCircuitBreakerState, } from './circuit-breaker.js';
14
15
  import { applyVirtualPatches, buildPatchContext, extractPatches } from './patch-extractor.js';
15
16
  import { runReReview } from './re-reviewer.js';
16
17
  import { DEFAULT_RECURSIVE_CONFIG } from './types.js';
@@ -41,6 +42,8 @@ export async function recursiveReview(input) {
41
42
  let currentPatches = patches;
42
43
  let totalNewIssues = 0;
43
44
  const allRegressions = [];
45
+ const circuitBreakerEnabled = input.features?.circuitBreaker !== false;
46
+ let cbState = createCircuitBreakerState(config.circuitBreakerThreshold ?? 2);
44
47
  for (let iteration = 1; iteration <= config.maxIterations; iteration++) {
45
48
  emit(`Recursive review: iteration ${iteration}/${config.maxIterations}`);
46
49
  // Step 2: Apply patches virtually
@@ -54,7 +57,21 @@ export async function recursiveReview(input) {
54
57
  });
55
58
  const newFindings = reReviewResult.findings;
56
59
  totalNewIssues += newFindings.length;
57
- // Step 4: Check convergence
60
+ // Step 4a: Circuit breaker — detect semantic loops before convergence check
61
+ if (circuitBreakerEnabled) {
62
+ const cbResult = checkCircuitBreaker(newFindings, cbState);
63
+ if (cbResult.shouldBreak) {
64
+ emit(`Recursive review: ${cbResult.reason}`);
65
+ return {
66
+ iterations: iteration,
67
+ converged: false,
68
+ regressions: allRegressions,
69
+ totalNewIssues,
70
+ };
71
+ }
72
+ cbState = updateCircuitBreakerState(newFindings, cbState);
73
+ }
74
+ // Step 4b: Check convergence
58
75
  if (newFindings.length === 0) {
59
76
  emit(`Recursive review: converged after ${iteration} iteration(s) — no new issues`);
60
77
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recursive/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recursive/index.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,8 @@ export interface RecursiveReviewReport {
56
56
  export interface RecursiveReviewConfig {
57
57
  /** Maximum number of re-review iterations. Default: 2 */
58
58
  maxIterations: number;
59
+ /** Number of consecutive identical-fingerprint iterations before circuit breaks. Default: 2 */
60
+ circuitBreakerThreshold?: number;
59
61
  }
60
62
  /** Default configuration values */
61
63
  export declare const DEFAULT_RECURSIVE_CONFIG: RecursiveReviewConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recursive/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IAExB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;CACtB;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,yDAAyD;IACzD,YAAY,EAAE,IAAI,CAAC;IAEnB,0DAA0D;IAC1D,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAID;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IAEnB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IAEnB,8DAA8D;IAC9D,WAAW,EAAE,iBAAiB,EAAE,CAAC;IAEjC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAID;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,mCAAmC;AACnC,eAAO,MAAM,wBAAwB,EAAE,qBAEtC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recursive/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IAExB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;CACtB;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,yDAAyD;IACzD,YAAY,EAAE,IAAI,CAAC;IAEnB,0DAA0D;IAC1D,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAID;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IAEnB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IAEnB,8DAA8D;IAC9D,WAAW,EAAE,iBAAiB,EAAE,CAAC;IAEjC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAID;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,mCAAmC;AACnC,eAAO,MAAM,wBAAwB,EAAE,qBAGtC,CAAC"}
@@ -7,5 +7,6 @@
7
7
  /** Default configuration values */
8
8
  export const DEFAULT_RECURSIVE_CONFIG = {
9
9
  maxIterations: 2,
10
+ circuitBreakerThreshold: 2,
10
11
  };
11
12
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recursive/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4EH,mCAAmC;AACnC,MAAM,CAAC,MAAM,wBAAwB,GAA0B;IAC7D,aAAa,EAAE,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recursive/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8EH,mCAAmC;AACnC,MAAM,CAAC,MAAM,wBAAwB,GAA0B;IAC7D,aAAa,EAAE,CAAC;IAChB,uBAAuB,EAAE,CAAC;CAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff-mapper.js","sourceRoot":"","sources":["../../src/scope/diff-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,kEAAkE;AAElE;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,mDAAmD,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kEAAkE;AAElE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,OAAqB;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1D,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACxC,aAAa,CACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,EAC9C,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,CACf,CACF,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kEAAkE;AAElE;;;;;GAKG;AACH,SAAS,aAAa,CACpB,MAAc,EACd,IAAY,EACZ,MAAc,EACd,IAAY;IAEZ,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"diff-mapper.js","sourceRoot":"","sources":["../../src/scope/diff-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,kEAAkE;AAElE;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,mDAAmD,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kEAAkE;AAElE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,OAAqB;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1D,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACxC,aAAa,CACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,EAC9C,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,CACf,CACF,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kEAAkE;AAElE;;;;;GAKG;AACH,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc,EAAE,IAAY;IAC/E,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Entity-Level Semantic Diff
3
+ *
4
+ * Classifies affected symbols into cosmetic (whitespace/comments/formatting),
5
+ * logic (actual behavior change), or renamed (name changed, body equivalent).
6
+ *
7
+ * Operates as a post-processing step on top of diff-mapper output.
8
+ * Uses regex heuristics — no AST required for v1.
9
+ *
10
+ * Pure functions with no side effects.
11
+ */
12
+ import type { AffectedSymbol, EntityChange, EntityDiffOptions, RenameMatch, SymbolInfo } from './types.js';
13
+ /**
14
+ * Extract the actual addition/deletion lines from a diff that fall
15
+ * within a symbol's line range (new-side lines for +, old-side for -).
16
+ *
17
+ * Walks the diff content, tracking the current new-side line number
18
+ * via hunk headers and line prefixes, and collects lines that overlap
19
+ * with the symbol's [startLine, endLine] range.
20
+ *
21
+ * @param diffContent - Raw unified diff content for a single file
22
+ * @param symbol - The symbol whose range to extract lines for
23
+ * @returns Array of raw diff lines (with +/- prefix) within the symbol range
24
+ */
25
+ export declare function extractEntityDiffLines(diffContent: string, symbol: SymbolInfo): string[];
26
+ /**
27
+ * Classify affected symbols into cosmetic or logic changes based on
28
+ * their diff lines.
29
+ *
30
+ * A change is `cosmetic` if ALL diff lines within the entity are cosmetic
31
+ * (whitespace, comments, formatting). Otherwise it's `logic`.
32
+ *
33
+ * @param affectedSymbols - Symbols affected by the diff (from mapDiffToSymbols)
34
+ * @param diffContent - Raw unified diff content for the file
35
+ * @returns Array of EntityChange with classification
36
+ */
37
+ export declare function classifyEntityChanges(affectedSymbols: AffectedSymbol[], diffContent: string): EntityChange[];
38
+ /**
39
+ * Detect renamed entities by matching removed symbols with added symbols
40
+ * that have similar bodies.
41
+ *
42
+ * @param removedSymbols - Symbols present in old version but not in new
43
+ * @param addedSymbols - Symbols present in new version but not in old
44
+ * @param oldSource - Full source of the old file version
45
+ * @param newSource - Full source of the new file version
46
+ * @param options - Configuration options
47
+ * @returns Array of rename matches
48
+ */
49
+ export declare function detectRenames(removedSymbols: SymbolInfo[], addedSymbols: SymbolInfo[], oldSource: string, newSource: string, options?: EntityDiffOptions): RenameMatch[];
50
+ /**
51
+ * Filter entity changes to only those with logic changes.
52
+ * Cosmetic and renamed entities are excluded.
53
+ *
54
+ * @param changes - Classified entity changes
55
+ * @returns Only entities with `logic` classification
56
+ */
57
+ export declare function filterLogicChanges(changes: EntityChange[]): EntityChange[];
58
+ //# sourceMappingURL=entity-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-diff.d.ts","sourceRoot":"","sources":["../../src/scope/entity-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAuBpB;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAyCxF;AAcD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,cAAc,EAAE,EACjC,WAAW,EAAE,MAAM,GAClB,YAAY,EAAE,CAqBhB;AA6CD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,UAAU,EAAE,EAC5B,YAAY,EAAE,UAAU,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,WAAW,EAAE,CAiDf;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAE1E"}