@post-print/agent-test 1.1.9 → 2.0.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 +18 -66
- package/dist/cli.d.ts +2 -64
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -691
- package/dist/cli.js.map +1 -1
- package/dist/compare-scenario.d.ts +1 -1
- package/dist/compare-scenario.d.ts.map +1 -1
- package/dist/compare-scenario.js +72 -75
- package/dist/compare-scenario.js.map +1 -1
- package/dist/failures.d.ts +5 -1
- package/dist/failures.d.ts.map +1 -1
- package/dist/failures.js +1 -1
- package/dist/failures.js.map +1 -1
- package/dist/host-login.d.ts +1 -26
- package/dist/host-login.d.ts.map +1 -1
- package/dist/host-login.js +1 -92
- package/dist/host-login.js.map +1 -1
- package/dist/index.d.ts +6 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -26
- package/dist/index.js.map +1 -1
- package/dist/scenario-story.d.ts.map +1 -1
- package/dist/scenario-story.js +57 -39
- package/dist/scenario-story.js.map +1 -1
- package/dist/sdk/cli.d.ts +3 -0
- package/dist/sdk/cli.d.ts.map +1 -0
- package/dist/sdk/cli.js +20 -0
- package/dist/sdk/cli.js.map +1 -0
- package/dist/sdk/definitions.d.ts +22 -0
- package/dist/sdk/definitions.d.ts.map +1 -0
- package/dist/sdk/definitions.js +58 -0
- package/dist/sdk/definitions.js.map +1 -0
- package/dist/sdk/expect.d.ts +31 -0
- package/dist/sdk/expect.d.ts.map +1 -0
- package/dist/sdk/expect.js +68 -0
- package/dist/sdk/expect.js.map +1 -0
- package/dist/sdk/judge.d.ts +16 -0
- package/dist/sdk/judge.d.ts.map +1 -0
- package/dist/sdk/judge.js +82 -0
- package/dist/sdk/judge.js.map +1 -0
- package/dist/sdk/metrics.d.ts +3 -0
- package/dist/sdk/metrics.d.ts.map +1 -0
- package/dist/sdk/metrics.js +24 -0
- package/dist/sdk/metrics.js.map +1 -0
- package/dist/sdk/reporter.d.ts +12 -0
- package/dist/sdk/reporter.d.ts.map +1 -0
- package/dist/sdk/reporter.js +58 -0
- package/dist/sdk/reporter.js.map +1 -0
- package/dist/sdk/runtime.d.ts +33 -0
- package/dist/sdk/runtime.d.ts.map +1 -0
- package/dist/sdk/runtime.js +188 -0
- package/dist/sdk/runtime.js.map +1 -0
- package/dist/sdk/test.d.ts +27 -0
- package/dist/sdk/test.d.ts.map +1 -0
- package/dist/sdk/test.js +92 -0
- package/dist/sdk/test.js.map +1 -0
- package/dist/sdk/types.d.ts +75 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +2 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/sdk/usage.d.ts +10 -0
- package/dist/sdk/usage.d.ts.map +1 -0
- package/dist/sdk/usage.js +13 -0
- package/dist/sdk/usage.js.map +1 -0
- package/dist/sdk/viewer-results.d.ts +43 -0
- package/dist/sdk/viewer-results.d.ts.map +1 -0
- package/dist/sdk/viewer-results.js +126 -0
- package/dist/sdk/viewer-results.js.map +1 -0
- package/dist/sdk/viewer.d.ts +11 -0
- package/dist/sdk/viewer.d.ts.map +1 -0
- package/dist/sdk/viewer.js +160 -0
- package/dist/sdk/viewer.js.map +1 -0
- package/dist/sdk/workspace.d.ts +33 -0
- package/dist/sdk/workspace.d.ts.map +1 -0
- package/dist/sdk/workspace.js +100 -0
- package/dist/sdk/workspace.js.map +1 -0
- package/dist/types.d.ts +4 -40
- package/dist/types.d.ts.map +1 -1
- package/dist/viewer/catalog.d.ts +2 -8
- package/dist/viewer/catalog.d.ts.map +1 -1
- package/dist/viewer/catalog.js +23 -128
- package/dist/viewer/catalog.js.map +1 -1
- package/dist/viewer/client.d.ts.map +1 -1
- package/dist/viewer/client.js +12 -12
- package/dist/viewer/client.js.map +1 -1
- package/dist/viewer/run-controller.d.ts +4 -2
- package/dist/viewer/run-controller.d.ts.map +1 -1
- package/dist/viewer/run-controller.js +297 -248
- package/dist/viewer/run-controller.js.map +1 -1
- package/dist/viewer/server.d.ts +4 -3
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +149 -112
- package/dist/viewer/server.js.map +1 -1
- package/dist/viewer/styles.d.ts +2 -0
- package/dist/viewer/styles.d.ts.map +1 -0
- package/dist/viewer/styles.js +444 -0
- package/dist/viewer/styles.js.map +1 -0
- package/dist/worker-pool.d.ts +5 -1
- package/dist/worker-pool.d.ts.map +1 -1
- package/dist/worker-pool.js +1 -1
- package/dist/worker-pool.js.map +1 -1
- package/package.json +7 -7
- package/dist/check.d.ts +0 -38
- package/dist/check.d.ts.map +0 -1
- package/dist/check.js +0 -169
- package/dist/check.js.map +0 -1
- package/dist/command-allowlist.d.ts +0 -9
- package/dist/command-allowlist.d.ts.map +0 -1
- package/dist/command-allowlist.js +0 -29
- package/dist/command-allowlist.js.map +0 -1
- package/dist/debug-bundle.d.ts +0 -81
- package/dist/debug-bundle.d.ts.map +0 -1
- package/dist/debug-bundle.js +0 -392
- package/dist/debug-bundle.js.map +0 -1
- package/dist/discover-suites.d.ts +0 -2
- package/dist/discover-suites.d.ts.map +0 -1
- package/dist/discover-suites.js +0 -19
- package/dist/discover-suites.js.map +0 -1
- package/dist/doctor.d.ts +0 -24
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js +0 -272
- package/dist/doctor.js.map +0 -1
- package/dist/expect.d.ts +0 -59
- package/dist/expect.d.ts.map +0 -1
- package/dist/expect.js +0 -518
- package/dist/expect.js.map +0 -1
- package/dist/host-log.d.ts +0 -17
- package/dist/host-log.d.ts.map +0 -1
- package/dist/host-log.js +0 -154
- package/dist/host-log.js.map +0 -1
- package/dist/hosts.d.ts +0 -22
- package/dist/hosts.d.ts.map +0 -1
- package/dist/hosts.js +0 -84
- package/dist/hosts.js.map +0 -1
- package/dist/html-report.d.ts +0 -18
- package/dist/html-report.d.ts.map +0 -1
- package/dist/html-report.js +0 -1276
- package/dist/html-report.js.map +0 -1
- package/dist/live-isolation.d.ts +0 -82
- package/dist/live-isolation.d.ts.map +0 -1
- package/dist/live-isolation.js +0 -399
- package/dist/live-isolation.js.map +0 -1
- package/dist/live-timeout.d.ts +0 -11
- package/dist/live-timeout.d.ts.map +0 -1
- package/dist/live-timeout.js +0 -29
- package/dist/live-timeout.js.map +0 -1
- package/dist/load-adapters.d.ts +0 -13
- package/dist/load-adapters.d.ts.map +0 -1
- package/dist/load-adapters.js +0 -76
- package/dist/load-adapters.js.map +0 -1
- package/dist/load-suite.d.ts +0 -22
- package/dist/load-suite.d.ts.map +0 -1
- package/dist/load-suite.js +0 -154
- package/dist/load-suite.js.map +0 -1
- package/dist/mcp-config.d.ts +0 -13
- package/dist/mcp-config.d.ts.map +0 -1
- package/dist/mcp-config.js +0 -121
- package/dist/mcp-config.js.map +0 -1
- package/dist/preflight.d.ts +0 -3
- package/dist/preflight.d.ts.map +0 -1
- package/dist/preflight.js +0 -17
- package/dist/preflight.js.map +0 -1
- package/dist/progress.d.ts +0 -24
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js +0 -111
- package/dist/progress.js.map +0 -1
- package/dist/record-trace.d.ts +0 -64
- package/dist/record-trace.d.ts.map +0 -1
- package/dist/record-trace.js +0 -124
- package/dist/record-trace.js.map +0 -1
- package/dist/report-preview-server.d.ts +0 -2
- package/dist/report-preview-server.d.ts.map +0 -1
- package/dist/report-preview-server.js +0 -24
- package/dist/report-preview-server.js.map +0 -1
- package/dist/report-preview.d.ts +0 -35
- package/dist/report-preview.d.ts.map +0 -1
- package/dist/report-preview.js +0 -205
- package/dist/report-preview.js.map +0 -1
- package/dist/run-suite.d.ts +0 -139
- package/dist/run-suite.d.ts.map +0 -1
- package/dist/run-suite.js +0 -1688
- package/dist/run-suite.js.map +0 -1
- package/dist/scenario-finalizer.d.ts +0 -27
- package/dist/scenario-finalizer.d.ts.map +0 -1
- package/dist/scenario-finalizer.js +0 -39
- package/dist/scenario-finalizer.js.map +0 -1
- package/dist/scenario-retry.d.ts +0 -15
- package/dist/scenario-retry.d.ts.map +0 -1
- package/dist/scenario-retry.js +0 -52
- package/dist/scenario-retry.js.map +0 -1
- package/dist/scenario-seed.d.ts +0 -13
- package/dist/scenario-seed.d.ts.map +0 -1
- package/dist/scenario-seed.js +0 -72
- package/dist/scenario-seed.js.map +0 -1
- package/dist/suite-summary.d.ts +0 -16
- package/dist/suite-summary.d.ts.map +0 -1
- package/dist/suite-summary.js +0 -218
- package/dist/suite-summary.js.map +0 -1
- package/dist/theme.d.ts +0 -96
- package/dist/theme.d.ts.map +0 -1
- package/dist/theme.js +0 -446
- package/dist/theme.js.map +0 -1
- package/dist/validate-seeds.d.ts +0 -20
- package/dist/validate-seeds.d.ts.map +0 -1
- package/dist/validate-seeds.js +0 -72
- package/dist/validate-seeds.js.map +0 -1
- package/dist/validate-suite.d.ts +0 -24
- package/dist/validate-suite.d.ts.map +0 -1
- package/dist/validate-suite.js +0 -542
- package/dist/validate-suite.js.map +0 -1
- package/dist/viewer/cli.d.ts +0 -17
- package/dist/viewer/cli.d.ts.map +0 -1
- package/dist/viewer/cli.js +0 -38
- package/dist/viewer/cli.js.map +0 -1
- package/dist/viewer/compare-metrics.d.ts +0 -30
- package/dist/viewer/compare-metrics.d.ts.map +0 -1
- package/dist/viewer/compare-metrics.js +0 -101
- package/dist/viewer/compare-metrics.js.map +0 -1
- package/dist/viewer/context-files.d.ts +0 -8
- package/dist/viewer/context-files.d.ts.map +0 -1
- package/dist/viewer/context-files.js +0 -57
- package/dist/viewer/context-files.js.map +0 -1
- package/dist/viewer/emit.d.ts +0 -7
- package/dist/viewer/emit.d.ts.map +0 -1
- package/dist/viewer/emit.js +0 -25
- package/dist/viewer/emit.js.map +0 -1
- package/dist/viewer/live-runner.d.ts +0 -27
- package/dist/viewer/live-runner.d.ts.map +0 -1
- package/dist/viewer/live-runner.js +0 -166
- package/dist/viewer/live-runner.js.map +0 -1
- package/dist/viewer/session-server.d.ts +0 -2
- package/dist/viewer/session-server.d.ts.map +0 -1
- package/dist/viewer/session-server.js +0 -71
- package/dist/viewer/session-server.js.map +0 -1
- package/dist/warnings.d.ts +0 -3
- package/dist/warnings.d.ts.map +0 -1
- package/dist/warnings.js +0 -13
- package/dist/warnings.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-adapters.d.ts","sourceRoot":"","sources":["../src/load-adapters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,2BAA2B,CAAC;AASlF,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAE/F;AA6CD,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQvF;AAED,uGAAuG;AACvG,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhB"}
|
package/dist/load-adapters.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { access } from "node:fs/promises";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { pathToFileURL } from "node:url";
|
|
4
|
-
import { registerHostAdapter } from "@post-print/agent-harness";
|
|
5
|
-
const CONFIG_NAMES = [
|
|
6
|
-
"agent-test.config.mjs",
|
|
7
|
-
"agent-test.config.js",
|
|
8
|
-
"agent-test.config.cjs",
|
|
9
|
-
"agent-test.config.ts",
|
|
10
|
-
];
|
|
11
|
-
export function defineConfig(config) {
|
|
12
|
-
return config;
|
|
13
|
-
}
|
|
14
|
-
async function pathExists(path) {
|
|
15
|
-
try {
|
|
16
|
-
await access(path);
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function adaptersFromModule(mod) {
|
|
24
|
-
if (!mod || typeof mod !== "object") {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
const record = mod;
|
|
28
|
-
const bag = record.default && typeof record.default === "object" ? record.default : record;
|
|
29
|
-
const list = bag.adapters;
|
|
30
|
-
if (!Array.isArray(list)) {
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
return list.filter((item) => {
|
|
34
|
-
return (typeof item === "object" &&
|
|
35
|
-
item !== null &&
|
|
36
|
-
typeof item.host === "string" &&
|
|
37
|
-
typeof item.run === "function");
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
async function importAdapterModule(path) {
|
|
41
|
-
let mod;
|
|
42
|
-
try {
|
|
43
|
-
mod = await import(pathToFileURL(path).href);
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
-
throw new Error(`Failed to load host adapter module ${path}: ${message}`);
|
|
48
|
-
}
|
|
49
|
-
for (const adapter of adaptersFromModule(mod)) {
|
|
50
|
-
registerHostAdapter(adapter);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
export async function resolveAdapterConfigPath(cwd) {
|
|
54
|
-
for (const name of CONFIG_NAMES) {
|
|
55
|
-
const candidate = resolve(cwd, name);
|
|
56
|
-
if (await pathExists(candidate)) {
|
|
57
|
-
return candidate;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
/** Load `--adapter` modules and `agent-test.config.*` from cwd. Side-effect registration is enough. */
|
|
63
|
-
export async function loadHostAdapters(options) {
|
|
64
|
-
for (const spec of options.adapterModules ?? []) {
|
|
65
|
-
const path = resolve(options.cwd, spec);
|
|
66
|
-
if (!(await pathExists(path))) {
|
|
67
|
-
throw new Error(`Adapter module not found: ${path}`);
|
|
68
|
-
}
|
|
69
|
-
await importAdapterModule(path);
|
|
70
|
-
}
|
|
71
|
-
const configPath = await resolveAdapterConfigPath(options.cwd);
|
|
72
|
-
if (configPath) {
|
|
73
|
-
await importAdapterModule(configPath);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=load-adapters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-adapters.js","sourceRoot":"","sources":["../src/load-adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/load-suite.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { AgentSuiteFile, ScenarioRubric } from "./types.js";
|
|
2
|
-
/** External rubrics keyed by scenario name (harness-only; not required on agent-visible paths). */
|
|
3
|
-
export interface SuiteRubricsFile {
|
|
4
|
-
scenarios: Record<string, ScenarioRubric>;
|
|
5
|
-
}
|
|
6
|
-
export interface LoadSuiteOptions {
|
|
7
|
-
/** Explicit rubrics file (wins over discovery). */
|
|
8
|
-
rubricsPath?: string;
|
|
9
|
-
/**
|
|
10
|
-
* Prefer `<rubricsDir>/<suiteName>/rubrics.json` when present.
|
|
11
|
-
* Lets answer keys live outside the suites tree / open workspace.
|
|
12
|
-
*/
|
|
13
|
-
rubricsDir?: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function suiteNameFromSuitePath(suitePath: string): string;
|
|
16
|
-
/** Resolve which rubrics file to load, if any. */
|
|
17
|
-
export declare function resolveRubricsPath(suitePath: string, options?: LoadSuiteOptions): Promise<string | undefined>;
|
|
18
|
-
export declare function parseRubricsFile(parsed: unknown, rubricsPath: string): SuiteRubricsFile;
|
|
19
|
-
/** Apply external rubrics by scenario name (external entry replaces inline rubric). */
|
|
20
|
-
export declare function applyExternalRubrics(suite: AgentSuiteFile, rubrics: SuiteRubricsFile, rubricsPath: string): AgentSuiteFile;
|
|
21
|
-
export declare function loadSuiteFile(path: string, options?: LoadSuiteOptions): Promise<AgentSuiteFile>;
|
|
22
|
-
//# sourceMappingURL=load-suite.d.ts.map
|
package/dist/load-suite.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-suite.d.ts","sourceRoot":"","sources":["../src/load-suite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF,mGAAmG;AACnG,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAChC,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,kDAAkD;AAClD,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqB7B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAwBvF;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,MAAM,GACjB,cAAc,CAkBhB;AAED,wBAAsB,aAAa,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,cAAc,CAAC,CAmCzB"}
|
package/dist/load-suite.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { access, readFile } from "node:fs/promises";
|
|
2
|
-
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
-
import { isMcpServersMap } from "./mcp-config.js";
|
|
4
|
-
const SIBLING_RUBRIC_NAMES = ["rubrics.json", "scenarios.rubric.json"];
|
|
5
|
-
export function suiteNameFromSuitePath(suitePath) {
|
|
6
|
-
return basename(dirname(suitePath));
|
|
7
|
-
}
|
|
8
|
-
/** Resolve which rubrics file to load, if any. */
|
|
9
|
-
export async function resolveRubricsPath(suitePath, options) {
|
|
10
|
-
if (options?.rubricsPath) {
|
|
11
|
-
return resolve(options.rubricsPath);
|
|
12
|
-
}
|
|
13
|
-
const suiteName = suiteNameFromSuitePath(suitePath);
|
|
14
|
-
if (options?.rubricsDir) {
|
|
15
|
-
const fromDir = resolve(options.rubricsDir, suiteName, "rubrics.json");
|
|
16
|
-
if (await pathExists(fromDir)) {
|
|
17
|
-
return fromDir;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const suiteDir = dirname(suitePath);
|
|
21
|
-
for (const name of SIBLING_RUBRIC_NAMES) {
|
|
22
|
-
const candidate = join(suiteDir, name);
|
|
23
|
-
if (await pathExists(candidate)) {
|
|
24
|
-
return candidate;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
export function parseRubricsFile(parsed, rubricsPath) {
|
|
30
|
-
if (typeof parsed !== "object" || parsed === null) {
|
|
31
|
-
throw new Error(`Invalid rubrics file: ${rubricsPath}`);
|
|
32
|
-
}
|
|
33
|
-
const file = parsed;
|
|
34
|
-
if (typeof file.scenarios !== "object" ||
|
|
35
|
-
file.scenarios === null ||
|
|
36
|
-
Array.isArray(file.scenarios)) {
|
|
37
|
-
throw new Error(`Invalid rubrics file ${rubricsPath}: expected { "scenarios": { "<name>": { … } } }`);
|
|
38
|
-
}
|
|
39
|
-
const scenarios = {};
|
|
40
|
-
for (const [name, rubric] of Object.entries(file.scenarios)) {
|
|
41
|
-
if (typeof rubric !== "object" || rubric === null || Array.isArray(rubric)) {
|
|
42
|
-
throw new Error(`Invalid rubrics file ${rubricsPath}: scenario "${name}" rubric must be an object`);
|
|
43
|
-
}
|
|
44
|
-
scenarios[name] = rubric;
|
|
45
|
-
}
|
|
46
|
-
return { scenarios };
|
|
47
|
-
}
|
|
48
|
-
/** Apply external rubrics by scenario name (external entry replaces inline rubric). */
|
|
49
|
-
export function applyExternalRubrics(suite, rubrics, rubricsPath) {
|
|
50
|
-
const known = new Set(suite.scenarios.map((s) => s.name));
|
|
51
|
-
const unknown = Object.keys(rubrics.scenarios).filter((name) => !known.has(name));
|
|
52
|
-
if (unknown.length > 0) {
|
|
53
|
-
throw new Error(`Rubrics file ${rubricsPath} references unknown scenario(s): ${unknown.join(", ")}`);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
...suite,
|
|
57
|
-
scenarios: suite.scenarios.map((scenario) => {
|
|
58
|
-
const external = rubrics.scenarios[scenario.name];
|
|
59
|
-
if (external === undefined) {
|
|
60
|
-
return { ...scenario, rubric: scenario.rubric ?? {} };
|
|
61
|
-
}
|
|
62
|
-
return { ...scenario, rubric: external };
|
|
63
|
-
}),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
export async function loadSuiteFile(path, options) {
|
|
67
|
-
const raw = await readFile(path, "utf8");
|
|
68
|
-
const parsed = JSON.parse(raw);
|
|
69
|
-
if (!isSuiteFileShape(parsed)) {
|
|
70
|
-
throw new Error(`Invalid suite file: ${path}`);
|
|
71
|
-
}
|
|
72
|
-
assertNoDeprecatedReplayConfig(parsed, path);
|
|
73
|
-
const normalized = {
|
|
74
|
-
name: parsed.name,
|
|
75
|
-
description: parsed.description,
|
|
76
|
-
hosts: parsed.hosts,
|
|
77
|
-
defaults: parsed.defaults,
|
|
78
|
-
scenarios: parsed.scenarios.map((scenario) => ({
|
|
79
|
-
...scenario,
|
|
80
|
-
rubric: scenario.rubric ?? {},
|
|
81
|
-
})),
|
|
82
|
-
};
|
|
83
|
-
const rubricsPath = await resolveRubricsPath(path, options);
|
|
84
|
-
if (!rubricsPath) {
|
|
85
|
-
return normalized;
|
|
86
|
-
}
|
|
87
|
-
let rubricsRaw;
|
|
88
|
-
try {
|
|
89
|
-
rubricsRaw = await readFile(rubricsPath, "utf8");
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
if (options?.rubricsPath) {
|
|
93
|
-
throw new Error(`Rubrics file not found: ${rubricsPath}`);
|
|
94
|
-
}
|
|
95
|
-
return normalized;
|
|
96
|
-
}
|
|
97
|
-
const rubrics = parseRubricsFile(JSON.parse(rubricsRaw), rubricsPath);
|
|
98
|
-
return applyExternalRubrics(normalized, rubrics, rubricsPath);
|
|
99
|
-
}
|
|
100
|
-
function assertNoDeprecatedReplayConfig(suite, path) {
|
|
101
|
-
if (suite.defaults?.host === "replay") {
|
|
102
|
-
throw new Error(`Invalid suite file ${path}: replay-based testing is deprecated and no longer supported; use Cursor, Claude, or OpenAI.`);
|
|
103
|
-
}
|
|
104
|
-
for (const scenario of suite.scenarios) {
|
|
105
|
-
const legacy = scenario;
|
|
106
|
-
if (legacy.host === "replay" || "replayTrace" in legacy) {
|
|
107
|
-
throw new Error(`Invalid suite file ${path}: scenario "${scenario.name}" uses replay-based testing, which is deprecated and no longer supported; use Cursor, Claude, or OpenAI.`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
async function pathExists(path) {
|
|
112
|
-
try {
|
|
113
|
-
await access(path);
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/** Structural check for scenarios.json rows (rubric may be omitted before merge/normalize). */
|
|
121
|
-
function isScenarioRow(value) {
|
|
122
|
-
if (typeof value !== "object" || value === null) {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
const scenario = value;
|
|
126
|
-
if (typeof scenario.name !== "string" || typeof scenario.prompt !== "string") {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
if (scenario.rubric !== undefined &&
|
|
130
|
-
(typeof scenario.rubric !== "object" || scenario.rubric === null)) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
if (scenario.mcpServers !== undefined && !isMcpServersMap(scenario.mcpServers)) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
function isSuiteFileShape(value) {
|
|
139
|
-
if (typeof value !== "object" || value === null) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
const suite = value;
|
|
143
|
-
if (typeof suite.name !== "string" || !Array.isArray(suite.scenarios)) {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
if (suite.hosts !== undefined && !Array.isArray(suite.hosts)) {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
if (suite.defaults?.mcpServers !== undefined && !isMcpServersMap(suite.defaults.mcpServers)) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
return suite.scenarios.every(isScenarioRow);
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=load-suite.js.map
|
package/dist/load-suite.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-suite.js","sourceRoot":"","sources":["../src/load-suite.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-config.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { McpServerConfig } from "@post-print/agent-harness";
|
|
2
|
-
/** Validate a suite/scenario mcpServers map (shape only; env expansion happens at run time). */
|
|
3
|
-
export declare function isMcpServersMap(value: unknown): value is Record<string, McpServerConfig>;
|
|
4
|
-
export declare function isMcpServerConfig(value: unknown): value is McpServerConfig;
|
|
5
|
-
/** Repo-relative stdio script args to copy into a sealed workspace. */
|
|
6
|
-
export declare function mcpStdioScriptPaths(servers: Record<string, McpServerConfig> | undefined): string[];
|
|
7
|
-
/**
|
|
8
|
-
* Pin stdio MCP cwd to the caller repo so script args like
|
|
9
|
-
* `packages/test/fixtures/mcp-echo/server.mjs` still resolve when the agent
|
|
10
|
-
* cwd is a fixture workspace.
|
|
11
|
-
*/
|
|
12
|
-
export declare function bindMcpServersToCaller(servers: Record<string, McpServerConfig> | undefined, callerCwd: string): Record<string, McpServerConfig> | undefined;
|
|
13
|
-
//# sourceMappingURL=mcp-config.d.ts.map
|
package/dist/mcp-config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAaxF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAiC1E;AA8BD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,GAClD,MAAM,EAAE,CAmBV;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EACpD,SAAS,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAmB7C"}
|
package/dist/mcp-config.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { isAbsolute, join } from "node:path";
|
|
2
|
-
/** Validate a suite/scenario mcpServers map (shape only; env expansion happens at run time). */
|
|
3
|
-
export function isMcpServersMap(value) {
|
|
4
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
for (const [name, config] of Object.entries(value)) {
|
|
8
|
-
if (typeof name !== "string" || name.length === 0) {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
if (!isMcpServerConfig(config)) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
export function isMcpServerConfig(value) {
|
|
18
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
const config = value;
|
|
22
|
-
if (typeof config.command === "string" && config.command.length > 0) {
|
|
23
|
-
if (config.type !== undefined && config.type !== "stdio") {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
if (config.args !== undefined && !isStringArray(config.args)) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
if (config.env !== undefined && !isStringRecord(config.env)) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
if (config.cwd !== undefined && typeof config.cwd !== "string") {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
if (typeof config.url === "string" && config.url.length > 0) {
|
|
38
|
-
if (config.type !== undefined && config.type !== "http" && config.type !== "sse") {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
if (config.headers !== undefined && !isStringRecord(config.headers)) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
if (config.auth !== undefined && !isMcpAuth(config.auth)) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
function isStringArray(value) {
|
|
52
|
-
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
53
|
-
}
|
|
54
|
-
function isStringRecord(value) {
|
|
55
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
return Object.values(value).every((item) => typeof item === "string");
|
|
59
|
-
}
|
|
60
|
-
function isMcpAuth(value) {
|
|
61
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
const auth = value;
|
|
65
|
-
if (typeof auth.CLIENT_ID !== "string") {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
if (auth.CLIENT_SECRET !== undefined && typeof auth.CLIENT_SECRET !== "string") {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
if (auth.scopes !== undefined && !isStringArray(auth.scopes)) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
/** Repo-relative stdio script args to copy into a sealed workspace. */
|
|
77
|
-
export function mcpStdioScriptPaths(servers) {
|
|
78
|
-
if (!servers) {
|
|
79
|
-
return [];
|
|
80
|
-
}
|
|
81
|
-
const paths = [];
|
|
82
|
-
for (const config of Object.values(servers)) {
|
|
83
|
-
if (!("command" in config) || !config.args) {
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
for (const arg of config.args) {
|
|
87
|
-
if (arg.startsWith("-")) {
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (/\.(mjs|cjs|js)$/.test(arg) || arg.includes("/")) {
|
|
91
|
-
paths.push(arg);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return paths;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Pin stdio MCP cwd to the caller repo so script args like
|
|
99
|
-
* `packages/test/fixtures/mcp-echo/server.mjs` still resolve when the agent
|
|
100
|
-
* cwd is a fixture workspace.
|
|
101
|
-
*/
|
|
102
|
-
export function bindMcpServersToCaller(servers, callerCwd) {
|
|
103
|
-
if (!servers) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
const bound = {};
|
|
107
|
-
for (const [name, config] of Object.entries(servers)) {
|
|
108
|
-
if (!("command" in config) || !config.command) {
|
|
109
|
-
bound[name] = config;
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const serverCwd = config.cwd === undefined || config.cwd.trim().length === 0
|
|
113
|
-
? callerCwd
|
|
114
|
-
: isAbsolute(config.cwd)
|
|
115
|
-
? config.cwd
|
|
116
|
-
: join(callerCwd, config.cwd);
|
|
117
|
-
bound[name] = { ...config, cwd: serverCwd };
|
|
118
|
-
}
|
|
119
|
-
return bound;
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=mcp-config.js.map
|
package/dist/mcp-config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
|
package/dist/preflight.d.ts
DELETED
package/dist/preflight.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,wBAAsB,0BAA0B,CAC/C,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/preflight.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { access } from "node:fs/promises";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
/** Fail fast when a direct agent run cannot find suite definitions. */
|
|
4
|
-
export async function assertDirectAgentPreflight(repoRoot, suitesDir = "agent-suites") {
|
|
5
|
-
const suitesRoot = resolve(repoRoot, suitesDir);
|
|
6
|
-
try {
|
|
7
|
-
await access(suitesRoot);
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
throw new Error([
|
|
11
|
-
`Direct agent testing requires a suites directory (missing ${suitesRoot}).`,
|
|
12
|
-
"Pass --suites-dir <path> or create agent-suites/<suite>/scenarios.json in the repo.",
|
|
13
|
-
"See @post-print/agent-test README § Direct agent runs.",
|
|
14
|
-
].join("\n"));
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=preflight.js.map
|
package/dist/preflight.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC/C,QAAgB,EAChB,SAAS,GAAG,cAAc;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CACd;YACC,6DAA6D,UAAU,IAAI;YAC3E,qFAAqF;YACrF,wDAAwD;SACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;IACH,CAAC;AACF,CAAC"}
|
package/dist/progress.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/** Tenth of a second. Faster ticks flood stdout and wrap the clock line. */
|
|
2
|
-
export declare const TTY_HEARTBEAT_MS = 100;
|
|
3
|
-
export declare function formatDuration(ms: number): string;
|
|
4
|
-
export declare function resolveHeartbeatInterval(isTty: boolean, overrideMs?: number): number;
|
|
5
|
-
export declare function logProgress(message: string): void;
|
|
6
|
-
/** Emit a tree phase line (├─ by default; use endPhase for └─). */
|
|
7
|
-
export declare function logPhase(message: string, options?: {
|
|
8
|
-
last?: boolean;
|
|
9
|
-
}): void;
|
|
10
|
-
/** Nested heartbeat / continuation under the current phase. */
|
|
11
|
-
export declare function logPhaseNested(message: string): void;
|
|
12
|
-
/** Durable live line (tool call) under the agent clock. */
|
|
13
|
-
export declare function logLive(message: string): void;
|
|
14
|
-
/** Print a verdict block (PASS/FAIL + reasons). */
|
|
15
|
-
export declare function logVerdict(lines: string[]): void;
|
|
16
|
-
export declare function refreshHeartbeat(): void;
|
|
17
|
-
/** Log every `intervalMs` while `promise` is pending (live agent runs). */
|
|
18
|
-
export declare function withHeartbeat<T>(promise: Promise<T>, options: {
|
|
19
|
-
label?: string;
|
|
20
|
-
intervalMs?: number;
|
|
21
|
-
started?: number;
|
|
22
|
-
preview?: () => string | undefined;
|
|
23
|
-
}): Promise<T>;
|
|
24
|
-
//# sourceMappingURL=progress.d.ts.map
|
package/dist/progress.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAKA,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAMpC,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAKpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjD;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAO5E;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM7C;AAED,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAQhD;AAqBD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,2EAA2E;AAC3E,wBAAsB,aAAa,CAAC,CAAC,EACpC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACnC,GACC,OAAO,CAAC,CAAC,CAAC,CAgCZ"}
|
package/dist/progress.js
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { logger } from "@post-print/agent-harness";
|
|
2
|
-
import { clipToColumns, formatClock, formatDurationLabel, theme } from "./theme.js";
|
|
3
|
-
const DEFAULT_HEARTBEAT_MS = 60_000;
|
|
4
|
-
/** Tenth of a second. Faster ticks flood stdout and wrap the clock line. */
|
|
5
|
-
export const TTY_HEARTBEAT_MS = 100;
|
|
6
|
-
function enabled() {
|
|
7
|
-
return process.env.AGENT_TEST_QUIET !== "1" && !process.env.VITEST;
|
|
8
|
-
}
|
|
9
|
-
export function formatDuration(ms) {
|
|
10
|
-
return formatDurationLabel(ms);
|
|
11
|
-
}
|
|
12
|
-
export function resolveHeartbeatInterval(isTty, overrideMs) {
|
|
13
|
-
if (overrideMs !== undefined) {
|
|
14
|
-
return overrideMs;
|
|
15
|
-
}
|
|
16
|
-
return isTty ? TTY_HEARTBEAT_MS : DEFAULT_HEARTBEAT_MS;
|
|
17
|
-
}
|
|
18
|
-
export function logProgress(message) {
|
|
19
|
-
if (!enabled()) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
clearHeartbeatLine();
|
|
23
|
-
logger.info(message);
|
|
24
|
-
}
|
|
25
|
-
/** Emit a tree phase line (├─ by default; use endPhase for └─). */
|
|
26
|
-
export function logPhase(message, options) {
|
|
27
|
-
if (!enabled()) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
clearHeartbeatLine();
|
|
31
|
-
const prefix = options?.last ? "└─" : "├─";
|
|
32
|
-
console.log(theme.phaseTree(prefix, message));
|
|
33
|
-
}
|
|
34
|
-
/** Nested heartbeat / continuation under the current phase. */
|
|
35
|
-
export function logPhaseNested(message) {
|
|
36
|
-
if (!enabled()) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
clearHeartbeatLine();
|
|
40
|
-
console.log(theme.phaseTree("│ ", message));
|
|
41
|
-
}
|
|
42
|
-
/** Durable live line (tool call) under the agent clock. */
|
|
43
|
-
export function logLive(message) {
|
|
44
|
-
if (!enabled()) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
clearHeartbeatLine();
|
|
48
|
-
console.log(theme.phaseTree("│ ", message));
|
|
49
|
-
}
|
|
50
|
-
/** Print a verdict block (PASS/FAIL + reasons). */
|
|
51
|
-
export function logVerdict(lines) {
|
|
52
|
-
if (!enabled()) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
clearHeartbeatLine();
|
|
56
|
-
for (const line of lines) {
|
|
57
|
-
console.log(line);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
let heartbeatActive = false;
|
|
61
|
-
let heartbeatPaint;
|
|
62
|
-
function clearHeartbeatLine() {
|
|
63
|
-
if (!heartbeatActive || !process.stdout.isTTY) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
process.stdout.write("\r\x1b[K");
|
|
67
|
-
heartbeatActive = false;
|
|
68
|
-
}
|
|
69
|
-
function writeHeartbeatOverwrite(message) {
|
|
70
|
-
const columns = process.stdout.columns && process.stdout.columns > 0 ? process.stdout.columns : 80;
|
|
71
|
-
const line = clipToColumns(theme.phaseTree("│ ", message), columns);
|
|
72
|
-
process.stdout.write(`\x1b[2K\r${line}`);
|
|
73
|
-
heartbeatActive = true;
|
|
74
|
-
}
|
|
75
|
-
export function refreshHeartbeat() {
|
|
76
|
-
heartbeatPaint?.();
|
|
77
|
-
}
|
|
78
|
-
/** Log every `intervalMs` while `promise` is pending (live agent runs). */
|
|
79
|
-
export async function withHeartbeat(promise, options) {
|
|
80
|
-
if (!enabled()) {
|
|
81
|
-
return promise;
|
|
82
|
-
}
|
|
83
|
-
const started = options.started ?? performance.now();
|
|
84
|
-
const useOverwrite = Boolean(process.stdout.isTTY);
|
|
85
|
-
const intervalMs = resolveHeartbeatInterval(useOverwrite, options.intervalMs);
|
|
86
|
-
const label = options.label ?? "agent";
|
|
87
|
-
const paint = () => {
|
|
88
|
-
const elapsed = formatClock(performance.now() - started);
|
|
89
|
-
const preview = options.preview?.();
|
|
90
|
-
const line = theme.agentClock(elapsed, preview);
|
|
91
|
-
if (useOverwrite) {
|
|
92
|
-
writeHeartbeatOverwrite(line);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
logPhaseNested(theme.phase(label, theme.duration(elapsed)));
|
|
96
|
-
};
|
|
97
|
-
heartbeatPaint = paint;
|
|
98
|
-
paint();
|
|
99
|
-
const timer = setInterval(paint, intervalMs);
|
|
100
|
-
try {
|
|
101
|
-
return await promise;
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
clearInterval(timer);
|
|
105
|
-
if (heartbeatPaint === paint) {
|
|
106
|
-
heartbeatPaint = undefined;
|
|
107
|
-
}
|
|
108
|
-
clearHeartbeatLine();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=progress.js.map
|
package/dist/progress.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|