cairn-engine 0.3.0 → 1.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 +24 -0
- package/dist/adapters/context/inline.d.ts +0 -2
- package/dist/adapters/context/inline.js +1 -5
- package/dist/adapters/context/inline.js.map +1 -1
- package/dist/adapters/critics/assertion.d.ts +30 -2
- package/dist/adapters/critics/assertion.js +53 -2
- package/dist/adapters/critics/assertion.js.map +1 -1
- package/dist/adapters/critics/llm.d.ts +12 -5
- package/dist/adapters/critics/llm.js +32 -11
- package/dist/adapters/critics/llm.js.map +1 -1
- package/dist/adapters/drivers/chrome.d.ts +14 -3
- package/dist/adapters/drivers/chrome.js +44 -19
- package/dist/adapters/drivers/chrome.js.map +1 -1
- package/dist/adapters/drivers/fake.d.ts +1 -0
- package/dist/adapters/drivers/fake.js +8 -0
- package/dist/adapters/drivers/fake.js.map +1 -1
- package/dist/adapters/drivers/self-heal.d.ts +4 -0
- package/dist/adapters/drivers/self-heal.js +8 -1
- package/dist/adapters/drivers/self-heal.js.map +1 -1
- package/dist/adapters/planners/static.d.ts +1 -1
- package/dist/adapters/planners/static.js +4 -2
- package/dist/adapters/planners/static.js.map +1 -1
- package/dist/browser.d.ts +26 -0
- package/dist/browser.js +23 -0
- package/dist/browser.js.map +1 -0
- package/dist/core/discover.d.ts +1 -1
- package/dist/core/discover.js +112 -33
- package/dist/core/discover.js.map +1 -1
- package/dist/core/pipeline.d.ts +7 -2
- package/dist/core/pipeline.js +10 -33
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/ports.d.ts +26 -3
- package/dist/core/steps.d.ts +22 -0
- package/dist/core/steps.js +57 -0
- package/dist/core/steps.js.map +1 -0
- package/dist/core/types.d.ts +20 -3
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +8 -0
- package/dist/run.js +6 -3
- package/dist/run.js.map +1 -1
- package/package.json +9 -2
package/dist/index.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
export * from "./core/types.js";
|
|
3
3
|
export * from "./core/ports.js";
|
|
4
4
|
export { runHarness } from "./core/pipeline.js";
|
|
5
|
+
export { BuiltinStepHandler, CustomStepHandler, defaultStepHandlers } from "./core/steps.js";
|
|
5
6
|
export { runScenario, needsLlmCritic, applyHeals } from "./run.js";
|
|
6
7
|
export { InlineContextProvider } from "./adapters/context/inline.js";
|
|
7
8
|
export { StaticPlanner } from "./adapters/planners/static.js";
|
|
8
|
-
export { AssertionCritic, checkAssertion } from "./adapters/critics/assertion.js";
|
|
9
|
-
export { LlmCritic, summarizeEvidence } from "./adapters/critics/llm.js";
|
|
9
|
+
export { AssertionCritic, checkAssertion, resolveAssertion, judgeAssertion, MechanicalAssertionHandler, CustomAssertionHandler, } from "./adapters/critics/assertion.js";
|
|
10
|
+
export { LlmCritic, ExpectAssertionHandler, summarizeEvidence } from "./adapters/critics/llm.js";
|
|
10
11
|
export { ConsoleReporter } from "./adapters/reporters/console.js";
|
|
11
12
|
export { JsonReporter } from "./adapters/reporters/json.js";
|
|
12
13
|
export { FakeDriver } from "./adapters/drivers/fake.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,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,
|
|
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;AAGnE,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"}
|
package/dist/run.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CustomAction } from "./core/ports.js";
|
|
2
|
+
import type { CustomChecks } from "./adapters/critics/assertion.js";
|
|
1
3
|
import type { ContextProvider, Critic, Driver, LlmClient, Reporter } from "./core/ports.js";
|
|
2
4
|
import type { Heal } from "./adapters/drivers/self-heal.js";
|
|
3
5
|
import type { Result, Scenario, StepProgress } from "./core/types.js";
|
|
@@ -10,6 +12,8 @@ export interface RunScenarioOptions {
|
|
|
10
12
|
llm?: LlmClient;
|
|
11
13
|
/** Wrap the driver so broken steps are repaired by the LLM and retried. */
|
|
12
14
|
heal?: boolean;
|
|
15
|
+
/** Fired on each self-heal — a host's signal that the frozen scenario is aging. */
|
|
16
|
+
onHeal?: (heal: Heal) => void;
|
|
13
17
|
model?: string;
|
|
14
18
|
/** Abort the run between steps (a host's Stop button). */
|
|
15
19
|
signal?: AbortSignal;
|
|
@@ -17,6 +21,10 @@ export interface RunScenarioOptions {
|
|
|
17
21
|
onStep?: (progress: StepProgress) => void;
|
|
18
22
|
/** Capture a screenshot after each step (attached to onStep / a host's visual replay). */
|
|
19
23
|
screenshots?: boolean;
|
|
24
|
+
/** Product-defined checks for `{ kind: "custom", name }` assertions — the host defines success. */
|
|
25
|
+
custom?: CustomChecks;
|
|
26
|
+
/** Product-defined handlers for `{ kind: "custom", name }` steps — the host defines interactions. */
|
|
27
|
+
actions?: Record<string, CustomAction>;
|
|
20
28
|
}
|
|
21
29
|
export interface RunScenarioResult {
|
|
22
30
|
result: Result;
|
package/dist/run.js
CHANGED
|
@@ -36,17 +36,20 @@ export async function runScenario(scenario, opts = {}) {
|
|
|
36
36
|
// Build the LLM lazily and once — only if the critic or heal needs it.
|
|
37
37
|
let llmCache = opts.llm;
|
|
38
38
|
const getLlm = () => (llmCache ??= createLlmClient(opts.model ? { model: opts.model } : {}));
|
|
39
|
-
const critic = opts.critic ??
|
|
39
|
+
const critic = opts.critic ??
|
|
40
|
+
(needsLlmCritic(scenario) ? new LlmCritic(getLlm(), opts.custom) : new AssertionCritic(opts.custom));
|
|
40
41
|
const baseDriver = opts.driver ?? new ChromeDevToolsDriver();
|
|
41
42
|
let healer;
|
|
42
|
-
const driver = opts.heal
|
|
43
|
+
const driver = opts.heal
|
|
44
|
+
? (healer = new SelfHealingDriver(baseDriver, getLlm(), { onHeal: opts.onHeal }))
|
|
45
|
+
: baseDriver;
|
|
43
46
|
const result = await runHarness({
|
|
44
47
|
context: opts.context ?? new InlineContextProvider(),
|
|
45
48
|
planner: new StaticPlanner(scenario),
|
|
46
49
|
driver,
|
|
47
50
|
critic,
|
|
48
51
|
reporter: opts.reporter ?? new ConsoleReporter(),
|
|
49
|
-
}, scenario.name, { signal: opts.signal, onStep: opts.onStep, captureScreenshots: opts.screenshots });
|
|
52
|
+
}, scenario.name, { signal: opts.signal, onStep: opts.onStep, captureScreenshots: opts.screenshots, actions: opts.actions });
|
|
50
53
|
const heals = healer?.heals ?? [];
|
|
51
54
|
return { result, heals, healedScenario: heals.length ? applyHeals(scenario, heals) : undefined };
|
|
52
55
|
}
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cairn-engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "An engine for self-healing E2E browser tests — discovered once by an AI, replayed deterministically.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"e2e",
|
|
@@ -29,7 +29,14 @@
|
|
|
29
29
|
"cairn": "./dist/cli.js"
|
|
30
30
|
},
|
|
31
31
|
"exports": {
|
|
32
|
-
".":
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"default": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./browser": {
|
|
37
|
+
"types": "./dist/browser.d.ts",
|
|
38
|
+
"default": "./dist/browser.js"
|
|
39
|
+
}
|
|
33
40
|
},
|
|
34
41
|
"files": [
|
|
35
42
|
"dist",
|