@anonx3247/universal-agent-harness 0.1.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/LICENSE +21 -0
- package/README.md +265 -0
- package/dist/agent-harness.d.ts +3 -0
- package/dist/agent-harness.d.ts.map +1 -0
- package/dist/agent-harness.js +326 -0
- package/dist/agent-harness.js.map +1 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +335 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +39 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/assert.d.ts +2 -0
- package/dist/lib/assert.d.ts.map +1 -0
- package/dist/lib/assert.js +4 -0
- package/dist/lib/assert.js.map +1 -0
- package/dist/lib/async.d.ts +18 -0
- package/dist/lib/async.d.ts.map +1 -0
- package/dist/lib/async.js +41 -0
- package/dist/lib/async.js.map +1 -0
- package/dist/lib/error.d.ts +47 -0
- package/dist/lib/error.d.ts.map +1 -0
- package/dist/lib/error.js +101 -0
- package/dist/lib/error.js.map +1 -0
- package/dist/lib/fs.d.ts +3 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +17 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +62 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +80 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/mcp.d.ts +19 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +105 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/prompts.d.ts +5 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +63 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +13 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/models/anthropic.d.ts +20 -0
- package/dist/models/anthropic.d.ts.map +1 -0
- package/dist/models/anthropic.js +312 -0
- package/dist/models/anthropic.js.map +1 -0
- package/dist/models/deepseek/index.d.ts +20 -0
- package/dist/models/deepseek/index.d.ts.map +1 -0
- package/dist/models/deepseek/index.js +210 -0
- package/dist/models/deepseek/index.js.map +1 -0
- package/dist/models/gemini.d.ts +20 -0
- package/dist/models/gemini.d.ts.map +1 -0
- package/dist/models/gemini.js +250 -0
- package/dist/models/gemini.js.map +1 -0
- package/dist/models/index.d.ts +70 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +30 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/mistral.d.ts +19 -0
- package/dist/models/mistral.d.ts.map +1 -0
- package/dist/models/mistral.js +259 -0
- package/dist/models/mistral.js.map +1 -0
- package/dist/models/moonshotai.d.ts +20 -0
- package/dist/models/moonshotai.d.ts.map +1 -0
- package/dist/models/moonshotai.js +220 -0
- package/dist/models/moonshotai.js.map +1 -0
- package/dist/models/openai.d.ts +21 -0
- package/dist/models/openai.d.ts.map +1 -0
- package/dist/models/openai.js +302 -0
- package/dist/models/openai.js.map +1 -0
- package/dist/models/provider.d.ts +19 -0
- package/dist/models/provider.d.ts.map +1 -0
- package/dist/models/provider.js +95 -0
- package/dist/models/provider.js.map +1 -0
- package/dist/resources/experiment.d.ts +18 -0
- package/dist/resources/experiment.d.ts.map +1 -0
- package/dist/resources/experiment.js +55 -0
- package/dist/resources/experiment.js.map +1 -0
- package/dist/resources/messages.d.ts +23 -0
- package/dist/resources/messages.d.ts.map +1 -0
- package/dist/resources/messages.js +81 -0
- package/dist/resources/messages.js.map +1 -0
- package/dist/runner/config.d.ts +4 -0
- package/dist/runner/config.d.ts.map +1 -0
- package/dist/runner/config.js +2 -0
- package/dist/runner/config.js.map +1 -0
- package/dist/runner/index.d.ts +41 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +370 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +57 -0
- package/profiles/example/prompt.md +54 -0
- package/profiles/example/settings.json +11 -0
- package/profiles/example/settings.json.example +38 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { assertNever } from "@app/lib/assert";
|
|
2
|
+
import { isAnthropicModel, AnthropicLLM } from "./anthropic";
|
|
3
|
+
import { isGeminiModel, GeminiLLM } from "./gemini";
|
|
4
|
+
import { isMistralModel, MistralLLM } from "./mistral";
|
|
5
|
+
import { isMoonshotAIModel, MoonshotAILLM } from "./moonshotai";
|
|
6
|
+
import { isDeepseekModel, DeepseekLLM } from "./deepseek";
|
|
7
|
+
import { isOpenAIModel, OpenAILLM } from "./openai";
|
|
8
|
+
export const MODELS = {
|
|
9
|
+
"claude-opus-4-5": true,
|
|
10
|
+
"claude-sonnet-4-5": true,
|
|
11
|
+
"claude-haiku-4-5": true,
|
|
12
|
+
"gemini-3-pro-preview": true,
|
|
13
|
+
"gemini-2.5-pro": true,
|
|
14
|
+
"gemini-2.5-flash": true,
|
|
15
|
+
"gemini-2.5-flash-lite": true,
|
|
16
|
+
"gpt-5.2-pro": true,
|
|
17
|
+
"gpt-5.2": true,
|
|
18
|
+
"gpt-5.1": true,
|
|
19
|
+
"gpt-5.1-codex": true,
|
|
20
|
+
"gpt-5": true,
|
|
21
|
+
"gpt-5-codex": true,
|
|
22
|
+
"gpt-5-mini": true,
|
|
23
|
+
"gpt-5-nano": true,
|
|
24
|
+
"gpt-4.1": true,
|
|
25
|
+
"devstral-medium-latest": true,
|
|
26
|
+
"mistral-large-latest": true,
|
|
27
|
+
"mistral-small-latest": true,
|
|
28
|
+
"codestral-latest": true,
|
|
29
|
+
"kimi-k2-thinking": true,
|
|
30
|
+
"deepseek-chat": true,
|
|
31
|
+
"deepseek-reasoner": true,
|
|
32
|
+
};
|
|
33
|
+
export function isProvider(str) {
|
|
34
|
+
return [
|
|
35
|
+
"gemini",
|
|
36
|
+
"anthropic",
|
|
37
|
+
"openai",
|
|
38
|
+
"mistral",
|
|
39
|
+
"moonshotai",
|
|
40
|
+
"deepseek",
|
|
41
|
+
].includes(str);
|
|
42
|
+
}
|
|
43
|
+
export function isModel(model) {
|
|
44
|
+
return (isAnthropicModel(model) ||
|
|
45
|
+
isOpenAIModel(model) ||
|
|
46
|
+
isGeminiModel(model) ||
|
|
47
|
+
isMistralModel(model) ||
|
|
48
|
+
isMoonshotAIModel(model) ||
|
|
49
|
+
isDeepseekModel(model));
|
|
50
|
+
}
|
|
51
|
+
export function providerFromModel(model) {
|
|
52
|
+
if (isOpenAIModel(model))
|
|
53
|
+
return "openai";
|
|
54
|
+
if (isMoonshotAIModel(model))
|
|
55
|
+
return "moonshotai";
|
|
56
|
+
if (isAnthropicModel(model))
|
|
57
|
+
return "anthropic";
|
|
58
|
+
if (isGeminiModel(model))
|
|
59
|
+
return "gemini";
|
|
60
|
+
if (isMistralModel(model))
|
|
61
|
+
return "mistral";
|
|
62
|
+
if (isDeepseekModel(model))
|
|
63
|
+
return "deepseek";
|
|
64
|
+
else
|
|
65
|
+
assertNever(model);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Factory function to create an LLM instance from a model and config.
|
|
69
|
+
* Centralizes the logic for determining which LLM class to instantiate.
|
|
70
|
+
*/
|
|
71
|
+
export function createLLM(model, config) {
|
|
72
|
+
config = config ?? {};
|
|
73
|
+
if (isAnthropicModel(model)) {
|
|
74
|
+
return new AnthropicLLM(config, model);
|
|
75
|
+
}
|
|
76
|
+
else if (isGeminiModel(model)) {
|
|
77
|
+
return new GeminiLLM(config, model);
|
|
78
|
+
}
|
|
79
|
+
else if (isOpenAIModel(model)) {
|
|
80
|
+
return new OpenAILLM(config, model);
|
|
81
|
+
}
|
|
82
|
+
else if (isMistralModel(model)) {
|
|
83
|
+
return new MistralLLM(config, model);
|
|
84
|
+
}
|
|
85
|
+
else if (isMoonshotAIModel(model)) {
|
|
86
|
+
return new MoonshotAILLM(config, model);
|
|
87
|
+
}
|
|
88
|
+
else if (isDeepseekModel(model)) {
|
|
89
|
+
return new DeepseekLLM(config, model);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
assertNever(model);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/models/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { experiments } from "@app/db/schema";
|
|
2
|
+
import { Result } from "@app/lib/error";
|
|
3
|
+
import { InferInsertModel } from "drizzle-orm";
|
|
4
|
+
export declare class ExperimentResource {
|
|
5
|
+
private data;
|
|
6
|
+
private constructor();
|
|
7
|
+
static findByName(name: string): Promise<Result<ExperimentResource>>;
|
|
8
|
+
static findById(id: number): Promise<ExperimentResource | null>;
|
|
9
|
+
static create(data: Omit<InferInsertModel<typeof experiments>, "id" | "created" | "updated">): Promise<ExperimentResource>;
|
|
10
|
+
static all(): Promise<ExperimentResource[]>;
|
|
11
|
+
update(data: Partial<Omit<InferInsertModel<typeof experiments>, "id" | "created">>): Promise<ExperimentResource>;
|
|
12
|
+
delete(): Promise<void>;
|
|
13
|
+
toJSON(): {
|
|
14
|
+
[x: string]: any;
|
|
15
|
+
};
|
|
16
|
+
getAgentIndices(): number[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=experiment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiment.d.ts","sourceRoot":"","sources":["../../src/resources/experiment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAW,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAwB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIrE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAa;IAEzB,OAAO;WAIM,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;WAY7D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;WAUxD,MAAM,CACjB,IAAI,EAAE,IAAI,CACR,gBAAgB,CAAC,OAAO,WAAW,CAAC,EACpC,IAAI,GAAG,SAAS,GAAG,SAAS,CAC7B,GACA,OAAO,CAAC,kBAAkB,CAAC;WAKjB,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAK3C,MAAM,CACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAC1E,OAAO,CAAC,kBAAkB,CAAC;IAWxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,MAAM;;;IAIN,eAAe,IAAI,MAAM,EAAE;CAG5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { db } from "@app/db";
|
|
2
|
+
import { experiments } from "@app/db/schema";
|
|
3
|
+
import { err, ok } from "@app/lib/error";
|
|
4
|
+
import { eq } from "drizzle-orm";
|
|
5
|
+
export class ExperimentResource {
|
|
6
|
+
data;
|
|
7
|
+
constructor(data) {
|
|
8
|
+
this.data = data;
|
|
9
|
+
}
|
|
10
|
+
static async findByName(name) {
|
|
11
|
+
const result = await db
|
|
12
|
+
.select()
|
|
13
|
+
.from(experiments)
|
|
14
|
+
.where(eq(experiments.name, name))
|
|
15
|
+
.limit(1);
|
|
16
|
+
return result[0]
|
|
17
|
+
? ok(new ExperimentResource(result[0]))
|
|
18
|
+
: err("not_found_error", `Experiment '${name}' not found.`);
|
|
19
|
+
}
|
|
20
|
+
static async findById(id) {
|
|
21
|
+
const result = await db
|
|
22
|
+
.select()
|
|
23
|
+
.from(experiments)
|
|
24
|
+
.where(eq(experiments.id, id))
|
|
25
|
+
.limit(1);
|
|
26
|
+
return result[0] ? new ExperimentResource(result[0]) : null;
|
|
27
|
+
}
|
|
28
|
+
static async create(data) {
|
|
29
|
+
const [created] = await db.insert(experiments).values(data).returning();
|
|
30
|
+
return new ExperimentResource(created);
|
|
31
|
+
}
|
|
32
|
+
static async all() {
|
|
33
|
+
const results = await db.select().from(experiments);
|
|
34
|
+
return results.map((data) => new ExperimentResource(data));
|
|
35
|
+
}
|
|
36
|
+
async update(data) {
|
|
37
|
+
const [updated] = await db
|
|
38
|
+
.update(experiments)
|
|
39
|
+
.set({ ...data, updated: new Date() })
|
|
40
|
+
.where(eq(experiments.id, this.data.id))
|
|
41
|
+
.returning();
|
|
42
|
+
this.data = updated;
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
async delete() {
|
|
46
|
+
await db.delete(experiments).where(eq(experiments.id, this.data.id));
|
|
47
|
+
}
|
|
48
|
+
toJSON() {
|
|
49
|
+
return this.data;
|
|
50
|
+
}
|
|
51
|
+
getAgentIndices() {
|
|
52
|
+
return Array.from({ length: this.data.agent_count }, (_, i) => i);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=experiment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../src/resources/experiment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Tx } from "@app/db";
|
|
2
|
+
import { ExperimentResource } from "./experiment";
|
|
3
|
+
import { Message } from "@app/models";
|
|
4
|
+
export declare class MessageResource {
|
|
5
|
+
private data;
|
|
6
|
+
experiment: ExperimentResource;
|
|
7
|
+
private constructor();
|
|
8
|
+
static findById(experiment: ExperimentResource, agentIndex: number, id: number): Promise<MessageResource | null>;
|
|
9
|
+
static listMessagesByAgent(experiment: ExperimentResource, agentIndex: number): Promise<MessageResource[]>;
|
|
10
|
+
static listMessagesByExperiment(experiment: ExperimentResource): Promise<MessageResource[]>;
|
|
11
|
+
static create(experiment: ExperimentResource, agentIndex: number, message: Message, positon: number, totalTokens: number, cost: number, options?: {
|
|
12
|
+
tx?: Tx;
|
|
13
|
+
}): Promise<MessageResource>;
|
|
14
|
+
id(): number;
|
|
15
|
+
position(): number;
|
|
16
|
+
created(): Date;
|
|
17
|
+
toJSON(): Message & {
|
|
18
|
+
id: number;
|
|
19
|
+
};
|
|
20
|
+
static totalTokensForExperiment(experiment: ExperimentResource): Promise<number>;
|
|
21
|
+
static totalCostForExperiment(experiment: ExperimentResource): Promise<number>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/resources/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,EAAE,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAoC;IAChD,UAAU,EAAE,kBAAkB,CAAC;IAE/B,OAAO;WAQM,QAAQ,CACnB,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;WAgBrB,mBAAmB,CAC9B,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,EAAE,CAAC;WAehB,wBAAwB,CACnC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC;WAUhB,MAAM,CACjB,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE,GACpB,OAAO,CAAC,eAAe,CAAC;IAiB3B,EAAE,IAAI,MAAM;IAIZ,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,IAAI;IAIf,MAAM,IAAI,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;WAQrB,wBAAwB,CACnC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,MAAM,CAAC;WASL,sBAAsB,CACjC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,MAAM,CAAC;CAQnB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { db } from "@app/db";
|
|
2
|
+
import { messages } from "@app/db/schema";
|
|
3
|
+
import { eq, and, asc, sum } from "drizzle-orm";
|
|
4
|
+
export class MessageResource {
|
|
5
|
+
data;
|
|
6
|
+
experiment;
|
|
7
|
+
constructor(data, experiment) {
|
|
8
|
+
this.data = data;
|
|
9
|
+
this.experiment = experiment;
|
|
10
|
+
}
|
|
11
|
+
static async findById(experiment, agentIndex, id) {
|
|
12
|
+
const result = await db
|
|
13
|
+
.select()
|
|
14
|
+
.from(messages)
|
|
15
|
+
.where(and(eq(messages.experiment, experiment.toJSON().id), eq(messages.agent, agentIndex), eq(messages.id, id)))
|
|
16
|
+
.limit(1);
|
|
17
|
+
return result[0] ? new MessageResource(result[0], experiment) : null;
|
|
18
|
+
}
|
|
19
|
+
static async listMessagesByAgent(experiment, agentIndex) {
|
|
20
|
+
const results = await db
|
|
21
|
+
.select()
|
|
22
|
+
.from(messages)
|
|
23
|
+
.where(and(eq(messages.experiment, experiment.toJSON().id), eq(messages.agent, agentIndex)))
|
|
24
|
+
.orderBy(asc(messages.position));
|
|
25
|
+
return results.map((msg) => new MessageResource(msg, experiment));
|
|
26
|
+
}
|
|
27
|
+
static async listMessagesByExperiment(experiment) {
|
|
28
|
+
const results = await db
|
|
29
|
+
.select()
|
|
30
|
+
.from(messages)
|
|
31
|
+
.where(eq(messages.experiment, experiment.toJSON().id))
|
|
32
|
+
.orderBy(asc(messages.position));
|
|
33
|
+
return results.map((msg) => new MessageResource(msg, experiment));
|
|
34
|
+
}
|
|
35
|
+
static async create(experiment, agentIndex, message, positon, totalTokens, cost, options) {
|
|
36
|
+
const executor = options?.tx ?? db;
|
|
37
|
+
const [created] = await executor
|
|
38
|
+
.insert(messages)
|
|
39
|
+
.values({
|
|
40
|
+
experiment: experiment.toJSON().id,
|
|
41
|
+
agent: agentIndex,
|
|
42
|
+
...message,
|
|
43
|
+
position: positon,
|
|
44
|
+
total_tokens: totalTokens,
|
|
45
|
+
cost,
|
|
46
|
+
})
|
|
47
|
+
.returning();
|
|
48
|
+
return new MessageResource(created, experiment);
|
|
49
|
+
}
|
|
50
|
+
id() {
|
|
51
|
+
return this.data.id;
|
|
52
|
+
}
|
|
53
|
+
position() {
|
|
54
|
+
return this.data.position;
|
|
55
|
+
}
|
|
56
|
+
created() {
|
|
57
|
+
return new Date(this.data.created);
|
|
58
|
+
}
|
|
59
|
+
toJSON() {
|
|
60
|
+
return {
|
|
61
|
+
id: this.data.id,
|
|
62
|
+
role: this.data.role,
|
|
63
|
+
content: this.data.content,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
static async totalTokensForExperiment(experiment) {
|
|
67
|
+
const results = await db
|
|
68
|
+
.select({ total: sum(messages.total_tokens) })
|
|
69
|
+
.from(messages)
|
|
70
|
+
.where(eq(messages.experiment, experiment.toJSON().id));
|
|
71
|
+
return Number(results[0]?.total ?? 0);
|
|
72
|
+
}
|
|
73
|
+
static async totalCostForExperiment(experiment) {
|
|
74
|
+
const results = await db
|
|
75
|
+
.select({ total: sum(messages.cost) })
|
|
76
|
+
.from(messages)
|
|
77
|
+
.where(eq(messages.experiment, experiment.toJSON().id));
|
|
78
|
+
return Number(results[0]?.total ?? 0);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/resources/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/runner/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runner/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { LLM, Message, TextContent, Thinking, Tool, ToolResult, ToolUse } from "@app/models";
|
|
2
|
+
import { ExperimentResource } from "@app/resources/experiment";
|
|
3
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
|
+
import { Result } from "@app/lib/error";
|
|
5
|
+
import { MessageResource } from "@app/resources/messages";
|
|
6
|
+
import { RunConfig } from "./config";
|
|
7
|
+
export declare class Runner {
|
|
8
|
+
private experiment;
|
|
9
|
+
private agentIndex;
|
|
10
|
+
private mcpClients;
|
|
11
|
+
private model;
|
|
12
|
+
private contextPruning;
|
|
13
|
+
private messages;
|
|
14
|
+
private constructor();
|
|
15
|
+
static builder(experiment: ExperimentResource, agentIndex: number, config: RunConfig): Promise<Result<Runner>>;
|
|
16
|
+
static initialize(experiment: ExperimentResource, agentIndex: number, mcpClients: Client[], model: LLM): Promise<Result<Runner>>;
|
|
17
|
+
tools(): Promise<Result<Tool[]>>;
|
|
18
|
+
executeTool(t: ToolUse): Promise<ToolResult>;
|
|
19
|
+
isNewUserMessageNeeded(): boolean;
|
|
20
|
+
newUserMessage(): Promise<Result<MessageResource>>;
|
|
21
|
+
private isAgentLoopStartMessage;
|
|
22
|
+
private isAgentLoopInnerStartMessage;
|
|
23
|
+
shiftContextPruning(): Result<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Render past agent messages to the model handling truncation to fit the model context window as
|
|
26
|
+
* needed.
|
|
27
|
+
*
|
|
28
|
+
* @param systemPrompt System prompt to use for the model call.
|
|
29
|
+
* @param tools Tools to provide to the model.
|
|
30
|
+
*/
|
|
31
|
+
renderForModel(systemPrompt: string, tools: Tool[]): Promise<Result<Message[]>>;
|
|
32
|
+
/**
|
|
33
|
+
* Logs message content during runner execution to display progress.
|
|
34
|
+
*/
|
|
35
|
+
logContent(c: TextContent | ToolUse | ToolResult | Thinking, messageId?: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Advance runer by one tick (one agent call + associated tools executions).
|
|
38
|
+
*/
|
|
39
|
+
tick(): Promise<Result<void>>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,GAAG,EACH,OAAO,EACP,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAe,MAAM,EAAW,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAcrC,qBAAa,MAAM;IACjB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,KAAK,CAAM;IAEnB,OAAO,CAAC,cAAc,CAGpB;IACF,OAAO,CAAC,QAAQ,CAAoB;IAEpC,OAAO;WAkBa,OAAO,CACzB,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;WA+CN,UAAU,CAC5B,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAkBpB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAyBhC,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDlD,sBAAsB,IAAI,OAAO;IAc3B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAiCxD,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,4BAA4B;IAMpC,mBAAmB,IAAI,MAAM,CAAC,IAAI,CAAC;IAgDnC;;;;;;OAMG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IA2D7B;;OAEG;IACH,UAAU,CACR,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,EAChD,SAAS,CAAC,EAAE,MAAM;IA0CpB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAgGpC"}
|