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,39 @@
1
+ /**
2
+ * Lightweight OTel-compatible tracing abstraction.
3
+ *
4
+ * Works WITHOUT requiring @opentelemetry packages (they are optional).
5
+ * Defaults to a no-op implementation. Real OTel can be injected via
6
+ * configureTracer() at application startup.
7
+ */
8
+ export interface Span {
9
+ setAttribute(key: string, value: string | number | boolean): void;
10
+ recordException(error: Error): void;
11
+ end(): void;
12
+ }
13
+ export interface Tracer {
14
+ startSpan(name: string, attributes?: Record<string, string | number | boolean>): Span;
15
+ }
16
+ /**
17
+ * Replace the global tracer with a real OTel tracer (or any custom implementation).
18
+ * Must be called before any pipeline operations to take effect.
19
+ */
20
+ export declare function configureTracer(tracer: Tracer): void;
21
+ /**
22
+ * Get the currently active global tracer.
23
+ * Returns NoopTracer by default when OTel is not configured.
24
+ */
25
+ export declare function getTracer(): Tracer;
26
+ /**
27
+ * Wrap an async function in a span.
28
+ *
29
+ * Creates a span, passes it to the callback so attributes can be set
30
+ * mid-execution, then ends the span when the promise settles.
31
+ * Exceptions are recorded on the span before being re-thrown.
32
+ *
33
+ * @param name - Span name (e.g., "ghagga.review")
34
+ * @param attributes - Initial span attributes set before the function runs
35
+ * @param fn - Async function to execute inside the span
36
+ * @returns The resolved value of fn
37
+ */
38
+ export declare function withSpan<T>(name: string, attributes: Record<string, string | number | boolean>, fn: (span: Span) => Promise<T>): Promise<T>;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,IAAI;IACnB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClE,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpC,GAAG,IAAI,IAAI,CAAC;CACb;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CACvF;AA4BD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACrD,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAaZ"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Lightweight OTel-compatible tracing abstraction.
3
+ *
4
+ * Works WITHOUT requiring @opentelemetry packages (they are optional).
5
+ * Defaults to a no-op implementation. Real OTel can be injected via
6
+ * configureTracer() at application startup.
7
+ */
8
+ // ─── No-op Implementation ────────────────────────────────────────
9
+ class NoopSpan {
10
+ setAttribute(_key, _value) {
11
+ // intentional no-op
12
+ }
13
+ recordException(_error) {
14
+ // intentional no-op
15
+ }
16
+ end() {
17
+ // intentional no-op
18
+ }
19
+ }
20
+ class NoopTracer {
21
+ startSpan(_name, _attributes) {
22
+ return new NoopSpan();
23
+ }
24
+ }
25
+ // ─── Global Tracer State ─────────────────────────────────────────
26
+ let _tracer = new NoopTracer();
27
+ /**
28
+ * Replace the global tracer with a real OTel tracer (or any custom implementation).
29
+ * Must be called before any pipeline operations to take effect.
30
+ */
31
+ export function configureTracer(tracer) {
32
+ _tracer = tracer;
33
+ }
34
+ /**
35
+ * Get the currently active global tracer.
36
+ * Returns NoopTracer by default when OTel is not configured.
37
+ */
38
+ export function getTracer() {
39
+ return _tracer;
40
+ }
41
+ // ─── Convenience Wrapper ─────────────────────────────────────────
42
+ /**
43
+ * Wrap an async function in a span.
44
+ *
45
+ * Creates a span, passes it to the callback so attributes can be set
46
+ * mid-execution, then ends the span when the promise settles.
47
+ * Exceptions are recorded on the span before being re-thrown.
48
+ *
49
+ * @param name - Span name (e.g., "ghagga.review")
50
+ * @param attributes - Initial span attributes set before the function runs
51
+ * @param fn - Async function to execute inside the span
52
+ * @returns The resolved value of fn
53
+ */
54
+ export async function withSpan(name, attributes, fn) {
55
+ const span = _tracer.startSpan(name, attributes);
56
+ try {
57
+ const result = await fn(span);
58
+ return result;
59
+ }
60
+ catch (error) {
61
+ if (error instanceof Error) {
62
+ span.recordException(error);
63
+ }
64
+ throw error;
65
+ }
66
+ finally {
67
+ span.end();
68
+ }
69
+ }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,oEAAoE;AAEpE,MAAM,QAAQ;IACZ,YAAY,CAAC,IAAY,EAAE,MAAiC;QAC1D,oBAAoB;IACtB,CAAC;IAED,eAAe,CAAC,MAAa;QAC3B,oBAAoB;IACtB,CAAC;IAED,GAAG;QACD,oBAAoB;IACtB,CAAC;CACF;AAED,MAAM,UAAU;IACd,SAAS,CAAC,KAAa,EAAE,WAAuD;QAC9E,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;CACF;AAED,oEAAoE;AAEpE,IAAI,OAAO,GAAW,IAAI,UAAU,EAAE,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,UAAqD,EACrD,EAA8B;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Trajectory recording — captures every step of the review pipeline
3
+ * as a structured JSON event for debugging and explainability.
4
+ *
5
+ * After a review, consumers can inspect the trajectory to understand:
6
+ * - Which agents ran and in what order
7
+ * - What each agent received as input and produced as output
8
+ * - Token usage per step
9
+ * - Total cost breakdown
10
+ */
11
+ export type TrajectoryEventType = 'pipeline_start' | 'pipeline_end' | 'agent_start' | 'agent_end' | 'tool_start' | 'tool_end' | 'llm_call' | 'error';
12
+ export interface TrajectoryEvent {
13
+ type: TrajectoryEventType;
14
+ timestamp: string;
15
+ step: string;
16
+ durationMs?: number;
17
+ tokensUsed?: number;
18
+ model?: string;
19
+ input?: string;
20
+ output?: string;
21
+ error?: string;
22
+ metadata?: Record<string, unknown>;
23
+ }
24
+ export interface Trajectory {
25
+ reviewId: string;
26
+ project: string;
27
+ startedAt: string;
28
+ completedAt: string | null;
29
+ events: TrajectoryEvent[];
30
+ totalTokens: number;
31
+ totalDurationMs: number;
32
+ estimatedCostUSD: number;
33
+ }
34
+ export declare class TrajectoryRecorder {
35
+ private events;
36
+ private startTime;
37
+ private reviewId;
38
+ private project;
39
+ constructor(reviewId: string, project: string);
40
+ record(type: TrajectoryEventType, step: string, data: Partial<Omit<TrajectoryEvent, 'type' | 'timestamp' | 'step'>>): void;
41
+ recordAgentStart(agent: string, model?: string): void;
42
+ recordAgentEnd(agent: string, opts: {
43
+ tokensUsed?: number;
44
+ durationMs?: number;
45
+ output?: string;
46
+ }): void;
47
+ recordToolStart(tool: string): void;
48
+ recordToolEnd(tool: string, opts: {
49
+ durationMs?: number;
50
+ output?: string;
51
+ }): void;
52
+ recordLLMCall(model: string, opts: {
53
+ tokensUsed?: number;
54
+ durationMs?: number;
55
+ }): void;
56
+ recordError(step: string, error: string): void;
57
+ finalize(): Trajectory;
58
+ getEvents(): ReadonlyArray<TrajectoryEvent>;
59
+ getEventsByType(type: TrajectoryEventType): TrajectoryEvent[];
60
+ getAgentSteps(): string[];
61
+ }
62
+ export declare function formatTrajectory(trajectory: Trajectory): string;
63
+ export declare function trajectoryToJSON(trajectory: Trajectory): string;
64
+ export declare function trajectoryFromJSON(json: string): Trajectory;
65
+ //# sourceMappingURL=trajectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../src/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,WAAW,GACX,YAAY,GACZ,UAAU,GACV,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAID,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAO7C,MAAM,CACJ,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,GAClE,IAAI;IASP,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAIrD,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIjF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAItF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9C,QAAQ,IAAI,UAAU;IAoBtB,SAAS,IAAI,aAAa,CAAC,eAAe,CAAC;IAI3C,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,EAAE;IAI7D,aAAa,IAAI,MAAM,EAAE;CAG1B;AAID,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAoD/D;AAID,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAE3D"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Trajectory recording — captures every step of the review pipeline
3
+ * as a structured JSON event for debugging and explainability.
4
+ *
5
+ * After a review, consumers can inspect the trajectory to understand:
6
+ * - Which agents ran and in what order
7
+ * - What each agent received as input and produced as output
8
+ * - Token usage per step
9
+ * - Total cost breakdown
10
+ */
11
+ // ── Recorder ──
12
+ export class TrajectoryRecorder {
13
+ events = [];
14
+ startTime;
15
+ reviewId;
16
+ project;
17
+ constructor(reviewId, project) {
18
+ this.reviewId = reviewId;
19
+ this.project = project;
20
+ this.startTime = Date.now();
21
+ this.record('pipeline_start', 'pipeline', {});
22
+ }
23
+ record(type, step, data) {
24
+ this.events.push({
25
+ type,
26
+ timestamp: new Date().toISOString(),
27
+ step,
28
+ ...data,
29
+ });
30
+ }
31
+ recordAgentStart(agent, model) {
32
+ this.record('agent_start', agent, { model });
33
+ }
34
+ recordAgentEnd(agent, opts) {
35
+ this.record('agent_end', agent, opts);
36
+ }
37
+ recordToolStart(tool) {
38
+ this.record('tool_start', tool, {});
39
+ }
40
+ recordToolEnd(tool, opts) {
41
+ this.record('tool_end', tool, opts);
42
+ }
43
+ recordLLMCall(model, opts) {
44
+ this.record('llm_call', model, { model, ...opts });
45
+ }
46
+ recordError(step, error) {
47
+ this.record('error', step, { error });
48
+ }
49
+ // ── Finalization ──
50
+ finalize() {
51
+ this.record('pipeline_end', 'pipeline', {});
52
+ const totalTokens = this.events.reduce((sum, e) => sum + (e.tokensUsed ?? 0), 0);
53
+ const totalDurationMs = Date.now() - this.startTime;
54
+ return {
55
+ reviewId: this.reviewId,
56
+ project: this.project,
57
+ startedAt: new Date(this.startTime).toISOString(),
58
+ completedAt: new Date().toISOString(),
59
+ events: this.events,
60
+ totalTokens,
61
+ totalDurationMs,
62
+ estimatedCostUSD: 0, // filled by consumer with pricing info
63
+ };
64
+ }
65
+ // ── Query ──
66
+ getEvents() {
67
+ return this.events;
68
+ }
69
+ getEventsByType(type) {
70
+ return this.events.filter((e) => e.type === type);
71
+ }
72
+ getAgentSteps() {
73
+ return this.events.filter((e) => e.type === 'agent_start').map((e) => e.step);
74
+ }
75
+ }
76
+ // ── Formatting ──
77
+ export function formatTrajectory(trajectory) {
78
+ const lines = [];
79
+ lines.push(`## Review Trajectory — ${trajectory.reviewId}`);
80
+ lines.push(`**Project**: ${trajectory.project} | **Duration**: ${(trajectory.totalDurationMs / 1000).toFixed(1)}s | **Tokens**: ${trajectory.totalTokens}`);
81
+ lines.push('');
82
+ let indent = 0;
83
+ for (const event of trajectory.events) {
84
+ const prefix = ' '.repeat(indent);
85
+ const ts = event.timestamp.slice(11, 19); // HH:MM:SS
86
+ switch (event.type) {
87
+ case 'pipeline_start':
88
+ lines.push(`${prefix}${ts} ▶ Pipeline started`);
89
+ indent++;
90
+ break;
91
+ case 'pipeline_end':
92
+ indent = Math.max(0, indent - 1);
93
+ lines.push(`${prefix}${ts} ■ Pipeline ended`);
94
+ break;
95
+ case 'agent_start':
96
+ lines.push(`${prefix}${ts} → ${event.step}${event.model ? ` (${event.model})` : ''}`);
97
+ indent++;
98
+ break;
99
+ case 'agent_end':
100
+ indent = Math.max(0, indent - 1);
101
+ lines.push(`${prefix}${ts} ← ${event.step}${event.tokensUsed ? ` [${event.tokensUsed} tok]` : ''}${event.durationMs ? ` ${event.durationMs}ms` : ''}`);
102
+ break;
103
+ case 'tool_start':
104
+ lines.push(`${prefix}${ts} 🔧 ${event.step}`);
105
+ break;
106
+ case 'tool_end':
107
+ lines.push(`${prefix}${ts} ✓ ${event.step}${event.durationMs ? ` ${event.durationMs}ms` : ''}`);
108
+ break;
109
+ case 'llm_call':
110
+ lines.push(`${prefix}${ts} 🤖 ${event.model}${event.tokensUsed ? ` [${event.tokensUsed} tok]` : ''}`);
111
+ break;
112
+ case 'error':
113
+ lines.push(`${prefix}${ts} ✗ ERROR: ${event.error}`);
114
+ break;
115
+ }
116
+ }
117
+ return lines.join('\n');
118
+ }
119
+ // ── Serialization ──
120
+ export function trajectoryToJSON(trajectory) {
121
+ return JSON.stringify(trajectory, null, 2);
122
+ }
123
+ export function trajectoryFromJSON(json) {
124
+ return JSON.parse(json);
125
+ }
126
+ //# sourceMappingURL=trajectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../src/trajectory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Author Trust Scoring
3
+ *
4
+ * Computes a trust score (0–1) for a PR author based on their git history
5
+ * in the repository. High-trust authors (well-known contributors) receive
6
+ * lightweight "simple" review; new/unknown authors receive deep "workflow" review.
7
+ *
8
+ * Score formula:
9
+ * commit_count_score : min(commitCount / 50, 1.0) * 0.6
10
+ * tenure_score : min(daysSinceFirstCommit / 365, 1.0) * 0.3
11
+ * recency_score : daysSinceLastCommit < 90 ? 0.1 : 0
12
+ */
13
+ import type { AuthorTrustScore, AuthorTrustTier } from '../types.js';
14
+ export interface TrustScoringOptions {
15
+ /** Path to the git repository directory. */
16
+ cwd: string;
17
+ /** Score threshold to classify an author as "trusted". Default: 0.7 */
18
+ trustedThreshold?: number;
19
+ /** Score threshold below which an author is classified as "new". Default: 0.3 */
20
+ newThreshold?: number;
21
+ }
22
+ /**
23
+ * Compute a trust score (0–1) for a given author using git log stats.
24
+ * Falls back to score=0 / tier="new" when git is unavailable or no history found.
25
+ */
26
+ export declare function computeAuthorTrustScore(author: string, options: TrustScoringOptions): Promise<AuthorTrustScore>;
27
+ /**
28
+ * Map a trust tier to a recommended review mode.
29
+ * - trusted → simple (lightweight, lower LLM cost)
30
+ * - new → workflow (deep multi-specialist review)
31
+ * - standard → unchanged (use the caller's default mode)
32
+ */
33
+ export declare function getReviewModeForTier(tier: AuthorTrustTier, defaultMode: string): string;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trust/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIrE,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA0D3B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CASvF"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Author Trust Scoring
3
+ *
4
+ * Computes a trust score (0–1) for a PR author based on their git history
5
+ * in the repository. High-trust authors (well-known contributors) receive
6
+ * lightweight "simple" review; new/unknown authors receive deep "workflow" review.
7
+ *
8
+ * Score formula:
9
+ * commit_count_score : min(commitCount / 50, 1.0) * 0.6
10
+ * tenure_score : min(daysSinceFirstCommit / 365, 1.0) * 0.3
11
+ * recency_score : daysSinceLastCommit < 90 ? 0.1 : 0
12
+ */
13
+ import { execFile } from 'node:child_process';
14
+ import { promisify } from 'node:util';
15
+ const execFileAsync = promisify(execFile);
16
+ /**
17
+ * Compute a trust score (0–1) for a given author using git log stats.
18
+ * Falls back to score=0 / tier="new" when git is unavailable or no history found.
19
+ */
20
+ export async function computeAuthorTrustScore(author, options) {
21
+ const { cwd, trustedThreshold = 0.7, newThreshold = 0.3 } = options;
22
+ let commitCount = 0;
23
+ let firstSeenDaysAgo = 0;
24
+ let lastSeenDaysAgo = 999;
25
+ try {
26
+ // Count commits by author
27
+ const { stdout: countOut } = await execFileAsync('git', ['log', '--oneline', '--author', author, '--'], { cwd });
28
+ commitCount = countOut.trim().split('\n').filter(Boolean).length;
29
+ if (commitCount > 0) {
30
+ // Get all commit timestamps (Unix epoch seconds), sorted ascending
31
+ const { stdout: datesOut } = await execFileAsync('git', ['log', '--format=%at', '--author', author, '--'], { cwd });
32
+ const timestamps = datesOut
33
+ .trim()
34
+ .split('\n')
35
+ .filter(Boolean)
36
+ .map(Number)
37
+ .sort((a, b) => a - b);
38
+ if (timestamps.length > 0) {
39
+ const nowSec = Date.now() / 1000;
40
+ firstSeenDaysAgo = Math.floor((nowSec - timestamps[0]) / (60 * 60 * 24));
41
+ lastSeenDaysAgo = Math.floor((nowSec - timestamps[timestamps.length - 1]) / (60 * 60 * 24));
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // git unavailable or not a repo — treat as new author (score=0)
47
+ }
48
+ const commitScore = Math.min(commitCount / 50, 1.0) * 0.6;
49
+ const tenureScore = Math.min(firstSeenDaysAgo / 365, 1.0) * 0.3;
50
+ const recencyScore = lastSeenDaysAgo < 90 ? 0.1 : 0;
51
+ const score = Math.round((commitScore + tenureScore + recencyScore) * 100) / 100;
52
+ const tier = score >= trustedThreshold ? 'trusted' : score >= newThreshold ? 'standard' : 'new';
53
+ return {
54
+ author,
55
+ score,
56
+ tier,
57
+ commitCount,
58
+ firstSeenDaysAgo,
59
+ lastUpdated: new Date(),
60
+ };
61
+ }
62
+ /**
63
+ * Map a trust tier to a recommended review mode.
64
+ * - trusted → simple (lightweight, lower LLM cost)
65
+ * - new → workflow (deep multi-specialist review)
66
+ * - standard → unchanged (use the caller's default mode)
67
+ */
68
+ export function getReviewModeForTier(tier, defaultMode) {
69
+ switch (tier) {
70
+ case 'trusted':
71
+ return 'simple';
72
+ case 'new':
73
+ return 'workflow';
74
+ default:
75
+ return defaultMode;
76
+ }
77
+ }
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trust/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAW1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAc,EACd,OAA4B;IAE5B,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAEpE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,eAAe,GAAG,GAAG,CAAC;IAE1B,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAC9C,KAAK,EACL,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAC9C,EAAE,GAAG,EAAE,CACR,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEjE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,mEAAmE;YACnE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAC9C,KAAK,EACL,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EACjD,EAAE,GAAG,EAAE,CACR,CAAC;YACF,MAAM,UAAU,GAAG,QAAQ;iBACxB,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,MAAM,CAAC;iBACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBACjC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1E,eAAe,GAAG,IAAI,CAAC,KAAK,CAC1B,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAChE,MAAM,YAAY,GAAG,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAEjF,MAAM,IAAI,GACR,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAErF,OAAO;QACL,MAAM;QACN,KAAK;QACL,IAAI;QACJ,WAAW;QACX,gBAAgB;QAChB,WAAW,EAAE,IAAI,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAqB,EAAE,WAAmB;IAC7E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -4,10 +4,20 @@
4
4
  * These types define the contract between the core review engine
5
5
  * and all distribution adapters (server, CLI, action).
6
6
  */
7
+ export type { EmbeddingProvider, EmbeddingProviderFactory } from './embed.js';
7
8
  export type ReviewMode = 'simple' | 'workflow' | 'consensus' | 'diagnostic' | 'fan-out';
8
- export type LLMProvider = 'anthropic' | 'openai' | 'google' | 'github' | 'ollama' | 'qwen' | 'groq' | 'cerebras' | 'deepseek' | 'openrouter' | 'cli-bridge' | 'gateway';
9
- /** Providers available in the SaaS dashboard (excludes Ollama) */
10
- export type SaaSProvider = 'anthropic' | 'openai' | 'google' | 'github' | 'qwen' | 'groq' | 'cerebras' | 'deepseek' | 'openrouter' | 'cli-bridge' | 'gateway';
9
+ /**
10
+ * Supported LLM provider modes.
11
+ * - gateway: delegates to mcp-llm-bridge (recommended for server/action)
12
+ * - cli-bridge: calls local CLIs directly (Claude, OpenCode, Gemini, Copilot) — CLI only
13
+ * - ollama: calls local Ollama instance directly (no subprocess, OpenAI-compatible)
14
+ *
15
+ * Migration: 'anthropic', 'openai', 'google', etc. → set provider: 'gateway' and
16
+ * configure credentials in mcp-llm-bridge vault.
17
+ */
18
+ export type LLMProvider = 'gateway' | 'cli-bridge' | 'ollama';
19
+ /** Providers available in the SaaS dashboard */
20
+ export type SaaSProvider = 'gateway' | 'cli-bridge' | 'ollama';
11
21
  export type ReviewLevel = 'soft' | 'normal' | 'strict';
12
22
  /**
13
23
  * A single entry in the provider fallback chain.
@@ -69,6 +79,11 @@ export interface ReviewInput {
69
79
  * Undefined when memory is disabled or unavailable — pipeline degrades gracefully.
70
80
  */
71
81
  memoryStorage?: MemoryStorage;
82
+ /**
83
+ * Base URL for the local Ollama instance.
84
+ * Only meaningful when provider === 'ollama'. Defaults to 'http://localhost:11434/v1'.
85
+ */
86
+ ollamaBaseURL?: string;
72
87
  /**
73
88
  * Optional progress callback for verbose/debug output.
74
89
  * Called at each pipeline step with status updates.
@@ -86,8 +101,47 @@ export interface ReviewInput {
86
101
  * When undefined, blast-radius is skipped (current behavior).
87
102
  */
88
103
  graphLoader?: import('./graph/schema.js').GraphLoader;
104
+ /**
105
+ * File content reader for usage analysis.
106
+ * Injected by the caller to read project source files.
107
+ * When undefined, function-level usage analysis is skipped.
108
+ */
109
+ fileReader?: import('./exploitability/analyzer.js').FileReader;
89
110
  /** Enable AI-powered post-analysis enhancement. Default: false. */
90
111
  enhance?: boolean;
112
+ /**
113
+ * Code intelligence provider for structural queries via MCP.
114
+ * Injected by the caller (connects to codedb, repoforge graph, etc.).
115
+ * When undefined, code intelligence context is skipped (graceful degradation).
116
+ */
117
+ codeIntelProvider?: import('./code-intel/types.js').CodeIntelProvider;
118
+ /**
119
+ * Embedding provider for semantic features (hybrid search, semantic ranking, negative examples).
120
+ * When undefined, all embedding-dependent features are skipped (graceful degradation).
121
+ */
122
+ embeddingProvider?: import('./embed.js').EmbeddingProvider;
123
+ /**
124
+ * PR author identifier (e.g. GitHub login or git author string).
125
+ * Used by the author trust scoring feature when features.authorTrust is enabled.
126
+ * When absent, trust scoring is skipped gracefully.
127
+ */
128
+ author?: string;
129
+ /**
130
+ * Feature flags for intelligence v2 capabilities.
131
+ * Defaults: hybridSearch/semanticRanking auto-enable when embeddingProvider is set.
132
+ */
133
+ features?: {
134
+ /** Enable hybrid BM25 + semantic vector search. Default: false (auto-enabled when embeddingProvider present). */
135
+ hybridSearch?: boolean;
136
+ /** Enable author trust-based finding prioritization. Default: false. */
137
+ authorTrust?: boolean;
138
+ /** Enable circuit breaker for LLM cascading failures. Default: true. */
139
+ circuitBreaker?: boolean;
140
+ /** Enable semantic re-ranking of findings. Default: false (auto-enabled when embeddingProvider present). */
141
+ semanticRanking?: boolean;
142
+ /** Enable negative example filtering (suppress known false positives). Default: false. */
143
+ negativeExamples?: boolean;
144
+ };
91
145
  }
92
146
  export interface ReviewSettings {
93
147
  enableSemgrep: boolean;
@@ -113,6 +167,28 @@ export interface ReviewSettings {
113
167
  enableRecursiveReview?: boolean;
114
168
  /** Max re-review iterations for recursive review. Default: 2. */
115
169
  maxRecursiveIterations?: number;
170
+ /** Lens names to use in fan-out mode (e.g., ["security", "wcag"]). */
171
+ lenses?: string[];
172
+ /** Path to directory containing custom lens JSON definitions. Default: .ghagga/lenses/ */
173
+ lensDir?: string;
174
+ /** Enable bidirectional code-doc validation. Default: false. */
175
+ enableDocValidation?: boolean;
176
+ /** Enable code intelligence structural context via MCP. Default: false. */
177
+ enableCodeIntel?: boolean;
178
+ /** Timeout in ms for code intelligence queries. Default: 5000. */
179
+ codeIntelTimeout?: number;
180
+ /** Max tokens for code intelligence context. Default: 1500. */
181
+ codeIntelMaxTokens?: number;
182
+ /** Max concurrent LLM calls in workflow/consensus modes. Default: 2. */
183
+ reviewConcurrency?: number;
184
+ /** Delay in ms between sequential LLM call batches. Default: 0. */
185
+ reviewDelayMs?: number;
186
+ /**
187
+ * Path to the JSONL file for the self-improving review loop.
188
+ * When set, past feedback is loaded and improvement rules are injected into agent prompts.
189
+ * Default: undefined (feature disabled).
190
+ */
191
+ selfImprovePath?: string;
116
192
  }
117
193
  export interface ReviewContext {
118
194
  /** Repository full name (e.g., "owner/repo") */
@@ -143,7 +219,7 @@ export interface Hypothesis {
143
219
  /** Files related to this hypothesis */
144
220
  relatedFiles: string[];
145
221
  }
146
- export type ReviewStatus = 'PASSED' | 'FAILED' | 'NEEDS_HUMAN_REVIEW' | 'SKIPPED';
222
+ export type ReviewStatus = 'PASSED' | 'FAILED' | 'NEEDS_HUMAN_REVIEW' | 'SKIPPED' | 'PARTIAL';
147
223
  export type FindingSeverity = 'critical' | 'high' | 'medium' | 'low' | 'info';
148
224
  export type FindingSource = 'ai' | 'semgrep' | 'trivy' | 'cpd' | (string & {});
149
225
  export interface ReviewResult {
@@ -169,6 +245,15 @@ export interface ReviewResult {
169
245
  checklistScore?: import('./checklist/scorer.js').ChecklistScoreResult;
170
246
  /** Recursive review report (present when enableRecursiveReview is true). */
171
247
  recursiveReview?: import('./recursive/types.js').RecursiveReviewReport;
248
+ /** Doc-validation results (present when enableDocValidation is true). */
249
+ docValidation?: import('./doc-validation/types.js').DocValidationResult;
250
+ /** Code intelligence metadata (present when enableCodeIntel is true). */
251
+ codeIntelMetadata?: import('./code-intel/types.js').CodeIntelMetadata;
252
+ /** Pipeline steps that failed but were gracefully degraded. Present when status is 'PARTIAL'. */
253
+ failedSteps?: {
254
+ step: string;
255
+ error: string;
256
+ }[];
172
257
  }
173
258
  export interface ReviewFinding {
174
259
  /** Severity level */
@@ -197,6 +282,10 @@ export interface ReviewFinding {
197
282
  exploitability?: import('./exploitability/types.js').ExploitabilityLabel;
198
283
  /** Detailed exploitability analysis (present when exploitability analysis runs). */
199
284
  exploitabilityDetail?: import('./exploitability/types.js').ExploitabilityDetail;
285
+ /** Function-level usage label for CVE findings (present when usage analysis runs). */
286
+ usageLabel?: import('./exploitability/types.js').UsageLabel;
287
+ /** Detailed usage analysis (present when usage analysis runs). */
288
+ usageDetail?: import('./exploitability/types.js').UsageDetail;
200
289
  }
201
290
  export interface ReviewMetadata {
202
291
  /** Review mode used */
@@ -440,7 +529,57 @@ export interface VersioningConfig {
440
529
  contradictionThreshold: number;
441
530
  }
442
531
  export declare const DEFAULT_VERSIONING_CONFIG: VersioningConfig;
532
+ export type AuthorTrustTier = 'trusted' | 'standard' | 'new';
533
+ export interface AuthorTrustScore {
534
+ author: string;
535
+ /** Normalized trust score in the range [0, 1]. */
536
+ score: number;
537
+ tier: AuthorTrustTier;
538
+ commitCount: number;
539
+ firstSeenDaysAgo: number;
540
+ lastUpdated: Date;
541
+ }
542
+ export interface NegativeExample {
543
+ /** SHA256(filePath + lineRange + category) — uniquely identifies a suppressed finding location. */
544
+ findingHash: string;
545
+ /** SHA256(filePath) — identifies the file context for the suppression. */
546
+ contextHash: string;
547
+ category: string;
548
+ reason?: string;
549
+ createdAt: Date;
550
+ }
551
+ export interface AuditInput {
552
+ /** Path to the repository to audit */
553
+ repoPath: string;
554
+ /** Pre-formatted static analysis context (findings as string) */
555
+ staticContext: string;
556
+ /** LLM provider identifier */
557
+ provider: string;
558
+ /** Model identifier */
559
+ model: string;
560
+ /** Decrypted API key */
561
+ apiKey: string;
562
+ /**
563
+ * Optional backend-agnostic generation function.
564
+ * When provided, used instead of creating one from provider/model/apiKey.
565
+ */
566
+ generateFn?: import('./providers/generate-fn.js').GenerateTextFn;
567
+ /** Optional progress callback for verbose/debug output. */
568
+ onProgress?: (event: ProgressEvent) => void;
569
+ }
570
+ export type AuditStatus = 'completed' | 'no-findings' | 'error';
571
+ export interface AuditResult {
572
+ /** Audit outcome */
573
+ status: AuditStatus;
574
+ /** Executive report from the LLM auditor */
575
+ report: string;
576
+ /** Raw static analysis findings passed to the auditor */
577
+ findings: StaticAnalysisResult;
578
+ /** ISO 8601 timestamp of when the audit ran */
579
+ timestamp: string;
580
+ /** Error message when status === 'error' */
581
+ error?: string;
582
+ }
443
583
  export declare const DEFAULT_SETTINGS: ReviewSettings;
444
584
  export declare const DEFAULT_MODELS: Record<LLMProvider, string>;
445
- export {};
446
585
  //# sourceMappingURL=types.d.ts.map