@empiricalrun/test-gen 0.79.0 → 0.79.2

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 (47) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/agent/base/index.d.ts +2 -0
  3. package/dist/agent/base/index.d.ts.map +1 -1
  4. package/dist/agent/base/index.js +4 -0
  5. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  6. package/dist/agent/chat/agent-loop.js +0 -1
  7. package/dist/agent/chat/exports.d.ts +1 -1
  8. package/dist/agent/chat/exports.d.ts.map +1 -1
  9. package/dist/agent/code-review/index.d.ts +1 -0
  10. package/dist/agent/code-review/index.d.ts.map +1 -1
  11. package/dist/agent/code-review/index.js +3 -1
  12. package/dist/agent/cua/index.d.ts.map +1 -1
  13. package/dist/agent/cua/index.js +24 -7
  14. package/dist/agent/cua/model.d.ts +11 -3
  15. package/dist/agent/cua/model.d.ts.map +1 -1
  16. package/dist/agent/cua/model.js +10 -9
  17. package/dist/artifacts/index.d.ts +0 -39
  18. package/dist/artifacts/index.d.ts.map +1 -1
  19. package/dist/artifacts/index.js +8 -68
  20. package/dist/telemetry/index.d.ts +18 -0
  21. package/dist/telemetry/index.d.ts.map +1 -0
  22. package/dist/telemetry/index.js +83 -0
  23. package/dist/tools/analyse-video/index.d.ts.map +1 -1
  24. package/dist/tools/analyse-video/index.js +14 -2
  25. package/dist/tools/executor/index.d.ts.map +1 -1
  26. package/dist/tools/executor/index.js +0 -2
  27. package/dist/tools/index.d.ts.map +1 -1
  28. package/dist/tools/index.js +0 -2
  29. package/dist/tools/run-test.js +1 -1
  30. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  31. package/dist/tools/test-gen-browser.js +12 -1
  32. package/dist/tools/test-run-fetcher/types.d.ts +0 -5
  33. package/dist/tools/test-run-fetcher/types.d.ts.map +1 -1
  34. package/dist/video-core/index.d.ts +9 -12
  35. package/dist/video-core/index.d.ts.map +1 -1
  36. package/dist/video-core/index.js +93 -111
  37. package/dist/video-core/utils.d.ts +2 -1
  38. package/dist/video-core/utils.d.ts.map +1 -1
  39. package/dist/video-core/utils.js +15 -0
  40. package/package.json +14 -6
  41. package/tsconfig.tsbuildinfo +1 -1
  42. package/dist/tools/definitions/review-pull-request.d.ts +0 -3
  43. package/dist/tools/definitions/review-pull-request.d.ts.map +0 -1
  44. package/dist/tools/definitions/review-pull-request.js +0 -16
  45. package/dist/tools/review-pull-request/index.d.ts +0 -3
  46. package/dist/tools/review-pull-request/index.d.ts.map +0 -1
  47. package/dist/tools/review-pull-request/index.js +0 -83
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @empiricalrun/test-gen
2
2
 
3
+ ## 0.79.2
4
+
5
+ ### Patch Changes
6
+
7
+ - @empiricalrun/test-run@0.14.1
8
+
9
+ ## 0.79.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 48126ea: feat: cost tracking for overlay dismissals
14
+ - Updated dependencies [48126ea]
15
+ - @empiricalrun/llm@0.25.2
16
+ - videostil@0.3.4
17
+
3
18
  ## 0.79.0
4
19
 
5
20
  ### Minor Changes
@@ -25,6 +25,7 @@ export type AgentParams<T> = AgentParamsWithoutPrompt<T> & ({
25
25
  repoInfoBuilder: () => Promise<FileInfo>;
26
26
  });
27
27
  export type OnToolResultsProcessedCallback = (newChatState: ChatState) => Promise<void>;
28
+ export type OnToolCallCallback = (toolCalls: PendingToolCall[]) => Promise<void>;
28
29
  export type OnLLMResponseCallback<T> = (response: T, selectedModel: SupportedChatModels) => Promise<void>;
