dravix-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.claude/settings.example.json +30 -0
  2. package/ARCHITECTURE.md +410 -0
  3. package/LICENSE +21 -0
  4. package/README.md +153 -0
  5. package/ROADMAP.md +117 -0
  6. package/data/vulnkb.json +666 -0
  7. package/dist/bin/aegis.d.ts +3 -0
  8. package/dist/bin/aegis.d.ts.map +1 -0
  9. package/dist/bin/aegis.js +489 -0
  10. package/dist/bin/aegis.js.map +1 -0
  11. package/dist/cache.d.ts +9 -0
  12. package/dist/cache.d.ts.map +1 -0
  13. package/dist/cache.js +146 -0
  14. package/dist/cache.js.map +1 -0
  15. package/dist/engines/ai-sinks.d.ts +52 -0
  16. package/dist/engines/ai-sinks.d.ts.map +1 -0
  17. package/dist/engines/ai-sinks.js +204 -0
  18. package/dist/engines/ai-sinks.js.map +1 -0
  19. package/dist/engines/eslint.d.ts +9 -0
  20. package/dist/engines/eslint.d.ts.map +1 -0
  21. package/dist/engines/eslint.js +245 -0
  22. package/dist/engines/eslint.js.map +1 -0
  23. package/dist/engines/joern.d.ts +3 -0
  24. package/dist/engines/joern.d.ts.map +1 -0
  25. package/dist/engines/joern.js +98 -0
  26. package/dist/engines/joern.js.map +1 -0
  27. package/dist/engines/js-sinks.d.ts +70 -0
  28. package/dist/engines/js-sinks.d.ts.map +1 -0
  29. package/dist/engines/js-sinks.js +370 -0
  30. package/dist/engines/js-sinks.js.map +1 -0
  31. package/dist/engines/llm-critic.d.ts +130 -0
  32. package/dist/engines/llm-critic.d.ts.map +1 -0
  33. package/dist/engines/llm-critic.js +551 -0
  34. package/dist/engines/llm-critic.js.map +1 -0
  35. package/dist/engines/pragma.d.ts +20 -0
  36. package/dist/engines/pragma.d.ts.map +1 -0
  37. package/dist/engines/pragma.js +83 -0
  38. package/dist/engines/pragma.js.map +1 -0
  39. package/dist/engines/property-test.d.ts +3 -0
  40. package/dist/engines/property-test.d.ts.map +1 -0
  41. package/dist/engines/property-test.js +134 -0
  42. package/dist/engines/property-test.js.map +1 -0
  43. package/dist/engines/pyright.d.ts +10 -0
  44. package/dist/engines/pyright.d.ts.map +1 -0
  45. package/dist/engines/pyright.js +143 -0
  46. package/dist/engines/pyright.js.map +1 -0
  47. package/dist/engines/pysa.d.ts +3 -0
  48. package/dist/engines/pysa.d.ts.map +1 -0
  49. package/dist/engines/pysa.js +83 -0
  50. package/dist/engines/pysa.js.map +1 -0
  51. package/dist/engines/python-sinks.d.ts +82 -0
  52. package/dist/engines/python-sinks.d.ts.map +1 -0
  53. package/dist/engines/python-sinks.js +459 -0
  54. package/dist/engines/python-sinks.js.map +1 -0
  55. package/dist/engines/registry.d.ts +26 -0
  56. package/dist/engines/registry.d.ts.map +1 -0
  57. package/dist/engines/registry.js +70 -0
  58. package/dist/engines/registry.js.map +1 -0
  59. package/dist/engines/secret-scan.d.ts +22 -0
  60. package/dist/engines/secret-scan.d.ts.map +1 -0
  61. package/dist/engines/secret-scan.js +179 -0
  62. package/dist/engines/secret-scan.js.map +1 -0
  63. package/dist/engines/semgrep.d.ts +10 -0
  64. package/dist/engines/semgrep.d.ts.map +1 -0
  65. package/dist/engines/semgrep.js +200 -0
  66. package/dist/engines/semgrep.js.map +1 -0
  67. package/dist/engines/treesitter.d.ts +18 -0
  68. package/dist/engines/treesitter.d.ts.map +1 -0
  69. package/dist/engines/treesitter.js +135 -0
  70. package/dist/engines/treesitter.js.map +1 -0
  71. package/dist/engines/tsc.d.ts +10 -0
  72. package/dist/engines/tsc.d.ts.map +1 -0
  73. package/dist/engines/tsc.js +142 -0
  74. package/dist/engines/tsc.js.map +1 -0
  75. package/dist/engines/types.d.ts +47 -0
  76. package/dist/engines/types.d.ts.map +1 -0
  77. package/dist/engines/types.js +27 -0
  78. package/dist/engines/types.js.map +1 -0
  79. package/dist/findings.d.ts +121 -0
  80. package/dist/findings.d.ts.map +1 -0
  81. package/dist/findings.js +98 -0
  82. package/dist/findings.js.map +1 -0
  83. package/dist/hooks/claude-code.d.ts +3 -0
  84. package/dist/hooks/claude-code.d.ts.map +1 -0
  85. package/dist/hooks/claude-code.js +187 -0
  86. package/dist/hooks/claude-code.js.map +1 -0
  87. package/dist/index/context.d.ts +127 -0
  88. package/dist/index/context.d.ts.map +1 -0
  89. package/dist/index/context.js +267 -0
  90. package/dist/index/context.js.map +1 -0
  91. package/dist/index/embeddings.d.ts +68 -0
  92. package/dist/index/embeddings.d.ts.map +1 -0
  93. package/dist/index/embeddings.js +570 -0
  94. package/dist/index/embeddings.js.map +1 -0
  95. package/dist/index/graph_routing.d.ts +36 -0
  96. package/dist/index/graph_routing.d.ts.map +1 -0
  97. package/dist/index/graph_routing.js +170 -0
  98. package/dist/index/graph_routing.js.map +1 -0
  99. package/dist/index/joern.d.ts +76 -0
  100. package/dist/index/joern.d.ts.map +1 -0
  101. package/dist/index/joern.js +782 -0
  102. package/dist/index/joern.js.map +1 -0
  103. package/dist/index/property-test.d.ts +88 -0
  104. package/dist/index/property-test.d.ts.map +1 -0
  105. package/dist/index/property-test.js +466 -0
  106. package/dist/index/property-test.js.map +1 -0
  107. package/dist/index/proto/scip.proto +897 -0
  108. package/dist/index/pysa.d.ts +91 -0
  109. package/dist/index/pysa.d.ts.map +1 -0
  110. package/dist/index/pysa.js +617 -0
  111. package/dist/index/pysa.js.map +1 -0
  112. package/dist/index/scip.d.ts +76 -0
  113. package/dist/index/scip.d.ts.map +1 -0
  114. package/dist/index/scip.js +541 -0
  115. package/dist/index/scip.js.map +1 -0
  116. package/dist/index/vulrag.d.ts +86 -0
  117. package/dist/index/vulrag.d.ts.map +1 -0
  118. package/dist/index/vulrag.js +242 -0
  119. package/dist/index/vulrag.js.map +1 -0
  120. package/dist/index.d.ts +9 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +8 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/install/claude-code.d.ts +31 -0
  125. package/dist/install/claude-code.d.ts.map +1 -0
  126. package/dist/install/claude-code.js +447 -0
  127. package/dist/install/claude-code.js.map +1 -0
  128. package/dist/lang.d.ts +5 -0
  129. package/dist/lang.d.ts.map +1 -0
  130. package/dist/lang.js +52 -0
  131. package/dist/lang.js.map +1 -0
  132. package/dist/learning/suppressions.d.ts +70 -0
  133. package/dist/learning/suppressions.d.ts.map +1 -0
  134. package/dist/learning/suppressions.js +179 -0
  135. package/dist/learning/suppressions.js.map +1 -0
  136. package/dist/mcp/server.d.ts +2 -0
  137. package/dist/mcp/server.d.ts.map +1 -0
  138. package/dist/mcp/server.js +187 -0
  139. package/dist/mcp/server.js.map +1 -0
  140. package/dist/mcp/tools/explain.d.ts +58 -0
  141. package/dist/mcp/tools/explain.d.ts.map +1 -0
  142. package/dist/mcp/tools/explain.js +60 -0
  143. package/dist/mcp/tools/explain.js.map +1 -0
  144. package/dist/mcp/tools/precheck.d.ts +29 -0
  145. package/dist/mcp/tools/precheck.d.ts.map +1 -0
  146. package/dist/mcp/tools/precheck.js +42 -0
  147. package/dist/mcp/tools/precheck.js.map +1 -0
  148. package/dist/mcp/tools/validate.d.ts +73 -0
  149. package/dist/mcp/tools/validate.d.ts.map +1 -0
  150. package/dist/mcp/tools/validate.js +66 -0
  151. package/dist/mcp/tools/validate.js.map +1 -0
  152. package/dist/mcp/warm.d.ts +88 -0
  153. package/dist/mcp/warm.d.ts.map +1 -0
  154. package/dist/mcp/warm.js +331 -0
  155. package/dist/mcp/warm.js.map +1 -0
  156. package/dist/orchestrator.d.ts +46 -0
  157. package/dist/orchestrator.d.ts.map +1 -0
  158. package/dist/orchestrator.js +596 -0
  159. package/dist/orchestrator.js.map +1 -0
  160. package/dist/policy.d.ts +51 -0
  161. package/dist/policy.d.ts.map +1 -0
  162. package/dist/policy.js +201 -0
  163. package/dist/policy.js.map +1 -0
  164. package/dist/risk.d.ts +31 -0
  165. package/dist/risk.d.ts.map +1 -0
  166. package/dist/risk.js +92 -0
  167. package/dist/risk.js.map +1 -0
  168. package/dist/stats.d.ts +72 -0
  169. package/dist/stats.d.ts.map +1 -0
  170. package/dist/stats.js +217 -0
  171. package/dist/stats.js.map +1 -0
  172. package/dist/telemetry/collector.d.ts +10 -0
  173. package/dist/telemetry/collector.d.ts.map +1 -0
  174. package/dist/telemetry/collector.js +75 -0
  175. package/dist/telemetry/collector.js.map +1 -0
  176. package/dist/telemetry/consent.d.ts +9 -0
  177. package/dist/telemetry/consent.d.ts.map +1 -0
  178. package/dist/telemetry/consent.js +42 -0
  179. package/dist/telemetry/consent.js.map +1 -0
  180. package/dist/telemetry/installation.d.ts +2 -0
  181. package/dist/telemetry/installation.d.ts.map +1 -0
  182. package/dist/telemetry/installation.js +32 -0
  183. package/dist/telemetry/installation.js.map +1 -0
  184. package/dist/telemetry/sanitizer.d.ts +5 -0
  185. package/dist/telemetry/sanitizer.d.ts.map +1 -0
  186. package/dist/telemetry/sanitizer.js +60 -0
  187. package/dist/telemetry/sanitizer.js.map +1 -0
  188. package/dist/telemetry/types.d.ts +39 -0
  189. package/dist/telemetry/types.d.ts.map +1 -0
  190. package/dist/telemetry/types.js +4 -0
  191. package/dist/telemetry/types.js.map +1 -0
  192. package/dist/telemetry/uploader.d.ts +12 -0
  193. package/dist/telemetry/uploader.d.ts.map +1 -0
  194. package/dist/telemetry/uploader.js +92 -0
  195. package/dist/telemetry/uploader.js.map +1 -0
  196. package/dist/util/logger.d.ts +19 -0
  197. package/dist/util/logger.d.ts.map +1 -0
  198. package/dist/util/logger.js +58 -0
  199. package/dist/util/logger.js.map +1 -0
  200. package/dist/util/safe-paths.d.ts +8 -0
  201. package/dist/util/safe-paths.d.ts.map +1 -0
  202. package/dist/util/safe-paths.js +102 -0
  203. package/dist/util/safe-paths.js.map +1 -0
  204. package/dist/util/subprocess.d.ts +32 -0
  205. package/dist/util/subprocess.d.ts.map +1 -0
  206. package/dist/util/subprocess.js +137 -0
  207. package/dist/util/subprocess.js.map +1 -0
  208. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/hooks/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAc,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAwBpC,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAYD;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAAC,CAAc,EAAE,GAAW;IACxD,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC;IAChE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEzE,oCAAoC;IACpC,IAAI,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC;IAED,yDAAyD;IACzD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC;IACrD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC/C,kEAAkE;gBAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACb,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5F,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9D,CAAC;gBACD,GAAG,CAAC,KAAK,CAAC,+DAA+D,EAAE;oBACzE,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,MAAM,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,mDAAmD,EAAE;oBAC7D,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,sEAAsE;QACtE,kEAAkE;QAClE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QACrH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,KAAK,EAAE;YACP,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEvC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC;YACrB,QAAQ,EAAE,OAAO;YACjB,OAAO;YACP,WAAW;YACX,+DAA+D;YAC/D,+DAA+D;YAC/D,gEAAgE;YAChE,gEAAgE;YAChE,kEAAkE;YAClE,2DAA2D;YAC3D,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,EAAE,EAAE,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6DAA6D;QAC7D,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oFAAoF;gBAClF,mEAAmE,CACtE,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;QACtF,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,cAAc,EAAE,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Project-context builder for the validate_edit response.
