@empiricalrun/test-gen 0.79.3 → 0.79.5
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.
- package/CHANGELOG.md +17 -0
- package/dist/agent/browsing/run.d.ts +1 -1
- package/dist/agent/browsing/run.d.ts.map +1 -1
- package/dist/agent/browsing/utils.d.ts +0 -7
- package/dist/agent/browsing/utils.d.ts.map +1 -1
- package/dist/agent/browsing/utils.js +1 -56
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +21 -2
- package/dist/agent/chat/prompt/pw-utils-docs.d.ts +1 -1
- package/dist/agent/chat/prompt/pw-utils-docs.d.ts.map +1 -1
- package/dist/agent/chat/prompt/pw-utils-docs.js +1 -1
- package/dist/agent/chat/prompt/trace-utils-docs.d.ts +2 -0
- package/dist/agent/chat/prompt/trace-utils-docs.d.ts.map +1 -0
- package/dist/agent/chat/prompt/trace-utils-docs.js +208 -0
- package/dist/agent/code-review/index.d.ts +1 -1
- package/dist/agent/code-review/index.d.ts.map +1 -1
- package/dist/agent/code-review/index.js +4 -4
- package/dist/agent/code-review/{parser.d.ts → xml-parser.d.ts} +1 -1
- package/dist/agent/code-review/xml-parser.d.ts.map +1 -0
- package/dist/agent/code-review/{parser.js → xml-parser.js} +1 -1
- package/dist/agent/fast-triage/index.d.ts.map +1 -1
- package/dist/agent/fast-triage/index.js +31 -3
- package/dist/agent/master/element-annotation.d.ts.map +1 -1
- package/dist/agent/master/element-annotation.js +2 -19
- package/dist/agent/master/run.d.ts +1 -1
- package/dist/agent/master/run.d.ts.map +1 -1
- package/dist/agent/master/run.js +1 -1
- package/dist/bin/index.js +0 -2
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/dashboard/client.d.ts +2 -40
- package/dist/dashboard/client.d.ts.map +1 -1
- package/dist/dashboard/client.js +4 -206
- package/dist/dashboard/index.d.ts +2 -3
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +10 -10
- package/dist/dashboard/tool-response-from-sandbox.d.ts +2 -0
- package/dist/dashboard/tool-response-from-sandbox.d.ts.map +1 -0
- package/dist/dashboard/tool-response-from-sandbox.js +6 -0
- package/dist/dashboard/tool-response.d.ts +1 -4
- package/dist/dashboard/tool-response.d.ts.map +1 -1
- package/dist/dashboard/tool-response.js +5 -86
- package/dist/dashboard/types.d.ts +1 -8
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/dashboard/types.js +4 -14
- package/dist/file/server.d.ts +1 -1
- package/dist/file/server.d.ts.map +1 -1
- package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
- package/dist/file-info/adapters/github/reader.js +9 -3
- package/dist/generate-summary/generate-error-stack-summary.js +1 -4
- package/dist/generate-summary/generate-failed-step-screenshot-diff-summary.d.ts.map +1 -1
- package/dist/generate-summary/generate-failed-step-screenshot-diff-summary.js +8 -8
- package/dist/generate-summary/generate-grouped-summary.js +1 -4
- package/dist/generate-summary/merge-summary.js +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/recorder/index.d.ts.map +1 -1
- package/dist/recorder/index.js +2 -2
- package/dist/telemetry/index.d.ts +3 -3
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +8 -5
- package/dist/tools/analyse-video/index.js +1 -1
- package/dist/tools/definitions/publish-markdown-report.d.ts +8 -0
- package/dist/tools/definitions/publish-markdown-report.d.ts.map +1 -0
- package/dist/tools/definitions/publish-markdown-report.js +29 -0
- package/dist/tools/diagnosis-fetcher.d.ts +5 -0
- package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
- package/dist/tools/diagnosis-fetcher.js +17 -12
- package/dist/tools/executor/index.d.ts.map +1 -1
- package/dist/tools/executor/index.js +2 -2
- package/dist/tools/fetch-file/index.d.ts.map +1 -1
- package/dist/tools/fetch-file/index.js +11 -10
- package/dist/tools/fetch-file/utils.d.ts +13 -1
- package/dist/tools/fetch-file/utils.d.ts.map +1 -1
- package/dist/tools/fetch-file/utils.js +44 -118
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -5
- package/dist/tools/issues-v1/index.d.ts +0 -2
- package/dist/tools/issues-v1/index.d.ts.map +1 -1
- package/dist/tools/issues-v1/index.js +1 -5
- package/dist/tools/publish-markdown-report/index.d.ts +3 -0
- package/dist/tools/publish-markdown-report/index.d.ts.map +1 -0
- package/dist/tools/publish-markdown-report/index.js +196 -0
- package/dist/tools/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/test-gen-browser.js +4 -4
- package/dist/tools/trace-dot-zip/index.d.ts.map +1 -1
- package/dist/tools/trace-dot-zip/index.js +19 -9
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +2 -6
- package/package.json +4 -11
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/agent/code-review/parser.d.ts.map +0 -1
- package/dist/agent/cua/computer.d.ts +0 -14
- package/dist/agent/cua/computer.d.ts.map +0 -1
- package/dist/agent/cua/computer.js +0 -191
- package/dist/agent/cua/index.d.ts +0 -22
- package/dist/agent/cua/index.d.ts.map +0 -1
- package/dist/agent/cua/index.js +0 -254
- package/dist/agent/cua/model.d.ts +0 -25
- package/dist/agent/cua/model.d.ts.map +0 -1
- package/dist/agent/cua/model.js +0 -66
- package/dist/agent/cua/pw-codegen/element-from-point.d.ts +0 -10
- package/dist/agent/cua/pw-codegen/element-from-point.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/element-from-point.js +0 -135
- package/dist/agent/cua/pw-codegen/factory.d.ts +0 -15
- package/dist/agent/cua/pw-codegen/factory.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/factory.js +0 -59
- package/dist/agent/cua/pw-codegen/index.d.ts +0 -7
- package/dist/agent/cua/pw-codegen/index.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/index.js +0 -14
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.d.ts +0 -43
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.js +0 -250
- package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.d.ts +0 -14
- package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.js +0 -88
- package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts +0 -17
- package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/index.js +0 -117
- package/dist/agent/cua/pw-codegen/pw-pause/ipc.d.ts +0 -3
- package/dist/agent/cua/pw-codegen/pw-pause/ipc.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/ipc.js +0 -13
- package/dist/agent/cua/pw-codegen/pw-pause/patch.d.ts +0 -24
- package/dist/agent/cua/pw-codegen/pw-pause/patch.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/patch.js +0 -197
- package/dist/agent/cua/pw-codegen/pw-pause/types.d.ts +0 -14
- package/dist/agent/cua/pw-codegen/pw-pause/types.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/types.js +0 -2
- package/dist/agent/cua/pw-codegen/pw-pause/utils.d.ts +0 -2
- package/dist/agent/cua/pw-codegen/pw-pause/utils.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/pw-pause/utils.js +0 -6
- package/dist/agent/cua/pw-codegen/types.d.ts +0 -47
- package/dist/agent/cua/pw-codegen/types.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/types.js +0 -2
- package/dist/agent/cua/pw-codegen/version.d.ts +0 -25
- package/dist/agent/cua/pw-codegen/version.d.ts.map +0 -1
- package/dist/agent/cua/pw-codegen/version.js +0 -86
- package/dist/agent/master/icon-descriptor/index.d.ts +0 -22
- package/dist/agent/master/icon-descriptor/index.d.ts.map +0 -1
- package/dist/agent/master/icon-descriptor/index.js +0 -249
- package/dist/agent/master/icon-descriptor/normalize-svg.d.ts +0 -2
- package/dist/agent/master/icon-descriptor/normalize-svg.d.ts.map +0 -1
- package/dist/agent/master/icon-descriptor/normalize-svg.js +0 -247
- package/dist/tools/issues-v1/create-issue.d.ts +0 -3
- package/dist/tools/issues-v1/create-issue.d.ts.map +0 -1
- package/dist/tools/issues-v1/create-issue.js +0 -72
- package/dist/tools/issues-v1/update-issue.d.ts +0 -3
- package/dist/tools/issues-v1/update-issue.d.ts.map +0 -1
- package/dist/tools/issues-v1/update-issue.js +0 -74
- package/dist/trace-utils/cli.d.ts +0 -3
- package/dist/trace-utils/cli.d.ts.map +0 -1
- package/dist/trace-utils/cli.js +0 -302
- package/dist/trace-utils/console.d.ts +0 -11
- package/dist/trace-utils/console.d.ts.map +0 -1
- package/dist/trace-utils/console.js +0 -74
- package/dist/trace-utils/dom-snapshot.d.ts +0 -19
- package/dist/trace-utils/dom-snapshot.d.ts.map +0 -1
- package/dist/trace-utils/dom-snapshot.js +0 -328
- package/dist/trace-utils/index.d.ts +0 -12
- package/dist/trace-utils/index.d.ts.map +0 -1
- package/dist/trace-utils/index.js +0 -28
- package/dist/trace-utils/network.d.ts +0 -16
- package/dist/trace-utils/network.d.ts.map +0 -1
- package/dist/trace-utils/network.js +0 -178
- package/dist/trace-utils/normalize-trace-url.d.ts +0 -2
- package/dist/trace-utils/normalize-trace-url.d.ts.map +0 -1
- package/dist/trace-utils/normalize-trace-url.js +0 -15
- package/dist/trace-utils/screenshots.d.ts +0 -24
- package/dist/trace-utils/screenshots.d.ts.map +0 -1
- package/dist/trace-utils/screenshots.js +0 -197
- package/dist/trace-utils/steps.d.ts +0 -10
- package/dist/trace-utils/steps.d.ts.map +0 -1
- package/dist/trace-utils/steps.js +0 -126
- package/dist/trace-utils/types.d.ts +0 -51
- package/dist/trace-utils/types.d.ts.map +0 -1
- package/dist/trace-utils/types.js +0 -2
- package/dist/utils/playwright-report-parser.d.ts +0 -2
- package/dist/utils/playwright-report-parser.d.ts.map +0 -1
- package/dist/utils/playwright-report-parser.js +0 -10
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
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/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/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/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/
|
|
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/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/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/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/chat/prompt/trace-utils-docs.ts","./src/agent/code-review/index.ts","./src/agent/code-review/types.ts","./src/agent/code-review/xml-parser.ts","./src/agent/code-review/executor/index.ts","./src/agent/fast-triage/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/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/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/agent/triage/index.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/environments.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/dashboard/client.ts","./src/dashboard/index.ts","./src/dashboard/tool-response-from-sandbox.ts","./src/dashboard/tool-response.ts","./src/dashboard/totp.ts","./src/dashboard/types.ts","./src/errors/index.ts","./src/file/client.ts","./src/file/server.ts","./src/file-info/index.ts","./src/file-info/adapters/file-system/index.ts","./src/file-info/adapters/file-system/reader.ts","./src/file-info/adapters/github/index.ts","./src/file-info/adapters/github/reader.ts","./src/generate-summary/frame-sampling.ts","./src/generate-summary/generate-error-stack-summary.ts","./src/generate-summary/generate-failed-step-screenshot-diff-summary.ts","./src/generate-summary/generate-grouped-summary.ts","./src/generate-summary/merge-summary.ts","./src/generate-summary/pick-videos-for-comparison.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/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/telemetry/index.ts","./src/test-build/index.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/index.ts","./src/tools/list-environments.ts","./src/tools/run-test.ts","./src/tools/test-gen-browser.ts","./src/tools/analyse-video/index.ts","./src/tools/create-pull-request/index.ts","./src/tools/create-pull-request/utils.ts","./src/tools/definitions/analyse-video.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/grep.ts","./src/tools/definitions/list-tests-and-projects.ts","./src/tools/definitions/merge-conflicts.ts","./src/tools/definitions/publish-markdown-report.ts","./src/tools/definitions/rename-file.ts","./src/tools/definitions/run-test.ts","./src/tools/definitions/safe-bash.ts","./src/tools/definitions/str_replace_editor.ts","./src/tools/definitions/test-gen-browser.ts","./src/tools/definitions/trace-dot-zip.ts","./src/tools/definitions/upgrade-packages.ts","./src/tools/definitions/utils.ts","./src/tools/delete-file/index.ts","./src/tools/download-build/index.ts","./src/tools/executor/base.ts","./src/tools/executor/index.ts","./src/tools/executor/types.ts","./src/tools/executor/utils/checkpoint.ts","./src/tools/executor/utils/git.ts","./src/tools/executor/utils/index.ts","./src/tools/executor/utils/pr-description.ts","./src/tools/fetch-file/index.ts","./src/tools/fetch-file/utils.ts","./src/tools/fetch-session-diff/index.ts","./src/tools/file-operations/create.ts","./src/tools/file-operations/index.ts","./src/tools/file-operations/insert.ts","./src/tools/file-operations/replace.ts","./src/tools/file-operations/shared/helpers.ts","./src/tools/file-operations/view/index.ts","./src/tools/firecrawl-scrape/index.ts","./src/tools/grep/index.ts","./src/tools/grep/types.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/issues-v1/index.ts","./src/tools/issues-v1/list-issues.ts","./src/tools/issues-v1/utils.ts","./src/tools/issues-v2/create-issue.ts","./src/tools/issues-v2/set-issue-description.ts","./src/tools/issues-v2/update-issue.ts","./src/tools/list-tests-and-projects/index.ts","./src/tools/merge-conflicts/index.ts","./src/tools/publish-markdown-report/index.ts","./src/tools/rename-file/index.ts","./src/tools/safe-bash/index.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/trace-dot-zip/index.ts","./src/tools/trace-dot-zip/types.ts","./src/tools/trace-dot-zip/utils/console-trace.ts","./src/tools/trace-dot-zip/utils/extract-screenshots.ts","./src/tools/trace-dot-zip/utils/extract-steps.ts","./src/tools/trace-dot-zip/utils/extract-zip.ts","./src/tools/trace-dot-zip/utils/network-trace.ts","./src/tools/triage-summary/index.ts","./src/tools/triage-summary/types.ts","./src/tools/triage-summary/utils.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/queue.ts","./src/tools/utils/validate-schema.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/utils/SQSClient.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.ts","./src/utils/hash.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/model.ts","./src/utils/playwright-test-id.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts","./src/utils/url-validation.ts","./src/utils/dedup/dedup-image.ts","./src/utils/dedup/find-threshold.ts","./src/video-core/index.ts","./src/video-core/model-limits.ts","./src/video-core/storage-manager.ts","./src/video-core/types.ts","./src/video-core/utils.ts"],"version":"5.8.3"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAchE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAmFvE"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ResponseComputerToolCall } from "openai/resources/responses/responses.mjs";
|
|
2
|
-
import type { Page } from "playwright";
|
|
3
|
-
import { BasePlaywrightCodegen } from "./pw-codegen/types";
|
|
4
|
-
type OpenAIComputerAction = ResponseComputerToolCall.Click | ResponseComputerToolCall.DoubleClick | ResponseComputerToolCall.Drag | ResponseComputerToolCall.Keypress | ResponseComputerToolCall.Move | ResponseComputerToolCall.Screenshot | ResponseComputerToolCall.Scroll | ResponseComputerToolCall.Type | ResponseComputerToolCall.Wait;
|
|
5
|
-
export declare function getScreenshot(page: Page): Promise<string>;
|
|
6
|
-
export declare function executeModelAction(page: Page, action: OpenAIComputerAction | {
|
|
7
|
-
type: "goto";
|
|
8
|
-
url: string;
|
|
9
|
-
}, codegen: BasePlaywrightCodegen): Promise<{
|
|
10
|
-
actionSummary: string;
|
|
11
|
-
actionCode: string;
|
|
12
|
-
}>;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=computer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computer.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/computer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,KAAK,oBAAoB,GACrB,wBAAwB,CAAC,KAAK,GAC9B,wBAAwB,CAAC,WAAW,GACpC,wBAAwB,CAAC,IAAI,GAC7B,wBAAwB,CAAC,QAAQ,GACjC,wBAAwB,CAAC,IAAI,GAC7B,wBAAwB,CAAC,UAAU,GACnC,wBAAwB,CAAC,MAAM,GAC/B,wBAAwB,CAAC,IAAI,GAC7B,wBAAwB,CAAC,IAAI,CAAC;AAElC,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,mBAO7C;AAgCD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAC5D,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAoKD"}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getScreenshot = getScreenshot;
|
|
4
|
-
exports.executeModelAction = executeModelAction;
|
|
5
|
-
async function getScreenshot(page) {
|
|
6
|
-
// We override the `scale` option to "css" to ensure the screenshot is
|
|
7
|
-
// consistent with the viewport size. Without this, the screenshot dimensions
|
|
8
|
-
// are viewport size * device pixel ratio (= 3 on iPhone device emulation).
|
|
9
|
-
// Docs: https://playwright.dev/docs/api/class-page#page-screenshot-option-scale
|
|
10
|
-
const screenshotBytes = await page.screenshot({ scale: "css" });
|
|
11
|
-
return Buffer.from(screenshotBytes).toString("base64");
|
|
12
|
-
}
|
|
13
|
-
const CUA_KEY_TO_PLAYWRIGHT_KEY = {
|
|
14
|
-
"/": "Divide",
|
|
15
|
-
"\\": "Backslash",
|
|
16
|
-
alt: "Alt",
|
|
17
|
-
arrowdown: "ArrowDown",
|
|
18
|
-
arrowleft: "ArrowLeft",
|
|
19
|
-
arrowright: "ArrowRight",
|
|
20
|
-
arrowup: "ArrowUp",
|
|
21
|
-
backspace: "Backspace",
|
|
22
|
-
capslock: "CapsLock",
|
|
23
|
-
// "cmd" and "ctrl" are both mapped to "ControlOrMeta" for platform
|
|
24
|
-
// agnostic behavior, as opposed to cmd: "Meta" and ctrl: "Control"
|
|
25
|
-
cmd: "ControlOrMeta",
|
|
26
|
-
ctrl: "ControlOrMeta",
|
|
27
|
-
delete: "Delete",
|
|
28
|
-
end: "End",
|
|
29
|
-
enter: "Enter",
|
|
30
|
-
esc: "Escape",
|
|
31
|
-
home: "Home",
|
|
32
|
-
insert: "Insert",
|
|
33
|
-
option: "Alt",
|
|
34
|
-
pagedown: "PageDown",
|
|
35
|
-
pageup: "PageUp",
|
|
36
|
-
shift: "Shift",
|
|
37
|
-
space: " ",
|
|
38
|
-
super: "Meta",
|
|
39
|
-
tab: "Tab",
|
|
40
|
-
win: "Meta",
|
|
41
|
-
};
|
|
42
|
-
async function executeModelAction(page, action, codegen) {
|
|
43
|
-
const actionType = action.type;
|
|
44
|
-
let actionCode = "";
|
|
45
|
-
let actionSummary = "";
|
|
46
|
-
try {
|
|
47
|
-
// For every action, this method:
|
|
48
|
-
// 1. Record the action in codegen
|
|
49
|
-
// -> This allows codegen to find locators for the element
|
|
50
|
-
// before the action is executed - execution can be a destructive
|
|
51
|
-
// operation that modifies the DOM
|
|
52
|
-
// 2. Execute the action
|
|
53
|
-
// 3. Add to action summary
|
|
54
|
-
// 4. Add to action code
|
|
55
|
-
switch (actionType) {
|
|
56
|
-
case "goto": {
|
|
57
|
-
const { url } = action;
|
|
58
|
-
await codegen.recordAction({ type: "goto", url });
|
|
59
|
-
await page.goto(url);
|
|
60
|
-
actionSummary = `Navigated page to ${url}`;
|
|
61
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
case "click": {
|
|
65
|
-
const { x, y, button = "left" } = action;
|
|
66
|
-
console.log(`Action: click at (${x}, ${y}) with button '${button}'`);
|
|
67
|
-
let pwButton = undefined;
|
|
68
|
-
if (button === "left" || button === "right") {
|
|
69
|
-
pwButton = button;
|
|
70
|
-
}
|
|
71
|
-
else if (button === "wheel") {
|
|
72
|
-
pwButton = "middle";
|
|
73
|
-
}
|
|
74
|
-
if (pwButton) {
|
|
75
|
-
await codegen.recordAction({ type: "click", x, y });
|
|
76
|
-
await page.mouse.click(x, y, { button: pwButton });
|
|
77
|
-
actionSummary = `Click at (${x}, ${y}) with button '${button}'`;
|
|
78
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
79
|
-
}
|
|
80
|
-
if (button === "back" || button === "forward") {
|
|
81
|
-
if (button === "back") {
|
|
82
|
-
await codegen.recordAction({ type: "back" });
|
|
83
|
-
await page.goBack();
|
|
84
|
-
actionSummary = `Navigated page back`;
|
|
85
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
86
|
-
}
|
|
87
|
-
else if (button === "forward") {
|
|
88
|
-
await codegen.recordAction({ type: "forward" });
|
|
89
|
-
await page.goForward();
|
|
90
|
-
actionSummary = `Navigated page forward`;
|
|
91
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
case "double_click": {
|
|
97
|
-
const { x, y } = action;
|
|
98
|
-
console.log(`Action: doubleclick at (${x}, ${y})`);
|
|
99
|
-
await codegen.recordAction({ type: "doubleclick", x, y });
|
|
100
|
-
await page.mouse.dblclick(x, y, { button: "left" });
|
|
101
|
-
actionSummary = `Double click at (${x}, ${y})`;
|
|
102
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
case "type": {
|
|
106
|
-
const { text } = action;
|
|
107
|
-
console.log(`Action: type text '${text}'`);
|
|
108
|
-
await codegen.recordAction({ type: "type", text });
|
|
109
|
-
await page.keyboard.type(text);
|
|
110
|
-
actionSummary = `Type text '${text}'`;
|
|
111
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
case "move": {
|
|
115
|
-
const { x, y } = action;
|
|
116
|
-
console.log(`Action: mouse move to (${x}, ${y})`);
|
|
117
|
-
await codegen.recordAction({ type: "move", x, y });
|
|
118
|
-
await page.mouse.move(x, y);
|
|
119
|
-
actionSummary = `Mouse move to (${x}, ${y})`;
|
|
120
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
case "drag": {
|
|
124
|
-
const { path } = action;
|
|
125
|
-
console.log(`Action: drag along path ${path}`);
|
|
126
|
-
actionSummary = `Drag along path ${path}`;
|
|
127
|
-
if (!path || path.length === 0) {
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
await codegen.recordAction({ type: "drag", path });
|
|
131
|
-
await page.mouse.move(path[0].x, path[0].y);
|
|
132
|
-
await page.mouse.down();
|
|
133
|
-
for (let i = 1; i < path.length; i++) {
|
|
134
|
-
await page.mouse.move(path[i].x, path[i].y);
|
|
135
|
-
}
|
|
136
|
-
await page.mouse.up();
|
|
137
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
case "scroll": {
|
|
141
|
-
const { x, y, scroll_x, scroll_y } = action;
|
|
142
|
-
console.log(`Action: scroll at (${x}, ${y}) with offsets (scroll_x=${scroll_x}, scroll_y=${scroll_y})`);
|
|
143
|
-
await codegen.recordAction({
|
|
144
|
-
type: "scroll",
|
|
145
|
-
x,
|
|
146
|
-
y,
|
|
147
|
-
scroll_x,
|
|
148
|
-
scroll_y,
|
|
149
|
-
});
|
|
150
|
-
await page.mouse.move(x, y);
|
|
151
|
-
await page.mouse.wheel(scroll_x, scroll_y);
|
|
152
|
-
actionSummary = `Scroll at (${x}, ${y}) with offsets (scroll_x=${scroll_x}, scroll_y=${scroll_y})`;
|
|
153
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
case "keypress": {
|
|
157
|
-
const { keys } = action;
|
|
158
|
-
const mappedKeys = keys.map((k) => {
|
|
159
|
-
return CUA_KEY_TO_PLAYWRIGHT_KEY[k.toLowerCase()] || k;
|
|
160
|
-
});
|
|
161
|
-
await codegen.recordAction({ type: "keypress", keys: mappedKeys });
|
|
162
|
-
const mappedKey = mappedKeys.join("+"); // ["CTRL", "A"] becomes ControlOrMeta+A
|
|
163
|
-
console.log(`Action: keypress for keys ${keys} -> '${mappedKey}'`);
|
|
164
|
-
await page.keyboard.press(mappedKey);
|
|
165
|
-
actionSummary = `Keypress for keys ${keys} (mapped to '${mappedKey}' for Playwright)`;
|
|
166
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
case "wait": {
|
|
170
|
-
console.log(`Action: wait`);
|
|
171
|
-
await codegen.recordAction({ type: "wait" });
|
|
172
|
-
await page.waitForTimeout(2000);
|
|
173
|
-
actionSummary = `Wait for 2 seconds`;
|
|
174
|
-
actionCode = await codegen.getCodeForLastAction();
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
case "screenshot": {
|
|
178
|
-
// Nothing to do as screenshot is taken at each turn
|
|
179
|
-
console.log(`Action: screenshot`);
|
|
180
|
-
actionSummary = `Screenshot`;
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
default:
|
|
184
|
-
console.log("Unrecognized action:", action);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
console.error(`Error handling action ${action.type}: ${err.message || err.toString()}`);
|
|
189
|
-
}
|
|
190
|
-
return { actionSummary, actionCode };
|
|
191
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { TraceClient } from "@empiricalrun/llm";
|
|
2
|
-
import { ArtifactInputData, Usage } from "@empiricalrun/shared-types/chat-agent";
|
|
3
|
-
import { Page } from "playwright";
|
|
4
|
-
export type BrowserAgentResult = Array<{
|
|
5
|
-
type: "text";
|
|
6
|
-
text: string;
|
|
7
|
-
} | {
|
|
8
|
-
type: "screenshot";
|
|
9
|
-
screenshot: ArtifactInputData;
|
|
10
|
-
}>;
|
|
11
|
-
export declare function createTestUsingComputerUseAgent({ page, task, trace, prefersElementFromPointCodegen, }: {
|
|
12
|
-
page: Page;
|
|
13
|
-
task: string;
|
|
14
|
-
trace?: TraceClient;
|
|
15
|
-
prefersElementFromPointCodegen?: boolean;
|
|
16
|
-
}): Promise<{
|
|
17
|
-
code: string;
|
|
18
|
-
importPaths: string[];
|
|
19
|
-
result: BrowserAgentResult;
|
|
20
|
-
usage: Usage;
|
|
21
|
-
}>;
|
|
22
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/agent/cua/index.js
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createTestUsingComputerUseAgent = createTestUsingComputerUseAgent;
|
|
7
|
-
const llm_1 = require("@empiricalrun/llm");
|
|
8
|
-
const openai_1 = __importDefault(require("openai"));
|
|
9
|
-
const logger_1 = require("../../logger");
|
|
10
|
-
const computer_1 = require("./computer");
|
|
11
|
-
const model_1 = require("./model");
|
|
12
|
-
const element_from_point_1 = require("./pw-codegen/element-from-point");
|
|
13
|
-
const factory_1 = require("./pw-codegen/factory");
|
|
14
|
-
const MAX_ITERATIONS = 10;
|
|
15
|
-
async function getCodegenInstance(prefersElementFromPoint) {
|
|
16
|
-
if (prefersElementFromPoint) {
|
|
17
|
-
logger_1.logger.debug("[getCodegen] using ElementFromPointCodegen (preferred)");
|
|
18
|
-
return new element_from_point_1.ElementFromPointCodegen();
|
|
19
|
-
}
|
|
20
|
-
const repoDir = process.cwd();
|
|
21
|
-
const { codegen, approach, version } = await (0, factory_1.createPlaywrightCodegen)(repoDir);
|
|
22
|
-
logger_1.logger.debug(`[getCodegen] using ${approach} codegen for Playwright ${version.full}`);
|
|
23
|
-
// Prepare if needed (patch-based approach requires file modifications)
|
|
24
|
-
await (0, factory_1.prepareCodegenIfNeeded)(repoDir, approach);
|
|
25
|
-
return codegen;
|
|
26
|
-
}
|
|
27
|
-
function artifact(screenshot, name) {
|
|
28
|
-
return {
|
|
29
|
-
name: `${name}`,
|
|
30
|
-
contentType: "image/png",
|
|
31
|
-
data: Buffer.from(screenshot, "base64"),
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
async function tabsSummary(pages) {
|
|
35
|
-
let lines = [];
|
|
36
|
-
for (const p of pages) {
|
|
37
|
-
lines.push(` - ${p.url()} - ${await p.title()}`);
|
|
38
|
-
}
|
|
39
|
-
return lines.join("\n");
|
|
40
|
-
}
|
|
41
|
-
async function stateOfTheBrowser(page) {
|
|
42
|
-
const browserContext = page.context();
|
|
43
|
-
const pages = browserContext.pages();
|
|
44
|
-
const allPagesSummary = await tabsSummary(pages);
|
|
45
|
-
return `
|
|
46
|
-
## Browser window
|
|
47
|
-
|
|
48
|
-
### Current page (what you are working on)
|
|
49
|
-
Current page URL: ${page.url()}
|
|
50
|
-
Current page title: ${await page.title()}
|
|
51
|
-
|
|
52
|
-
### All pages
|
|
53
|
-
Number of open pages: ${pages.length}
|
|
54
|
-
|
|
55
|
-
URLs and titles:
|
|
56
|
-
${allPagesSummary}`;
|
|
57
|
-
}
|
|
58
|
-
async function createTestUsingComputerUseAgent({ page, task, trace, prefersElementFromPointCodegen = false, }) {
|
|
59
|
-
const codegen = await getCodegenInstance(prefersElementFromPointCodegen);
|
|
60
|
-
await codegen.initialize(page);
|
|
61
|
-
const screenshot = await (0, computer_1.getScreenshot)(page);
|
|
62
|
-
const initialArtifact = artifact(screenshot, "Initial screen");
|
|
63
|
-
let result = [
|
|
64
|
-
{ type: "screenshot", screenshot: initialArtifact },
|
|
65
|
-
];
|
|
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
|
-
};
|
|
72
|
-
const viewport = page.viewportSize();
|
|
73
|
-
let screenWidth = viewport?.width || 1280;
|
|
74
|
-
let screenHeight = viewport?.height || 720;
|
|
75
|
-
const openAIClient = trace
|
|
76
|
-
? (0, llm_1.observeOpenAI)(new openai_1.default(), {
|
|
77
|
-
generationName: `computer-use-agent`,
|
|
78
|
-
parent: trace,
|
|
79
|
-
})
|
|
80
|
-
: new openai_1.default();
|
|
81
|
-
let response = await (0, model_1.callComputerUseModel)({
|
|
82
|
-
input: [
|
|
83
|
-
{
|
|
84
|
-
role: "user",
|
|
85
|
-
content: [
|
|
86
|
-
{
|
|
87
|
-
type: "input_text",
|
|
88
|
-
text: `Task to execute: ${task}\n\n${await stateOfTheBrowser(page)}`,
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
type: "input_image",
|
|
92
|
-
image_url: `data:image/png;base64,${screenshot}`,
|
|
93
|
-
detail: "high",
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
screenWidth,
|
|
99
|
-
screenHeight,
|
|
100
|
-
openAIClient,
|
|
101
|
-
});
|
|
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;
|
|
108
|
-
let isTaskDone = false;
|
|
109
|
-
let generatedCode = "";
|
|
110
|
-
let iterationIndex = 0;
|
|
111
|
-
while (!isTaskDone && iterationIndex < MAX_ITERATIONS) {
|
|
112
|
-
result.push({
|
|
113
|
-
type: "text",
|
|
114
|
-
text: `# Agent iteration ${iterationIndex}`,
|
|
115
|
-
});
|
|
116
|
-
iterationIndex++;
|
|
117
|
-
const computerCalls = response.output.filter((item) => item.type === "computer_call");
|
|
118
|
-
const functionCalls = response.output.filter((item) => item.type === "function_call");
|
|
119
|
-
if (computerCalls.length === 0 && functionCalls.length === 0) {
|
|
120
|
-
const assistantOutput = response.output.find((item) => item.type === "message");
|
|
121
|
-
if (assistantOutput) {
|
|
122
|
-
const content = assistantOutput.content.find((item) => item.type === "output_text");
|
|
123
|
-
if (content && "text" in content) {
|
|
124
|
-
// TODO: This ignores `ResponseOutputRefusal` type (refusal from assistant)
|
|
125
|
-
result.push({
|
|
126
|
-
type: "text",
|
|
127
|
-
text: `Agent summary: ${content.text}`,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
isTaskDone = true;
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
const reasoning = response.output.find(() => (item) => item.type === "reasoning");
|
|
135
|
-
if (reasoning) {
|
|
136
|
-
const reasoningItem = reasoning;
|
|
137
|
-
const summaryText = reasoningItem.summary?.find((item) => item.type === "summary_text")?.text;
|
|
138
|
-
if (summaryText) {
|
|
139
|
-
result.push({
|
|
140
|
-
type: "text",
|
|
141
|
-
text: `Action reasoning: ${summaryText}`,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// We expect either a function call or a computer call in the response.
|
|
146
|
-
let toolCallOutput;
|
|
147
|
-
let executedActionSummary = "";
|
|
148
|
-
// We are assuming only one function call per response
|
|
149
|
-
const functionCall = functionCalls[0];
|
|
150
|
-
if (functionCall) {
|
|
151
|
-
const args = JSON.parse(functionCall.arguments);
|
|
152
|
-
const { actionSummary, actionCode } = await (0, computer_1.executeModelAction)(page, { type: "goto", url: args.url }, codegen);
|
|
153
|
-
executedActionSummary = actionSummary;
|
|
154
|
-
result.push({
|
|
155
|
-
type: "text",
|
|
156
|
-
text: `Action executed: ${actionSummary}`,
|
|
157
|
-
});
|
|
158
|
-
if (actionCode) {
|
|
159
|
-
result.push({
|
|
160
|
-
type: "text",
|
|
161
|
-
text: `Generated code: ${actionCode}`,
|
|
162
|
-
});
|
|
163
|
-
generatedCode += actionCode;
|
|
164
|
-
}
|
|
165
|
-
toolCallOutput = {
|
|
166
|
-
type: "function_call_output",
|
|
167
|
-
call_id: functionCall.call_id,
|
|
168
|
-
output: `Navigating page to ${args.url}`,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
else if (computerCalls.length >= 1) {
|
|
172
|
-
// We expect at most one computer call per response.
|
|
173
|
-
const computerCall = computerCalls[0];
|
|
174
|
-
const action = computerCall.action;
|
|
175
|
-
// Execute the action and take a screenshot
|
|
176
|
-
const { actionSummary, actionCode } = await (0, computer_1.executeModelAction)(page, action, codegen);
|
|
177
|
-
executedActionSummary = actionSummary;
|
|
178
|
-
result.push({
|
|
179
|
-
type: "text",
|
|
180
|
-
text: `Action executed: ${actionSummary}`,
|
|
181
|
-
});
|
|
182
|
-
result.push({
|
|
183
|
-
type: "text",
|
|
184
|
-
text: `Generated code: ${actionCode}`,
|
|
185
|
-
});
|
|
186
|
-
generatedCode += actionCode;
|
|
187
|
-
// Allow time for changes to take effect.
|
|
188
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
189
|
-
const screenshot = await (0, computer_1.getScreenshot)(page);
|
|
190
|
-
result.push({
|
|
191
|
-
type: "screenshot",
|
|
192
|
-
screenshot: artifact(screenshot, actionSummary),
|
|
193
|
-
});
|
|
194
|
-
toolCallOutput = {
|
|
195
|
-
type: "computer_call_output",
|
|
196
|
-
call_id: computerCall.call_id,
|
|
197
|
-
output: {
|
|
198
|
-
type: "computer_screenshot",
|
|
199
|
-
image_url: `data:image/png;base64,${screenshot}`,
|
|
200
|
-
},
|
|
201
|
-
acknowledged_safety_checks: computerCall.pending_safety_checks,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
throw new Error("No tool call found in response.");
|
|
206
|
-
}
|
|
207
|
-
response = await (0, model_1.callComputerUseModel)({
|
|
208
|
-
previousResponseId: response.id,
|
|
209
|
-
input: [
|
|
210
|
-
toolCallOutput,
|
|
211
|
-
{
|
|
212
|
-
role: "user",
|
|
213
|
-
content: [
|
|
214
|
-
{
|
|
215
|
-
type: "input_text",
|
|
216
|
-
text: `Action executed: ${executedActionSummary || "None"}\n\n${await stateOfTheBrowser(page)}`,
|
|
217
|
-
},
|
|
218
|
-
],
|
|
219
|
-
},
|
|
220
|
-
],
|
|
221
|
-
screenWidth,
|
|
222
|
-
screenHeight,
|
|
223
|
-
openAIClient,
|
|
224
|
-
});
|
|
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;
|
|
231
|
-
}
|
|
232
|
-
if (!isTaskDone) {
|
|
233
|
-
const logMessage = `Max iteration limit hit: Task not done after ${MAX_ITERATIONS} iterations`;
|
|
234
|
-
console.log(logMessage);
|
|
235
|
-
result.push({
|
|
236
|
-
type: "text",
|
|
237
|
-
text: logMessage,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
trace?.update({ output: { result } });
|
|
241
|
-
const cost = (0, model_1.tokensToCost)(tokensUsed);
|
|
242
|
-
return {
|
|
243
|
-
result,
|
|
244
|
-
code: generatedCode,
|
|
245
|
-
importPaths: [],
|
|
246
|
-
usage: {
|
|
247
|
-
tokens: {
|
|
248
|
-
input: tokensUsed.input_tokens,
|
|
249
|
-
output: tokensUsed.output_tokens,
|
|
250
|
-
},
|
|
251
|
-
cost,
|
|
252
|
-
},
|
|
253
|
-
};
|
|
254
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import OpenAI from "openai";
|
|
2
|
-
import { Response, ResponseInputItem } from "openai/resources/responses/responses.mjs";
|
|
3
|
-
export declare const CUA_MODEL = "computer-use-preview-2025-03-11";
|
|
4
|
-
export declare function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }: {
|
|
5
|
-
input: ResponseInputItem[];
|
|
6
|
-
previousResponseId?: string;
|
|
7
|
-
screenWidth: number;
|
|
8
|
-
screenHeight: number;
|
|
9
|
-
openAIClient: OpenAI;
|
|
10
|
-
}): Promise<Response>;
|
|
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
|
-
};
|
|
20
|
-
}): {
|
|
21
|
-
input: number;
|
|
22
|
-
output: number;
|
|
23
|
-
total: number;
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/agent/cua/model.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CUA_MODEL = void 0;
|
|
4
|
-
exports.callComputerUseModel = callComputerUseModel;
|
|
5
|
-
exports.tokensToCost = tokensToCost;
|
|
6
|
-
const llm_1 = require("@empiricalrun/llm");
|
|
7
|
-
exports.CUA_MODEL = "computer-use-preview-2025-03-11";
|
|
8
|
-
const INSTRUCTIONS = `You will be asked to execute some actions in a browser context.
|
|
9
|
-
Don't ask the user for confirmations - just execute the actions.
|
|
10
|
-
|
|
11
|
-
For example, if the user message says "Click on Submit button", then
|
|
12
|
-
you click on the submit button -- even if it looks like a scary action.
|
|
13
|
-
|
|
14
|
-
If you have been asked to retrieve text or verify something on the UI, then communicate
|
|
15
|
-
that in your responses so that the user can see your thinking process in its entirety.
|
|
16
|
-
|
|
17
|
-
Your work is limited to the current browser page (tab) that you are provided with. You will
|
|
18
|
-
have to conclude your actions before the user can ask you to do actions on different pages (tabs).`;
|
|
19
|
-
const pageGotoTool = {
|
|
20
|
-
type: "function",
|
|
21
|
-
name: "page_goto",
|
|
22
|
-
description: "Navigate to a given URL (e.g. https://www.openai.com). Call this if you are looking at a blank page or a new page.",
|
|
23
|
-
parameters: {
|
|
24
|
-
type: "object",
|
|
25
|
-
properties: {
|
|
26
|
-
url: {
|
|
27
|
-
type: "string",
|
|
28
|
-
description: "The URL to navigate to",
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
additionalProperties: false,
|
|
32
|
-
required: ["url"],
|
|
33
|
-
},
|
|
34
|
-
strict: true,
|
|
35
|
-
};
|
|
36
|
-
async function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }) {
|
|
37
|
-
const response = await openAIClient.responses.create({
|
|
38
|
-
model: exports.CUA_MODEL,
|
|
39
|
-
previous_response_id: previousResponseId,
|
|
40
|
-
parallel_tool_calls: false,
|
|
41
|
-
tools: [
|
|
42
|
-
pageGotoTool,
|
|
43
|
-
{
|
|
44
|
-
type: "computer_use_preview",
|
|
45
|
-
display_width: screenWidth,
|
|
46
|
-
display_height: screenHeight,
|
|
47
|
-
environment: "browser",
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
reasoning: {
|
|
51
|
-
effort: "medium",
|
|
52
|
-
generate_summary: "concise",
|
|
53
|
-
},
|
|
54
|
-
instructions: INSTRUCTIONS,
|
|
55
|
-
input,
|
|
56
|
-
truncation: "auto",
|
|
57
|
-
});
|
|
58
|
-
return response;
|
|
59
|
-
}
|
|
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 });
|
|
66
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Page } from "playwright";
|
|
2
|
-
import { Action, BasePlaywrightCodegen } from "./types";
|
|
3
|
-
export declare class ElementFromPointCodegen implements BasePlaywrightCodegen {
|
|
4
|
-
private page;
|
|
5
|
-
private codeForLastAction;
|
|
6
|
-
initialize(page: Page): Promise<void>;
|
|
7
|
-
recordAction(action: Action): Promise<void>;
|
|
8
|
-
getCodeForLastAction(): Promise<string>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=element-from-point.d.ts.map
|