@empiricalrun/test-gen 0.76.0 → 0.78.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 (237) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/agent/base/index.d.ts +25 -21
  3. package/dist/agent/base/index.d.ts.map +1 -1
  4. package/dist/agent/base/index.js +50 -37
  5. package/dist/agent/browsing/run.d.ts +1 -2
  6. package/dist/agent/browsing/run.d.ts.map +1 -1
  7. package/dist/agent/browsing/run.js +3 -9
  8. package/dist/agent/browsing/utils.d.ts +2 -9
  9. package/dist/agent/browsing/utils.d.ts.map +1 -1
  10. package/dist/agent/browsing/utils.js +5 -109
  11. package/dist/agent/chat/agent-loop.d.ts +5 -5
  12. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  13. package/dist/agent/chat/agent-loop.js +3 -8
  14. package/dist/agent/chat/exports.d.ts +6 -5
  15. package/dist/agent/chat/exports.d.ts.map +1 -1
  16. package/dist/agent/chat/exports.js +4 -9
  17. package/dist/agent/chat/index.d.ts +2 -2
  18. package/dist/agent/chat/index.d.ts.map +1 -1
  19. package/dist/agent/chat/index.js +23 -35
  20. package/dist/agent/chat/models.d.ts +0 -2
  21. package/dist/agent/chat/models.d.ts.map +1 -1
  22. package/dist/agent/chat/models.js +12 -26
  23. package/dist/agent/chat/prompt/pw-utils-docs.d.ts +1 -1
  24. package/dist/agent/chat/prompt/pw-utils-docs.d.ts.map +1 -1
  25. package/dist/agent/chat/prompt/pw-utils-docs.js +52 -0
  26. package/dist/agent/chat/prompt/repo.d.ts.map +1 -1
  27. package/dist/agent/chat/prompt/repo.js +11 -22
  28. package/dist/agent/chat/prompt/test-case-def.d.ts +2 -0
  29. package/dist/agent/chat/prompt/test-case-def.d.ts.map +1 -0
  30. package/dist/agent/chat/prompt/test-case-def.js +44 -0
  31. package/dist/agent/chat/state.d.ts +8 -14
  32. package/dist/agent/chat/state.d.ts.map +1 -1
  33. package/dist/agent/chat/state.js +15 -60
  34. package/dist/agent/chat/utils.d.ts +2 -2
  35. package/dist/agent/chat/utils.d.ts.map +1 -1
  36. package/dist/agent/chat/utils.js +14 -7
  37. package/dist/agent/cli.d.ts.map +1 -1
  38. package/dist/agent/cli.js +49 -58
  39. package/dist/agent/code-review/executor/index.d.ts +5 -0
  40. package/dist/agent/code-review/executor/index.d.ts.map +1 -0
  41. package/dist/agent/code-review/executor/index.js +13 -0
  42. package/dist/agent/code-review/index.d.ts +8 -3
  43. package/dist/agent/code-review/index.d.ts.map +1 -1
  44. package/dist/agent/code-review/index.js +118 -21
  45. package/dist/agent/code-review/parser.d.ts +5 -0
  46. package/dist/agent/code-review/parser.d.ts.map +1 -0
  47. package/dist/agent/code-review/parser.js +70 -0
  48. package/dist/agent/code-review/types.d.ts +36 -0
  49. package/dist/agent/code-review/types.d.ts.map +1 -0
  50. package/dist/agent/code-review/types.js +13 -0
  51. package/dist/agent/cua/index.d.ts.map +1 -1
  52. package/dist/agent/cua/index.js +18 -2
  53. package/dist/agent/cua/model.d.ts.map +1 -1
  54. package/dist/agent/cua/model.js +4 -1
  55. package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts.map +1 -1
  56. package/dist/agent/triage/index.d.ts +3 -3
  57. package/dist/agent/triage/index.d.ts.map +1 -1
  58. package/dist/agent/triage/index.js +16 -20
  59. package/dist/agent/video-analysis/executor/index.d.ts +5 -0
  60. package/dist/agent/video-analysis/executor/index.d.ts.map +1 -0
  61. package/dist/agent/video-analysis/executor/index.js +10 -0
  62. package/dist/agent/video-analysis/index.d.ts +2 -2
  63. package/dist/agent/video-analysis/index.d.ts.map +1 -1
  64. package/dist/agent/video-analysis/index.js +38 -13
  65. package/dist/artifacts/index.d.ts +1 -1
  66. package/dist/artifacts/index.d.ts.map +1 -1
  67. package/dist/artifacts/index.js +3 -1
  68. package/dist/artifacts/utils.d.ts.map +1 -1
  69. package/dist/bin/index.js +11 -21
  70. package/dist/constants/index.d.ts +14 -0
  71. package/dist/constants/index.d.ts.map +1 -1
  72. package/dist/constants/index.js +33 -1
  73. package/dist/file/server.d.ts +1 -3
  74. package/dist/file/server.d.ts.map +1 -1
  75. package/dist/file/server.js +0 -13
  76. package/dist/file-info/adapters/file-system/index.d.ts.map +1 -1
  77. package/dist/file-info/adapters/file-system/reader.d.ts.map +1 -1
  78. package/dist/file-info/adapters/file-system/reader.js +8 -1
  79. package/dist/file-info/adapters/github/index.d.ts.map +1 -1
  80. package/dist/file-info/adapters/github/reader.d.ts +1 -1
  81. package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
  82. package/dist/file-info/adapters/github/reader.js +8 -5
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/tools/analyse-video/index.d.ts +5 -0
  85. package/dist/tools/analyse-video/index.d.ts.map +1 -0
  86. package/dist/tools/analyse-video/index.js +56 -0
  87. package/dist/tools/create-pull-request/index.js +4 -6
  88. package/dist/tools/create-pull-request/utils.d.ts +1 -1
  89. package/dist/tools/definitions/{fetch-video-analysis.d.ts → analyse-video.d.ts} +17 -12
  90. package/dist/tools/definitions/analyse-video.d.ts.map +1 -0
  91. package/dist/tools/definitions/analyse-video.js +60 -0
  92. package/dist/tools/definitions/review-pull-request.d.ts +3 -0
  93. package/dist/tools/definitions/review-pull-request.d.ts.map +1 -0
  94. package/dist/tools/definitions/review-pull-request.js +16 -0
  95. package/dist/tools/definitions/str_replace_editor.d.ts +1 -0
  96. package/dist/tools/definitions/str_replace_editor.d.ts.map +1 -1
  97. package/dist/tools/definitions/str_replace_editor.js +4 -1
  98. package/dist/tools/definitions/test-gen-browser.d.ts +0 -3
  99. package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -1
  100. package/dist/tools/definitions/test-gen-browser.js +33 -8
  101. package/dist/tools/delete-file/index.d.ts.map +1 -1
  102. package/dist/tools/delete-file/index.js +1 -19
  103. package/dist/tools/executor/base.d.ts +32 -0
  104. package/dist/tools/executor/base.d.ts.map +1 -0
  105. package/dist/tools/executor/base.js +131 -0
  106. package/dist/tools/executor/index.d.ts +3 -22
  107. package/dist/tools/executor/index.d.ts.map +1 -1
  108. package/dist/tools/executor/index.js +7 -100
  109. package/dist/tools/executor/utils/checkpoint.d.ts +1 -1
  110. package/dist/tools/executor/utils/checkpoint.d.ts.map +1 -1
  111. package/dist/tools/executor/utils/checkpoint.js +6 -2
  112. package/dist/tools/executor/utils/git.d.ts +2 -2
  113. package/dist/tools/executor/utils/git.d.ts.map +1 -1
  114. package/dist/tools/executor/utils/git.js +7 -3
  115. package/dist/tools/executor/utils/index.d.ts +5 -3
  116. package/dist/tools/executor/utils/index.d.ts.map +1 -1
  117. package/dist/tools/executor/utils/index.js +23 -2
  118. package/dist/tools/fetch-session-diff/index.js +2 -2
  119. package/dist/tools/file-operations/create.d.ts.map +1 -1
  120. package/dist/tools/file-operations/create.js +1 -4
  121. package/dist/tools/file-operations/index.d.ts +2 -1
  122. package/dist/tools/file-operations/index.d.ts.map +1 -1
  123. package/dist/tools/file-operations/index.js +4 -1
  124. package/dist/tools/file-operations/insert.d.ts +1 -2
  125. package/dist/tools/file-operations/insert.d.ts.map +1 -1
  126. package/dist/tools/file-operations/insert.js +1 -4
  127. package/dist/tools/file-operations/replace.d.ts.map +1 -1
  128. package/dist/tools/file-operations/replace.js +21 -25
  129. package/dist/tools/file-operations/shared/helpers.d.ts +3 -5
  130. package/dist/tools/file-operations/shared/helpers.d.ts.map +1 -1
  131. package/dist/tools/file-operations/shared/helpers.js +1 -5
  132. package/dist/tools/grep/index.d.ts.map +1 -1
  133. package/dist/tools/grep/index.js +18 -11
  134. package/dist/tools/index.d.ts +5 -5
  135. package/dist/tools/index.d.ts.map +1 -1
  136. package/dist/tools/index.js +17 -16
  137. package/dist/tools/merge-conflicts/index.d.ts.map +1 -1
  138. package/dist/tools/merge-conflicts/index.js +1 -1
  139. package/dist/tools/rename-file/index.js +1 -1
  140. package/dist/tools/review-pull-request/index.d.ts.map +1 -1
  141. package/dist/tools/review-pull-request/index.js +44 -65
  142. package/dist/tools/run-test.d.ts.map +1 -1
  143. package/dist/tools/run-test.js +25 -3
  144. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  145. package/dist/tools/test-gen-browser.js +51 -47
  146. package/dist/tools/upgrade-packages/index.d.ts.map +1 -1
  147. package/dist/tools/upgrade-packages/index.js +4 -0
  148. package/dist/tools/upgrade-packages/utils.d.ts +1 -0
  149. package/dist/tools/upgrade-packages/utils.d.ts.map +1 -1
  150. package/dist/tools/upgrade-packages/utils.js +1 -0
  151. package/dist/trace-utils/index.d.ts +1 -1
  152. package/dist/trace-utils/index.d.ts.map +1 -1
  153. package/dist/trace-utils/index.js +1 -1
  154. package/dist/utils/dedup/dedup-image.d.ts +22 -0
  155. package/dist/utils/dedup/dedup-image.d.ts.map +1 -0
  156. package/dist/utils/dedup/dedup-image.js +26 -0
  157. package/dist/utils/dedup/find-threshold.d.ts +2 -0
  158. package/dist/utils/dedup/find-threshold.d.ts.map +1 -0
  159. package/dist/utils/dedup/find-threshold.js +42 -0
  160. package/dist/utils/hash.d.ts +2 -0
  161. package/dist/utils/hash.d.ts.map +1 -0
  162. package/dist/utils/hash.js +24 -0
  163. package/dist/utils/model.d.ts +1 -1
  164. package/dist/utils/model.d.ts.map +1 -1
  165. package/dist/utils/model.js +7 -5
  166. package/dist/utils/repo-tree.d.ts +0 -1
  167. package/dist/utils/repo-tree.d.ts.map +1 -1
  168. package/dist/utils/repo-tree.js +2 -14
  169. package/dist/utils/slug.js +1 -1
  170. package/dist/video-core/agent-orchestrator.d.ts +13 -0
  171. package/dist/video-core/agent-orchestrator.d.ts.map +1 -0
  172. package/dist/video-core/agent-orchestrator.js +59 -0
  173. package/dist/video-core/index.d.ts +39 -0
  174. package/dist/video-core/index.d.ts.map +1 -0
  175. package/dist/video-core/index.js +134 -0
  176. package/dist/video-core/model-limits.d.ts +4 -0
  177. package/dist/video-core/model-limits.d.ts.map +1 -0
  178. package/dist/video-core/model-limits.js +73 -0
  179. package/dist/video-core/storage-manager.d.ts +5 -0
  180. package/dist/video-core/storage-manager.d.ts.map +1 -0
  181. package/dist/video-core/storage-manager.js +62 -0
  182. package/dist/video-core/types.d.ts +13 -0
  183. package/dist/video-core/types.d.ts.map +1 -0
  184. package/dist/video-core/types.js +2 -0
  185. package/dist/video-core/utils.d.ts +15 -0
  186. package/dist/video-core/utils.d.ts.map +1 -0
  187. package/dist/video-core/utils.js +194 -0
  188. package/dist/video-core/xml-parser.d.ts +3 -0
  189. package/dist/video-core/xml-parser.d.ts.map +1 -0
  190. package/dist/video-core/xml-parser.js +27 -0
  191. package/package.json +6 -6
  192. package/tsconfig.tsbuildinfo +1 -1
  193. package/dist/agent/chat/prompt/index.d.ts +0 -6
  194. package/dist/agent/chat/prompt/index.d.ts.map +0 -1
  195. package/dist/agent/chat/prompt/index.js +0 -200
  196. package/dist/agent/code-review/prompt.d.ts +0 -2
  197. package/dist/agent/code-review/prompt.d.ts.map +0 -1
  198. package/dist/agent/code-review/prompt.js +0 -55
  199. package/dist/agent/diagnosis-agent/index.d.ts +0 -11
  200. package/dist/agent/diagnosis-agent/index.d.ts.map +0 -1
  201. package/dist/agent/diagnosis-agent/index.js +0 -88
  202. package/dist/agent/diagnosis-agent/strict-mode-violation.d.ts +0 -10
  203. package/dist/agent/diagnosis-agent/strict-mode-violation.d.ts.map +0 -1
  204. package/dist/agent/diagnosis-agent/strict-mode-violation.js +0 -30
  205. package/dist/tools/definitions/extract-frames-from-video.d.ts +0 -39
  206. package/dist/tools/definitions/extract-frames-from-video.d.ts.map +0 -1
  207. package/dist/tools/definitions/extract-frames-from-video.js +0 -60
  208. package/dist/tools/definitions/fetch-video-analysis.d.ts.map +0 -1
  209. package/dist/tools/definitions/fetch-video-analysis.js +0 -61
  210. package/dist/tools/extract-frames-from-video/index.d.ts +0 -7
  211. package/dist/tools/extract-frames-from-video/index.d.ts.map +0 -1
  212. package/dist/tools/extract-frames-from-video/index.js +0 -145
  213. package/dist/tools/fetch-video-analysis/index.d.ts +0 -5
  214. package/dist/tools/fetch-video-analysis/index.d.ts.map +0 -1
  215. package/dist/tools/fetch-video-analysis/index.js +0 -149
  216. package/dist/tools/fetch-video-analysis/open-ai.d.ts +0 -6
  217. package/dist/tools/fetch-video-analysis/open-ai.d.ts.map +0 -1
  218. package/dist/tools/fetch-video-analysis/open-ai.js +0 -37
  219. package/dist/tools/fetch-video-analysis/utils.d.ts +0 -16
  220. package/dist/tools/fetch-video-analysis/utils.d.ts.map +0 -1
  221. package/dist/tools/fetch-video-analysis/utils.js +0 -121
  222. package/dist/tools/fetch-video-analysis/video-analysis.d.ts +0 -7
  223. package/dist/tools/fetch-video-analysis/video-analysis.d.ts.map +0 -1
  224. package/dist/tools/fetch-video-analysis/video-analysis.js +0 -70
  225. package/dist/tools/file-operations/shared/git-helper.d.ts +0 -4
  226. package/dist/tools/file-operations/shared/git-helper.d.ts.map +0 -1
  227. package/dist/tools/file-operations/shared/git-helper.js +0 -29
  228. package/dist/utils/dedup-image-fs.d.ts +0 -27
  229. package/dist/utils/dedup-image-fs.d.ts.map +0 -1
  230. package/dist/utils/dedup-image-fs.js +0 -88
  231. package/dist/utils/dedup-image.d.ts +0 -25
  232. package/dist/utils/dedup-image.d.ts.map +0 -1
  233. package/dist/utils/dedup-image.js +0 -80
  234. package/dist/utils/local-ffmpeg-client.d.ts +0 -27
  235. package/dist/utils/local-ffmpeg-client.d.ts.map +0 -1
  236. package/dist/utils/local-ffmpeg-client.js +0 -299
  237. package/eslint.config.mjs +0 -43
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @empiricalrun/test-gen
2
2
 