3
+ *
4
+ * Given a file's content + project root + a built SCIP index, returns
5
+ * focused cross-file evidence:
6
+ *
7
+ * - For each IMPORTED symbol → its definition (file:line + code snippet).
8
+ * - For each top-level FUNCTION/CLASS defined HERE → its callers
9
+ * (file:line + 1-line context).
10
+ *
11
+ * This is the RepoGraph-style "what does the LLM actually need to see"
12
+ * approach — NOT a generic dump. The output is structured (zod-shaped) so
13
+ * downstream consumers (Tier-4 critic in Phase 2, hook remediation text)
14
+ * can format it however they like.
15
+ */
16
+ import { z } from "zod";
17
+ import { Lang } from "../lang.js";
18
+ import { SCIPIndexer } from "./scip.js";
19
+ export declare const ProjectContextBlockSchema: z.ZodObject<{
20
+ /** True iff a SCIP index is available; if false the block is empty. */
21
+ available: z.ZodBoolean;
22
+ /** Languages currently indexed (e.g. ["typescript","python"]). */
23
+ languages: z.ZodArray<z.ZodString, "many">;
24
+ /** Definitions of imported symbols. */
25
+ imported_definitions: z.ZodArray<z.ZodObject<{
26
+ symbol: z.ZodString;
27
+ kind: z.ZodString;
28
+ file: z.ZodString;
29
+ line: z.ZodNumber;
30
+ snippet: z.ZodOptional<z.ZodString>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ symbol: string;
33
+ file: string;
34
+ line: number;
35
+ kind: string;
36
+ snippet?: string | undefined;
37
+ }, {
38
+ symbol: string;
39
+ file: string;
40
+ line: number;
41
+ kind: string;
42
+ snippet?: string | undefined;
43
+ }>, "many">;
44
+ /** Callers of each top-level function/class defined in this file. */
45
+ callers: z.ZodArray<z.ZodObject<{
46
+ symbol: z.ZodString;
47
+ callers: z.ZodArray<z.ZodObject<{
48
+ file: z.ZodString;
49
+ line: z.ZodNumber;
50
+ }, "strip", z.ZodTypeAny, {
51
+ file: string;
52
+ line: number;
53
+ }, {
54
+ file: string;
55
+ line: number;
56
+ }>, "many">;
57
+ }, "strip", z.ZodTypeAny, {
58
+ symbol: string;
59
+ callers: {
60
+ file: string;
61
+ line: number;
62
+ }[];
63
+ }, {
64
+ symbol: string;
65
+ callers: {
66
+ file: string;
67
+ line: number;
68
+ }[];
69
+ }>, "many">;
70
+ /** Duration in ms it took to build this block (for budget tuning). */
71
+ duration_ms: z.ZodNumber;
72
+ }, "strip", z.ZodTypeAny, {
73
+ callers: {
74
+ symbol: string;
75
+ callers: {
76
+ file: string;
77
+ line: number;
78
+ }[];
79
+ }[];
80
+ languages: string[];
81
+ available: boolean;
82
+ imported_definitions: {
83
+ symbol: string;
84
+ file: string;
85
+ line: number;
86
+ kind: string;
87
+ snippet?: string | undefined;
88
+ }[];
89
+ duration_ms: number;
90
+ }, {
91
+ callers: {
92
+ symbol: string;
93
+ callers: {
94
+ file: string;
95
+ line: number;
96
+ }[];
97
+ }[];
98
+ languages: string[];
99
+ available: boolean;
100
+ imported_definitions: {
101
+ symbol: string;
102
+ file: string;
103
+ line: number;
104
+ kind: string;
105
+ snippet?: string | undefined;
106
+ }[];
107
+ duration_ms: number;
108
+ }>;
109
+ export type ProjectContextBlock = z.infer<typeof ProjectContextBlockSchema>;
110
+ export declare function extractSymbols(content: string, lang: Lang): {
111
+ imports: string[];
112
+ defs: string[];
113
+ };
114
+ export interface BuildContextInput {
115
+ filePath: string;
116
+ content: string;
117
+ lang: Lang;
118
+ projectRoot: string;
119
+ /** Hard cap on query calls (imports + defs combined). Default 8. */
120
+ maxSymbols?: number;
121
+ /** Hard cap on the total block size in characters. Default 6000. */
122
+ maxChars?: number;
123
+ }
124
+ export declare function buildProjectContext(indexer: SCIPIndexer, input: BuildContextInput): Promise<ProjectContextBlock>;
125
+ /** Convenience: render the structured block as a single markdown string. */
126
+ export declare function renderProjectContextMarkdown(block: ProjectContextBlock): string;
127
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/index/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,WAAW,EAAoD,MAAM,WAAW,CAAC;AAM1F,eAAO,MAAM,yBAAyB;IACpC,uEAAuE;;IAEvE,kEAAkE;;IAElE,uCAAuC;;;;;;;;;;;;;;;;;;;;IAUvC,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;IAYrE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEtE,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AA2F5E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAMjG;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAkF9B;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CA+B/E"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Project-context builder for the validate_edit response.
3
+ *
4
+ * Given a file's content + project root + a built SCIP index, returns
5
+ * focused cross-file evidence:
6
+ *
7
+ * - For each IMPORTED symbol → its definition (file:line + code snippet).
8
+ * - For each top-level FUNCTION/CLASS defined HERE → its callers
9
+ * (file:line + 1-line context).
10
+ *
11
+ * This is the RepoGraph-style "what does the LLM actually need to see"
12
+ * approach — NOT a generic dump. The output is structured (zod-shaped) so
13
+ * downstream consumers (Tier-4 critic in Phase 2, hook remediation text)
14
+ * can format it however they like.
15
+ */
16
+ import { z } from "zod";
17
+ import { getLogger } from "../util/logger.js";
18
+ const log = getLogger("aegis.index.context");
19
+ // --- public shape ----------------------------------------------------------
20
+ export const ProjectContextBlockSchema = z.object({
21
+ /** True iff a SCIP index is available; if false the block is empty. */
22
+ available: z.boolean(),
23
+ /** Languages currently indexed (e.g. ["typescript","python"]). */
24
+ languages: z.array(z.string()),
25
+ /** Definitions of imported symbols. */
26
+ imported_definitions: z.array(z.object({
27
+ symbol: z.string(),
28
+ kind: z.string(),
29
+ file: z.string(),
30
+ line: z.number().int().positive(),
31
+ snippet: z.string().max(4000).optional(),
32
+ })),
33
+ /** Callers of each top-level function/class defined in this file. */
34
+ callers: z.array(z.object({
35
+ symbol: z.string(),
36
+ callers: z.array(z.object({
37
+ file: z.string(),
38
+ line: z.number().int().positive(),
39
+ })),
40
+ })),
41
+ /** Duration in ms it took to build this block (for budget tuning). */
42
+ duration_ms: z.number(),
43
+ });
44
+ // --- symbol extraction (regex-based, fast) ---------------------------------
45
+ const PY_FROM_IMPORT = /^\s*from\s+\S+\s+import\s+(.+)$/;
46
+ const PY_IMPORT = /^\s*import\s+(.+)$/;
47
+ const PY_TOP_DEF = /^(?:async\s+)?def\s+([A-Za-z_]\w*)\s*\(/m;
48
+ const PY_TOP_CLASS = /^class\s+([A-Za-z_]\w*)\s*[:\(]/m;
49
+ const JS_NAMED_IMPORT = /import\s*\{([^}]+)\}\s*from/g;
50
+ const JS_DEFAULT_IMPORT = /import\s+([A-Za-z_]\w*)\s+from/g;
51
+ const JS_REQUIRE = /(?:const|let|var)\s+\{?\s*([\w,\s]+?)\s*\}?\s*=\s*require\(/g;
52
+ const JS_FN = /(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_]\w*)/g;
53
+ const JS_CONST_FN = /(?:export\s+)?(?:const|let|var)\s+([A-Za-z_]\w*)\s*=\s*(?:async\s*)?(?:\([^)]*\)\s*=>|function)/g;
54
+ const JS_CLASS = /(?:export\s+)?class\s+([A-Za-z_]\w*)/g;
55
+ function dedup(xs) {
56
+ const seen = new Set();
57
+ const out = [];
58
+ for (const x of xs) {
59
+ if (!x || seen.has(x))
60
+ continue;
61
+ if (!/^[A-Za-z_]/.test(x))
62
+ continue;
63
+ seen.add(x);
64
+ out.push(x);
65
+ }
66
+ return out;
67
+ }
68
+ function splitImportList(s) {
69
+ const out = [];
70
+ for (const part of s.split(",")) {
71
+ const trimmed = part.trim();
72
+ if (!trimmed)
73
+ continue;
74
+ // strip `as X` / `as X as Y`
75
+ const head = trimmed.split(/\s+as\s+/i)[0].trim();
76
+ // strip dot paths like `mod.Sub` → `mod`
77
+ const id = head.split(".")[0];
78
+ if (/^[A-Za-z_]\w*$/.test(id))
79
+ out.push(id);
80
+ }
81
+ return out;
82
+ }
83
+ function extractPython(content) {
84
+ const imports = [];
85
+ let inParen = false;
86
+ let buf = "";
87
+ for (const raw of content.split(/\n/)) {
88
+ const line = raw.replace(/\r$/, "");
89
+ if (inParen) {
90
+ buf += " " + line;
91
+ if (line.includes(")")) {
92
+ inParen = false;
93
+ const inside = buf.split("(")[1]?.split(")")[0] ?? "";
94
+ imports.push(...splitImportList(inside));
95
+ buf = "";
96
+ }
97
+ continue;
98
+ }
99
+ let m = PY_FROM_IMPORT.exec(line);
100
+ if (m) {
101
+ const names = m[1].trim();
102
+ if (names.startsWith("(") && !names.includes(")")) {
103
+ inParen = true;
104
+ buf = names;
105
+ continue;
106
+ }
107
+ imports.push(...splitImportList(names.replace(/[()]/g, "")));
108
+ continue;
109
+ }
110
+ m = PY_IMPORT.exec(line);
111
+ if (m)
112
+ imports.push(...splitImportList(m[1]));
113
+ }
114
+ const defs = [
115
+ ...Array.from(content.matchAll(new RegExp(PY_TOP_DEF.source, "gm")), (mm) => mm[1]),
116
+ ...Array.from(content.matchAll(new RegExp(PY_TOP_CLASS.source, "gm")), (mm) => mm[1]),
117
+ ];
118
+ return { imports: dedup(imports), defs: dedup(defs) };
119
+ }
120
+ function extractJsTs(content) {
121
+ const imports = [];
122
+ for (const m of content.matchAll(JS_NAMED_IMPORT))
123
+ imports.push(...splitImportList(m[1]));
124
+ for (const m of content.matchAll(JS_DEFAULT_IMPORT))
125
+ imports.push(m[1]);
126
+ for (const m of content.matchAll(JS_REQUIRE))
127
+ imports.push(...splitImportList(m[1]));
128
+ const defs = [];
129
+ for (const m of content.matchAll(JS_FN))
130
+ defs.push(m[1]);
131
+ for (const m of content.matchAll(JS_CONST_FN))
132
+ defs.push(m[1]);
133
+ for (const m of content.matchAll(JS_CLASS))
134
+ defs.push(m[1]);
135
+ return { imports: dedup(imports), defs: dedup(defs) };
136
+ }
137
+ export function extractSymbols(content, lang) {
138
+ if (lang === "python")
139
+ return extractPython(content);
140
+ if (lang === "javascript" || lang === "typescript" || lang === "jsx" || lang === "tsx") {
141
+ return extractJsTs(content);
142
+ }
143
+ return { imports: [], defs: [] };
144
+ }
145
+ const DEFAULT_MAX_SYMBOLS = 8;
146
+ const DEFAULT_MAX_CHARS = 6000;
147
+ export async function buildProjectContext(indexer, input) {
148
+ const t0 = Date.now();
149
+ const meta = await indexer.meta(input.projectRoot);
150
+ if (!meta) {
151
+ // We have no index yet; the caller can run `ensureIndexed` upstream.
152
+ return {
153
+ available: false,
154
+ languages: [],
155
+ imported_definitions: [],
156
+ callers: [],
157
+ duration_ms: Date.now() - t0,
158
+ };
159
+ }
160
+ const { imports, defs } = extractSymbols(input.content, input.lang);
161
+ const maxSyms = input.maxSymbols ?? DEFAULT_MAX_SYMBOLS;
162
+ const maxChars = input.maxChars ?? DEFAULT_MAX_CHARS;
163
+ const imported_definitions = [];
164
+ const callers = [];
165
+ // Split the budget so node-builtins / stdlib imports (which produce no SCIP
166
+ // hit) don't starve the second phase. Bias slightly toward imports — the
167
+ // cross-file definitions are the highest-value cross-file evidence.
168
+ let importsBudget = Math.max(2, Math.ceil(maxSyms * 0.6));
169
+ let defsBudget = Math.max(1, maxSyms - importsBudget);
170
+ let charBudget = maxChars;
171
+ // 1) imported symbols → definitions (highest value: cross-file evidence)
172
+ for (const sym of imports) {
173
+ if (importsBudget <= 0 || charBudget <= 100)
174
+ break;
175
+ const found = await indexer.findSymbolsByDisplay(input.projectRoot, sym);
176
+ if (found.length === 0)
177
+ continue; // budget NOT spent on misses
178
+ // Prefer the symbol that has a definition; pick the first.
179
+ let chosen = null;
180
+ for (const cand of found) {
181
+ const def = await indexer.defOf(input.projectRoot, cand.symbolId);
182
+ if (def && def.location.file) {
183
+ chosen = def;
184
+ break;
185
+ }
186
+ }
187
+ if (!chosen)
188
+ continue;
189
+ const snippet = chosen.snippet?.slice(0, Math.min(1500, charBudget));
190
+ const entry = {
191
+ symbol: chosen.displayName,
192
+ kind: chosen.kind,
193
+ file: chosen.location.file,
194
+ line: chosen.location.startLine,
195
+ ...(snippet !== undefined ? { snippet } : {}),
196
+ };
197
+ imported_definitions.push(entry);
198
+ importsBudget--;
199
+ charBudget -= snippet ? snippet.length : 100;
200
+ }
201
+ // 2) for each defined function/class here, list callers (cross-file usage)
202
+ for (const fn of defs) {
203
+ if (defsBudget <= 0 || charBudget <= 50)
204
+ break;
205
+ const callerRefs = await indexer.callersOf(input.projectRoot, fn);
206
+ if (callerRefs.length === 0)
207
+ continue;
208
+ // de-dup by file:line; cap at 8 per symbol
209
+ const seen = new Set();
210
+ const out = [];
211
+ for (const r of callerRefs) {
212
+ const key = `${r.location.file}:${r.location.startLine}`;
213
+ if (seen.has(key))
214
+ continue;
215
+ seen.add(key);
216
+ out.push({ file: r.location.file, line: r.location.startLine });
217
+ if (out.length >= 8)
218
+ break;
219
+ }
220
+ if (out.length === 0)
221
+ continue;
222
+ callers.push({ symbol: fn, callers: out });
223
+ defsBudget--;
224
+ charBudget -= 50 + out.length * 30;
225
+ }
226
+ return {
227
+ available: true,
228
+ languages: meta.languages,
229
+ imported_definitions,
230
+ callers,
231
+ duration_ms: Date.now() - t0,
232
+ };
233
+ }
234
+ /** Convenience: render the structured block as a single markdown string. */
235
+ export function renderProjectContextMarkdown(block) {
236
+ if (!block.available) {
237
+ return "(no project context — SCIP index not built; run `aegis index` to enable)";
238
+ }
239
+ if (block.imported_definitions.length === 0 && block.callers.length === 0) {
240
+ return "(no cross-file evidence found for this file's symbols)";
241
+ }
242
+ const lines = [
243
+ `## PROJECT CONTEXT (SCIP — ${block.languages.join("+")} index)`,
244
+ "",
245
+ ];
246
+ if (block.imported_definitions.length > 0) {
247
+ lines.push("### Imported definitions (cross-file)");
248
+ for (const d of block.imported_definitions) {
249
+ lines.push(`- **${d.symbol}** (${d.kind}) — ${d.file}:${d.line}`);
250
+ if (d.snippet) {
251
+ lines.push("```");
252
+ lines.push(d.snippet);
253
+ lines.push("```");
254
+ }
255
+ }
256
+ lines.push("");
257
+ }
258
+ if (block.callers.length > 0) {
259
+ lines.push("### Callers of this file's symbols");
260
+ for (const c of block.callers) {
261
+ const cs = c.callers.map((x) => `${x.file}:${x.line}`).join(", ");
262
+ lines.push(`- **${c.symbol}** → called from: ${cs}`);
263
+ }
264
+ }
265
+ return lines.join("\n");
266
+ }
267
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/index/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { SCIPIndexer } from "./scip.js";
2
+ export interface EmbeddedItem {
3
+ /** Stable id; reused as the HNSW label. */
4
+ id: number;
5
+ file: string;
6
+ symbolId?: string;
7
+ displayName?: string;
8
+ kind?: string;
9
+ /** Source snippet that was embedded (capped). */
10
+ snippet: string;
11
+ }
12
+ export interface SemanticHit {
13
+ item: EmbeddedItem;
14
+ /** Cosine similarity in [-1, 1]; closer to 1 = more similar. */
15
+ similarity: number;
16
+ }
17
+ export interface EmbedIndexInfo {
18
+ model: string;
19
+ dim: number;
20
+ rows: number;
21
+ built_at: number;
22
+ scip_sha?: string;
23
+ }
24
+ export declare class Embedder {
25
+ private readonly modelName;
26
+ private _pipeline;
27
+ private _dim;
28
+ constructor(modelName?: string);
29
+ /** Lazily load the model (cold cost). Returns false if unavailable. */
30
+ ensureLoaded(): Promise<boolean>;
31
+ get dim(): number;
32
+ get model(): string;
33
+ /** Returns the L2-normalised embedding (use cosine via dot product). */
34
+ embed(text: string): Promise<Float32Array | null>;
35
+ /** Batch embed; sequential on CPU to keep peak memory bounded. */
36
+ embedBatch(texts: ReadonlyArray<string>): Promise<Array<Float32Array | null>>;
37
+ }
38
+ export declare class EmbeddingIndex {
39
+ private readonly projectRoot;
40
+ private readonly embedder;
41
+ private hnsw;
42
+ private meta;
43
+ private info;
44
+ constructor(projectRoot: string, embedder?: Embedder);
45
+ private dir;
46
+ private indexPath;
47
+ private metaPath;
48
+ private infoPath;
49
+ /** True iff an index file exists on disk for this project. */
50
+ hasPersisted(): boolean;
51
+ /** Load an existing index from disk; returns false if any required file missing. */
52
+ load(): Promise<boolean>;
53
+ /**
54
+ * Build the index from scratch by walking every SymbolInformation entry the
55
+ * SCIP indexer has stored for this project. We embed each symbol's snippet
56
+ * (from defOf). Slow (~5-50 ms per symbol on CPU); meant to be invoked from
57
+ * ``aegis index --embed`` and persisted.
58
+ */
59
+ build(scip: SCIPIndexer, opts?: {
60
+ maxSymbols?: number;
61
+ }): Promise<boolean>;
62
+ /** Top-K semantically similar embedded items for a query snippet. */
63
+ topK(query: string, k: number): Promise<SemanticHit[]>;
64
+ /** Quick info accessor for `aegis index --embed` / `aegis doctor`. */
65
+ getInfo(): EmbedIndexInfo | null;
66
+ }
67
+ export declare function getEmbeddingIndex(projectRoot: string): EmbeddingIndex;
68
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/index/embeddings.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAuBxC,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAoCD,qBAAa,QAAQ;IAIP,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,IAAI,CAAuB;gBAEN,SAAS,GAAE,MAAsB;IAE9D,uEAAuE;IACjE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBtC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,wEAAwE;IAClE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoBvD,kEAAkE;IAC5D,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CAOpF;AA2CD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,IAAI,CAA+B;gBAGxB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,QAAyB;IAGtD,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,QAAQ;IAIhB,8DAA8D;IAC9D,YAAY,IAAI,OAAO;IAIvB,oFAAoF;IAC9E,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAmC9B;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAuOhF,qEAAqE;IAC/D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoB5D,sEAAsE;IACtE,OAAO,IAAI,cAAc,GAAG,IAAI;CAGjC;AAgGD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAQrE"}