@empiricalrun/test-gen 0.68.0 → 0.69.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 (40) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/agent/chat/exports.d.ts +8 -8
  3. package/dist/agent/chat/exports.d.ts.map +1 -1
  4. package/dist/agent/chat/exports.js +10 -7
  5. package/dist/agent/chat/index.d.ts.map +1 -1
  6. package/dist/agent/chat/index.js +5 -2
  7. package/dist/agent/chat/state.d.ts +4 -2
  8. package/dist/agent/chat/state.d.ts.map +1 -1
  9. package/dist/agent/chat/state.js +10 -2
  10. package/dist/agent/chat/utils.d.ts +5 -1
  11. package/dist/agent/chat/utils.d.ts.map +1 -1
  12. package/dist/agent/chat/utils.js +22 -0
  13. package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.d.ts.map +1 -1
  14. package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.js +24 -3
  15. package/dist/agent/cua/pw-codegen/pw-pause/patch.d.ts.map +1 -1
  16. package/dist/agent/cua/pw-codegen/pw-pause/patch.js +4 -6
  17. package/dist/auth/api-client.d.ts.map +1 -1
  18. package/dist/auth/api-client.js +3 -2
  19. package/dist/bin/index.js +10 -0
  20. package/dist/bin/setup.d.ts +4 -0
  21. package/dist/bin/setup.d.ts.map +1 -0
  22. package/dist/bin/setup.js +86 -0
  23. package/dist/bin/utils/index.d.ts +1 -0
  24. package/dist/bin/utils/index.d.ts.map +1 -1
  25. package/dist/file/server.js +4 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -1
  28. package/dist/logger.d.ts +3 -0
  29. package/dist/logger.d.ts.map +1 -0
  30. package/dist/logger.js +11 -0
  31. package/dist/recorder/index.d.ts.map +1 -1
  32. package/dist/recorder/index.js +19 -5
  33. package/dist/recorder/request.d.ts.map +1 -1
  34. package/dist/recorder/request.js +2 -3
  35. package/dist/recorder/temp-files.d.ts.map +1 -1
  36. package/dist/recorder/temp-files.js +5 -4
  37. package/dist/recorder/upload.d.ts.map +1 -1
  38. package/dist/recorder/upload.js +0 -1
  39. package/package.json +6 -4
  40. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @empiricalrun/test-gen
2
2
 
3
+ ## 0.69.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 64fa486: feat: user message can have video/webm attachments
8
+
9
+ ### Patch Changes
10
+
11
+ - a2cb0ab: feat: support video attachments for recorder requests
12
+ - b533712: chore: remove verbose logs, hide pw glass pane
13
+ - b9571e9: feat: cli command to clone and setup repo
14
+ - Updated dependencies [a2cb0ab]
15
+ - Updated dependencies [64fa486]
16
+ - Updated dependencies [b533712]
17
+ - @empiricalrun/llm@0.19.0
18
+ - @empiricalrun/test-run@0.10.4
19
+
3
20
  ## 0.68.0
4
21
 
5
22
  ### Minor Changes