3
+ ## 0.78.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b01be05: feat: move task queue to r2-uploader package
8
+ - e65313e: refactor: remove unused functions and streamline video analysis process
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [b01be05]
13
+ - Updated dependencies [e65313e]
14
+ - @empiricalrun/r2-uploader@0.4.0
15
+ - @empiricalrun/llm@0.24.0
16
+
17
+ ## 0.77.0
18
+
19
+ ### Minor Changes
20
+
21
+ - bc38c65: feat: diff tab ui update with code review comments
22
+ - e5e45e0: feat: code review agent output format update to v2
23
+ - 44373a4: feat: code review agent system prompt and ui update
24
+ - 8a206cf: feat: optional line annotated diff on /diff endpoint for code review agent
25
+ - 151dc8f: feat: fetchVideoAnalysis uses VideoAnalysisAgent under the hood
26
+ - 49b44a6: feat: cr agent auto refresh ui with fresh code review data
27
+ - 82a6fe7: refactor: chat model update in base agent v2
28
+ - f9a7023: feat: tool exec v2 integration with base agent v2
29
+ - a25735a: feat: added trace in code review agent
30
+
31
+ ### Patch Changes
32
+
33
+ - a45714d: fix: updated prompt to ask agent to format code description in markdown
34
+ - ba65440: feat: convert image url to base64 uri before sending to llm
35
+ - cf991ee: chore: file view tool for code review agent
36
+ - eda0ccd: feat: support tool response image parts with urls
37
+ - 1f7e8b0: chore: diff endpoint now also returns pr metadata, code review agent receives pr metadata
38
+ - 42e19ee: fix: removed duplicate trigger on create pr tool for code review
39
+ - 02c3532: fix: graceful handling of missing verdict in xml - infer verdict from cr agent line comments
40
+ - 8f3a25f: feat: versioned code review responses
41
+ - bd61b13: feat: change default model to gpt-5
42
+ - Updated dependencies [8ff49e5]
43
+ - Updated dependencies [ba65440]
44
+ - Updated dependencies [eda0ccd]
45
+ - Updated dependencies [25bd9b6]
46
+ - Updated dependencies [d56954c]
47
+ - @empiricalrun/llm@0.23.0
48
+ - @empiricalrun/test-run@0.11.1
49
+
3
50
  ## 0.76.0
