@restormel/testing-core 0.1.1 → 0.1.5
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/ac-sequence.d.ts +64 -0
- package/dist/ac-sequence.d.ts.map +1 -0
- package/dist/ac-sequence.js +2 -0
- package/dist/ac-sequence.js.map +1 -0
- package/dist/acceptance.d.ts +27 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +81 -0
- package/dist/acceptance.js.map +1 -0
- package/dist/goal.d.ts +46 -0
- package/dist/goal.d.ts.map +1 -1
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +19 -1
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +14 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/suite.d.ts +11 -0
- package/dist/suite.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { JudgeRubric, SuccessCriteria } from "./success-criteria.js";
|
|
2
|
+
import type { Verdict } from "./verdict.js";
|
|
3
|
+
/** Built-in LLM agent settings for `execution_mode: ac_sequence`. */
|
|
4
|
+
export interface AcSequenceBuiltInAgent {
|
|
5
|
+
/**
|
|
6
|
+
* Keys logical ref (e.g. `ref:restormel-keys:llm/primary`) or env slot name (`llm_primary`).
|
|
7
|
+
* Resolved like `judge_rubric.model_ref`.
|
|
8
|
+
*/
|
|
9
|
+
modelRef?: string;
|
|
10
|
+
/** Max model rounds per acceptance criterion (default 12). */
|
|
11
|
+
maxRoundsPerCriterion?: number;
|
|
12
|
+
/** Extra system instructions (no secrets). */
|
|
13
|
+
instructions?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AcSequencePostCheckHttp {
|
|
16
|
+
/** Absolute URL or path relative to environment `base_url`. */
|
|
17
|
+
url: string;
|
|
18
|
+
/** Default GET. */
|
|
19
|
+
method?: string;
|
|
20
|
+
/** Pass if response status is in this list (default [200]). */
|
|
21
|
+
expectStatus?: number[];
|
|
22
|
+
/** Optional headers (do not put secrets in YAML). */
|
|
23
|
+
headers?: Record<string, string>;
|
|
24
|
+
/** Request body for non-GET methods. */
|
|
25
|
+
body?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Playwright `getByRole`-style check (less brittle than raw CSS). */
|
|
28
|
+
export interface AcSequencePostCheckDomRoleName {
|
|
29
|
+
role: string;
|
|
30
|
+
/** Optional accessible name (substring match). */
|
|
31
|
+
name?: string;
|
|
32
|
+
expectVisible?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface AcSequencePostCheck {
|
|
35
|
+
/** Must match a suite `acceptance_criteria[].id`. */
|
|
36
|
+
acId: string;
|
|
37
|
+
http?: AcSequencePostCheckHttp;
|
|
38
|
+
domRoleName?: AcSequencePostCheckDomRoleName;
|
|
39
|
+
/**
|
|
40
|
+
* Runs as a shell hook with AC env (`RESTORMEL_TESTING_AC_ID`, etc.).
|
|
41
|
+
* Product DB checks belong in your script — the runner does not open DB sockets from YAML.
|
|
42
|
+
*/
|
|
43
|
+
dbShell?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface AcSequenceConfig {
|
|
46
|
+
builtInAgent: AcSequenceBuiltInAgent;
|
|
47
|
+
/** Optional shell before each criterion’s agent loop (same cwd as other hooks). */
|
|
48
|
+
criterionExecutor?: string;
|
|
49
|
+
/** Deterministic gates after the agent (and optional judge), keyed by AC id. */
|
|
50
|
+
criterionSuccess?: Record<string, SuccessCriteria>;
|
|
51
|
+
/** Per-AC judge rubrics (structured JSON includes `ac_id`). */
|
|
52
|
+
criterionRubrics?: Record<string, JudgeRubric>;
|
|
53
|
+
postChecks?: AcSequencePostCheck[];
|
|
54
|
+
}
|
|
55
|
+
/** One row per suite acceptance criterion executed inside an `ac_sequence` goal. */
|
|
56
|
+
export interface AcSequenceStepResult {
|
|
57
|
+
criterionId: string;
|
|
58
|
+
verdict: Verdict;
|
|
59
|
+
reasonCode: string;
|
|
60
|
+
summary: string;
|
|
61
|
+
agentRoundsUsed: number;
|
|
62
|
+
evidenceRefs: string[];
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ac-sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-sequence.d.ts","sourceRoot":"","sources":["../src/ac-sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sEAAsE;AACtE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,sBAAsB,CAAC;IACrC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnD,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-sequence.js","sourceRoot":"","sources":["../src/ac-sequence.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GoalRunRecord } from "./run.js";
|
|
2
|
+
/** Verdict for one business acceptance criterion after a run. */
|
|
3
|
+
export type AcceptanceCriterionVerdict = "passed" | "failed" | "indeterminate" | "not_covered"
|
|
4
|
+
/** Criterion was not in the `--ac` filter for this invocation. */
|
|
5
|
+
| "skipped";
|
|
6
|
+
/** Declared in suite config (`acceptance_criteria`). */
|
|
7
|
+
export interface AcceptanceCriterionDefinition {
|
|
8
|
+
id: string;
|
|
9
|
+
text: string;
|
|
10
|
+
}
|
|
11
|
+
/** Per-criterion outcome written to `RunRecord.acceptanceResults`. */
|
|
12
|
+
export interface AcceptanceCriterionResult {
|
|
13
|
+
id: string;
|
|
14
|
+
text: string;
|
|
15
|
+
verdict: AcceptanceCriterionVerdict;
|
|
16
|
+
summary?: string;
|
|
17
|
+
evidenceRefs: string[];
|
|
18
|
+
coveredByGoalIds: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Roll up goal outcomes onto suite acceptance criteria.
|
|
22
|
+
* Goals link via {@link GoalRunRecord.acceptanceCriterionIds} (copied from config).
|
|
23
|
+
*/
|
|
24
|
+
export declare function aggregateAcceptanceCriterionResults(definitions: AcceptanceCriterionDefinition[] | undefined, goalRuns: GoalRunRecord[], options?: {
|
|
25
|
+
criterionFilter?: Set<string>;
|
|
26
|
+
}): AcceptanceCriterionResult[] | undefined;
|
|
27
|
+
//# sourceMappingURL=acceptance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../src/acceptance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,iEAAiE;AACjE,MAAM,MAAM,0BAA0B,GAClC,QAAQ,GACR,QAAQ,GACR,eAAe,GACf,aAAa;AACf,kEAAkE;GAChE,SAAS,CAAC;AAEd,wDAAwD;AACxD,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAmBD;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,6BAA6B,EAAE,GAAG,SAAS,EACxD,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAC1C,yBAAyB,EAAE,GAAG,SAAS,CA0DzC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
function worstVerdict(a, b) {
|
|
2
|
+
const rank = {
|
|
3
|
+
passed: 0,
|
|
4
|
+
skipped: 1,
|
|
5
|
+
not_covered: 2,
|
|
6
|
+
indeterminate: 3,
|
|
7
|
+
failed: 4,
|
|
8
|
+
};
|
|
9
|
+
return rank[a] >= rank[b] ? a : b;
|
|
10
|
+
}
|
|
11
|
+
function goalVerdictToAcVerdict(v) {
|
|
12
|
+
if (v === "passed")
|
|
13
|
+
return "passed";
|
|
14
|
+
if (v === "failed")
|
|
15
|
+
return "failed";
|
|
16
|
+
return "indeterminate";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Roll up goal outcomes onto suite acceptance criteria.
|
|
20
|
+
* Goals link via {@link GoalRunRecord.acceptanceCriterionIds} (copied from config).
|
|
21
|
+
*/
|
|
22
|
+
export function aggregateAcceptanceCriterionResults(definitions, goalRuns, options) {
|
|
23
|
+
if (definitions === undefined || definitions.length === 0)
|
|
24
|
+
return undefined;
|
|
25
|
+
const filter = options?.criterionFilter;
|
|
26
|
+
return definitions.map((def) => {
|
|
27
|
+
if (filter !== undefined && !filter.has(def.id)) {
|
|
28
|
+
return {
|
|
29
|
+
id: def.id,
|
|
30
|
+
text: def.text,
|
|
31
|
+
verdict: "skipped",
|
|
32
|
+
summary: "Not in --ac filter for this run",
|
|
33
|
+
evidenceRefs: [],
|
|
34
|
+
coveredByGoalIds: [],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const covering = goalRuns.filter((gr) => gr.acceptanceCriterionIds?.includes(def.id));
|
|
38
|
+
if (covering.length === 0) {
|
|
39
|
+
return {
|
|
40
|
+
id: def.id,
|
|
41
|
+
text: def.text,
|
|
42
|
+
verdict: "not_covered",
|
|
43
|
+
summary: "No goal lists this criterion in acceptance_criterion_ids",
|
|
44
|
+
evidenceRefs: [],
|
|
45
|
+
coveredByGoalIds: [],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
let verdict = "passed";
|
|
49
|
+
const summaries = [];
|
|
50
|
+
const evidence = new Set();
|
|
51
|
+
const goalIds = [];
|
|
52
|
+
for (const gr of covering) {
|
|
53
|
+
goalIds.push(gr.goalId);
|
|
54
|
+
const stepsFor = (gr.acSequenceSteps ?? []).filter((s) => s.criterionId === def.id);
|
|
55
|
+
if (stepsFor.length > 0) {
|
|
56
|
+
for (const s of stepsFor) {
|
|
57
|
+
verdict = worstVerdict(verdict, goalVerdictToAcVerdict(s.verdict));
|
|
58
|
+
summaries.push(`${gr.goalId}: ${s.summary}`);
|
|
59
|
+
for (const e of s.evidenceRefs)
|
|
60
|
+
evidence.add(e);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
verdict = worstVerdict(verdict, goalVerdictToAcVerdict(gr.verdict));
|
|
65
|
+
if (gr.summary)
|
|
66
|
+
summaries.push(`${gr.goalId}: ${gr.summary}`);
|
|
67
|
+
for (const e of gr.evidenceRefs)
|
|
68
|
+
evidence.add(e);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
id: def.id,
|
|
73
|
+
text: def.text,
|
|
74
|
+
verdict,
|
|
75
|
+
summary: summaries.length > 0 ? summaries.join(" · ") : undefined,
|
|
76
|
+
evidenceRefs: [...evidence],
|
|
77
|
+
coveredByGoalIds: goalIds,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=acceptance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance.js","sourceRoot":"","sources":["../src/acceptance.ts"],"names":[],"mappings":"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"}
|
package/dist/goal.d.ts
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
import type { AcSequenceConfig } from "./ac-sequence.js";
|
|
1
2
|
import type { SuccessCriteria } from "./success-criteria.js";
|
|
2
3
|
export type GoalType = "browser" | "performance" | "native";
|
|
4
|
+
/**
|
|
5
|
+
* - **observe** (default): navigate to `start_path`, then evaluate `success_criteria` (and optional judge) on that page.
|
|
6
|
+
* - **agent**: run `mission_executor` (shell) with mission env, then open a browser and evaluate post-mission criteria (see docs).
|
|
7
|
+
* - **ac_sequence**: built-in LLM browser agent walks suite `acceptance_criteria` in order (see docs).
|
|
8
|
+
*/
|
|
9
|
+
export type ExecutionMode = "observe" | "agent" | "ac_sequence";
|
|
10
|
+
/** Optional limits passed to `mission_executor` via `RESTORMEL_TESTING_MISSION_CONSTRAINTS` (JSON). */
|
|
11
|
+
export interface MissionConstraints {
|
|
12
|
+
/** Suggested wall-clock budget for the executor process (ms); runner uses max of this and shell-hook timeout. */
|
|
13
|
+
maxDurationMs?: number;
|
|
14
|
+
/** Informational URL glob patterns the executor should respect (e.g. `http://localhost:3000/**`). */
|
|
15
|
+
urlAllowlist?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* After `mission_executor` exits 0, navigate and evaluate these criteria (deterministic + judge).
|
|
19
|
+
* If `success_criteria` is omitted, the top-level goal `success_criteria` is used for this phase.
|
|
20
|
+
*/
|
|
21
|
+
export interface AfterAgentPhase {
|
|
22
|
+
startPath?: string;
|
|
23
|
+
successCriteria?: SuccessCriteria;
|
|
24
|
+
}
|
|
3
25
|
/** Opaque hook identifier (script id, npm script name, etc.). */
|
|
4
26
|
export type HookRef = string;
|
|
5
27
|
export interface TestGoal {
|
|
@@ -12,9 +34,33 @@ export interface TestGoal {
|
|
|
12
34
|
* Resolved with `new URL(startPath, baseUrl)`.
|
|
13
35
|
*/
|
|
14
36
|
startPath?: string;
|
|
37
|
+
/** Defaults to **observe**. **agent** is only valid for `type: browser`. */
|
|
38
|
+
executionMode?: ExecutionMode;
|
|
39
|
+
/**
|
|
40
|
+
* Natural-language mission (required for **agent** mode). Passed to the executor as `RESTORMEL_TESTING_MISSION`.
|
|
41
|
+
* Does not auto-run an LLM inside the runner — `mission_executor` implements the mission (e.g. your agent CLI).
|
|
42
|
+
*/
|
|
43
|
+
mission?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Shell command invoked in **agent** mode after preconditions. Must exit 0 before post-mission browser checks.
|
|
46
|
+
*/
|
|
47
|
+
missionExecutor?: string;
|
|
48
|
+
missionConstraints?: MissionConstraints;
|
|
49
|
+
/** Overrides post-mission navigation path and/or success criteria after the executor succeeds. */
|
|
50
|
+
afterAgent?: AfterAgentPhase;
|
|
51
|
+
/**
|
|
52
|
+
* **`execution_mode: ac_sequence` only.** Suite must declare `acceptance_criteria`.
|
|
53
|
+
* YAML: `ac_sequence` / `acSequence`.
|
|
54
|
+
*/
|
|
55
|
+
acSequence?: AcSequenceConfig;
|
|
15
56
|
preconditions?: HookRef[];
|
|
16
57
|
cleanup?: HookRef[];
|
|
17
58
|
exclusiveWith?: string[];
|
|
18
59
|
tags?: string[];
|
|
60
|
+
/**
|
|
61
|
+
* Links automation to suite `acceptance_criteria` ids. Used for AC roll-up and `--ac` filtering.
|
|
62
|
+
* YAML: `acceptance_criterion_ids` / `acceptanceCriterionIds`.
|
|
63
|
+
*/
|
|
64
|
+
acceptanceCriterionIds?: string[];
|
|
19
65
|
}
|
|
20
66
|
//# sourceMappingURL=goal.d.ts.map
|
package/dist/goal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../src/goal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE5D,iEAAiE;AACjE,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../src/goal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAEhE,uGAAuG;AACvG,MAAM,WAAW,kBAAkB;IACjC,iHAAiH;IACjH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,iEAAiE;AACjE,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,kGAAkG;IAClG,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC"}
|
package/dist/guards.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAiB3C,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAoBtE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAa9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAsBhE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CA0BxD"}
|
package/dist/guards.js
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
1
|
import { isVerdict } from "./verdict.js";
|
|
2
|
+
function isAcSequenceStepResult(value) {
|
|
3
|
+
if (value === null || typeof value !== "object")
|
|
4
|
+
return false;
|
|
5
|
+
const s = value;
|
|
6
|
+
return (typeof s.criterionId === "string" &&
|
|
7
|
+
isVerdict(s.verdict) &&
|
|
8
|
+
typeof s.reasonCode === "string" &&
|
|
9
|
+
typeof s.summary === "string" &&
|
|
10
|
+
typeof s.agentRoundsUsed === "number" &&
|
|
11
|
+
Array.isArray(s.evidenceRefs) &&
|
|
12
|
+
s.evidenceRefs.every((x) => typeof x === "string"));
|
|
13
|
+
}
|
|
2
14
|
export function isGoalRunRecord(value) {
|
|
3
15
|
if (value === null || typeof value !== "object")
|
|
4
16
|
return false;
|
|
5
17
|
const g = value;
|
|
18
|
+
const acOk = g.acceptanceCriterionIds === undefined ||
|
|
19
|
+
(Array.isArray(g.acceptanceCriterionIds) && g.acceptanceCriterionIds.every((x) => typeof x === "string"));
|
|
20
|
+
const seqOk = g.acSequenceSteps === undefined ||
|
|
21
|
+
(Array.isArray(g.acSequenceSteps) && g.acSequenceSteps.every(isAcSequenceStepResult));
|
|
6
22
|
return (typeof g.goalId === "string" &&
|
|
7
23
|
isVerdict(g.verdict) &&
|
|
8
24
|
typeof g.reasonCode === "string" &&
|
|
9
25
|
typeof g.summary === "string" &&
|
|
10
26
|
typeof g.retriesUsed === "number" &&
|
|
11
27
|
Array.isArray(g.evidenceRefs) &&
|
|
12
|
-
g.evidenceRefs.every((x) => typeof x === "string")
|
|
28
|
+
g.evidenceRefs.every((x) => typeof x === "string") &&
|
|
29
|
+
acOk &&
|
|
30
|
+
seqOk);
|
|
13
31
|
}
|
|
14
32
|
export function isRunRecord(value) {
|
|
15
33
|
if (value === null || typeof value !== "object")
|
package/dist/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,11 @@ export { isVerdict, VERDICTS } from "./verdict.js";
|
|
|
7
7
|
export { successCriteriaToAssertions } from "./normalize.js";
|
|
8
8
|
export type { Assertion } from "./assertion.js";
|
|
9
9
|
export type { DomAssertion, JudgeAssertion, StructuredAssertion, TextAbsentAssertion, TextPresentAssertion, UrlAssertion, } from "./assertion.js";
|
|
10
|
+
export type { AcSequenceBuiltInAgent, AcSequenceConfig, AcSequencePostCheck, AcSequencePostCheckDomRoleName, AcSequencePostCheckHttp, AcSequenceStepResult, } from "./ac-sequence.js";
|
|
11
|
+
export type { AcceptanceCriterionDefinition, AcceptanceCriterionResult, AcceptanceCriterionVerdict, } from "./acceptance.js";
|
|
12
|
+
export { aggregateAcceptanceCriterionResults } from "./acceptance.js";
|
|
10
13
|
export type { EnvironmentProfile } from "./environment.js";
|
|
11
|
-
export type { GoalType, HookRef, TestGoal } from "./goal.js";
|
|
14
|
+
export type { AfterAgentPhase, ExecutionMode, GoalType, HookRef, MissionConstraints, TestGoal, } from "./goal.js";
|
|
12
15
|
export type { ArtifactPolicy, RetryPolicy } from "./policies.js";
|
|
13
16
|
export type { ArtifactRef, ReproductionHint, Report, RunReport, } from "./report.js";
|
|
14
17
|
export type { CostEstimate, GoalRunRecord, KeysModelMeta, RunRecord, RunRequest, RunTrigger, SuiteReportSlice, TraceEvent, TraceEventKind, } from "./run.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAG,yBAAkC,CAAC;AAErE,OAAO,EACL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAG,yBAAkC,CAAC;AAErE,OAAO,EACL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,EACV,eAAe,EACf,aAAa,EACb,QAAQ,EACR,OAAO,EACP,kBAAkB,EAClB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3F,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,yCAAyC;AACzC,MAAM,MAAM,OAAO,GAAG,OAAO,UAAU,EAAE,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,5 +5,6 @@ export const testingCorePackage = "@restormel/testing-core";
|
|
|
5
5
|
export { isGoalRunRecord, isReport, isRunRecord, isTraceEvent, } from "./guards.js";
|
|
6
6
|
export { isVerdict, VERDICTS } from "./verdict.js";
|
|
7
7
|
export { successCriteriaToAssertions } from "./normalize.js";
|
|
8
|
+
export { aggregateAcceptanceCriterionResults } from "./acceptance.js";
|
|
8
9
|
export { isPathContainedInRoot, resolvePathUnderRoot, sanitizePathSegment, } from "./safe-path.js";
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAkC,CAAC;AAErE,OAAO,EACL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAkC,CAAC;AAErE,OAAO,EACL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAwB7D,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC;AAgCtE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
|
package/dist/run.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { AcSequenceStepResult } from "./ac-sequence.js";
|
|
2
|
+
import type { AcceptanceCriterionDefinition, AcceptanceCriterionResult } from "./acceptance.js";
|
|
1
3
|
import type { Verdict } from "./verdict.js";
|
|
2
4
|
export type RunTrigger = "local" | "ci";
|
|
3
5
|
/** Input to execute a suite (or subset) in local or CI. */
|
|
@@ -38,6 +40,10 @@ export interface CostEstimate {
|
|
|
38
40
|
export interface SuiteReportSlice {
|
|
39
41
|
id: string;
|
|
40
42
|
description?: string;
|
|
43
|
+
/** Echo of suite `user_story` for human reports. */
|
|
44
|
+
userStory?: string;
|
|
45
|
+
/** Echo of suite `acceptance_criteria` definitions (id + text only). */
|
|
46
|
+
acceptanceCriteria?: AcceptanceCriterionDefinition[];
|
|
41
47
|
tags?: string[];
|
|
42
48
|
environmentId: string;
|
|
43
49
|
goalCount: number;
|
|
@@ -51,6 +57,10 @@ export interface GoalRunRecord {
|
|
|
51
57
|
retriesUsed: number;
|
|
52
58
|
/** Paths or ids relative to the run artefact root. */
|
|
53
59
|
evidenceRefs: string[];
|
|
60
|
+
/** Copied from config for acceptance-criterion roll-up. */
|
|
61
|
+
acceptanceCriterionIds?: string[];
|
|
62
|
+
/** Populated by `execution_mode: ac_sequence` goals — one entry per suite criterion attempted. */
|
|
63
|
+
acSequenceSteps?: AcSequenceStepResult[];
|
|
54
64
|
}
|
|
55
65
|
export interface RunRecord {
|
|
56
66
|
id: string;
|
|
@@ -71,6 +81,10 @@ export interface RunRecord {
|
|
|
71
81
|
*/
|
|
72
82
|
judgeInvocationCount?: number;
|
|
73
83
|
costEstimate?: CostEstimate;
|
|
84
|
+
/**
|
|
85
|
+
* When the suite declares `acceptance_criteria`, rolled up from goals via `acceptance_criterion_ids`.
|
|
86
|
+
*/
|
|
87
|
+
acceptanceResults?: AcceptanceCriterionResult[];
|
|
74
88
|
}
|
|
75
89
|
export type TraceEventKind = "navigation" | "action" | "assertion" | "model_call" | "tool_call" | "observation" | "error";
|
|
76
90
|
export interface TraceEvent {
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;AAExC,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,aAAa,CAAC,EAAE;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/suite.d.ts
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
|
+
import type { AcceptanceCriterionDefinition } from "./acceptance.js";
|
|
1
2
|
import type { ArtifactPolicy, RetryPolicy } from "./policies.js";
|
|
2
3
|
import type { TestGoal } from "./goal.js";
|
|
3
4
|
export interface TestSuite {
|
|
4
5
|
id: string;
|
|
5
6
|
description?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Optional business narrative (As a … I want …). Reported prominently; not executed by the runner.
|
|
9
|
+
* YAML: `user_story` / `userStory`.
|
|
10
|
+
*/
|
|
11
|
+
userStory?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Ordered acceptance criteria with stable ids for reports and traceability.
|
|
14
|
+
* YAML: `acceptance_criteria` / `acceptanceCriteria` as `{ id, text }[]`.
|
|
15
|
+
*/
|
|
16
|
+
acceptanceCriteria?: AcceptanceCriterionDefinition[];
|
|
6
17
|
/** Id of an `EnvironmentProfile` in resolved config. */
|
|
7
18
|
environment: string;
|
|
8
19
|
goals: TestGoal[];
|
package/dist/suite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
|
|
1
|
+
{"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,6BAA6B,EAAE,CAAC;IACrD,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
|