@kraken-e2e/fuzz 1.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -35,6 +35,14 @@ export interface FuzzOptions {
|
|
|
35
35
|
readonly weights?: Partial<Record<FuzzActionKind, number>>;
|
|
36
36
|
/** Capture a screenshot when an action fails (default true). */
|
|
37
37
|
readonly screenshotOnFailure?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Allow up to N failed actions WITHOUT aborting the walk (default 0 —
|
|
40
|
+
* strict). Real UIs flake under a monkey (keyboards occlude elements,
|
|
41
|
+
* re-renders staleify handles); a tolerant monkey records each miss in
|
|
42
|
+
* `errors` and keeps walking — the walk stays seed-reproducible because
|
|
43
|
+
* the PLAN never depends on runtime outcomes.
|
|
44
|
+
*/
|
|
45
|
+
readonly tolerateActionErrors?: number;
|
|
38
46
|
/** Observer hook (progress UIs, signal-aware orchestration). */
|
|
39
47
|
readonly onAction?: (entry: FuzzTraceEntry) => void;
|
|
40
48
|
/** Cooperative cancellation. */
|
|
@@ -44,6 +52,11 @@ export interface FuzzResult {
|
|
|
44
52
|
readonly seed: number;
|
|
45
53
|
readonly status: 'completed' | 'failed' | 'aborted';
|
|
46
54
|
readonly trace: readonly FuzzTraceEntry[];
|
|
55
|
+
/** Tolerated action failures (only when tolerateActionErrors > 0). */
|
|
56
|
+
readonly errors: ReadonlyArray<{
|
|
57
|
+
readonly entry: FuzzTraceEntry;
|
|
58
|
+
readonly message: string;
|
|
59
|
+
}>;
|
|
47
60
|
readonly failure?: {
|
|
48
61
|
readonly entry: FuzzTraceEntry;
|
|
49
62
|
readonly error: unknown;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIrF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,gCAAgC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,mCAAmC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,gEAAgE;IAChE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACpD,gCAAgC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AA2DD,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS,cAAc,EAAE,CAezF;AAED,uFAAuF;AACvF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIrF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,gCAAgC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,mCAAmC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,gEAAgE;IAChE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACpD,gCAAgC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AA2DD,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS,cAAc,EAAE,CAezF;AAED,uFAAuF;AACvF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoCvE;AAED,6EAA6E;AAC7E,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,cAAc,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -64,9 +64,11 @@ export function planFuzz(options) {
|
|
|
64
64
|
export async function runFuzz(options) {
|
|
65
65
|
const trace = planFuzz(options);
|
|
66
66
|
const executed = [];
|
|
67
|
+
const errors = [];
|
|
68
|
+
const tolerance = options.tolerateActionErrors ?? 0;
|
|
67
69
|
for (const entry of trace) {
|
|
68
70
|
if (options.abort?.aborted) {
|
|
69
|
-
return { seed: options.seed, status: 'aborted', trace: executed };
|
|
71
|
+
return { seed: options.seed, status: 'aborted', trace: executed, errors };
|
|
70
72
|
}
|
|
71
73
|
options.onAction?.(entry);
|
|
72
74
|
try {
|
|
@@ -74,6 +76,10 @@ export async function runFuzz(options) {
|
|
|
74
76
|
executed.push(entry);
|
|
75
77
|
}
|
|
76
78
|
catch (error) {
|
|
79
|
+
if (errors.length < tolerance) {
|
|
80
|
+
errors.push({ entry, message: error instanceof Error ? error.message : String(error) });
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
77
83
|
let screenshotPath;
|
|
78
84
|
if (options.screenshotOnFailure !== false) {
|
|
79
85
|
try {
|
|
@@ -87,11 +93,12 @@ export async function runFuzz(options) {
|
|
|
87
93
|
seed: options.seed,
|
|
88
94
|
status: 'failed',
|
|
89
95
|
trace: executed,
|
|
96
|
+
errors,
|
|
90
97
|
failure: screenshotPath !== undefined ? { entry, error, screenshotPath } : { entry, error },
|
|
91
98
|
};
|
|
92
99
|
}
|
|
93
100
|
}
|
|
94
|
-
return { seed: options.seed, status: 'completed', trace: executed };
|
|
101
|
+
return { seed: options.seed, status: 'completed', trace: executed, errors };
|
|
95
102
|
}
|
|
96
103
|
/** Re-execute a previously captured trace verbatim (debugging a failure). */
|
|
97
104
|
export async function replayTrace(session, trace) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAY,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kraken-e2e/fuzz",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Cross-platform random-event engine driving the core session contract (signal-aware fuzzing)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
"@types/node": "^22.15.0",
|
|
23
23
|
"typescript": "~6.0.3",
|
|
24
24
|
"vitest": "^4.1.9",
|
|
25
|
-
"@kraken-e2e/contracts": "0.
|
|
25
|
+
"@kraken-e2e/contracts": "3.0.0"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@kraken-e2e/contracts": "^0.
|
|
28
|
+
"@kraken-e2e/contracts": "^3.0.0"
|
|
29
29
|
},
|
|
30
30
|
"license": "GPL-3.0-only",
|
|
31
31
|
"scripts": {
|