4
51
 
5
52
  ### Minor Changes
@@ -1,43 +1,47 @@
1
- import { type IChatModel } from "@empiricalrun/llm/chat";
2
- import type { CanonicalMessage, ChatState, FileInfo, PendingToolCall, ReporterFunction, StreamingMessageReporterFunc, SupportedChatModels, ToolDefinition, ToolResult, TraceClient } from "@empiricalrun/shared-types";
1
+ import { type IChatCanonicalModel } from "@empiricalrun/llm/chat";
2
+ import type { CanonicalMessage, ChatState, FileInfo, MessageCheckpoint, PendingToolCall, ReporterFunction, StreamingMessageReporterFunc, SupportedChatModels, TextMessagePart, TextMessageWithAttachmentsPart, ToolResult, ToolsForLLM, TraceClient } from "@empiricalrun/shared-types";
3
+ import { BaseToolExecutor } from "../../tools/executor/base";
3
4
  type RunLoopParams<T> = {
4
- messages: CanonicalMessage[];
5
5
  reporter: ReporterFunction;
6
6
  streamingMessageReporter?: StreamingMessageReporterFunc;
7
7
  trace?: TraceClient;
8
8
  signal?: AbortSignal;
9
- onPendingToolCall: (toolCalls: PendingToolCall[]) => Promise<void>;
9
+ onPendingToolCall?: (toolCalls: PendingToolCall[]) => Promise<void>;
10
10
  onLLMResponse?: (response: T, selectedModel: SupportedChatModels) => Promise<void>;
11
11
  repoInfoBuilder?: () => Promise<FileInfo>;
12
12
  };
