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,91 @@
1
+ /**
2
+ * ACP Server Adapter for ghagga.
3
+ *
4
+ * Wraps ghagga's review pipeline in an ACP-compatible interface,
5
+ * mapping ACP task lifecycle to ghagga review lifecycle:
6
+ *
7
+ * ACP submitted → ghagga validateInput
8
+ * ACP working → ghagga reviewPipeline running
9
+ * ACP completed → ghagga ReviewResult returned
10
+ * ACP failed → ghagga pipeline error
11
+ * ACP canceled → ghagga abort signal
12
+ *
13
+ * This adapter can be mounted as an HTTP handler, stdio transport,
14
+ * or any other ACP-compatible transport layer.
15
+ */
16
+ import type { LLMProvider, ReviewSettings } from '../types.js';
17
+ import type { ACPAgentCapabilities, ACPRequest, ACPResponse, ACPTask, ACPTaskInput } from './types.js';
18
+ /**
19
+ * In-memory task store for the ACP adapter.
20
+ * Production deployments should replace this with a persistent store.
21
+ */
22
+ export declare class ACPTaskStore {
23
+ private tasks;
24
+ get(id: string): ACPTask | undefined;
25
+ set(task: ACPTask): void;
26
+ list(): ACPTask[];
27
+ delete(id: string): boolean;
28
+ }
29
+ export interface ACPAdapterOptions {
30
+ /** Default LLM provider for reviews */
31
+ provider: LLMProvider;
32
+ /** Default model */
33
+ model: string;
34
+ /** API key for the LLM provider */
35
+ apiKey: string;
36
+ /** Default review settings (merged with per-task config) */
37
+ defaultSettings?: Partial<ReviewSettings>;
38
+ /** Optional task store (defaults to in-memory) */
39
+ taskStore?: ACPTaskStore;
40
+ /** Gateway URL for gateway provider */
41
+ gatewayUrl?: string;
42
+ }
43
+ /**
44
+ * ACP Server Adapter.
45
+ *
46
+ * Handles ACP JSON-RPC requests and maps them to ghagga operations.
47
+ */
48
+ export declare class ACPAdapter {
49
+ private store;
50
+ private options;
51
+ private abortControllers;
52
+ constructor(options: ACPAdapterOptions);
53
+ getCapabilities(): ACPAgentCapabilities;
54
+ /**
55
+ * Submit a new review task.
56
+ * Returns the task in 'submitted' state.
57
+ */
58
+ submitTask(input: ACPTaskInput): ACPTask;
59
+ /**
60
+ * Execute a submitted task (transitions through working → completed/failed).
61
+ * This is async — the caller should not block on it.
62
+ */
63
+ executeTask(taskId: string, onProgress?: (task: ACPTask) => void): Promise<ACPTask>;
64
+ /**
65
+ * Cancel a running task.
66
+ */
67
+ cancelTask(taskId: string): ACPTask | undefined;
68
+ /**
69
+ * Get a task by ID.
70
+ */
71
+ getTask(taskId: string): ACPTask | undefined;
72
+ /**
73
+ * List all tasks.
74
+ */
75
+ listTasks(): ACPTask[];
76
+ /**
77
+ * Handle an ACP JSON-RPC request.
78
+ * This is the main entry point for ACP protocol messages.
79
+ */
80
+ handleRequest(request: ACPRequest): Promise<ACPResponse>;
81
+ private buildReviewInput;
82
+ private buildTaskOutput;
83
+ private buildArtifacts;
84
+ private buildTaskError;
85
+ private updateTaskState;
86
+ private jsonRpcSuccess;
87
+ private jsonRpcError;
88
+ }
89
+ /** Reset the task counter (for testing only). */
90
+ export declare function resetTaskCounter(): void;
91
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/acp/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EACV,WAAW,EAIX,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,oBAAoB,EAEpB,UAAU,EACV,WAAW,EACX,OAAO,EAEP,YAAY,EAGb,MAAM,YAAY,CAAC;AAUpB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA8B;IAE3C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIpC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIxB,IAAI,IAAI,OAAO,EAAE;IAIjB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAG5B;AAID,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,QAAQ,EAAE,WAAW,CAAC;IAEtB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IAEf,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,gBAAgB,CAAsC;gBAElD,OAAO,EAAE,iBAAiB;IAOtC,eAAe,IAAI,oBAAoB;IAcvC;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAkBxC;;;OAGG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GACnC,OAAO,CAAC,OAAO,CAAC;IA+CnB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAiB/C;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI5C;;OAEG;IACH,SAAS,IAAI,OAAO,EAAE;IAMtB;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAoD9D,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;CAGrB;AAaD,iDAAiD;AACjD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * ACP Server Adapter for ghagga.
3
+ *
4
+ * Wraps ghagga's review pipeline in an ACP-compatible interface,
5
+ * mapping ACP task lifecycle to ghagga review lifecycle:
6
+ *
7
+ * ACP submitted → ghagga validateInput
8
+ * ACP working → ghagga reviewPipeline running
9
+ * ACP completed → ghagga ReviewResult returned
10
+ * ACP failed → ghagga pipeline error
11
+ * ACP canceled → ghagga abort signal
12
+ *
13
+ * This adapter can be mounted as an HTTP handler, stdio transport,
14
+ * or any other ACP-compatible transport layer.
15
+ */
16
+ import { reviewPipeline } from '../pipeline.js';
17
+ import { DEFAULT_SETTINGS } from '../types.js';
18
+ import { buildSarif } from '../sarif/index.js';
19
+ // ─── Constants ─────────────────────────────────────────────────
20
+ const AGENT_NAME = 'ghagga';
21
+ const AGENT_VERSION = '2.8.1';
22
+ const SUPPORTED_MODES = ['simple', 'workflow', 'consensus', 'diagnostic', 'fan-out'];
23
+ // ─── Task Store ────────────────────────────────────────────────
24
+ /**
25
+ * In-memory task store for the ACP adapter.
26
+ * Production deployments should replace this with a persistent store.
27
+ */
28
+ export class ACPTaskStore {
29
+ tasks = new Map();
30
+ get(id) {
31
+ return this.tasks.get(id);
32
+ }
33
+ set(task) {
34
+ this.tasks.set(task.id, task);
35
+ }
36
+ list() {
37
+ return [...this.tasks.values()];
38
+ }
39
+ delete(id) {
40
+ return this.tasks.delete(id);
41
+ }
42
+ }
43
+ /**
44
+ * ACP Server Adapter.
45
+ *
46
+ * Handles ACP JSON-RPC requests and maps them to ghagga operations.
47
+ */
48
+ export class ACPAdapter {
49
+ store;
50
+ options;
51
+ abortControllers = new Map();
52
+ constructor(options) {
53
+ this.options = options;
54
+ this.store = options.taskStore ?? new ACPTaskStore();
55
+ }
56
+ // ── Capabilities ───────────────────────────────────────────
57
+ getCapabilities() {
58
+ return {
59
+ name: AGENT_NAME,
60
+ version: AGENT_VERSION,
61
+ description: 'AI-powered multi-agent code reviewer',
62
+ taskTypes: ['code-review'],
63
+ reviewModes: [...SUPPORTED_MODES],
64
+ supportsStreaming: true,
65
+ supportsCancellation: true,
66
+ };
67
+ }
68
+ // ── Task Management ────────────────────────────────────────
69
+ /**
70
+ * Submit a new review task.
71
+ * Returns the task in 'submitted' state.
72
+ */
73
+ submitTask(input) {
74
+ const now = new Date().toISOString();
75
+ const id = generateTaskId();
76
+ const task = {
77
+ id,
78
+ state: 'submitted',
79
+ description: `Code review (${input.mode ?? 'simple'} mode)`,
80
+ input,
81
+ artifacts: [],
82
+ createdAt: now,
83
+ updatedAt: now,
84
+ };
85
+ this.store.set(task);
86
+ return task;
87
+ }
88
+ /**
89
+ * Execute a submitted task (transitions through working → completed/failed).
90
+ * This is async — the caller should not block on it.
91
+ */
92
+ async executeTask(taskId, onProgress) {
93
+ const task = this.store.get(taskId);
94
+ if (!task) {
95
+ throw new Error(`Task ${taskId} not found`);
96
+ }
97
+ if (task.state !== 'submitted') {
98
+ throw new Error(`Task ${taskId} is in state '${task.state}', expected 'submitted'`);
99
+ }
100
+ // Transition to working
101
+ this.updateTaskState(task, 'working');
102
+ onProgress?.(task);
103
+ const abortController = new AbortController();
104
+ this.abortControllers.set(taskId, abortController);
105
+ try {
106
+ // Build ReviewInput from ACP task input
107
+ const reviewInput = this.buildReviewInput(task.input);
108
+ // Run the review pipeline
109
+ const result = await reviewPipeline(reviewInput);
110
+ // Check if canceled during execution
111
+ if (abortController.signal.aborted) {
112
+ this.updateTaskState(task, 'canceled');
113
+ return task;
114
+ }
115
+ // Build output and artifacts
116
+ task.output = this.buildTaskOutput(result);
117
+ task.artifacts = this.buildArtifacts(taskId, result);
118
+ this.updateTaskState(task, 'completed');
119
+ onProgress?.(task);
120
+ }
121
+ catch (error) {
122
+ task.error = this.buildTaskError(error);
123
+ this.updateTaskState(task, 'failed');
124
+ onProgress?.(task);
125
+ }
126
+ finally {
127
+ this.abortControllers.delete(taskId);
128
+ }
129
+ return task;
130
+ }
131
+ /**
132
+ * Cancel a running task.
133
+ */
134
+ cancelTask(taskId) {
135
+ const task = this.store.get(taskId);
136
+ if (!task)
137
+ return undefined;
138
+ if (task.state !== 'working' && task.state !== 'submitted') {
139
+ return task; // Already in terminal state
140
+ }
141
+ const controller = this.abortControllers.get(taskId);
142
+ if (controller) {
143
+ controller.abort();
144
+ }
145
+ this.updateTaskState(task, 'canceled');
146
+ return task;
147
+ }
148
+ /**
149
+ * Get a task by ID.
150
+ */
151
+ getTask(taskId) {
152
+ return this.store.get(taskId);
153
+ }
154
+ /**
155
+ * List all tasks.
156
+ */
157
+ listTasks() {
158
+ return this.store.list();
159
+ }
160
+ // ── JSON-RPC Handler ───────────────────────────────────────
161
+ /**
162
+ * Handle an ACP JSON-RPC request.
163
+ * This is the main entry point for ACP protocol messages.
164
+ */
165
+ async handleRequest(request) {
166
+ try {
167
+ switch (request.method) {
168
+ case 'agent/capabilities':
169
+ return this.jsonRpcSuccess(request.id, this.getCapabilities());
170
+ case 'task/submit': {
171
+ const input = request.params;
172
+ if (!input?.diff) {
173
+ return this.jsonRpcError(request.id, -32602, 'Missing required parameter: diff');
174
+ }
175
+ const task = this.submitTask(input);
176
+ // Fire-and-forget execution (non-blocking)
177
+ void this.executeTask(task.id);
178
+ return this.jsonRpcSuccess(request.id, task);
179
+ }
180
+ case 'task/get': {
181
+ const id = request.params?.id;
182
+ const task = this.getTask(id);
183
+ if (!task) {
184
+ return this.jsonRpcError(request.id, -32001, `Task ${id} not found`);
185
+ }
186
+ return this.jsonRpcSuccess(request.id, task);
187
+ }
188
+ case 'task/list':
189
+ return this.jsonRpcSuccess(request.id, this.listTasks());
190
+ case 'task/cancel': {
191
+ const id = request.params?.id;
192
+ const task = this.cancelTask(id);
193
+ if (!task) {
194
+ return this.jsonRpcError(request.id, -32001, `Task ${id} not found`);
195
+ }
196
+ return this.jsonRpcSuccess(request.id, task);
197
+ }
198
+ default:
199
+ return this.jsonRpcError(request.id, -32601, `Method not found: ${request.method}`);
200
+ }
201
+ }
202
+ catch (error) {
203
+ return this.jsonRpcError(request.id, -32603, error instanceof Error ? error.message : String(error));
204
+ }
205
+ }
206
+ // ── Private Helpers ────────────────────────────────────────
207
+ buildReviewInput(acpInput) {
208
+ const mode = acpInput.mode ?? 'simple';
209
+ const configOverrides = (acpInput.config ?? {});
210
+ return {
211
+ diff: acpInput.diff,
212
+ mode,
213
+ provider: this.options.provider,
214
+ model: this.options.model,
215
+ apiKey: this.options.apiKey,
216
+ settings: {
217
+ ...DEFAULT_SETTINGS,
218
+ ...this.options.defaultSettings,
219
+ ...configOverrides,
220
+ reviewLevel: acpInput.level ?? 'normal',
221
+ },
222
+ context: acpInput.repo
223
+ ? {
224
+ repoFullName: acpInput.repo,
225
+ prNumber: acpInput.prNumber ?? 0,
226
+ commitMessages: acpInput.commitMessages ?? [],
227
+ fileList: acpInput.fileList ?? [],
228
+ }
229
+ : undefined,
230
+ };
231
+ }
232
+ buildTaskOutput(result) {
233
+ return {
234
+ status: result.status,
235
+ summary: result.summary,
236
+ findingCount: result.findings.length,
237
+ metadata: {
238
+ mode: result.metadata.mode,
239
+ provider: result.metadata.provider,
240
+ model: result.metadata.model,
241
+ tokensUsed: result.metadata.tokensUsed,
242
+ executionTimeMs: result.metadata.executionTimeMs,
243
+ toolsRun: result.metadata.toolsRun,
244
+ },
245
+ };
246
+ }
247
+ buildArtifacts(taskId, result) {
248
+ const artifacts = [];
249
+ // Full review result as JSON
250
+ artifacts.push({
251
+ id: `${taskId}-review`,
252
+ type: 'review-result',
253
+ mimeType: 'application/json',
254
+ data: JSON.stringify(result),
255
+ });
256
+ // Findings as standalone JSON
257
+ artifacts.push({
258
+ id: `${taskId}-findings`,
259
+ type: 'findings-json',
260
+ mimeType: 'application/json',
261
+ data: JSON.stringify(result.findings),
262
+ });
263
+ // SARIF output
264
+ try {
265
+ const sarif = buildSarif(result, '2.1.0');
266
+ artifacts.push({
267
+ id: `${taskId}-sarif`,
268
+ type: 'sarif',
269
+ mimeType: 'application/sarif+json',
270
+ data: JSON.stringify(sarif),
271
+ });
272
+ }
273
+ catch {
274
+ // SARIF generation failed — non-fatal, skip artifact
275
+ }
276
+ return artifacts;
277
+ }
278
+ buildTaskError(error) {
279
+ if (error instanceof Error) {
280
+ return {
281
+ code: 'REVIEW_FAILED',
282
+ message: error.message,
283
+ details: { stack: error.stack },
284
+ };
285
+ }
286
+ return {
287
+ code: 'UNKNOWN_ERROR',
288
+ message: String(error),
289
+ };
290
+ }
291
+ updateTaskState(task, state) {
292
+ task.state = state;
293
+ task.updatedAt = new Date().toISOString();
294
+ this.store.set(task);
295
+ }
296
+ jsonRpcSuccess(id, result) {
297
+ return { jsonrpc: '2.0', id, result };
298
+ }
299
+ jsonRpcError(id, code, message) {
300
+ return { jsonrpc: '2.0', id, error: { code, message } };
301
+ }
302
+ }
303
+ // ─── Utilities ─────────────────────────────────────────────────
304
+ let taskCounter = 0;
305
+ function generateTaskId() {
306
+ taskCounter++;
307
+ const timestamp = Date.now().toString(36);
308
+ const counter = taskCounter.toString(36).padStart(4, '0');
309
+ return `ghagga-${timestamp}-${counter}`;
310
+ }
311
+ /** Reset the task counter (for testing only). */
312
+ export function resetTaskCounter() {
313
+ taskCounter = 0;
314
+ }
315
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/acp/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ACPAdapter, ACPTaskStore, resetTaskCounter } from './adapter.js';
2
+ export type { ACPAdapterOptions } from './adapter.js';
3
+ export type { ACPAgentCapabilities, ACPArtifact, ACPArtifactType, ACPNotification, ACPRequest, ACPResponse, ACPTask, ACPTaskError, ACPTaskInput, ACPTaskOutput, ACPTaskState, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACX,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ACPAdapter, ACPTaskStore, resetTaskCounter } from './adapter.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) types for ghagga.
3
+ *
4
+ * Based on the Agent Client Protocol specification from
5
+ * agentclientprotocol/agent-client-protocol.
6
+ *
7
+ * ACP defines a standard lifecycle for agent tasks:
8
+ * submitted → working → completed | failed | canceled
9
+ *
10
+ * This module maps ghagga's review lifecycle to ACP's task lifecycle.
11
+ */
12
+ export type ACPTaskState = 'submitted' | 'working' | 'completed' | 'failed' | 'canceled';
13
+ /**
14
+ * ACP Task — the core unit of work in the protocol.
15
+ * Each task represents a single code review request.
16
+ */
17
+ export interface ACPTask {
18
+ /** Unique task identifier */
19
+ id: string;
20
+ /** Current task state */
21
+ state: ACPTaskState;
22
+ /** Human-readable description of the task */
23
+ description: string;
24
+ /** Task input parameters */
25
+ input: ACPTaskInput;
26
+ /** Task output (populated when state is 'completed') */
27
+ output?: ACPTaskOutput;
28
+ /** Error details (populated when state is 'failed') */
29
+ error?: ACPTaskError;
30
+ /** Artifacts produced during the task */
31
+ artifacts: ACPArtifact[];
32
+ /** ISO 8601 timestamp when the task was created */
33
+ createdAt: string;
34
+ /** ISO 8601 timestamp of the last state transition */
35
+ updatedAt: string;
36
+ }
37
+ /**
38
+ * Input parameters for a ghagga review task via ACP.
39
+ */
40
+ export interface ACPTaskInput {
41
+ /** The unified diff to review */
42
+ diff: string;
43
+ /** Review mode (maps to ghagga's ReviewMode) */
44
+ mode?: string;
45
+ /** Review strictness level */
46
+ level?: string;
47
+ /** Repository context */
48
+ repo?: string;
49
+ /** PR number */
50
+ prNumber?: number;
51
+ /** Commit messages */
52
+ commitMessages?: string[];
53
+ /** File list (derived from diff if not provided) */
54
+ fileList?: string[];
55
+ /** Additional configuration overrides */
56
+ config?: Record<string, unknown>;
57
+ }
58
+ /**
59
+ * Output from a completed ghagga review task.
60
+ */
61
+ export interface ACPTaskOutput {
62
+ /** Review status */
63
+ status: string;
64
+ /** Human-readable summary */
65
+ summary: string;
66
+ /** Number of findings */
67
+ findingCount: number;
68
+ /** Execution metadata */
69
+ metadata: {
70
+ mode: string;
71
+ provider: string;
72
+ model: string;
73
+ tokensUsed: number;
74
+ executionTimeMs: number;
75
+ toolsRun: string[];
76
+ };
77
+ }
78
+ export type ACPArtifactType = 'review-result' | 'sarif' | 'findings-json';
79
+ /**
80
+ * An artifact produced by the review task.
81
+ * ACP artifacts are typed blobs that clients can consume.
82
+ */
83
+ export interface ACPArtifact {
84
+ /** Artifact identifier */
85
+ id: string;
86
+ /** Artifact type */
87
+ type: ACPArtifactType;
88
+ /** MIME type of the artifact data */
89
+ mimeType: string;
90
+ /** Artifact data (JSON-serialized) */
91
+ data: string;
92
+ }
93
+ export interface ACPTaskError {
94
+ /** Error code */
95
+ code: string;
96
+ /** Human-readable error message */
97
+ message: string;
98
+ /** Optional additional details */
99
+ details?: Record<string, unknown>;
100
+ }
101
+ /**
102
+ * Capabilities advertised by the ghagga ACP server.
103
+ * Clients use this to discover what the agent can do.
104
+ */
105
+ export interface ACPAgentCapabilities {
106
+ /** Agent name */
107
+ name: string;
108
+ /** Agent version */
109
+ version: string;
110
+ /** Human-readable description */
111
+ description: string;
112
+ /** Supported task types */
113
+ taskTypes: string[];
114
+ /** Supported review modes */
115
+ reviewModes: string[];
116
+ /** Whether the agent supports streaming progress */
117
+ supportsStreaming: boolean;
118
+ /** Whether the agent supports cancellation */
119
+ supportsCancellation: boolean;
120
+ }
121
+ export interface ACPRequest {
122
+ jsonrpc: '2.0';
123
+ id: string | number;
124
+ method: string;
125
+ params?: Record<string, unknown>;
126
+ }
127
+ export interface ACPResponse {
128
+ jsonrpc: '2.0';
129
+ id: string | number;
130
+ result?: unknown;
131
+ error?: {
132
+ code: number;
133
+ message: string;
134
+ data?: unknown;
135
+ };
136
+ }
137
+ export interface ACPNotification {
138
+ jsonrpc: '2.0';
139
+ method: string;
140
+ params?: Record<string, unknown>;
141
+ }
142
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/acp/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) types for ghagga.
3
+ *
4
+ * Based on the Agent Client Protocol specification from
5
+ * agentclientprotocol/agent-client-protocol.
6
+ *
7
+ * ACP defines a standard lifecycle for agent tasks:
8
+ * submitted → working → completed | failed | canceled
9
+ *
10
+ * This module maps ghagga's review lifecycle to ACP's task lifecycle.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/acp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Adversarial QA loop — a critic agent finds issues, a fixer agent
3
+ * resolves them, they iterate until the review score exceeds a
4
+ * threshold or max rounds are reached.
5
+ *
6
+ * The critic produces a quality score (0-100) and a list of issues.
7
+ * The fixer attempts to resolve each issue. The loop continues until
8
+ * the critic is satisfied or the round limit is hit.
9
+ */
10
+ export interface QAIssue {
11
+ id: string;
12
+ severity: 'critical' | 'major' | 'minor';
13
+ description: string;
14
+ file?: string;
15
+ line?: number;
16
+ suggestion?: string;
17
+ resolved: boolean;
18
+ }
19
+ export interface CriticResult {
20
+ score: number;
21
+ issues: QAIssue[];
22
+ summary: string;
23
+ }
24
+ export interface FixerResult {
25
+ issuesAttempted: number;
26
+ issuesResolved: number;
27
+ changes: Array<{
28
+ issueId: string;
29
+ action: string;
30
+ }>;
31
+ }
32
+ export interface QARound {
33
+ round: number;
34
+ criticResult: CriticResult;
35
+ fixerResult: FixerResult | null;
36
+ }
37
+ export interface QALoopResult {
38
+ rounds: QARound[];
39
+ finalScore: number;
40
+ passed: boolean;
41
+ totalIssuesFound: number;
42
+ totalIssuesResolved: number;
43
+ }
44
+ export interface QALoopConfig {
45
+ maxRounds: number;
46
+ passThreshold: number;
47
+ stopOnNoProgress: boolean;
48
+ }
49
+ export declare const DEFAULT_QA_CONFIG: QALoopConfig;
50
+ export type CriticFn = (content: string, previousIssues?: QAIssue[]) => Promise<CriticResult> | CriticResult;
51
+ export type FixerFn = (content: string, issues: QAIssue[]) => Promise<{
52
+ content: string;
53
+ result: FixerResult;
54
+ }> | {
55
+ content: string;
56
+ result: FixerResult;
57
+ };
58
+ export declare function runQALoop(initialContent: string, critic: CriticFn, fixer: FixerFn, config?: QALoopConfig): Promise<QALoopResult>;
59
+ export declare function formatQAResult(result: QALoopResult): string;
60
+ //# sourceMappingURL=adversarial-qa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adversarial-qa.d.ts","sourceRoot":"","sources":["../src/adversarial-qa.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAID,eAAO,MAAM,iBAAiB,EAAE,YAI/B,CAAC;AAIF,MAAM,MAAM,QAAQ,GAAG,CACrB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,OAAO,EAAE,KACvB,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,MAAM,MAAM,OAAO,GAAG,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EAAE,KACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAIlG,wBAAsB,SAAS,CAC7B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,YAAgC,GACvC,OAAO,CAAC,YAAY,CAAC,CAsDvB;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA8B3D"}