@empiricalrun/test-gen 0.75.0 → 0.77.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 (254) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/agent/base/index.d.ts +32 -21
  3. package/dist/agent/base/index.d.ts.map +1 -1
  4. package/dist/agent/base/index.js +100 -57
  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 +8 -7
  12. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  13. package/dist/agent/chat/agent-loop.js +7 -18
  14. package/dist/agent/chat/exports.d.ts +9 -6
  15. package/dist/agent/chat/exports.d.ts.map +1 -1
  16. package/dist/agent/chat/exports.js +11 -13
  17. package/dist/agent/chat/index.d.ts +6 -10
  18. package/dist/agent/chat/index.d.ts.map +1 -1
  19. package/dist/agent/chat/index.js +117 -196
  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 -8
  32. package/dist/agent/chat/state.d.ts.map +1 -1
  33. package/dist/agent/chat/state.js +17 -47
  34. package/dist/agent/chat/utils.d.ts +4 -5
  35. package/dist/agent/chat/utils.d.ts.map +1 -1
  36. package/dist/agent/chat/utils.js +15 -9
  37. package/dist/agent/cli.d.ts +11 -0
  38. package/dist/agent/cli.d.ts.map +1 -0
  39. package/dist/agent/cli.js +213 -0
  40. package/dist/agent/code-review/executor/index.d.ts +5 -0
  41. package/dist/agent/code-review/executor/index.d.ts.map +1 -0
  42. package/dist/agent/code-review/executor/index.js +13 -0
  43. package/dist/agent/code-review/index.d.ts +12 -0
  44. package/dist/agent/code-review/index.d.ts.map +1 -0
  45. package/dist/agent/code-review/index.js +159 -0
  46. package/dist/agent/code-review/parser.d.ts +5 -0
  47. package/dist/agent/code-review/parser.d.ts.map +1 -0
  48. package/dist/agent/code-review/parser.js +70 -0
  49. package/dist/agent/code-review/types.d.ts +36 -0
  50. package/dist/agent/code-review/types.d.ts.map +1 -0
  51. package/dist/agent/code-review/types.js +13 -0
  52. package/dist/agent/cua/index.d.ts.map +1 -1
  53. package/dist/agent/cua/index.js +18 -2
  54. package/dist/agent/cua/model.d.ts.map +1 -1
  55. package/dist/agent/cua/model.js +4 -1
  56. package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts.map +1 -1
  57. package/dist/agent/index.d.ts +10 -0
  58. package/dist/agent/index.d.ts.map +1 -0
  59. package/dist/agent/index.js +19 -0
  60. package/dist/agent/triage/index.d.ts +7 -0
  61. package/dist/agent/triage/index.d.ts.map +1 -0
  62. package/dist/agent/triage/index.js +103 -0
  63. package/dist/agent/video-analysis/executor/index.d.ts +5 -0
  64. package/dist/agent/video-analysis/executor/index.d.ts.map +1 -0
  65. package/dist/agent/video-analysis/executor/index.js +10 -0
  66. package/dist/agent/video-analysis/index.d.ts +7 -0
  67. package/dist/agent/video-analysis/index.d.ts.map +1 -0
  68. package/dist/agent/video-analysis/index.js +60 -0
  69. package/dist/artifacts/index.d.ts +1 -1
  70. package/dist/artifacts/index.d.ts.map +1 -1
  71. package/dist/artifacts/index.js +3 -1
  72. package/dist/artifacts/utils.d.ts.map +1 -1
  73. package/dist/bin/index.js +68 -23
  74. package/dist/constants/index.d.ts +14 -0
  75. package/dist/constants/index.d.ts.map +1 -1
  76. package/dist/constants/index.js +33 -1
  77. package/dist/file/server.d.ts +1 -3
  78. package/dist/file/server.d.ts.map +1 -1
  79. package/dist/file/server.js +0 -13
  80. package/dist/file-info/adapters/file-system/index.d.ts.map +1 -1
  81. package/dist/file-info/adapters/file-system/reader.d.ts.map +1 -1
  82. package/dist/file-info/adapters/file-system/reader.js +8 -1
  83. package/dist/file-info/adapters/github/index.d.ts.map +1 -1
  84. package/dist/file-info/adapters/github/index.js +1 -2
  85. package/dist/file-info/adapters/github/reader.d.ts +4 -9
  86. package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
  87. package/dist/file-info/adapters/github/reader.js +166 -134
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/tools/analyse-video/index.d.ts +5 -0
  90. package/dist/tools/analyse-video/index.d.ts.map +1 -0
  91. package/dist/tools/analyse-video/index.js +50 -0
  92. package/dist/tools/create-pull-request/index.d.ts.map +1 -0
  93. package/dist/tools/{definitions/commit-and-create-pr.js → create-pull-request/index.js} +28 -1
  94. package/dist/tools/create-pull-request/utils.d.ts +21 -0
  95. package/dist/tools/create-pull-request/utils.d.ts.map +1 -0
  96. package/dist/tools/create-pull-request/utils.js +83 -0
  97. package/dist/tools/definitions/{fetch-video-analysis.d.ts → analyse-video.d.ts} +17 -12
  98. package/dist/tools/definitions/analyse-video.d.ts.map +1 -0
  99. package/dist/tools/definitions/analyse-video.js +60 -0
  100. package/dist/tools/definitions/review-pull-request.d.ts +3 -0
  101. package/dist/tools/definitions/review-pull-request.d.ts.map +1 -0
  102. package/dist/tools/definitions/review-pull-request.js +16 -0
  103. package/dist/tools/definitions/str_replace_editor.d.ts +1 -0
  104. package/dist/tools/definitions/str_replace_editor.d.ts.map +1 -1
  105. package/dist/tools/definitions/str_replace_editor.js +4 -1
  106. package/dist/tools/definitions/test-gen-browser.d.ts +0 -3
  107. package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -1
  108. package/dist/tools/definitions/test-gen-browser.js +33 -8
  109. package/dist/tools/delete-file/index.d.ts.map +1 -1
  110. package/dist/tools/delete-file/index.js +1 -19
  111. package/dist/tools/executor/base.d.ts +32 -0
  112. package/dist/tools/executor/base.d.ts.map +1 -0
  113. package/dist/tools/executor/base.js +114 -0
  114. package/dist/tools/executor/index.d.ts +3 -22
  115. package/dist/tools/executor/index.d.ts.map +1 -1
  116. package/dist/tools/executor/index.js +13 -92
  117. package/dist/tools/executor/utils/checkpoint.d.ts +1 -1
  118. package/dist/tools/executor/utils/checkpoint.d.ts.map +1 -1
  119. package/dist/tools/executor/utils/checkpoint.js +6 -2
  120. package/dist/tools/executor/utils/git.d.ts +2 -2
  121. package/dist/tools/executor/utils/git.d.ts.map +1 -1
  122. package/dist/tools/executor/utils/git.js +7 -3
  123. package/dist/tools/executor/utils/index.d.ts.map +1 -1
  124. package/dist/tools/executor/utils/index.js +1 -1
  125. package/dist/tools/fetch-session-diff/index.d.ts +3 -0
  126. package/dist/tools/fetch-session-diff/index.d.ts.map +1 -0
  127. package/dist/tools/fetch-session-diff/index.js +46 -0
  128. package/dist/tools/file-operations/create.d.ts.map +1 -1
  129. package/dist/tools/file-operations/create.js +1 -4
  130. package/dist/tools/file-operations/index.d.ts +2 -1
  131. package/dist/tools/file-operations/index.d.ts.map +1 -1
  132. package/dist/tools/file-operations/index.js +4 -1
  133. package/dist/tools/file-operations/insert.d.ts +1 -2
  134. package/dist/tools/file-operations/insert.d.ts.map +1 -1
  135. package/dist/tools/file-operations/insert.js +1 -4
  136. package/dist/tools/file-operations/replace.d.ts.map +1 -1
  137. package/dist/tools/file-operations/replace.js +1 -4
  138. package/dist/tools/grep/index.d.ts.map +1 -1
  139. package/dist/tools/grep/index.js +18 -11
  140. package/dist/tools/index.d.ts +28 -2
  141. package/dist/tools/index.d.ts.map +1 -1
  142. package/dist/tools/index.js +52 -33
  143. package/dist/tools/merge-conflicts/index.d.ts.map +1 -1
  144. package/dist/tools/merge-conflicts/index.js +1 -1
  145. package/dist/tools/rename-file/index.js +1 -1
  146. package/dist/tools/review-pull-request/index.d.ts +3 -0
  147. package/dist/tools/review-pull-request/index.d.ts.map +1 -0
  148. package/dist/tools/review-pull-request/index.js +89 -0
  149. package/dist/tools/run-test.d.ts.map +1 -1
  150. package/dist/tools/run-test.js +25 -3
  151. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  152. package/dist/tools/test-gen-browser.js +51 -47
  153. package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
  154. package/dist/tools/test-run-fetcher/index.js +4 -14
  155. package/dist/tools/utils/urls.d.ts +5 -0
  156. package/dist/tools/utils/urls.d.ts.map +1 -0
  157. package/dist/tools/utils/urls.js +19 -0
  158. package/dist/tools/view-failed-test-run-report/index.d.ts.map +1 -1
  159. package/dist/tools/view-failed-test-run-report/index.js +3 -15
  160. package/dist/utils/artifact-paths.d.ts +20 -0
  161. package/dist/utils/artifact-paths.d.ts.map +1 -0
  162. package/dist/utils/artifact-paths.js +16 -0
  163. package/dist/utils/dedup-image-fs.d.ts +2 -16
  164. package/dist/utils/dedup-image-fs.d.ts.map +1 -1
  165. package/dist/utils/dedup-image-fs.js +12 -16
  166. package/dist/utils/dedup-image.d.ts +1 -14
  167. package/dist/utils/dedup-image.d.ts.map +1 -1
  168. package/dist/utils/dedup-image.js +7 -62
  169. package/dist/{tools/fetch-video-analysis/local-ffmpeg-client.d.ts → utils/ffmpeg/index.d.ts} +9 -6
  170. package/dist/utils/ffmpeg/index.d.ts.map +1 -0
  171. package/dist/utils/ffmpeg/index.js +415 -0
  172. package/dist/utils/file.d.ts +1 -0
  173. package/dist/utils/file.d.ts.map +1 -1
  174. package/dist/utils/file.js +45 -1
  175. package/dist/utils/find-threshold.d.ts +8 -0
  176. package/dist/utils/find-threshold.d.ts.map +1 -0
  177. package/dist/utils/find-threshold.js +55 -0
  178. package/dist/utils/hash.d.ts +2 -0
  179. package/dist/utils/hash.d.ts.map +1 -0
  180. package/dist/utils/hash.js +24 -0
  181. package/dist/utils/model.d.ts +1 -1
  182. package/dist/utils/model.d.ts.map +1 -1
  183. package/dist/utils/model.js +7 -5
  184. package/dist/utils/repo-tree.d.ts +0 -1
  185. package/dist/utils/repo-tree.d.ts.map +1 -1
  186. package/dist/utils/repo-tree.js +2 -14
  187. package/dist/utils/slug.js +1 -1
  188. package/dist/video-core/agent-orchestrator.d.ts +14 -0
  189. package/dist/video-core/agent-orchestrator.d.ts.map +1 -0
  190. package/dist/video-core/agent-orchestrator.js +78 -0
  191. package/dist/video-core/analysis-server.d.ts +24 -0
  192. package/dist/video-core/analysis-server.d.ts.map +1 -0
  193. package/dist/video-core/analysis-server.js +398 -0
  194. package/dist/video-core/analysis-viewer.html +1374 -0
  195. package/dist/video-core/index.d.ts +44 -0
  196. package/dist/video-core/index.d.ts.map +1 -0
  197. package/dist/video-core/index.js +204 -0
  198. package/dist/video-core/model-limits.d.ts +4 -0
  199. package/dist/video-core/model-limits.d.ts.map +1 -0
  200. package/dist/video-core/model-limits.js +67 -0
  201. package/dist/video-core/storage-manager.d.ts +5 -0
  202. package/dist/video-core/storage-manager.d.ts.map +1 -0
  203. package/dist/video-core/storage-manager.js +55 -0
  204. package/dist/video-core/types.d.ts +13 -0
  205. package/dist/video-core/types.d.ts.map +1 -0
  206. package/dist/video-core/types.js +2 -0
  207. package/dist/video-core/utils.d.ts +25 -0
  208. package/dist/video-core/utils.d.ts.map +1 -0
  209. package/dist/video-core/utils.js +211 -0
  210. package/dist/video-core/xml-parser.d.ts +3 -0
  211. package/dist/video-core/xml-parser.d.ts.map +1 -0
  212. package/dist/video-core/xml-parser.js +27 -0
  213. package/package.json +5 -6
  214. package/tsconfig.tsbuildinfo +1 -1
  215. package/dist/agent/chat/prompt/index.d.ts +0 -5
  216. package/dist/agent/chat/prompt/index.d.ts.map +0 -1
  217. package/dist/agent/chat/prompt/index.js +0 -189
  218. package/dist/agent/chat/utils/tool-calls.d.ts +0 -21
  219. package/dist/agent/chat/utils/tool-calls.d.ts.map +0 -1
  220. package/dist/agent/chat/utils/tool-calls.js +0 -64
  221. package/dist/agent/code-review/prompt.d.ts +0 -2
  222. package/dist/agent/code-review/prompt.d.ts.map +0 -1
  223. package/dist/agent/code-review/prompt.js +0 -19
  224. package/dist/agent/diagnosis-agent/index.d.ts +0 -11
  225. package/dist/agent/diagnosis-agent/index.d.ts.map +0 -1
  226. package/dist/agent/diagnosis-agent/index.js +0 -88
  227. package/dist/agent/diagnosis-agent/strict-mode-violation.d.ts +0 -10
  228. package/dist/agent/diagnosis-agent/strict-mode-violation.d.ts.map +0 -1
  229. package/dist/agent/diagnosis-agent/strict-mode-violation.js +0 -30
  230. package/dist/tools/commit-and-create-pr/index.d.ts.map +0 -1
  231. package/dist/tools/commit-and-create-pr/index.js +0 -83
  232. package/dist/tools/definitions/commit-and-create-pr.d.ts +0 -3
  233. package/dist/tools/definitions/commit-and-create-pr.d.ts.map +0 -1
  234. package/dist/tools/definitions/fetch-video-analysis.d.ts.map +0 -1
  235. package/dist/tools/definitions/fetch-video-analysis.js +0 -61
  236. package/dist/tools/fetch-video-analysis/index.d.ts +0 -5
  237. package/dist/tools/fetch-video-analysis/index.d.ts.map +0 -1
  238. package/dist/tools/fetch-video-analysis/index.js +0 -138
  239. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.d.ts.map +0 -1
  240. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.js +0 -247
  241. package/dist/tools/fetch-video-analysis/open-ai.d.ts +0 -6
  242. package/dist/tools/fetch-video-analysis/open-ai.d.ts.map +0 -1
  243. package/dist/tools/fetch-video-analysis/open-ai.js +0 -37
  244. package/dist/tools/fetch-video-analysis/utils.d.ts +0 -13
  245. package/dist/tools/fetch-video-analysis/utils.d.ts.map +0 -1
  246. package/dist/tools/fetch-video-analysis/utils.js +0 -98
  247. package/dist/tools/fetch-video-analysis/video-analysis.d.ts +0 -7
  248. package/dist/tools/fetch-video-analysis/video-analysis.d.ts.map +0 -1
  249. package/dist/tools/fetch-video-analysis/video-analysis.js +0 -54
  250. package/dist/tools/file-operations/shared/git-helper.d.ts +0 -4
  251. package/dist/tools/file-operations/shared/git-helper.d.ts.map +0 -1
  252. package/dist/tools/file-operations/shared/git-helper.js +0 -29
  253. package/eslint.config.mjs +0 -43
  254. /package/dist/tools/{commit-and-create-pr → create-pull-request}/index.d.ts +0 -0