13
13
  export type AgentParams = {
14
14
  selectedModel: SupportedChatModels;
15
+ chatState?: ChatState;
15
16
  featureFlags?: string[];
16
17
  workerEnv?: Record<string, string>;
18
+ toolExecutor?: BaseToolExecutor;
19
+ trace?: TraceClient;
17
20
  };
18
21
  export declare abstract class BaseAgent {
19
22
  featureFlags: string[];
20
- tools: ToolDefinition[];
23
+ tools: ToolsForLLM;
21
24
  selectedModel: SupportedChatModels;
22
- protected chatModel?: IChatModel<any>;
23
- protected workerEnv?: Record<string, string>;
24
- protected currentChatState?: ChatState;
25
- constructor({ featureFlags, selectedModel, workerEnv }: AgentParams);
26
- protected abstract getTools(): ToolDefinition[];
25
+ chatModel: IChatCanonicalModel;
26
+ workerEnv?: Record<string, string>;
27
+ toolExecutor?: BaseToolExecutor;
28
+ trace?: TraceClient;
29
+ constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, }: AgentParams);
30
+ protected abstract getTools(): ToolsForLLM;
27
31
  protected abstract buildSystemPrompt(repoContext?: string): Promise<string>;
28
- get messages(): CanonicalMessage[] | undefined;
29
- get askUserForInput(): boolean | undefined;
30
- private rejectPendingToolCallsAndUpdateState;
31
- private processValidToolCallsAndUpdateState;
32
- initializeWithState(chatState: ChatState): void;
32
+ get messages(): CanonicalMessage[];
33
+ get askUserForInput(): boolean;
34
+ get chatState(): ChatState;
35
+ pushUserMessage(parts: Array<TextMessagePart | TextMessageWithAttachmentsPart>): ChatState;
36
+ setChatState(chatState: ChatState): void;
33
37
  stop(): ChatState;
34
- processToolCallsFromState({ toolCalls, toolResults, chatState, }: {
35
- toolCalls: PendingToolCall[];
36
- toolResults: ToolResult[];
37
- chatState: ChatState;
38
- }): ChatState | undefined;
39
- processToolResults(toolCalls: PendingToolCall[], toolResults: ToolResult[]): ChatState | undefined;
38
+ processToolResults(toolCalls: PendingToolCall[], toolResults: ToolResult[], checkpoint: MessageCheckpoint | null): ChatState | undefined;
39
+ toolCallHandler(toolCalls: PendingToolCall[]): Promise<void>;
40
40
  runLoop(params: RunLoopParams<any>): Promise<void>;
41
+ getHumanReadableLatestMessage(): {
42
+ role: string;
43
+ textMessage: string;
44
+ } | undefined;
41
45
  }
42
46
  export {};
43
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAOpC,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iBAAiB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,8BAAsB,SAAS;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;gBAE3B,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,WAAW;IAOnE,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,cAAc,EAAE;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE3E,IAAI,QAAQ,IAAI,gBAAgB,EAAE,GAAG,SAAS,CAE7C;IAED,IAAI,eAAe,IAAI,OAAO,GAAG,SAAS,CAEzC;IAED,OAAO,CAAC,oCAAoC;IA4B5C,OAAO,CAAC,mCAAmC;IA6B3C,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAS/C,IAAI,IAAI,SAAS;IAWjB,yBAAyB,CAAC,EACxB,SAAS,EACT,WAAW,EACX,SAAS,GACV,EAAE;QACD,SAAS,EAAE,eAAe,EAAE,CAAC;QAC7B,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,SAAS,EAAE,SAAS,CAAC;KACtB,GAAG,SAAS,GAAG,SAAS;IAUzB,kBAAkB,CAChB,SAAS,EAAE,eAAe,EAAE,EAC5B,WAAW,EAAE,UAAU,EAAE,GACxB,SAAS,GAAG,SAAS;IAalB,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;CAqBzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,eAAe,EACf,8BAA8B,EAC9B,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAO7D,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,8BAAsB,SAAS;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;gBAER,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,KAAK,GACN,EAAE,WAAW;IAgBd,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW;IAC1C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE3E,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAEjC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,IAAI,SAAS,IAAI,SAAS,CAQzB;IAED,eAAe,CACb,KAAK,EAAE,KAAK,CAAC,eAAe,GAAG,8BAA8B,CAAC,GAC7D,SAAS;IAKZ,YAAY,CAAC,SAAS,EAAE,SAAS;IAQjC,IAAI,IAAI,SAAS;IA6BjB,kBAAkB,CAChB,SAAS,EAAE,eAAe,EAAE,EAC5B,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,iBAAiB,GAAG,IAAI,GACnC,SAAS,GAAG,SAAS;IA4BlB,eAAe,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;IAmBxC,6BAA6B,IACzB;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,GACD,SAAS;CAGd"}
@@ -4,31 +4,54 @@ exports.BaseAgent = void 0;
4
4
  const chat_1 = require("@empiricalrun/llm/chat");
5
5
  const agent_loop_1 = require("../chat/agent-loop");
6
6
  const repo_1 = require("../chat/prompt/repo");
7
+ const state_1 = require("../chat/state");
7
8
  const REJECTION_RESULT = "This tool call was rejected by the user.";
8
9
  class BaseAgent {
9
10
  featureFlags = [];
10
- tools = [];
11
+ tools;
11
12
  selectedModel;
12
13
  chatModel;
13
14
  workerEnv;
14
- currentChatState;
15
- constructor({ featureFlags, selectedModel, workerEnv }) {
15
+ toolExecutor;
16
+ trace;
17
+ constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, }) {
16
18
  this.featureFlags = featureFlags || [];
17
19
  this.selectedModel = selectedModel;
18
20
  this.workerEnv = workerEnv;
19
21
  this.tools = this.getTools();
22
+ this.toolExecutor = toolExecutor;
23
+ const messages = chatState?.messages || [];
24
+ this.chatModel = (0, chat_1.createChatModel)(messages, this.selectedModel, this.workerEnv);
25
+ this.chatModel.validateEnvVarsForAuth();
26
+ this.trace = trace;
20
27
  }
