@empiricalrun/test-gen 0.71.2 → 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/dist/agent/chat/agent-loop.d.ts +11 -9
- package/dist/agent/chat/agent-loop.d.ts.map +1 -1
- package/dist/agent/chat/agent-loop.js +20 -10
- package/dist/agent/chat/exports.d.ts +2 -2
- package/dist/agent/chat/exports.d.ts.map +1 -1
- package/dist/agent/chat/exports.js +6 -1
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +53 -28
- package/dist/agent/chat/prompt/index.d.ts +2 -2
- package/dist/agent/chat/prompt/index.d.ts.map +1 -1
- package/dist/agent/chat/prompt/index.js +5 -4
- 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 +20 -11
- package/dist/agent/chat/state.d.ts +2 -2
- package/dist/agent/chat/state.d.ts.map +1 -1
- package/dist/agent/chat/types.d.ts +0 -6
- package/dist/agent/chat/types.d.ts.map +1 -1
- package/dist/agent/chat/utils/tool-calls.d.ts +21 -0
- package/dist/agent/chat/utils/tool-calls.d.ts.map +1 -0
- package/dist/agent/chat/utils/tool-calls.js +64 -0
- package/dist/agent/chat/utils.d.ts +2 -4
- package/dist/agent/chat/utils.d.ts.map +1 -1
- package/dist/agent/chat/utils.js +5 -11
- package/dist/agent/code-review/prompt.d.ts +2 -0
- package/dist/agent/code-review/prompt.d.ts.map +1 -0
- package/dist/agent/code-review/prompt.js +19 -0
- package/dist/agent/codegen/create-test-block.d.ts.map +1 -1
- package/dist/agent/codegen/create-test-block.js +0 -10
- package/dist/agent/diagnosis-agent/index.d.ts.map +1 -1
- package/dist/agent/diagnosis-agent/index.js +0 -9
- package/dist/agent/master/browser-tests/index.spec.js +1 -1
- package/dist/agent/master/execute-browser-action.d.ts +1 -1
- package/dist/agent/master/execute-browser-action.d.ts.map +1 -1
- package/dist/agent/master/execute-skill-action.d.ts +1 -1
- package/dist/agent/master/execute-skill-action.d.ts.map +1 -1
- package/dist/agent/master/run.d.ts.map +1 -1
- package/dist/agent/master/run.js +0 -74
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/index.js +18 -6
- package/dist/artifacts/utils.d.ts +2 -2
- package/dist/artifacts/utils.d.ts.map +1 -1
- package/dist/artifacts/utils.js +16 -5
- package/dist/auth/cli-auth.d.ts.map +1 -1
- package/dist/auth/cli-auth.js +3 -7
- package/dist/auth/index.d.ts +1 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -4
- package/dist/auth/token-store.d.ts +1 -1
- package/dist/auth/token-store.d.ts.map +1 -1
- package/dist/auth/token-store.js +3 -3
- package/dist/bin/environments.d.ts +5 -1
- package/dist/bin/environments.d.ts.map +1 -1
- package/dist/bin/environments.js +76 -44
- package/dist/bin/index.js +33 -74
- package/dist/bin/setup.d.ts +3 -1
- package/dist/bin/setup.d.ts.map +1 -1
- package/dist/bin/setup.js +16 -20
- package/dist/dashboard/client.d.ts +26 -0
- package/dist/dashboard/client.d.ts.map +1 -0
- package/dist/dashboard/client.js +185 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +9 -0
- package/dist/dashboard/totp.d.ts +2 -0
- package/dist/dashboard/totp.d.ts.map +1 -0
- package/dist/dashboard/totp.js +14 -0
- package/dist/dashboard/types.d.ts +9 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +17 -0
- package/dist/file-info/file-system.d.ts +3 -0
- package/dist/file-info/file-system.d.ts.map +1 -0
- package/dist/{utils/file-tree.js → file-info/file-system.js} +2 -8
- package/dist/file-info/github.d.ts +3 -0
- package/dist/file-info/github.d.ts.map +1 -0
- package/dist/file-info/github.js +107 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -9
- package/dist/recorder/env-variables.d.ts.map +1 -1
- package/dist/recorder/env-variables.js +3 -7
- package/dist/recorder/index.js +5 -5
- package/dist/recorder/request.js +4 -9
- package/dist/recorder/upload.d.ts +3 -2
- package/dist/recorder/upload.d.ts.map +1 -1
- package/dist/recorder/upload.js +20 -22
- package/dist/tools/commit-and-create-pr.d.ts.map +1 -1
- package/dist/tools/commit-and-create-pr.js +44 -37
- package/dist/tools/definitions/run-test.d.ts +23 -0
- package/dist/tools/definitions/run-test.d.ts.map +1 -0
- package/dist/tools/definitions/run-test.js +28 -0
- package/dist/tools/definitions/str_replace_editor.d.ts +3 -0
- package/dist/tools/definitions/str_replace_editor.d.ts.map +1 -0
- package/dist/tools/definitions/str_replace_editor.js +74 -0
- package/dist/tools/definitions/test-gen-browser.d.ts +26 -0
- package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -0
- package/dist/tools/definitions/test-gen-browser.js +88 -0
- package/dist/tools/delete-file.d.ts +3 -0
- package/dist/tools/delete-file.d.ts.map +1 -0
- package/dist/tools/delete-file.js +83 -0
- package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
- package/dist/tools/diagnosis-fetcher.js +3 -7
- package/dist/tools/executor/index.d.ts +24 -0
- package/dist/tools/executor/index.d.ts.map +1 -0
- package/dist/{tool-call-service → tools/executor}/index.js +38 -58
- package/dist/tools/executor/utils/checkpoint.d.ts +7 -0
- package/dist/tools/executor/utils/checkpoint.d.ts.map +1 -0
- package/dist/{utils → tools/executor/utils}/checkpoint.js +6 -5
- package/dist/{utils → tools/executor/utils}/git.d.ts +7 -12
- package/dist/tools/executor/utils/git.d.ts.map +1 -0
- package/dist/{utils → tools/executor/utils}/git.js +11 -36
- package/dist/tools/executor/utils/index.d.ts +77 -0
- package/dist/tools/executor/utils/index.d.ts.map +1 -0
- package/dist/tools/executor/utils/index.js +121 -0
- package/dist/tools/executor/utils/pr-description.d.ts +4 -0
- package/dist/tools/executor/utils/pr-description.d.ts.map +1 -0
- package/dist/tools/executor/utils/pr-description.js +24 -0
- package/dist/tools/fetch-image/index.d.ts +3 -0
- package/dist/tools/fetch-image/index.d.ts.map +1 -0
- package/dist/tools/fetch-image/index.js +56 -0
- package/dist/tools/grep/index.d.ts.map +1 -1
- package/dist/tools/grep/index.js +1 -1
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +60 -0
- package/dist/tools/list-environments.d.ts.map +1 -1
- package/dist/tools/list-environments.js +2 -5
- package/dist/tools/merge-conflicts.d.ts +3 -0
- package/dist/tools/merge-conflicts.d.ts.map +1 -0
- package/dist/tools/merge-conflicts.js +107 -0
- package/dist/tools/run-test.d.ts.map +1 -1
- package/dist/tools/run-test.js +4 -25
- package/dist/tools/str_replace_editor.d.ts.map +1 -1
- package/dist/tools/str_replace_editor.js +6 -58
- package/dist/tools/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/test-gen-browser.js +2 -83
- package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
- package/dist/tools/test-run-fetcher/index.js +2 -6
- package/dist/tools/upgrade-packages/index.d.ts.map +1 -1
- package/dist/tools/upgrade-packages/index.js +12 -13
- package/dist/tools/upgrade-packages/utils.d.ts +3 -2
- package/dist/tools/upgrade-packages/utils.d.ts.map +1 -1
- package/dist/tools/upgrade-packages/utils.js +5 -8
- package/dist/tools/utils/queue.d.ts +5 -0
- package/dist/tools/utils/queue.d.ts.map +1 -0
- package/dist/tools/utils/queue.js +41 -0
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/SQSClient.d.ts +14 -0
- package/dist/utils/SQSClient.d.ts.map +1 -0
- package/dist/utils/SQSClient.js +116 -0
- package/dist/utils/repo-tree.d.ts +1 -1
- package/dist/utils/repo-tree.d.ts.map +1 -1
- package/dist/utils/repo-tree.js +7 -7
- package/package.json +16 -8
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/auth/api-client.d.ts +0 -13
- package/dist/auth/api-client.d.ts.map +0 -1
- package/dist/auth/api-client.js +0 -103
- package/dist/session/index.d.ts +0 -20
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -104
- package/dist/tool-call-service/index.d.ts +0 -32
- package/dist/tool-call-service/index.d.ts.map +0 -1
- package/dist/tool-call-service/utils.d.ts +0 -6
- package/dist/tool-call-service/utils.d.ts.map +0 -1
- package/dist/tool-call-service/utils.js +0 -57
- package/dist/tools/utils/index.d.ts +0 -61
- package/dist/tools/utils/index.d.ts.map +0 -1
- package/dist/tools/utils/index.js +0 -122
- package/dist/utils/checkpoint.d.ts +0 -7
- package/dist/utils/checkpoint.d.ts.map +0 -1
- package/dist/utils/file-tree.d.ts +0 -3
- package/dist/utils/file-tree.d.ts.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQSClient = void 0;
|
|
4
|
+
class SQSClient {
|
|
5
|
+
region;
|
|
6
|
+
accessKeyId;
|
|
7
|
+
secretAccessKey;
|
|
8
|
+
sessionToken;
|
|
9
|
+
constructor(region, accessKeyId, secretAccessKey, sessionToken) {
|
|
10
|
+
this.region = region;
|
|
11
|
+
this.accessKeyId = accessKeyId;
|
|
12
|
+
this.secretAccessKey = secretAccessKey;
|
|
13
|
+
this.sessionToken = sessionToken;
|
|
14
|
+
}
|
|
15
|
+
async sha256(message) {
|
|
16
|
+
const msgBuffer = new TextEncoder().encode(message);
|
|
17
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer);
|
|
18
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
19
|
+
return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
20
|
+
}
|
|
21
|
+
async hmacSha256(key, message) {
|
|
22
|
+
const cryptoKey = await crypto.subtle.importKey("raw", key, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
23
|
+
return await crypto.subtle.sign("HMAC", cryptoKey, new TextEncoder().encode(message));
|
|
24
|
+
}
|
|
25
|
+
async getSignatureKey(key, dateStamp, regionName, serviceName) {
|
|
26
|
+
const kDate = await this.hmacSha256(new TextEncoder().encode("AWS4" + key), dateStamp);
|
|
27
|
+
const kRegion = await this.hmacSha256(kDate, regionName);
|
|
28
|
+
const kService = await this.hmacSha256(kRegion, serviceName);
|
|
29
|
+
const kSigning = await this.hmacSha256(kService, "aws4_request");
|
|
30
|
+
return kSigning;
|
|
31
|
+
}
|
|
32
|
+
async sign(stringToSign, signingKey) {
|
|
33
|
+
const signature = await this.hmacSha256(signingKey, stringToSign);
|
|
34
|
+
const signatureArray = Array.from(new Uint8Array(signature));
|
|
35
|
+
return signatureArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
36
|
+
}
|
|
37
|
+
async sendMessage(queueUrl, payload) {
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(queueUrl);
|
|
40
|
+
const host = url.hostname;
|
|
41
|
+
const canonicalUri = url.pathname;
|
|
42
|
+
const now = new Date();
|
|
43
|
+
// The following two operations generate AWS-compliant timestamps:
|
|
44
|
+
// - amzDate: The full ISO8601 timestamp (without milliseconds and with no separators), used for the x-amz-date header.
|
|
45
|
+
// - dateStamp: The date portion (YYYYMMDD), used in the credential scope for AWS Signature V4.
|
|
46
|
+
const amzDate = now
|
|
47
|
+
.toISOString()
|
|
48
|
+
.replace(/\.\d{3}Z$/, "Z")
|
|
49
|
+
.replace(/[:-]/g, "");
|
|
50
|
+
const dateStamp = amzDate.slice(0, 8);
|
|
51
|
+
const method = "POST";
|
|
52
|
+
const service = "sqs";
|
|
53
|
+
const algorithm = "AWS4-HMAC-SHA256";
|
|
54
|
+
const credentialScope = `${dateStamp}/${this.region}/${service}/aws4_request`;
|
|
55
|
+
const messageBody = {
|
|
56
|
+
Action: "SendMessage",
|
|
57
|
+
Version: "2012-11-05",
|
|
58
|
+
QueueUrl: queueUrl,
|
|
59
|
+
MessageBody: JSON.stringify(payload),
|
|
60
|
+
MessageGroupId: payload.requestId,
|
|
61
|
+
MessageDeduplicationId: payload.requestId,
|
|
62
|
+
};
|
|
63
|
+
const body = Object.entries(messageBody)
|
|
64
|
+
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
|
|
65
|
+
.join("&");
|
|
66
|
+
const payloadHash = await this.sha256(body);
|
|
67
|
+
const canonicalHeaders = [
|
|
68
|
+
`host:${host}`,
|
|
69
|
+
`x-amz-date:${amzDate}`,
|
|
70
|
+
"",
|
|
71
|
+
].join("\n");
|
|
72
|
+
const signedHeaders = "host;x-amz-date";
|
|
73
|
+
const canonicalRequest = [
|
|
74
|
+
method,
|
|
75
|
+
canonicalUri,
|
|
76
|
+
"",
|
|
77
|
+
canonicalHeaders,
|
|
78
|
+
signedHeaders,
|
|
79
|
+
payloadHash,
|
|
80
|
+
].join("\n");
|
|
81
|
+
const stringToSign = [
|
|
82
|
+
algorithm,
|
|
83
|
+
amzDate,
|
|
84
|
+
credentialScope,
|
|
85
|
+
await this.sha256(canonicalRequest),
|
|
86
|
+
].join("\n");
|
|
87
|
+
const signingKey = await this.getSignatureKey(this.secretAccessKey, dateStamp, this.region, service);
|
|
88
|
+
const signature = await this.sign(stringToSign, signingKey);
|
|
89
|
+
const authorizationHeader = `${algorithm} Credential=${this.accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
|
|
90
|
+
const headers = {
|
|
91
|
+
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
|
|
92
|
+
Host: host,
|
|
93
|
+
"X-Amz-Date": amzDate,
|
|
94
|
+
Authorization: authorizationHeader,
|
|
95
|
+
};
|
|
96
|
+
if (this.sessionToken) {
|
|
97
|
+
headers["X-Amz-Security-Token"] = this.sessionToken;
|
|
98
|
+
}
|
|
99
|
+
const response = await fetch(queueUrl, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers,
|
|
102
|
+
body: body,
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
const errorText = await response.text();
|
|
106
|
+
console.error(`[SQSClient.sendMessage] SQS request failed: ${response.status} ${response.statusText} - ${errorText}`);
|
|
107
|
+
throw new Error(`SQS request failed: ${response.status} ${response.statusText} - ${errorText}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error("[SQSClient.sendMessage] Error:", err instanceof Error ? err.stack || err.message : err);
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.SQSClient = SQSClient;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileInfo } from "
|
|
1
|
+
import { FileInfo } from "@empiricalrun/shared-types";
|
|
2
2
|
export declare const DEFAULT_EXCLUDE: (string | RegExp)[];
|
|
3
3
|
export declare function generateAsciiTree(root: FileInfo, options?: {}): string;
|
|
4
4
|
//# sourceMappingURL=repo-tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-tree.d.ts","sourceRoot":"","sources":["../../src/utils/repo-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"repo-tree.d.ts","sourceRoot":"","sources":["../../src/utils/repo-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,eAAO,MAAM,eAAe,qBAW3B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK,UAqF7D"}
|
package/dist/utils/repo-tree.js
CHANGED
|
@@ -21,7 +21,7 @@ function generateAsciiTree(root, options = {}) {
|
|
|
21
21
|
maxDepth: 10,
|
|
22
22
|
};
|
|
23
23
|
const opts = { ...defaultOptions, ...options };
|
|
24
|
-
if (
|
|
24
|
+
if (root.type !== "directory") {
|
|
25
25
|
throw new Error(`"${root.path}" is not a valid directory`);
|
|
26
26
|
}
|
|
27
27
|
let result = root.name + "\n";
|
|
@@ -31,9 +31,9 @@ function generateAsciiTree(root, options = {}) {
|
|
|
31
31
|
.filter((child) => child !== undefined)
|
|
32
32
|
.sort((a, b) => {
|
|
33
33
|
// Files first, then directories
|
|
34
|
-
if (
|
|
34
|
+
if (a.type !== "directory" && b.type === "directory")
|
|
35
35
|
return -1;
|
|
36
|
-
if (a.
|
|
36
|
+
if (a.type === "directory" && b.type !== "directory")
|
|
37
37
|
return 1;
|
|
38
38
|
return a.name.localeCompare(b.name);
|
|
39
39
|
});
|
|
@@ -62,17 +62,17 @@ function generateAsciiTree(root, options = {}) {
|
|
|
62
62
|
continue;
|
|
63
63
|
// Add the current item to the result
|
|
64
64
|
const symbol = isLast ? "└── " : "├── ";
|
|
65
|
-
result += `${prefix}${symbol}${node.name}${node.
|
|
66
|
-
if (node.
|
|
65
|
+
result += `${prefix}${symbol}${node.name}${node.type === "directory" ? "/" : ""}\n`;
|
|
66
|
+
if (node.type === "directory" && node.children.length > 0) {
|
|
67
67
|
const nextPrefix = prefix + (isLast ? " " : "│ ");
|
|
68
68
|
// Sort and add children to stack in reverse order
|
|
69
69
|
const children = [...node.children]
|
|
70
70
|
.filter((child) => child !== undefined)
|
|
71
71
|
.sort((a, b) => {
|
|
72
72
|
// Files first, then directories
|
|
73
|
-
if (
|
|
73
|
+
if (a.type !== "directory" && b.type === "directory")
|
|
74
74
|
return -1;
|
|
75
|
-
if (a.
|
|
75
|
+
if (a.type === "directory" && b.type !== "directory")
|
|
76
76
|
return 1;
|
|
77
77
|
return a.name.localeCompare(b.name);
|
|
78
78
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empiricalrun/test-gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.73.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -26,9 +26,17 @@
|
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
27
|
"default": "./dist/index.js"
|
|
28
28
|
},
|
|
29
|
-
"./tool-
|
|
30
|
-
"types": "./dist/
|
|
31
|
-
"default": "./dist/
|
|
29
|
+
"./tool-caller": {
|
|
30
|
+
"types": "./dist/tools/index.d.ts",
|
|
31
|
+
"default": "./dist/tools/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./tool-executor": {
|
|
34
|
+
"types": "./dist/tools/executor/index.d.ts",
|
|
35
|
+
"default": "./dist/tools/executor/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./dashboard": {
|
|
38
|
+
"types": "./dist/dashboard/index.d.ts",
|
|
39
|
+
"default": "./dist/dashboard/index.js"
|
|
32
40
|
}
|
|
33
41
|
},
|
|
34
42
|
"repository": {
|
|
@@ -37,8 +45,8 @@
|
|
|
37
45
|
},
|
|
38
46
|
"author": "Empirical Team <hey@empirical.run>",
|
|
39
47
|
"dependencies": {
|
|
40
|
-
"@aws-sdk/client-sqs": "^3.787.0",
|
|
41
48
|
"@babel/parser": "^7.26.3",
|
|
49
|
+
"@epic-web/totp": "^4.0.1",
|
|
42
50
|
"@types/sanitize-html": "^2.11.0",
|
|
43
51
|
"async-retry": "^1.3.3",
|
|
44
52
|
"commander": "^12.1.0",
|
|
@@ -64,9 +72,9 @@
|
|
|
64
72
|
"tsx": "^4.16.2",
|
|
65
73
|
"typescript": "^5.3.3",
|
|
66
74
|
"zod": "^3.23.8",
|
|
67
|
-
"@empiricalrun/llm": "^0.
|
|
75
|
+
"@empiricalrun/llm": "^0.20.1",
|
|
68
76
|
"@empiricalrun/r2-uploader": "^0.3.9",
|
|
69
|
-
"@empiricalrun/test-run": "^0.10.
|
|
77
|
+
"@empiricalrun/test-run": "^0.10.9"
|
|
70
78
|
},
|
|
71
79
|
"devDependencies": {
|
|
72
80
|
"@playwright/test": "1.53.2",
|
|
@@ -82,7 +90,7 @@
|
|
|
82
90
|
"playwright": "1.53.2",
|
|
83
91
|
"serve-handler": "^6.1.6",
|
|
84
92
|
"ts-patch": "^3.3.0",
|
|
85
|
-
"@empiricalrun/shared-types": "0.
|
|
93
|
+
"@empiricalrun/shared-types": "0.8.0"
|
|
86
94
|
},
|
|
87
95
|
"scripts": {
|
|
88
96
|
"dev": "tspc --build --watch",
|
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/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/cua/pw-codegen/pw-pause/utils.ts","./src/agent/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.ts","./src/agent/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/
|
|
1
|
+
{"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/utils/tool-calls.ts","./src/agent/code-review/prompt.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/cua/pw-codegen/pw-pause/utils.ts","./src/agent/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.ts","./src/agent/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/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/totp.ts","./src/dashboard/types.ts","./src/errors/index.ts","./src/evals/add-scenario-agent.evals.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/infer-master-or-code-agent.evals.ts","./src/evals/master-agent.evals.ts","./src/evals/type.ts","./src/evals/update-scenario-agent.evals.ts","./src/file/client.ts","./src/file/server.ts","./src/file-info/file-system.ts","./src/file-info/github.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/test-build/index.ts","./src/tools/commit-and-create-pr.ts","./src/tools/delete-file.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/download-build.ts","./src/tools/index.ts","./src/tools/list-environments.ts","./src/tools/merge-conflicts.ts","./src/tools/run-test.ts","./src/tools/str_replace_editor.ts","./src/tools/test-gen-browser.ts","./src/tools/definitions/run-test.ts","./src/tools/definitions/str_replace_editor.ts","./src/tools/definitions/test-gen-browser.ts","./src/tools/executor/index.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-image/index.ts","./src/tools/grep/index.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/grep/ripgrep/types.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/queue.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/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts"],"version":"5.8.3"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
declare class APIClient {
|
|
2
|
-
private appUrl;
|
|
3
|
-
constructor();
|
|
4
|
-
request<T>(endpoint: string, options?: RequestInit): Promise<Response & {
|
|
5
|
-
json(): Promise<T>;
|
|
6
|
-
}>;
|
|
7
|
-
private makeRequest;
|
|
8
|
-
ensureAuthenticated(): Promise<void>;
|
|
9
|
-
private refreshToken;
|
|
10
|
-
}
|
|
11
|
-
export declare const apiClient: APIClient;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/auth/api-client.ts"],"names":[],"mappings":"AAQA,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAS;;IAMjB,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC;YA2B/B,WAAW;IAuBnB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;YAiB5B,YAAY;CA4C3B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
package/dist/auth/api-client.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.apiClient = void 0;
|
|
4
|
-
const logger_1 = require("../logger");
|
|
5
|
-
const token_store_1 = require("./token-store");
|
|
6
|
-
class APIClient {
|
|
7
|
-
appUrl;
|
|
8
|
-
constructor() {
|
|
9
|
-
this.appUrl = process.env.DASHBOARD_DOMAIN || "https://dash.empirical.run";
|
|
10
|
-
}
|
|
11
|
-
async request(endpoint, options = {}) {
|
|
12
|
-
await this.ensureAuthenticated();
|
|
13
|
-
const tokens = await (0, token_store_1.getStoredTokens)();
|
|
14
|
-
if (!tokens) {
|
|
15
|
-
throw new Error("Not authenticated. Please run the login command first.");
|
|
16
|
-
}
|
|
17
|
-
const response = await this.makeRequest(endpoint, options, tokens.access_token);
|
|
18
|
-
if (response.status === 401) {
|
|
19
|
-
logger_1.logger.debug("Access token expired, attempting to refresh...");
|
|
20
|
-
const refreshed = await this.refreshToken();
|
|
21
|
-
if (refreshed) {
|
|
22
|
-
const newTokens = await (0, token_store_1.getStoredTokens)();
|
|
23
|
-
if (newTokens) {
|
|
24
|
-
return this.makeRequest(endpoint, options, newTokens.access_token);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
throw new Error("Authentication failed. Please run the login command again.");
|
|
28
|
-
}
|
|
29
|
-
return response;
|
|
30
|
-
}
|
|
31
|
-
async makeRequest(endpoint, options, accessToken) {
|
|
32
|
-
const url = endpoint.startsWith("http")
|
|
33
|
-
? endpoint
|
|
34
|
-
: `${this.appUrl}${endpoint}`;
|
|
35
|
-
// Don't set Content-Type for FormData (let browser set it automatically)
|
|
36
|
-
const headers = {
|
|
37
|
-
Authorization: `Bearer ${accessToken}`,
|
|
38
|
-
...options.headers,
|
|
39
|
-
};
|
|
40
|
-
// Only set Content-Type to application/json if body is not FormData
|
|
41
|
-
if (!(options.body instanceof FormData)) {
|
|
42
|
-
headers["Content-Type"] = "application/json";
|
|
43
|
-
}
|
|
44
|
-
return fetch(url, {
|
|
45
|
-
...options,
|
|
46
|
-
headers,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
async ensureAuthenticated() {
|
|
50
|
-
if (!(await (0, token_store_1.isAuthenticated)())) {
|
|
51
|
-
const tokens = await (0, token_store_1.getStoredTokens)();
|
|
52
|
-
if (!tokens) {
|
|
53
|
-
throw new Error("Not authenticated. Please run the login command first.");
|
|
54
|
-
}
|
|
55
|
-
// Token exists but is expired, try to refresh
|
|
56
|
-
const refreshed = await this.refreshToken();
|
|
57
|
-
if (!refreshed) {
|
|
58
|
-
throw new Error("Session expired. Please run the login command again.");
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async refreshToken() {
|
|
63
|
-
const tokens = await (0, token_store_1.getStoredTokens)();
|
|
64
|
-
if (!tokens || !tokens.refresh_token) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
try {
|
|
68
|
-
// Use dashboard refresh endpoint instead of Supabase directly
|
|
69
|
-
const response = await fetch(`${this.appUrl}/api/cli/refresh`, {
|
|
70
|
-
method: "POST",
|
|
71
|
-
headers: {
|
|
72
|
-
"Content-Type": "application/json",
|
|
73
|
-
},
|
|
74
|
-
body: JSON.stringify({
|
|
75
|
-
refresh_token: tokens.refresh_token,
|
|
76
|
-
}),
|
|
77
|
-
});
|
|
78
|
-
if (!response.ok) {
|
|
79
|
-
const errorText = await response.text();
|
|
80
|
-
console.error("Token refresh failed:", errorText);
|
|
81
|
-
await (0, token_store_1.clearTokens)();
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
const data = await response.json();
|
|
85
|
-
// Store the new tokens (refresh token rotation means we get a new refresh token)
|
|
86
|
-
await (0, token_store_1.storeTokens)({
|
|
87
|
-
access_token: data.access_token,
|
|
88
|
-
refresh_token: data.refresh_token,
|
|
89
|
-
expires_at: data.expires_at,
|
|
90
|
-
user_id: data.user?.id || tokens.user_id,
|
|
91
|
-
user_email: data.user?.email || tokens.user_email,
|
|
92
|
-
});
|
|
93
|
-
logger_1.logger.debug("Access token refreshed successfully via dashboard");
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error("Token refresh error:", error);
|
|
98
|
-
await (0, token_store_1.clearTokens)();
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
exports.apiClient = new APIClient();
|
package/dist/session/index.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
declare function getSessionDetails(): {
|
|
2
|
-
generationId: number | undefined;
|
|
3
|
-
sessionId: number | undefined;
|
|
4
|
-
testUrl: string | undefined;
|
|
5
|
-
version: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function setSessionDetails({ sessionId, generationId, testCaseId, projectRepoName, }: {
|
|
8
|
-
sessionId: number;
|
|
9
|
-
generationId: number;
|
|
10
|
-
testCaseId: number;
|
|
11
|
-
projectRepoName: string;
|
|
12
|
-
}): void;
|
|
13
|
-
export declare function shouldStopSession(): Promise<boolean>;
|
|
14
|
-
export declare function getSessionState(): Promise<"started" | "completed" | "request_complete">;
|
|
15
|
-
export declare function endSession(): Promise<void>;
|
|
16
|
-
export { getSessionDetails };
|
|
17
|
-
export declare function updateSessionStatus(sessionId: number, payload: {
|
|
18
|
-
status: string;
|
|
19
|
-
}): Promise<void>;
|
|
20
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAmBA,iBAAS,iBAAiB;;;;;EAOzB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,YAAY,EACZ,UAAU,EACV,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,QAIA;AAED,wBAAsB,iBAAiB,qBAItC;AAED,wBAAsB,eAAe,0DA0BpC;AAED,wBAAsB,UAAU,kBAyB/B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;CAChB,iBAmBF"}
|
package/dist/session/index.js
DELETED
|
@@ -1,104 +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.setSessionDetails = setSessionDetails;
|
|
7
|
-
exports.shouldStopSession = shouldStopSession;
|
|
8
|
-
exports.getSessionState = getSessionState;
|
|
9
|
-
exports.endSession = endSession;
|
|
10
|
-
exports.getSessionDetails = getSessionDetails;
|
|
11
|
-
exports.updateSessionStatus = updateSessionStatus;
|
|
12
|
-
const package_json_1 = __importDefault(require("../../package.json"));
|
|
13
|
-
const env_1 = require("../utils/env");
|
|
14
|
-
const sessionDetails = {
|
|
15
|
-
sessionId: undefined,
|
|
16
|
-
version: package_json_1.default.version,
|
|
17
|
-
generationId: undefined,
|
|
18
|
-
testUrl: undefined,
|
|
19
|
-
};
|
|
20
|
-
const DASHBOARD_DOMAIN = process.env.DASHBOARD_DOMAIN ||
|
|
21
|
-
((0, env_1.isRunningOnCloud)() ? "https://dash.empirical.run" : "");
|
|
22
|
-
function getSessionDetails() {
|
|
23
|
-
return {
|
|
24
|
-
generationId: sessionDetails.generationId,
|
|
25
|
-
sessionId: sessionDetails.sessionId,
|
|
26
|
-
testUrl: sessionDetails.testUrl,
|
|
27
|
-
version: package_json_1.default.version,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function setSessionDetails({ sessionId, generationId, testCaseId, projectRepoName, }) {
|
|
31
|
-
sessionDetails.sessionId = sessionId;
|
|
32
|
-
sessionDetails.generationId = generationId;
|
|
33
|
-
sessionDetails.testUrl = `${process.env.DASHBOARD_DOMAIN ?? ""}/${projectRepoName}/test-cases/${testCaseId}`;
|
|
34
|
-
}
|
|
35
|
-
async function shouldStopSession() {
|
|
36
|
-
const sessionState = await getSessionState();
|
|
37
|
-
const shouldStopSession = sessionState !== "started";
|
|
38
|
-
return shouldStopSession;
|
|
39
|
-
}
|
|
40
|
-
async function getSessionState() {
|
|
41
|
-
// if there is no dashboard domain to connect to or session details missing, then continue the generation session.
|
|
42
|
-
if (!DASHBOARD_DOMAIN ||
|
|
43
|
-
!sessionDetails.sessionId ||
|
|
44
|
-
!sessionDetails.generationId) {
|
|
45
|
-
return "started";
|
|
46
|
-
}
|
|
47
|
-
const apiPath = `${DASHBOARD_DOMAIN}/api/sessions/${sessionDetails.sessionId}/generations/${sessionDetails.generationId}/state`;
|
|
48
|
-
const response = await fetch(apiPath, {
|
|
49
|
-
method: "GET",
|
|
50
|
-
headers: {
|
|
51
|
-
"Content-Type": "application/json",
|
|
52
|
-
Authorization: `Bearer ${process.env.EMPIRICALRUN_API_KEY}`,
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
const generationStateData = (await response.json());
|
|
56
|
-
// TODO: fix this heirarchy
|
|
57
|
-
return generationStateData.data.state.state;
|
|
58
|
-
}
|
|
59
|
-
async function endSession() {
|
|
60
|
-
if (!DASHBOARD_DOMAIN) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (!sessionDetails.sessionId || !sessionDetails.generationId) {
|
|
64
|
-
console.warn("Session details missing, skipping session end");
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const apiPath = `${DASHBOARD_DOMAIN}/api/sessions/${sessionDetails.sessionId}/generations/${sessionDetails.generationId}/state`;
|
|
68
|
-
try {
|
|
69
|
-
await fetch(apiPath, {
|
|
70
|
-
method: "POST",
|
|
71
|
-
headers: {
|
|
72
|
-
"Content-Type": "application/json",
|
|
73
|
-
Authorization: `Bearer ${process.env.EMPIRICALRUN_API_KEY}`,
|
|
74
|
-
},
|
|
75
|
-
body: JSON.stringify({
|
|
76
|
-
state: {
|
|
77
|
-
state: "completed",
|
|
78
|
-
},
|
|
79
|
-
}),
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
console.error("Failed to end session:", error);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async function updateSessionStatus(sessionId, payload) {
|
|
87
|
-
if (!DASHBOARD_DOMAIN) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
const body = JSON.stringify(payload);
|
|
92
|
-
await fetch(`${DASHBOARD_DOMAIN}/api/sessions/${sessionId}`, {
|
|
93
|
-
method: "PATCH",
|
|
94
|
-
headers: {
|
|
95
|
-
"Content-Type": "application/json",
|
|
96
|
-
Authorization: `Bearer ${process.env.EMPIRICALRUN_API_KEY}`,
|
|
97
|
-
},
|
|
98
|
-
body,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
console.error("Failed to update session status:", error);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { TraceClient } from "@empiricalrun/llm";
|
|
2
|
-
import { PendingToolCall, ToolResult } from "@empiricalrun/llm/chat";
|
|
3
|
-
import { SupportedChatModels, Tool, ToolExecute } from "@empiricalrun/shared-types";
|
|
4
|
-
type ToolExecutors = {
|
|
5
|
-
[key: string]: ToolExecute;
|
|
6
|
-
};
|
|
7
|
-
export declare class ToolCallService {
|
|
8
|
-
tools: Tool[];
|
|
9
|
-
toolExecutors: ToolExecutors;
|
|
10
|
-
chatSessionId: number | null;
|
|
11
|
-
selectedModel: SupportedChatModels;
|
|
12
|
-
branchName: string;
|
|
13
|
-
repoPath: string;
|
|
14
|
-
apiKey: string | undefined;
|
|
15
|
-
trace?: TraceClient;
|
|
16
|
-
featureFlags: string[];
|
|
17
|
-
environmentOverrides: Record<string, string>;
|
|
18
|
-
constructor({ chatSessionId, selectedModel, branchName, repoPath, apiKey, trace, featureFlags, environmentOverrides, }: {
|
|
19
|
-
chatSessionId: number | null;
|
|
20
|
-
selectedModel: SupportedChatModels;
|
|
21
|
-
branchName: string;
|
|
22
|
-
repoPath: string;
|
|
23
|
-
apiKey: string | undefined;
|
|
24
|
-
trace?: TraceClient;
|
|
25
|
-
featureFlags: string[];
|
|
26
|
-
environmentOverrides?: Record<string, string>;
|
|
27
|
-
});
|
|
28
|
-
sendToQueue(requestId: string, toolCalls: PendingToolCall[]): Promise<void>;
|
|
29
|
-
execute(toolCalls: PendingToolCall[]): Promise<ToolResult[]>;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
32
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,eAAe,EACf,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,mBAAmB,EACnB,IAAI,EACJ,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAmBpC,KAAK,aAAa,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B,CAAC;AAEF,qBAAa,eAAe;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,aAAa,EAAE,aAAa,CAAM;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEjC,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,YAAY,EACZ,oBAAyB,GAC1B,EAAE;QACD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,mBAAmB,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/C;IAoCK,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC;IAcV,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAyEnE"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { PendingToolCall, ServicePayload, Tool } from "@empiricalrun/shared-types";
|
|
2
|
-
export declare function appendBranchNameToQueueUrl(queueUrl: string, branchName: string): string;
|
|
3
|
-
export declare function replaceRegionInUrl(url: string, newRegion: string): string;
|
|
4
|
-
export declare function getQueueUrl(toolCalls: PendingToolCall[], tools: Tool[]): string;
|
|
5
|
-
export declare function sendToolRequestToRemoteQueue(queueUrl: string, payload: ServicePayload): Promise<void>;
|
|
6
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/utils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,cAAc,EACd,IAAI,EACL,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAOR;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOzE;AAgBD,wBAAgB,WAAW,CACzB,SAAS,EAAE,eAAe,EAAE,EAC5B,KAAK,EAAE,IAAI,EAAE,GACZ,MAAM,CAeR;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,iBAiBxB"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.appendBranchNameToQueueUrl = appendBranchNameToQueueUrl;
|
|
4
|
-
exports.replaceRegionInUrl = replaceRegionInUrl;
|
|
5
|
-
exports.getQueueUrl = getQueueUrl;
|
|
6
|
-
exports.sendToolRequestToRemoteQueue = sendToolRequestToRemoteQueue;
|
|
7
|
-
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
8
|
-
function appendBranchNameToQueueUrl(queueUrl, branchName) {
|
|
9
|
-
const cleanBranchName = branchName.replace(/[/.]/g, "-");
|
|
10
|
-
const suffix = cleanBranchName.slice(0, 50);
|
|
11
|
-
const parts = queueUrl.split("/");
|
|
12
|
-
const queueName = parts.pop();
|
|
13
|
-
const queueNameWithoutFifo = queueName?.replace(/\.fifo$/, "");
|
|
14
|
-
return `${parts.join("/")}/${queueNameWithoutFifo}-${suffix}.fifo`;
|
|
15
|
-
}
|
|
16
|
-
function replaceRegionInUrl(url, newRegion) {
|
|
17
|
-
const parsedUrl = new URL(url);
|
|
18
|
-
parsedUrl.hostname = parsedUrl.hostname.replace(/\.([a-z0-9-]+)\.amazonaws\.com$/, `.${newRegion}.amazonaws.com`);
|
|
19
|
-
return parsedUrl.toString();
|
|
20
|
-
}
|
|
21
|
-
function buildQueueUrlsForPreview(baseQueueUrl) {
|
|
22
|
-
const branch = process.env.VERCEL_GIT_COMMIT_REF;
|
|
23
|
-
if (!branch) {
|
|
24
|
-
throw new Error("VERCEL_GIT_COMMIT_REF is not set");
|
|
25
|
-
}
|
|
26
|
-
const updatedRegionForQueue = replaceRegionInUrl(baseQueueUrl, process.env.AWS_REGION);
|
|
27
|
-
const queueUrl = appendBranchNameToQueueUrl(updatedRegionForQueue, branch);
|
|
28
|
-
console.log("queueUrl for preview", queueUrl);
|
|
29
|
-
return queueUrl;
|
|
30
|
-
}
|
|
31
|
-
function getQueueUrl(toolCalls, tools) {
|
|
32
|
-
const needsBrowser = toolCalls.some((toolCall) => tools.find((t) => t.schema.name === toolCall.name)?.needsBrowser);
|
|
33
|
-
const baseQueueUrl = needsBrowser
|
|
34
|
-
? process.env.TOOL_EXECUTION_SQS_URL_BROWSER
|
|
35
|
-
: process.env.TOOL_EXECUTION_SQS_URL;
|
|
36
|
-
if (process.env.VERCEL_ENV !== "preview") {
|
|
37
|
-
return baseQueueUrl;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
return buildQueueUrlsForPreview(baseQueueUrl);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async function sendToolRequestToRemoteQueue(queueUrl, payload) {
|
|
44
|
-
const sqs = new client_sqs_1.SQSClient({
|
|
45
|
-
region: process.env.AWS_REGION,
|
|
46
|
-
credentials: {
|
|
47
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
48
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
await sqs.send(new client_sqs_1.SendMessageCommand({
|
|
52
|
-
QueueUrl: queueUrl,
|
|
53
|
-
MessageGroupId: payload.requestId,
|
|
54
|
-
MessageDeduplicationId: payload.requestId,
|
|
55
|
-
MessageBody: JSON.stringify(payload),
|
|
56
|
-
}));
|
|
57
|
-
}
|