29
30
  export declare abstract class BaseAgent<T> {
30
31
  featureFlags: string[];
@@ -37,6 +38,7 @@ export declare abstract class BaseAgent<T> {
37
38
  systemPrompt: string | undefined;
38
39
  repoInfoBuilder: (() => Promise<FileInfo>) | undefined;
39
40
  onToolResultsProcessed?: OnToolResultsProcessedCallback;
41
+ onToolCall?: OnToolCallCallback;
40
42
  onLLMResponse?: OnLLMResponseCallback<T>;
41
43
  constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, systemPrompt, repoInfoBuilder, }: AgentParams<T>);
42
44
  protected abstract getTools(): ToolsForLLM;
@@ -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,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,eAAe,EACf,8BAA8B,EAC9B,UAAU,EACV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAMhE,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,KAAK,wBAAwB,CAAC,CAAC,IAAI;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC,GACtD,CAAC;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GAAG,CAC3C,YAAY,EAAE,SAAS,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CACrC,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,8BAAsB,SAAS,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC;IACvD,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IACxD,aAAa,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAE7B,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,eAAe,GAChB,EAAE,WAAW,CAAC,CAAC,CAAC;IAuBjB,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW;IAC1C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAClC,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;IAElB,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAEjC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,IAAI,SAAS,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAKnC;IAED,eAAe,CACb,KAAK,EAAE,KAAK,CAAC,eAAe,GAAG,8BAA8B,CAAC,GAC7D,gBAAgB,CAAC,CAAC,CAAC;IAKtB,YAAY,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAQ3C,WAAW,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAUhD,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IA6B3B,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;IAiB5D,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;IA2BxC,6BAA6B,IACzB;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,GACD,SAAS;CAGd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/base/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ class BaseAgent {
16
16
  systemPrompt;
17
17
  repoInfoBuilder;
18
18
  onToolResultsProcessed;
19
+ onToolCall;
19
20
  onLLMResponse;
20
21
  constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, systemPrompt, repoInfoBuilder, }) {
21
22
  this.featureFlags = featureFlags || [];
@@ -107,6 +108,9 @@ class BaseAgent {
107
108
  if (!this.toolExecutor) {
108
109
  throw new Error("No toolExecutor configured");
109
110
  }
111
+ if (this.onToolCall) {
112
+ await this.onToolCall(toolCalls);
113
+ }
110
114
  const result = await this.toolExecutor.execute(toolCalls);
111
115
  if (result.status === "completed") {
112
116
  const newChatState = this.processToolResults(toolCalls, result.toolResults, result.checkpoint);
@@ -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,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAK/C,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,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,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,CA2CpC"}
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,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAK/C,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,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,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,CA0CpC"}
@@ -16,7 +16,6 @@ async function chatAgentLoop({ chatModel, reporter, streamingMessageReporter, tr
16
16
  await onPendingToolCall(toolCalls);
17
17
  break;
18
18
  }
19
- (0, utils_1.log)(`${(0, utils_1.getModelName)(chatModel.selectedModel)} is working...`);
20
19
  const response = await chatModel.getLLMResponse({
21
20
  systemPrompt,
22
21
  tools,
@@ -2,7 +2,7 @@ export type { IChatModel } from "@empiricalrun/llm/chat";
2
2
  export { createChatModel } from "@empiricalrun/llm/chat";
3
3
  export { SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat/constants";
4
4
  export { getFileInfoFromGitHub, viewFileUsingGitHub, } from "../../file-info/adapters/github";
5
- export type { AgentParams } from "../base";
5
+ export type { AgentParams, OnToolCallCallback } from "../base";
6
6
  export { BaseAgent } from "../base";
7
7
  export type { CodeReviewResultV0, CodeReviewResultV1, CodeReviewResultV2, CodeReviewVersionedResult, } from "../code-review";
8
8
  export { CodeReviewAgent } from "../code-review";
@@ -1 +1 @@
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,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,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,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,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,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -4,6 +4,7 @@ import { BaseAgent } from "../base";
4
4
  import { type CodeReviewResultV0, type CodeReviewResultV1, type CodeReviewResultV2, CodeReviewSeverity, CodeReviewVerdict } from "./types";
5
5
  export type { CodeReviewResultV1, CodeReviewResultV0, CodeReviewResultV2 };
6
6
  export { CodeReviewVerdict, CodeReviewSeverity };
7
+ export { convertXmlToV2Format } from "./parser";
7
8
  export type CodeReviewVersionedResult = CodeReviewResultV0 | CodeReviewResultV1 | CodeReviewResultV2;
8
9
  export declare class CodeReviewAgent<T> extends BaseAgent<T> {
9
10
  protected getTools(): ToolsForLLM;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,QAAQ,IAAI,WAAW;IAWjC,SAAS,IAAI,yBAAyB,GAAG,SAAS;cAmBlC,iBAAiB,CAC/B,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;CAiInB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,QAAQ,IAAI,WAAW;IAWjC,SAAS,IAAI,yBAAyB,GAAG,SAAS;cAmBlC,iBAAiB,CAC/B,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;CAiInB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CodeReviewAgent = exports.CodeReviewSeverity = exports.CodeReviewVerdict = void 0;
3
+ exports.CodeReviewAgent = exports.convertXmlToV2Format = exports.CodeReviewSeverity = exports.CodeReviewVerdict = void 0;
4
4
  const tools_1 = require("../../tools");
5
5
  const fetch_session_diff_1 = require("../../tools/fetch-session-diff");
6
6
  const base_1 = require("../base");
@@ -9,6 +9,8 @@ const parser_1 = require("./parser");
9
9
  const types_1 = require("./types");
10
10
  Object.defineProperty(exports, "CodeReviewSeverity", { enumerable: true, get: function () { return types_1.CodeReviewSeverity; } });
11
11
  Object.defineProperty(exports, "CodeReviewVerdict", { enumerable: true, get: function () { return types_1.CodeReviewVerdict; } });
12
+ var parser_2 = require("./parser");
13
+ Object.defineProperty(exports, "convertXmlToV2Format", { enumerable: true, get: function () { return parser_2.convertXmlToV2Format; } });
12
14
  class CodeReviewAgent extends base_1.BaseAgent {
13
15
  getTools() {
14
16
  const custom = [
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,KAAK,EACN,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmElC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CACJ,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,EACpD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,8BAAsC,GACvC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAuND"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,KAAK,EACN,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmElC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CACJ,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,EACpD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,8BAAsC,GACvC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAuOD"}
@@ -63,7 +63,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
63
63
  let result = [
64
64
  { type: "screenshot", screenshot: initialArtifact },
65
65
  ];
66
- let tokensUsed = { input: 0, output: 0 };
66
+ let tokensUsed = {
67
+ input_tokens: 0,
68
+ output_tokens: 0,
69
+ input_tokens_details: { cached_tokens: 0 },
70
+ output_tokens_details: { reasoning_tokens: 0 },
71
+ };
67
72
  const viewport = page.viewportSize();
68
73
  let screenWidth = viewport?.width || 1280;
69
74
  let screenHeight = viewport?.height || 720;
@@ -94,8 +99,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
94
99
  screenHeight,
95
100
  openAIClient,
96
101
  });
97
- tokensUsed.input += response.usage?.input_tokens || 0;
98
- tokensUsed.output += response.usage?.output_tokens || 0;
102
+ tokensUsed.input_tokens += response.usage?.input_tokens || 0;
103
+ tokensUsed.output_tokens += response.usage?.output_tokens || 0;
104
+ tokensUsed.input_tokens_details.cached_tokens +=
105
+ response.usage?.input_tokens_details?.cached_tokens || 0;
106
+ tokensUsed.output_tokens_details.reasoning_tokens +=
107
+ response.usage?.output_tokens_details?.reasoning_tokens || 0;
99
108
  let isTaskDone = false;
100
109
  let generatedCode = "";
101
110
  let iterationIndex = 0;
@@ -213,8 +222,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
213
222
  screenHeight,
214
223
  openAIClient,
215
224
  });
216
- tokensUsed.input += response.usage?.input_tokens || 0;
217
- tokensUsed.output += response.usage?.output_tokens || 0;
225
+ tokensUsed.input_tokens += response.usage?.input_tokens || 0;
226
+ tokensUsed.output_tokens += response.usage?.output_tokens || 0;
227
+ tokensUsed.input_tokens_details.cached_tokens +=
228
+ response.usage?.input_tokens_details?.cached_tokens || 0;
229
+ tokensUsed.output_tokens_details.reasoning_tokens +=
230
+ response.usage?.output_tokens_details?.reasoning_tokens || 0;
218
231
  }
219
232
  if (!isTaskDone) {
220
233
  const logMessage = `Max iteration limit hit: Task not done after ${MAX_ITERATIONS} iterations`;
@@ -225,13 +238,17 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
225
238
  });
226
239
  }
227
240
  trace?.update({ output: { result } });
241
+ const cost = (0, model_1.tokensToCost)(tokensUsed);
228
242
  return {
229
243
  result,
230
244
  code: generatedCode,
231
245
  importPaths: [],
232
246
  usage: {
233
- tokens: tokensUsed,
234
- cost: (0, model_1.tokensToCost)(tokensUsed),
247
+ tokens: {
248
+ input: tokensUsed.input_tokens,
249
+ output: tokensUsed.output_tokens,
250
+ },
251
+ cost,
235
252
  },
236
253
  };
237
254
  }
@@ -1,5 +1,6 @@
1
1
  import OpenAI from "openai";
2
2
  import { Response, ResponseInputItem } from "openai/resources/responses/responses.mjs";
3
+ export declare const CUA_MODEL = "computer-use-preview-2025-03-11";
3
4
  export declare function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }: {
4
5
  input: ResponseInputItem[];
5
6
  previousResponseId?: string;
@@ -7,11 +8,18 @@ export declare function callComputerUseModel({ input, previousResponseId, screen
7
8
  screenHeight: number;
8
9
  openAIClient: OpenAI;
9
10
  }): Promise<Response>;
10
- export declare function tokensToCost(tokens: {
11
- input: number;
12
- output: number;
11
+ export declare function tokensToCost(usage: {
12
+ input_tokens: number;
13
+ output_tokens: number;
14
+ input_tokens_details: {
15
+ cached_tokens: number;
16
+ };
17
+ output_tokens_details: {
18
+ reasoning_tokens: number;
19
+ };
13
20
  }): {
14
21
  input: number;
15
22
  output: number;
23
+ total: number;
16
24
  };
17
25
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/model.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAEL,QAAQ,EACR,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAiClD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE;IACD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBpB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;;;EAQrE"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/model.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAEL,QAAQ,EACR,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAElD,eAAO,MAAM,SAAS,oCAAoC,CAAC;AAiC3D,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE;IACD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,qBAAqB,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;;;;EAMA"}
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CUA_MODEL = void 0;
3
4
  exports.callComputerUseModel = callComputerUseModel;
4
5
  exports.tokensToCost = tokensToCost;
6
+ const llm_1 = require("@empiricalrun/llm");
7
+ exports.CUA_MODEL = "computer-use-preview-2025-03-11";
5
8
  const INSTRUCTIONS = `You will be asked to execute some actions in a browser context.
6
9
  Don't ask the user for confirmations - just execute the actions.
7
10
 
@@ -32,7 +35,7 @@ const pageGotoTool = {
32
35
  };
33
36
  async function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }) {
34
37
  const response = await openAIClient.responses.create({
35
- model: "computer-use-preview-2025-03-11",
38
+ model: exports.CUA_MODEL,
36
39
  previous_response_id: previousResponseId,
37
40
  parallel_tool_calls: false,
38
41
  tools: [
@@ -54,12 +57,10 @@ async function callComputerUseModel({ input, previousResponseId, screenWidth, sc
54
57
  });
55
58
  return response;
56
59
  }
57
- function tokensToCost(tokens) {
58
- // Costs for "computer-use-preview-2025-03-11"
59
- // https://platform.openai.com/docs/models/computer-use-preview
60
- const inputUsdFor1MTokens = 3.0;
61
- const outputUsdFor1MTokens = 12.0;
62
- const inputCost = (tokens.input / 1_000_000) * inputUsdFor1MTokens;
63
- const outputCost = (tokens.output / 1_000_000) * outputUsdFor1MTokens;
64
- return { input: inputCost, output: outputCost };
60
+ function tokensToCost(usage) {
61
+ const fullUsage = {
62
+ ...usage,
63
+ total_tokens: usage.input_tokens + usage.output_tokens,
64
+ };
65
+ return (0, llm_1.calculateOpenAITokenCosts)({ usage: fullUsage, model: exports.CUA_MODEL });
65
66
  }
@@ -1,44 +1,5 @@
1
1
  import { Artifact, ArtifactInput } from "@empiricalrun/shared-types/chat-agent";
2
2
  export declare function isArtifactCollectionEnabled(): string | undefined;
3
- /**
4
- * Collects artifacts from the repository directory and returns their URLs.
5
- *
6
- * @param inputs - An array of artifact inputs.
7
- * @param repoDir - The absolute path to the repository directory.
8
- * @param toolCallId - Unique identifier for the tool call.
9
- * @returns An array of artifacts with their URLs.
10
- *
11
- * @example
12
- * // Collect artifacts from both file paths and in-memory data
13
- * const artifacts = await collectArtifacts([
14
- * {
15
- * name: "screenshot.png",
16
- * contentType: "image/png",
17
- * path: "/Users/project/screenshots/test.png"
18
- * },
19
- * {
20
- * name: "log.txt",
21
- * contentType: "text/plain",
22
- * data: Buffer.from("test log content")
23
- * }
24
- * ], "/Users/project", "tool-123");
25
- *
26
- * @example
27
- * // Returns empty array when artifact collection is disabled
28
- * const artifacts = await collectArtifacts([], "/Users/project", "tool-123");
29
- * // Returns: []
30
- *
31
- * @example
32
- * // Throws error for invalid file paths
33
- * await collectArtifacts([
34
- * {
35
- * name: "test.png",
36
- * contentType: "image/png",
37
- * path: "relative/path/test.png" // Invalid - not absolute path
38
- * }
39
- * ], "/Users/project", "tool-123");
40
- * // Throws: "Invalid path: relative/path/test.png..."
41
- */
42
3
  export declare function collectArtifacts(inputs: ArtifactInput[], repoDir: string, toolCallId: string): Promise<Artifact[]>;
43
4
  export declare class UploadArtifactsQueue {
44
5
  private toolCallId;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAId,MAAM,uCAAuC,CAAC;AAwB/C,wBAAgB,2BAA2B,uBAM1C;AA6HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsErB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAoC;gBAE7C,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAK7C,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiBlD,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAMtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAId,MAAM,uCAAuC,CAAC;AAwB/C,wBAAgB,2BAA2B,uBAM1C;AAwGD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsErB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAoC;gBAE7C,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAK7C,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiBlD,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAMtD"}
@@ -24,7 +24,10 @@ function isArtifactCollectionEnabled() {
24
24
  process.env.R2_ACCESS_KEY_ID &&
25
25
  process.env.R2_SECRET_ACCESS_KEY);
26
26
  }
27
- const UPLOAD_BUCKET = "test-report";
27
+ const bucket = {
28
+ name: "test-report",
29
+ baseUrl: "https://reports-r2.empirical.run",
30
+ };
28
31
  async function collectInMemoryArtifacts(artifacts, { destinationDir, }) {
29
32
  const dataFiles = artifacts.reduce((acc, a) => {
30
33
  if (!Buffer.isBuffer(a.data)) {
@@ -49,7 +52,7 @@ async function collectInMemoryArtifacts(artifacts, { destinationDir, }) {
49
52
  return (0, r2_uploader_1.uploadInMemoryFiles)({
50
53
  files: dataFiles,
51
54
  destinationDir,
52
- uploadBucket: UPLOAD_BUCKET,
55
+ uploadBucket: bucket.name,
53
56
  accountId: process.env.R2_ACCOUNT_ID,
54
57
  accessKeyId: process.env.R2_ACCESS_KEY_ID,
55
58
  secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
@@ -71,7 +74,7 @@ async function collectFilePathArtifacts(artifacts, { destinationDir, sourceDir,
71
74
  fileList: filePaths,
72
75
  sourceDir,
73
76
  destinationDir,
74
- uploadBucket: UPLOAD_BUCKET,
77
+ uploadBucket: bucket.name,
75
78
  accountId: process.env.R2_ACCOUNT_ID,
76
79
  accessKeyId: process.env.R2_ACCESS_KEY_ID,
77
80
  secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
@@ -81,79 +84,16 @@ async function collectFilePathArtifacts(artifacts, { destinationDir, sourceDir,
81
84
  files: filePaths,
82
85
  sourceDir,
83
86
  destinationDir,
84
- bucket: UPLOAD_BUCKET,
87
+ bucket: bucket.name,
85
88
  });
86
89
  throw error;
87
90
  });
88
91
  console.log("Uploaded path-based files:", urls);
89
92
  return urls;
90
93
  }
91
- /**
92
- * Checks if a given path is a full (absolute) path that starts with the repository directory.
93
- *
94
- * @example
95
- * // Valid full path
96
- * const repoDir = "/Users/aashishwork/flash-tests";
97
- * const path1 = "/Users/aashishwork/flash-tests/src/test.spec.ts";
98
- * isFullPath(path1, repoDir); // Returns true
99
- *
100
- * @example
101
- * // Invalid - relative path
102
- * const path2 = "src/test.spec.ts";
103
- * isFullPath(path2, repoDir); // Returns false
104
- *
105
- * @example
106
- * // Invalid - absolute path but outside repo
107
- * const path3 = "/Users/otheruser/project/test.spec.ts";
108
- * isFullPath(path3, repoDir); // Returns false
109
- *
110
- * @example
111
- * // Valid full path with trailing slash
112
- * const path4 = "/Users/aashishwork/flash-tests/";
113
- * isFullPath(path4, repoDir); // Returns true
114
- */
115
94
  function isFullPath(path, repoDir) {
116
95
  return path.startsWith("/") && path.startsWith(repoDir);
117
96
  }
118
- /**
119
- * Collects artifacts from the repository directory and returns their URLs.
120
- *
121
- * @param inputs - An array of artifact inputs.
122
- * @param repoDir - The absolute path to the repository directory.
123
- * @param toolCallId - Unique identifier for the tool call.
124
- * @returns An array of artifacts with their URLs.
125
- *
126
- * @example
127
- * // Collect artifacts from both file paths and in-memory data
128
- * const artifacts = await collectArtifacts([
129
- * {
130
- * name: "screenshot.png",
131
- * contentType: "image/png",
132
- * path: "/Users/project/screenshots/test.png"
133
- * },
134
- * {
135
- * name: "log.txt",
136
- * contentType: "text/plain",
137
- * data: Buffer.from("test log content")
138
- * }
139
- * ], "/Users/project", "tool-123");
140
- *
141
- * @example
142
- * // Returns empty array when artifact collection is disabled
143
- * const artifacts = await collectArtifacts([], "/Users/project", "tool-123");
144
- * // Returns: []
145
- *
146
- * @example
147
- * // Throws error for invalid file paths
148
- * await collectArtifacts([
149
- * {
150
- * name: "test.png",
151
- * contentType: "image/png",
152
- * path: "relative/path/test.png" // Invalid - not absolute path
153
- * }
154
- * ], "/Users/project", "tool-123");
155
- * // Throws: "Invalid path: relative/path/test.png..."
156
- */
157
97
  async function collectArtifacts(inputs, repoDir, toolCallId) {
158
98
  if (!isArtifactCollectionEnabled())
159
99
  return [];
@@ -197,7 +137,7 @@ async function collectArtifacts(inputs, repoDir, toolCallId) {
197
137
  ? path_1.default.relative(repoDir, artifact.path)
198
138
  : artifact.fileName;
199
139
  const pathInBucket = path_1.default.join(destinationDir, relativePath);
200
- url = `https://reports.empirical.run/${pathInBucket}`;
140
+ url = `${bucket.baseUrl}/${pathInBucket}`;
201
141
  }
202
142
  return {
203
143
  name: artifact.name,
@@ -0,0 +1,18 @@
1
+ import type { PendingToolCall, ToolResult, Usage } from "@empiricalrun/shared-types/chat-agent";
2
+ import type { TelemetryEvent } from "@empiricalrun/shared-types/telemetry";
3
+ export type TelemetryEnv = {
4
+ EMPIRICAL_TELEMETRY_API_KEY?: string;
5
+ ENVIRONMENT?: string;
6
+ };
7
+ export declare function trackEvent(event: TelemetryEvent, env?: TelemetryEnv): Promise<void>;
8
+ export declare function trackToolExecutionStarted(toolCall: PendingToolCall, chatSessionId: number, queuedTimestamp: number, env?: TelemetryEnv): Promise<void>;
9
+ export declare function trackToolExecutionCompleted(toolCall: PendingToolCall, toolResult: ToolResult, chatSessionId: number, queuedTimestamp: number, startedTimestamp: number, env?: TelemetryEnv): Promise<void>;
10
+ export declare function trackLLMResponse(opts: {
11
+ modelName: string;
12
+ projectRepoName: string;
13
+ chatSessionId?: number;
14
+ chatSessionSource: string;
15
+ usage: Usage;
16
+ env?: TelemetryEnv;
17
+ }): void;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,KAAK,EACN,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAM3E,MAAM,MAAM,YAAY,GAAG;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,cAAc,EACrB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB,GAAG,IAAI,CAoBP"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trackEvent = trackEvent;
4
+ exports.trackToolExecutionStarted = trackToolExecutionStarted;
5
+ exports.trackToolExecutionCompleted = trackToolExecutionCompleted;
6
+ exports.trackLLMResponse = trackLLMResponse;
7
+ const tools_1 = require("../tools");
8
+ const TELEMETRY_WORKER_URL = "https://telemetry-worker.empirical-run.workers.dev";
9
+ async function trackEvent(event, env) {
10
+ const apiKey = env?.EMPIRICAL_TELEMETRY_API_KEY || process.env.EMPIRICAL_TELEMETRY_API_KEY;
11
+ if (!apiKey) {
12
+ return;
13
+ }
14
+ try {
15
+ const response = await fetch(`${TELEMETRY_WORKER_URL}/track`, {
16
+ method: "POST",
17
+ headers: {
18
+ "Content-Type": "application/json",
19
+ Authorization: `Bearer ${apiKey}`,
20
+ },
21
+ body: JSON.stringify(event),
22
+ });
23
+ if (!response.ok) {
24
+ throw new Error(`Telemetry request failed: ${response.status}`);
25
+ }
26
+ }
27
+ catch {
28
+ // Don't throw - telemetry failures shouldn't break the application
29
+ }
30
+ }
31
+ async function trackToolExecutionStarted(toolCall, chatSessionId, queuedTimestamp, env) {
32
+ const event = {
33
+ name: "tool_call_started",
34
+ properties: {
35
+ environment: env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown",
36
+ tool_name: (0, tools_1.nameForTelemetry)(toolCall),
37
+ tool_needs_browser: (0, tools_1.toolsNeedBrowser)([toolCall]),
38
+ tool_call_id: toolCall.id,
39
+ ms_since_queued: Date.now() - queuedTimestamp,
40
+ chat_session_id: chatSessionId,
41
+ machine_id: "inline",
42
+ },
43
+ };
44
+ await trackEvent(event, env);
45
+ }
46
+ async function trackToolExecutionCompleted(toolCall, toolResult, chatSessionId, queuedTimestamp, startedTimestamp, env) {
47
+ const errorMessage = toolResult.isError && typeof toolResult.result === "string"
48
+ ? toolResult.result
49
+ : null;
50
+ const event = {
51
+ name: "tool_call_completed",
52
+ properties: {
53
+ environment: env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown",
54
+ chat_session_id: chatSessionId,
55
+ tool_name: (0, tools_1.nameForTelemetry)(toolCall),
56
+ tool_needs_browser: (0, tools_1.toolsNeedBrowser)([toolCall]),
57
+ tool_call_id: toolCall.id,
58
+ is_error: toolResult.isError,
59
+ error_message: errorMessage,
60
+ machine_id: "inline",
61
+ ms_since_queued: Date.now() - queuedTimestamp,
62
+ ms_since_started: Date.now() - startedTimestamp,
63
+ },
64
+ };
65
+ await trackEvent(event, env);
66
+ }
67
+ function trackLLMResponse(opts) {
68
+ const environment = opts.env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown";
69
+ void trackEvent({
70
+ name: "llm_response_generated",
71
+ properties: {
72
+ environment,
73
+ model_name: opts.modelName,
74
+ project_repo_name: opts.projectRepoName,
75
+ chat_session_id: opts.chatSessionId,
76
+ chat_session_source: opts.chatSessionSource,
77
+ tokens_input: opts.usage.tokens?.input || 0,
78
+ tokens_output: opts.usage.tokens?.output || 0,
79
+ cost_input: opts.usage.cost?.input || 0,
80
+ cost_output: opts.usage.cost?.output || 0,
81
+ },
82
+ }, opts.env);
83
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analyse-video/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAK7B,OAAO,EACL,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAetC,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAiDjE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analyse-video/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,OAAO,EACL,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAetC,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CA8DjE,CAAC"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.analyseVideo = void 0;
7
7
  const node_path_1 = __importDefault(require("node:path"));
8
8
  const constants_1 = require("../../constants");
9
+ const telemetry_1 = require("../../telemetry");
9
10
  const hash_1 = require("../../utils/hash");
10
11
  const url_validation_1 = require("../../utils/url-validation");
11
12
  const video_core_1 = require("../../video-core");
@@ -19,7 +20,7 @@ function getVideoAnalysisParams(params) {
19
20
  }
20
21
  exports.analyseVideo = {
21
22
  ...analyse_video_1.analyseVideo,
22
- execute: async ({ input, repoPath, logger }) => {
23
+ execute: async ({ input, repoPath, chatSession, logger }) => {
23
24
  const { url } = input;
24
25
  const params = getVideoAnalysisParams(input.params);
25
26
  const videoHash = (0, hash_1.createHashBasedOnParams)(url, params);
@@ -36,11 +37,12 @@ exports.analyseVideo = {
36
37
  };
37
38
  }
38
39
  const workingDirectory = node_path_1.default.join(repoPath, "video-analysis", videoHash);
39
- const { result, error, interleaved_tool_result } = await (0, video_core_1.runVideoAnalysis)({
40
+ const { result, error, interleaved_tool_result, usage } = await (0, video_core_1.runVideoAnalysis)({
40
41
  url,
41
42
  videoHash,
42
43
  params,
43
44
  workingDirectory,
45
+ logger,
44
46
  });
45
47
  if (error) {
46
48
  return {
@@ -48,6 +50,15 @@ exports.analyseVideo = {
48
50
  result: error,
49
51
  };
50
52
  }
53
+ if (usage) {
54
+ (0, telemetry_1.trackLLMResponse)({
55
+ modelName: params.model,
56
+ projectRepoName: chatSession?.repoName || "unknown",
57
+ chatSessionId: chatSession?.id,
58
+ chatSessionSource: "video_analysis",
59
+ usage,
60
+ });
61
+ }
51
62
  const finalResult = [
52
63
  {
53
64
  type: "text",
@@ -58,6 +69,7 @@ exports.analyseVideo = {
58
69
  return {
59
70
  isError: error !== null,
60
71
  result: finalResult,
72
+ usage,
61
73
  };
62
74
  },
63
75
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;CA+BzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;CA8BzD"}