21
28
  get messages() {
22
- return this.chatModel?.messages;
29
+ return this.chatModel.messages;
23
30
  }
24
31
  get askUserForInput() {
25
- return this.chatModel?.askUserForInput;
32
+ return this.chatModel.askUserForInput || false;
26
33
  }
27
- rejectPendingToolCallsAndUpdateState(chatModel, chatState) {
28
- const pendingToolCalls = chatModel.getPendingToolCalls();
34
+ get chatState() {
35
+ return (0, state_1.createChatStateForMessages)({
36
+ messages: this.chatModel.messages,
37
+ selectedModel: this.selectedModel,
38
+ askUserForInput: this.chatModel.askUserForInput,
39
+ // TODO: Test out the error scenario
40
+ error: null,
41
+ });
42
+ }
43
+ pushUserMessage(parts) {
44
+ this.chatModel.pushUserPartsMessage(parts);
45
+ return this.chatState;
46
+ }
47
+ setChatState(chatState) {
48
+ this.chatModel = (0, chat_1.createChatModel)(chatState.messages, this.selectedModel, this.workerEnv);
49
+ }
50
+ stop() {
51
+ const pendingToolCalls = this.chatModel.getPendingToolCalls();
29
52
  let updatedChatState = {
30
- ...chatState,
31
- messages: chatModel.messages,
53
+ ...this.chatState,
54
+ messages: this.chatModel.messages,
32
55
  askUserForInput: true,
33
56
  };
34
57
  if (pendingToolCalls.length > 0) {
@@ -37,16 +60,16 @@ class BaseAgent {
37
60
  result: REJECTION_RESULT,
38
61
  artifacts: null,
39
62
  }));
40
- chatModel.pushToolResultsMessage(pendingToolCalls, toolResults);
63
+ this.chatModel.pushToolResultsMessage(pendingToolCalls, toolResults, null);
41
64
  updatedChatState = {
42
65
  ...updatedChatState,
43
- messages: chatModel.messages,
66
+ messages: this.chatModel.messages,
44
67
  };
45
68
  }
46
69
  return updatedChatState;
47
70
  }
