@empiricalrun/test-gen 0.73.0 → 0.74.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 (313) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/dist/actions/utils/index.d.ts.map +1 -1
  3. package/dist/actions/utils/index.js +1 -2
  4. package/dist/agent/browsing/index.d.ts.map +1 -1
  5. package/dist/agent/browsing/index.js +9 -7
  6. package/dist/agent/browsing/utils.d.ts.map +1 -1
  7. package/dist/agent/browsing/utils.js +3 -4
  8. package/dist/agent/chat/agent-loop.d.ts +7 -8
  9. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  10. package/dist/agent/chat/agent-loop.js +14 -17
  11. package/dist/agent/chat/exports.d.ts +5 -4
  12. package/dist/agent/chat/exports.d.ts.map +1 -1
  13. package/dist/agent/chat/exports.js +9 -4
  14. package/dist/agent/chat/filesystem-cache.d.ts +12 -0
  15. package/dist/agent/chat/filesystem-cache.d.ts.map +1 -0
  16. package/dist/agent/chat/filesystem-cache.js +101 -0
  17. package/dist/agent/chat/index.d.ts +4 -1
  18. package/dist/agent/chat/index.d.ts.map +1 -1
  19. package/dist/agent/chat/index.js +44 -22
  20. package/dist/agent/chat/models.d.ts +2 -1
  21. package/dist/agent/chat/models.d.ts.map +1 -1
  22. package/dist/agent/chat/models.js +25 -3
  23. package/dist/agent/chat/prompt/index.d.ts +3 -1
  24. package/dist/agent/chat/prompt/index.d.ts.map +1 -1
  25. package/dist/agent/chat/prompt/index.js +77 -2
  26. package/dist/agent/chat/prompt/repo.d.ts.map +1 -1
  27. package/dist/agent/chat/prompt/repo.js +1 -0
  28. package/dist/agent/chat/state.d.ts +6 -5
  29. package/dist/agent/chat/state.d.ts.map +1 -1
  30. package/dist/agent/chat/state.js +35 -5
  31. package/dist/agent/chat/utils.d.ts +1 -0
  32. package/dist/agent/chat/utils.d.ts.map +1 -1
  33. package/dist/agent/chat/utils.js +16 -3
  34. package/dist/agent/cua/index.js +1 -1
  35. package/dist/agent/cua/model.js +1 -1
  36. package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts.map +1 -1
  37. package/dist/agent/cua/pw-codegen/pw-pause/index.js +0 -1
  38. package/dist/agent/master/browser-tests/fixtures.d.ts.map +1 -1
  39. package/dist/agent/master/browser-tests/fixtures.js +0 -1
  40. package/dist/agent/master/element-annotation.d.ts.map +1 -1
  41. package/dist/agent/master/element-annotation.js +1 -2
  42. package/dist/agent/master/execute-browser-action.d.ts.map +1 -1
  43. package/dist/agent/master/execute-browser-action.js +8 -6
  44. package/dist/agent/master/icon-descriptor/index.js +2 -2
  45. package/dist/agent/master/next-action.js +1 -1
  46. package/dist/agent/master/planner.js +1 -1
  47. package/dist/agent/master/scroller.js +2 -2
  48. package/dist/agent/master/with-hints.d.ts.map +1 -1
  49. package/dist/agent/master/with-hints.js +6 -5
  50. package/dist/agent/planner/run-time-planner.js +1 -1
  51. package/dist/agent/planner/run.d.ts.map +1 -1
  52. package/dist/agent/planner/run.js +4 -2
  53. package/dist/auth/cli-auth.js +1 -1
  54. package/dist/auth/token-store.d.ts.map +1 -1
  55. package/dist/auth/token-store.js +4 -6
  56. package/dist/bin/index.js +30 -163
  57. package/dist/bin/utils/context.js +1 -1
  58. package/dist/bin/utils/index.d.ts +0 -12
  59. package/dist/bin/utils/index.d.ts.map +1 -1
  60. package/dist/bin/utils/index.js +0 -70
  61. package/dist/bin/utils/platform/web/index.d.ts +2 -2
  62. package/dist/bin/utils/platform/web/index.d.ts.map +1 -1
  63. package/dist/bin/utils/platform/web/index.js +7 -5
  64. package/dist/bin/utils/scenarios/index.d.ts +11 -3
  65. package/dist/bin/utils/scenarios/index.d.ts.map +1 -1
  66. package/dist/browser-injected-scripts/annotate-elements.spec.js +0 -5
  67. package/dist/browser-injected-scripts/annotate-elements.spec.ts +0 -5
  68. package/dist/dashboard/client.d.ts +2 -2
  69. package/dist/dashboard/client.d.ts.map +1 -1
  70. package/dist/dashboard/client.js +4 -1
  71. package/dist/file-info/adapters/file-system/index.d.ts +9 -0
  72. package/dist/file-info/adapters/file-system/index.d.ts.map +1 -0
  73. package/dist/file-info/adapters/file-system/index.js +25 -0
  74. package/dist/file-info/adapters/file-system/reader.d.ts +6 -0
  75. package/dist/file-info/adapters/file-system/reader.d.ts.map +1 -0
  76. package/dist/file-info/{file-system.js → adapters/file-system/reader.js} +16 -0
  77. package/dist/file-info/adapters/github/index.d.ts +11 -0
  78. package/dist/file-info/adapters/github/index.d.ts.map +1 -0
  79. package/dist/file-info/adapters/github/index.js +29 -0
  80. package/dist/file-info/adapters/github/reader.d.ts +16 -0
  81. package/dist/file-info/adapters/github/reader.d.ts.map +1 -0
  82. package/dist/file-info/adapters/github/reader.js +185 -0
  83. package/dist/file-info/index.d.ts +4 -0
  84. package/dist/file-info/index.d.ts.map +1 -0
  85. package/dist/file-info/index.js +10 -0
  86. package/dist/index.d.ts +2 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +6 -1
  89. package/dist/recorder/index.d.ts +7 -3
  90. package/dist/recorder/index.d.ts.map +1 -1
  91. package/dist/recorder/index.js +181 -64
  92. package/dist/recorder/temp-files.d.ts +1 -1
  93. package/dist/recorder/temp-files.d.ts.map +1 -1
  94. package/dist/recorder/temp-files.js +2 -2
  95. package/dist/recorder/upload.d.ts +1 -1
  96. package/dist/recorder/upload.d.ts.map +1 -1
  97. package/dist/recorder/upload.js +3 -3
  98. package/dist/tools/{commit-and-create-pr.d.ts → commit-and-create-pr/index.d.ts} +1 -1
  99. package/dist/tools/commit-and-create-pr/index.d.ts.map +1 -0
  100. package/dist/tools/{commit-and-create-pr.js → commit-and-create-pr/index.js} +8 -28
  101. package/dist/tools/definitions/commit-and-create-pr.d.ts +3 -0
  102. package/dist/tools/definitions/commit-and-create-pr.d.ts.map +1 -0
  103. package/dist/tools/definitions/commit-and-create-pr.js +31 -0
  104. package/dist/tools/definitions/delete-file.d.ts +3 -0
  105. package/dist/tools/definitions/delete-file.d.ts.map +1 -0
  106. package/dist/tools/definitions/delete-file.js +20 -0
  107. package/dist/tools/{download-build.d.ts → definitions/download-build.d.ts} +2 -2
  108. package/dist/tools/definitions/download-build.d.ts.map +1 -0
  109. package/dist/tools/definitions/download-build.js +18 -0
  110. package/dist/tools/definitions/fetch-video-analysis.d.ts +11 -0
  111. package/dist/tools/definitions/fetch-video-analysis.d.ts.map +1 -0
  112. package/dist/tools/definitions/fetch-video-analysis.js +26 -0
  113. package/dist/tools/definitions/grep.d.ts +3 -0
  114. package/dist/tools/definitions/grep.d.ts.map +1 -0
  115. package/dist/tools/definitions/grep.js +29 -0
  116. package/dist/tools/definitions/merge-conflicts.d.ts +3 -0
  117. package/dist/tools/definitions/merge-conflicts.d.ts.map +1 -0
  118. package/dist/tools/definitions/merge-conflicts.js +24 -0
  119. package/dist/tools/definitions/run-test.d.ts +2 -2
  120. package/dist/tools/definitions/run-test.d.ts.map +1 -1
  121. package/dist/tools/definitions/run-test.js +4 -7
  122. package/dist/tools/definitions/str_replace_editor.d.ts.map +1 -1
  123. package/dist/tools/definitions/str_replace_editor.js +9 -5
  124. package/dist/tools/definitions/test-gen-browser.d.ts +5 -5
  125. package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -1
  126. package/dist/tools/definitions/test-gen-browser.js +4 -7
  127. package/dist/tools/definitions/upgrade-packages.d.ts +36 -0
  128. package/dist/tools/definitions/upgrade-packages.d.ts.map +1 -0
  129. package/dist/tools/definitions/upgrade-packages.js +21 -0
  130. package/dist/tools/definitions/utils.d.ts +15 -0
  131. package/dist/tools/definitions/utils.d.ts.map +1 -0
  132. package/dist/tools/definitions/utils.js +16 -0
  133. package/dist/tools/{delete-file.d.ts → delete-file/index.d.ts} +1 -1
  134. package/dist/tools/delete-file/index.d.ts.map +1 -0
  135. package/dist/tools/{delete-file.js → delete-file/index.js} +4 -16
  136. package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
  137. package/dist/tools/diagnosis-fetcher.js +13 -11
  138. package/dist/tools/download-build/index.d.ts +3 -0
  139. package/dist/tools/download-build/index.d.ts.map +1 -0
  140. package/dist/tools/{download-build.js → download-build/index.js} +4 -14
  141. package/dist/tools/executor/index.d.ts.map +1 -1
  142. package/dist/tools/executor/index.js +19 -4
  143. package/dist/tools/executor/utils/git.js +1 -1
  144. package/dist/tools/executor/utils/pr-description.d.ts +1 -1
  145. package/dist/tools/executor/utils/pr-description.d.ts.map +1 -1
  146. package/dist/tools/fetch-image/index.d.ts +10 -1
  147. package/dist/tools/fetch-image/index.d.ts.map +1 -1
  148. package/dist/tools/fetch-image/index.js +8 -1
  149. package/dist/tools/fetch-last-successful-test-run/index.d.ts +3 -0
  150. package/dist/tools/fetch-last-successful-test-run/index.d.ts.map +1 -0
  151. package/dist/tools/fetch-last-successful-test-run/index.js +60 -0
  152. package/dist/tools/fetch-video-analysis/index.d.ts +5 -0
  153. package/dist/tools/fetch-video-analysis/index.d.ts.map +1 -0
  154. package/dist/tools/fetch-video-analysis/index.js +89 -0
  155. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.d.ts +24 -0
  156. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.d.ts.map +1 -0
  157. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.js +209 -0
  158. package/dist/tools/fetch-video-analysis/utils.d.ts +10 -0
  159. package/dist/tools/fetch-video-analysis/utils.d.ts.map +1 -0
  160. package/dist/tools/fetch-video-analysis/utils.js +72 -0
  161. package/dist/tools/fetch-video-analysis/video-analysis.d.ts +7 -0
  162. package/dist/tools/fetch-video-analysis/video-analysis.d.ts.map +1 -0
  163. package/dist/tools/fetch-video-analysis/video-analysis.js +54 -0
  164. package/dist/tools/file-operations/create.d.ts +11 -0
  165. package/dist/tools/file-operations/create.d.ts.map +1 -0
  166. package/dist/tools/file-operations/create.js +60 -0
  167. package/dist/tools/file-operations/index.d.ts +15 -0
  168. package/dist/tools/file-operations/index.d.ts.map +1 -0
  169. package/dist/tools/file-operations/index.js +143 -0
  170. package/dist/tools/file-operations/insert.d.ts +11 -0
  171. package/dist/tools/file-operations/insert.d.ts.map +1 -0
  172. package/dist/tools/file-operations/insert.js +61 -0
  173. package/dist/tools/file-operations/replace.d.ts +11 -0
  174. package/dist/tools/file-operations/replace.d.ts.map +1 -0
  175. package/dist/tools/file-operations/replace.js +80 -0
  176. package/dist/tools/file-operations/shared/git-helper.d.ts +4 -0
  177. package/dist/tools/file-operations/shared/git-helper.d.ts.map +1 -0
  178. package/dist/tools/file-operations/shared/git-helper.js +29 -0
  179. package/dist/tools/file-operations/shared/helpers.d.ts +19 -0
  180. package/dist/tools/file-operations/shared/helpers.d.ts.map +1 -0
  181. package/dist/tools/file-operations/shared/helpers.js +133 -0
  182. package/dist/tools/file-operations/view/index.d.ts +14 -0
  183. package/dist/tools/file-operations/view/index.d.ts.map +1 -0
  184. package/dist/tools/file-operations/view/index.js +56 -0
  185. package/dist/tools/grep/index.d.ts.map +1 -1
  186. package/dist/tools/grep/index.js +2 -9
  187. package/dist/tools/grep/ripgrep/index.d.ts +2 -2
  188. package/dist/tools/grep/ripgrep/index.d.ts.map +1 -1
  189. package/dist/tools/grep/ripgrep/index.js +3 -3
  190. package/dist/tools/grep/types.d.ts.map +1 -0
  191. package/dist/tools/index.d.ts +7 -2
  192. package/dist/tools/index.d.ts.map +1 -1
  193. package/dist/tools/index.js +66 -22
  194. package/dist/tools/issues/create-issue.d.ts +3 -0
  195. package/dist/tools/issues/create-issue.d.ts.map +1 -0
  196. package/dist/tools/issues/create-issue.js +76 -0
  197. package/dist/tools/issues/index.d.ts +4 -0
  198. package/dist/tools/issues/index.d.ts.map +1 -0
  199. package/dist/tools/issues/index.js +9 -0
  200. package/dist/tools/issues/list-issues.d.ts +3 -0
  201. package/dist/tools/issues/list-issues.d.ts.map +1 -0
  202. package/dist/tools/issues/list-issues.js +32 -0
  203. package/dist/tools/issues/metadata-schema.d.ts +24 -0
  204. package/dist/tools/issues/metadata-schema.d.ts.map +1 -0
  205. package/dist/tools/issues/metadata-schema.js +22 -0
  206. package/dist/tools/issues/update-issue.d.ts +3 -0
  207. package/dist/tools/issues/update-issue.d.ts.map +1 -0
  208. package/dist/tools/issues/update-issue.js +75 -0
  209. package/dist/tools/issues/utils.d.ts +5 -0
  210. package/dist/tools/issues/utils.d.ts.map +1 -0
  211. package/dist/tools/issues/utils.js +26 -0
  212. package/dist/tools/list-environments.d.ts.map +1 -1
  213. package/dist/tools/list-environments.js +4 -0
  214. package/dist/tools/{merge-conflicts.d.ts → merge-conflicts/index.d.ts} +1 -1
  215. package/dist/tools/merge-conflicts/index.d.ts.map +1 -0
  216. package/dist/tools/{merge-conflicts.js → merge-conflicts/index.js} +3 -19
  217. package/dist/tools/test-gen-browser.js +4 -4
  218. package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
  219. package/dist/tools/test-run-fetcher/index.js +4 -0
  220. package/dist/tools/trace-dot-zip/index.d.ts +3 -0
  221. package/dist/tools/trace-dot-zip/index.d.ts.map +1 -0
  222. package/dist/tools/trace-dot-zip/index.js +48 -0
  223. package/dist/tools/trace-dot-zip/types.d.ts +86 -0
  224. package/dist/tools/trace-dot-zip/types.d.ts.map +1 -0
  225. package/dist/tools/trace-dot-zip/types.js +2 -0
  226. package/dist/tools/trace-dot-zip/utils/console-trace.d.ts +7 -0
  227. package/dist/tools/trace-dot-zip/utils/console-trace.d.ts.map +1 -0
  228. package/dist/tools/trace-dot-zip/utils/console-trace.js +34 -0
  229. package/dist/tools/trace-dot-zip/utils/extract-zip.d.ts +21 -0
  230. package/dist/tools/trace-dot-zip/utils/extract-zip.d.ts.map +1 -0
  231. package/dist/tools/trace-dot-zip/utils/extract-zip.js +174 -0
  232. package/dist/tools/trace-dot-zip/utils/network-trace.d.ts +21 -0
  233. package/dist/tools/trace-dot-zip/utils/network-trace.d.ts.map +1 -0
  234. package/dist/tools/trace-dot-zip/utils/network-trace.js +189 -0
  235. package/dist/tools/triage-summary/index.d.ts +3 -0
  236. package/dist/tools/triage-summary/index.d.ts.map +1 -0
  237. package/dist/tools/triage-summary/index.js +51 -0
  238. package/dist/tools/triage-summary/types.d.ts +5 -0
  239. package/dist/tools/triage-summary/types.d.ts.map +1 -0
  240. package/dist/tools/triage-summary/types.js +2 -0
  241. package/dist/tools/triage-summary/utils.d.ts +4 -0
  242. package/dist/tools/triage-summary/utils.d.ts.map +1 -0
  243. package/dist/tools/triage-summary/utils.js +16 -0
  244. package/dist/tools/upgrade-packages/index.d.ts.map +1 -1
  245. package/dist/tools/upgrade-packages/index.js +5 -15
  246. package/dist/tools/view-failed-test-run-report/index.d.ts +12 -0
  247. package/dist/tools/view-failed-test-run-report/index.d.ts.map +1 -0
  248. package/dist/tools/view-failed-test-run-report/index.js +163 -0
  249. package/dist/trace-utils/index.d.ts +4 -0
  250. package/dist/trace-utils/index.d.ts.map +1 -0
  251. package/dist/trace-utils/index.js +10 -0
  252. package/dist/utils/dedup-image-fs.d.ts +27 -0
  253. package/dist/utils/dedup-image-fs.d.ts.map +1 -0
  254. package/dist/utils/dedup-image-fs.js +88 -0
  255. package/dist/utils/dedup-image.d.ts +25 -0
  256. package/dist/utils/dedup-image.d.ts.map +1 -0
  257. package/dist/utils/dedup-image.js +80 -0
  258. package/dist/utils/env.d.ts.map +1 -1
  259. package/dist/utils/env.js +0 -1
  260. package/dist/utils/json.js +1 -1
  261. package/dist/utils/model.d.ts +3 -0
  262. package/dist/utils/model.d.ts.map +1 -0
  263. package/dist/utils/model.js +18 -0
  264. package/dist/utils/playwright-report-parser.d.ts +13 -0
  265. package/dist/utils/playwright-report-parser.d.ts.map +1 -0
  266. package/dist/utils/playwright-report-parser.js +138 -0
  267. package/dist/utils/slug.d.ts +1 -0
  268. package/dist/utils/slug.d.ts.map +1 -1
  269. package/dist/utils/slug.js +9 -1
  270. package/dist/utils/stripAnsi.d.ts.map +1 -1
  271. package/dist/utils/stripAnsi.js +1 -3
  272. package/eslint.config.mjs +43 -0
  273. package/package.json +22 -6
  274. package/tsconfig.tsbuildinfo +1 -1
  275. package/dist/agent/codegen/generate-code-apply-changes.d.ts +0 -13
  276. package/dist/agent/codegen/generate-code-apply-changes.d.ts.map +0 -1
  277. package/dist/agent/codegen/generate-code-apply-changes.js +0 -379
  278. package/dist/agent/codegen/repo-edit.d.ts +0 -23
  279. package/dist/agent/codegen/repo-edit.d.ts.map +0 -1
  280. package/dist/agent/codegen/repo-edit.js +0 -81
  281. package/dist/agent/codegen/run.d.ts +0 -20
  282. package/dist/agent/codegen/run.d.ts.map +0 -1
  283. package/dist/agent/codegen/run.js +0 -116
  284. package/dist/agent/enrich-prompt/index.d.ts +0 -12
  285. package/dist/agent/enrich-prompt/index.d.ts.map +0 -1
  286. package/dist/agent/enrich-prompt/index.js +0 -80
  287. package/dist/agent/enrich-prompt/utils.d.ts +0 -6
  288. package/dist/agent/enrich-prompt/utils.d.ts.map +0 -1
  289. package/dist/agent/enrich-prompt/utils.js +0 -11
  290. package/dist/agent/infer-agent/index.d.ts +0 -10
  291. package/dist/agent/infer-agent/index.d.ts.map +0 -1
  292. package/dist/agent/infer-agent/index.js +0 -60
  293. package/dist/evals/add-scenario-agent.evals.d.ts +0 -4
  294. package/dist/evals/add-scenario-agent.evals.d.ts.map +0 -1
  295. package/dist/evals/add-scenario-agent.evals.js +0 -44
  296. package/dist/evals/infer-master-or-code-agent.evals.d.ts +0 -4
  297. package/dist/evals/infer-master-or-code-agent.evals.d.ts.map +0 -1
  298. package/dist/evals/infer-master-or-code-agent.evals.js +0 -22
  299. package/dist/file-info/file-system.d.ts +0 -3
  300. package/dist/file-info/file-system.d.ts.map +0 -1
  301. package/dist/file-info/github.d.ts +0 -3
  302. package/dist/file-info/github.d.ts.map +0 -1
  303. package/dist/file-info/github.js +0 -107
  304. package/dist/tools/commit-and-create-pr.d.ts.map +0 -1
  305. package/dist/tools/delete-file.d.ts.map +0 -1
  306. package/dist/tools/download-build.d.ts.map +0 -1
  307. package/dist/tools/grep/ripgrep/types.d.ts.map +0 -1
  308. package/dist/tools/merge-conflicts.d.ts.map +0 -1
  309. package/dist/tools/str_replace_editor.d.ts +0 -22
  310. package/dist/tools/str_replace_editor.d.ts.map +0 -1
  311. package/dist/tools/str_replace_editor.js +0 -429
  312. /package/dist/tools/grep/{ripgrep/types.d.ts → types.d.ts} +0 -0
  313. /package/dist/tools/grep/{ripgrep/types.js → types.js} +0 -0
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enrichPromptWithFailingLine = void 0;
4
- const llm_1 = require("@empiricalrun/llm");
5
- const constants_1 = require("../../constants");
6
- const promptTemplate_0 = "{{#section \"system\"}}\nYou are a software QA engineer who is asked to update an automated browser test written that failed during a test run.\n\nYou will be provided with the details of the failure and then a user prompt that details what needs to be changed.\n\n# Details of the failure\n### Failing line:\n{{testBlock}}\n\n### Failing test file path:\n{{testFilePath}}\n\nYour goal is to enrich the user message with \"Failing line\" and \"Failing test file path\", if the user's message contains\nrequests like correcting or replacing failing lines or statements.\n\nTo fulfil your goal, follow these steps:\n1. Identify the user intent and check if the user says anything similar to:\n- \"Replace the failing line\"\n- \"Replace the error statement\"\n- \"Replace the failing statement\"\n- \"Replace the failed user action\"\n2. The user message intent can also be to modify things in or around the \"failing line\". Lookout for this scenario as\nwell to enrich the user message\n3. If such keywords are present, only then enrich the user message by inserting \"Failing line\" and \"Failing test file\npath\" at appropriate locations.\n\nBefore submitting your response, ensure the following:\n- Do not generate code for the user prompt. Your task is just to enrich the user message\n- Enrich the user message ONLY if any of these keywords are present - \"failing line\", \"error statement\", \"failing\nstatement\", \"failed user action\"\n- Do not include any markdown syntax or backticks\n- Respond with <reason_for_output></reason_for_output>, <is_user_message_enriched></is_user_message_enriched> and\n<output></output> as xml tags\n- is_user_message_enriched can be either true or false\n- output should follow the format: \"Replace the line <code> with <whatever is required to be done> in <file_path>\"\n{{/section}}\n\n{{#section \"user\"}}\nUser message:\n{{userMessage}}\n{{/section}}";
7
- const utils_1 = require("./utils");
8
- const responseFormat = {
9
- type: "json_schema",
10
- json_schema: {
11
- name: "analyze_user_message_and_conditionally_enrich_it",
12
- strict: true,
13
- schema: {
14
- type: "object",
15
- properties: {
16
- reason_for_output: {
17
- type: "string",
18
- description: "provide reason in both cases whether the user message was enriched or not",
19
- },
20
- is_user_message_enriched: {
21
- type: "boolean",
22
- description: "whether the user message should be enriched or not",
23
- },
24
- output: {
25
- type: "string",
26
- description: "This is the final output after analyzing the user message, and optionally enriching it.",
27
- },
28
- },
29
- required: ["is_user_message_enriched", "output", "reason_for_output"],
30
- additionalProperties: false,
31
- },
32
- },
33
- };
34
- const enrichPromptWithFailingLine = async ({ trace, testBlock, testFilePath, suggestionForFix, }) => {
35
- let output = {
36
- output: suggestionForFix,
37
- is_user_message_enriched: false,
38
- reason_for_output: "",
39
- };
40
- try {
41
- const enrichedPromptSpan = trace?.span({
42
- name: "enrich-prompt-with-failing-line",
43
- input: {
44
- testBlock,
45
- testFilePath,
46
- suggestionForFix,
47
- },
48
- });
49
- const instructions = (0, llm_1.compilePrompt)(promptTemplate_0, {
50
- testBlock,
51
- testFilePath,
52
- userMessage: suggestionForFix,
53
- });
54
- const llm = new llm_1.LLM({
55
- trace: enrichedPromptSpan,
56
- providerApiKey: constants_1.MODEL_API_KEYS["anthropic"],
57
- provider: "anthropic",
58
- defaultModel: "claude-3-5-sonnet-latest",
59
- });
60
- const llmResponse = await llm.createChatCompletion({
61
- messages: instructions,
62
- modelParameters: {
63
- temperature: 0.5,
64
- },
65
- responseFormat,
66
- });
67
- const generateRequestedChangeResponse = (0, utils_1.extractGenerateRequestedChange)(llmResponse?.content);
68
- output = {
69
- output: generateRequestedChangeResponse.output,
70
- is_user_message_enriched: generateRequestedChangeResponse.is_user_message_enriched,
71
- reason_for_output: generateRequestedChangeResponse.reason_for_output,
72
- };
73
- enrichedPromptSpan?.end({ output: output });
74
- }
75
- catch (e) {
76
- console.error(`Failed to generate requested change for test - "${testBlock}", suggestion - "${suggestionForFix}"`, e);
77
- }
78
- return output;
79
- };
80
- exports.enrichPromptWithFailingLine = enrichPromptWithFailingLine;
@@ -1,6 +0,0 @@
1
- export declare function extractGenerateRequestedChange(input: string): {
2
- reason_for_output: string;
3
- is_user_message_enriched: boolean;
4
- output: string;
5
- };
6
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/agent/enrich-prompt/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,CAQA"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractGenerateRequestedChange = extractGenerateRequestedChange;
4
- function extractGenerateRequestedChange(input) {
5
- const regex = /<reason_for_output>([\s\S]*?)<\/reason_for_output>[\s\S]*?<is_user_message_enriched>([\s\S]*?)<\/is_user_message_enriched>[\s\S]*?<output>([\s\S]*?)<\/output>/g;
6
- const match = regex.exec(input);
7
- const reason_for_output = match[1]?.trim() || "";
8
- const is_user_message_enriched = match[2]?.trim() === "true";
9
- const output = match[3]?.trim() || "";
10
- return { reason_for_output, is_user_message_enriched, output };
11
- }
@@ -1,10 +0,0 @@
1
- import { TraceClient } from "@empiricalrun/llm";
2
- import { Agent, TestGenConfigOptions } from "@empiricalrun/shared-types";
3
- export declare function inferAgentBasedTask({ task, options, trace, }: {
4
- task: string;
5
- options?: TestGenConfigOptions;
6
- trace?: TraceClient;
7
- }): Promise<{
8
- response: Agent;
9
- }>;
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/infer-agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAUzE,wBAAsB,mBAAmB,CAAC,EACxC,IAAI,EACJ,OAAO,EACP,KAAK,GACN,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,CAAC,CA4D/B"}
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.inferAgentBasedTask = inferAgentBasedTask;
4
- const llm_1 = require("@empiricalrun/llm");
5
- const constants_1 = require("../../constants");
6
- const promptTemplate_0 = "{{#section \"system\"}}\nYou are a software test engineer specializing in Playwright end-to-end tests. You are given a task which is a part of an\nend-to-end test scenario. The task may involve updating an existing end-to-end test case or writing a new test case from\nscratch. Tests involve user interactions (e.g. click on element) or other actions supported by Playwright (e.g.\nintercept network requests)\n\nYour objective is to identify whether the task requires accessing a web browser or not.\n\nTo fulfill your objective, answer the following questions:\n\n1. Does it require you to interact with a UI element in the browser? Examples of interactions are click, fill, type, key\npress, assert visibility of the element. Actions that interact with network requests are not UI element interactions.\n\n2. Is the locator of this UI element given to you in the task? Locators look like `getByText(...)`, `getByTestId(...)`\nand other locator methods in Playwright\n\n3. Decide if you need a browser: if you need to interact with a UI element AND you are NOT given the locator for that\nelement, you WILL NEED a browser.\n\n4. If you NEED a browser, then respond with answer as \"master\", otherwise respond with \"code\"\n\n\n# Example 1\n## Input\nTask:\nin this test don't delete the agent and remove steps after that\n\n## Output\n- ui_interaction_to_be_performed: There is no interaction here\n- ui_element_to_interact_with: No element specified\n- has_locator_for_that_element: No element specified\n- reasoning_for_browser_required: No interaction hence browser is not required\n- answer: code\n\n# Example 2\n## Input\nTask:\nin the swapfast test, replace the selectTokenForSwap method. Instead we will do this\\nclick on token button - this will\nshow a drawer\\nEnter usd in the search field that shows up in the drawer\\nSelect USDC.axl for Cosmos Hub - very\nimportant to choose this instead of USDC.axl on Osmosis\n\n## Output\n- ui_interaction_to_be_performed: Click on token button\n- ui_element_to_interact_with: Token button\n- has_locator_for_that_element: false\n- reasoning_for_browser_required: Task requires interacting with a UI element and identifying its locator which needs a\nbrowser\n- answer: master\n{{/section}}\n\n{{#section \"user\"}}\nTask:\n{{task}}\n{{/section}}";
7
- async function inferAgentBasedTask({ task, options, trace, }) {
8
- const inferAgentSpan = trace?.span({
9
- name: "infer-agent",
10
- input: {
11
- task,
12
- options,
13
- },
14
- });
15
- const messages = (0, llm_1.compilePrompt)(promptTemplate_0, { task });
16
- const llm = new llm_1.LLM({
17
- trace: inferAgentSpan,
18
- provider: options?.modelProvider || constants_1.DEFAULT_MODEL_PROVIDER,
19
- defaultModel: options?.model || constants_1.DEFAULT_MODEL,
20
- providerApiKey: constants_1.MODEL_API_KEYS[options?.modelProvider || constants_1.DEFAULT_MODEL_PROVIDER],
21
- });
22
- const firstShotMessage = await llm.createChatCompletion({
23
- messages,
24
- modelParameters: {
25
- ...constants_1.DEFAULT_MODEL_PARAMETERS,
26
- ...options?.modelParameters,
27
- temperature: 1,
28
- },
29
- responseFormat: {
30
- type: "json_schema",
31
- json_schema: {
32
- name: "infer-master-code",
33
- strict: true,
34
- schema: {
35
- type: "object",
36
- properties: {
37
- reason: {
38
- type: "string",
39
- },
40
- response: {
41
- type: "string",
42
- },
43
- },
44
- additionalProperties: false,
45
- required: ["reason", "response"],
46
- },
47
- },
48
- },
49
- });
50
- const output = JSON.parse(firstShotMessage?.content || "{}");
51
- inferAgentSpan?.end({
52
- output: {
53
- response: output.response,
54
- reason: output.reason,
55
- },
56
- });
57
- return {
58
- response: output.response,
59
- };
60
- }
@@ -1,4 +0,0 @@
1
- import { EvaluateFn } from "./type";
2
- declare const addScenarioCodeAgentEvaluate: EvaluateFn;
3
- export default addScenarioCodeAgentEvaluate;
4
- //# sourceMappingURL=add-scenario-agent.evals.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-scenario-agent.evals.d.ts","sourceRoot":"","sources":["../../src/evals/add-scenario-agent.evals.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2BpC,QAAA,MAAM,4BAA4B,EAAE,UAsBnC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const path_1 = __importDefault(require("path"));
7
- const run_1 = require("../agent/codegen/run");
8
- function evaluateEqualityScore({ currentOutput, expectedOutput, }) {
9
- for (const expectedFile of expectedOutput) {
10
- if (!currentOutput.find((output) => {
11
- if (output.filePath && expectedFile.filePath) {
12
- return (path_1.default.basename(output.filePath) ===
13
- path_1.default.basename(expectedFile.filePath));
14
- }
15
- return false;
16
- })) {
17
- return 0;
18
- }
19
- }
20
- return 1;
21
- }
22
- const addScenarioCodeAgentEvaluate = async ({ item, trace }) => {
23
- const { testCase, testFilePath, pageFiles, testFiles } = item.input;
24
- const repoFiles = pageFiles + testFiles;
25
- const repoAgentOutput = await (0, run_1.createTestWithCodeAgent)({
26
- testCase,
27
- file: testFilePath,
28
- trace,
29
- repoFiles,
30
- });
31
- return {
32
- scores: [
33
- {
34
- name: "equality",
35
- value: evaluateEqualityScore({
36
- currentOutput: repoAgentOutput.fileChanges,
37
- expectedOutput: item.expectedOutput,
38
- }),
39
- },
40
- ],
41
- output: repoAgentOutput.fileChanges,
42
- };
43
- };
44
- exports.default = addScenarioCodeAgentEvaluate;
@@ -1,4 +0,0 @@
1
- import { EvaluateFn } from "./type";
2
- export declare const inferMasterOrCodeAgentEvaluate: EvaluateFn;
3
- export default inferMasterOrCodeAgentEvaluate;
4
- //# sourceMappingURL=infer-master-or-code-agent.evals.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infer-master-or-code-agent.evals.d.ts","sourceRoot":"","sources":["../../src/evals/infer-master-or-code-agent.evals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,eAAO,MAAM,8BAA8B,EAAE,UAkB5C,CAAC;AAEF,eAAe,8BAA8B,CAAC"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.inferMasterOrCodeAgentEvaluate = void 0;
4
- const infer_agent_1 = require("../agent/infer-agent");
5
- const inferMasterOrCodeAgentEvaluate = async ({ item, trace, }) => {
6
- const { task } = item.input;
7
- const { response } = await (0, infer_agent_1.inferAgentBasedTask)({
8
- task,
9
- trace,
10
- });
11
- return {
12
- scores: [
13
- {
14
- name: "equality",
15
- value: item.expectedOutput === response ? 1 : 0,
16
- },
17
- ],
18
- output: response,
19
- };
20
- };
21
- exports.inferMasterOrCodeAgentEvaluate = inferMasterOrCodeAgentEvaluate;
22
- exports.default = exports.inferMasterOrCodeAgentEvaluate;
@@ -1,3 +0,0 @@
1
- import { FileInfo } from "@empiricalrun/shared-types";
2
- export declare function getFileInfoFromFS(directory: string): Promise<FileInfo>;
3
- //# sourceMappingURL=file-system.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/file-info/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAItD,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgC5E"}
@@ -1,3 +0,0 @@
1
- import { FileInfo, IDashboardAPIClient } from "@empiricalrun/shared-types";
2
- export declare function getFileInfoFromGitHub(repoName: string, apiClient: IDashboardAPIClient): Promise<FileInfo>;
3
- //# sourceMappingURL=github.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/file-info/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAyE3E,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAwFnB"}
@@ -1,107 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFileInfoFromGitHub = getFileInfoFromGitHub;
7
- const path_1 = __importDefault(require("path"));
8
- async function getFileContent(repoName, path, apiClient) {
9
- // TODO: specify ref (branch name) for the chat session
10
- const url = `/api/github/files?repo=${repoName}&path=${path}`;
11
- const response = await apiClient.request(url, {
12
- method: "GET",
13
- });
14
- if (!response.data) {
15
- throw new Error(`Unable to fetch file for FileInfo`);
16
- }
17
- return response.data.fileContents.content;
18
- }
19
- async function getContentsForDirectory({ repo, path, }, apiClient) {
20
- const url = `/api/github/tree?repo=${repo}&path=${path}`;
21
- const response = await apiClient.request(url, {
22
- method: "GET",
23
- });
24
- if (!response.data) {
25
- throw new Error(`Unable to fetch file for FileInfo`);
26
- }
27
- return response.data.tree;
28
- }
29
- // TODO: use this helper method in the dashboard
30
- async function getFileInfoFromGitHub(repoName, apiClient) {
31
- const files = await getContentsForDirectory({ repo: repoName, path: "" }, apiClient);
32
- const root = [];
33
- const nodeMap = {};
34
- if (!files) {
35
- return {
36
- type: "directory",
37
- path: repoName,
38
- name: repoName,
39
- children: [],
40
- };
41
- }
42
- files.tree.forEach((file) => {
43
- if (!file.path) {
44
- return;
45
- }
46
- const pathParts = file.path.split("/");
47
- const fileName = path_1.default.basename(file.path);
48
- const isFile = file.type === "blob";
49
- // Create the current file/directory node
50
- const currentPath = file.path;
51
- const currentNode = isFile
52
- ? {
53
- type: "file",
54
- path: currentPath,
55
- name: fileName,
56
- getContent: async () => getFileContent(repoName, currentPath, apiClient),
57
- }
58
- : {
59
- type: "directory",
60
- path: currentPath,
61
- name: fileName,
62
- children: [],
63
- };
64
- nodeMap[currentPath] = currentNode;
65
- if (pathParts.length === 1) {
66
- // This is a root-level file or directory
67
- root.push(currentNode);
68
- }
69
- else {
70
- // This is a nested file or directory
71
- const parentPath = path_1.default.dirname(currentPath);
72
- // Ensure parent exists
73
- if (!nodeMap[parentPath]) {
74
- // Create parent directory if it doesn't exist yet
75
- const parentNode = {
76
- type: "directory",
77
- path: parentPath,
78
- name: parentPath.split("/").pop() || "",
79
- children: [],
80
- };
81
- nodeMap[parentPath] = parentNode;
82
- // Add parent to its parent or root
83
- const parentPathParts = parentPath.split("/");
84
- if (parentPathParts.length === 1) {
85
- root.push(parentNode);
86
- }
87
- else {
88
- const grandparentPath = path_1.default.dirname(parentPath);
89
- if (nodeMap[grandparentPath] &&
90
- nodeMap[grandparentPath].type === "directory") {
91
- nodeMap[grandparentPath].children.push(parentNode);
92
- }
93
- }
94
- }
95
- // Add current node to its parent
96
- if (nodeMap[parentPath].type === "directory") {
97
- nodeMap[parentPath].children.push(currentNode);
98
- }
99
- }
100
- });
101
- return {
102
- type: "directory",
103
- path: repoName,
104
- name: repoName,
105
- children: root,
106
- };
107
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit-and-create-pr.d.ts","sourceRoot":"","sources":["../../src/tools/commit-and-create-pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AA+BvD,eAAO,MAAM,qBAAqB,EAAE,IAwFnC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete-file.d.ts","sourceRoot":"","sources":["../../src/tools/delete-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,4BAA4B,CAAC;AAepC,eAAO,MAAM,cAAc,EAAE,IAwE5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"download-build.d.ts","sourceRoot":"","sources":["../../src/tools/download-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,EAAE,IAmC/B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tools/grep/ripgrep/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,cAAc,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAE/D,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE7C,qBAAa,YAAY;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;gBAEH,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;IAKhD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflicts.d.ts","sourceRoot":"","sources":["../../src/tools/merge-conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AA6CvD,eAAO,MAAM,kBAAkB,EAAE,IAgEhC,CAAC"}
@@ -1,22 +0,0 @@
1
- import type { CollectArtifacts, Tool, ToolResult } from "@empiricalrun/shared-types";
2
- interface StrReplaceInput {
3
- command: string;
4
- path: string;
5
- view_range?: [number, number];
6
- old_str?: string;
7
- new_str?: string;
8
- file_text?: string;
9
- insert_line?: number;
10
- }
11
- /**
12
- * Our implementation of Claude's built-in text editor tool
13
- * https://docs.anthropic.com/en/docs/build-with-claude/tool-use/text-editor-tool
14
- */
15
- export declare function strReplaceEditorExecutor({ input, repoPath, collectArtifacts, }: {
16
- input: StrReplaceInput;
17
- repoPath: string;
18
- collectArtifacts?: CollectArtifacts;
19
- }): Promise<ToolResult>;
20
- export declare const textEditorTools: Tool[];
21
- export {};
22
- //# sourceMappingURL=str_replace_editor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"str_replace_editor.d.ts","sourceRoot":"","sources":["../../src/tools/str_replace_editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,IAAI,EAEJ,UAAU,EACX,MAAM,4BAA4B,CAAC;AAuCpC,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiWD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,GAAG,OAAO,CAAC,UAAU,CAAC,CA8CtB;AA8ED,eAAO,MAAM,eAAe,EAAE,IAAI,EAKjC,CAAC"}