@cef-ai/cli 2.7.5 → 2.8.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/README.md +15 -0
- package/dist/cli-program.d.ts +2 -0
- package/dist/cli-program.d.ts.map +1 -1
- package/dist/cli-program.js +17 -0
- package/dist/cli-program.js.map +1 -1
- package/dist/commands/cubby.d.ts +7 -0
- package/dist/commands/cubby.d.ts.map +1 -1
- package/dist/commands/cubby.js +8 -4
- package/dist/commands/cubby.js.map +1 -1
- package/dist/commands/eval.d.ts +217 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +860 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/eval.test.d.ts +2 -0
- package/dist/commands/eval.test.d.ts.map +1 -0
- package/dist/commands/eval.test.js +474 -0
- package/dist/commands/eval.test.js.map +1 -0
- package/dist/commands/push.d.ts +23 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +70 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/lib/access-token.d.ts +33 -0
- package/dist/lib/access-token.d.ts.map +1 -1
- package/dist/lib/access-token.js +89 -20
- package/dist/lib/access-token.js.map +1 -1
- package/dist/lib/bucket-owner.d.ts +45 -0
- package/dist/lib/bucket-owner.d.ts.map +1 -0
- package/dist/lib/bucket-owner.js +107 -0
- package/dist/lib/bucket-owner.js.map +1 -0
- package/dist/lib/ddc.d.ts +22 -0
- package/dist/lib/ddc.d.ts.map +1 -1
- package/dist/lib/ddc.js +72 -20
- package/dist/lib/ddc.js.map +1 -1
- package/dist/lib/eval-auth.d.ts +139 -0
- package/dist/lib/eval-auth.d.ts.map +1 -0
- package/dist/lib/eval-auth.js +385 -0
- package/dist/lib/eval-auth.js.map +1 -0
- package/dist/lib/eval-auth.test.d.ts +2 -0
- package/dist/lib/eval-auth.test.d.ts.map +1 -0
- package/dist/lib/eval-auth.test.js +192 -0
- package/dist/lib/eval-auth.test.js.map +1 -0
- package/dist/lib/eval-store.d.ts +62 -0
- package/dist/lib/eval-store.d.ts.map +1 -0
- package/dist/lib/eval-store.js +334 -0
- package/dist/lib/eval-store.js.map +1 -0
- package/dist/lib/eval-store.test.d.ts +2 -0
- package/dist/lib/eval-store.test.d.ts.map +1 -0
- package/dist/lib/eval-store.test.js +155 -0
- package/dist/lib/eval-store.test.js.map +1 -0
- package/dist/lib/eval-target.d.ts +122 -0
- package/dist/lib/eval-target.d.ts.map +1 -0
- package/dist/lib/eval-target.js +320 -0
- package/dist/lib/eval-target.js.map +1 -0
- package/dist/lib/eval-target.test.d.ts +2 -0
- package/dist/lib/eval-target.test.d.ts.map +1 -0
- package/dist/lib/eval-target.test.js +209 -0
- package/dist/lib/eval-target.test.js.map +1 -0
- package/dist/lib/eval-workflow.d.ts +24 -0
- package/dist/lib/eval-workflow.d.ts.map +1 -0
- package/dist/lib/eval-workflow.js +91 -0
- package/dist/lib/eval-workflow.js.map +1 -0
- package/package.json +8 -4
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { liveVersion, nodeWorkflowTarget, } from "./eval-target.js";
|
|
3
|
+
const AS = "0xabc";
|
|
4
|
+
function fakes(opts = {}) {
|
|
5
|
+
const published = [];
|
|
6
|
+
const requests = [];
|
|
7
|
+
const taskReads = {};
|
|
8
|
+
const vault = {
|
|
9
|
+
async publish(ev) {
|
|
10
|
+
published.push(ev);
|
|
11
|
+
},
|
|
12
|
+
async events(context, cursor) {
|
|
13
|
+
const all = opts.events?.[context] ?? [];
|
|
14
|
+
// Two pages, to prove the target follows the cursor.
|
|
15
|
+
return cursor ? { items: all.slice(1), hasMore: false } : { items: all.slice(0, 1), nextCursor: all.length > 1 ? "p2" : undefined, hasMore: all.length > 1 };
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const orchestrator = {
|
|
19
|
+
async request(method, path, body) {
|
|
20
|
+
requests.push({ method, path, ...(body !== undefined ? { body } : {}) });
|
|
21
|
+
if (path.startsWith("/api/v1/jobs?"))
|
|
22
|
+
return { jobs: opts.jobs ?? [], hasMore: false };
|
|
23
|
+
const t = /^\/api\/v1\/jobs\/([^/]+)\/tasks/.exec(path);
|
|
24
|
+
if (t) {
|
|
25
|
+
const reads = opts.tasks?.[t[1]] ?? [[]];
|
|
26
|
+
const i = Math.min(taskReads[t[1]] ?? 0, reads.length - 1);
|
|
27
|
+
taskReads[t[1]] = (taskReads[t[1]] ?? 0) + 1;
|
|
28
|
+
return { tasks: reads[i], hasMore: false };
|
|
29
|
+
}
|
|
30
|
+
if (method === "GET" && path.endsWith("/deployments")) {
|
|
31
|
+
if (!opts.deployments)
|
|
32
|
+
throw Object.assign(new Error("404"), { status: 404 });
|
|
33
|
+
return { revision: 4, deployments: opts.deployments };
|
|
34
|
+
}
|
|
35
|
+
return { revision: 5 };
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
return { vault, orchestrator, published, requests };
|
|
39
|
+
}
|
|
40
|
+
const target = (f, now = () => 0) => nodeWorkflowTarget({
|
|
41
|
+
vault: f.vault, orchestrator: f.orchestrator, vaultId: "v-1", asPubKey: AS, workflowId: "triage",
|
|
42
|
+
pollMs: 10, pinSettleMs: 0, sleep: async () => { }, now,
|
|
43
|
+
});
|
|
44
|
+
describe("starting a run", () => {
|
|
45
|
+
it("publishes workflow.start into the context, targeted at the workflow agent", async () => {
|
|
46
|
+
const f = fakes();
|
|
47
|
+
await target(f).start({ text: "hi" }, "eval-x-a-1");
|
|
48
|
+
expect(f.published).toEqual([{ type: "workflow.start", context: "eval-x-a-1", payload: { text: "hi" }, target: "0xabc:triage" }]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("waiting for a run to end", () => {
|
|
52
|
+
it("returns this run's workflow.completed, ignoring another run's in the same context", async () => {
|
|
53
|
+
const f = fakes({
|
|
54
|
+
events: {
|
|
55
|
+
c: [
|
|
56
|
+
{ type: "workflow.start", payload: { text: "hi" }, timestamp: "t-start" },
|
|
57
|
+
{ type: "workflow.step_ran", payload: { runId: "run-c" } },
|
|
58
|
+
{ type: "workflow.completed", payload: { runId: "run-child", output: { x: 0 } }, timestamp: "t0" },
|
|
59
|
+
{ type: "workflow.completed", payload: { runId: "run-c", output: { category: "billing" }, outcome: "ok" }, timestamp: "t1" },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
expect(await target(f).waitForEnd("c", 1000)).toEqual({
|
|
64
|
+
status: "done", output: { category: "billing" }, outcome: "ok", endedAt: "t1", startedAt: "t-start",
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
it("returns a failure with its message", async () => {
|
|
68
|
+
const f = fakes({
|
|
69
|
+
events: { c: [{ type: "workflow.failed", payload: { runId: "run-c", error: { message: "boom" } }, timestamp: "t" }] },
|
|
70
|
+
});
|
|
71
|
+
expect(await target(f).waitForEnd("c", 1000)).toEqual({ status: "failed", error: "boom", endedAt: "t" });
|
|
72
|
+
});
|
|
73
|
+
it("rides out transient vault errors with backoff, and still finds the end", async () => {
|
|
74
|
+
const f = fakes({ events: { c: [{ type: "workflow.completed", payload: { runId: "run-c", output: 1 }, timestamp: "t" }] } });
|
|
75
|
+
const events = f.vault.events.bind(f.vault);
|
|
76
|
+
let failures = 2;
|
|
77
|
+
f.vault.events = async (context, cursor) => {
|
|
78
|
+
if (failures-- > 0)
|
|
79
|
+
throw Object.assign(new Error("503 unavailable"), { status: 503 });
|
|
80
|
+
return events(context, cursor);
|
|
81
|
+
};
|
|
82
|
+
const waits = [];
|
|
83
|
+
const t = nodeWorkflowTarget({
|
|
84
|
+
vault: f.vault, orchestrator: f.orchestrator, vaultId: "v-1", asPubKey: AS, workflowId: "triage",
|
|
85
|
+
pollMs: 10, sleep: async (ms) => void waits.push(ms), now: () => 0,
|
|
86
|
+
});
|
|
87
|
+
expect(await t.waitForEnd("c", 1000)).toMatchObject({ status: "done", output: 1 });
|
|
88
|
+
expect(waits).toEqual([20, 40]);
|
|
89
|
+
});
|
|
90
|
+
it("throws at once on an error that cannot pass, and with the last error when the vault fails to the deadline", async () => {
|
|
91
|
+
const f = fakes();
|
|
92
|
+
f.vault.events = async () => {
|
|
93
|
+
throw Object.assign(new Error("401 unauthorized"), { status: 401 });
|
|
94
|
+
};
|
|
95
|
+
let clock = 0;
|
|
96
|
+
// Not retried: the bare error, not "kept failing … last: 401".
|
|
97
|
+
await expect(target(f, () => (clock += 300)).waitForEnd("c", 1000)).rejects.toThrow(/^401 unauthorized$/);
|
|
98
|
+
clock = 0;
|
|
99
|
+
f.vault.events = async () => {
|
|
100
|
+
throw new Error("ECONNRESET");
|
|
101
|
+
};
|
|
102
|
+
await expect(target(f, () => (clock += 300)).waitForEnd("c", 1000)).rejects.toThrow(/kept failing .* last: ECONNRESET/);
|
|
103
|
+
});
|
|
104
|
+
it("fails with an error, not a timeout, when the context has more events than it will read", async () => {
|
|
105
|
+
let t = 0;
|
|
106
|
+
let reads = 0;
|
|
107
|
+
const f = fakes();
|
|
108
|
+
f.vault.events = async () => {
|
|
109
|
+
reads++;
|
|
110
|
+
return { items: [{ type: "workflow.step_ran" }], nextCursor: `p${reads}`, hasMore: true };
|
|
111
|
+
};
|
|
112
|
+
await expect(target(f, () => (t += 1)).waitForEnd("c", 60_000)).rejects.toThrow(/more than 100 pages/);
|
|
113
|
+
// Not retried as a blip: polling again reads the same pages.
|
|
114
|
+
expect(reads).toBe(100);
|
|
115
|
+
});
|
|
116
|
+
it("fails the metrics read when a listing has more pages than it will read", async () => {
|
|
117
|
+
const f = fakes({ events: { c: [] } });
|
|
118
|
+
const request = f.orchestrator.request;
|
|
119
|
+
f.orchestrator.request = async (method, path, body) => path.startsWith("/api/v1/jobs?") ? { jobs: [], nextCursor: "more", hasMore: true } : request(method, path, body);
|
|
120
|
+
await expect(target(f).metrics("c")).rejects.toThrow(/jobs listing has more than 100 pages/);
|
|
121
|
+
});
|
|
122
|
+
it("times out when nothing ends the run", async () => {
|
|
123
|
+
let t = 0;
|
|
124
|
+
const f = fakes();
|
|
125
|
+
const end = await target(f, () => (t += 400)).waitForEnd("c", 1000);
|
|
126
|
+
expect(end.status).toBe("timeout");
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("what a run cost", () => {
|
|
130
|
+
it("sums model-call tokens, agent-reported tokens and cost, cpu/gpu, and counts steps", async () => {
|
|
131
|
+
const f = fakes({
|
|
132
|
+
events: { c: [{ type: "workflow.step_ran" }, { type: "workflow.step_ran" }, { type: "workflow.completed" }] },
|
|
133
|
+
jobs: [
|
|
134
|
+
{ jobId: "j1", a2aTokens: 0, metrics: { cpuUnits: 1.5, gpuUnits: 0 } },
|
|
135
|
+
{ jobId: "j2", a2aTokens: 500, a2aCost: 0.02, metrics: { cpuUnits: 0.5, gpuUnits: 2 } },
|
|
136
|
+
],
|
|
137
|
+
tasks: {
|
|
138
|
+
j1: [[{ status: "succeeded", result: { _modelCalls: [{ inputTokens: 100, outputTokens: 20 }, { inputTokens: 10, outputTokens: 5 }] } }]],
|
|
139
|
+
j2: [[{ status: "succeeded", result: {} }]],
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
expect(await target(f).metrics("c")).toEqual({
|
|
143
|
+
durationMs: null, inputTokens: 110, outputTokens: 25, totalTokens: 635, cost: 0.02,
|
|
144
|
+
steps: 2, modelCalls: 2, cpuUnits: 2, gpuUnits: 2,
|
|
145
|
+
});
|
|
146
|
+
expect(f.requests[0].path).toBe("/api/v1/jobs?vaultId=v-1&context=c&limit=100");
|
|
147
|
+
});
|
|
148
|
+
it("measures the duration fallback on the server's clock: first job created → last job completed", async () => {
|
|
149
|
+
const f = fakes({
|
|
150
|
+
jobs: [
|
|
151
|
+
{ jobId: "j1", createdAt: "2026-10-07T00:00:01.000Z", completedAt: "2026-10-07T00:00:04.000Z" },
|
|
152
|
+
{ jobId: "j2", createdAt: "2026-10-07T00:00:02.000Z", completedAt: "2026-10-07T00:00:06.500Z" },
|
|
153
|
+
],
|
|
154
|
+
});
|
|
155
|
+
expect((await target(f).metrics("c")).durationMs).toBe(5500);
|
|
156
|
+
// Go's zero time for an open job is not a timestamp.
|
|
157
|
+
const open = fakes({ jobs: [{ jobId: "j1", createdAt: "2026-10-07T00:00:01.000Z", completedAt: "0001-01-01T00:00:00Z" }] });
|
|
158
|
+
expect((await target(open).metrics("c")).durationMs).toBeNull();
|
|
159
|
+
});
|
|
160
|
+
it("re-reads while a task is still open, so the last step's tokens are counted", async () => {
|
|
161
|
+
const f = fakes({
|
|
162
|
+
jobs: [{ jobId: "j1" }],
|
|
163
|
+
tasks: {
|
|
164
|
+
j1: [
|
|
165
|
+
[{ status: "running", result: {} }],
|
|
166
|
+
[{ status: "succeeded", result: { _modelCalls: [{ inputTokens: 7, outputTokens: 3 }] } }],
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
const m = await target(f).metrics("c");
|
|
171
|
+
expect(m.totalTokens).toBe(10);
|
|
172
|
+
// The job never reported completedAt: no server-side span, so no duration.
|
|
173
|
+
expect(m.durationMs).toBeNull();
|
|
174
|
+
// No step events: steps fall back to the tasks seen.
|
|
175
|
+
expect(m.steps).toBe(1);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("pinning a version", () => {
|
|
179
|
+
const deployments = [
|
|
180
|
+
{ name: "default", priority: 10, targeting: "", weight: 1, version: "1.0.0", params: { graph: { g: 1 }, canvas: {}, connection: "slack" } },
|
|
181
|
+
{ name: "canary", priority: 5, targeting: "vault.id == 'v-2'", weight: 1, version: "1.1.0" },
|
|
182
|
+
];
|
|
183
|
+
it("adds a row one tier above every other, for this experiment's contexts only, and deletes it on release", async () => {
|
|
184
|
+
const f = fakes({ deployments });
|
|
185
|
+
const release = await target(f, () => Date.parse("2026-10-07T00:00:00Z")).pinVersion("2.0.0", "eval-exp-k-abcd-");
|
|
186
|
+
const put = f.requests.find((r) => r.method === "PUT");
|
|
187
|
+
expect(put.path).toBe("/api/v1/agents/0xabc%3Atriage/deployments/eval-exp-k-abcd");
|
|
188
|
+
expect(put.body.deployment).toEqual({
|
|
189
|
+
name: "eval-exp-k-abcd",
|
|
190
|
+
priority: 4,
|
|
191
|
+
targeting: 'event.context.startsWith("eval-exp-k-abcd-")',
|
|
192
|
+
weight: 1,
|
|
193
|
+
version: "2.0.0",
|
|
194
|
+
params: { connection: "slack" },
|
|
195
|
+
expiresAt: "2026-10-07T06:00:00.000Z",
|
|
196
|
+
});
|
|
197
|
+
await release();
|
|
198
|
+
const del = f.requests.find((r) => r.method === "DELETE");
|
|
199
|
+
expect(del.path.startsWith("/api/v1/agents/0xabc%3Atriage/deployments/eval-exp-k-abcd?")).toBe(true);
|
|
200
|
+
});
|
|
201
|
+
it("refuses a workflow that was never deployed", async () => {
|
|
202
|
+
await expect(target(fakes()).pinVersion("2.0.0", "eval-x-")).rejects.toThrow(/no deployment set/);
|
|
203
|
+
});
|
|
204
|
+
it("reads the live version off the default row", async () => {
|
|
205
|
+
expect(await liveVersion(fakes({ deployments }).orchestrator, "0xabc:triage")).toBe("1.0.0");
|
|
206
|
+
expect(await liveVersion(fakes().orchestrator, "0xabc:triage")).toBeNull();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=eval-target.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-target.test.js","sourceRoot":"","sources":["../../src/lib/eval-target.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type AgentConfigLike } from "../build/load-config.js";
|
|
2
|
+
export interface LocalWorkflow {
|
|
3
|
+
id: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
/** `params.graph` as declared: `{ type, default: "<graph json>" }`. */
|
|
6
|
+
graph: unknown;
|
|
7
|
+
/** Where it was read from, for messages. */
|
|
8
|
+
from: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LocalWorkflowOptions {
|
|
11
|
+
cwd: string;
|
|
12
|
+
/** Injected for tests; default compiles and imports `cef.config.ts`. */
|
|
13
|
+
loadConfigImpl?: (configPath: string, configDir: string) => Promise<AgentConfigLike>;
|
|
14
|
+
}
|
|
15
|
+
/** Every workflow the project in `cwd` declares or has built, config first. */
|
|
16
|
+
export declare function localWorkflows(opts: LocalWorkflowOptions): Promise<LocalWorkflow[]>;
|
|
17
|
+
/**
|
|
18
|
+
* The workflow id: `explicit` when given, else the one workflow the project
|
|
19
|
+
* names (config first, then build output). Ambiguity is an error, never a guess.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveWorkflowId(explicit: string | undefined, opts: LocalWorkflowOptions): Promise<string>;
|
|
22
|
+
/** The local graph of `workflowId` at `version`, when the project has that exact version. */
|
|
23
|
+
export declare function localGraph(workflowId: string, version: string, opts: LocalWorkflowOptions): Promise<LocalWorkflow | undefined>;
|
|
24
|
+
//# sourceMappingURL=eval-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-workflow.d.ts","sourceRoot":"","sources":["../../src/lib/eval-workflow.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACtF;AAiDD,+EAA+E;AAC/E,wBAAsB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEzF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjH;AAED,6FAA6F;AAC7F,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAEpI"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which workflow `cef eval` is about, and what its Result is, from the
|
|
3
|
+
* project in the current directory.
|
|
4
|
+
*
|
|
5
|
+
* Two local sources, in this order:
|
|
6
|
+
* 1. `cef.config.ts` — a `defineWorkflow` config carries its graph as the
|
|
7
|
+
* `graph` param, exactly as the built manifest does;
|
|
8
|
+
* 2. `dist/<id>/manifest.json` — what `cef build` wrote.
|
|
9
|
+
* A workflow is recognised by what it is: an agent whose params declare a
|
|
10
|
+
* `graph`. Its id is the alias the platform knows it by (`alias ?? id`).
|
|
11
|
+
*/
|
|
12
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import { isObject } from "@cef-ai/eval";
|
|
15
|
+
import { flattenAgents, loadConfig } from "../build/load-config.js";
|
|
16
|
+
const exists = async (p) => stat(p).then(() => true, () => false);
|
|
17
|
+
function fromAgent(a, from) {
|
|
18
|
+
const graph = isObject(a.params) ? a.params.graph : undefined;
|
|
19
|
+
const id = typeof a.alias === "string" && a.alias ? a.alias : typeof a.id === "string" ? a.id : undefined;
|
|
20
|
+
if (!graph || !id)
|
|
21
|
+
return undefined;
|
|
22
|
+
return { id, graph, from, ...(typeof a.version === "string" ? { version: a.version } : {}) };
|
|
23
|
+
}
|
|
24
|
+
/** The workflows `cef.config.ts` declares; [] when there is none or it cannot be loaded. */
|
|
25
|
+
async function fromConfig(opts) {
|
|
26
|
+
const file = path.join(opts.cwd, "cef.config.ts");
|
|
27
|
+
if (!(await exists(file)))
|
|
28
|
+
return [];
|
|
29
|
+
try {
|
|
30
|
+
const cfg = await (opts.loadConfigImpl ?? loadConfig)(file, opts.cwd);
|
|
31
|
+
return flattenAgents(cfg)
|
|
32
|
+
.map((a) => fromAgent(a, "cef.config.ts"))
|
|
33
|
+
.filter((w) => !!w);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// A config that does not load says nothing about which workflow this is; the build output may.
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** The workflows built into `dist/`. */
|
|
41
|
+
async function fromDist(cwd) {
|
|
42
|
+
const dist = path.join(cwd, "dist");
|
|
43
|
+
let dirs;
|
|
44
|
+
try {
|
|
45
|
+
dirs = (await readdir(dist)).sort();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
const out = [];
|
|
51
|
+
for (const d of dirs) {
|
|
52
|
+
const file = path.join(dist, d, "manifest.json");
|
|
53
|
+
try {
|
|
54
|
+
const m = JSON.parse(await readFile(file, "utf8"));
|
|
55
|
+
const w = isObject(m) ? fromAgent(m, path.relative(cwd, file)) : undefined;
|
|
56
|
+
if (w)
|
|
57
|
+
out.push(w);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Not a manifest; not ours to judge.
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
/** Every workflow the project in `cwd` declares or has built, config first. */
|
|
66
|
+
export async function localWorkflows(opts) {
|
|
67
|
+
return [...(await fromConfig(opts)), ...(await fromDist(opts.cwd))];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The workflow id: `explicit` when given, else the one workflow the project
|
|
71
|
+
* names (config first, then build output). Ambiguity is an error, never a guess.
|
|
72
|
+
*/
|
|
73
|
+
export async function resolveWorkflowId(explicit, opts) {
|
|
74
|
+
if (explicit)
|
|
75
|
+
return explicit;
|
|
76
|
+
const all = await localWorkflows(opts);
|
|
77
|
+
for (const from of ["cef.config.ts", "dist"]) {
|
|
78
|
+
const ids = [...new Set(all.filter((w) => (from === "dist" ? w.from !== "cef.config.ts" : w.from === from)).map((w) => w.id))];
|
|
79
|
+
if (ids.length === 1)
|
|
80
|
+
return ids[0];
|
|
81
|
+
if (ids.length > 1) {
|
|
82
|
+
throw new Error(`[cef eval] ${from} in ${opts.cwd} declares several workflows (${ids.join(", ")}) — pass --workflow <id>`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`[cef eval] --workflow <id> is required: no cef.config.ts or built manifest in ${opts.cwd} names a workflow`);
|
|
86
|
+
}
|
|
87
|
+
/** The local graph of `workflowId` at `version`, when the project has that exact version. */
|
|
88
|
+
export async function localGraph(workflowId, version, opts) {
|
|
89
|
+
return (await localWorkflows(opts)).find((w) => w.id === workflowId && w.version === version);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=eval-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-workflow.js","sourceRoot":"","sources":["../../src/lib/eval-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,yBAAyB,CAAC;AAiB1F,MAAM,MAAM,GAAG,KAAK,EAAE,CAAS,EAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAE5F,SAAS,SAAS,CAAC,CAAyE,EAAE,IAAY;IACxG,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,UAAU,CAAC,IAA0B;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,aAAa,CAAC,GAAG,CAAC;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,+FAA+F;QAC/F,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,CAAC,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA0B;IAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAA4B,EAAE,IAA0B;IAC9F,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/H,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC,CAAE,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,GAAG,gCAAgC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iFAAiF,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;AAChI,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,OAAe,EAAE,IAA0B;IAC9F,OAAO,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAChG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cef-ai/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -15,14 +15,18 @@
|
|
|
15
15
|
"access": "public"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
+
"@aws-sdk/client-s3": "^3.700.0",
|
|
18
19
|
"@noble/hashes": "^2.2.0",
|
|
19
20
|
"commander": "^12.0.0",
|
|
20
21
|
"esbuild": "^0.21.0",
|
|
21
22
|
"json-schema-to-typescript": "^14.0.0",
|
|
22
23
|
"typescript": "^5.4.0",
|
|
23
|
-
"@cef-ai/
|
|
24
|
-
"@cef-ai/
|
|
25
|
-
"@cef-ai/
|
|
24
|
+
"@cef-ai/account": "2.0.0",
|
|
25
|
+
"@cef-ai/agent-sdk": "5.8.0",
|
|
26
|
+
"@cef-ai/vault-sdk": "5.5.0",
|
|
27
|
+
"@cef-ai/eval": "0.1.0",
|
|
28
|
+
"@cef-ai/transport": "1.1.0",
|
|
29
|
+
"@cef-ai/widget-runtime": "2.4.1"
|
|
26
30
|
},
|
|
27
31
|
"optionalDependencies": {
|
|
28
32
|
"@cere-ddc-sdk/ddc-client": "^2.16.1"
|