@attest-ai/vitest 0.5.0 → 0.9.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/dist/fixtures.d.ts.map +1 -1
- package/dist/fixtures.js +29 -9
- package/dist/fixtures.js.map +1 -1
- package/dist/plugin.d.ts +3 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +10 -3
- package/dist/plugin.js.map +1 -1
- package/dist/reporter.d.ts +8 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +19 -10
- package/dist/reporter.js.map +1 -1
- package/package.json +5 -5
package/dist/fixtures.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAKhB,WAAW,EACX,YAAY,EAKb,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAS1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,IAAI,MAAM,IAAI,YAAY,CAKzB;IAEK,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,WAAW,CAAC;CA+CxB;AAED,wBAAgB,SAAS,IAAI,mBAAmB,CAiB/C;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,CAGtB"}
|
package/dist/fixtures.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { AgentResult, AttestClient, EngineManager, STATUS_SOFT_FAIL, } from "@attest-ai/core";
|
|
1
|
+
import { AgentResult, AttestClient, EngineManager, isSimulationMode, simulationEvaluateBatch, STATUS_SOFT_FAIL, } from "@attest-ai/core";
|
|
2
2
|
export class AttestEngineFixture {
|
|
3
3
|
manager;
|
|
4
4
|
_client;
|
|
5
5
|
constructor(options) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
if (!isSimulationMode()) {
|
|
7
|
+
this.manager = new EngineManager({
|
|
8
|
+
enginePath: options?.enginePath,
|
|
9
|
+
logLevel: options?.logLevel ?? "warn",
|
|
10
|
+
});
|
|
11
|
+
}
|
|
10
12
|
}
|
|
11
13
|
async start() {
|
|
14
|
+
if (isSimulationMode())
|
|
15
|
+
return;
|
|
12
16
|
if (this.manager === undefined) {
|
|
13
17
|
throw new Error("AttestEngineFixture already stopped.");
|
|
14
18
|
}
|
|
@@ -23,19 +27,34 @@ export class AttestEngineFixture {
|
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
get client() {
|
|
26
|
-
if (this._client === undefined) {
|
|
30
|
+
if (this._client === undefined && !isSimulationMode()) {
|
|
27
31
|
throw new Error("Engine not started. Call start() first.");
|
|
28
32
|
}
|
|
29
33
|
return this._client;
|
|
30
34
|
}
|
|
31
35
|
async evaluate(chain, options) {
|
|
32
|
-
|
|
36
|
+
let result;
|
|
37
|
+
if (isSimulationMode()) {
|
|
38
|
+
result = simulationEvaluateBatch(chain.assertions);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
result = await this.client.evaluateBatch(chain.trace, chain.assertions);
|
|
42
|
+
}
|
|
33
43
|
globalThis.__attest_session_cost__ =
|
|
34
44
|
(globalThis.__attest_session_cost__ ?? 0) + (result.total_cost ?? 0);
|
|
35
45
|
const softFailCount = (result.results ?? []).filter((r) => r.status === STATUS_SOFT_FAIL).length;
|
|
36
46
|
globalThis.__attest_session_soft_failures__ =
|
|
37
47
|
(globalThis.__attest_session_soft_failures__ ?? 0) + softFailCount;
|
|
38
48
|
const agentResult = new AgentResult(chain.trace, result.results ?? [], result.total_cost ?? 0, result.total_duration_ms ?? 0);
|
|
49
|
+
// Track failing AgentResults so AttestCostReporter can render the
|
|
50
|
+
// hierarchical diagnostic block at the end of the run. Bound size
|
|
51
|
+
// because long suites with many failures should not balloon RAM.
|
|
52
|
+
if (!agentResult.passed) {
|
|
53
|
+
const list = (globalThis.__attest_session_failures__ ??= []);
|
|
54
|
+
if (list.length < 200) {
|
|
55
|
+
list.push(agentResult);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
39
58
|
if (options?.budget !== undefined &&
|
|
40
59
|
globalThis.__attest_session_cost__ > options.budget) {
|
|
41
60
|
throw new Error(`Attest budget exceeded: cost $${globalThis.__attest_session_cost__.toFixed(6)}` +
|
|
@@ -45,14 +64,15 @@ export class AttestEngineFixture {
|
|
|
45
64
|
}
|
|
46
65
|
}
|
|
47
66
|
export function useAttest() {
|
|
67
|
+
if (isSimulationMode() || globalThis.__attest_simulation_mode__) {
|
|
68
|
+
return new AttestEngineFixture();
|
|
69
|
+
}
|
|
48
70
|
const client = globalThis.__attest_client__;
|
|
49
71
|
const engine = globalThis.__attest_engine__;
|
|
50
72
|
if (client === undefined || engine === undefined) {
|
|
51
73
|
throw new Error("Attest engine not available. Configure attestGlobalSetup() in vitest.config.ts globalSetup.");
|
|
52
74
|
}
|
|
53
|
-
// Return a fixture wrapper around the existing global engine
|
|
54
75
|
const fixture = new AttestEngineFixture();
|
|
55
|
-
// Override the internal state to use the global instance
|
|
56
76
|
Object.defineProperty(fixture, "client", { get: () => client });
|
|
57
77
|
return fixture;
|
|
58
78
|
}
|
package/dist/fixtures.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EngineManager, AttestClient } from "@attest-ai/core";
|
|
1
|
+
import { EngineManager, AttestClient, type AgentResult } from "@attest-ai/core";
|
|
2
2
|
export interface AttestGlobalSetupOptions {
|
|
3
3
|
enginePath?: string;
|
|
4
4
|
logLevel?: string;
|
|
@@ -8,6 +8,8 @@ declare global {
|
|
|
8
8
|
var __attest_client__: AttestClient | undefined;
|
|
9
9
|
var __attest_session_cost__: number;
|
|
10
10
|
var __attest_session_soft_failures__: number;
|
|
11
|
+
var __attest_simulation_mode__: boolean;
|
|
12
|
+
var __attest_session_failures__: AgentResult[] | undefined;
|
|
11
13
|
}
|
|
12
14
|
export declare function attestGlobalSetup(options?: AttestGlobalSetupOptions): {
|
|
13
15
|
setup(): Promise<void>;
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EAEZ,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,iBAAiB,EAAE,aAAa,GAAG,SAAS,CAAC;IAEjD,IAAI,iBAAiB,EAAE,YAAY,GAAG,SAAS,CAAC;IAEhD,IAAI,uBAAuB,EAAE,MAAM,CAAC;IAEpC,IAAI,gCAAgC,EAAE,MAAM,CAAC;IAE7C,IAAI,0BAA0B,EAAE,OAAO,CAAC;IAExC,IAAI,2BAA2B,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,wBAAwB;;;EAqCnE"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { EngineManager, AttestClient } from "@attest-ai/core";
|
|
1
|
+
import { EngineManager, AttestClient, isSimulationMode, } from "@attest-ai/core";
|
|
2
2
|
let engineManager;
|
|
3
3
|
let attestClient;
|
|
4
4
|
export function attestGlobalSetup(options) {
|
|
5
5
|
return {
|
|
6
6
|
async setup() {
|
|
7
|
+
globalThis.__attest_session_cost__ = 0;
|
|
8
|
+
globalThis.__attest_session_soft_failures__ = 0;
|
|
9
|
+
globalThis.__attest_session_failures__ = [];
|
|
10
|
+
if (isSimulationMode()) {
|
|
11
|
+
globalThis.__attest_simulation_mode__ = true;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
7
14
|
engineManager = new EngineManager({
|
|
8
15
|
enginePath: options?.enginePath,
|
|
9
16
|
logLevel: options?.logLevel ?? "warn",
|
|
@@ -12,8 +19,6 @@ export function attestGlobalSetup(options) {
|
|
|
12
19
|
attestClient = new AttestClient(engineManager);
|
|
13
20
|
globalThis.__attest_engine__ = engineManager;
|
|
14
21
|
globalThis.__attest_client__ = attestClient;
|
|
15
|
-
globalThis.__attest_session_cost__ = 0;
|
|
16
|
-
globalThis.__attest_session_soft_failures__ = 0;
|
|
17
22
|
},
|
|
18
23
|
async teardown() {
|
|
19
24
|
if (engineManager) {
|
|
@@ -23,6 +28,8 @@ export function attestGlobalSetup(options) {
|
|
|
23
28
|
}
|
|
24
29
|
globalThis.__attest_engine__ = undefined;
|
|
25
30
|
globalThis.__attest_client__ = undefined;
|
|
31
|
+
globalThis.__attest_simulation_mode__ = false;
|
|
32
|
+
globalThis.__attest_session_failures__ = undefined;
|
|
26
33
|
},
|
|
27
34
|
};
|
|
28
35
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AAEzB,IAAI,aAAwC,CAAC;AAC7C,IAAI,YAAsC,CAAC;AAsB3C,MAAM,UAAU,iBAAiB,CAAC,OAAkC;IAClE,OAAO;QACL,KAAK,CAAC,KAAK;YACT,UAAU,CAAC,uBAAuB,GAAG,CAAC,CAAC;YACvC,UAAU,CAAC,gCAAgC,GAAG,CAAC,CAAC;YAChD,UAAU,CAAC,2BAA2B,GAAG,EAAE,CAAC;YAE5C,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBACvB,UAAU,CAAC,0BAA0B,GAAG,IAAI,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,aAAa,GAAG,IAAI,aAAa,CAAC;gBAChC,UAAU,EAAE,OAAO,EAAE,UAAU;gBAC/B,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM;aACtC,CAAC,CAAC;YAEH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;YAC5B,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YAE/C,UAAU,CAAC,iBAAiB,GAAG,aAAa,CAAC;YAC7C,UAAU,CAAC,iBAAiB,GAAG,YAAY,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,SAAS,CAAC;gBAC1B,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YAED,UAAU,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACzC,UAAU,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACzC,UAAU,CAAC,0BAA0B,GAAG,KAAK,CAAC;YAC9C,UAAU,CAAC,2BAA2B,GAAG,SAAS,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/reporter.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
interface ReporterContext {
|
|
2
2
|
printInfo: (message: string) => void;
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* Vitest reporter that prints the cost report and a hierarchical
|
|
6
|
+
* diagnostic block for every failed Attest evaluation in the run.
|
|
7
|
+
*
|
|
8
|
+
* Produces the same shape as the Python pytest plugin's
|
|
9
|
+
* "Attest Diagnostics" section so reviewers see consistent output
|
|
10
|
+
* across both ecosystems.
|
|
11
|
+
*/
|
|
4
12
|
export declare class AttestCostReporter {
|
|
5
13
|
onFinished(_files: unknown, _errors: unknown, context?: ReporterContext): void;
|
|
6
14
|
}
|
package/dist/reporter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;CAwC/E"}
|
package/dist/reporter.js
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
|
+
import { renderDiagnostics, renderSummary } from "@attest-ai/core";
|
|
2
|
+
/**
|
|
3
|
+
* Vitest reporter that prints the cost report and a hierarchical
|
|
4
|
+
* diagnostic block for every failed Attest evaluation in the run.
|
|
5
|
+
*
|
|
6
|
+
* Produces the same shape as the Python pytest plugin's
|
|
7
|
+
* "Attest Diagnostics" section so reviewers see consistent output
|
|
8
|
+
* across both ecosystems.
|
|
9
|
+
*/
|
|
1
10
|
export class AttestCostReporter {
|
|
2
11
|
onFinished(_files, _errors, context) {
|
|
3
12
|
const cost = globalThis.__attest_session_cost__ ?? 0;
|
|
4
13
|
const softFailures = globalThis.__attest_session_soft_failures__ ?? 0;
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
" Attest
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
const failures = globalThis.__attest_session_failures__ ?? [];
|
|
15
|
+
const lines = [];
|
|
16
|
+
if (failures.length > 0) {
|
|
17
|
+
lines.push("", "=".repeat(50), " Attest Diagnostics", "=".repeat(50));
|
|
18
|
+
for (const result of failures) {
|
|
19
|
+
lines.push(renderDiagnostics(result));
|
|
20
|
+
lines.push(` Summary: ${renderSummary(result)}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
lines.push("", "=".repeat(50), " Attest Cost Report", "=".repeat(50), ` Total LLM cost this session: $${cost.toFixed(6)} USD`, ` Soft failures recorded: ${softFailures}`, ` Failed runs: ${failures.length}`, "=".repeat(50), "");
|
|
15
24
|
const output = lines.join("\n");
|
|
16
25
|
if (context?.printInfo) {
|
|
17
26
|
context.printInfo(output);
|
package/dist/reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMnE;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAC7B,UAAU,CAAC,MAAe,EAAE,OAAgB,EAAE,OAAyB;QACrE,MAAM,IAAI,GAAG,UAAU,CAAC,uBAAuB,IAAI,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,UAAU,CAAC,gCAAgC,IAAI,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,2BAA2B,IAAI,EAAE,CAAC;QAE9D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EACd,sBAAsB,EACtB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CACf,CAAC;YACF,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,cAAc,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EACd,sBAAsB,EACtB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EACd,mCAAmC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EACxD,mCAAmC,YAAY,EAAE,EACjD,mCAAmC,QAAQ,CAAC,MAAM,EAAE,EACpD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EACd,EAAE,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@attest-ai/vitest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Attest vitest integration — global setup, fixtures, cost reporter, tier filtering",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"vitest": ">=2.0.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^25.
|
|
46
|
-
"typescript": "^5.
|
|
47
|
-
"vitest": "^4.
|
|
48
|
-
"@attest-ai/core": "0.
|
|
45
|
+
"@types/node": "^25.6.0",
|
|
46
|
+
"typescript": "^5.9.3",
|
|
47
|
+
"vitest": "^4.1.5",
|
|
48
|
+
"@attest-ai/core": "0.9.0"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "tsc",
|