@ia-qa/self-healing 1.6.7 → 1.6.10
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 +111 -0
- package/TUTORIAL.md +128 -2
- package/assets/logoKawaiiGreenTiny.png +0 -0
- package/dist/aom.d.ts +8 -0
- package/dist/aom.js.map +1 -1
- package/dist/cli/args.js +4 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit.js +2 -8
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/diff.d.ts +25 -1
- package/dist/cli/diff.js +176 -20
- package/dist/cli/diff.js.map +1 -1
- package/dist/cli/emit.d.ts +71 -0
- package/dist/cli/emit.js +150 -0
- package/dist/cli/emit.js.map +1 -0
- package/dist/cli/fix.js +41 -3
- package/dist/cli/fix.js.map +1 -1
- package/dist/cli/history.d.ts +12 -0
- package/dist/cli/history.js +95 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/index.js +68 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ingest.js +5 -8
- package/dist/cli/ingest.js.map +1 -1
- package/dist/cli/init.js +32 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/map.d.ts +14 -1
- package/dist/cli/map.js +144 -33
- package/dist/cli/map.js.map +1 -1
- package/dist/cli/run.js +91 -8
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/ui.d.ts +16 -0
- package/dist/cli/ui.js +294 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli-ai/index.js +3 -3
- package/dist/cli-ai/index.js.map +1 -1
- package/dist/config.d.ts +50 -0
- package/dist/config.js +63 -1
- package/dist/config.js.map +1 -1
- package/dist/evidence.d.ts +130 -0
- package/dist/evidence.js +232 -0
- package/dist/evidence.js.map +1 -0
- package/dist/fixEngine.d.ts +2 -0
- package/dist/fixEngine.js +7 -0
- package/dist/fixEngine.js.map +1 -1
- package/dist/history.d.ts +145 -0
- package/dist/history.js +230 -0
- package/dist/history.js.map +1 -0
- package/dist/htmlReport.d.ts +47 -0
- package/dist/htmlReport.js +103 -1
- package/dist/htmlReport.js.map +1 -1
- package/dist/ingest.d.ts +18 -0
- package/dist/ingest.js +0 -0
- package/dist/ingest.js.map +1 -1
- package/dist/junit.d.ts +53 -0
- package/dist/junit.js +150 -0
- package/dist/junit.js.map +1 -0
- package/dist/mcp/server.js +46 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/nameMask.d.ts +110 -0
- package/dist/nameMask.js +0 -0
- package/dist/nameMask.js.map +1 -0
- package/dist/ui/icon.d.ts +41 -0
- package/dist/ui/icon.js +115 -0
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/lock.d.ts +40 -0
- package/dist/ui/lock.js +138 -0
- package/dist/ui/lock.js.map +1 -0
- package/dist/ui/page.d.ts +1 -0
- package/dist/ui/page.js +657 -0
- package/dist/ui/page.js.map +1 -0
- package/dist/ui/registry.d.ts +62 -0
- package/dist/ui/registry.js +139 -0
- package/dist/ui/registry.js.map +1 -0
- package/dist/ui/server.d.ts +76 -0
- package/dist/ui/server.js +607 -0
- package/dist/ui/server.js.map +1 -0
- package/dist/ui/shortcut.d.ts +90 -0
- package/dist/ui/shortcut.js +176 -0
- package/dist/ui/shortcut.js.map +1 -0
- package/dist/update.d.ts +104 -0
- package/dist/update.js +297 -0
- package/dist/update.js.map +1 -0
- package/dist/volatile.d.ts +2 -0
- package/dist/volatile.js +2 -0
- package/dist/volatile.js.map +1 -1
- package/package.json +3 -2
- package/skills/ia-qa-heal/SKILL.md +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/dist/volatile.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface VolatilePattern {
|
|
|
27
27
|
raw: string;
|
|
28
28
|
}
|
|
29
29
|
export declare function parseVolatilePatterns(patterns: string[] | undefined): VolatilePattern[];
|
|
30
|
+
/** Shared with `nameMask.ts`, so both declarations speak one pattern dialect. */
|
|
31
|
+
export declare function globToRegex(glob: string): RegExp;
|
|
30
32
|
export declare function isVolatile(el: MappedElement, patterns: VolatilePattern[]): boolean;
|
|
31
33
|
export declare function filterVolatile(elements: MappedElement[], patterns: VolatilePattern[]): {
|
|
32
34
|
kept: MappedElement[];
|
package/dist/volatile.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseVolatilePatterns = parseVolatilePatterns;
|
|
4
|
+
exports.globToRegex = globToRegex;
|
|
4
5
|
exports.isVolatile = isVolatile;
|
|
5
6
|
exports.filterVolatile = filterVolatile;
|
|
6
7
|
const FIELDS = ['href', 'selector', 'name', 'role'];
|
|
@@ -16,6 +17,7 @@ function parseVolatilePatterns(patterns) {
|
|
|
16
17
|
};
|
|
17
18
|
});
|
|
18
19
|
}
|
|
20
|
+
/** Shared with `nameMask.ts`, so both declarations speak one pattern dialect. */
|
|
19
21
|
function globToRegex(glob) {
|
|
20
22
|
const escaped = glob.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*');
|
|
21
23
|
return new RegExp(`^${escaped}$`, 'i');
|
package/dist/volatile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volatile.js","sourceRoot":"","sources":["../src/volatile.ts"],"names":[],"mappings":";;AAiCA,sDAWC;
|
|
1
|
+
{"version":3,"file":"volatile.js","sourceRoot":"","sources":["../src/volatile.ts"],"names":[],"mappings":";;AAiCA,sDAWC;AAGD,kCAGC;AAED,gCAgBC;AAED,wCAOC;AA9CD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE7D,SAAgB,qBAAqB,CAAC,QAA8B;IAClE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAI,MAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAE,MAAmC,CAAC,CAAC,CAAC,KAAK;YAC7D,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,GAAG;SACJ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChF,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,UAAU,CAAC,EAAiB,EAAE,QAA2B;IACvE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACtB,IACE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;gBACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EACrB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,cAAc,CAC5B,QAAyB,EACzB,QAA2B;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ia-qa/self-healing",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "Local-first self-healing for UI tests: a local MCP server + CLI that map your app's pages to a role/name/selector contract, diff selector drift (PASS/FIX/BLOCK), and apply deterministic fixes to Cypress/Playwright/Selenium tests. Runs on your machine —
|
|
3
|
+
"version": "1.6.10",
|
|
4
|
+
"description": "Local-first self-healing for UI tests: a local MCP server + CLI that map your app's pages to a role/name/selector contract, diff selector drift (PASS/FIX/BLOCK), and apply deterministic fixes to Cypress/Playwright/Selenium tests. Runs on your machine — your app, your tests and your results never leave it.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"self-healing",
|
|
7
7
|
"selectors",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"files": [
|
|
54
54
|
"dist",
|
|
55
55
|
"skills",
|
|
56
|
+
"assets",
|
|
56
57
|
"README.md",
|
|
57
58
|
"TUTORIAL.md",
|
|
58
59
|
"ROADMAP.md"
|
|
@@ -38,6 +38,8 @@ Where things live:
|
|
|
38
38
|
| `.ia-qa/mapping/_layouts/` | elements shared by every page (navbar, footer) — one fix, not N |
|
|
39
39
|
| `.ia-qa/usage.json` | the locators the suite actually uses (produced by `ingest`) |
|
|
40
40
|
| `.ia-qa/mapping/_overview.md`, `_navigation.md`/`.svg` | app index + navigation graph |
|
|
41
|
+
| `.ia-qa/history.jsonl` | one line per `diff`/`run`: verdict, counts, capture source, page coverage |
|
|
42
|
+
| `.ia-qa/mapping/_shots/` | page screenshots + element positions from `map --screenshots` — artefacts, never diffed |
|
|
41
43
|
|
|
42
44
|
Open a browser only when the contract *cannot* answer: the page is not mapped, or the element
|
|
43
45
|
exists only in a state nothing captured (behind a tab, a modal, a mode toggle).
|
|
@@ -54,10 +56,19 @@ exists only in a state nothing captured (behind a tab, a modal, a mode toggle).
|
|
|
54
56
|
| "give me the app's structure" | `graph --format mermaid\|svg\|json\|markdown` |
|
|
55
57
|
| "apply the rewrites" | `fix` — `--dry-run` first, always |
|
|
56
58
|
| "what do my tests actually use?" | `ingest` |
|
|
59
|
+
| "is this getting better or worse?" | `history` (`--json`) — the trend no single run can reconstruct |
|
|
60
|
+
| "gate my pipeline on it" | `diff --junit <file>` — every major CI charts the trend natively |
|
|
61
|
+
| "let me look at it / decide myself" | tell the human to run `ia-qa-heal ui` — **do not run it yourself** (§4.8) |
|
|
57
62
|
| first-time setup | write `.ia-qa/config.json` directly — `init` is a TTY wizard and **will refuse in your shell** |
|
|
58
63
|
|
|
59
64
|
Exact flags: `ia-qa-heal <verb> --help`. Do not guess them from this file.
|
|
60
65
|
|
|
66
|
+
### Machine-readable outputs
|
|
67
|
+
|
|
68
|
+
`diff`, `run`, `audit`, `check` and `history` all take `--json`. Prefer it over parsing prose.
|
|
69
|
+
Under `run --json`, every human line moves to stderr so stdout stays one parseable document.
|
|
70
|
+
`diff --junit` / `run --junit` additionally write JUnit XML — the format a CI already knows.
|
|
71
|
+
|
|
61
72
|
## 3. Reading a verdict
|
|
62
73
|
|
|
63
74
|
- **PASS** — nothing moved.
|
|
@@ -93,9 +104,35 @@ clicking the wrong thing), or a name-drift finding that is not attributable.
|
|
|
93
104
|
7. **Renames need an inventory.** `diff` can only gate on a changed *label* if `ingest` has
|
|
94
105
|
inventoried what the suite uses. No `usage.json` ⇒ no name escalation — so if their tests
|
|
95
106
|
locate by `getByRole(..., { name })`, run `ingest` before trusting a PASS.
|
|
107
|
+
8. **Never run `ia-qa-heal ui`.** It starts a local web console and **blocks until a human closes
|
|
108
|
+
the browser tab** — in your shell that is a hung command, not a result. It also refuses to
|
|
109
|
+
start under CI for the same reason. When the verdict is BLOCK and the human has to choose
|
|
110
|
+
between candidates, *tell them the command*; they run it. Everything the console shows is
|
|
111
|
+
available to you as JSON (`diff --json`) — the console adds pictures for a person, not data
|
|
112
|
+
for you.
|
|
113
|
+
9. **Never reach for `volatile` to silence a rotating *label*.** A counter or a clock in a name
|
|
114
|
+
(`Cart (3)`, `… 3.2k calls`) is `nameMask` — the element keeps gating on role, selector and
|
|
115
|
+
href, and only the label is exempt. `volatile` deletes the element from the contract, coverage
|
|
116
|
+
included, so a real break on that button would never be caught again. And never propose a mask
|
|
117
|
+
over a label the tests locate by name: the tool refuses it out loud, and talking the human past
|
|
118
|
+
that refusal is putting a green gate over a red suite.
|
|
119
|
+
10. **Never read a `map` that exited 1 as "nothing was mapped".** A page that fails is now isolated:
|
|
120
|
+
the rest are still written, its own previous contract is left untouched, and the summary says
|
|
121
|
+
`N of M pages mapped`. Read that line — the pages it did not reach are `stale` in the next diff,
|
|
122
|
+
which means *not measured*, not *unchanged*.
|
|
123
|
+
11. **Never read an empty history as "nothing drifted".** `.ia-qa/history.jsonl` is written by
|
|
124
|
+
`diff` and `run`; absent means *not recorded*, exactly like a missing `usage.json` means *not
|
|
125
|
+
measured*. And when you report a trend, repeat what it excluded: runs captured a different way
|
|
126
|
+
(a `map` baseline vs a live suite capture) are deliberately held out, because charting both
|
|
127
|
+
invents a trend out of a capture artifact. `history --json` and the `heal_history` MCP tool
|
|
128
|
+
both hand you that exclusion — pass it on rather than presenting the series as complete.
|
|
96
129
|
|
|
97
130
|
## 5. What leaves the machine
|
|
98
131
|
|
|
99
132
|
Nothing, except: requests to the user's **own** `baseUrl` (`check`'s link half, `discover --crawl`
|
|
100
133
|
— GET only, same origin, never a `/logout` or `/delete` URL), and `ia-qa-heal-ai` calling the
|
|
101
134
|
user's own LLM if they opted in. Say that plainly rather than implying more or less.
|
|
135
|
+
|
|
136
|
+
`ui` does not change that: it binds `127.0.0.1` only, is gated by a per-process token, and serves a
|
|
137
|
+
page with no external asset. If asked whether it "hosts" anything, the answer is no — it is a local
|
|
138
|
+
process that dies with the browser tab.
|