cairn-engine 1.3.0 → 2.1.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 +3 -3
- package/dist/adapters/critics/assertion.d.ts +8 -3
- package/dist/adapters/critics/assertion.js +14 -10
- package/dist/adapters/critics/assertion.js.map +1 -1
- package/dist/adapters/critics/llm.d.ts +1 -1
- package/dist/adapters/critics/llm.js +2 -2
- package/dist/adapters/critics/llm.js.map +1 -1
- package/dist/adapters/drivers/chrome.d.ts +5 -4
- package/dist/adapters/drivers/chrome.js +8 -4
- package/dist/adapters/drivers/chrome.js.map +1 -1
- package/dist/adapters/drivers/self-heal.d.ts +3 -2
- package/dist/adapters/drivers/self-heal.js +10 -7
- package/dist/adapters/drivers/self-heal.js.map +1 -1
- package/dist/adapters/skills/file-store.d.ts +7 -4
- package/dist/adapters/skills/file-store.js +27 -10
- package/dist/adapters/skills/file-store.js.map +1 -1
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +11 -6
- package/dist/cli.js.map +1 -1
- package/dist/core/discover.d.ts +6 -2
- package/dist/core/discover.js +61 -12
- package/dist/core/discover.js.map +1 -1
- package/dist/core/pipeline.d.ts +3 -1
- package/dist/core/pipeline.js +30 -2
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/ports.d.ts +16 -5
- package/dist/core/requests.d.ts +6 -0
- package/dist/core/requests.js +14 -0
- package/dist/core/requests.js.map +1 -0
- package/dist/core/step-heal.d.ts +14 -0
- package/dist/core/step-heal.js +55 -0
- package/dist/core/step-heal.js.map +1 -0
- package/dist/core/steps.d.ts +11 -1
- package/dist/core/steps.js +4 -2
- package/dist/core/steps.js.map +1 -1
- package/dist/core/types.d.ts +14 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +12 -4
- package/dist/run.js +42 -13
- package/dist/run.js.map +1 -1
- package/package.json +6 -2
package/dist/core/discover.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* later replays with no LLM (invariant #4). LLM is behind the LlmClient seam (invariant #5).
|
|
5
5
|
*/
|
|
6
6
|
import type { Driver, LlmClient } from "./ports.js";
|
|
7
|
-
import type { Assertion, PageElement, Scenario, Step } from "./types.js";
|
|
7
|
+
import type { Assertion, PageElement, Scenario, Step, WaitUntil } from "./types.js";
|
|
8
8
|
export interface DiscoverOptions {
|
|
9
9
|
driver: Driver;
|
|
10
10
|
llm: LlmClient;
|
|
@@ -21,12 +21,13 @@ export interface DiscoverOptions {
|
|
|
21
21
|
semanticChecks?: boolean;
|
|
22
22
|
}
|
|
23
23
|
export interface Decision {
|
|
24
|
-
action: "click" | "doubleClick" | "hover" | "type" | "select" | "pressKey" | "scroll" | "goto" | "done";
|
|
24
|
+
action: "click" | "doubleClick" | "hover" | "type" | "select" | "pressKey" | "scroll" | "goto" | "waitFor" | "done";
|
|
25
25
|
text?: string;
|
|
26
26
|
value?: string;
|
|
27
27
|
key?: string;
|
|
28
28
|
direction?: "down" | "up";
|
|
29
29
|
url?: string;
|
|
30
|
+
until?: WaitUntil;
|
|
30
31
|
reason?: string;
|
|
31
32
|
assertions?: Assertion[];
|
|
32
33
|
}
|
|
@@ -36,6 +37,9 @@ export interface Decision {
|
|
|
36
37
|
* needs when a page has thousands of elements (seen in dogfooding) — ranking is correctness, not just cost.
|
|
37
38
|
*/
|
|
38
39
|
export declare function rankElements(elements: PageElement[], intent: string, limit: number): PageElement[];
|
|
40
|
+
export declare function renderElements(elements: PageElement[]): string;
|
|
39
41
|
/** First JSON object in a model reply, tolerating fences, prose, and trailing extra objects. */
|
|
40
42
|
export declare function parseDecision(text: string): Decision;
|
|
43
|
+
/** Execute a non-`done` decision and return the Step it produced. Throws if it fails. */
|
|
44
|
+
export declare function applyDecision(driver: Driver, decision: Decision): Promise<Step>;
|
|
41
45
|
export declare function discover(intent: string, opts: DiscoverOptions): Promise<Scenario>;
|
package/dist/core/discover.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { waitForCondition } from "./steps.js";
|
|
2
|
+
import { isBenignRequest, isMutation } from "./requests.js";
|
|
1
3
|
const SYSTEM = "You are a QA agent driving a web browser to satisfy a natural-language intent. " +
|
|
2
4
|
"At each turn you see the page's interactive elements and the actions taken so far. " +
|
|
3
5
|
"Respond with ONE next action as strict JSON, no prose, no code fences. " +
|
|
@@ -6,7 +8,10 @@ const SYSTEM = "You are a QA agent driving a web browser to satisfy a natural-la
|
|
|
6
8
|
'{"action":"hover","text":"<element>"} (reveals flyout/dropdown menus) · ' +
|
|
7
9
|
'{"action":"type","text":"<element>","value":"<text>"} · {"action":"select","text":"<element>","value":"<option>"} · ' +
|
|
8
10
|
'{"action":"pressKey","key":"Enter|Escape|Tab|..."} · {"action":"scroll","direction":"down|up"} (load lazy content) · ' +
|
|
9
|
-
'{"action":"goto","url":"<url>"} ·
|
|
11
|
+
'{"action":"goto","url":"<url>"} · ' +
|
|
12
|
+
'{"action":"waitFor","until":{"url":"<substring>"}|{"requestStatus":{"urlIncludes":"<substring>","status":200}}|{"text":"<element>"}} ' +
|
|
13
|
+
"(block until the app is ready before the next step — e.g. an auth redirect lands or a key request returns — instead of racing it) · " +
|
|
14
|
+
'{"action":"done"}. ' +
|
|
10
15
|
'Always add "reason":"<short>". Use the exact element name shown. To open a menu before clicking a hidden item, hover it first. ' +
|
|
11
16
|
'Use "done" when the intent is achieved (or impossible); with "done" you may include "assertions": an array of ' +
|
|
12
17
|
'{"kind":"navigated"} | {"kind":"no-failed-requests"} | {"kind":"no-console-errors"} | {"kind":"request-status","urlIncludes":"...","status":200}.';
|
|
@@ -21,7 +26,9 @@ const INTERACTIVE_ROLES = new Set([
|
|
|
21
26
|
* needs when a page has thousands of elements (seen in dogfooding) — ranking is correctness, not just cost.
|
|
22
27
|
*/
|
|
23
28
|
export function rankElements(elements, intent, limit) {
|
|
24
|
-
|
|
29
|
+
// Unicode-aware tokens — `\W` treats every Korean (or any non-ASCII) char as a separator, so a
|
|
30
|
+
// Korean intent yielded no tokens and ranked nothing by relevance (P8). Match letter/number runs.
|
|
31
|
+
const words = (intent.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? []).filter((w) => w.length >= 2);
|
|
25
32
|
return elements
|
|
26
33
|
.map((e, i) => {
|
|
27
34
|
let score = INTERACTIVE_ROLES.has(e.role) ? 100 : 0;
|
|
@@ -35,7 +42,7 @@ export function rankElements(elements, intent, limit) {
|
|
|
35
42
|
.slice(0, limit)
|
|
36
43
|
.map((s) => s.e);
|
|
37
44
|
}
|
|
38
|
-
function renderElements(elements) {
|
|
45
|
+
export function renderElements(elements) {
|
|
39
46
|
return elements.map((e) => `- [${e.role}] ${e.name}`).join("\n");
|
|
40
47
|
}
|
|
41
48
|
function buildPrompt(intent, render, prevRender, steps, failures) {
|
|
@@ -115,7 +122,13 @@ function extractFirstJsonObject(text) {
|
|
|
115
122
|
* `semantic` is set — otherwise the freeze stays deterministic (invariant #4).
|
|
116
123
|
*/
|
|
117
124
|
function deriveAssertions(proposed, evidence, semantic) {
|
|
118
|
-
const out = [
|
|
125
|
+
const out = [];
|
|
126
|
+
// Ground no-failed-requests: freeze it only if it actually HELD during discovery (no non-benign
|
|
127
|
+
// failure). A flow that survives a noisy 4xx would otherwise fail every replay on a check that was
|
|
128
|
+
// already false — the success-proving request below carries the real signal instead.
|
|
129
|
+
if (!evidence.logic.requests.some((r) => r.status >= 400 && !isBenignRequest(r.url))) {
|
|
130
|
+
out.push({ kind: "no-failed-requests" });
|
|
131
|
+
}
|
|
119
132
|
const { navigated, finalUrl } = evidence.execution;
|
|
120
133
|
// assert reaching the RIGHT destination (host+path), not just "navigated" — catches a flow
|
|
121
134
|
// that lands on an error/wrong page yet technically navigated.
|
|
@@ -151,10 +164,13 @@ function dedupeAssertions(assertions) {
|
|
|
151
164
|
}
|
|
152
165
|
const ASSERT_SYSTEM = "You propose verification assertions for a QA scenario, grounded ONLY in the observed evidence — " +
|
|
153
166
|
"never invent a request or page that is not shown. Given the intent and what the run observed, " +
|
|
154
|
-
"return a JSON array of assertions confirming the intent was achieved.
|
|
155
|
-
|
|
156
|
-
'
|
|
157
|
-
"
|
|
167
|
+
"return a JSON array of assertions confirming the intent was achieved. " +
|
|
168
|
+
"Prove the ACTION, not just the destination: prefer a " +
|
|
169
|
+
'{"kind":"request-status","urlIncludes":"<url-substring>","status":200} on the state-changing request ' +
|
|
170
|
+
"that performed the goal (a POST/PUT/PATCH such as an order/submit/create call) — NOT a page navigation " +
|
|
171
|
+
"or GET, which a mere URL jump could satisfy without doing the work. " +
|
|
172
|
+
'Add {"kind":"navigated","to":"<host+path>"} for the destination too. ' +
|
|
173
|
+
"Return [] only if no meaningful action was observed. JSON array only, no prose, no code fences.";
|
|
158
174
|
const ASSERT_SYSTEM_SEMANTIC = ' You may also add {"kind":"expect","criterion":"<natural-language success criterion>"} ' +
|
|
159
175
|
"for a check no mechanical assertion captures (judged later by an LLM critic).";
|
|
160
176
|
/** Compact evidence rendering for the assertion-proposal prompt. */
|
|
@@ -164,10 +180,16 @@ function renderEvidence(evidence) {
|
|
|
164
180
|
.slice(0, 40)
|
|
165
181
|
.map((r) => `${r.status} ${r.method} ${r.url}`)
|
|
166
182
|
.join("\n");
|
|
183
|
+
// Surface successful mutations separately — these are what prove an action happened (a checkout
|
|
184
|
+
// POST, etc.), so the model grounds the success check on the work, not a page load.
|
|
185
|
+
const mutations = logic.requests
|
|
186
|
+
.filter((r) => isMutation(r.method) && r.status < 400)
|
|
187
|
+
.map((r) => `${r.status} ${r.method} ${r.url}`);
|
|
167
188
|
const errors = logic.console.filter((m) => m.type === "error").map((m) => m.text);
|
|
168
189
|
return [
|
|
169
190
|
`finalUrl: ${execution.finalUrl ?? "(none)"} (navigated: ${execution.navigated})`,
|
|
170
|
-
`requests (${
|
|
191
|
+
`state-changing requests that prove an action (prefer one of these): ${mutations.length ? "\n" + mutations.join("\n") : "(none)"}`,
|
|
192
|
+
`all requests (${logic.requests.length}):`,
|
|
171
193
|
requests || "(none)",
|
|
172
194
|
`console errors (${errors.length}): ${errors.slice(0, 5).join(" | ") || "(none)"}`,
|
|
173
195
|
].join("\n");
|
|
@@ -240,8 +262,18 @@ function destinationKey(url) {
|
|
|
240
262
|
return url;
|
|
241
263
|
}
|
|
242
264
|
}
|
|
265
|
+
/** A grounded post-condition for a step: if it navigated, expect that destination on replay (so a
|
|
266
|
+
* step that should navigate but doesn't is caught). Non-navigating steps stay unchecked — deriving a
|
|
267
|
+
* weak expect would trigger false divergence. */
|
|
268
|
+
async function stepExpect(driver, beforeUrl) {
|
|
269
|
+
await driver.settle();
|
|
270
|
+
const afterUrl = (await driver.observe()).execution.finalUrl;
|
|
271
|
+
if (afterUrl && afterUrl !== beforeUrl)
|
|
272
|
+
return { url: destinationKey(afterUrl) };
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
243
275
|
/** Execute a non-`done` decision and return the Step it produced. Throws if it fails. */
|
|
244
|
-
async function applyDecision(driver, decision) {
|
|
276
|
+
export async function applyDecision(driver, decision) {
|
|
245
277
|
// Enrich the target with resilient locators (role + structural index) before acting, and
|
|
246
278
|
// freeze the enriched target — so replay survives a UI rename without the LLM.
|
|
247
279
|
const located = () => {
|
|
@@ -288,6 +320,11 @@ async function applyDecision(driver, decision) {
|
|
|
288
320
|
throw new Error('goto decision missing "url"');
|
|
289
321
|
await driver.goto(decision.url);
|
|
290
322
|
return { kind: "goto", url: decision.url };
|
|
323
|
+
case "waitFor":
|
|
324
|
+
if (!decision.until)
|
|
325
|
+
throw new Error('waitFor decision missing "until"');
|
|
326
|
+
await waitForCondition(driver, decision.until); // wait now so discovery doesn't race the app
|
|
327
|
+
return { kind: "waitFor", until: decision.until };
|
|
291
328
|
default:
|
|
292
329
|
throw new Error(`unknown action: ${decision.action}`);
|
|
293
330
|
}
|
|
@@ -331,7 +368,14 @@ export async function discover(intent, opts) {
|
|
|
331
368
|
return { name: intent, steps, assertions: deriveAssertions(proposed, evidence, semanticChecks) };
|
|
332
369
|
}
|
|
333
370
|
try {
|
|
371
|
+
const beforeUrl = (await driver.observe()).execution.finalUrl;
|
|
334
372
|
const step = await applyDecision(driver, decision);
|
|
373
|
+
// Capture for surgical-heal: intent (heal rationale) + a grounded per-step post-condition.
|
|
374
|
+
if (decision.reason?.trim())
|
|
375
|
+
step.intent = decision.reason.trim();
|
|
376
|
+
const expect = await stepExpect(driver, beforeUrl);
|
|
377
|
+
if (expect)
|
|
378
|
+
step.expect = expect;
|
|
335
379
|
steps.push(step);
|
|
336
380
|
onStep?.(decision, step);
|
|
337
381
|
}
|
|
@@ -341,9 +385,14 @@ export async function discover(intent, opts) {
|
|
|
341
385
|
onStep?.(decision);
|
|
342
386
|
}
|
|
343
387
|
}
|
|
344
|
-
// Safety cap reached without an explicit "done" —
|
|
388
|
+
// Safety cap reached without an explicit "done" — flag it so the path isn't trusted as complete.
|
|
345
389
|
const evidence = await driver.observe();
|
|
346
390
|
const proposed = await proposeAssertions(llm, intent, evidence, semanticChecks);
|
|
347
|
-
return {
|
|
391
|
+
return {
|
|
392
|
+
name: intent,
|
|
393
|
+
steps,
|
|
394
|
+
assertions: deriveAssertions(proposed, evidence, semanticChecks),
|
|
395
|
+
truncated: true,
|
|
396
|
+
};
|
|
348
397
|
}
|
|
349
398
|
//# sourceMappingURL=discover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/core/discover.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/core/discover.ts"],"names":[],"mappings":"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"}
|
package/dist/core/pipeline.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* is injected (invariant #2); with a fixed-scenario Planner + deterministic Critic, no LLM
|
|
4
4
|
* runs (invariant #4).
|
|
5
5
|
*/
|
|
6
|
-
import type { CustomAction, Harness, StepHandler } from "./ports.js";
|
|
6
|
+
import type { CustomAction, Harness, StepHandler, StepHealer } from "./ports.js";
|
|
7
7
|
import type { Result, StepProgress } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* Seams a host (CLI, desktop app, CI) plugs into — the engine emits/accepts, the host
|
|
@@ -19,5 +19,7 @@ export interface RunHarnessOptions {
|
|
|
19
19
|
actions?: Record<string, CustomAction>;
|
|
20
20
|
/** Replace the Execute-stage dispatch chain entirely (advanced); defaults to built-ins + `actions`. */
|
|
21
21
|
stepHandlers?: StepHandler[];
|
|
22
|
+
/** Repair a step whose `expect` fails (surgical self-heal); absent → a diverged step just fails. */
|
|
23
|
+
stepHealer?: StepHealer;
|
|
22
24
|
}
|
|
23
25
|
export declare function runHarness(harness: Harness, task: string, opts?: RunHarnessOptions): Promise<Result>;
|
package/dist/core/pipeline.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defaultStepHandlers } from "./steps.js";
|
|
1
|
+
import { conditionMet, defaultStepHandlers } from "./steps.js";
|
|
2
2
|
/** Route one step to the first handler that supports it; record success/failure either way. */
|
|
3
3
|
async function executeStep(handlers, step, driver) {
|
|
4
4
|
try {
|
|
@@ -12,6 +12,34 @@ async function executeStep(handlers, step, driver) {
|
|
|
12
12
|
return { step, ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Run a step with per-step `expect` verification (spec/core/surgical-heal.md): skip if it already
|
|
17
|
+
* holds (safe idempotency — gated on `expect`, so never a false pass), else execute and require it
|
|
18
|
+
* to hold afterwards (catches a step that ran but didn't reach its outcome). Deterministic; a
|
|
19
|
+
* divergence goes to `healer` when one is supplied, otherwise the step fails.
|
|
20
|
+
*/
|
|
21
|
+
async function runStep(handlers, step, driver, index, healer) {
|
|
22
|
+
if (step.expect && (await conditionMet(driver, step.expect))) {
|
|
23
|
+
return { step, ok: true }; // already satisfied — safe skip
|
|
24
|
+
}
|
|
25
|
+
const result = await executeStep(handlers, step, driver);
|
|
26
|
+
if (!result.ok || !step.expect)
|
|
27
|
+
return result;
|
|
28
|
+
await driver.settle();
|
|
29
|
+
if (await conditionMet(driver, step.expect))
|
|
30
|
+
return result;
|
|
31
|
+
// Diverged: ran but `expect` didn't hold — repair only this step.
|
|
32
|
+
if (healer) {
|
|
33
|
+
const healed = await healer.heal(step, index, driver);
|
|
34
|
+
if (healed) {
|
|
35
|
+
await driver.settle();
|
|
36
|
+
if (await conditionMet(driver, healed.step.expect ?? step.expect)) {
|
|
37
|
+
return { step: healed.step, ok: true };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { step, ok: false, error: `post-condition not met: ${JSON.stringify(step.expect)}` };
|
|
42
|
+
}
|
|
15
43
|
export async function runHarness(harness, task, opts = {}) {
|
|
16
44
|
const { context, planner, driver, critic, reporter } = harness;
|
|
17
45
|
const handlers = opts.stepHandlers ?? defaultStepHandlers(opts.actions ?? {});
|
|
@@ -22,7 +50,7 @@ export async function runHarness(harness, task, opts = {}) {
|
|
|
22
50
|
try {
|
|
23
51
|
for (const step of scenario.steps) {
|
|
24
52
|
opts.signal?.throwIfAborted(); // cooperative cancellation between steps (host owns Stop)
|
|
25
|
-
const result = await
|
|
53
|
+
const result = await runStep(handlers, step, driver, actions.length, opts.stepHealer);
|
|
26
54
|
actions.push(result);
|
|
27
55
|
if (opts.onStep) {
|
|
28
56
|
const screenshot = opts.captureScreenshots ? await driver.screenshot().catch(() => undefined) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ports.d.ts
CHANGED
|
@@ -7,7 +7,12 @@ import type { Assertion, AssertionResult, Context, Evidence, PageElement, Result
|
|
|
7
7
|
export interface ContextProvider {
|
|
8
8
|
provide(task: string): Promise<Context>;
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Intent → ordered Scenario for the plan-then-execute pipeline (frozen replay uses no LLM, invariant #4).
|
|
12
|
+
* Discovery is NOT a Planner: `discover()` is a separate free function that interleaves observe→act→adapt
|
|
13
|
+
* against the live browser (invariant #3), so it can't be a pure `plan(ctx)`. The CLI's `discover` calls
|
|
14
|
+
* it directly, outside the Harness/Planner pipeline.
|
|
15
|
+
*/
|
|
11
16
|
export interface Planner {
|
|
12
17
|
plan(ctx: Context): Promise<Scenario>;
|
|
13
18
|
}
|
|
@@ -45,12 +50,18 @@ export interface StepHandler {
|
|
|
45
50
|
supports(step: Step): boolean;
|
|
46
51
|
execute(step: Step, driver: Driver): Promise<void>;
|
|
47
52
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
/** Repairs a step whose `expect` failed at replay — surgically, from the step's `intent`, not by
|
|
54
|
+
* re-discovering the whole scenario. The LLM lives here (sanctioned, invariant #4(b)); injected only
|
|
55
|
+
* when healing is asked, so clean replay stays LLM-free. Returns the corrective step, or null. */
|
|
56
|
+
export interface StepHealer {
|
|
57
|
+
heal(step: Step, index: number, driver: Driver): Promise<StepHeal | null>;
|
|
58
|
+
}
|
|
59
|
+
export interface StepHeal {
|
|
60
|
+
index: number;
|
|
61
|
+
step: Step;
|
|
51
62
|
}
|
|
52
63
|
export interface SkillStore {
|
|
53
|
-
resolve(name: string): Promise<
|
|
64
|
+
resolve(name: string): Promise<Scenario | undefined>;
|
|
54
65
|
}
|
|
55
66
|
/**
|
|
56
67
|
* One link in the Judge stage's dispatch chain (mirror of StepHandler): a Critic routes each
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Requests whose failure is noise, not a regression — excluded from `no-failed-requests`. Built-in
|
|
2
|
+
* universal noise (favicon, robots) plus any URL-substring a product marks benign. */
|
|
3
|
+
export declare function isBenignRequest(url: string, benign?: readonly string[]): boolean;
|
|
4
|
+
/** Whether a request is a state-changing mutation (the kind that proves an action happened, vs a
|
|
5
|
+
* navigation/read) — used to ground a scenario's success assertion on what did the work. */
|
|
6
|
+
export declare function isMutation(method: string): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Requests whose failure is noise, not a regression — excluded from `no-failed-requests`. Built-in
|
|
2
|
+
* universal noise (favicon, robots) plus any URL-substring a product marks benign. */
|
|
3
|
+
export function isBenignRequest(url, benign = []) {
|
|
4
|
+
if (/\/favicon\.ico(\?|$)/i.test(url) || /\/robots\.txt(\?|$)/i.test(url))
|
|
5
|
+
return true;
|
|
6
|
+
return benign.some((s) => url.includes(s));
|
|
7
|
+
}
|
|
8
|
+
/** Whether a request is a state-changing mutation (the kind that proves an action happened, vs a
|
|
9
|
+
* navigation/read) — used to ground a scenario's success assertion on what did the work. */
|
|
10
|
+
export function isMutation(method) {
|
|
11
|
+
const m = method.toUpperCase();
|
|
12
|
+
return m === "POST" || m === "PUT" || m === "PATCH" || m === "DELETE";
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/core/requests.ts"],"names":[],"mappings":"AAAA;sFACsF;AACtF,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,SAA4B,EAAE;IACzE,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;4FAC4F;AAC5F,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default StepHealer: when a step's `expect` fails at replay, re-decide a single action from the
|
|
3
|
+
* step's `intent` and the live page, then re-freeze it in place — surgical, not a whole re-discovery.
|
|
4
|
+
* The LLM (LlmClient port) runs only here, only on divergence (invariant #4(b)). See spec/core/surgical-heal.md.
|
|
5
|
+
*/
|
|
6
|
+
import type { Driver, LlmClient, StepHeal, StepHealer } from "./ports.js";
|
|
7
|
+
import type { Step } from "./types.js";
|
|
8
|
+
export declare class LlmStepHealer implements StepHealer {
|
|
9
|
+
private readonly llm;
|
|
10
|
+
private readonly maxHeals;
|
|
11
|
+
readonly heals: StepHeal[];
|
|
12
|
+
constructor(llm: LlmClient, maxHeals?: number);
|
|
13
|
+
heal(step: Step, index: number, driver: Driver): Promise<StepHeal | null>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { applyDecision, parseDecision, renderElements } from "./discover.js";
|
|
2
|
+
const MAX_STEP_HEALS = 5;
|
|
3
|
+
const STEP_HEAL_SYSTEM = "You repair ONE step of a browser QA scenario that ran but didn't reach its expected outcome. " +
|
|
4
|
+
"Given the step's goal and the current page elements, reply with the SINGLE next action that " +
|
|
5
|
+
'achieves the goal, as one JSON action object (same format as discovery: {"action":"click","text":"..."}). ' +
|
|
6
|
+
'If nothing on the page can achieve it, reply {"action":"done"}. JSON only, no prose.';
|
|
7
|
+
export class LlmStepHealer {
|
|
8
|
+
llm;
|
|
9
|
+
maxHeals;
|
|
10
|
+
heals = [];
|
|
11
|
+
constructor(llm, maxHeals = MAX_STEP_HEALS) {
|
|
12
|
+
this.llm = llm;
|
|
13
|
+
this.maxHeals = maxHeals;
|
|
14
|
+
}
|
|
15
|
+
async heal(step, index, driver) {
|
|
16
|
+
if (this.heals.length >= this.maxHeals)
|
|
17
|
+
return null;
|
|
18
|
+
const elements = await driver.snapshot();
|
|
19
|
+
let decision;
|
|
20
|
+
try {
|
|
21
|
+
const reply = await this.llm.complete(stepHealPrompt(step, elements), { system: STEP_HEAL_SYSTEM });
|
|
22
|
+
decision = parseDecision(reply);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (decision.action === "done")
|
|
28
|
+
return null;
|
|
29
|
+
let healed;
|
|
30
|
+
try {
|
|
31
|
+
healed = await applyDecision(driver, decision);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
// Keep the original intent + expect on the re-frozen step so it stays verifiable next replay.
|
|
37
|
+
healed.intent = step.intent;
|
|
38
|
+
healed.expect = step.expect;
|
|
39
|
+
const heal = { index, step: healed };
|
|
40
|
+
this.heals.push(heal);
|
|
41
|
+
return heal;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function stepHealPrompt(step, elements) {
|
|
45
|
+
return [
|
|
46
|
+
`Step goal: ${step.intent ?? step.kind}`,
|
|
47
|
+
`Expected outcome: ${step.expect ? JSON.stringify(step.expect) : "(reach the next state)"}`,
|
|
48
|
+
``,
|
|
49
|
+
`Current page:`,
|
|
50
|
+
renderElements(elements),
|
|
51
|
+
``,
|
|
52
|
+
`Reply with the single next action that achieves the goal.`,
|
|
53
|
+
].join("\n");
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=step-heal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-heal.js","sourceRoot":"","sources":["../../src/core/step-heal.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE5F,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,gBAAgB,GACpB,+FAA+F;IAC/F,8FAA8F;IAC9F,4GAA4G;IAC5G,sFAAsF,CAAC;AAEzF,MAAM,OAAO,aAAa;IAGL;IACA;IAHV,KAAK,GAAe,EAAE,CAAC;IAChC,YACmB,GAAc,EACd,WAAW,cAAc;QADzB,QAAG,GAAH,GAAG,CAAW;QACd,aAAQ,GAAR,QAAQ,CAAiB;IACzC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,IAAU,EAAE,KAAa,EAAE,MAAc;QAClD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACpG,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,MAAY,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,8FAA8F;QAC9F,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,QAAuB;IACzD,OAAO;QACL,cAAc,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;QACxC,qBAAqB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE;QAC3F,EAAE;QACF,eAAe;QACf,cAAc,CAAC,QAAQ,CAAC;QACxB,EAAE;QACF,2DAA2D;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/core/steps.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* registering a handler, never editing a stage. Depends only on core ports/types.
|
|
6
6
|
*/
|
|
7
7
|
import type { CustomAction, Driver, StepHandler } from "./ports.js";
|
|
8
|
-
import type { Step } from "./types.js";
|
|
8
|
+
import type { Step, WaitUntil } from "./types.js";
|
|
9
9
|
/** Handles cairn's built-in step vocabulary — every kind except product-defined `custom`. */
|
|
10
10
|
export declare class BuiltinStepHandler implements StepHandler {
|
|
11
11
|
supports(step: Step): boolean;
|
|
@@ -20,3 +20,13 @@ export declare class CustomStepHandler implements StepHandler {
|
|
|
20
20
|
}
|
|
21
21
|
/** The engine's default Execute-stage chain: built-ins first, then product `custom` actions. */
|
|
22
22
|
export declare function defaultStepHandlers(actions?: Record<string, CustomAction>): StepHandler[];
|
|
23
|
+
/**
|
|
24
|
+
* Poll the Driver's own observation until every field of `until` holds, or throw on timeout.
|
|
25
|
+
* Uses only `observe()`/`snapshot()`, so any Driver works and replay stays deterministic (no LLM,
|
|
26
|
+
* invariant #4). This is the explicit-wait primitive the heuristic `settle()` can't express —
|
|
27
|
+
* e.g. "wait until /me returns 200" before the next step, instead of racing the app's readiness.
|
|
28
|
+
*/
|
|
29
|
+
export declare function waitForCondition(driver: Driver, until: WaitUntil, timeoutMs?: number): Promise<void>;
|
|
30
|
+
/** Whether every field of `until` holds now (Driver observation only, no LLM). Polled by `waitFor`
|
|
31
|
+
* and checked once per step for `expect` verification (spec/core/surgical-heal.md). */
|
|
32
|
+
export declare function conditionMet(driver: Driver, until: WaitUntil): Promise<boolean>;
|
package/dist/core/steps.js
CHANGED
|
@@ -65,7 +65,7 @@ export function defaultStepHandlers(actions = {}) {
|
|
|
65
65
|
* invariant #4). This is the explicit-wait primitive the heuristic `settle()` can't express —
|
|
66
66
|
* e.g. "wait until /me returns 200" before the next step, instead of racing the app's readiness.
|
|
67
67
|
*/
|
|
68
|
-
async function waitForCondition(driver, until, timeoutMs = WAIT_TIMEOUT_MS) {
|
|
68
|
+
export async function waitForCondition(driver, until, timeoutMs = WAIT_TIMEOUT_MS) {
|
|
69
69
|
const deadline = Date.now() + timeoutMs;
|
|
70
70
|
for (;;) {
|
|
71
71
|
if (await conditionMet(driver, until))
|
|
@@ -76,7 +76,9 @@ async function waitForCondition(driver, until, timeoutMs = WAIT_TIMEOUT_MS) {
|
|
|
76
76
|
await sleep(WAIT_POLL_MS);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
/** Whether every field of `until` holds now (Driver observation only, no LLM). Polled by `waitFor`
|
|
80
|
+
* and checked once per step for `expect` verification (spec/core/surgical-heal.md). */
|
|
81
|
+
export async function conditionMet(driver, until) {
|
|
80
82
|
if (until.url !== undefined || until.requestStatus !== undefined) {
|
|
81
83
|
const { execution, logic } = await driver.observe();
|
|
82
84
|
if (until.url !== undefined && !(execution.finalUrl ?? "").includes(until.url))
|
package/dist/core/steps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/core/steps.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/core/steps.ts"],"names":[],"mappings":"AASA,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnF,6FAA6F;AAC7F,MAAM,OAAO,kBAAkB;IAC7B,QAAQ,CAAC,IAAU;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,MAAc;QACtC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,KAAK,UAAU;gBACb,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,KAAK,QAAQ;gBACX,yFAAyF;gBACzF,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC1E,OAAO,CAAC,CAAC,CAAC;gBACR,oFAAoF;gBACpF,MAAM,SAAS,GAAU,IAAI,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,2FAA2F;AAC3F,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,UAAwC,EAAE;QAA1C,YAAO,GAAP,OAAO,CAAmC;IAAG,CAAC;IAE3E,QAAQ,CAAC,IAAU;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,MAAc;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACvF,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,UAAwC,EAAE;IAC5E,OAAO,CAAC,IAAI,kBAAkB,EAAE,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,KAAgB,EAChB,SAAS,GAAG,eAAe;IAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC;QACR,IAAI,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;uFACuF;AACvF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,KAAgB;IACjE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACjE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7F,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;gBAAE,OAAO,KAAK,CAAC;QACpG,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAClB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACvF,CAAC;QACF,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
export interface Context {
|
|
3
3
|
intent: string;
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
/** Per-step surgical-heal metadata: `intent` is what a heal re-decides from; `expect` is a
|
|
6
|
+
* post-condition replay verifies deterministically (same shape as `waitFor`). See spec/core/surgical-heal.md. */
|
|
7
|
+
export interface StepMeta {
|
|
8
|
+
intent?: string;
|
|
9
|
+
expect?: WaitUntil;
|
|
10
|
+
}
|
|
11
|
+
export type Step = StepMeta & ({
|
|
6
12
|
kind: "goto";
|
|
7
13
|
url: string;
|
|
8
14
|
} | {
|
|
@@ -41,7 +47,7 @@ export type Step = {
|
|
|
41
47
|
kind: "custom";
|
|
42
48
|
name: string;
|
|
43
49
|
params?: Record<string, unknown>;
|
|
44
|
-
};
|
|
50
|
+
});
|
|
45
51
|
/**
|
|
46
52
|
* A condition a `waitFor` step blocks on. All provided fields must hold (AND). Checked against the
|
|
47
53
|
* Driver's `observe()`/`snapshot()` — so any Driver supports it without a new port method.
|
|
@@ -99,6 +105,9 @@ export interface Scenario {
|
|
|
99
105
|
name: string;
|
|
100
106
|
steps: Step[];
|
|
101
107
|
assertions: Assertion[];
|
|
108
|
+
/** Set by discover when it stopped at the step cap without reaching "done" — the path may be
|
|
109
|
+
* incomplete, so a host can warn before trusting the freeze. Absent on a normal finish. */
|
|
110
|
+
truncated?: boolean;
|
|
102
111
|
}
|
|
103
112
|
/** An interactive element the discover loop perceives and acts on. */
|
|
104
113
|
export interface PageElement {
|
|
@@ -125,7 +134,9 @@ export interface NetworkRequest {
|
|
|
125
134
|
status: number;
|
|
126
135
|
resourceType?: string;
|
|
127
136
|
}
|
|
128
|
-
/** Three observable layers
|
|
137
|
+
/** Three observable layers. Execution + logic drive the deterministic verdict (never "the screen
|
|
138
|
+
* looked right"); perception (screenshots) feeds the host's visual replay and is available to custom
|
|
139
|
+
* checks — built-in critics don't judge it yet (LLM-vision assertions are future). */
|
|
129
140
|
export interface Evidence {
|
|
130
141
|
execution: {
|
|
131
142
|
actions: ExecutedAction[];
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,9 @@ export * from "./core/ports.js";
|
|
|
4
4
|
export { runHarness } from "./core/pipeline.js";
|
|
5
5
|
export type { RunHarnessOptions } from "./core/pipeline.js";
|
|
6
6
|
export { BuiltinStepHandler, CustomStepHandler, defaultStepHandlers } from "./core/steps.js";
|
|
7
|
-
export { runScenario, needsLlmCritic, applyHeals } from "./run.js";
|
|
7
|
+
export { runScenario, needsLlmCritic, applyHeals, applyStepHeals } from "./run.js";
|
|
8
8
|
export type { RunScenarioOptions, RunScenarioResult } from "./run.js";
|
|
9
|
+
export { LlmStepHealer } from "./core/step-heal.js";
|
|
9
10
|
export { InlineContextProvider } from "./adapters/context/inline.js";
|
|
10
11
|
export { StaticPlanner } from "./adapters/planners/static.js";
|
|
11
12
|
export { AssertionCritic, checkAssertion, resolveAssertion, judgeAssertion, MechanicalAssertionHandler, CustomAssertionHandler, } from "./adapters/critics/assertion.js";
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,8 @@ export * from "./core/types.js";
|
|
|
3
3
|
export * from "./core/ports.js";
|
|
4
4
|
export { runHarness } from "./core/pipeline.js";
|
|
5
5
|
export { BuiltinStepHandler, CustomStepHandler, defaultStepHandlers } from "./core/steps.js";
|
|
6
|
-
export { runScenario, needsLlmCritic, applyHeals } from "./run.js";
|
|
6
|
+
export { runScenario, needsLlmCritic, applyHeals, applyStepHeals } from "./run.js";
|
|
7
|
+
export { LlmStepHealer } from "./core/step-heal.js";
|
|
7
8
|
export { InlineContextProvider } from "./adapters/context/inline.js";
|
|
8
9
|
export { StaticPlanner } from "./adapters/planners/static.js";
|
|
9
10
|
export { AssertionCritic, checkAssertion, resolveAssertion, judgeAssertion, MechanicalAssertionHandler, CustomAssertionHandler, } from "./adapters/critics/assertion.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|