@empiricalrun/test-gen 0.78.0 → 0.78.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/actions/index.d.ts +0 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +0 -10
- package/dist/agent/base/index.d.ts +28 -19
- package/dist/agent/base/index.d.ts.map +1 -1
- package/dist/agent/base/index.js +25 -14
- package/dist/agent/browsing/run.d.ts +1 -1
- package/dist/agent/browsing/run.d.ts.map +1 -1
- package/dist/agent/chat/agent-loop.d.ts +5 -5
- package/dist/agent/chat/agent-loop.d.ts.map +1 -1
- package/dist/agent/chat/exports.d.ts +3 -4
- package/dist/agent/chat/exports.d.ts.map +1 -1
- package/dist/agent/chat/exports.js +5 -11
- package/dist/agent/chat/index.d.ts +4 -3
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +12 -5
- package/dist/agent/chat/models.d.ts +1 -1
- package/dist/agent/chat/models.d.ts.map +1 -1
- package/dist/agent/chat/models.js +3 -3
- 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 +42 -0
- package/dist/agent/chat/prompt/repo.d.ts +2 -2
- package/dist/agent/chat/prompt/repo.d.ts.map +1 -1
- package/dist/agent/chat/prompt/repo.js +2 -2
- package/dist/agent/chat/state.d.ts +14 -19
- package/dist/agent/chat/state.d.ts.map +1 -1
- package/dist/agent/chat/state.js +10 -45
- package/dist/agent/chat/utils.d.ts +5 -5
- package/dist/agent/chat/utils.d.ts.map +1 -1
- package/dist/agent/cli.d.ts +2 -2
- package/dist/agent/cli.d.ts.map +1 -1
- package/dist/agent/cli.js +5 -6
- package/dist/agent/code-review/index.d.ts +4 -3
- package/dist/agent/code-review/index.d.ts.map +1 -1
- package/dist/agent/code-review/index.js +10 -4
- package/dist/agent/code-review/types.d.ts +2 -35
- package/dist/agent/code-review/types.d.ts.map +1 -1
- package/dist/agent/code-review/types.js +4 -11
- package/dist/agent/cua/index.d.ts +1 -1
- package/dist/agent/cua/index.d.ts.map +1 -1
- package/dist/agent/cua/index.js +24 -13
- package/dist/agent/cua/pw-codegen/factory.d.ts +15 -0
- package/dist/agent/cua/pw-codegen/factory.d.ts.map +1 -0
- package/dist/agent/cua/pw-codegen/factory.js +59 -0
- package/dist/agent/cua/pw-codegen/index.d.ts +7 -0
- package/dist/agent/cua/pw-codegen/index.d.ts.map +1 -0
- package/dist/agent/cua/pw-codegen/index.js +14 -0
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.d.ts +43 -0
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.d.ts.map +1 -0
- package/dist/agent/cua/pw-codegen/pw-event-sink/index.js +250 -0
- package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.d.ts.map +1 -1
- package/dist/agent/cua/pw-codegen/pw-pause/for-recorder.js +0 -3
- package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts +1 -1
- package/dist/agent/cua/pw-codegen/pw-pause/index.d.ts.map +1 -1
- package/dist/agent/cua/pw-codegen/pw-pause/index.js +7 -3
- package/dist/agent/cua/pw-codegen/pw-pause/patch.d.ts +15 -3
- package/dist/agent/cua/pw-codegen/pw-pause/patch.d.ts.map +1 -1
- package/dist/agent/cua/pw-codegen/pw-pause/patch.js +38 -10
- package/dist/agent/cua/pw-codegen/version.d.ts +25 -0
- package/dist/agent/cua/pw-codegen/version.d.ts.map +1 -0
- package/dist/agent/cua/pw-codegen/version.js +86 -0
- package/dist/agent/index.d.ts +1 -5
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -11
- package/dist/agent/master/element-annotation.d.ts +1 -1
- package/dist/agent/master/element-annotation.d.ts.map +1 -1
- package/dist/agent/master/next-action.d.ts +1 -1
- package/dist/agent/master/next-action.d.ts.map +1 -1
- package/dist/agent/master/next-action.js +1 -6
- package/dist/agent/master/run.d.ts +3 -2
- package/dist/agent/master/run.d.ts.map +1 -1
- package/dist/agent/master/run.js +0 -26
- package/dist/agent/triage/index.d.ts +4 -3
- package/dist/agent/triage/index.d.ts.map +1 -1
- package/dist/agent/triage/index.js +33 -20
- package/dist/artifacts/index.d.ts +1 -1
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/utils.d.ts +1 -1
- package/dist/artifacts/utils.d.ts.map +1 -1
- package/dist/bin/environments.d.ts +1 -1
- package/dist/bin/environments.d.ts.map +1 -1
- package/dist/bin/index.js +2 -2
- package/dist/bin/setup.d.ts +1 -1
- package/dist/bin/setup.d.ts.map +1 -1
- package/dist/bin/utils/fs/index.d.ts +1 -1
- package/dist/bin/utils/fs/index.d.ts.map +1 -1
- package/dist/bin/utils/platform/web/index.d.ts +2 -2
- package/dist/bin/utils/platform/web/index.d.ts.map +1 -1
- package/dist/bin/utils/platform/web/index.js +1 -1
- package/dist/bin/utils/scenarios/index.d.ts +1 -1
- package/dist/bin/utils/scenarios/index.d.ts.map +1 -1
- package/dist/constants/index.d.ts +0 -4
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +0 -6
- package/dist/dashboard/client.d.ts +1 -1
- package/dist/dashboard/client.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +1 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -1
- package/dist/dashboard/tool-response.d.ts +5 -0
- package/dist/dashboard/tool-response.d.ts.map +1 -0
- package/dist/dashboard/tool-response.js +88 -0
- package/dist/dashboard/totp.js +1 -1
- package/dist/file/server.d.ts +1 -1
- package/dist/file/server.d.ts.map +1 -1
- package/dist/file/server.js +2 -1
- package/dist/file-info/adapters/file-system/index.d.ts +1 -1
- package/dist/file-info/adapters/file-system/index.d.ts.map +1 -1
- package/dist/file-info/adapters/file-system/reader.d.ts +1 -1
- package/dist/file-info/adapters/file-system/reader.d.ts.map +1 -1
- package/dist/file-info/adapters/github/index.d.ts +2 -1
- package/dist/file-info/adapters/github/index.d.ts.map +1 -1
- package/dist/file-info/adapters/github/reader.d.ts +2 -1
- package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
- package/dist/recorder/index.d.ts.map +1 -1
- package/dist/recorder/index.js +9 -3
- package/dist/recorder/upload.d.ts +1 -1
- package/dist/recorder/upload.d.ts.map +1 -1
- package/dist/tools/analyse-video/index.d.ts +1 -1
- package/dist/tools/analyse-video/index.d.ts.map +1 -1
- package/dist/tools/analyse-video/index.js +20 -13
- package/dist/tools/create-pull-request/index.d.ts +1 -1
- package/dist/tools/create-pull-request/index.d.ts.map +1 -1
- package/dist/tools/create-pull-request/utils.d.ts +3 -2
- package/dist/tools/create-pull-request/utils.d.ts.map +1 -1
- package/dist/tools/definitions/analyse-video.d.ts +5 -37
- package/dist/tools/definitions/analyse-video.d.ts.map +1 -1
- package/dist/tools/definitions/analyse-video.js +12 -25
- package/dist/tools/definitions/delete-file.d.ts +5 -1
- package/dist/tools/definitions/delete-file.d.ts.map +1 -1
- package/dist/tools/definitions/delete-file.js +3 -3
- package/dist/tools/definitions/download-build.d.ts +2 -6
- package/dist/tools/definitions/download-build.d.ts.map +1 -1
- package/dist/tools/definitions/grep.d.ts +1 -1
- package/dist/tools/definitions/grep.d.ts.map +1 -1
- package/dist/tools/definitions/list-tests-and-projects.d.ts +2 -6
- package/dist/tools/definitions/list-tests-and-projects.d.ts.map +1 -1
- package/dist/tools/definitions/list-tests-and-projects.js +1 -1
- package/dist/tools/definitions/merge-conflicts.d.ts +1 -1
- package/dist/tools/definitions/merge-conflicts.d.ts.map +1 -1
- package/dist/tools/definitions/merge-conflicts.js +2 -2
- package/dist/tools/definitions/rename-file.d.ts +1 -1
- package/dist/tools/definitions/rename-file.d.ts.map +1 -1
- package/dist/tools/definitions/review-pull-request.d.ts +1 -1
- package/dist/tools/definitions/review-pull-request.d.ts.map +1 -1
- package/dist/tools/definitions/review-pull-request.js +1 -1
- package/dist/tools/definitions/run-test.d.ts +3 -15
- package/dist/tools/definitions/run-test.d.ts.map +1 -1
- package/dist/tools/definitions/safe-bash.d.ts +8 -0
- package/dist/tools/definitions/safe-bash.d.ts.map +1 -0
- package/dist/tools/definitions/safe-bash.js +32 -0
- package/dist/tools/definitions/str_replace_editor.d.ts +1 -1
- package/dist/tools/definitions/str_replace_editor.d.ts.map +1 -1
- package/dist/tools/definitions/test-gen-browser.d.ts +3 -15
- package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/definitions/upgrade-packages.d.ts +4 -26
- package/dist/tools/definitions/upgrade-packages.d.ts.map +1 -1
- package/dist/tools/definitions/utils.d.ts +2 -10
- package/dist/tools/definitions/utils.d.ts.map +1 -1
- package/dist/tools/definitions/utils.js +1 -1
- package/dist/tools/delete-file/index.d.ts +1 -1
- package/dist/tools/delete-file/index.d.ts.map +1 -1
- package/dist/tools/delete-file/index.js +6 -2
- package/dist/tools/diagnosis-fetcher.d.ts +1 -1
- package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
- package/dist/tools/diagnosis-fetcher.js +92 -47
- package/dist/tools/download-build/index.d.ts +1 -1
- package/dist/tools/download-build/index.d.ts.map +1 -1
- package/dist/tools/executor/base.d.ts +3 -2
- package/dist/tools/executor/base.d.ts.map +1 -1
- package/dist/tools/executor/base.js +5 -8
- package/dist/tools/executor/index.d.ts +3 -0
- package/dist/tools/executor/index.d.ts.map +1 -1
- package/dist/tools/executor/index.js +12 -10
- package/dist/tools/executor/utils/checkpoint.d.ts.map +1 -1
- package/dist/tools/executor/utils/checkpoint.js +0 -4
- package/dist/tools/executor/utils/git.d.ts +7 -1
- package/dist/tools/executor/utils/git.d.ts.map +1 -1
- package/dist/tools/executor/utils/git.js +10 -3
- package/dist/tools/executor/utils/index.d.ts +1 -2
- package/dist/tools/executor/utils/index.d.ts.map +1 -1
- package/dist/tools/executor/utils/index.js +0 -20
- package/dist/tools/executor/utils/pr-description.d.ts +1 -1
- package/dist/tools/executor/utils/pr-description.d.ts.map +1 -1
- package/dist/tools/fetch-file/index.d.ts +2 -6
- package/dist/tools/fetch-file/index.d.ts.map +1 -1
- package/dist/tools/fetch-file/index.js +53 -13
- package/dist/tools/fetch-file/utils.d.ts +3 -0
- package/dist/tools/fetch-file/utils.d.ts.map +1 -0
- package/dist/tools/fetch-file/utils.js +136 -0
- package/dist/tools/fetch-session-diff/index.d.ts +1 -1
- package/dist/tools/fetch-session-diff/index.d.ts.map +1 -1
- package/dist/tools/fetch-session-diff/index.js +26 -2
- package/dist/tools/file-operations/create.d.ts +1 -1
- package/dist/tools/file-operations/create.d.ts.map +1 -1
- package/dist/tools/file-operations/index.d.ts +2 -1
- package/dist/tools/file-operations/index.d.ts.map +1 -1
- package/dist/tools/file-operations/insert.d.ts +1 -1
- package/dist/tools/file-operations/insert.d.ts.map +1 -1
- package/dist/tools/file-operations/replace.d.ts +1 -1
- package/dist/tools/file-operations/replace.d.ts.map +1 -1
- package/dist/tools/file-operations/replace.js +0 -1
- package/dist/tools/file-operations/view/index.d.ts +2 -1
- package/dist/tools/file-operations/view/index.d.ts.map +1 -1
- package/dist/tools/firecrawl-scrape/index.d.ts +9 -0
- package/dist/tools/firecrawl-scrape/index.d.ts.map +1 -0
- package/dist/tools/firecrawl-scrape/index.js +107 -0
- package/dist/tools/grep/index.d.ts +1 -1
- package/dist/tools/grep/index.d.ts.map +1 -1
- package/dist/tools/grep/index.js +15 -12
- package/dist/tools/index.d.ts +5 -24
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +21 -42
- package/dist/tools/issues-v1/create-issue.d.ts +3 -0
- package/dist/tools/issues-v1/create-issue.d.ts.map +1 -0
- package/dist/tools/{issues → issues-v1}/create-issue.js +5 -9
- package/dist/tools/issues-v1/index.d.ts.map +1 -0
- package/dist/tools/issues-v1/list-issues.d.ts +3 -0
- package/dist/tools/issues-v1/list-issues.d.ts.map +1 -0
- package/dist/tools/issues-v1/update-issue.d.ts +3 -0
- package/dist/tools/issues-v1/update-issue.d.ts.map +1 -0
- package/dist/tools/{issues → issues-v1}/update-issue.js +1 -9
- package/dist/tools/{issues → issues-v1}/utils.d.ts +2 -1
- package/dist/tools/issues-v1/utils.d.ts.map +1 -0
- package/dist/tools/issues-v2/create-issue.d.ts +3 -0
- package/dist/tools/issues-v2/create-issue.d.ts.map +1 -0
- package/dist/tools/issues-v2/create-issue.js +82 -0
- package/dist/tools/issues-v2/set-issue-description.d.ts +3 -0
- package/dist/tools/issues-v2/set-issue-description.d.ts.map +1 -0
- package/dist/tools/issues-v2/set-issue-description.js +59 -0
- package/dist/tools/issues-v2/update-issue.d.ts +3 -0
- package/dist/tools/issues-v2/update-issue.d.ts.map +1 -0
- package/dist/tools/issues-v2/update-issue.js +85 -0
- package/dist/tools/list-environments.d.ts +1 -1
- package/dist/tools/list-environments.d.ts.map +1 -1
- package/dist/tools/list-tests-and-projects/index.d.ts +1 -1
- package/dist/tools/list-tests-and-projects/index.d.ts.map +1 -1
- package/dist/tools/list-tests-and-projects/index.js +14 -4
- package/dist/tools/merge-conflicts/index.d.ts +1 -1
- package/dist/tools/merge-conflicts/index.d.ts.map +1 -1
- package/dist/tools/merge-conflicts/index.js +23 -10
- package/dist/tools/rename-file/index.d.ts +1 -1
- package/dist/tools/rename-file/index.d.ts.map +1 -1
- package/dist/tools/rename-file/index.js +0 -1
- package/dist/tools/review-pull-request/index.d.ts +1 -1
- package/dist/tools/review-pull-request/index.d.ts.map +1 -1
- package/dist/tools/review-pull-request/index.js +5 -4
- package/dist/tools/run-test.d.ts +1 -1
- package/dist/tools/run-test.d.ts.map +1 -1
- package/dist/tools/safe-bash/index.d.ts +3 -0
- package/dist/tools/safe-bash/index.d.ts.map +1 -0
- package/dist/tools/safe-bash/index.js +128 -0
- package/dist/tools/test-gen-browser.d.ts +1 -1
- package/dist/tools/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/test-gen-browser.js +64 -21
- package/dist/tools/test-run-fetcher/index.d.ts +2 -2
- package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
- package/dist/tools/test-run-fetcher/index.js +67 -66
- package/dist/tools/trace-dot-zip/index.d.ts +1 -1
- package/dist/tools/trace-dot-zip/index.d.ts.map +1 -1
- package/dist/tools/trace-dot-zip/utils/network-trace.d.ts.map +1 -1
- package/dist/tools/trace-dot-zip/utils/network-trace.js +5 -10
- package/dist/tools/triage-summary/index.d.ts +1 -1
- package/dist/tools/triage-summary/index.d.ts.map +1 -1
- package/dist/tools/triage-summary/index.js +5 -2
- package/dist/tools/triage-summary/utils.d.ts +1 -1
- package/dist/tools/triage-summary/utils.d.ts.map +1 -1
- package/dist/tools/upgrade-packages/index.d.ts +1 -1
- package/dist/tools/upgrade-packages/index.d.ts.map +1 -1
- package/dist/tools/upgrade-packages/index.js +14 -8
- package/dist/tools/upgrade-packages/utils.d.ts +9 -5
- package/dist/tools/upgrade-packages/utils.d.ts.map +1 -1
- package/dist/tools/upgrade-packages/utils.js +56 -16
- package/dist/tools/utils/queue.d.ts +1 -1
- package/dist/tools/utils/queue.d.ts.map +1 -1
- package/dist/tools/utils/validate-schema.d.ts +3 -0
- package/dist/tools/utils/validate-schema.d.ts.map +1 -0
- package/dist/tools/utils/validate-schema.js +27 -0
- package/dist/utils/SQSClient.d.ts +1 -1
- package/dist/utils/SQSClient.d.ts.map +1 -1
- package/dist/utils/dedup/dedup-image.js +2 -2
- package/dist/utils/dedup/find-threshold.d.ts +1 -1
- package/dist/utils/dedup/find-threshold.d.ts.map +1 -1
- package/dist/utils/dedup/find-threshold.js +2 -2
- package/dist/utils/model.d.ts +1 -1
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +6 -10
- package/dist/utils/playwright-report-parser.d.ts +1 -1
- package/dist/utils/playwright-report-parser.d.ts.map +1 -1
- package/dist/utils/playwright-test-id.d.ts +8 -0
- package/dist/utils/playwright-test-id.d.ts.map +1 -0
- package/dist/utils/playwright-test-id.js +21 -0
- package/dist/utils/repo-tree.d.ts +1 -1
- package/dist/utils/repo-tree.d.ts.map +1 -1
- package/dist/utils/slug.d.ts.map +1 -1
- package/dist/utils/slug.js +15 -4
- package/dist/utils/url-validation.d.ts +2 -0
- package/dist/utils/url-validation.d.ts.map +1 -0
- package/dist/utils/url-validation.js +16 -0
- package/dist/video-core/index.d.ts +7 -24
- package/dist/video-core/index.d.ts.map +1 -1
- package/dist/video-core/index.js +32 -25
- package/dist/video-core/model-limits.d.ts +2 -2
- package/dist/video-core/model-limits.d.ts.map +1 -1
- package/dist/video-core/model-limits.js +9 -19
- package/dist/video-core/storage-manager.d.ts +2 -1
- package/dist/video-core/storage-manager.d.ts.map +1 -1
- package/dist/video-core/types.d.ts +1 -1
- package/dist/video-core/types.d.ts.map +1 -1
- package/dist/video-core/utils.d.ts +5 -7
- package/dist/video-core/utils.d.ts.map +1 -1
- package/dist/video-core/utils.js +39 -132
- package/package.json +10 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/actions/skill.d.ts +0 -21
- package/dist/actions/skill.d.ts.map +0 -1
- package/dist/actions/skill.js +0 -127
- package/dist/agent/chat/filesystem-cache.d.ts +0 -12
- package/dist/agent/chat/filesystem-cache.d.ts.map +0 -1
- package/dist/agent/chat/filesystem-cache.js +0 -101
- package/dist/agent/codegen/create-test-block.d.ts +0 -8
- package/dist/agent/codegen/create-test-block.d.ts.map +0 -1
- package/dist/agent/codegen/create-test-block.js +0 -47
- package/dist/agent/codegen/fix-ts-errors.d.ts +0 -12
- package/dist/agent/codegen/fix-ts-errors.d.ts.map +0 -1
- package/dist/agent/codegen/fix-ts-errors.js +0 -78
- package/dist/agent/codegen/lexical-scoped-vars.d.ts +0 -9
- package/dist/agent/codegen/lexical-scoped-vars.d.ts.map +0 -1
- package/dist/agent/codegen/lexical-scoped-vars.js +0 -55
- package/dist/agent/codegen/skills-retriever.d.ts +0 -26
- package/dist/agent/codegen/skills-retriever.d.ts.map +0 -1
- package/dist/agent/codegen/skills-retriever.js +0 -93
- package/dist/agent/codegen/test-update-feedback.d.ts +0 -12
- package/dist/agent/codegen/test-update-feedback.d.ts.map +0 -1
- package/dist/agent/codegen/test-update-feedback.js +0 -49
- package/dist/agent/codegen/types.d.ts +0 -25
- package/dist/agent/codegen/types.d.ts.map +0 -1
- package/dist/agent/codegen/types.js +0 -8
- package/dist/agent/codegen/update-flow.d.ts +0 -36
- package/dist/agent/codegen/update-flow.d.ts.map +0 -1
- package/dist/agent/codegen/update-flow.js +0 -259
- package/dist/agent/codegen/use-skill.d.ts +0 -11
- package/dist/agent/codegen/use-skill.d.ts.map +0 -1
- package/dist/agent/codegen/use-skill.js +0 -53
- package/dist/agent/codegen/utils.d.ts +0 -110
- package/dist/agent/codegen/utils.d.ts.map +0 -1
- package/dist/agent/codegen/utils.js +0 -376
- package/dist/agent/master/browser-tests/skills.spec.d.ts +0 -2
- package/dist/agent/master/browser-tests/skills.spec.d.ts.map +0 -1
- package/dist/agent/master/browser-tests/skills.spec.js +0 -112
- package/dist/agent/master/execute-skill-action.d.ts +0 -11
- package/dist/agent/master/execute-skill-action.d.ts.map +0 -1
- package/dist/agent/master/execute-skill-action.js +0 -23
- package/dist/agent/video-analysis/executor/index.d.ts +0 -5
- package/dist/agent/video-analysis/executor/index.d.ts.map +0 -1
- package/dist/agent/video-analysis/executor/index.js +0 -10
- package/dist/agent/video-analysis/index.d.ts +0 -7
- package/dist/agent/video-analysis/index.d.ts.map +0 -1
- package/dist/agent/video-analysis/index.js +0 -60
- package/dist/evals/append-create-test-agent.evals.d.ts +0 -4
- package/dist/evals/append-create-test-agent.evals.d.ts.map +0 -1
- package/dist/evals/append-create-test-agent.evals.js +0 -117
- package/dist/evals/fetch-pom-skills-agent.evals.d.ts +0 -4
- package/dist/evals/fetch-pom-skills-agent.evals.d.ts.map +0 -1
- package/dist/evals/fetch-pom-skills-agent.evals.js +0 -36
- package/dist/evals/master-agent.evals.d.ts +0 -4
- package/dist/evals/master-agent.evals.d.ts.map +0 -1
- package/dist/evals/master-agent.evals.js +0 -35
- package/dist/evals/type.d.ts +0 -12
- package/dist/evals/type.d.ts.map +0 -1
- package/dist/evals/type.js +0 -2
- package/dist/evals/update-scenario-agent.evals.d.ts +0 -4
- package/dist/evals/update-scenario-agent.evals.d.ts.map +0 -1
- package/dist/evals/update-scenario-agent.evals.js +0 -47
- package/dist/tools/fetch-last-successful-test-run/index.d.ts +0 -3
- package/dist/tools/fetch-last-successful-test-run/index.d.ts.map +0 -1
- package/dist/tools/fetch-last-successful-test-run/index.js +0 -60
- package/dist/tools/issues/create-issue.d.ts +0 -3
- package/dist/tools/issues/create-issue.d.ts.map +0 -1
- package/dist/tools/issues/index.d.ts.map +0 -1
- package/dist/tools/issues/list-issues.d.ts +0 -3
- package/dist/tools/issues/list-issues.d.ts.map +0 -1
- package/dist/tools/issues/metadata-schema.d.ts +0 -24
- package/dist/tools/issues/metadata-schema.d.ts.map +0 -1
- package/dist/tools/issues/metadata-schema.js +0 -22
- package/dist/tools/issues/update-issue.d.ts +0 -3
- package/dist/tools/issues/update-issue.d.ts.map +0 -1
- package/dist/tools/issues/utils.d.ts.map +0 -1
- package/dist/tools/utils/urls.d.ts +0 -5
- package/dist/tools/utils/urls.d.ts.map +0 -1
- package/dist/tools/utils/urls.js +0 -19
- package/dist/tools/view-failed-test-run-report/index.d.ts +0 -12
- package/dist/tools/view-failed-test-run-report/index.d.ts.map +0 -1
- package/dist/tools/view-failed-test-run-report/index.js +0 -151
- package/dist/video-core/agent-orchestrator.d.ts +0 -13
- package/dist/video-core/agent-orchestrator.d.ts.map +0 -1
- package/dist/video-core/agent-orchestrator.js +0 -59
- package/dist/video-core/xml-parser.d.ts +0 -3
- package/dist/video-core/xml-parser.d.ts.map +0 -1
- package/dist/video-core/xml-parser.js +0 -27
- /package/dist/tools/{issues → issues-v1}/index.d.ts +0 -0
- /package/dist/tools/{issues → issues-v1}/index.js +0 -0
- /package/dist/tools/{issues → issues-v1}/list-issues.js +0 -0
- /package/dist/tools/{issues → issues-v1}/utils.js +0 -0
package/dist/agent/chat/state.js
CHANGED
|
@@ -4,11 +4,9 @@ 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.createChatStateForMessages = createChatStateForMessages;
|
|
8
7
|
exports.chatStateFromModel = chatStateFromModel;
|
|
9
8
|
exports.getUsageSummary = getUsageSummary;
|
|
10
9
|
exports.loadChatState = loadChatState;
|
|
11
|
-
exports.migrateChatState = migrateChatState;
|
|
12
10
|
exports.saveToDisk = saveToDisk;
|
|
13
11
|
exports.getLatestDownloadBuildUrl = getLatestDownloadBuildUrl;
|
|
14
12
|
exports.fetchToolCallFromId = fetchToolCallFromId;
|
|
@@ -19,27 +17,20 @@ exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP = {
|
|
|
19
17
|
};
|
|
20
18
|
exports.LATEST_CHAT_STATE_VERSION = "0.1";
|
|
21
19
|
exports.CHAT_STATE_PATH = path_1.default.join(process.cwd(), ".empiricalrun", "last-chat.json");
|
|
22
|
-
function
|
|
23
|
-
// TODO: Add better types for messages
|
|
20
|
+
function chatStateFromModel({ chatModel, error, }) {
|
|
24
21
|
return {
|
|
25
22
|
version: exports.LATEST_CHAT_STATE_VERSION,
|
|
26
|
-
model: selectedModel,
|
|
27
|
-
messages: messages,
|
|
28
|
-
askUserForInput: askUserForInput,
|
|
29
|
-
error: error,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function chatStateFromModel({ chatModel, error, }) {
|
|
33
|
-
return createChatStateForMessages({
|
|
23
|
+
model: chatModel.selectedModel,
|
|
34
24
|
messages: chatModel.messages,
|
|
35
|
-
selectedModel: chatModel.selectedModel,
|
|
36
25
|
askUserForInput: chatModel.askUserForInput,
|
|
37
|
-
error,
|
|
38
|
-
}
|
|
26
|
+
error: error,
|
|
27
|
+
};
|
|
39
28
|
}
|
|
40
29
|
function getUsageSummary(chatState) {
|
|
41
30
|
const messages = chatState.messages;
|
|
42
|
-
const messageUsages = messages
|
|
31
|
+
const messageUsages = messages
|
|
32
|
+
.map((msg) => "usage" in msg && msg.usage)
|
|
33
|
+
.filter(Boolean);
|
|
43
34
|
const inputTokens = messageUsages.reduce((sum, usage) => sum + (usage?.tokens?.input || 0), 0);
|
|
44
35
|
const outputTokens = messageUsages.reduce((sum, usage) => sum + (usage?.tokens?.output || 0), 0);
|
|
45
36
|
const costs = messageUsages
|
|
@@ -71,37 +62,11 @@ function loadChatState({ resetChat, }) {
|
|
|
71
62
|
}
|
|
72
63
|
const raw = fs_1.default.readFileSync(exports.CHAT_STATE_PATH, "utf8");
|
|
73
64
|
let state = JSON.parse(raw);
|
|
74
|
-
// Always migrate to the latest version after loading
|
|
75
|
-
const migratedState = migrateChatState(state);
|
|
76
65
|
// Only save if migration actually changed the state
|
|
77
|
-
if (JSON.stringify(state) !== JSON.stringify(
|
|
78
|
-
fs_1.default.writeFileSync(exports.CHAT_STATE_PATH, JSON.stringify(
|
|
66
|
+
if (JSON.stringify(state) !== JSON.stringify(state)) {
|
|
67
|
+
fs_1.default.writeFileSync(exports.CHAT_STATE_PATH, JSON.stringify(state, null, 2));
|
|
79
68
|
}
|
|
80
|
-
return
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Migrates a chat state object from an old version to the latest version.
|
|
84
|
-
* Add migration logic for each version as needed.
|
|
85
|
-
*/
|
|
86
|
-
function migrateChatState(oldState) {
|
|
87
|
-
if (!oldState || Object.keys(oldState).length === 0) {
|
|
88
|
-
return oldState;
|
|
89
|
-
}
|
|
90
|
-
if (!oldState.version) {
|
|
91
|
-
throw new Error("No version found in chat state");
|
|
92
|
-
}
|
|
93
|
-
if (!exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP[oldState.version]) {
|
|
94
|
-
throw new Error(`No migration function found for version: ${oldState.version}`);
|
|
95
|
-
}
|
|
96
|
-
if (oldState.version === exports.LATEST_CHAT_STATE_VERSION) {
|
|
97
|
-
return oldState;
|
|
98
|
-
}
|
|
99
|
-
const migrateFn = exports.CHAT_STATE_VERSIONS_MIGRATIONS_MAP[oldState.version];
|
|
100
|
-
const migrated = migrateFn(oldState);
|
|
101
|
-
return {
|
|
102
|
-
version: exports.LATEST_CHAT_STATE_VERSION,
|
|
103
|
-
...migrated,
|
|
104
|
-
};
|
|
69
|
+
return state;
|
|
105
70
|
}
|
|
106
71
|
function saveToDisk(chatState) {
|
|
107
72
|
const statePath = exports.CHAT_STATE_PATH;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { TraceClient } from "@empiricalrun/llm";
|
|
2
|
-
import {
|
|
3
|
-
import { Attachment, ReporterFunction } from "@empiricalrun/shared-types";
|
|
2
|
+
import { IChatModel } from "@empiricalrun/llm/chat";
|
|
3
|
+
import { Attachment, ReporterFunction } from "@empiricalrun/shared-types/chat-agent";
|
|
4
4
|
export declare const log: (...args: any[]) => void;
|
|
5
5
|
export declare function getModelName(model: string): string;
|
|
6
|
-
export declare function handleAgentError({ error, chatModel, reporter, trace, }: {
|
|
6
|
+
export declare function handleAgentError<T>({ error, chatModel, reporter, trace, }: {
|
|
7
7
|
error: unknown;
|
|
8
|
-
chatModel: IChatModel<
|
|
9
|
-
reporter: ReporterFunction
|
|
8
|
+
chatModel: IChatModel<T>;
|
|
9
|
+
reporter: ReporterFunction<T>;
|
|
10
10
|
trace?: TraceClient;
|
|
11
11
|
}): Promise<void>;
|
|
12
12
|
export declare function extractAttachments(userPrompt: string): {
|
|
@@ -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,EAGL,
|
|
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,EAGL,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EAEV,gBAAgB,EACjB,MAAM,uCAAuC,CAAC;AAK/C,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,GAAG,EAAE,SAEjC,CAAC;AAcF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,EACxC,KAAK,EACL,SAAS,EACT,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,iBAaA;AASD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CA4BA"}
|
package/dist/agent/cli.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AgentModeEnum, SupportedChatModels } from "@empiricalrun/shared-types";
|
|
1
|
+
import { AgentModeEnum, SupportedChatModels } from "@empiricalrun/shared-types/chat-agent";
|
|
2
2
|
export declare function fetchEnvironmentVariables(): Promise<Record<string, string>>;
|
|
3
|
-
export declare function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialPromptContent, agentMode, resetChat, useFSCache, }: {
|
|
3
|
+
export declare function runChatAgentForCLI<T>({ useDiskForChatState, selectedModel, initialPromptContent, agentMode, resetChat, useFSCache, }: {
|
|
4
4
|
selectedModel: SupportedChatModels;
|
|
5
5
|
useDiskForChatState: boolean;
|
|
6
6
|
initialPromptContent: string | undefined;
|
package/dist/agent/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/agent/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/agent/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAIb,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AA6B/C,wBAAsB,yBAAyB,IAAI,OAAO,CACxD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CAkCA;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,EAC1C,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,UAAU,GACX,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,iBA+JA"}
|
package/dist/agent/cli.js
CHANGED
|
@@ -53,8 +53,6 @@ async function fetchEnvironmentVariables() {
|
|
|
53
53
|
}
|
|
54
54
|
async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialPromptContent, agentMode, resetChat, useFSCache, }) {
|
|
55
55
|
const enableStreaming = !useFSCache;
|
|
56
|
-
// TODO: Implement cache support in BaseAgent
|
|
57
|
-
// const cache = useFSCache ? new FilesystemLLMCache() : undefined;
|
|
58
56
|
// TODO: Store branch name in chat state so that we don't recreate it every time
|
|
59
57
|
const randomId = crypto.randomUUID().substring(0, 8);
|
|
60
58
|
const branchName = `branch-${randomId}`;
|
|
@@ -94,7 +92,7 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
94
92
|
});
|
|
95
93
|
if (trace) {
|
|
96
94
|
const traceUrl = trace.getTraceUrl();
|
|
97
|
-
console.log(`Starting ${selectedModel}: ${traceUrl}`);
|
|
95
|
+
console.log(`Starting Model: ${selectedModel} \nTrace URL: ${traceUrl}`);
|
|
98
96
|
}
|
|
99
97
|
let authType = "user-access-token";
|
|
100
98
|
if (process.env.EMPIRICALRUN_API_KEY) {
|
|
@@ -117,8 +115,11 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
117
115
|
featureFlags: [],
|
|
118
116
|
chatState,
|
|
119
117
|
toolExecutor,
|
|
118
|
+
repoInfoBuilder: fileInfoBuilder,
|
|
120
119
|
};
|
|
121
|
-
const agent =
|
|
120
|
+
const agent = agentMode === "triage"
|
|
121
|
+
? new index_1.TriageAgent(agentParams)
|
|
122
|
+
: new index_1.ChatAgent(agentParams);
|
|
122
123
|
// If we have an initial prompt and no existing chat state, push it to the agent
|
|
123
124
|
if (initialPromptContent && !chatState) {
|
|
124
125
|
const { text, attachments } = (0, utils_1.extractAttachments)(initialPromptContent);
|
|
@@ -185,8 +186,6 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
185
186
|
}
|
|
186
187
|
};
|
|
187
188
|
})(),
|
|
188
|
-
trace,
|
|
189
|
-
repoInfoBuilder: fileInfoBuilder,
|
|
190
189
|
onPendingToolCall: async (toolCalls) => {
|
|
191
190
|
const { toolResults, checkpoint } = await toolExecutor.execute(toolCalls);
|
|
192
191
|
agent.processToolResults(toolCalls, toolResults, checkpoint);
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { ToolsForLLM } from "@empiricalrun/shared-types";
|
|
1
|
+
import type { ToolsForLLM } from "@empiricalrun/shared-types/chat-agent";
|
|
2
|
+
import type { FileInfo } from "@empiricalrun/shared-types/test-gen";
|
|
2
3
|
import { BaseAgent } from "../base";
|
|
3
4
|
import { type CodeReviewResultV0, type CodeReviewResultV1, type CodeReviewResultV2, CodeReviewSeverity, CodeReviewVerdict } from "./types";
|
|
4
5
|
export type { CodeReviewResultV1, CodeReviewResultV0, CodeReviewResultV2 };
|
|
5
6
|
export { CodeReviewVerdict, CodeReviewSeverity };
|
|
6
7
|
export type CodeReviewVersionedResult = CodeReviewResultV0 | CodeReviewResultV1 | CodeReviewResultV2;
|
|
7
|
-
export declare class CodeReviewAgent extends BaseAgent {
|
|
8
|
+
export declare class CodeReviewAgent<T> extends BaseAgent<T> {
|
|
8
9
|
protected getTools(): ToolsForLLM;
|
|
9
10
|
getResult(): CodeReviewVersionedResult | undefined;
|
|
10
|
-
protected buildSystemPrompt(
|
|
11
|
+
protected buildSystemPrompt(repoInfoBuilder: () => Promise<FileInfo>): Promise<string>;
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,QAAQ,IAAI,WAAW;IAWjC,SAAS,IAAI,yBAAyB,GAAG,SAAS;cAmBlC,iBAAiB,CAC/B,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;CAiInB"}
|
|
@@ -4,6 +4,7 @@ exports.CodeReviewAgent = exports.CodeReviewSeverity = exports.CodeReviewVerdict
|
|
|
4
4
|
const tools_1 = require("../../tools");
|
|
5
5
|
const fetch_session_diff_1 = require("../../tools/fetch-session-diff");
|
|
6
6
|
const base_1 = require("../base");
|
|
7
|
+
const repo_1 = require("../chat/prompt/repo");
|
|
7
8
|
const parser_1 = require("./parser");
|
|
8
9
|
const types_1 = require("./types");
|
|
9
10
|
Object.defineProperty(exports, "CodeReviewSeverity", { enumerable: true, get: function () { return types_1.CodeReviewSeverity; } });
|
|
@@ -25,9 +26,7 @@ class CodeReviewAgent extends base_1.BaseAgent {
|
|
|
25
26
|
? messages[messages.length - 1]
|
|
26
27
|
: undefined;
|
|
27
28
|
const lastMessageTextPart = lastMessage
|
|
28
|
-
? lastMessage.parts
|
|
29
|
-
.filter((p) => "text" in p)
|
|
30
|
-
.find((p) => "text" in p && !!p.text)
|
|
29
|
+
? lastMessage.parts.find((p) => "text" in p && !!p.text && !("thinking" in p))
|
|
31
30
|
: undefined;
|
|
32
31
|
const textPart = lastMessageTextPart;
|
|
33
32
|
const text = textPart?.text.trim();
|
|
@@ -36,7 +35,9 @@ class CodeReviewAgent extends base_1.BaseAgent {
|
|
|
36
35
|
}
|
|
37
36
|
return (0, parser_1.convertXmlToV2Format)(text);
|
|
38
37
|
}
|
|
39
|
-
async buildSystemPrompt(
|
|
38
|
+
async buildSystemPrompt(repoInfoBuilder) {
|
|
39
|
+
const repoInfo = await repoInfoBuilder();
|
|
40
|
+
const repoContext = await (0, repo_1.getRepoContextPrompt)(repoInfo);
|
|
40
41
|
return `
|
|
41
42
|
You are an expert code reviewer that specializes in reviewing Playwright test code. You are
|
|
42
43
|
provided with tools to fetch diff and pull-request metadata for a code review, where a test has been added, test modified,
|
|
@@ -122,6 +123,8 @@ Return these as XML tags with markdown inside them
|
|
|
122
123
|
- Use locators instead of selectors: waitForSelector, $, $$ are bad - use locators instead (e.g. locator.waitFor)
|
|
123
124
|
- If the test relies on some Playwright APIs that do not auto-wait (e.g. isVisible(), count()), we need to ensure
|
|
124
125
|
they are used AFTER some action that ensures the page has loaded. If nothing, at least it should have a waitForTimeout
|
|
126
|
+
- For checkbox elements, use \`setChecked(true or false)\` instead of clicks. Click action on checkbox toggles the state and requires
|
|
127
|
+
a conditional, whereas \`setChecked\` allows specifying the end expected state, which is easier to maintain.
|
|
125
128
|
|
|
126
129
|
## Deprecated patterns
|
|
127
130
|
- test.describe.serial(...) is not prefered: use test.describe.configure({ mode: "serial" }) if the tests need to be serial
|
|
@@ -156,6 +159,9 @@ Return these as XML tags with markdown inside them
|
|
|
156
159
|
|
|
157
160
|
# Repo context
|
|
158
161
|
${repoContext}
|
|
162
|
+
|
|
163
|
+
# Reference
|
|
164
|
+
Today's date is ${new Date().toDateString()}
|
|
159
165
|
`;
|
|
160
166
|
}
|
|
161
167
|
}
|
|
@@ -1,36 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
Rejected = "Rejected"
|
|
4
|
-
}
|
|
5
|
-
export declare enum CodeReviewSeverity {
|
|
6
|
-
MergeBlocking = "merge-blocking",
|
|
7
|
-
Warning = "warning"
|
|
8
|
-
}
|
|
9
|
-
export type CodeReviewLineComment = {
|
|
10
|
-
file: string;
|
|
11
|
-
line_start: number;
|
|
12
|
-
line_end: number;
|
|
13
|
-
severity: CodeReviewSeverity;
|
|
14
|
-
message: string;
|
|
15
|
-
};
|
|
16
|
-
export type CodeReviewResultV2 = {
|
|
17
|
-
version: "2.0";
|
|
18
|
-
last_commit: string;
|
|
19
|
-
describe_code_change: string;
|
|
20
|
-
line_comments: CodeReviewLineComment[];
|
|
21
|
-
verdict: CodeReviewVerdict;
|
|
22
|
-
};
|
|
23
|
-
export type CodeReviewResultV1 = {
|
|
24
|
-
version: "1.0";
|
|
25
|
-
last_commit: string | null;
|
|
26
|
-
code_review_comments: string | null;
|
|
27
|
-
describe_code_change: string | null;
|
|
28
|
-
merge_blocking_issues: string | null;
|
|
29
|
-
best_practices_and_warnings: string | null;
|
|
30
|
-
verdict: "Approved" | "Rejected" | null;
|
|
31
|
-
};
|
|
32
|
-
export type CodeReviewResultV0 = {
|
|
33
|
-
version: "0.1";
|
|
34
|
-
result: string;
|
|
35
|
-
};
|
|
1
|
+
export type { CodeReviewLineComment, CodeReviewResultV0, CodeReviewResultV1, CodeReviewResultV2, } from "@empiricalrun/shared-types/code-review";
|
|
2
|
+
export { CodeReviewSeverity, CodeReviewVerdict, } from "@empiricalrun/shared-types/code-review";
|
|
36
3
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wCAAwC,CAAC"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var
|
|
5
|
-
(function (
|
|
6
|
-
|
|
7
|
-
CodeReviewVerdict["Rejected"] = "Rejected";
|
|
8
|
-
})(CodeReviewVerdict || (exports.CodeReviewVerdict = CodeReviewVerdict = {}));
|
|
9
|
-
var CodeReviewSeverity;
|
|
10
|
-
(function (CodeReviewSeverity) {
|
|
11
|
-
CodeReviewSeverity["MergeBlocking"] = "merge-blocking";
|
|
12
|
-
CodeReviewSeverity["Warning"] = "warning";
|
|
13
|
-
})(CodeReviewSeverity || (exports.CodeReviewSeverity = CodeReviewSeverity = {}));
|
|
3
|
+
exports.CodeReviewVerdict = exports.CodeReviewSeverity = void 0;
|
|
4
|
+
var code_review_1 = require("@empiricalrun/shared-types/code-review");
|
|
5
|
+
Object.defineProperty(exports, "CodeReviewSeverity", { enumerable: true, get: function () { return code_review_1.CodeReviewSeverity; } });
|
|
6
|
+
Object.defineProperty(exports, "CodeReviewVerdict", { enumerable: true, get: function () { return code_review_1.CodeReviewVerdict; } });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TraceClient } from "@empiricalrun/llm";
|
|
2
|
-
import { ArtifactInputData, Usage } from "@empiricalrun/shared-types";
|
|
2
|
+
import { ArtifactInputData, Usage } from "@empiricalrun/shared-types/chat-agent";
|
|
3
3
|
import { Page } from "playwright";
|
|
4
4
|
export type BrowserAgentResult = Array<{
|
|
5
5
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,KAAK,EACN,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmElC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CACJ,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,EACpD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,8BAAsC,GACvC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAuND"}
|
package/dist/agent/cua/index.js
CHANGED
|
@@ -6,20 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createTestUsingComputerUseAgent = createTestUsingComputerUseAgent;
|
|
7
7
|
const llm_1 = require("@empiricalrun/llm");
|
|
8
8
|
const openai_1 = __importDefault(require("openai"));
|
|
9
|
+
const logger_1 = require("../../logger");
|
|
9
10
|
const computer_1 = require("./computer");
|
|
10
11
|
const model_1 = require("./model");
|
|
11
12
|
const element_from_point_1 = require("./pw-codegen/element-from-point");
|
|
12
|
-
const
|
|
13
|
+
const factory_1 = require("./pw-codegen/factory");
|
|
13
14
|
const MAX_ITERATIONS = 10;
|
|
14
15
|
async function getCodegenInstance(prefersElementFromPoint) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
console.log("[getCodegen] using PlaywrightPauseCodegen");
|
|
19
|
-
return new pw_pause_1.PlaywrightPauseCodegen();
|
|
16
|
+
if (prefersElementFromPoint) {
|
|
17
|
+
logger_1.logger.debug("[getCodegen] using ElementFromPointCodegen (preferred)");
|
|
18
|
+
return new element_from_point_1.ElementFromPointCodegen();
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
|
|
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;
|
|
23
26
|
}
|
|
24
27
|
function artifact(screenshot, name) {
|
|
25
28
|
return {
|
|
@@ -28,21 +31,29 @@ function artifact(screenshot, name) {
|
|
|
28
31
|
data: Buffer.from(screenshot, "base64"),
|
|
29
32
|
};
|
|
30
33
|
}
|
|
31
|
-
function
|
|
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) {
|
|
32
42
|
const browserContext = page.context();
|
|
33
43
|
const pages = browserContext.pages();
|
|
44
|
+
const allPagesSummary = await tabsSummary(pages);
|
|
34
45
|
return `
|
|
35
46
|
## Browser window
|
|
36
47
|
|
|
37
48
|
### Current page (what you are working on)
|
|
38
49
|
Current page URL: ${page.url()}
|
|
39
|
-
Current page title: ${page.title()}
|
|
50
|
+
Current page title: ${await page.title()}
|
|
40
51
|
|
|
41
52
|
### All pages
|
|
42
53
|
Number of open pages: ${pages.length}
|
|
43
54
|
|
|
44
55
|
URLs and titles:
|
|
45
|
-
${
|
|
56
|
+
${allPagesSummary}`;
|
|
46
57
|
}
|
|
47
58
|
async function createTestUsingComputerUseAgent({ page, task, trace, prefersElementFromPointCodegen = false, }) {
|
|
48
59
|
const codegen = await getCodegenInstance(prefersElementFromPointCodegen);
|
|
@@ -69,7 +80,7 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
69
80
|
content: [
|
|
70
81
|
{
|
|
71
82
|
type: "input_text",
|
|
72
|
-
text: `Task to execute: ${task}\n\n${stateOfTheBrowser(page)}`,
|
|
83
|
+
text: `Task to execute: ${task}\n\n${await stateOfTheBrowser(page)}`,
|
|
73
84
|
},
|
|
74
85
|
{
|
|
75
86
|
type: "input_image",
|
|
@@ -193,7 +204,7 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
193
204
|
content: [
|
|
194
205
|
{
|
|
195
206
|
type: "input_text",
|
|
196
|
-
text: `Action executed: ${executedActionSummary || "None"}\n\n${stateOfTheBrowser(page)}`,
|
|
207
|
+
text: `Action executed: ${executedActionSummary || "None"}\n\n${await stateOfTheBrowser(page)}`,
|
|
197
208
|
},
|
|
198
209
|
],
|
|
199
210
|
},
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory for creating the appropriate Playwright codegen implementation
|
|
3
|
+
* based on the installed Playwright version.
|
|
4
|
+
*/
|
|
5
|
+
import type { BasePlaywrightCodegen } from "./types";
|
|
6
|
+
import { type CodegenApproach, type PlaywrightVersion } from "./version";
|
|
7
|
+
export type CodegenFactoryResult = {
|
|
8
|
+
codegen: BasePlaywrightCodegen;
|
|
9
|
+
approach: CodegenApproach;
|
|
10
|
+
version: PlaywrightVersion;
|
|
11
|
+
};
|
|
12
|
+
export declare function createPlaywrightCodegen(repoDir: string): Promise<CodegenFactoryResult>;
|
|
13
|
+
export declare function prepareCodegenIfNeeded(repoDir: string, approach: CodegenApproach): Promise<void>;
|
|
14
|
+
export { type CodegenApproach, type PlaywrightVersion };
|
|
15
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/agent/cua/pw-codegen/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAoD/B;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPlaywrightCodegen = createPlaywrightCodegen;
|
|
4
|
+
exports.prepareCodegenIfNeeded = prepareCodegenIfNeeded;
|
|
5
|
+
/**
|
|
6
|
+
* Factory for creating the appropriate Playwright codegen implementation
|
|
7
|
+
* based on the installed Playwright version.
|
|
8
|
+
*/
|
|
9
|
+
const logger_1 = require("../../../logger");
|
|
10
|
+
const pw_event_sink_1 = require("./pw-event-sink");
|
|
11
|
+
const pw_pause_1 = require("./pw-pause");
|
|
12
|
+
const version_1 = require("./version");
|
|
13
|
+
async function createPlaywrightCodegen(repoDir) {
|
|
14
|
+
const version = await (0, version_1.detectPlaywrightVersion)(repoDir);
|
|
15
|
+
if (!version) {
|
|
16
|
+
throw new Error("Could not detect Playwright version. Make sure @playwright/test is installed.");
|
|
17
|
+
}
|
|
18
|
+
const approach = (0, version_1.getCodegenApproach)(version);
|
|
19
|
+
logger_1.logger.info(`Detected Playwright ${version.full}, using "${approach}" codegen approach`);
|
|
20
|
+
switch (approach) {
|
|
21
|
+
case "event-sink": {
|
|
22
|
+
const canUse = await (0, pw_event_sink_1.canUseEventSinkCodegen)();
|
|
23
|
+
if (!canUse) {
|
|
24
|
+
throw new Error("Cannot use event-sink codegen. Check that RUN_PLAYWRIGHT_HEADED=true.");
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
codegen: new pw_event_sink_1.PlaywrightEventSinkCodegen(),
|
|
28
|
+
approach,
|
|
29
|
+
version,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
case "patch": {
|
|
33
|
+
const canUse = await (0, pw_pause_1.canUsePauseCodegen)(repoDir);
|
|
34
|
+
if (!canUse) {
|
|
35
|
+
throw new Error("Cannot use patch-based codegen. Check requirements: " +
|
|
36
|
+
"RUN_PLAYWRIGHT_HEADED=true, PW_CODEGEN_NO_INSPECTOR=true, and patched recorder.");
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
codegen: new pw_pause_1.PlaywrightPauseCodegen(),
|
|
40
|
+
approach,
|
|
41
|
+
version,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
case "unsupported":
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`Unsupported Playwright version: ${version.full}. ` +
|
|
47
|
+
"Supported versions: 1.47.x, 1.53.x (patch), 1.57.0+ (event-sink).");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function prepareCodegenIfNeeded(repoDir, approach) {
|
|
51
|
+
if (approach === "patch") {
|
|
52
|
+
logger_1.logger.info("Preparing Playwright for patch-based codegen...");
|
|
53
|
+
await (0, pw_pause_1.preparePatchCodegen)(repoDir);
|
|
54
|
+
}
|
|
55
|
+
else if (approach === "event-sink") {
|
|
56
|
+
logger_1.logger.info("Preparing Playwright for event-sink codegen...");
|
|
57
|
+
await (0, pw_event_sink_1.prepareEventSinkCodegen)(repoDir);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright Codegen - exports for external use
|
|
3
|
+
*/
|
|
4
|
+
export { type CodegenApproach, type CodegenFactoryResult, createPlaywrightCodegen, type PlaywrightVersion, prepareCodegenIfNeeded, } from "./factory";
|
|
5
|
+
export type { BasePlaywrightCodegen } from "./types";
|
|
6
|
+
export { detectPlaywrightVersion, getCodegenApproach, getPlaywrightVersionFromNpmList, parseVersion, } from "./version";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/agent/cua/pw-codegen/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,+BAA+B,EAC/B,YAAY,GACb,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseVersion = exports.getPlaywrightVersionFromNpmList = exports.getCodegenApproach = exports.detectPlaywrightVersion = exports.prepareCodegenIfNeeded = exports.createPlaywrightCodegen = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Playwright Codegen - exports for external use
|
|
6
|
+
*/
|
|
7
|
+
var factory_1 = require("./factory");
|
|
8
|
+
Object.defineProperty(exports, "createPlaywrightCodegen", { enumerable: true, get: function () { return factory_1.createPlaywrightCodegen; } });
|
|
9
|
+
Object.defineProperty(exports, "prepareCodegenIfNeeded", { enumerable: true, get: function () { return factory_1.prepareCodegenIfNeeded; } });
|
|
10
|
+
var version_1 = require("./version");
|
|
11
|
+
Object.defineProperty(exports, "detectPlaywrightVersion", { enumerable: true, get: function () { return version_1.detectPlaywrightVersion; } });
|
|
12
|
+
Object.defineProperty(exports, "getCodegenApproach", { enumerable: true, get: function () { return version_1.getCodegenApproach; } });
|
|
13
|
+
Object.defineProperty(exports, "getPlaywrightVersionFromNpmList", { enumerable: true, get: function () { return version_1.getPlaywrightVersionFromNpmList; } });
|
|
14
|
+
Object.defineProperty(exports, "parseVersion", { enumerable: true, get: function () { return version_1.parseVersion; } });
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright Codegen using RecorderEventSink API (Playwright 1.57.0+)
|
|
3
|
+
*
|
|
4
|
+
* This implementation uses Playwright's internal RecorderEventSink interface
|
|
5
|
+
* to capture generated code without patching any files.
|
|
6
|
+
*
|
|
7
|
+
* How it works:
|
|
8
|
+
* 1. Call _enableRecorder() with mode: 'recording' and recorderMode: 'api'
|
|
9
|
+
* 2. Playwright's Recorder captures all user actions
|
|
10
|
+
* 3. Events flow to our eventSink callbacks with generated code
|
|
11
|
+
* 4. No inspector UI opens (recorderMode: 'api' skips UI)
|
|
12
|
+
*
|
|
13
|
+
* Requirements:
|
|
14
|
+
* - Playwright 1.57.0 or higher
|
|
15
|
+
* - RUN_PLAYWRIGHT_HEADED=true (recorder needs headed mode)
|
|
16
|
+
* - A small patch to recorderApp.js to allow recorderMode: 'api' with PW_CODEGEN_NO_INSPECTOR
|
|
17
|
+
*/
|
|
18
|
+
import type { BrowserContext, Page } from "playwright";
|
|
19
|
+
import type { BasePlaywrightCodegen } from "../types";
|
|
20
|
+
/**
|
|
21
|
+
* Prepares Playwright 1.57+ for event-sink codegen by patching recorderApp.js
|
|
22
|
+
* to allow recorderMode: 'api' even when PW_CODEGEN_NO_INSPECTOR is set.
|
|
23
|
+
*/
|
|
24
|
+
export declare function prepareEventSinkCodegen(repoDir: string): Promise<void>;
|
|
25
|
+
export declare function canUseEventSinkCodegen(): Promise<boolean>;
|
|
26
|
+
export declare function hasEventSinkSupport(context: BrowserContext): boolean;
|
|
27
|
+
export declare class PlaywrightEventSinkCodegen implements BasePlaywrightCodegen {
|
|
28
|
+
private page;
|
|
29
|
+
private codeBuffer;
|
|
30
|
+
private lastActionPromise;
|
|
31
|
+
private resolveLastAction;
|
|
32
|
+
private lastReturnedEntry;
|
|
33
|
+
private isGettingLastAction;
|
|
34
|
+
private eventSink;
|
|
35
|
+
private notifyActionReceived;
|
|
36
|
+
private waitForNextAction;
|
|
37
|
+
initialize(page: Page): Promise<void>;
|
|
38
|
+
recordAction(): Promise<void>;
|
|
39
|
+
getCodeForLastAction(): Promise<string>;
|
|
40
|
+
private waitForPendingSignals;
|
|
41
|
+
private wrapCodeWithSignals;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/agent/cua/pw-codegen/pw-event-sink/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAItD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC5E;AA8CD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa/D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAEpE;AAQD,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,SAAS,CAkDf;IAEF,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IASnB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;YAuD/B,qBAAqB;IAOnC,OAAO,CAAC,mBAAmB;CA0D5B"}
|