@@ -1,9 +1,9 @@
1
- import { createChatModel, IChatModel, SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat";
2
- import { FileInfo } from "../../types";
3
- import { chatAgentLoop } from "./agent-loop";
4
- import { defaultModel } from "./models";
5
- import { CHAT_STATE_VERSIONS_MIGRATIONS_MAP, chatStateFromModel, createChatState, createChatStateForMessages, fetchToolCallAvailability, getLatestDownloadBuildUrl, LATEST_CHAT_STATE_VERSION, migrateChatState } from "./state";
6
- import { ReporterFunction } from "./types";
7
- export { CHAT_STATE_VERSIONS_MIGRATIONS_MAP, chatAgentLoop, chatStateFromModel, createChatModel, createChatState, createChatStateForMessages, defaultModel, fetchToolCallAvailability, getLatestDownloadBuildUrl, LATEST_CHAT_STATE_VERSION, migrateChatState, SUPPORTED_CHAT_MODELS, };
8
- export type { FileInfo, IChatModel, ReporterFunction };
1
+ export type { FileInfo } from "../../types";
2
+ export { chatAgentLoop } from "./agent-loop";
3
+ export { defaultModel } from "./models";
4
+ export { CHAT_STATE_VERSIONS_MIGRATIONS_MAP, chatStateFromModel, createChatState, createChatStateForMessages, fetchToolCallAvailability, getLatestDownloadBuildUrl, LATEST_CHAT_STATE_VERSION, migrateChatState, processAttachments, } from "./state";
5
+ export type { ReporterFunction } from "./types";
6
+ export { extractAttachments } from "./utils";
7
+ export type { IChatModel } from "@empiricalrun/llm/chat";
8
+ export { createChatModel, SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat";
9
9
  //# 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,eAAe,EACf,UAAU,EACV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EACL,kCAAkC,EAClC,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,GACtB,CAAC;AAEF,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,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,14 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SUPPORTED_CHAT_MODELS = exports.migrateChatState = exports.LATEST_CHAT_STATE_VERSION = exports.getLatestDownloadBuildUrl = exports.fetchToolCallAvailability = exports.defaultModel = exports.createChatStateForMessages = exports.createChatState = exports.createChatModel = exports.chatStateFromModel = exports.chatAgentLoop = exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP = void 0;
4
- const chat_1 = require("@empiricalrun/llm/chat");
5
- Object.defineProperty(exports, "createChatModel", { enumerable: true, get: function () { return chat_1.createChatModel; } });
6
- Object.defineProperty(exports, "SUPPORTED_CHAT_MODELS", { enumerable: true, get: function () { return chat_1.SUPPORTED_CHAT_MODELS; } });
7
- const agent_loop_1 = require("./agent-loop");
3
+ exports.SUPPORTED_CHAT_MODELS = exports.createChatModel = exports.extractAttachments = exports.processAttachments = exports.migrateChatState = exports.LATEST_CHAT_STATE_VERSION = exports.getLatestDownloadBuildUrl = exports.fetchToolCallAvailability = exports.createChatStateForMessages = exports.createChatState = exports.chatStateFromModel = exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP = exports.defaultModel = exports.chatAgentLoop = void 0;
4
+ var agent_loop_1 = require("./agent-loop");
8
5
  Object.defineProperty(exports, "chatAgentLoop", { enumerable: true, get: function () { return agent_loop_1.chatAgentLoop; } });
9
- const models_1 = require("./models");
6
+ var models_1 = require("./models");
10
7
  Object.defineProperty(exports, "defaultModel", { enumerable: true, get: function () { return models_1.defaultModel; } });
11
- const state_1 = require("./state");
8
+ var state_1 = require("./state");
12
9
  Object.defineProperty(exports, "CHAT_STATE_VERSIONS_MIGRATIONS_MAP", { enumerable: true, get: function () { return state_1.CHAT_STATE_VERSIONS_MIGRATIONS_MAP; } });
13
10
  Object.defineProperty(exports, "chatStateFromModel", { enumerable: true, get: function () { return state_1.chatStateFromModel; } });
14
11
  Object.defineProperty(exports, "createChatState", { enumerable: true, get: function () { return state_1.createChatState; } });
@@ -17,3 +14,9 @@ Object.defineProperty(exports, "fetchToolCallAvailability", { enumerable: true,
17
14
  Object.defineProperty(exports, "getLatestDownloadBuildUrl", { enumerable: true, get: function () { return state_1.getLatestDownloadBuildUrl; } });
18
15
  Object.defineProperty(exports, "LATEST_CHAT_STATE_VERSION", { enumerable: true, get: function () { return state_1.LATEST_CHAT_STATE_VERSION; } });
19
16
  Object.defineProperty(exports, "migrateChatState", { enumerable: true, get: function () { return state_1.migrateChatState; } });
17
+ Object.defineProperty(exports, "processAttachments", { enumerable: true, get: function () { return state_1.processAttachments; } });
18
+ var utils_1 = require("./utils");
19
+ Object.defineProperty(exports, "extractAttachments", { enumerable: true, get: function () { return utils_1.extractAttachments; } });
20
+ var chat_1 = require("@empiricalrun/llm/chat");
21
+ Object.defineProperty(exports, "createChatModel", { enumerable: true, get: function () { return chat_1.createChatModel; } });
22
+ Object.defineProperty(exports, "SUPPORTED_CHAT_MODELS", { enumerable: true, get: function () { return chat_1.SUPPORTED_CHAT_MODELS; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAwCpC,wBAAsB,yBAAyB,IAAI,OAAO,CACxD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CAwBA;AAED,wBAAsB,kBAAkB,CAAC,EACvC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,iBA6HA;AAuBD,wBAAsB,wBAAwB,CAAC,EAC7C,aAAa,EACb,aAAa,GACd,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB,iBA6DA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAyCpC,wBAAsB,yBAAyB,IAAI,OAAO,CACxD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CAwBA;AAED,wBAAsB,kBAAkB,CAAC,EACvC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,iBA+HA;AAuBD,wBAAsB,wBAAwB,CAAC,EAC7C,aAAa,EACb,aAAa,GACd,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB,iBA6DA"}
@@ -12,6 +12,7 @@ const file_tree_1 = require("../../utils/file-tree");
12
12
  const git_1 = require("../../utils/git");
13
13
  const agent_loop_1 = require("./agent-loop");
14
14
  const state_1 = require("./state");
15
+ const utils_1 = require("./utils");
15
16
  const DASHBOARD_DOMAIN = process.env.DASHBOARD_DOMAIN || "https://dash.empirical.run";
16
17
  function stopCriteria(userPrompt) {
17
18
  return userPrompt?.toLowerCase() === "stop";
@@ -54,7 +55,7 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
54
55
  let chatModel = (0, chat_1.createChatModel)(messagesLoadedFromDisk, selectedModel);
55
56
  chatModel.validateEnvVarsForAuth();
56
57
  if (initialPromptContent && chatModel.messages.length === 0) {
57
- chatModel.pushUserMessage(initialPromptContent);
58
+ chatModel.pushUserMessage(initialPromptContent, []);
58
59
  chatModel.askUserForInput = false;
59
60
  }
60
61
  else if (initialPromptContent && chatModel.messages.length > 0) {
@@ -116,7 +117,9 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
116
117
  throw e;
117
118
  }
118
119
  if (!stopCriteria(userPrompt)) {
119
- chatModel.pushUserMessage(userPrompt);
120
+ const { text, attachments } = (0, utils_1.extractAttachments)(userPrompt);
121
+ const processed = await chatModel.processAttachments(attachments);
122
+ chatModel.pushUserMessage(text, processed);
120
123
  }
121
124
  }
122
125
  else {
@@ -1,10 +1,12 @@
1
1
  import { IChatModel } from "@empiricalrun/llm/chat";
2
- import { CanonicalMessage, ChatState, ChatStateError, SupportedChatModels } from "@empiricalrun/shared-types";
2
+ import { Attachment, CanonicalMessage, ChatState, ChatStateError, ProcessedAttachment, SupportedChatModels } from "@empiricalrun/shared-types";
3
3
  export declare const CHAT_STATE_VERSIONS_MIGRATIONS_MAP: Record<string, (state: any) => any>;
4
4
  export declare const LATEST_CHAT_STATE_VERSION = "0.1";
5
5
  export declare const CHAT_STATE_PATH: string;
6
- export declare function createChatState({ userPrompt, existingState, selectedModel, error, }: {
6
+ export declare function processAttachments(attachments: Attachment[], selectedModel: SupportedChatModels): Promise<ProcessedAttachment[]>;
7
+ export declare function createChatState({ userPrompt, attachments, existingState, selectedModel, error, }: {
7
8
  userPrompt: string | undefined;
9
+ attachments: ProcessedAttachment[];
8
10
  existingState: ChatState | undefined;
9
11
  selectedModel: SupportedChatModels;
10
12
  error: ChatStateError | null;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AA+BpC,eAAO,MAAM,kCAAkC,EAAE,MAAM,CACrD,MAAM,EACN,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAIpB,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,eAAO,MAAM,eAAe,QAI3B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,mBAAmB,CAAC;IACnC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,aAYA;AAED,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,aAAa,EACb,eAAe,EACf,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,GAAG,CAAC;IACd,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,GAAG,SAAS,CASZ;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EACpC,SAAS,EACT,aAAa,EACb,KAAK,GACN,EAAE;IACD,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,aAAa,EAAE,mBAAmB,CAAC;IACnC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,aAOA;AAED,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAarD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,CAqBzD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAClB,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,OAAO,EACxB,KAAK,EAAE,cAAc,GAAG,IAAI,QAgB7B;AA2BD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,gBAAgB,EAAE;;;EAe7B"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AA+BpC,eAAO,MAAM,kCAAkC,EAAE,MAAM,CACrD,MAAM,EACN,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAIpB,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,eAAO,MAAM,eAAe,QAI3B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,UAAU,EAAE,EACzB,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAMhC;AAED,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,mBAAmB,CAAC;IACnC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,aAYA;AAED,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,aAAa,EACb,eAAe,EACf,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,GAAG,CAAC;IACd,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,GAAG,SAAS,CASZ;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EACpC,SAAS,EACT,aAAa,EACb,KAAK,GACN,EAAE;IACD,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,aAAa,EAAE,mBAAmB,CAAC;IACnC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9B,aAOA;AAED,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAarD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,CAqBzD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAClB,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,OAAO,EACxB,KAAK,EAAE,cAAc,GAAG,IAAI,QAgB7B;AA2BD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,gBAAgB,EAAE;;;EAe7B"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.CHAT_STATE_PATH = exports.LATEST_CHAT_STATE_VERSION = exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP = void 0;
7
+ exports.processAttachments = processAttachments;
7
8
  exports.createChatState = createChatState;
8
9
  exports.createChatStateForMessages = createChatStateForMessages;
9
10
  exports.chatStateFromModel = chatStateFromModel;
@@ -42,11 +43,18 @@ exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP = {
42
43
  };
43
44
  exports.LATEST_CHAT_STATE_VERSION = "0.1";
44
45
  exports.CHAT_STATE_PATH = path_1.default.join(process.cwd(), ".empiricalrun", "last-chat.json");
45
- function createChatState({ userPrompt, existingState, selectedModel, error, }) {
46
+ async function processAttachments(attachments, selectedModel) {
47
+ const chatModel = (0, chat_1.createChatModel)([], selectedModel);
48
+ if (attachments.length === 0) {
49
+ return [];
50
+ }
51
+ return chatModel.processAttachments(attachments);
52
+ }
53
+ function createChatState({ userPrompt, attachments, existingState, selectedModel, error, }) {
46
54
  const messages = existingState?.messages || [];
47
55
  const chatModel = (0, chat_1.createChatModel)(messages, selectedModel);
48
56
  if (userPrompt) {
49
- chatModel.pushUserMessage(userPrompt);
57
+ chatModel.pushUserMessage(userPrompt, attachments);
50
58
  }
51
59
  return createChatStateForMessages({
52
60
  messages: chatModel.messages,
@@ -1,6 +1,6 @@
1
1
  import { TraceClient } from "@empiricalrun/llm";
2
2
  import { IChatModel } from "@empiricalrun/llm/chat";
3
- import { SupportedChatModels } from "@empiricalrun/shared-types";
3
+ import { Attachment, SupportedChatModels } from "@empiricalrun/shared-types";
4
4
  import { ReporterFunction } from "./types";
5
5
  export declare const log: (...args: any[]) => void;
6
6
  export declare function getModelName(model: string): string;
@@ -12,4 +12,8 @@ export declare function handleAgentError({ context, error, chatModel, selectedMo
12
12
  reporter: ReporterFunction;
13
13
  trace?: TraceClient;
14
14
  }): Promise<void>;
15
+ export declare function extractAttachments(userPrompt: string): {
16
+ text: string;
17
+ attachments: Attachment[];
18
+ };
15
19
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAEL,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,GAAG,EAAE,SAEjC,CAAC;AAcF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAsB,gBAAgB,CAAC,EACrC,OAAO,EACP,KAAK,EACL,SAAS,EACT,aAAa,EACb,QAAQ,EACR,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,mBAAmB,CAAC;IACnC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,iBAsBA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,UAAU,EAEV,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,GAAG,EAAE,SAEjC,CAAC;AAcF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAsB,gBAAgB,CAAC,EACrC,OAAO,EACP,KAAK,EACL,SAAS,EACT,aAAa,EACb,QAAQ,EACR,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,mBAAmB,CAAC;IACnC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,iBAsBA;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAsBA"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.log = void 0;
4
4
  exports.getModelName = getModelName;
5
5
  exports.handleAgentError = handleAgentError;
6
+ exports.extractAttachments = extractAttachments;
6
7
  const chat_1 = require("@empiricalrun/llm/chat");
7
8
  const picocolors_1 = require("picocolors");
8
9
  const state_1 = require("./state");
@@ -48,3 +49,24 @@ async function handleAgentError({ context, error, chatModel, selectedModel, repo
48
49
  logError(context, error, trace);
49
50
  }
50
51
  }
52
+ function extractAttachments(userPrompt) {
53
+ const attachments = [];
54
+ const urlPattern = /\[\[(https?:\/\/[^\]]+)\]\]/g;
55
+ let match;
56
+ while ((match = urlPattern.exec(userPrompt)) !== null) {
57
+ const name = match[1].split("/").pop();
58
+ if (!name || !name.endsWith(".webm")) {
59
+ throw new Error(`Invalid attachment name: ${name}. Only .webm files are supported.`);
60
+ }
61
+ attachments.push({
62
+ contentType: "video/webm",
63
+ name,
64
+ url: match[1],
65
+ });
66
+ }
67
+ const text = userPrompt.replace(urlPattern, "").trim();
68
+ return {
69
+ text,
70
+ attachments,
71
+ };
72
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"for-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/agent/cua/pw-codegen/pw-pause/for-recorder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,iCAAiC;IAO1C,OAAO,CAAC,eAAe;IANzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,iBAAiB,CAAqB;gBAGpC,eAAe,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC;YAKtD,QAAQ;IAWhB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrC,sBAAsB,CAAC,IAAI,EAAE,IAAI;CAiBxC"}
1
+ {"version":3,"file":"for-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/agent/cua/pw-codegen/pw-pause/for-recorder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,iCAAiC;IAO1C,OAAO,CAAC,eAAe;IANzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,iBAAiB,CAAqB;gBAGpC,eAAe,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC;YAKtD,QAAQ;IAWhB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrC,sBAAsB,CAAC,IAAI,EAAE,IAAI;CAmCxC"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.PlaywrightPauseCodegenForRecorder = void 0;
7
7
  const express_1 = __importDefault(require("express"));
8
+ const logger_1 = require("../../../../logger");
8
9
  const ipc_1 = require("./ipc");
9
10
  class PlaywrightPauseCodegenForRecorder {
10
11
  sourcesCallback;
@@ -19,7 +20,9 @@ class PlaywrightPauseCodegenForRecorder {
19
20
  async saveCode(code) {
20
21
  const generatedCode = code.map((c) => c.actions.join("\n")).join("\n");
21
22
  if (generatedCode) {
22
- console.log(`[PlaywrightPauseCodegen] Received code from Playwright: ${generatedCode}`);
23
+ // console.log(
24
+ // `[PlaywrightPauseCodegen] Received code from Playwright: ${generatedCode}`,
25
+ // );
23
26
  this.codeForLastAction = generatedCode;
24
27
  await this.sourcesCallback(code);
25
28
  }
@@ -36,13 +39,20 @@ class PlaywrightPauseCodegenForRecorder {
36
39
  await new Promise((resolve) => {
37
40
  this.server = app.listen(this.port, () => resolve());
38
41
  });
39
- console.log(`Server started on port ${this.port}`);
42
+ logger_1.logger.debug(`Server started on port ${this.port}`);
40
43
  // Start page.pause experience in the page
41
44
  this.page = page;
42
45
  await this.startPlaywrightCodegen(page);
43
46
  }
44
47
  async startPlaywrightCodegen(page) {
45
48
  // Similar to the same name method in the main codegen
49
+ /**
50
+ * x-pw-glass
51
+ * # inside shadow DOM (closed)
52
+ * |----> x-pw-overlay (controls)
53
+ * |----> x-pw-highlight (red highlight)
54
+ * |----> x-pw-tooltip
55
+ */
46
56
  const timerPromise = new Promise((resolve) => {
47
57
  setTimeout(resolve, 1000);
48
58
  });
@@ -51,11 +61,22 @@ class PlaywrightPauseCodegenForRecorder {
51
61
  const evaluatePromise = page.evaluate(() => {
52
62
  // @ts-ignore
53
63
  console.log(window["__pw_recorderSetMode"]("recording"));
64
+ // Remove playwright's glass pane
54
65
  const glassPane = document.querySelector("x-pw-glass");
55
66
  if (glassPane) {
56
- glassPane.remove();
67
+ const styles = glassPane.getAttribute("style") || "";
68
+ glassPane.setAttribute("style", styles + "; display: none;");
57
69
  }
58
70
  });
71
+ await page.addInitScript(() => {
72
+ setInterval(() => {
73
+ const glassPane = document.querySelector("x-pw-glass");
74
+ if (glassPane) {
75
+ const styles = glassPane.getAttribute("style") || "";
76
+ glassPane.setAttribute("style", styles + "; display: none;");
77
+ }
78
+ }, 300);
79
+ });
59
80
  await Promise.all([pausePromise, evaluatePromise]);
60
81
  }
61
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../../../src/agent/cua/pw-codegen/pw-pause/patch.ts"],"names":[],"mappings":"AAmBA,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,iBAehE;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,mBAgB5D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,+BAiB/C;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CA8BA;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,gCAkB1D;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,iBAoB3D;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,iBAGxD;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,iBA2Bb"}
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../../../src/agent/cua/pw-codegen/pw-pause/patch.ts"],"names":[],"mappings":"AAoBA,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,iBAehE;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,mBAgB5D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,+BAgB/C;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CA8BA;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,gCAkB1D;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,iBAoB3D;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,iBAGxD;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,iBA2Bb"}
@@ -14,6 +14,7 @@ exports.patchPwCode = patchPwCode;
14
14
  const child_process_1 = require("child_process");
15
15
  const fs_1 = __importDefault(require("fs"));
16
16
  const path_1 = __importDefault(require("path"));
17
+ const logger_1 = require("../../../../logger");
17
18
  const ipc_1 = require("./ipc");
18
19
  /**
19
20
  * Helpful commands for debugging:
@@ -59,15 +60,12 @@ async function runNpmList(repoDir) {
59
60
  const output = (0, child_process_1.execSync)("npm ls playwright-core --json --long --production=false", {
60
61
  cwd: repoDir,
61
62
  encoding: "utf-8",
63
+ stdio: ["pipe", "pipe", "pipe"],
62
64
  });
63
65
  return output;
64
66
  }
65
67
  catch (error) {
66
- console.error("Command failed:", error.message);
67
- console.error("Error code:", error.status);
68
- console.error("Signal:", error.signal);
69
- console.error("Stdout:", error.stdout?.toString());
70
- console.error("Stderr:", error.stderr?.toString());
68
+ logger_1.logger.error(`npm ls failed with error: ${error.message} and status: ${error.status}`);
71
69
  }
72
70
  }
73
71
  function getPlaywrightCoreFromNpmList(output) {
@@ -167,5 +165,5 @@ async function patchPwCode(pwVersion, pathToRecorderApp, port) {
167
165
  }`;
168
166
  const newCode = currentFileContents.replace(original, replacement);
169
167
  fs_1.default.writeFileSync(pathToRecorderApp, newCode);
170
- console.log(`Patched Playwright recorder app at ${pathToRecorderApp}`);
168
+ logger_1.logger.debug(`Patched Playwright recorder app at ${pathToRecorderApp}`);
171
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/auth/api-client.ts"],"names":[],"mappings":"AAOA,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAS;;IAMjB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;YA2BN,WAAW;YAuBX,mBAAmB;YAiBnB,YAAY;CA4C3B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/auth/api-client.ts"],"names":[],"mappings":"AAQA,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAS;;IAMjB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;YA2BN,WAAW;YAuBX,mBAAmB;YAiBnB,YAAY;CA4C3B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apiClient = void 0;
4
+ const logger_1 = require("../logger");
4
5
  const token_store_1 = require("./token-store");
5
6
  class APIClient {
6
7
  appUrl;
@@ -15,7 +16,7 @@ class APIClient {
15
16
  }
16
17
  const response = await this.makeRequest(endpoint, options, tokens.access_token);
17
18
  if (response.status === 401) {
18
- // console.log("Access token expired, attempting to refresh...");
19
+ logger_1.logger.debug("Access token expired, attempting to refresh...");
19
20
  const refreshed = await this.refreshToken();
20
21
  if (refreshed) {
21
22
  const newTokens = await (0, token_store_1.getStoredTokens)();
@@ -89,7 +90,7 @@ class APIClient {
89
90
  user_id: data.user?.id || tokens.user_id,
90
91
  user_email: data.user?.email || tokens.user_email,
91
92
  });
92
- console.log("Access token refreshed successfully via dashboard");
93
+ logger_1.logger.debug("Access token refreshed successfully via dashboard");
93
94
  return true;
94
95
  }
95
96
  catch (error) {
package/dist/bin/index.js CHANGED
@@ -23,6 +23,7 @@ const reporter_1 = require("../reporter");
23
23
  const session_1 = require("../session");
24
24
  const test_build_1 = require("../test-build");
25
25
  const logger_1 = require("./logger");
26
+ const setup_1 = require("./setup");
26
27
  const utils_2 = require("./utils");
27
28
  const scenarios_1 = require("./utils/scenarios");
28
29
  dotenv_1.default.config({
@@ -302,6 +303,15 @@ async function main() {
302
303
  });
303
304
  process.exit(0);
304
305
  });
306
+ program
307
+ .command("setup")
308
+ .description("Clone a repository from your projects")
309
+ .option("--repo-name <string>", "Name of the repository to clone")
310
+ .action(async (opts) => {
311
+ const options = await (0, utils_2.validateAndCompleteCliOptions)(opts, ["repoName"]);
312
+ await (0, setup_1.runSetup)({ repoName: options.repoName });
313
+ process.exit(0);
314
+ });
305
315
  program
306
316
  .command("legacy")
307
317
  .description("Run the legacy workflows")
@@ -0,0 +1,4 @@
1
+ export declare function runSetup({ repoName }: {
2
+ repoName: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/bin/setup.ts"],"names":[],"mappings":"AA+EA,wBAAsB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,iBA2BhE"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runSetup = runSetup;
7
+ const child_process_1 = require("child_process");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const util_1 = require("util");
11
+ const api_client_1 = require("../auth/api-client");
12
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
13
+ async function cloneRepository(cloneUrl, repoName) {
14
+ const targetDir = path_1.default.join(process.cwd(), repoName);
15
+ if (fs_1.default.existsSync(targetDir)) {
16
+ console.error(`Directory '${repoName}' already exists in current location`);
17
+ process.exit(1);
18
+ }
19
+ console.log(`📥 Cloning repository to ./${repoName}...`);
20
+ const { stderr } = await execAsync(`git clone ${cloneUrl} ${repoName}`, {
21
+ cwd: process.cwd(),
22
+ });
23
+ if (stderr && !stderr.includes("Cloning into")) {
24
+ console.error(`Git clone error: ${stderr}`);
25
+ process.exit(1);
26
+ }
27
+ console.log(`✅ Repository cloned successfully to ./${repoName}`);
28
+ return targetDir;
29
+ }
30
+ async function installDependencies(targetDir) {
31
+ console.log(`📦 Installing dependencies...`);
32
+ try {
33
+ const { stderr: installStderr } = await execAsync(`npm install`, {
34
+ cwd: targetDir,
35
+ });
36
+ if (installStderr && !installStderr.toLowerCase().includes("npm warn")) {
37
+ console.error(`npm install error: ${installStderr}`);
38
+ process.exit(1);
39
+ }
40
+ console.log(`✅ Dependencies installed successfully`);
41
+ }
42
+ catch (installError) {
43
+ console.error(`❌ Failed to install dependencies: ${installError.message}`);
44
+ process.exit(1);
45
+ }
46
+ }
47
+ async function installPlaywrightBrowser(targetDir) {
48
+ console.log(`🎭 Installing Playwright browser...`);
49
+ try {
50
+ const { stderr: playwrightStderr } = await execAsync(`npx playwright install chromium --with-deps`, {
51
+ cwd: targetDir,
52
+ });
53
+ if (playwrightStderr && !playwrightStderr.includes("Installing")) {
54
+ console.error(`Playwright install error: ${playwrightStderr}`);
55
+ process.exit(1);
56
+ }
57
+ console.log(`✅ Playwright browser installed successfully`);
58
+ }
59
+ catch (playwrightError) {
60
+ console.error(`❌ Failed to install Playwright browser: ${playwrightError.message}`);
61
+ process.exit(1);
62
+ }
63
+ }
64
+ async function runSetup({ repoName }) {
65
+ try {
66
+ console.log(`🔍 Fetching details for repository: ${repoName}`);
67
+ const response = await api_client_1.apiClient.request(`/api/projects/clone?project_repo_name=${repoName}`);
68
+ if (!response.ok) {
69
+ if (response.status === 404) {
70
+ throw new Error(`Repository '${repoName}' not found in your projects`);
71
+ }
72
+ throw new Error(`Failed to fetch repository details: ${response.statusText}`);
73
+ }
74
+ const { data: repoDetails } = await response.json();
75
+ const { clone_url } = repoDetails;
76
+ console.log(`📂 Clone URL: ${clone_url}`);
77
+ const targetDir = await cloneRepository(clone_url, repoName);
78
+ await installDependencies(targetDir);
79
+ await installPlaywrightBrowser(targetDir);
80
+ console.log(`\n🎉 Setup complete! Repository is ready at ./${repoName}`);
81
+ }
82
+ catch (error) {
83
+ console.error(`❌ Setup failed: ${error.message}`);
84
+ process.exit(1);
85
+ }
86
+ }
@@ -6,6 +6,7 @@ export interface CLIOptions {
6
6
  file?: string;
7
7
  prompt?: string;
8
8
  suites?: string;
9
+ repoName?: string;
9
10
  }
10
11
  export declare function validateAndCompleteCliOptions(options: CLIOptions, requiredFields?: string[]): Promise<CLIOptions>;
11
12
  export declare function printBanner(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAgBjE,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,UAAU,EACnB,cAAc,GAAE,MAAM,EAA+B,GACpD,OAAO,CAAC,UAAU,CAAC,CAqDrB;AAeD,wBAAsB,WAAW,kBAgDhC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAgBjE,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,UAAU,EACnB,cAAc,GAAE,MAAM,EAA+B,GACpD,OAAO,CAAC,UAAU,CAAC,CAqDrB;AAeD,wBAAsB,WAAW,kBAgDhC"}
@@ -45,7 +45,10 @@ class FileServiceServer {
45
45
  app.post("/codegen-sources", async (req) => {
46
46
  const payload = req.body;
47
47
  this.codegenSources = payload.map((c) => c.actions.join("\n")).join("\n");
48
- console.log("[FileServiceServer] Received codegen sources", this.codegenSources);
48
+ // console.log(
49
+ // "[FileServiceServer] Received codegen sources",
50
+ // this.codegenSources,
51
+ // );
49
52
  });
50
53
  app.post("/agent-results", async (req, res) => {
51
54
  const { generatedCode, importPaths, result, usage } = req.body;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAahD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsB7C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,YAAY,EAC5B,KAAK,CAAC,EAAE,SAAS,iBAwElB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,IAAI,iBAY7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAchD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsB7C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,YAAY,EAC5B,KAAK,CAAC,EAAE,SAAS,iBAwElB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,IAAI,iBAY7C"}
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ const for_recorder_1 = require("./agent/cua/pw-codegen/pw-pause/for-recorder");
13
13
  const run_1 = require("./agent/master/run");
14
14
  const scenarios_1 = require("./bin/utils/scenarios");
15
15
  const client_1 = __importDefault(require("./file/client"));
16
+ const logger_1 = require("./logger");
16
17
  const reporter_1 = require("./reporter");
17
18
  const session_1 = require("./session");
18
19
  var test_build_1 = require("./test-build");
@@ -104,7 +105,7 @@ async function recordTest(pageRef) {
104
105
  if (!canUsePwPause) {
105
106
  return;
106
107
  }
107
- console.log("[getCodegen] using PlaywrightPauseCodegen");
108
+ logger_1.logger.debug("[getCodegen] using PlaywrightPauseCodegen");
108
109
  const codegen = new for_recorder_1.PlaywrightPauseCodegenForRecorder(async (sources) => {
109
110
  await fileServiceClient.sendCodegenSources(sources);
110
111
  });
@@ -0,0 +1,3 @@
1
+ import Logger from "console-log-level";
2
+ export declare const logger: Logger.Logger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,MAAyB,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,MAAM,eAGjB,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = void 0;
7
+ const console_log_level_1 = __importDefault(require("console-log-level"));
8
+ exports.logger = (0, console_log_level_1.default)({
9
+ prefix: "test-gen",
10
+ level: process.env.LOG_LEVEL || "info",
11
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recorder/index.ts"],"names":[],"mappings":"AAiBA,wBAAsB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,iBA2E3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recorder/index.ts"],"names":[],"mappings":"AAkBA,wBAAsB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,iBAyF3D"}
@@ -10,6 +10,7 @@ const path_1 = __importDefault(require("path"));
10
10
  const utils_1 = require("../agent/browsing/utils");
11
11
  const pw_pause_1 = require("../agent/cua/pw-codegen/pw-pause");
12
12
  const server_1 = require("../file/server");
13
+ const logger_1 = require("../logger");
13
14
  const display_1 = require("./display");
14
15
  const env_variables_1 = require("./env-variables");
15
16
  const request_1 = require("./request");
@@ -20,6 +21,20 @@ async function runRecorder({ name }) {
20
21
  console.log(`Recording for test name: ${name}`);
21
22
  const repoDir = process.cwd();
22
23
  let repoName = "";
24
+ let fileServer = null;
25
+ process.on("SIGINT", async () => {
26
+ try {
27
+ await (0, temp_files_1.deleteTempTestFile)();
28
+ await (0, pw_pause_1.revertToOriginalPwCode)(repoDir);
29
+ if (fileServer) {
30
+ await fileServer.stop();
31
+ }
32
+ }
33
+ catch (error) {
34
+ console.error("Error during cleanup:", error);
35
+ }
36
+ process.exit(0);
37
+ });
23
38
  try {
24
39
  repoName = await (0, validation_1.validatePackageJson)(repoDir);
25
40
  }
@@ -28,12 +43,11 @@ async function runRecorder({ name }) {
28
43
  process.exit(1);
29
44
  }
30
45
  try {
31
- // Prepare playwright for codegen
32
- console.log("[generateTestWithBrowserAgent] Preparing playwright for codegen");
46
+ logger_1.logger.debug("[generateTestWithBrowserAgent] Preparing playwright for codegen");
33
47
  await (0, pw_pause_1.preparePlaywrightForCodegen)(repoDir);
34
48
  }
35
49
  catch (err) {
36
- console.warn("[generateTestWithBrowserAgent] Error preparing playwright for codegen", err);
50
+ logger_1.logger.warn("[generateTestWithBrowserAgent] Error preparing playwright for codegen", err);
37
51
  }
38
52
  const envVariables = await (0, env_variables_1.fetchEnvironmentVariables)(repoName);
39
53
  await (0, temp_files_1.createTempTestFile)();
@@ -41,7 +55,7 @@ async function runRecorder({ name }) {
41
55
  await (0, utils_1.addImportForMethod)(absFilePath, "recordTest");
42
56
  // Start a file service for IPC with the agent (which runs in a different process)
43
57
  const availablePort = await (0, detect_port_1.default)(3030);
44
- const fileServer = new server_1.FileServiceServer({
58
+ fileServer = new server_1.FileServiceServer({
45
59
  port: availablePort,
46
60
  repoDir,
47
61
  updateFile: false,
@@ -63,7 +77,7 @@ async function runRecorder({ name }) {
63
77
  const videoPaths = (0, upload_1.extractVideoAttachments)(repoDir);
64
78
  let attachments = [];
65
79
  if (videoPaths.length === 0) {
66
- console.warn("No video attachments found for temp test");
80
+ logger_1.logger.warn("No video attachments found for temp test");
67
81
  }
68
82
  else {
69
83
  const videoUrls = await (0, upload_1.uploadVideosWithSpinner)(videoPaths, name);
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/recorder/request.ts"],"names":[],"mappings":"AAcA,wBAAsB,wBAAwB,CAAC,EAC7C,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,iBAMA"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/recorder/request.ts"],"names":[],"mappings":"AAaA,wBAAsB,wBAAwB,CAAC,EAC7C,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,iBAMA"}
@@ -5,11 +5,10 @@ const api_client_1 = require("../auth/api-client");
5
5
  const title = (name) => `Add a test: ${name}`;
6
6
  function description(codegenResult, attachments) {
7
7
  return [
8
- `To add this test, refer to the following code that was captured using playwright codegen. Make modifications that you need to make to convert this into a test case that sits well with other tests in this repository.`,
8
+ `To add this test, refer to the following code and videos that were captured using playwright codegen. Make modifications that you need to make to convert this into a test case that sits well with other tests in this repository.`,
9
9
  `Codegen result:`,
10
10
  codegenResult,
11
- `Other attachments:`,
12
- ...attachments,
11
+ ...attachments.map((attachment) => `[[${attachment}]]`),
13
12
  ].join("\n\n");
14
13
  }
15
14
  async function sendToDashboardAsRequest({ repoName, testName, codegenResult, attachments, }) {
@@ -1 +1 @@
1
- {"version":3,"file":"temp-files.d.ts","sourceRoot":"","sources":["../../src/recorder/temp-files.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,kBAoBvC;AAED,wBAAsB,kBAAkB,kBAUvC"}
1
+ {"version":3,"file":"temp-files.d.ts","sourceRoot":"","sources":["../../src/recorder/temp-files.ts"],"names":[],"mappings":"AAKA,wBAAsB,kBAAkB,kBAoBvC;AAED,wBAAsB,kBAAkB,kBAUvC"}
@@ -7,11 +7,12 @@ exports.createTempTestFile = createTempTestFile;
7
7
  exports.deleteTempTestFile = deleteTempTestFile;
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
+ const logger_1 = require("../logger");
10
11
  async function createTempTestFile() {
11
12
  const tempFilePath = path_1.default.join(process.cwd(), "tests", "temp-test.spec.ts");
12
13
  // Check if the temp file already exists
13
14
  if (fs_1.default.existsSync(tempFilePath)) {
14
- console.warn("Temporary test file already exists. Skipping creation.");
15
+ logger_1.logger.warn("Temporary test file already exists. Skipping creation.");
15
16
  return;
16
17
  }
17
18
  // Create a basic test file
@@ -24,16 +25,16 @@ test('temp test', async ({ page }) => {
24
25
  });
25
26
  `;
26
27
  fs_1.default.writeFileSync(tempFilePath, content);
27
- console.log("Temporary test file created:", tempFilePath);
28
+ logger_1.logger.debug("Temporary test file created:", tempFilePath);
28
29
  }
29
30
  async function deleteTempTestFile() {
30
31
  const tempFilePath = path_1.default.join(process.cwd(), "tests", "temp-test.spec.ts");
31
32
  // Check if the temp file exists
32
33
  if (fs_1.default.existsSync(tempFilePath)) {
33
34
  fs_1.default.unlinkSync(tempFilePath);
34
- console.log("Temporary test file deleted:", tempFilePath);
35
+ logger_1.logger.debug("Temporary test file deleted:", tempFilePath);
35
36
  }
36
37
  else {
37
- console.warn("Temporary test file does not exist. Skipping deletion.");
38
+ logger_1.logger.warn("Temporary test file does not exist. Skipping deletion.");
38
39
  }
39
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/recorder/upload.ts"],"names":[],"mappings":"AAcA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBjE;AA4DD,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAe1B"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/recorder/upload.ts"],"names":[],"mappings":"AAcA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBjE;AA4DD,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAc1B"}
@@ -79,7 +79,6 @@ async function uploadVideos(videoPaths, testSlug) {
79
79
  }
80
80
  }
81
81
  async function uploadVideosWithSpinner(videoPaths, testName) {
82
- videoPaths.forEach((videoPath) => console.log(videoPath));
83
82
  const uploadSpinner = (0, ora_1.default)("Uploading video recordings...").start();
84
83
  try {
85
84
  const slugifiedTestName = `${(0, slug_1.slugify)(testName)}-${Math.random().toString(36).substring(2, 8)}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.68.0",
3
+ "version": "0.69.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -42,6 +42,7 @@
42
42
  "@types/sanitize-html": "^2.11.0",
43
43
  "async-retry": "^1.3.3",
44
44
  "commander": "^12.1.0",
45
+ "console-log-level": "^1.4.1",
45
46
  "detect-port": "^1.6.1",
46
47
  "dotenv": "^16.4.5",
47
48
  "eslint": "^8.57.0",
@@ -63,13 +64,14 @@
63
64
  "tsx": "^4.16.2",
64
65
  "typescript": "^5.3.3",
65
66
  "zod": "^3.23.8",
66
- "@empiricalrun/llm": "^0.18.2",
67
+ "@empiricalrun/llm": "^0.19.0",
67
68
  "@empiricalrun/r2-uploader": "^0.3.9",
68
- "@empiricalrun/test-run": "^0.10.3"
69
+ "@empiricalrun/test-run": "^0.10.4"
69
70
  },
70
71
  "devDependencies": {
71
72
  "@playwright/test": "1.53.0",
72
73
  "@types/async-retry": "^1.4.8",
74
+ "@types/console-log-level": "^1.4.5",
73
75
  "@types/detect-port": "^1.3.5",
74
76
  "@types/express": "^4.17.21",
75
77
  "@types/js-levenshtein": "^1.1.3",
@@ -80,7 +82,7 @@
80
82
  "playwright": "1.53.0",
81
83
  "serve-handler": "^6.1.6",
82
84
  "ts-patch": "^3.3.0",
83
- "@empiricalrun/shared-types": "0.5.2"
85
+ "@empiricalrun/shared-types": "0.6.0"
84
86
  },
85
87
  "scripts": {
86
88
  "dev": "tspc --build --watch",
@@ -1 +1 @@
1
- {"root":["./src/index.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.ts","./src/agent/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/api-client.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/index.ts","./src/bin/logger/index.ts","./src/bin/utils/context.ts","./src/bin/utils/index.ts","./src/bin/utils/fs/index.ts","./src/bin/utils/platform/web/index.ts","./src/bin/utils/platform/web/test-files/ts-path-import-validate.ts","./src/bin/utils/scenarios/index.ts","./src/browser-injected-scripts/annotate-elements.spec.ts","./src/constants/index.ts","./src/errors/index.ts","./src/evals/add-scenario-agent.evals.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/infer-master-or-code-agent.evals.ts","./src/evals/master-agent.evals.ts","./src/evals/type.ts","./src/evals/update-scenario-agent.evals.ts","./src/file/client.ts","./src/file/server.ts","./src/human-in-the-loop/cli.ts","./src/human-in-the-loop/index.ts","./src/human-in-the-loop/ipc.ts","./src/page/index.ts","./src/prompts/lib/ts-transformer.ts","./src/recorder/display.ts","./src/recorder/env-variables.ts","./src/recorder/index.ts","./src/recorder/request.ts","./src/recorder/temp-files.ts","./src/recorder/upload.ts","./src/recorder/validation.ts","./src/reporter/index.ts","./src/reporter/lib.ts","./src/session/index.ts","./src/test-build/index.ts","./src/tool-call-service/index.ts","./src/tool-call-service/utils.ts","./src/tools/commit-and-create-pr.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/download-build.ts","./src/tools/list-environments.ts","./src/tools/str_replace_editor.ts","./src/tools/test-gen-browser.ts","./src/tools/test-run.ts","./src/tools/grep/index.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/grep/ripgrep/types.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/uploader/index.ts","./src/uploader/utils.ts","./src/utils/checkpoint.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file-tree.ts","./src/utils/file.ts","./src/utils/git.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts"],"version":"5.8.3"}
1
+ {"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.ts","./src/agent/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/api-client.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/index.ts","./src/bin/setup.ts","./src/bin/logger/index.ts","./src/bin/utils/context.ts","./src/bin/utils/index.ts","./src/bin/utils/fs/index.ts","./src/bin/utils/platform/web/index.ts","./src/bin/utils/platform/web/test-files/ts-path-import-validate.ts","./src/bin/utils/scenarios/index.ts","./src/browser-injected-scripts/annotate-elements.spec.ts","./src/constants/index.ts","./src/errors/index.ts","./src/evals/add-scenario-agent.evals.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/infer-master-or-code-agent.evals.ts","./src/evals/master-agent.evals.ts","./src/evals/type.ts","./src/evals/update-scenario-agent.evals.ts","./src/file/client.ts","./src/file/server.ts","./src/human-in-the-loop/cli.ts","./src/human-in-the-loop/index.ts","./src/human-in-the-loop/ipc.ts","./src/page/index.ts","./src/prompts/lib/ts-transformer.ts","./src/recorder/display.ts","./src/recorder/env-variables.ts","./src/recorder/index.ts","./src/recorder/request.ts","./src/recorder/temp-files.ts","./src/recorder/upload.ts","./src/recorder/validation.ts","./src/reporter/index.ts","./src/reporter/lib.ts","./src/session/index.ts","./src/test-build/index.ts","./src/tool-call-service/index.ts","./src/tool-call-service/utils.ts","./src/tools/commit-and-create-pr.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/download-build.ts","./src/tools/list-environments.ts","./src/tools/str_replace_editor.ts","./src/tools/test-gen-browser.ts","./src/tools/test-run.ts","./src/tools/grep/index.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/grep/ripgrep/types.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/uploader/index.ts","./src/uploader/utils.ts","./src/utils/checkpoint.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file-tree.ts","./src/utils/file.ts","./src/utils/git.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts"],"version":"5.8.3"}