@empiricalrun/test-gen 0.57.2 → 0.58.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 +16 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/skill.js +2 -2
- package/dist/actions/utils/index.js +2 -3
- package/dist/agent/browsing/index.js +1 -2
- package/dist/agent/browsing/run.js +1 -2
- package/dist/agent/browsing/utils.js +10 -10
- package/dist/agent/chat/agent-loop.d.ts +5 -3
- package/dist/agent/chat/agent-loop.d.ts.map +1 -1
- package/dist/agent/chat/agent-loop.js +3 -4
- package/dist/agent/chat/exports.d.ts +4 -4
- package/dist/agent/chat/exports.d.ts.map +1 -1
- package/dist/agent/chat/exports.js +19 -9
- package/dist/agent/chat/index.d.ts +1 -1
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +10 -6
- package/dist/agent/chat/prompt.d.ts +2 -1
- package/dist/agent/chat/prompt.d.ts.map +1 -1
- package/dist/agent/chat/prompt.js +3 -4
- package/dist/agent/chat/repo.d.ts +2 -1
- package/dist/agent/chat/repo.d.ts.map +1 -1
- package/dist/agent/chat/repo.js +32 -36
- package/dist/agent/chat/state.d.ts +1 -2
- package/dist/agent/chat/state.d.ts.map +1 -1
- package/dist/agent/chat/state.js +8 -8
- package/dist/agent/codegen/create-test-block.js +1 -2
- package/dist/agent/codegen/fix-ts-errors.js +1 -2
- package/dist/agent/codegen/generate-code-apply-changes.js +2 -3
- package/dist/agent/codegen/lexical-scoped-vars.js +1 -2
- package/dist/agent/codegen/repo-edit.js +2 -3
- package/dist/agent/codegen/run.js +2 -3
- package/dist/agent/codegen/skills-retriever.d.ts +3 -3
- package/dist/agent/codegen/skills-retriever.d.ts.map +1 -1
- package/dist/agent/codegen/skills-retriever.js +2 -2
- package/dist/agent/codegen/test-update-feedback.js +1 -2
- package/dist/agent/codegen/update-flow.js +4 -5
- package/dist/agent/codegen/use-skill.js +1 -2
- package/dist/agent/codegen/utils.js +9 -10
- package/dist/agent/cua/computer.js +3 -4
- package/dist/agent/cua/index.js +2 -3
- package/dist/agent/cua/model.js +1 -2
- package/dist/agent/diagnosis-agent/index.js +2 -3
- package/dist/agent/diagnosis-agent/strict-mode-violation.js +1 -2
- package/dist/agent/enrich-prompt/index.d.ts +1 -1
- package/dist/agent/enrich-prompt/index.d.ts.map +1 -1
- package/dist/agent/enrich-prompt/utils.js +1 -2
- package/dist/agent/infer-agent/index.js +1 -2
- package/dist/agent/master/action-tool-calls.js +3 -3
- package/dist/agent/master/element-annotation.js +2 -3
- 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-browser-action.js +1 -2
- package/dist/agent/master/execute-skill-action.js +1 -2
- package/dist/agent/master/icon-descriptor/index.js +6 -7
- package/dist/agent/master/icon-descriptor/normalize-svg.js +1 -2
- package/dist/agent/master/next-action.js +1 -2
- package/dist/agent/master/planner.d.ts.map +1 -1
- package/dist/agent/master/planner.js +1 -2
- package/dist/agent/master/run.js +3 -3
- package/dist/agent/master/scroller.js +1 -2
- package/dist/agent/master/with-hints.d.ts +1 -1
- package/dist/agent/master/with-hints.d.ts.map +1 -1
- package/dist/agent/planner/run-time-planner.d.ts.map +1 -1
- package/dist/agent/planner/run-time-planner.js +1 -2
- package/dist/agent/planner/run.js +1 -2
- package/dist/bin/logger/index.js +2 -2
- package/dist/bin/utils/context.js +5 -6
- package/dist/bin/utils/fs/index.d.ts.map +1 -1
- package/dist/bin/utils/fs/index.js +4 -5
- package/dist/bin/utils/index.js +2 -3
- package/dist/bin/utils/platform/web/index.d.ts.map +1 -1
- package/dist/bin/utils/platform/web/index.js +21 -21
- package/dist/bin/utils/scenarios/index.js +3 -4
- package/dist/constants/index.js +1 -1
- package/dist/file/server.js +2 -2
- package/dist/human-in-the-loop/cli.js +1 -2
- package/dist/human-in-the-loop/ipc.js +2 -3
- package/dist/index.js +1 -2
- package/dist/prompts/lib/ts-transformer.js +17 -7
- package/dist/reporter/index.js +3 -3
- package/dist/reporter/lib.js +1 -1
- package/dist/session/index.js +6 -7
- package/dist/test-build/index.js +2 -3
- package/dist/tool-call-service/index.d.ts +1 -2
- package/dist/tool-call-service/index.d.ts.map +1 -1
- package/dist/tools/commit-and-create-pr.js +2 -2
- package/dist/tools/grep/ripgrep/index.js +2 -3
- package/dist/tools/grep/ripgrep/types.d.ts +0 -2
- package/dist/tools/grep/ripgrep/types.d.ts.map +1 -1
- package/dist/tools/str_replace_editor.js +3 -3
- package/dist/tools/test-run-fetcher/index.js +2 -2
- package/dist/tools/utils/index.js +2 -3
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/uploader/index.js +6 -6
- package/dist/uploader/utils.d.ts.map +1 -1
- package/dist/uploader/utils.js +2 -2
- package/dist/utils/checkpoint.js +1 -2
- package/dist/utils/env.js +1 -2
- package/dist/utils/exec.js +2 -2
- package/dist/utils/file-tree.d.ts +3 -0
- package/dist/utils/file-tree.d.ts.map +1 -0
- package/dist/utils/file-tree.js +42 -0
- package/dist/utils/file.js +1 -2
- package/dist/utils/git.js +7 -8
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/pw-test.js +1 -2
- package/dist/utils/repo-tree.d.ts +2 -1
- package/dist/utils/repo-tree.d.ts.map +1 -1
- package/dist/utils/repo-tree.js +62 -53
- package/dist/utils/slug.d.ts.map +1 -1
- package/dist/utils/slug.js +1 -1
- package/dist/utils/string.js +1 -2
- package/package.json +5 -5
- package/tsconfig.tsbuildinfo +1 -0
- package/dist/agent/chat/model.d.ts +0 -4
- package/dist/agent/chat/model.d.ts.map +0 -1
- package/dist/agent/chat/model.js +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @empiricalrun/test-gen
|
|
2
2
|
|
|
3
|
+
## 0.58.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8c71fd1: feat: pass file info to system prompt to construct repo context
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 637c97f: chore: moved model creation logic from test-gen to llm
|
|
12
|
+
- Updated dependencies [0634233]
|
|
13
|
+
- Updated dependencies [637c97f]
|
|
14
|
+
- Updated dependencies [21b0768]
|
|
15
|
+
- @empiricalrun/test-run@0.8.5
|
|
16
|
+
- @empiricalrun/llm@0.15.4
|
|
17
|
+
- @empiricalrun/r2-uploader@0.3.9
|
|
18
|
+
|
|
3
19
|
## 0.57.2
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAEL,UAAU,EACV,YAAY,EAEb,MAAM,UAAU,CAAC;AAWlB,qBAAa,iBAAiB;IAQ1B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,eAAe,CAInB;gBAEM,IAAI,EAAE,WAAW,EACjB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAgB5C,aAAa,CACjB,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAEL,UAAU,EACV,YAAY,EAEb,MAAM,UAAU,CAAC;AAWlB,qBAAa,iBAAiB;IAQ1B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,eAAe,CAInB;gBAEM,IAAI,EAAE,WAAW,EACjB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAgB5C,aAAa,CACjB,IAAI,EAAE,MAAM,YAAK,EACjB,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA0D9B,wBAAwB,IAAI,YAAY,EAAE;IAoB1C,sBAAsB,IAAI,YAAY,EAAE;IAWxC,YAAY,IAAI;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IAUD,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAK9B;;;;;;OAMG;IACH,aAAa,IAAI,OAAO;IAQxB,UAAU;IAWV,iBAAiB;IAIjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAItD"}
|
package/dist/actions/skill.js
CHANGED
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.skillActionGenerator = exports.
|
|
6
|
+
exports.skillActionGenerator = exports.testCaseSkills = exports.SKILL_USAGE = void 0;
|
|
7
|
+
exports.extractSkillFromArgs = extractSkillFromArgs;
|
|
7
8
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
9
|
const api_1 = __importDefault(require("tsx/cjs/api"));
|
|
9
10
|
const use_skill_1 = require("../agent/codegen/use-skill");
|
|
@@ -28,7 +29,6 @@ function extractSkillFromArgs(args) {
|
|
|
28
29
|
const [skillDetails] = availableSkills.filter((skillDetails) => skillDetails.testStep === skill);
|
|
29
30
|
return { skillDetails };
|
|
30
31
|
}
|
|
31
|
-
exports.extractSkillFromArgs = extractSkillFromArgs;
|
|
32
32
|
const skillActionGenerator = (page, options) => {
|
|
33
33
|
const availableSkills = exports.testCaseSkills.getAvailableSkills();
|
|
34
34
|
return {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getPlaywrightLocatorUsingCssSelector = getPlaywrightLocatorUsingCssSelector;
|
|
4
|
+
exports.getPageVarName = getPageVarName;
|
|
4
5
|
async function getPlaywrightLocatorUsingCssSelector(cssSelector, xpath, page, elementAnnotation) {
|
|
5
6
|
// TODO: analyse other solutions than just css. Also find other solutions to support :has-text -> prompting ?
|
|
6
7
|
// jquery doesnt support :has-text. neither css. Only playwright locator supports this selector though.
|
|
@@ -101,9 +102,7 @@ async function getPlaywrightLocatorUsingCssSelector(cssSelector, xpath, page, el
|
|
|
101
102
|
elementAnnotation,
|
|
102
103
|
});
|
|
103
104
|
}
|
|
104
|
-
exports.getPlaywrightLocatorUsingCssSelector = getPlaywrightLocatorUsingCssSelector;
|
|
105
105
|
function getPageVarName() {
|
|
106
106
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
107
107
|
return process.env.PAGE_VAR_NAME || "page";
|
|
108
108
|
}
|
|
109
|
-
exports.getPageVarName = getPageVarName;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.executeTaskUsingBrowsingAgent =
|
|
3
|
+
exports.executeTaskUsingBrowsingAgent = executeTaskUsingBrowsingAgent;
|
|
4
4
|
const llm_1 = require("@empiricalrun/llm");
|
|
5
5
|
const constants_1 = require("../../constants");
|
|
6
6
|
const promptTemplate_0 = "{{#section \"system\"}}\nYou are a browser automation agent who is given a task to generate code for navigation and assertion. This task is your\ngoal and you must achieve it.\n\nYou will be provided with already executed actions and basis that you need to pick the next step to achieve the task.\nRemember that the goal must be achieved.\n\nYou will be provided with the web page snapshot in the form of Document Object Model. Based on the goal and available\ntool calls you need to pick the appropriate tool call.\n\nInstructions:\n- Take actions one at a time. Do not try to take multiple actions\n- You can respond with multiple assertions in one shot\n- Do not repeat the same actions again otherwise your response will be marked INVALID\n- Avoid repeating errors which we got while executing the last action\n- Stick to the task provided to you and mark the task done once the task is complete\n- Do not execute any action which is not mentioned in the task\n- Do not repeat actions which are already executed more than twice otherwise your response will be marked INVALID\n- Always refer to \"Executed actions\" before deciding your next action for completion of the task.\n- End the task done if all actions required for task are executed\n{{/section}}\n\n{{#section \"user\"}}\nTask:\n{{task}}\n\nCurrent page snapshot:\n{{pageSnapshot}}\n{{/section}}";
|
|
@@ -64,4 +64,3 @@ async function executeTaskUsingBrowsingAgent({ action, page, actions, llm, trace
|
|
|
64
64
|
toolCallsSpan?.end({ output: { toolCalls, generatedCodeSteps } });
|
|
65
65
|
return generatedCodeSteps;
|
|
66
66
|
}
|
|
67
|
-
exports.executeTaskUsingBrowsingAgent = executeTaskUsingBrowsingAgent;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.generateTestsUsingMasterAgent =
|
|
6
|
+
exports.generateTestsUsingMasterAgent = generateTestsUsingMasterAgent;
|
|
7
7
|
const detect_port_1 = __importDefault(require("detect-port"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const web_1 = require("../../bin/utils/platform/web");
|
|
@@ -88,4 +88,3 @@ async function generateTestsUsingMasterAgent({ testFilePath, filePathToUpdate, p
|
|
|
88
88
|
actionsSummary: fileServer.getActionsSummary(),
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
|
-
exports.generateTestsUsingMasterAgent = generateTestsUsingMasterAgent;
|
|
@@ -3,7 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TeardownManager =
|
|
6
|
+
exports.TeardownManager = void 0;
|
|
7
|
+
exports.isRegExp = isRegExp;
|
|
8
|
+
exports.prepareBrowsingAgentTask = prepareBrowsingAgentTask;
|
|
9
|
+
exports.replaceTodoWithCreateTest = replaceTodoWithCreateTest;
|
|
10
|
+
exports.markTestAsOnly = markTestAsOnly;
|
|
11
|
+
exports.prepareFileForMasterAgent = prepareFileForMasterAgent;
|
|
12
|
+
exports.injectPwLocatorGenerator = injectPwLocatorGenerator;
|
|
13
|
+
exports.readPlaywrightConfig = readPlaywrightConfig;
|
|
14
|
+
exports.getValidProjectNames = getValidProjectNames;
|
|
15
|
+
exports.detectProjectName = detectProjectName;
|
|
7
16
|
const fs_1 = __importDefault(require("fs"));
|
|
8
17
|
const minimatch_1 = require("minimatch");
|
|
9
18
|
const path_1 = __importDefault(require("path"));
|
|
@@ -22,13 +31,11 @@ function isRegExp(obj) {
|
|
|
22
31
|
return (obj instanceof RegExp ||
|
|
23
32
|
Object.prototype.toString.call(obj) === "[object RegExp]");
|
|
24
33
|
}
|
|
25
|
-
exports.isRegExp = isRegExp;
|
|
26
34
|
function prepareBrowsingAgentTask(steps) {
|
|
27
35
|
const sanitizedSteps = steps.map((step) => step.replace(/`/g, "\\`"));
|
|
28
36
|
const task = `${sanitizedSteps.join("\n")}\n`;
|
|
29
37
|
return task;
|
|
30
38
|
}
|
|
31
|
-
exports.prepareBrowsingAgentTask = prepareBrowsingAgentTask;
|
|
32
39
|
async function addImportForCreateTest(testFilePath) {
|
|
33
40
|
// Instead of using "@empiricalrun/test-gen", we use the local dist file
|
|
34
41
|
// This is to avoid assuming that the test-gen package is installed in the project
|
|
@@ -108,7 +115,6 @@ async function replaceTodoWithCreateTest({ testFilePath, testCaseName, testCaseS
|
|
|
108
115
|
specPath: testFilePath,
|
|
109
116
|
});
|
|
110
117
|
}
|
|
111
|
-
exports.replaceTodoWithCreateTest = replaceTodoWithCreateTest;
|
|
112
118
|
async function markTestAsOnly({ testCaseName, testCaseSuites, specPath, }) {
|
|
113
119
|
const testFileContent = fs_1.default.readFileSync(specPath, "utf-8");
|
|
114
120
|
const { testBlock, testNode } = (0, web_1.getTypescriptTestBlock)({
|
|
@@ -124,7 +130,6 @@ async function markTestAsOnly({ testCaseName, testCaseSuites, specPath, }) {
|
|
|
124
130
|
fs_1.default.writeFileSync(specPath, updatedTestFileContent);
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
|
-
exports.markTestAsOnly = markTestAsOnly;
|
|
128
133
|
async function prepareFileForMasterAgent({ testCase, specPath, trace, }) {
|
|
129
134
|
const prepareFileSpan = trace?.span({
|
|
130
135
|
name: "prepare-file-for-master-agent",
|
|
@@ -170,7 +175,6 @@ async function prepareFileForMasterAgent({ testCase, specPath, trace, }) {
|
|
|
170
175
|
});
|
|
171
176
|
return updatePath;
|
|
172
177
|
}
|
|
173
|
-
exports.prepareFileForMasterAgent = prepareFileForMasterAgent;
|
|
174
178
|
function newContentsWithTestOnly(existingContents, originalTestBlock, updatedTestBlock, parentDescribeBlock) {
|
|
175
179
|
if (!parentDescribeBlock) {
|
|
176
180
|
const testMarkedAsOnly = updatedTestBlock.replace("test(", "test.only(");
|
|
@@ -290,7 +294,6 @@ async function injectPwLocatorGenerator(page) {
|
|
|
290
294
|
console.warn("Error injecting script in iframe.");
|
|
291
295
|
}
|
|
292
296
|
}
|
|
293
|
-
exports.injectPwLocatorGenerator = injectPwLocatorGenerator;
|
|
294
297
|
/**
|
|
295
298
|
* function to read playwright config from the source repo
|
|
296
299
|
* @return {*} {Promise<PlaywrightTestConfig>}
|
|
@@ -318,7 +321,6 @@ async function readPlaywrightConfig(repoDir) {
|
|
|
318
321
|
const playwrightConfig = (await tsxImport.require("./playwright.config.ts", `${repoDir}/${lastDir}`)).default;
|
|
319
322
|
return playwrightConfig;
|
|
320
323
|
}
|
|
321
|
-
exports.readPlaywrightConfig = readPlaywrightConfig;
|
|
322
324
|
function matchAgainstPattern(pattern, filePathToTest) {
|
|
323
325
|
if (isRegExp(pattern)) {
|
|
324
326
|
const regExp = pattern;
|
|
@@ -337,7 +339,6 @@ async function getValidProjectNames(playwrightConfig) {
|
|
|
337
339
|
.filter((p) => !!p);
|
|
338
340
|
return filteredProjectNames;
|
|
339
341
|
}
|
|
340
|
-
exports.getValidProjectNames = getValidProjectNames;
|
|
341
342
|
/**
|
|
342
343
|
* detect the project name for the given file in playwright test repo
|
|
343
344
|
* if project and test file path for running test don't match, then playwright throws error
|
|
@@ -387,7 +388,6 @@ async function detectProjectName(testFilePath, playwrightConfig, pwProjectsFilte
|
|
|
387
388
|
}
|
|
388
389
|
return filteredProjectNames[0];
|
|
389
390
|
}
|
|
390
|
-
exports.detectProjectName = detectProjectName;
|
|
391
391
|
class TeardownManager {
|
|
392
392
|
directory;
|
|
393
393
|
constructor(directory) {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { TraceClient } from "@empiricalrun/llm";
|
|
2
|
-
import { IChatModel } from "@empiricalrun/llm/chat";
|
|
2
|
+
import { IChatModel, SupportedChatModels } from "@empiricalrun/llm/chat";
|
|
3
3
|
import { ToolCallService } from "../../tool-call-service";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { FileInfo } from "../../types";
|
|
5
|
+
import { ReporterFunction } from "./types";
|
|
6
|
+
export declare function chatAgentLoop({ chatModel, selectedModel, reporter, trace, toolCallService, fileInfo, }: {
|
|
6
7
|
chatModel: IChatModel<any>;
|
|
7
8
|
selectedModel: SupportedChatModels;
|
|
8
9
|
toolCallService: ToolCallService;
|
|
9
10
|
reporter: ReporterFunction;
|
|
10
11
|
trace?: TraceClient;
|
|
12
|
+
fileInfo: FileInfo;
|
|
11
13
|
}): Promise<void>;
|
|
12
14
|
//# sourceMappingURL=agent-loop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgB3C,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,aAAa,EACb,QAAQ,EACR,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;CACpB,iBAoCA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.chatAgentLoop =
|
|
3
|
+
exports.chatAgentLoop = chatAgentLoop;
|
|
4
4
|
const chat_1 = require("@empiricalrun/llm/chat");
|
|
5
5
|
const picocolors_1 = require("picocolors");
|
|
6
6
|
const prompt_1 = require("./prompt");
|
|
@@ -18,8 +18,8 @@ const log = (...args) => {
|
|
|
18
18
|
console.log((0, picocolors_1.gray)(args.join(" ")));
|
|
19
19
|
};
|
|
20
20
|
const isRemote = process.env.TOOL_EXECUTION_IS_REMOTE === "true" || false;
|
|
21
|
-
async function chatAgentLoop({ chatModel, selectedModel, reporter, trace, toolCallService, }) {
|
|
22
|
-
const systemPrompt = await (0, prompt_1.buildSystemPrompt)();
|
|
21
|
+
async function chatAgentLoop({ chatModel, selectedModel, reporter, trace, toolCallService, fileInfo, }) {
|
|
22
|
+
const systemPrompt = await (0, prompt_1.buildSystemPrompt)(fileInfo);
|
|
23
23
|
trace?.update({ input: { systemPrompt } });
|
|
24
24
|
const { tools } = await toolCallService.getTools();
|
|
25
25
|
while (!chatModel.askUserForInput) {
|
|
@@ -47,4 +47,3 @@ async function chatAgentLoop({ chatModel, selectedModel, reporter, trace, toolCa
|
|
|
47
47
|
await reporter((0, state_1.chatStateFromModel)(chatModel, selectedModel), latest);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
exports.chatAgentLoop = chatAgentLoop;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { IChatModel } from "@empiricalrun/llm/chat";
|
|
1
|
+
import { createChatModel, IChatModel, SupportedChatModels } from "@empiricalrun/llm/chat";
|
|
2
|
+
import { FileInfo } from "../../types";
|
|
2
3
|
import { chatAgentLoop } from "./agent-loop";
|
|
3
|
-
import { createChatModel } from "./model";
|
|
4
4
|
import * as State from "./state";
|
|
5
5
|
import { ChatStateOnDisk } from "./state";
|
|
6
|
-
import { ReporterFunction
|
|
6
|
+
import { ReporterFunction } from "./types";
|
|
7
7
|
declare const createChatState: typeof State.createChatState, createChatStateForMessages: typeof State.createChatStateForMessages, chatStateFromModel: typeof State.chatStateFromModel, loadChatState: typeof State.loadChatState, saveToDisk: typeof State.saveToDisk, CURRENT_CHAT_STATE_VERSION: string;
|
|
8
8
|
export { chatAgentLoop, chatStateFromModel, createChatModel, createChatState, createChatStateForMessages, CURRENT_CHAT_STATE_VERSION, loadChatState, saveToDisk, };
|
|
9
|
-
export type { ChatStateOnDisk, IChatModel, ReporterFunction, SupportedChatModels, };
|
|
9
|
+
export type { ChatStateOnDisk, FileInfo, IChatModel, ReporterFunction, SupportedChatModels, };
|
|
10
10
|
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,QAAA,MACE,eAAe,gCACf,0BAA0B,2CAC1B,kBAAkB,mCAClB,aAAa,8BACb,UAAU,2BACV,0BAA0B,QACnB,CAAC;AAEV,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,UAAU,GACX,CAAC;AAEF,YAAY,EACV,eAAe,EACf,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,CAAC"}
|
|
@@ -15,19 +15,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
36
|
exports.saveToDisk = exports.loadChatState = exports.CURRENT_CHAT_STATE_VERSION = exports.createChatStateForMessages = exports.createChatState = exports.createChatModel = exports.chatStateFromModel = exports.chatAgentLoop = void 0;
|
|
37
|
+
const chat_1 = require("@empiricalrun/llm/chat");
|
|
38
|
+
Object.defineProperty(exports, "createChatModel", { enumerable: true, get: function () { return chat_1.createChatModel; } });
|
|
27
39
|
const agent_loop_1 = require("./agent-loop");
|
|
28
40
|
Object.defineProperty(exports, "chatAgentLoop", { enumerable: true, get: function () { return agent_loop_1.chatAgentLoop; } });
|
|
29
|
-
const model_1 = require("./model");
|
|
30
|
-
Object.defineProperty(exports, "createChatModel", { enumerable: true, get: function () { return model_1.createChatModel; } });
|
|
31
41
|
const State = __importStar(require("./state"));
|
|
32
42
|
const { createChatState, createChatStateForMessages, chatStateFromModel, loadChatState, saveToDisk, CURRENT_CHAT_STATE_VERSION, } = State;
|
|
33
43
|
exports.createChatState = createChatState;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SupportedChatModels } from "
|
|
1
|
+
import { SupportedChatModels } from "@empiricalrun/llm/chat";
|
|
2
2
|
export declare function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialPromptContent, }: {
|
|
3
3
|
selectedModel: SupportedChatModels;
|
|
4
4
|
useDiskForChatState: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AA0BhC,wBAAsB,kBAAkB,CAAC,EACvC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,iBAgGA;AA0BD,wBAAsB,wBAAwB,CAAC,EAC7C,aAAa,EACb,aAAa,GACd,EAAE;IACD,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB,iBAkDA"}
|
package/dist/agent/chat/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.runChatAgentForCLI = runChatAgentForCLI;
|
|
4
|
+
exports.runChatAgentForDashboard = runChatAgentForDashboard;
|
|
4
5
|
const llm_1 = require("@empiricalrun/llm");
|
|
6
|
+
const chat_1 = require("@empiricalrun/llm/chat");
|
|
5
7
|
const picocolors_1 = require("picocolors");
|
|
6
8
|
const human_in_the_loop_1 = require("../../human-in-the-loop");
|
|
7
9
|
const tool_call_service_1 = require("../../tool-call-service");
|
|
10
|
+
const file_tree_1 = require("../../utils/file-tree");
|
|
8
11
|
const git_1 = require("../../utils/git");
|
|
9
12
|
const agent_loop_1 = require("./agent-loop");
|
|
10
|
-
const model_1 = require("./model");
|
|
11
13
|
const state_1 = require("./state");
|
|
12
14
|
function stopCriteria(userPrompt) {
|
|
13
15
|
return userPrompt?.toLowerCase() === "stop";
|
|
@@ -28,7 +30,7 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
28
30
|
const branchName = `branch-${randomId}`;
|
|
29
31
|
await (0, git_1.checkoutBranch)(branchName);
|
|
30
32
|
let messagesLoadedFromDisk = chatState?.messages || [];
|
|
31
|
-
let chatModel = (0,
|
|
33
|
+
let chatModel = (0, chat_1.createChatModel)(messagesLoadedFromDisk, selectedModel);
|
|
32
34
|
if (initialPromptContent && chatModel.messages.length === 0) {
|
|
33
35
|
chatModel.pushUserMessage(initialPromptContent);
|
|
34
36
|
chatModel.askUserForInput = false;
|
|
@@ -89,12 +91,14 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
89
91
|
else {
|
|
90
92
|
// TODO: Should we pass a loader function? That would allow us to show a spinner
|
|
91
93
|
const toolCallService = new tool_call_service_1.ToolCallService(null, selectedModel, branchName);
|
|
94
|
+
const fileInfo = await (0, file_tree_1.getFileInfoFromFS)(process.cwd());
|
|
92
95
|
await (0, agent_loop_1.chatAgentLoop)({
|
|
93
96
|
chatModel,
|
|
94
97
|
selectedModel,
|
|
95
98
|
reporter: reporterFunc,
|
|
96
99
|
trace,
|
|
97
100
|
toolCallService,
|
|
101
|
+
fileInfo,
|
|
98
102
|
});
|
|
99
103
|
}
|
|
100
104
|
}
|
|
@@ -107,7 +111,6 @@ async function runChatAgentForCLI({ useDiskForChatState, selectedModel, initialP
|
|
|
107
111
|
const usageSummary = chatModel.getUsageSummary();
|
|
108
112
|
console.log(`\n${(0, picocolors_1.gray)("Usage summary -> " + usageSummary)}`);
|
|
109
113
|
}
|
|
110
|
-
exports.runChatAgentForCLI = runChatAgentForCLI;
|
|
111
114
|
const DASHBOARD_DOMAIN = process.env.DASHBOARD_DOMAIN || "https://dash.empirical.run";
|
|
112
115
|
async function getChatSessionFromDashboard(chatSessionId) {
|
|
113
116
|
const response = await fetch(`${DASHBOARD_DOMAIN}/api/chat-sessions/${chatSessionId}`, {
|
|
@@ -137,7 +140,7 @@ async function runChatAgentForDashboard({ chatSessionId, selectedModel, }) {
|
|
|
137
140
|
});
|
|
138
141
|
const toolCallService = new tool_call_service_1.ToolCallService(chatSessionId, selectedModel, branchName);
|
|
139
142
|
await (0, git_1.checkoutBranch)(branchName);
|
|
140
|
-
let chatModel = (0,
|
|
143
|
+
let chatModel = (0, chat_1.createChatModel)(chatState.messages, selectedModel);
|
|
141
144
|
let reporterFunc = async (chatState, latest) => {
|
|
142
145
|
const response = await fetch(`${DASHBOARD_DOMAIN}/api/chat-sessions/${chatSessionId}`, {
|
|
143
146
|
method: "PATCH",
|
|
@@ -153,12 +156,13 @@ async function runChatAgentForDashboard({ chatSessionId, selectedModel, }) {
|
|
|
153
156
|
const data = await response.json();
|
|
154
157
|
console.log(`Patch request sent for chat session: ${JSON.stringify(data)}`);
|
|
155
158
|
};
|
|
159
|
+
const fileInfo = await (0, file_tree_1.getFileInfoFromFS)(process.cwd());
|
|
156
160
|
await (0, agent_loop_1.chatAgentLoop)({
|
|
157
161
|
chatModel,
|
|
158
162
|
selectedModel,
|
|
159
163
|
reporter: reporterFunc,
|
|
160
164
|
trace,
|
|
161
165
|
toolCallService,
|
|
166
|
+
fileInfo,
|
|
162
167
|
});
|
|
163
168
|
}
|
|
164
|
-
exports.runChatAgentForDashboard = runChatAgentForDashboard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,mBAoEzD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildSystemPrompt =
|
|
3
|
+
exports.buildSystemPrompt = buildSystemPrompt;
|
|
4
4
|
const repo_1 = require("./repo");
|
|
5
|
-
async function buildSystemPrompt() {
|
|
6
|
-
const repoContext = await (0, repo_1.
|
|
5
|
+
async function buildSystemPrompt(fileInfo) {
|
|
6
|
+
const repoContext = await (0, repo_1.getRepoInfoPrompt)(fileInfo);
|
|
7
7
|
return `
|
|
8
8
|
You are a helpful assistant that can answer questions and help with tasks related to writing
|
|
9
9
|
and maintaining Playwright tests.
|
|
@@ -71,4 +71,3 @@ running Playwright tests. For any read-write actions (e.g. modifying any file),
|
|
|
71
71
|
${repoContext}
|
|
72
72
|
`;
|
|
73
73
|
}
|
|
74
|
-
exports.buildSystemPrompt = buildSystemPrompt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/repo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAwCvC,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,QAAQ,mBAyC1D"}
|
package/dist/agent/chat/repo.js
CHANGED
|
@@ -3,28 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
6
|
+
exports.getRepoInfoPrompt = getRepoInfoPrompt;
|
|
8
7
|
const path_1 = __importDefault(require("path"));
|
|
9
8
|
const repo_tree_1 = require("../../utils/repo-tree");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const dir = path_1.default.join(process.cwd(), ".empiricalrun");
|
|
13
|
-
if (!fs_1.default.existsSync(dir)) {
|
|
9
|
+
async function getAllMarkdownFiles(directory) {
|
|
10
|
+
if (!directory.isDirectory) {
|
|
14
11
|
return [];
|
|
15
12
|
}
|
|
16
|
-
const files =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const files = directory.children.find((child) => child.isDirectory && child.path === ".empiricalrun")?.children;
|
|
14
|
+
if (!files) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
return Promise.all(files
|
|
18
|
+
.filter((file) => file.isFile && file.path.endsWith(".md"))
|
|
19
|
+
.map(async (file) => {
|
|
20
20
|
return {
|
|
21
|
-
name: file,
|
|
22
|
-
content:
|
|
21
|
+
name: path_1.default.basename(file.path),
|
|
22
|
+
content: await file.getContent(),
|
|
23
23
|
};
|
|
24
|
-
});
|
|
24
|
+
}));
|
|
25
25
|
}
|
|
26
|
-
async function knowledgeContext() {
|
|
27
|
-
const mdFiles = await getAllMarkdownFiles();
|
|
26
|
+
async function knowledgeContext(directory) {
|
|
27
|
+
const mdFiles = await getAllMarkdownFiles(directory);
|
|
28
28
|
const knowledge = mdFiles.map((file) => {
|
|
29
29
|
return `
|
|
30
30
|
<knowledge_file>
|
|
@@ -37,35 +37,32 @@ async function knowledgeContext() {
|
|
|
37
37
|
});
|
|
38
38
|
return knowledge.join("\n");
|
|
39
39
|
}
|
|
40
|
-
async function
|
|
40
|
+
async function getRepoInfoPrompt(directory) {
|
|
41
41
|
let REPO_CONTEXT_PROMPT = `
|
|
42
42
|
You are running as a CLI tool inside the directory of the repo that has Playwright tests.
|
|
43
43
|
|
|
44
44
|
Here is the repo directory structure:
|
|
45
45
|
|
|
46
|
-
${(0, repo_tree_1.generateAsciiTree)(
|
|
46
|
+
${(0, repo_tree_1.generateAsciiTree)(directory)}
|
|
47
47
|
|
|
48
48
|
While specifying paths to files, use relative paths from the current working directory. For example:
|
|
49
49
|
- Correct path: "tests/lesson.spec.ts"
|
|
50
|
-
- Incorrect path: "/repo/tests/lesson.spec.ts" or "${
|
|
50
|
+
- Incorrect path: "/repo/tests/lesson.spec.ts" or "${directory.name}/tests/lesson.spec.ts"
|
|
51
51
|
`;
|
|
52
|
-
try {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## Playwright configuration
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
console.warn("Failed to read playwright config", error);
|
|
67
|
-
}
|
|
68
|
-
const knowledge = await knowledgeContext();
|
|
52
|
+
// try {
|
|
53
|
+
// const playwrightConfig = await readPlaywrightConfig(process.cwd());
|
|
54
|
+
// const validProjectNames = await getValidProjectNames(playwrightConfig);
|
|
55
|
+
// if (validProjectNames.length > 0) {
|
|
56
|
+
// REPO_CONTEXT_PROMPT += `
|
|
57
|
+
// ## Playwright configuration
|
|
58
|
+
// This repo is configured with these Playwright projects (in the playwright.config.ts file):
|
|
59
|
+
// ${validProjectNames.map((name) => `- ${name}`).join("\n")}
|
|
60
|
+
// `;
|
|
61
|
+
// }
|
|
62
|
+
// } catch (error) {
|
|
63
|
+
// console.warn("Failed to read playwright config", error);
|
|
64
|
+
// }
|
|
65
|
+
const knowledge = await knowledgeContext(directory);
|
|
69
66
|
if (knowledge.length > 0) {
|
|
70
67
|
REPO_CONTEXT_PROMPT += `
|
|
71
68
|
## Repo-specific knowledge
|
|
@@ -78,4 +75,3 @@ ${knowledge}
|
|
|
78
75
|
}
|
|
79
76
|
return REPO_CONTEXT_PROMPT;
|
|
80
77
|
}
|
|
81
|
-
exports.getRepoContext = getRepoContext;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { IChatModel } from "@empiricalrun/llm/chat";
|
|
2
|
-
import { SupportedChatModels } from "./types";
|
|
1
|
+
import { IChatModel, SupportedChatModels } from "@empiricalrun/llm/chat";
|
|
3
2
|
export declare const CURRENT_CHAT_STATE_VERSION = "20250327.1";
|
|
4
3
|
export declare const CHAT_STATE_PATH: string;
|
|
5
4
|
export type ChatStateOnDisk<T> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/state.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAIhC,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAEvD,eAAO,MAAM,eAAe,QAI3B,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,EAC/C,aAAa,EAAE,mBAAmB,4BAMnC;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,QAAQ,EAAE,GAAG,EACb,aAAa,EAAE,mBAAmB,GACjC,eAAe,CAAC,CAAC,CAAC,CAOpB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACxB,aAAa,EAAE,mBAAmB,4BAGnC;AAED,wBAAgB,aAAa,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAajE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAClB,aAAa,EAAE,mBAAmB,QAsBnC"}
|
package/dist/agent/chat/state.js
CHANGED
|
@@ -3,19 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.CHAT_STATE_PATH = exports.CURRENT_CHAT_STATE_VERSION = void 0;
|
|
7
|
+
exports.createChatState = createChatState;
|
|
8
|
+
exports.createChatStateForMessages = createChatStateForMessages;
|
|
9
|
+
exports.chatStateFromModel = chatStateFromModel;
|
|
10
|
+
exports.loadChatState = loadChatState;
|
|
11
|
+
exports.saveToDisk = saveToDisk;
|
|
12
|
+
const chat_1 = require("@empiricalrun/llm/chat");
|
|
7
13
|
const fs_1 = __importDefault(require("fs"));
|
|
8
14
|
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const model_1 = require("./model");
|
|
10
15
|
exports.CURRENT_CHAT_STATE_VERSION = "20250327.1";
|
|
11
16
|
exports.CHAT_STATE_PATH = path_1.default.join(process.cwd(), ".empiricalrun", "last-chat.json");
|
|
12
17
|
function createChatState(userPrompt, existingState, selectedModel) {
|
|
13
18
|
const messages = existingState?.messages || [];
|
|
14
|
-
const chatModel = (0,
|
|
19
|
+
const chatModel = (0, chat_1.createChatModel)(messages, selectedModel);
|
|
15
20
|
chatModel.pushUserMessage(userPrompt);
|
|
16
21
|
return createChatStateForMessages(chatModel.messages, selectedModel);
|
|
17
22
|
}
|
|
18
|
-
exports.createChatState = createChatState;
|
|
19
23
|
function createChatStateForMessages(messages, selectedModel) {
|
|
20
24
|
// TODO: Add better types for messages
|
|
21
25
|
return {
|
|
@@ -24,11 +28,9 @@ function createChatStateForMessages(messages, selectedModel) {
|
|
|
24
28
|
messages: messages,
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
|
-
exports.createChatStateForMessages = createChatStateForMessages;
|
|
28
31
|
function chatStateFromModel(chatModel, selectedModel) {
|
|
29
32
|
return createChatStateForMessages(chatModel.messages, selectedModel);
|
|
30
33
|
}
|
|
31
|
-
exports.chatStateFromModel = chatStateFromModel;
|
|
32
34
|
function loadChatState() {
|
|
33
35
|
if (!fs_1.default.existsSync(exports.CHAT_STATE_PATH)) {
|
|
34
36
|
return undefined;
|
|
@@ -40,7 +42,6 @@ function loadChatState() {
|
|
|
40
42
|
}
|
|
41
43
|
return state;
|
|
42
44
|
}
|
|
43
|
-
exports.loadChatState = loadChatState;
|
|
44
45
|
function saveToDisk(messages, selectedModel) {
|
|
45
46
|
const statePath = exports.CHAT_STATE_PATH;
|
|
46
47
|
let existingState = {
|
|
@@ -63,4 +64,3 @@ function saveToDisk(messages, selectedModel) {
|
|
|
63
64
|
};
|
|
64
65
|
fs_1.default.writeFileSync(statePath, JSON.stringify(newState, null, 2));
|
|
65
66
|
}
|
|
66
|
-
exports.saveToDisk = saveToDisk;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createEmptyTestCaseBlock =
|
|
3
|
+
exports.createEmptyTestCaseBlock = createEmptyTestCaseBlock;
|
|
4
4
|
const llm_1 = require("@empiricalrun/llm");
|
|
5
5
|
const logger_1 = require("../../bin/logger");
|
|
6
6
|
const context_1 = require("../../bin/utils/context");
|
|
@@ -55,4 +55,3 @@ async function createEmptyTestCaseBlock({ testCase, file, trace, }) {
|
|
|
55
55
|
});
|
|
56
56
|
return testBlock;
|
|
57
57
|
}
|
|
58
|
-
exports.createEmptyTestCaseBlock = createEmptyTestCaseBlock;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.validateAndFixTypescriptErrors =
|
|
6
|
+
exports.validateAndFixTypescriptErrors = validateAndFixTypescriptErrors;
|
|
7
7
|
const llm_1 = require("@empiricalrun/llm");
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const logger_1 = require("../../bin/logger");
|
|
@@ -76,4 +76,3 @@ async function validateAndFixTypescriptErrors({ trace, logger = new logger_1.Cus
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
exports.validateAndFixTypescriptErrors = validateAndFixTypescriptErrors;
|