@@ -230,15 +230,17 @@ class UploadArtifactsQueue {
230
230
  this.baseRepoPath = baseRepoPath;
231
231
  this.toolCallId = toolCallId;
232
232
  }
233
- async addTask(artifacts) {
233
+ addTask(artifacts) {
234
234
  this.uploadPromise = collectArtifacts(artifacts, this.baseRepoPath, this.toolCallId)
235
235
  .then((results) => {
236
236
  this.artifactResults.push(...results);
237
+ return results;
237
238
  })
238
239
  .catch((error) => {
239
240
  console.error("Error processing artifact upload task:", error);
240
241
  throw error;
241
242
  });
243
+ return this.uploadPromise;
242
244
  }
243
245
  async waitForCompletion() {
244
246
  if (this.uploadPromise) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/artifacts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,IAAI,oBAAoB,EAGnC,MAAM,2BAA2B,CAAC;AAInC;;;;GAIG;AACH,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,oBAAoB,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,KAAK,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAsE7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmCxE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/artifacts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,UAAU,IAAI,oBAAoB,EACnC,MAAM,2BAA2B,CAAC;AAInC;;;;GAIG;AACH,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,oBAAoB,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,KAAK,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAsE7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmCxE"}
package/dist/bin/index.js CHANGED
@@ -7,30 +7,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const commander_1 = require("commander");
8
8
  const dotenv_1 = __importDefault(require("dotenv"));
9
9
  const fs_1 = __importDefault(require("fs"));
10
- const chat_1 = require("../agent/chat");
11
10
  const models_1 = require("../agent/chat/models");
11
+ const cli_1 = require("../agent/cli");
12
12
  const auth_1 = require("../auth");
13
13
  const client_1 = require("../dashboard/client");
14
14
  const recorder_1 = require("../recorder");
15
15
  const validation_1 = require("../recorder/validation");
16
16
  const test_build_1 = require("../test-build");
17
+ const video_core_1 = require("../video-core");
18
+ const analysis_server_1 = require("../video-core/analysis-server");
17
19
  const environments_1 = require("./environments");
18
20
  const setup_1 = require("./setup");
19
21
  const utils_1 = require("./utils");
20
22
  dotenv_1.default.config({
21
23
  path: [".env.local", ".env"],
22
24
  });
23
- async function runChatAgent({ modelInput, useDiskForChatState, prompt: initialPromptContent, useTriage, resetChat, useFSCache, }) {
24
- const resolvedModel = (0, models_1.resolveChatModelBasedOnInput)(modelInput);
25
- return await (0, chat_1.runChatAgentForCLI)({
26
- selectedModel: resolvedModel,
27
- useDiskForChatState: useDiskForChatState || false,
28
- initialPromptContent,
29
- useTriage: useTriage || false,
30
- resetChat: resetChat || false,
31
- useFSCache: useFSCache || false,
32
- });
33
- }
34
25
  async function main() {
35
26
  const rawMode = process.argv.includes("--raw");
36
27
  if (!rawMode) {
@@ -178,17 +169,18 @@ async function main() {
178
169
  .option("--model <model>", "LLM to use (gpt-5, claude-4 or gemini-2.5)")
179
170
  .option("--use-disk", "Save and load chat state from disk")
180
171
  .option("--prompt <string>", "String to pass as user prompt")
181
- .option("--use-triage", "run the model in triage mode, different set of tools")
172
+ .option("--agent-mode <mode>", "Mode of the agent: 'chat' or 'triage' or 'video' or 'code-review' (Defaults to 'chat')")
182
173
  .option("--use-cache", "Use filesystem cache for LLM responses (Claude-only, and will disable streaming)")
183
- .option("--reset-chat", "Clear any saved chat state (last-chat.json) before starting")
174
+ .option("--reset-state", "Clear any saved chat state (last-chat.json) before starting")
184
175
  .action(async (options) => {
185
- await runChatAgent({
186
- modelInput: options.model,
187
- useDiskForChatState: options.useDisk,
188
- prompt: options.prompt,
189
- useTriage: options.useTriage,
190
- resetChat: options.resetChat,
191
- useFSCache: options.useCache,
176
+ const resolvedModel = (0, models_1.resolveChatModelBasedOnInput)(options.model);
177
+ await (0, cli_1.runChatAgentForCLI)({
178
+ selectedModel: resolvedModel,
179
+ useDiskForChatState: options.useDisk || false,
180
+ initialPromptContent: options.prompt,
181
+ agentMode: options.agentMode || "chat",
182
+ resetChat: options.resetState || false,
183
+ useFSCache: options.useCache || false,
192
184
  });
193
185
  process.exit(0);
194
186
  });
@@ -198,8 +190,8 @@ async function main() {
198
190
  .requiredOption("--id <id>", "Chat session ID")
199
191
  .action(async (opts) => {
200
192
  try {
201
- const data = await client_1.apiClient.request(`/api/chat-sessions/${opts.id}`, { method: "GET" });
202
- const chatState = data.data.chat_session.chat_state;
193
+ const data = await client_1.apiClient.request(`/api/chat-sessions/${opts.id}/state`, { method: "GET" });
194
+ const chatState = data.data.chat_state;
203
195
  const filename = `chat-session-${opts.id}.json`;
204
196
  fs_1.default.writeFileSync(filename, JSON.stringify(chatState, null, 2));
205
197
  console.log(`✅ Chat state saved to ${filename}`);
@@ -235,6 +227,59 @@ async function main() {
235
227
  }
236
228
  process.exit(0);
237
229
  });
230
+ program
231
+ .command("analyze-video")
232
+ .description("Analyze video and start viewer server with results")
233
+ .requiredOption("--url <url>", "Video URL")
234
+ .option("--params <params>", "Video analysis parameters. Format: key=value pairs separated by comma ','. Supported keys: model, fps, threshold, startTime, duration. Example: --params 'fps=30,threshold=0.01,startTime=00:00:10,duration=00:01:00'")
235
+ .option("--no-server", "Skip starting the analysis viewer server")
236
+ .action(async (opts) => {
237
+ const { url, params, server } = opts;
238
+ if (!url) {
239
+ console.error("❌ Video URL is required");
240
+ process.exit(1);
241
+ }
242
+ await (0, video_core_1.runVideoAnalysisForCli)({
243
+ url,
244
+ params: params || "",
245
+ startServer: server,
246
+ });
247
+ });
248
+ program
249
+ .command("serve-analysis")
250
+ .option("--root-path <path>", "Root path to discover analysis directories", "video-analysis")
251
+ .description("Start viewer server to browse analysis results from multiple directories")
252
+ .action(async (opts) => {
253
+ try {
254
+ let handle;
255
+ handle = await (0, analysis_server_1.startAnalysisServer)(opts.rootPath);
256
+ console.log(`🌐 Analysis viewer available at: ${handle.url}`);
257
+ console.log(`📁 Serving analysis results from: ${opts.rootPath}`);
258
+ console.log("📋 Press Ctrl+C to stop the server");
259
+ let isShuttingDown = false;
260
+ const gracefulShutdown = async (signal) => {
261
+ if (isShuttingDown)
262
+ return;
263
+ isShuttingDown = true;
264
+ console.log(`\n🛑 Received ${signal}, shutting down server...`);
265
+ try {
266
+ await handle.close();
267
+ console.log("✅ Server closed successfully");
268
+ process.exit(0);
269
+ }
270
+ catch (error) {
271
+ console.error("❌ Error closing server:", error);
272
+ process.exit(1);
273
+ }
274
+ };
275
+ process.once("SIGINT", () => gracefulShutdown("SIGINT"));
276
+ process.once("SIGTERM", () => gracefulShutdown("SIGTERM"));
277
+ }
278
+ catch (error) {
279
+ console.error("❌ Error loading or serving data:", error instanceof Error ? error.message : error);
280
+ process.exit(1);
281
+ }
282
+ });
238
283
  program.parse(process.argv);
239
284
  }
240
285
  main().catch((error) => {
@@ -4,4 +4,18 @@ export declare const DEFAULT_MODEL_PROVIDER: LLMProvider;
4
4
  export declare const DEFAULT_MODEL: LLMModel;
5
5
  export declare const DEFAULT_MODEL_PARAMETERS: ModelParameters;
6
6
  export declare const DEFAULT_O1_MODEL_PARAMETERS: ModelParameters;
7
+ export declare const VIDEO_ANALYSIS: {
8
+ readonly FRAME_INDEX_PADDING: 6;
9
+ readonly DEFAULT_MODEL: "claude-sonnet-4-20250514";
10
+ readonly DEFAULT_FPS: 25;
11
+ readonly DEFAULT_THRESHOLD: 0.01;
12
+ readonly DEFAULT_FALLBACK_FPS: 30;
13
+ readonly CLAUDE_MAX_IMAGES_PER_BATCH: 100;
14
+ readonly CLAUDE_MAX_REQUEST_SIZE_MB: 32;
15
+ readonly OPENAI_MAX_IMAGES_PER_BATCH: 500;
16
+ readonly OPENAI_MAX_REQUEST_SIZE_MB: 50;
17
+ readonly DEFAULT_FRAME_SIZE_MB: 0.2;
18
+ readonly BATCH_SIZE_REDUCTION_FACTOR: 0.8;
19
+ };
20
+ export declare const DEFAULT_EXCLUDE: (string | RegExp)[];
7
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,WAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,QAAmB,CAAC;AAEhD,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,eAGzC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,WAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,QAAmB,CAAC;AAEhD,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,eAGzC,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;;;;;;;CAqBjB,CAAC;AAEX,eAAO,MAAM,eAAe,qBAY3B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_O1_MODEL_PARAMETERS = exports.DEFAULT_MODEL_PARAMETERS = exports.DEFAULT_MODEL = exports.DEFAULT_MODEL_PROVIDER = exports.MODEL_API_KEYS = void 0;
3
+ exports.DEFAULT_EXCLUDE = exports.VIDEO_ANALYSIS = exports.DEFAULT_O1_MODEL_PARAMETERS = exports.DEFAULT_MODEL_PARAMETERS = exports.DEFAULT_MODEL = exports.DEFAULT_MODEL_PROVIDER = exports.MODEL_API_KEYS = void 0;
4
4
  exports.MODEL_API_KEYS = {
5
5
  google: process.env.GOOGLE_API_KEY || "",
6
6
  anthropic: process.env.ANTHROPIC_API_KEY || "",
@@ -16,3 +16,35 @@ exports.DEFAULT_O1_MODEL_PARAMETERS = {
16
16
  temperature: 1,
17
17
  max_completion_tokens: 35_000,
18
18
  };
19
+ // Video Analysis Constants
20
+ exports.VIDEO_ANALYSIS = {
21
+ // Frame processing
22
+ FRAME_INDEX_PADDING: 6,
23
+ // Default analysis parameters
24
+ DEFAULT_MODEL: "claude-sonnet-4-20250514",
25
+ DEFAULT_FPS: 25,
26
+ DEFAULT_THRESHOLD: 0.01,
27
+ DEFAULT_FALLBACK_FPS: 30,
28
+ // Model limits - Claude
29
+ CLAUDE_MAX_IMAGES_PER_BATCH: 100,
30
+ CLAUDE_MAX_REQUEST_SIZE_MB: 32,
31
+ // Model limits - OpenAI
32
+ OPENAI_MAX_IMAGES_PER_BATCH: 500,
33
+ OPENAI_MAX_REQUEST_SIZE_MB: 50,
34
+ // Processing defaults
35
+ DEFAULT_FRAME_SIZE_MB: 0.2,
36
+ BATCH_SIZE_REDUCTION_FACTOR: 0.8,
37
+ };
38
+ exports.DEFAULT_EXCLUDE = [
39
+ "node_modules",
40
+ "dist",
41
+ "build",
42
+ /\.git/,
43
+ ".DS_Store",
44
+ "playwright-report",
45
+ "test-results",
46
+ ".empiricalrun",
47
+ "auth",
48
+ "package-lock.json",
49
+ /^ffmpeg-test/,
50
+ ];
@@ -1,4 +1,4 @@
1
- import { ArtifactInput, Usage } from "@empiricalrun/shared-types";
1
+ import { Usage } from "@empiricalrun/shared-types";
2
2
  import { BrowserAgentResult } from "../agent/cua";
3
3
  export type BrowserAgentIPCPayload = {
4
4
  task: string;
@@ -14,7 +14,6 @@ export declare class FileServiceServer {
14
14
  private server;
15
15
  private updateFile;
16
16
  private onComplete?;
17
- private artifactsInputs;
18
17
  private result;
19
18
  private usage;
20
19
  private codegenSources;
@@ -28,7 +27,6 @@ export declare class FileServiceServer {
28
27
  result: BrowserAgentResult | undefined;
29
28
  usage: Usage | undefined;
30
29
  };
31
- getArtifactInputsFromServer(): ArtifactInput[];
32
30
  getCodegenSources(): string | undefined;
33
31
  setFilePath(filePath: string): void;
34
32
  startFileService(): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/file/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AASlD,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAEhC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,EACV,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,GACX,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;KACzB;IAOD,iBAAiB;;;;IAIjB,2BAA2B;IAI3B,iBAAiB;IAIjB,WAAW,CAAC,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA8HnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/file/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AASlD,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAEhC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,EACV,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,GACX,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;KACzB;IAOD,iBAAiB;;;;IAIjB,iBAAiB;IAIjB,WAAW,CAAC,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAqHnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
@@ -16,7 +16,6 @@ class FileServiceServer {
16
16
  server;
17
17
  updateFile = false;
18
18
  onComplete;
19
- artifactsInputs = [];
20
19
  result;
21
20
  usage;
22
21
  codegenSources;
@@ -29,9 +28,6 @@ class FileServiceServer {
29
28
  getResultAndUsage() {
30
29
  return { result: this.result, usage: this.usage };
31
30
  }
32
- getArtifactInputsFromServer() {
33
- return this.artifactsInputs;
34
- }
35
31
  getCodegenSources() {
36
32
  return this.codegenSources;
37
33
  }
@@ -110,15 +106,6 @@ class FileServiceServer {
110
106
  const { generatedCode, importPaths, result, usage } = req.body;
111
107
  this.result = result;
112
108
  this.usage = usage;
113
- this.artifactsInputs = this.result
114
- .filter((item) => item.type === "screenshot")
115
- .map((item) => item.screenshot)
116
- .map((artifact) => ({
117
- ...artifact,
118
- data: Buffer.isBuffer(artifact.data)
119
- ? artifact.data
120
- : Buffer.from(artifact.data),
121
- }));
122
109
  if (!this.updateFile) {
123
110
  // Not updating the file in this scenario
124
111
  if (this.onComplete)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/file-system/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAsB,uBAAuB,CAAC,EAC5C,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/file-system/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAsB,uBAAuB,CAAC,EAC5C,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/file-system/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKtE,qBAAa,oBAAoB;IACzB,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAalC;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgC5E"}
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/file-system/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAMtE,qBAAa,oBAAoB;IACzB,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAalC;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwC5E"}
@@ -8,6 +8,7 @@ exports.getFileInfoFromFS = getFileInfoFromFS;
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const promises_1 = __importDefault(require("fs/promises"));
10
10
  const path_1 = __importDefault(require("path"));
11
+ const constants_1 = require("../../../constants");
11
12
  class FilesystemFileReader {
12
13
  async readFile(filePath, absoluteFilePath) {
13
14
  if (!fs_1.default.existsSync(absoluteFilePath)) {
@@ -23,7 +24,6 @@ class FilesystemFileReader {
23
24
  }
24
25
  exports.FilesystemFileReader = FilesystemFileReader;
25
26
  async function getFileInfoFromFS(directory) {
26
- // TODO: This traverses all node_modules - can be excluded with DEFAULT_EXCLUDE
27
27
  let currentDirName = path_1.default.basename(directory);
28
28
  let currentDir = {
29
29
  type: "directory",
@@ -33,6 +33,13 @@ async function getFileInfoFromFS(directory) {
33
33
  };
34
34
  const files = await promises_1.default.readdir(directory);
35
35
  for (const file of files) {
36
+ const shouldExclude = constants_1.DEFAULT_EXCLUDE.some((pattern) => typeof pattern === "string"
37
+ ? file === pattern
38
+ : pattern instanceof RegExp
39
+ ? pattern.test(file)
40
+ : false);
41
+ if (shouldExclude)
42
+ continue;
36
43
  const filePath = path_1.default.join(directory, file);
37
44
  // TODO: Symlinks fail here
38
45
  const stats = await promises_1.default.stat(filePath);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD,wBAAsB,mBAAmB,CAAC,EACxC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,wBAAsB,mBAAmB,CAAC,EACxC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BtB"}
@@ -6,10 +6,9 @@ const helpers_1 = require("../../../tools/file-operations/shared/helpers");
6
6
  const reader_1 = require("./reader");
7
7
  var reader_2 = require("./reader");
8
8
  Object.defineProperty(exports, "getFileInfoFromGitHub", { enumerable: true, get: function () { return reader_2.getFileInfoFromGitHub; } });
9
- const REPO_OWNER = "empirical-run";
10
9
  async function viewFileUsingGitHub({ input, repoName, apiClient, branchName, baseBranch, }) {
11
10
  const filePath = input.path;
12
- const githubReader = new reader_1.GitHubFileReader(repoName, apiClient, REPO_OWNER);
11
+ const githubReader = new reader_1.GitHubFileReader(repoName, apiClient);
13
12
  const fileData = await githubReader.readFile(filePath, branchName, baseBranch);
14
13
  if (!fileData) {
15
14
  return {
@@ -2,15 +2,10 @@ import { FileInfo, FileReadResult, IDashboardAPIClient } from "@empiricalrun/sha
2
2
  export declare class GitHubFileReader {
3
3
  private repoName;
4
4
  private apiClient;
5
- private repoOwner;
6
- constructor(repoName: string, apiClient: IDashboardAPIClient, repoOwner: string);
7
- private fetchFileFromGitHub;
8
- private fetchTreeFromGitHub;
9
- private resolveBranchName;
5
+ constructor(repoName: string, apiClient: IDashboardAPIClient);
6
+ resolveBranchName(branchName: string | undefined, baseBranch: string): Promise<string>;
10
7
  readFile(filePath: string, branchName: string, baseBranch: string): Promise<FileReadResult | null>;
11
- private getFileContent;
12
- private getContentsForDirectory;
13
- getFileInfo(branchName: string, baseBranch: string): Promise<FileInfo>;
8
+ private readDirectory;
14
9
  }
15
- export declare function getFileInfoFromGitHub(repoName: string, apiClient: IDashboardAPIClient, branchName: string, baseBranch: string): Promise<FileInfo>;
10
+ export declare function getFileInfoFromGitHub(repoName: string, apiClient: IDashboardAPIClient, branchName: string, baseBranchName: string): Promise<FileInfo>;
16
11
  //# sourceMappingURL=reader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/github/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AA4CpC,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;gBAFT,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,MAAM;YAGb,mBAAmB;YAUnB,mBAAmB;YASnB,iBAAiB;IAqBzB,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAmCnB,cAAc;YAkBd,uBAAuB;IAwB/B,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAoF7E;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAGnB"}
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../../src/file-info/adapters/github/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAcpC,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;gBADT,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB;IAGlC,iBAAiB,CACrB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAoBZ,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YA4CnB,aAAa;CAoD5B;AAyED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,QAAQ,CAAC,CAwFnB"}