48
- processValidToolCallsAndUpdateState(chatModel, chatState, toolCalls, toolResults) {
49
- const pendingToolCalls = chatModel.getPendingToolCalls() || [];
71
+ processToolResults(toolCalls, toolResults, checkpoint) {
72
+ const pendingToolCalls = this.chatModel.getPendingToolCalls() || [];
50
73
  // Filter tool calls to only include pending ones
51
74
  const filteredToolResults = [];
52
75
  const filteredToolCalls = toolCalls.filter((call, index) => {
@@ -57,37 +80,23 @@ class BaseAgent {
57
80
  return false;
58
81
  });
59
82
  if (filteredToolCalls.length > 0) {
60
- chatModel.pushToolResultsMessage(filteredToolCalls, filteredToolResults);
83
+ this.chatModel.pushToolResultsMessage(filteredToolCalls, filteredToolResults, checkpoint);
61
84
  return {
62
- ...chatState,
63
- messages: chatModel.messages,
64
- askUserForInput: chatModel.askUserForInput,
85
+ ...this.chatState,
86
+ messages: this.chatModel.messages,
87
+ askUserForInput: this.chatModel.askUserForInput,
65
88
  };
66
89
  }
67
90
  return undefined;
68
91
  }
69
- initializeWithState(chatState) {
70
- this.currentChatState = chatState;
71
- this.chatModel = (0, chat_1.createChatModel)(chatState.messages, this.selectedModel, this.workerEnv);
72
- }
73
- stop() {
74
- if (!this.chatModel || !this.currentChatState) {
75
- throw new Error("Agent not initialized - call initializeWithState first");
76
- }
77
- return this.rejectPendingToolCallsAndUpdateState(this.chatModel, this.currentChatState);
78
- }
79
- processToolCallsFromState({ toolCalls, toolResults, chatState, }) {
80
- const tempChatModel = (0, chat_1.createChatModel)(chatState.messages, chatState.model);
81
- return this.processValidToolCallsAndUpdateState(tempChatModel, chatState, toolCalls, toolResults);
82
- }
83
- processToolResults(toolCalls, toolResults) {
84
- if (!this.chatModel || !this.currentChatState) {
85
- throw new Error("Agent not initialized - call initializeWithState first");
92
+ async toolCallHandler(toolCalls) {
93
+ if (!this.toolExecutor) {
94
+ throw new Error("No toolExecutor available and no onPendingToolCall provided");
86
95
  }
87
- return this.processValidToolCallsAndUpdateState(this.chatModel, this.currentChatState, toolCalls, toolResults);
96
+ const { toolResults, checkpoint } = await this.toolExecutor.execute(toolCalls);
97
+ this.processToolResults(toolCalls, toolResults, checkpoint);
88
98
  }
89
99
  async runLoop(params) {
90
- this.chatModel = (0, chat_1.createChatModel)(params.messages, this.selectedModel, this.workerEnv);
91
100
  let repoContext;
92
101
  if (params.repoInfoBuilder) {
93
102
  const repoInfo = await params.repoInfoBuilder();
@@ -96,11 +105,15 @@ class BaseAgent {
96
105
  const systemPrompt = await this.buildSystemPrompt(repoContext);
97
106
  await (0, agent_loop_1.chatAgentLoop)({
98
107
  ...params,
108
+ onPendingToolCall: params.onPendingToolCall || this.toolCallHandler.bind(this),
99
109
  chatModel: this.chatModel,
100
- tools: this.tools,
110
+ tools: this.getTools(),
101
111
  systemPrompt,
102
112
  featureFlags: this.featureFlags,
103
113
  });
104
114
  }
115
+ getHumanReadableLatestMessage() {
116
+ return this.chatModel.getHumanReadableLatestMessage();
117
+ }
105
118
  }
106
119
  exports.BaseAgent = BaseAgent;
@@ -1,4 +1,4 @@
1
- import { ArtifactInput, Usage } from "@empiricalrun/shared-types";
1
+ import { Usage } from "@empiricalrun/shared-types";
2
2
  import { BrowserAgentResult } from "../cua";
3
3
  type GenerateTestsType = {
4
4
  testCaseName: string;
@@ -22,7 +22,6 @@ export declare function runBrowsingAgent({ testCaseName, testCaseSuites, testFil
22
22
  error: string;
23
23
  result: BrowserAgentResult | undefined;
24
24
  usage: Usage | undefined;
25
- artifacts: ArtifactInput[];
26
25
  }>;
27
26
  export {};
28
27
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/agent/browsing/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAclE,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,CAAC;AAEF,wBAAsB,8BAA8B,CAAC,EACnD,gBAAgB,EAChB,OAAO,EACP,YAAY,GACb,EAAE;IACD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlB;AAED,wBAAsB,gBAAgB,CAAC,EACrC,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,OAAO,EACP,yBAAyB,EACzB,YAAY,GACb,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC,CAmGD"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/agent/browsing/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAanD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,CAAC;AAEF,wBAAsB,8BAA8B,CAAC,EACnD,gBAAgB,EAChB,OAAO,EACP,YAAY,GACb,EAAE;IACD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlB;AAED,wBAAsB,gBAAgB,CAAC,EACrC,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,OAAO,EACP,yBAAyB,EACzB,YAAY,GACb,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B,CAAC,CA+FD"}
@@ -9,14 +9,13 @@ const test_run_1 = require("@empiricalrun/test-run");
9
9
  const detect_port_1 = __importDefault(require("detect-port"));
10
10
  const fs_1 = __importDefault(require("fs"));
11
11
  const path_1 = __importDefault(require("path"));
12
- const utils_1 = require("../../artifacts/utils");
13
12
  const web_1 = require("../../bin/utils/platform/web");
14
13
  const server_1 = require("../../file/server");
15
14
  const exec_1 = require("../../utils/exec");
16
- const utils_2 = require("./utils");
15
+ const utils_1 = require("./utils");
17
16
  async function convertProjectsFilterToProject({ pwProjectsFilter, repoDir, testFilePath, }) {
18
- const playwrightConfig = await (0, utils_2.readPlaywrightConfig)(repoDir);
19
- const project = await (0, utils_2.detectProjectName)(testFilePath, playwrightConfig, pwProjectsFilter);
17
+ const playwrightConfig = await (0, utils_1.readPlaywrightConfig)(repoDir);
18
+ const project = await (0, utils_1.detectProjectName)(testFilePath, playwrightConfig, pwProjectsFilter);
20
19
  return project;
21
20
  }
22
21
  async function runBrowsingAgent({ testCaseName, testCaseSuites, testFilePath, filePathToUpdate, projectName, testGenToken, repoDir, traceId, editFileWithGeneratedCode, envOverrides, }) {
@@ -92,17 +91,12 @@ async function runBrowsingAgent({ testCaseName, testCaseSuites, testFilePath, fi
92
91
  console.error(`[generateTestsUsingMasterAgent] Failed to remove extra scripts from files post test gen error:`, e);
93
92
  }
94
93
  }
95
- const artifacts = [
96
- ...((0, utils_1.findPlaywrightArtifacts)(repoDir) || []),
97
- ...(fileServer.getArtifactInputsFromServer() || []),
98
- ];
99
94
  await fileServer.stop();
100
95
  const { result, usage } = fileServer.getResultAndUsage();
101
96
  return {
102
97
  isError: !!error,
103
98
  error: error || "",
104
99
  result,
105
- artifacts,
106
100
  usage,
107
101
  };
108
102
  }
@@ -1,21 +1,14 @@
1
- import { TraceClient } from "@empiricalrun/llm";
2
- import type { TestCase } from "@empiricalrun/shared-types";
3
1
  import { Page } from "playwright";
4
2
  import { PlaywrightTestConfig } from "playwright/test";
5
3
  export declare function isRegExp(obj: any): obj is RegExp;
6
4
  export declare function prepareBrowsingAgentTask(steps: string[]): string;
7
- export declare function addImportForMethod(testFilePath: string, methodName: string): Promise<void>;
8
- export declare function replaceTodoWithCreateTest(testFilePath: string, repoDir: string): Promise<void>;
5
+ export declare function addImportForMethod(testFilePath: string, methodName: string): void;
6
+ export declare function replaceTodoWithCreateTest(testFilePath: string, repoDir: string): string | undefined;
9
7
  export declare function markTestAsOnly({ testCaseName, testCaseSuites, specPath, }: {
10
8
  testCaseName: string;
11
9
  testCaseSuites: string[];
12
10
  specPath: string;
13
11
  }): Promise<void>;
14
- export declare function prepareFileForMasterAgent({ testCase, specPath, trace, }: {
15
- testCase: TestCase;
16
- specPath: string;
17
- trace?: TraceClient;
18
- }): Promise<string>;
19
12
  export declare function injectPwLocatorGenerator(page: Page): Promise<void>;
20
13
  /**
21
14
  * function to read playwright config from the source repo
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/agent/browsing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAsBvD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,CAKhD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAIvD;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,iBAgBnB;AAgED,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,iBAwBhB;AAED,wBAAsB,cAAc,CAAC,EACnC,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,iBAoBA;AAED,wBAAsB,yBAAyB,CAAC,EAC9C,QAAQ,EACR,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDlB;AAyBD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,iBA6HxD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AAWD,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,oBAAoB,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,oBAAoB,EACtC,gBAAgB,GAAE,MAAM,EAAU,GACjC,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/agent/browsing/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAYvD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,CAKhD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAIvD;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAe1E;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAsBpB;AAED,wBAAsB,cAAc,CAAC,EACnC,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,iBAoBA;AAyBD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,iBA6HxD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AAWD,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,oBAAoB,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,oBAAoB,EACtC,gBAAgB,GAAE,MAAM,EAAU,GACjC,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
@@ -8,7 +8,6 @@ exports.prepareBrowsingAgentTask = prepareBrowsingAgentTask;
8
8
  exports.addImportForMethod = addImportForMethod;
9
9
  exports.replaceTodoWithCreateTest = replaceTodoWithCreateTest;
10
10
  exports.markTestAsOnly = markTestAsOnly;
11
- exports.prepareFileForMasterAgent = prepareFileForMasterAgent;
12
11
  exports.injectPwLocatorGenerator = injectPwLocatorGenerator;
13
12
  exports.readPlaywrightConfig = readPlaywrightConfig;
14
13
  exports.getValidProjectNames = getValidProjectNames;
@@ -18,13 +17,7 @@ const minimatch_1 = require("minimatch");
18
17
  const path_1 = __importDefault(require("path"));
19
18
  // For TypeScript type safety
20
19
  let tsxImport = null;
21
- const logger_1 = require("../../bin/logger");
22
- const context_1 = require("../../bin/utils/context");
23
20
  const web_1 = require("../../bin/utils/platform/web");
24
- const create_test_block_1 = require("../codegen/create-test-block");
25
- const fix_ts_errors_1 = require("../codegen/fix-ts-errors");
26
- const lexical_scoped_vars_1 = require("../codegen/lexical-scoped-vars");
27
- const update_flow_1 = require("../codegen/update-flow");
28
21
  function isRegExp(obj) {
29
22
  return (obj instanceof RegExp ||
30
23
  Object.prototype.toString.call(obj) === "[object RegExp]");
@@ -34,7 +27,7 @@ function prepareBrowsingAgentTask(steps) {
34
27
  const task = `${sanitizedSteps.join("\n")}\n`;
35
28
  return task;
36
29
  }
37
- async function addImportForMethod(testFilePath, methodName) {
30
+ function addImportForMethod(testFilePath, methodName) {
38
31
  // Instead of using "@empiricalrun/test-gen", we use the local dist file
39
32
  // This is to avoid assuming that the test-gen package is installed in the project
40
33
  const importSource = path_1.default.join(__dirname, "../../../dist/index.js");
@@ -43,60 +36,7 @@ async function addImportForMethod(testFilePath, methodName) {
43
36
  }
44
37
  fs_1.default.writeFileSync(testFilePath, (0, web_1.addNewImport)(fs_1.default.readFileSync(testFilePath, "utf-8"), [methodName], importSource));
45
38
  }
46
- async function prepareFileForUpdateScenario({ testCase, specPath, trace, }) {
47
- const { name, suites } = testCase;
48
- await (0, web_1.addUserContextFixture)({
49
- scenarioName: name,
50
- filePath: specPath,
51
- suites,
52
- });
53
- // update the test case with appropriate location for createTest
54
- const [suggestion] = await (0, update_flow_1.appendCreateTestBlock)({
55
- trace,
56
- testCase,
57
- file: specPath,
58
- validateTypes: false,
59
- });
60
- const createTestFilePath = suggestion?.updatedFiles[0] || "";
61
- console.log("appending to existing test block");
62
- console.log("updated test file path", createTestFilePath);
63
- const fetchScopeVariablesSpan = trace?.span({
64
- name: "fetch-scope-variables",
65
- input: {
66
- createTestFilePath,
67
- },
68
- });
69
- const scopeVariables = await (0, lexical_scoped_vars_1.getLexicalScopedVars)({
70
- file: fs_1.default.readFileSync(createTestFilePath, "utf-8"),
71
- referencePoint: "await createTest",
72
- trace: fetchScopeVariablesSpan,
73
- });
74
- fetchScopeVariablesSpan?.end({
75
- name: "fetch-scope-variables",
76
- output: {
77
- variables: scopeVariables,
78
- },
79
- });
80
- await (0, web_1.appendScopeToCreateTest)(createTestFilePath, scopeVariables);
81
- await addImportForMethod(createTestFilePath, "createTest");
82
- const { pomPrompt, nonSpecFilePrompt } = await (0, context_1.contextForGeneration)(createTestFilePath);
83
- await (0, fix_ts_errors_1.validateAndFixTypescriptErrors)({
84
- trace,
85
- file: createTestFilePath,
86
- pomCode: pomPrompt,
87
- nonSpecFileCode: nonSpecFilePrompt,
88
- testCase: testCase,
89
- });
90
- await markTestAsOnly({
91
- testCaseName: name,
92
- testCaseSuites: suites,
93
- specPath,
94
- });
95
- return createTestFilePath;
96
- }
97
- async function replaceTodoWithCreateTest(testFilePath, repoDir) {
98
- // This method is an alternative to prepareFileForUpdateScenario
99
- // TODO: Does not support scoped variables and updates in POM files
39
+ function replaceTodoWithCreateTest(testFilePath, repoDir) {
100
40
  const absoluteTestFilePath = path_1.default.join(repoDir, testFilePath);
101
41
  const fileContent = fs_1.default.readFileSync(absoluteTestFilePath, "utf-8");
102
42
  const todoRegex = /\/\/ TODO\(agent(?:\s+on\s+(\w+))?\):\s*(.*)/;
@@ -104,10 +44,11 @@ async function replaceTodoWithCreateTest(testFilePath, repoDir) {
104
44
  if (!todoMatch) {
105
45
  throw new Error(`No "// TODO(agent):" or "// TODO(agent on pageName):" comment found in file: ${testFilePath}`);
106
46
  }
107
- const [, pageVarName] = todoMatch;
47
+ const [, pageVarName, todoContent] = todoMatch;
108
48
  const pageVariable = pageVarName || "page"; // Default to "page" if not specified
109
49
  fs_1.default.writeFileSync(absoluteTestFilePath, fileContent.replace(todoRegex, (_, __, todoText) => `await createTest("${todoText.replace(/"/g, '\\"')}", ${pageVariable});`));
110
- await addImportForMethod(absoluteTestFilePath, "createTest");
50
+ addImportForMethod(absoluteTestFilePath, "createTest");
51
+ return todoContent;
111
52
  }
112
53
  async function markTestAsOnly({ testCaseName, testCaseSuites, specPath, }) {
113
54
  const testFileContent = fs_1.default.readFileSync(specPath, "utf-8");
@@ -124,51 +65,6 @@ async function markTestAsOnly({ testCaseName, testCaseSuites, specPath, }) {
124
65
  fs_1.default.writeFileSync(specPath, updatedTestFileContent);
125
66
  }
126
67
  }
127
- async function prepareFileForMasterAgent({ testCase, specPath, trace, }) {
128
- const prepareFileSpan = trace?.span({
129
- name: "prepare-file-for-master-agent",
130
- });
131
- new logger_1.CustomLogger({ useReporter: true }).log(`Preparing file for master agent. [view trace](${trace?.getTraceUrl()})`);
132
- const { name, suites } = testCase;
133
- // check if the spec file exists
134
- // if no then create a new file with test and expect imports
135
- if (!fs_1.default.existsSync(specPath)) {
136
- const fileCreateSpan = prepareFileSpan?.span({
137
- name: "create-file",
138
- input: { specPath },
139
- });
140
- fs_1.default.writeFileSync(specPath, "");
141
- const fileContentWithImports = (0, web_1.addNewImport)("", ["test", "expect"], (0, web_1.getFixtureImportPath)(specPath));
142
- fs_1.default.writeFileSync(specPath, fileContentWithImports, "utf-8");
143
- fileCreateSpan?.end({ output: { specPath, fileContentWithImports } });
144
- }
145
- const existingContents = fs_1.default.readFileSync(specPath, "utf-8");
146
- const { testBlock } = (0, web_1.getTypescriptTestBlock)({
147
- scenarioName: name,
148
- suites,
149
- content: existingContents,
150
- });
151
- if (!testBlock) {
152
- const newTestBlock = await (0, create_test_block_1.createEmptyTestCaseBlock)({
153
- trace: prepareFileSpan,
154
- testCase,
155
- file: specPath,
156
- });
157
- fs_1.default.writeFileSync(specPath, `${existingContents} \n\n ${newTestBlock}`, "utf-8");
158
- const updatedContent = (0, web_1.injectCodeSnippetBySuiteChain)({
159
- testFileContent: existingContents,
160
- suites: testCase.suites,
161
- codeSnippet: `\n\n${newTestBlock}`,
162
- });
163
- fs_1.default.writeFileSync(specPath, updatedContent, "utf-8");
164
- }
165
- const updatePath = await prepareFileForUpdateScenario({
166
- testCase,
167
- specPath,
168
- trace,
169
- });
170
- return updatePath;
171
- }
172
68
  function newContentsWithTestOnly(existingContents, originalTestBlock, updatedTestBlock, parentDescribeBlock) {
173
69
  if (!parentDescribeBlock) {
174
70
  const testMarkedAsOnly = updatedTestBlock.replace("test(", "test.only(");
@@ -1,18 +1,18 @@
1
1
  import { TraceClient } from "@empiricalrun/llm";
2
- import { IChatModel } from "@empiricalrun/llm/chat";
3
- import { CanonicalMessage, PendingToolCall, ReporterFunction, StreamingMessageReporterFunc, SupportedChatModels, ToolDefinition } from "@empiricalrun/shared-types";
2
+ import { IChatCanonicalModel, IChatModel } from "@empiricalrun/llm/chat";
3
+ import { CanonicalMessage, PendingToolCall, ReporterFunction, StreamingMessageReporterFunc, SupportedChatModels, ToolsForLLM } from "@empiricalrun/shared-types";
4
4
  type AgentLoopParams<T> = {
5
- chatModel: IChatModel<T>;
5
+ chatModel: IChatModel<T> | IChatCanonicalModel;
6
6
  reporter: ReporterFunction;
7
7
  streamingMessageReporter?: StreamingMessageReporterFunc;
8
8
  trace?: TraceClient;
9
9
  signal?: AbortSignal;
10
10
  featureFlags: string[];
11
- tools: ToolDefinition[];
11
+ tools: ToolsForLLM;
12
12
  onPendingToolCall: (toolCalls: PendingToolCall[]) => Promise<void>;
13
13
  onLLMResponse?: (response: T, selectedModel: SupportedChatModels) => Promise<void>;
14
14
  systemPrompt: string;
15
15
  };
16
- export declare function chatAgentLoop<T = CanonicalMessage>({ chatModel, reporter, streamingMessageReporter, trace, signal, featureFlags, tools, onPendingToolCall, onLLMResponse, systemPrompt, }: AgentLoopParams<T>): Promise<void>;
16
+ export declare function chatAgentLoop<T extends CanonicalMessage = CanonicalMessage>({ chatModel, reporter, streamingMessageReporter, trace, signal, featureFlags, tools, onPendingToolCall, onLLMResponse, systemPrompt, }: AgentLoopParams<T>): Promise<void>;
17
17
  export {};
18
18
  //# sourceMappingURL=agent-loop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAC;AAKpC,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,iBAAiB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,aAAa,CAAC,CAAC,GAAG,gBAAgB,EAAE,EACxD,SAAS,EACT,QAAQ,EACR,wBAAwB,EACxB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDpC"}
1
+ {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAKpC,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;IAC/C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,iBAAiB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,aAAa,CACjC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,EAC7C,EACA,SAAS,EACT,QAAQ,EACR,wBAAwB,EACxB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CpC"}
@@ -19,11 +19,11 @@ async function chatAgentLoop({ chatModel, reporter, streamingMessageReporter, tr
19
19
  (0, utils_1.log)(`${(0, utils_1.getModelName)(chatModel.selectedModel)} is working...`);
20
20
  const response = await chatModel.getLLMResponse({
21
21
  systemPrompt,
22
- tools: tools.map((t) => t.schema),
22
+ tools,
23
23
  trace,
24
24
  streamingMessageReporter,
25
25
  hasThinkingEnabled: true,
26
- hasInterleavedThinkingEnabled: featureFlags.includes("interleavedThinkingClaude"),
26
+ featureFlags,
27
27
  });
28
28
  if (!response) {
29
29
  throw new Error("Error getting response from LLM");
@@ -40,12 +40,7 @@ async function chatAgentLoop({ chatModel, reporter, streamingMessageReporter, tr
40
40
  await reporter((0, state_1.chatStateFromModel)({ chatModel, error: null }), latest);
41
41
  }
42
42
  catch (error) {
43
- await (0, utils_1.handleAgentError)({
44
- error,
45
- chatModel,
46
- reporter,
47
- trace,
48
- });
43
+ await (0, utils_1.handleAgentError)({ error, chatModel, reporter, trace });
49
44
  throw error;
50
45
  }
51
46
  }
@@ -1,12 +1,13 @@
1
+ export type { IChatModel } from "@empiricalrun/llm/chat";
2
+ export { createChatModel, SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat";
1
3
  export { getFileInfoFromGitHub, viewFileUsingGitHub, } from "../../file-info/adapters/github";
2
- export { allToolsDefinitions } from "../../tools";
4
+ export type { AgentParams } from "../base";
3
5
  export { BaseAgent } from "../base";
6
+ export type { CodeReviewResultV0, CodeReviewResultV1, CodeReviewResultV2, CodeReviewVersionedResult, } from "../code-review";
4
7
  export { MODE_TO_AGENT_MAP } from "../index";
5
8
  export { TriageAgent } from "../triage";
6
9
  export { ChatAgent } from "./index";
7
- export { getDefaultChatModelId, resolveChatModelBasedOnInput } from "./models";
8
- export { CHAT_STATE_VERSIONS_MIGRATIONS_MAP, chatStateFromModel, createChatState, createChatStateForMessages, fetchToolCallFromId, getLatestDownloadBuildUrl, LATEST_CHAT_STATE_VERSION, migrateChatState, } from "./state";
10
+ export { resolveChatModelBasedOnInput } from "./models";
11
+ export { CHAT_STATE_VERSIONS_MIGRATIONS_MAP, chatStateFromModel, fetchToolCallFromId, getLatestDownloadBuildUrl, LATEST_CHAT_STATE_VERSION, migrateChatState, } from "./state";
9
12
  export { extractAttachments } from "./utils";
10
- export type { IChatModel } from "@empiricalrun/llm/chat";
11
- export { createChatModel, SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat";
12
13
  //# sourceMappingURL=exports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}