agentv 4.31.3 → 4.32.0-next.1
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 +14 -0
- package/dist/{artifact-writer-FZ5RUHWC.js → artifact-writer-VDF7KRWL.js} +4 -4
- package/dist/{chunk-IJPWTVDU.js → chunk-2ZEY3WBH.js} +3 -3
- package/dist/{chunk-CO23UZAA.js → chunk-5JMFFG36.js} +13 -9
- package/dist/chunk-5JMFFG36.js.map +1 -0
- package/dist/{chunk-4POCDPC2.js → chunk-IGTRNQAM.js} +106 -63
- package/dist/chunk-IGTRNQAM.js.map +1 -0
- package/dist/{chunk-LOYPSIE7.js → chunk-LX5AK3P7.js} +22 -12
- package/dist/chunk-LX5AK3P7.js.map +1 -0
- package/dist/{chunk-377GONL7.js → chunk-TAZBCVEZ.js} +66 -62
- package/dist/chunk-TAZBCVEZ.js.map +1 -0
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/{studio/assets/index-sazn_aO8.js → dashboard/assets/index-BdoQWnyM.js} +1 -1
- package/dist/{studio/assets/index-CYUVGyMn.css → dashboard/assets/index-DcPH8PyS.css} +1 -1
- package/dist/dashboard/assets/index-EXkiwqam.js +116 -0
- package/dist/{studio → dashboard}/index.html +3 -3
- package/dist/{dist-CRYAFKLS.js → dist-GICSKMNP.js} +5 -3
- package/dist/index.js +9 -7
- package/dist/{interactive-QBLQNYDH.js → interactive-GIDBBDYZ.js} +5 -5
- package/dist/{ts-eval-loader-XR6DNOZ3-GA7B5N26.js → ts-eval-loader-Z6IUSDNA-YBOE4JIQ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-377GONL7.js.map +0 -1
- package/dist/chunk-4POCDPC2.js.map +0 -1
- package/dist/chunk-CO23UZAA.js.map +0 -1
- package/dist/chunk-LOYPSIE7.js.map +0 -1
- package/dist/studio/assets/index-DBSSri9Q.js +0 -116
- /package/dist/{artifact-writer-FZ5RUHWC.js.map → artifact-writer-VDF7KRWL.js.map} +0 -0
- /package/dist/{chunk-IJPWTVDU.js.map → chunk-2ZEY3WBH.js.map} +0 -0
- /package/dist/{dist-CRYAFKLS.js.map → dist-GICSKMNP.js.map} +0 -0
- /package/dist/{interactive-QBLQNYDH.js.map → interactive-GIDBBDYZ.js.map} +0 -0
- /package/dist/{ts-eval-loader-XR6DNOZ3-GA7B5N26.js.map → ts-eval-loader-Z6IUSDNA-YBOE4JIQ.js.map} +0 -0
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
validateFileReferences,
|
|
47
47
|
validateTargetsFile,
|
|
48
48
|
validateWorkspacePaths
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-5JMFFG36.js";
|
|
50
50
|
import {
|
|
51
51
|
RESULT_INDEX_FILENAME,
|
|
52
52
|
aggregateRunDir,
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
resolveRunManifestPath,
|
|
55
55
|
toSnakeCaseDeep as toSnakeCaseDeep2,
|
|
56
56
|
writeArtifactsFromResults
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-2ZEY3WBH.js";
|
|
58
58
|
import {
|
|
59
59
|
DEFAULT_CATEGORY,
|
|
60
60
|
addProject,
|
|
@@ -75,7 +75,7 @@ import {
|
|
|
75
75
|
touchProject,
|
|
76
76
|
transpileEvalYamlFile,
|
|
77
77
|
trimBaselineResult
|
|
78
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-LX5AK3P7.js";
|
|
79
79
|
import {
|
|
80
80
|
DEFAULT_THRESHOLD,
|
|
81
81
|
createBuiltinRegistry,
|
|
@@ -105,7 +105,7 @@ import {
|
|
|
105
105
|
runStartsWithAssertion,
|
|
106
106
|
toCamelCaseDeep,
|
|
107
107
|
toSnakeCaseDeep
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-TAZBCVEZ.js";
|
|
109
109
|
import {
|
|
110
110
|
__commonJS,
|
|
111
111
|
__require,
|
|
@@ -4055,7 +4055,7 @@ var evalRunCommand = command({
|
|
|
4055
4055
|
},
|
|
4056
4056
|
handler: async (args) => {
|
|
4057
4057
|
if (args.evalPaths.length === 0 && process.stdin.isTTY) {
|
|
4058
|
-
const { launchInteractiveWizard } = await import("./interactive-
|
|
4058
|
+
const { launchInteractiveWizard } = await import("./interactive-GIDBBDYZ.js");
|
|
4059
4059
|
await launchInteractiveWizard();
|
|
4060
4060
|
return;
|
|
4061
4061
|
}
|
|
@@ -8995,7 +8995,7 @@ var RESULTS_REPORT_TEMPLATE = `<!DOCTYPE html>
|
|
|
8995
8995
|
<div class="header-title-wrap">
|
|
8996
8996
|
<div class="eyebrow">AgentV static export</div>
|
|
8997
8997
|
<h1 class="header-title">Evaluation Report</h1>
|
|
8998
|
-
<p class="header-subtitle">
|
|
8998
|
+
<p class="header-subtitle">Dashboard-themed HTML generated from an existing AgentV results workspace.</p>
|
|
8999
8999
|
</div>
|
|
9000
9000
|
<div class="header-meta" id="header-meta"></div>
|
|
9001
9001
|
</header>
|
|
@@ -10344,7 +10344,7 @@ function generateRunId() {
|
|
|
10344
10344
|
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
10345
10345
|
const ts = `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
|
|
10346
10346
|
const rand = Math.random().toString(36).slice(2, 6);
|
|
10347
|
-
return `
|
|
10347
|
+
return `dashboard-${ts}-${rand}`;
|
|
10348
10348
|
}
|
|
10349
10349
|
function pruneFinishedRuns() {
|
|
10350
10350
|
const finished = [...activeRuns.entries()].filter(([, r]) => r.status === "finished" || r.status === "failed").sort((a, b) => (b[1].finishedAt ?? "").localeCompare(a[1].finishedAt ?? ""));
|
|
@@ -10521,7 +10521,7 @@ function registerEvalRoutes(app2, getCwd, options) {
|
|
|
10521
10521
|
});
|
|
10522
10522
|
app2.post("/api/eval/run", async (c4) => {
|
|
10523
10523
|
if (readOnly) {
|
|
10524
|
-
return c4.json({ error: "
|
|
10524
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
10525
10525
|
}
|
|
10526
10526
|
const cwd = getCwd(c4);
|
|
10527
10527
|
let body;
|
|
@@ -10620,7 +10620,7 @@ Process error: ${err2.message}
|
|
|
10620
10620
|
});
|
|
10621
10621
|
app2.post("/api/eval/run/:id/stop", (c4) => {
|
|
10622
10622
|
if (readOnly) {
|
|
10623
|
-
return c4.json({ error: "
|
|
10623
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
10624
10624
|
}
|
|
10625
10625
|
const id = c4.req.param("id");
|
|
10626
10626
|
const run2 = activeRuns.get(id ?? "");
|
|
@@ -10699,7 +10699,7 @@ Process error: ${err2.message}
|
|
|
10699
10699
|
});
|
|
10700
10700
|
app2.post("/api/projects/:projectId/eval/run", async (c4) => {
|
|
10701
10701
|
if (readOnly) {
|
|
10702
|
-
return c4.json({ error: "
|
|
10702
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
10703
10703
|
}
|
|
10704
10704
|
const cwd = getCwd(c4);
|
|
10705
10705
|
let body;
|
|
@@ -10786,7 +10786,7 @@ Process error: ${err2.message}
|
|
|
10786
10786
|
});
|
|
10787
10787
|
app2.post("/api/projects/:projectId/eval/run/:id/stop", (c4) => {
|
|
10788
10788
|
if (readOnly) {
|
|
10789
|
-
return c4.json({ error: "
|
|
10789
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
10790
10790
|
}
|
|
10791
10791
|
const id = c4.req.param("id");
|
|
10792
10792
|
const run2 = activeRuns.get(id ?? "");
|
|
@@ -10923,34 +10923,49 @@ import { existsSync as existsSync14, mkdirSync as mkdirSync4, readFileSync as re
|
|
|
10923
10923
|
import path20 from "node:path";
|
|
10924
10924
|
import { stringify as stringifyYaml3 } from "yaml";
|
|
10925
10925
|
var DEFAULTS = {
|
|
10926
|
-
threshold: DEFAULT_THRESHOLD
|
|
10926
|
+
threshold: DEFAULT_THRESHOLD,
|
|
10927
|
+
appName: "agentv"
|
|
10927
10928
|
};
|
|
10928
10929
|
function loadStudioConfig(agentvDir) {
|
|
10929
|
-
const
|
|
10930
|
-
|
|
10931
|
-
|
|
10932
|
-
|
|
10933
|
-
const
|
|
10934
|
-
|
|
10935
|
-
|
|
10936
|
-
|
|
10937
|
-
|
|
10938
|
-
|
|
10939
|
-
|
|
10940
|
-
|
|
10941
|
-
|
|
10942
|
-
if (typeof studioObj.threshold === "number") {
|
|
10943
|
-
threshold = studioObj.threshold;
|
|
10944
|
-
} else if (typeof studioObj.pass_threshold === "number") {
|
|
10945
|
-
threshold = studioObj.pass_threshold;
|
|
10946
|
-
}
|
|
10947
|
-
} else if (typeof parsed.pass_threshold === "number") {
|
|
10948
|
-
threshold = parsed.pass_threshold;
|
|
10949
|
-
}
|
|
10930
|
+
const localConfigPath = path20.join(agentvDir, "config.yaml");
|
|
10931
|
+
const globalConfigPath = path20.join(getAgentvConfigDir(), "config.yaml");
|
|
10932
|
+
const localConfig = loadParsedConfig(localConfigPath);
|
|
10933
|
+
const globalConfig = path20.resolve(globalConfigPath) === path20.resolve(localConfigPath) ? void 0 : loadParsedConfig(globalConfigPath);
|
|
10934
|
+
const threshold = [
|
|
10935
|
+
readThreshold(localConfig?.dashboard),
|
|
10936
|
+
readThreshold(localConfig?.studio),
|
|
10937
|
+
typeof localConfig?.pass_threshold === "number" ? localConfig.pass_threshold : void 0,
|
|
10938
|
+
readThreshold(globalConfig?.dashboard),
|
|
10939
|
+
readThreshold(globalConfig?.studio),
|
|
10940
|
+
typeof globalConfig?.pass_threshold === "number" ? globalConfig.pass_threshold : void 0,
|
|
10941
|
+
DEFAULTS.threshold
|
|
10942
|
+
].find((value) => value !== void 0);
|
|
10950
10943
|
return {
|
|
10951
|
-
threshold: Math.min(1, Math.max(0, threshold))
|
|
10944
|
+
threshold: Math.min(1, Math.max(0, threshold)),
|
|
10945
|
+
appName: readAppName(localConfig?.dashboard) ?? readAppName(globalConfig?.dashboard) ?? DEFAULTS.appName
|
|
10952
10946
|
};
|
|
10953
10947
|
}
|
|
10948
|
+
function loadParsedConfig(configPath) {
|
|
10949
|
+
if (!existsSync14(configPath)) return void 0;
|
|
10950
|
+
const raw = readFileSync11(configPath, "utf-8");
|
|
10951
|
+
const parsed = parseYamlValue(raw);
|
|
10952
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return void 0;
|
|
10953
|
+
return parsed;
|
|
10954
|
+
}
|
|
10955
|
+
function readThreshold(section) {
|
|
10956
|
+
if (!section || typeof section !== "object" || Array.isArray(section)) return void 0;
|
|
10957
|
+
const values = section;
|
|
10958
|
+
if (typeof values.threshold === "number") return values.threshold;
|
|
10959
|
+
if (typeof values.pass_threshold === "number") return values.pass_threshold;
|
|
10960
|
+
return void 0;
|
|
10961
|
+
}
|
|
10962
|
+
function readAppName(section) {
|
|
10963
|
+
if (!section || typeof section !== "object" || Array.isArray(section)) return void 0;
|
|
10964
|
+
const value = section.app_name;
|
|
10965
|
+
if (typeof value !== "string") return void 0;
|
|
10966
|
+
const trimmed = value.trim();
|
|
10967
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
10968
|
+
}
|
|
10954
10969
|
function saveStudioConfig(agentvDir, config) {
|
|
10955
10970
|
if (!existsSync14(agentvDir)) {
|
|
10956
10971
|
mkdirSync4(agentvDir, { recursive: true });
|
|
@@ -10966,13 +10981,22 @@ function saveStudioConfig(agentvDir, config) {
|
|
|
10966
10981
|
}
|
|
10967
10982
|
const { pass_threshold: _, ...rest } = existing;
|
|
10968
10983
|
existing = rest;
|
|
10984
|
+
const existingDashboard = existing.dashboard;
|
|
10969
10985
|
const existingStudio = existing.studio;
|
|
10970
|
-
|
|
10971
|
-
|
|
10972
|
-
|
|
10973
|
-
|
|
10974
|
-
|
|
10975
|
-
|
|
10986
|
+
const dashboardRest = existingDashboard && typeof existingDashboard === "object" && !Array.isArray(existingDashboard) ? (({ pass_threshold: _2, ...rest2 }) => rest2)(existingDashboard) : {};
|
|
10987
|
+
const studioRest = existingStudio && typeof existingStudio === "object" && !Array.isArray(existingStudio) ? (({ threshold: _2, pass_threshold: __, ...rest2 }) => rest2)(
|
|
10988
|
+
existingStudio
|
|
10989
|
+
) : {};
|
|
10990
|
+
const { studio: _legacyStudio, ...withoutStudio } = existing;
|
|
10991
|
+
existing = {
|
|
10992
|
+
...withoutStudio,
|
|
10993
|
+
dashboard: {
|
|
10994
|
+
...studioRest,
|
|
10995
|
+
...dashboardRest,
|
|
10996
|
+
threshold: config.threshold,
|
|
10997
|
+
app_name: config.appName
|
|
10998
|
+
}
|
|
10999
|
+
};
|
|
10976
11000
|
const yamlStr = stringifyYaml3(existing);
|
|
10977
11001
|
writeFileSync5(configPath, yamlStr, "utf-8");
|
|
10978
11002
|
}
|
|
@@ -11174,12 +11198,14 @@ async function handleRuns(c4, { searchDir, agentvDir }) {
|
|
|
11174
11198
|
let target;
|
|
11175
11199
|
let experiment = inferExperimentFromRunId(m.raw_filename);
|
|
11176
11200
|
let passRate = m.passRate;
|
|
11201
|
+
let avgScore = m.avgScore;
|
|
11177
11202
|
try {
|
|
11178
11203
|
const records = await loadLightweightResultsForMeta(searchDir, m);
|
|
11179
11204
|
if (records.length > 0) {
|
|
11180
11205
|
target = records[0].target;
|
|
11181
11206
|
experiment = records[0].experiment ?? experiment;
|
|
11182
11207
|
passRate = records.filter((r) => r.score >= passThreshold).length / records.length;
|
|
11208
|
+
avgScore = records.reduce((sum, r) => sum + r.score, 0) / records.length;
|
|
11183
11209
|
} else {
|
|
11184
11210
|
target = getActiveRunTarget(m.path);
|
|
11185
11211
|
}
|
|
@@ -11194,7 +11220,7 @@ async function handleRuns(c4, { searchDir, agentvDir }) {
|
|
|
11194
11220
|
timestamp: m.timestamp,
|
|
11195
11221
|
test_count: m.testCount,
|
|
11196
11222
|
pass_rate: passRate,
|
|
11197
|
-
avg_score:
|
|
11223
|
+
avg_score: avgScore,
|
|
11198
11224
|
size_bytes: m.sizeBytes,
|
|
11199
11225
|
source: m.source,
|
|
11200
11226
|
...target && { target },
|
|
@@ -11636,8 +11662,10 @@ async function handleTargets(c4, { searchDir, agentvDir }) {
|
|
|
11636
11662
|
return c4.json({ targets });
|
|
11637
11663
|
}
|
|
11638
11664
|
function handleConfig(c4, { agentvDir, searchDir }, options) {
|
|
11665
|
+
const config = loadStudioConfig(agentvDir);
|
|
11639
11666
|
return c4.json({
|
|
11640
|
-
|
|
11667
|
+
threshold: config.threshold,
|
|
11668
|
+
app_name: config.appName,
|
|
11641
11669
|
read_only: options?.readOnly === true,
|
|
11642
11670
|
project_name: path21.basename(searchDir),
|
|
11643
11671
|
project_dashboard: options?.projectDashboard === true,
|
|
@@ -11710,7 +11738,7 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11710
11738
|
}
|
|
11711
11739
|
app2.post("/api/config", async (c4) => {
|
|
11712
11740
|
if (readOnly) {
|
|
11713
|
-
return c4.json({ error: "
|
|
11741
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11714
11742
|
}
|
|
11715
11743
|
try {
|
|
11716
11744
|
const body = await c4.req.json();
|
|
@@ -11763,7 +11791,7 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11763
11791
|
});
|
|
11764
11792
|
app2.post("/api/projects", async (c4) => {
|
|
11765
11793
|
if (readOnly) {
|
|
11766
|
-
return c4.json({ error: "
|
|
11794
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11767
11795
|
}
|
|
11768
11796
|
try {
|
|
11769
11797
|
const body = await c4.req.json();
|
|
@@ -11835,7 +11863,7 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11835
11863
|
});
|
|
11836
11864
|
app2.delete("/api/projects/:projectId", (c4) => {
|
|
11837
11865
|
if (readOnly) {
|
|
11838
|
-
return c4.json({ error: "
|
|
11866
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11839
11867
|
}
|
|
11840
11868
|
const removed = removeProject(c4.req.param("projectId") ?? "");
|
|
11841
11869
|
if (!removed) return c4.json({ error: "Project not found" }, 404);
|
|
@@ -11854,13 +11882,13 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11854
11882
|
app2.get("/api/runs", (c4) => handleRuns(c4, defaultCtx));
|
|
11855
11883
|
app2.put("/api/runs/:filename/tags", (c4) => {
|
|
11856
11884
|
if (readOnly) {
|
|
11857
|
-
return c4.json({ error: "
|
|
11885
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11858
11886
|
}
|
|
11859
11887
|
return handleRunTagsPut(c4, defaultCtx);
|
|
11860
11888
|
});
|
|
11861
11889
|
app2.delete("/api/runs/:filename/tags", (c4) => {
|
|
11862
11890
|
if (readOnly) {
|
|
11863
|
-
return c4.json({ error: "
|
|
11891
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11864
11892
|
}
|
|
11865
11893
|
return handleRunTagsDelete(c4, defaultCtx);
|
|
11866
11894
|
});
|
|
@@ -11884,7 +11912,7 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11884
11912
|
});
|
|
11885
11913
|
app2.post("/api/feedback", async (c4) => {
|
|
11886
11914
|
if (readOnly) {
|
|
11887
|
-
return c4.json({ error: "
|
|
11915
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11888
11916
|
}
|
|
11889
11917
|
let body;
|
|
11890
11918
|
try {
|
|
@@ -11970,13 +11998,13 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
11970
11998
|
app2.get("/api/projects/:projectId/runs", (c4) => withProject(c4, handleRuns));
|
|
11971
11999
|
app2.put("/api/projects/:projectId/runs/:filename/tags", (c4) => {
|
|
11972
12000
|
if (readOnly) {
|
|
11973
|
-
return c4.json({ error: "
|
|
12001
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11974
12002
|
}
|
|
11975
12003
|
return withProject(c4, handleRunTagsPut);
|
|
11976
12004
|
});
|
|
11977
12005
|
app2.delete("/api/projects/:projectId/runs/:filename/tags", (c4) => {
|
|
11978
12006
|
if (readOnly) {
|
|
11979
|
-
return c4.json({ error: "
|
|
12007
|
+
return c4.json({ error: "Dashboard is running in read-only mode" }, 403);
|
|
11980
12008
|
}
|
|
11981
12009
|
return withProject(c4, handleRunTagsDelete);
|
|
11982
12010
|
});
|
|
@@ -12021,7 +12049,9 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
12021
12049
|
);
|
|
12022
12050
|
const studioDistPath = options?.studioDir ?? resolveStudioDistDir();
|
|
12023
12051
|
if (!studioDistPath || !existsSync15(path21.join(studioDistPath, "index.html"))) {
|
|
12024
|
-
throw new Error(
|
|
12052
|
+
throw new Error(
|
|
12053
|
+
'Dashboard dist not found. Run "bun run build" in apps/dashboard/ to build the SPA.'
|
|
12054
|
+
);
|
|
12025
12055
|
}
|
|
12026
12056
|
app2.get("/", (c4) => {
|
|
12027
12057
|
const indexPath = path21.join(studioDistPath, "index.html");
|
|
@@ -12063,14 +12093,14 @@ function createApp(results, resultDir, cwd, sourceFile, options) {
|
|
|
12063
12093
|
function resolveStudioDistDir() {
|
|
12064
12094
|
const currentDir = typeof __dirname !== "undefined" ? __dirname : path21.dirname(fileURLToPath3(import.meta.url));
|
|
12065
12095
|
const candidates = [
|
|
12066
|
-
// From src/commands/results/ → sibling apps/
|
|
12067
|
-
path21.resolve(currentDir, "../../../../
|
|
12068
|
-
// From dist/ → sibling apps/
|
|
12069
|
-
path21.resolve(currentDir, "../../
|
|
12070
|
-
// Bundled inside CLI dist (published package: dist/
|
|
12071
|
-
path21.resolve(currentDir, "
|
|
12096
|
+
// From src/commands/results/ → sibling apps/dashboard/dist
|
|
12097
|
+
path21.resolve(currentDir, "../../../../dashboard/dist"),
|
|
12098
|
+
// From dist/ → sibling apps/dashboard/dist (monorepo dev)
|
|
12099
|
+
path21.resolve(currentDir, "../../dashboard/dist"),
|
|
12100
|
+
// Bundled inside CLI dist (published package: dist/dashboard/)
|
|
12101
|
+
path21.resolve(currentDir, "dashboard"),
|
|
12072
12102
|
// From dist/ in monorepo root context
|
|
12073
|
-
path21.resolve(currentDir, "../../../apps/
|
|
12103
|
+
path21.resolve(currentDir, "../../../apps/dashboard/dist")
|
|
12074
12104
|
];
|
|
12075
12105
|
for (const candidate of candidates) {
|
|
12076
12106
|
if (existsSync15(candidate) && existsSync15(path21.join(candidate, "index.html"))) {
|
|
@@ -12080,8 +12110,8 @@ function resolveStudioDistDir() {
|
|
|
12080
12110
|
return void 0;
|
|
12081
12111
|
}
|
|
12082
12112
|
var resultsServeCommand = command({
|
|
12083
|
-
name: "
|
|
12084
|
-
description: "Start AgentV
|
|
12113
|
+
name: "dashboard",
|
|
12114
|
+
description: "Start AgentV Dashboard \u2014 a local dashboard for reviewing evaluation results",
|
|
12085
12115
|
args: {
|
|
12086
12116
|
source: positional({
|
|
12087
12117
|
type: optional(string),
|
|
@@ -12116,7 +12146,7 @@ var resultsServeCommand = command({
|
|
|
12116
12146
|
}),
|
|
12117
12147
|
readOnly: flag({
|
|
12118
12148
|
long: "read-only",
|
|
12119
|
-
description: "Disable write operations and launch
|
|
12149
|
+
description: "Disable write operations and launch Dashboard in read-only leaderboard mode"
|
|
12120
12150
|
})
|
|
12121
12151
|
},
|
|
12122
12152
|
handler: async ({ source, port, dir, single, add, remove, readOnly }) => {
|
|
@@ -13572,6 +13602,7 @@ var app = subcommands({
|
|
|
13572
13602
|
description: "AgentV CLI",
|
|
13573
13603
|
version: package_default.version,
|
|
13574
13604
|
cmds: {
|
|
13605
|
+
dashboard: resultsServeCommand,
|
|
13575
13606
|
eval: evalCommand,
|
|
13576
13607
|
import: importCommand,
|
|
13577
13608
|
compare: compareCommand,
|
|
@@ -13584,7 +13615,6 @@ var app = subcommands({
|
|
|
13584
13615
|
self: selfCommand,
|
|
13585
13616
|
skills: skillsCommand,
|
|
13586
13617
|
serve: resultsServeCommand,
|
|
13587
|
-
studio: resultsServeCommand,
|
|
13588
13618
|
inspect: inspectCommand,
|
|
13589
13619
|
trend: trendCommand,
|
|
13590
13620
|
transpile: transpileCommand,
|
|
@@ -13600,6 +13630,7 @@ var TOP_LEVEL_COMMANDS = /* @__PURE__ */ new Set([
|
|
|
13600
13630
|
"compare",
|
|
13601
13631
|
"convert",
|
|
13602
13632
|
"create",
|
|
13633
|
+
"dashboard",
|
|
13603
13634
|
"doctor",
|
|
13604
13635
|
"init",
|
|
13605
13636
|
"pipeline",
|
|
@@ -13614,8 +13645,14 @@ var TOP_LEVEL_COMMANDS = /* @__PURE__ */ new Set([
|
|
|
13614
13645
|
"validate",
|
|
13615
13646
|
"workspace"
|
|
13616
13647
|
]);
|
|
13648
|
+
function usesDeprecatedStudioAlias(argv) {
|
|
13649
|
+
return argv[2] === "studio";
|
|
13650
|
+
}
|
|
13617
13651
|
function preprocessArgv(argv) {
|
|
13618
13652
|
const result = [...argv];
|
|
13653
|
+
if (result[2] === "studio") {
|
|
13654
|
+
result[2] = "dashboard";
|
|
13655
|
+
}
|
|
13619
13656
|
for (let i = 0; i < result.length; i++) {
|
|
13620
13657
|
if (result[i] === "--eval-id") {
|
|
13621
13658
|
result[i] = "--test-id";
|
|
@@ -13648,6 +13685,11 @@ ${updateNotice}
|
|
|
13648
13685
|
updateNotice = n;
|
|
13649
13686
|
});
|
|
13650
13687
|
const processedArgv = preprocessArgv(argv);
|
|
13688
|
+
if (usesDeprecatedStudioAlias(argv)) {
|
|
13689
|
+
process.stderr.write(
|
|
13690
|
+
"Warning: `agentv studio` is deprecated and will be removed in a future release. Use `agentv dashboard` instead.\n"
|
|
13691
|
+
);
|
|
13692
|
+
}
|
|
13651
13693
|
const cwd = process.cwd();
|
|
13652
13694
|
const repoRoot = await findRepoRoot(cwd);
|
|
13653
13695
|
const sessionConfig = await loadConfig(path29.join(cwd, "_"), repoRoot);
|
|
@@ -13660,7 +13702,8 @@ ${updateNotice}
|
|
|
13660
13702
|
|
|
13661
13703
|
export {
|
|
13662
13704
|
app,
|
|
13705
|
+
usesDeprecatedStudioAlias,
|
|
13663
13706
|
preprocessArgv,
|
|
13664
13707
|
runCli
|
|
13665
13708
|
};
|
|
13666
|
-
//# sourceMappingURL=chunk-
|
|
13709
|
+
//# sourceMappingURL=chunk-IGTRNQAM.js.map
|