{"_id":"@ia-qa/self-healing","_rev":"114-26cb658e3b9643f85508b1123e8a7715","name":"@ia-qa/self-healing","dist-tags":{"latest":"1.36.0"},"versions":{"0.1.0":{"name":"@ia-qa/self-healing","version":"0.1.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.1.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"d1eded2aab0450d9c81705230c3712fadb1a94f2","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.1.0.tgz","fileCount":54,"integrity":"sha512-r/EE2Y4uPhTuRbn9R6jdshulnaJD2yiLf5trNv/U1uRGxLro9o0Ca/AxSnVGqvND8RYzhAgoTeMbBoAvdPofjQ==","signatures":[{"sig":"MEYCIQCiRu+V0D4Enc1nhWylwfuZwuioZvooYKzG+CiBhSD8rwIhAMnTVsvEbnmp22BBylRLYhbo0HspMXMcSd8oe0f8cQMs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190414},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"03c6e1799008a47a7b902a48f3fb618c13c28cd7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2","playwright":"^1.45.0","@aws-sdk/client-ssm":"^3.600.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.1.0_1784206602221_0.32379917542407477","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ia-qa/self-healing","version":"0.2.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.2.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fb3b59ec375d72d28b561ed97a196294d21490da","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.2.0.tgz","fileCount":54,"integrity":"sha512-IGwf6u70jNjRrhdBpukic1JvB/N8VFJKDcWy6kczUIR6o/VO43cx8VLGoP4rzk5rwRqEvSpk6UsUN6D8OHXvBg==","signatures":[{"sig":"MEYCIQDEY68qwj7PyPJ2dcLK1jggXS+E13jvoo68FN3nF6RKdAIhAJnMXclB0zQXKcN2DU+b+KFG4WVbCClN0fDj2xpqdF5F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220796},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"369ef33b1b9ccbb9710fc7803f9e881ae5dfc242","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.2.0_1784210479613_0.5264958501433188","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ia-qa/self-healing","version":"0.2.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.2.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"68e758573e1849cd91a1034483148005b2b1761e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.2.1.tgz","fileCount":54,"integrity":"sha512-zhlqSFMRVHx7ZNh8JCEAMe2OyQuan3B2Ux25mCyCsIkBRzjMX16i9k3yrGUj9uUjmvWBmv9fuxllRuXCs+qSKg==","signatures":[{"sig":"MEUCIQCR27c3ySvLFIvUryLbAaTBxdCCT9r5GWQeGhkLv8QgXgIgQvc4Kp3HF/gGGfYvKWE7nmZE68M6agAgVI5pB4albe0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220866},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ff76c8eecf4be324204056f8b95c5a328a4c3b37","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.2.1_1784215378635_0.6866468561707126","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ia-qa/self-healing","version":"0.3.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.3.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"c63819e511c897258718e34377691ca1bd6fcc6b","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.3.0.tgz","fileCount":57,"integrity":"sha512-pBG8TSXedpgR7YTbvXj7VYB9MODDFYbRmEjMGkWTQVDz+L38+51+zhdRmAoIXBVoA4L1snPYAN7VkZ1YMoZWjw==","signatures":[{"sig":"MEUCIQC+RQ44OP5ru8lpeVBlky7S6+nyzhSzZ54PaLHNNWgmHQIgIPaRCHl6gNxM/VvwBxmG5a7A180v22fZXUQFl+M3Ias=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274748},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"bad1284b330f044009c3678fe80930d728c74d77","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.3.0_1784216621696_0.5330791939439643","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ia-qa/self-healing","version":"0.3.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.3.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"a9ba10d0d45b2b95fa4ab99a33b054105fc28257","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.3.1.tgz","fileCount":57,"integrity":"sha512-JTKpnKLV0PCcQpAoCpkOVagDRWgUxKLJvLtJHdabFUbJJqBbZuzqCciaDAfK9nc8GeZN3X+dqjuCSJIWTfWYyA==","signatures":[{"sig":"MEUCIDk61vVkkOdas7VhlaAc4xbPjHo58n8kpTzoUISPlyE0AiEA6jQjPVVT7xtoHGBlA2uiBWrFzHYgw/KorJjwM9ICtr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281387},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2a5146a55b0705264352f36f575ce686f4e5bed8","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.3.1_1784218670744_0.3281100319262149","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ia-qa/self-healing","version":"0.4.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.4.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"92c49a131aacc4628b2bdcfbab80c12166e0773e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.4.0.tgz","fileCount":60,"integrity":"sha512-eU0jLPEb/LNbR9JtIceoVqmbNPze9Yk2ikc9GG8XSuF9xY2e0VeLd24Q8esXAxBY+WxdIhCDNXyP61I6y+xX+Q==","signatures":[{"sig":"MEUCIQChOtij2PZ8ZA1hE3ZXhpKJ/o9uLrD8y+xgkCpfX0SUCwIgNx0Rws5eFHFHnbY2CvMJaTwK+wgO6BberoBECqVDBvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322613},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"c54f067c7356d0e3c96934bd3084a5d34e078ae5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.4.0_1784229426585_0.13091278561940745","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ia-qa/self-healing","version":"0.5.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.5.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"1fe2096f44113cc3a92ff211b32429b18cc21529","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.5.0.tgz","fileCount":60,"integrity":"sha512-B6fwTQ0+eyObpR4IBxm5kLoVOmhgn+QL9sGwyY8fDPcZ0lctQWCWKpnJ+8XhvFuxhOnBheEjXVzgAmU+2+PTBg==","signatures":[{"sig":"MEQCIE3o+PqHEwLrYW7Te77Wfr4PDq7kAd5Lfrq4Qd1tPDOBAiBoUkLtpheE+h1plSLqo4K6q+EqYoSpv+zISdrnhPU/Gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351714},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"69962a9e6cfd62da4daabb69e8710707134749dd","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.5.0_1784231393214_0.6698492378886052","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@ia-qa/self-healing","version":"0.5.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.5.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fb953f7db22f80290769373e20b955b1cf3780d3","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.5.1.tgz","fileCount":60,"integrity":"sha512-EH2ApeUu19XN/5psvJnFVfQlJEcV7L7jLreEwjzO7a7na0JLeTdQdv6bJQOWYJgSL8VaXGC2x9UxLpdL41bNpg==","signatures":[{"sig":"MEUCIQDyHNlsc41VtTkE93oMbyIFDXFSTHcrSTNcrFcp8scbjQIgPGYKR02VTulvbjmlsRpSbEmUJOYjPxbmZJNAeL5Eojw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362910},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0696818b9532ad3181dc6e94addb59b7bef25b9e","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.5.1_1784233944313_0.3958175804454127","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ia-qa/self-healing","version":"0.6.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.6.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"f927776101d2c29f28772b5dd67ccb17f0964000","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.6.0.tgz","fileCount":60,"integrity":"sha512-No3ROna7/uw1uMVvgLpWG55ty5C+HOXgRjOIXLW/i2n3e3egbwrztij+LK5HKXKdH4Z0Xd4gNkpUYdUtwMaWoQ==","signatures":[{"sig":"MEYCIQDfjARiPLy04edFUAU4TWoaHGqYmASoAGeia4oEZNAomQIhAOWvJXo5BojHrUIwPsb2Z3owTO4f3sncEjn6YVoee+Mu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386293},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"be3116f3ad7537e83c9bccc33170d8bd4f72958b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.6.0_1784287215803_0.4146864629555713","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@ia-qa/self-healing","version":"0.7.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.7.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3f4d101f4493c2810c0e91689b853df7088216b8","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.7.0.tgz","fileCount":63,"integrity":"sha512-cNiifiKKL392nUzQWwaKmdOj77HOfK4DX1CxUZi0olMCTeGez7qVFRrgzVnYHoSv5sgRryE8JeqzLCM9Rtlaxg==","signatures":[{"sig":"MEUCIAytTkbp3wea8aHdRJCrFyLJdj3O87VI1cu59UNdPEfhAiEAl+8ikl0w8VhnMuNcwJ5SIIm3pjaBFC7jLUey6Kby59Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413446},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"be3116f3ad7537e83c9bccc33170d8bd4f72958b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.7.0_1784290850080_0.7790509890472312","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@ia-qa/self-healing","version":"0.8.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.8.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"75223ad1c055b6db37f7abf10808f6593a3a22e5","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.8.0.tgz","fileCount":63,"integrity":"sha512-siLe9NRWAt15VWGNlzL5jx3vhq3XzhrSOa6KlYnjjg+/uGGAs0tAdJ/J3GE+YKXM9ArE1fuI4Cpl3wXWrFd7KQ==","signatures":[{"sig":"MEUCIHZ44Y1OYuBiVN/2rI3hzIeiB+coj/XN0B72wTZoJJhXAiEAyiL/8/NwwdFRk+tumP2gQdYNL+HbTXnQ5KyP5h35Q5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424290},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"acec16383745c3d1f981122d103776e9f4f364b1","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.8.0_1784293151371_0.6138994347229341","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@ia-qa/self-healing","version":"0.8.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.8.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"02f0eebe1d95322b5735e24058615948bb180e37","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.8.1.tgz","fileCount":63,"integrity":"sha512-YxWRjA7tOzzmKcMpQ0U9mYw+9Aup6LNv9uHJrRC05JkdQhdm/deOUOyHlaffIEZMbi3hmGiQnqsZeFCmjxCi3w==","signatures":[{"sig":"MEQCIDsEq48sNBEdhM2p83g2HWVwrM/dU7JOUIzdd9hJxZAjAiBqlrJwBcBbtDHKVPmHEvvRJenuO+10/Uy4itILQRjLfg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424467},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b5e777084a0825edf23f95d23f0e17cf3221a100","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.8.1_1784296101641_0.36616570967508744","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@ia-qa/self-healing","version":"0.8.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.8.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"5f90f9b75b32c5c9ae0389b2a790c569d52aad70","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.8.2.tgz","fileCount":63,"integrity":"sha512-HiarDkLTb3Lahpk/XD8g8sJG9nC2SDwwbZXZrOjPXsNP4U4omNr+6iyKUySChcF6yHLkme+B15z1TXkyJfA9Ww==","signatures":[{"sig":"MEUCIQDUSai3aKzO+/aJTCA6ka8PYFqVYmV+xJHKJYwUSpU0pwIgWXt0wtEcXoyMOXiqurqmkGbHYsew6kdtC/FVgMU1ac4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428879},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b5e777084a0825edf23f95d23f0e17cf3221a100","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.8.2_1784297337068_0.08591501352816033","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@ia-qa/self-healing","version":"0.8.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.8.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b3bf1adee0c1e9b3696e8f5b863c2d687289ec6c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.8.3.tgz","fileCount":66,"integrity":"sha512-yLJS5V64EpvMcygulfphclYBVJwOtCXiOs/2fWnrO775PrhK8g7bXpnBRHukrKHgAgjuM4NHycxWbflmgrmnbg==","signatures":[{"sig":"MEUCIBGjV5FyUj3urATdsTnlV2qZspVz04NZuFx4KZta5ppWAiEAuAGZJRFtlJ3X2Gph8dl4WZdcP5Am6xVAf5MyVxFqKR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440062},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"580ee6fcaaf191124b052a93b7dbbabecd94f8f4","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.8.3_1784299558560_0.5815207301689327","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@ia-qa/self-healing","version":"0.8.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.8.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b8182dfb0ce41767fd3344f3184ef4aacb86d6ae","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.8.4.tgz","fileCount":66,"integrity":"sha512-ai0eD386ZmADzvUZdYbGOgKKdU8nFgwe9mH3r9HTn9446v/5HhXMU6oqAubrAvLMdPx19p6B4raWcOnP6u3uYw==","signatures":[{"sig":"MEUCIHgFcNiwzyhu/i3T9PQwkfijgK0NNAYf/GIC79gc38lYAiEAl6EYaniVnag+oOBJd5mDdQ9azkZ5C+VIrjJa5IL9EWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":442998},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"50629c034b6e894eaf4cffa52c56d268b2008f90","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.8.4_1784299776271_0.6189704301874963","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@ia-qa/self-healing","version":"0.9.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.9.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"d76afb031e06fa4ea131aa1d30c6027775d24b22","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.9.0.tgz","fileCount":66,"integrity":"sha512-FmmPrOVipVQTZ9aOKIFbSckZq3buw1NIPCVERV2kJkEVcu202SBThPjJPuZB9YdBQMVK0ccdnGjiss5DtmwPYQ==","signatures":[{"sig":"MEUCIQD1bERCry/NSj+wNZKSxG6LOcDJ1XmkqMkyFd/bEvn+3QIgFRHx/41z0oHMmx3iH0aRftrnJJSrdCv16RHerlARcRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445024},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b9f098bbde4ef4f8daa1698c14ffc588f00629d9","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.9.0_1784301974944_0.7310874912098373","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@ia-qa/self-healing","version":"0.9.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.9.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3af0f5b57a00b7f24b007cce21d7f9ec36b0741d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.9.1.tgz","fileCount":66,"integrity":"sha512-7X8O8sH8NZQ57PsMvq6/PkASQVebg4eZxwj4WcZPXbh1VzpxsZq0JVrXOMlfmc8Iehf3sJwZOiKXBqdHNHIhuQ==","signatures":[{"sig":"MEQCICdjFyWx19KW0Rz71dzwONA0Am1ZkLrLSB5wN0XsSeXTAiAR0u9U/fYby5JW4dQ1XwjuHaGt2pEuVtWhSyKRu/ECjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447259},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6d53e033f4cbe885f2c58ad2d05698c16f5b4d1e","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.9.1_1784302818251_0.8687805360790151","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@ia-qa/self-healing","version":"0.10.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.10.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"7ce3fb21047529bd015014fa9434c99254ec1bd0","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.10.0.tgz","fileCount":84,"integrity":"sha512-5w3eHIsnp8nlvNuwW3zS7JdRdH8y92EPiU53BHqwWnDHqMTdY+t9CcUU82M0UNMqAbG9Luh1XapcVcEPvQT0ZQ==","signatures":[{"sig":"MEUCIDwuUyp3S8xYD1D063MfpdxR7mNYo2TKH65Txk+ueR2xAiEAgtMhU/Xpitll03rAjIh93/L0B/j9ulYPajiR0uh/gq0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538405},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"48e550d31a1efaa216308895d5d79c35ee775f12","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.10.0_1784357417473_0.6958985411521266","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@ia-qa/self-healing","version":"0.10.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.10.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8e92e4307dd27738edbf224a3ef150cc0647b4cd","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.10.1.tgz","fileCount":84,"integrity":"sha512-ldXS46Agi9DChZkyqmRB0PcYnfvt7dDkBcbbcDwM9KHHt5xaE5+A1Y0YUc5EnFX+/9n7jdopdMN9cT3yz9MF0w==","signatures":[{"sig":"MEUCIAGVpwcEpoRu6Q9s1lwiQeKiJl+lApmYbo1qo/KAbkTrAiEAqEZ+Veb3/61OKQYCt8/TO7+m6z8YdbODrz4/TZ2V9FI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538690},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"988532c4b5dec5541e9723ce5f7c4469d5e863f0","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.10.1_1784367877758_0.48283362466713964","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@ia-qa/self-healing","version":"0.10.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.10.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"067cfe0a4cbe0a1e06406bdaa86351594ca7db7f","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.10.2.tgz","fileCount":87,"integrity":"sha512-U4+CHX/R5uY7fQUDOL0f7wxbIHkQheVf4nI7kCbePmvWhbZ7Q85Gs3EId+Y5gyPEPUyCHeLorD3jxW6dET5b8g==","signatures":[{"sig":"MEUCIDi1yQieGA9ayo60biryoADfZBwu1OkdmQ6Zt4ovTJ0dAiEA1lsIe7ffk/tgxwUCRPqxCpBRoOuY2XvfzQmj7Qc+VFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569967},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"7d4d9b75d1233d63710f5dbdd5fc43bde106811d","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.10.2_1784369945834_0.3428452086906888","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"@ia-qa/self-healing","version":"0.10.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@0.10.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"1d0fee82e47b0423a8b066ddfd944fdfe19f2bc5","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-0.10.3.tgz","fileCount":87,"integrity":"sha512-c1sxJ/+52cRvTFLJZ3rktVE0ZOpsUW31n6/9LtE5cgEknkZIUfrLR32tbWDikRe6WTpIHF3HwlHHlxx0NhJkVA==","signatures":[{"sig":"MEUCICButhU0Spvlljt70G5tvQw7E0GhCb9XDZxVn8WFse9KAiEArVqOHgH3E7tACZb/+sgl1Pmf0PDTu+LUZseG627nyrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":574492},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"d0b6099ac3804147566077294d557d13be6d86a8","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_0.10.3_1784375387072_0.6031942356397832","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@ia-qa/self-healing","version":"1.0.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.0.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fab50f81f8cb2ba291d047591b04085b4da9102d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.0.0.tgz","fileCount":87,"integrity":"sha512-PAKGS7D+6dHFo4StSgYwRHVVqGHvoVLarXO7dr8iI86JsT5ak2M9V9Q1m1obQoMIkKOje94JRT9mDVrtkCVhKg==","signatures":[{"sig":"MEUCIF+j/nwBAyhkyhSfwXM9e05HdvJutyYdvR8M5HbTK/+1AiEA+HgkPHvOMhxofyHTA+pEoAHklOFRy8BUj1/yfrAn83M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":578175},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"981f8a0b573c34d2287afd3d8343ac1abf3de994","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.0.0_1784382186327_0.29531135088167937","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ia-qa/self-healing","version":"1.0.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.0.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"162e96ad45ec97d20d38fec12606cff516ea2233","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.0.1.tgz","fileCount":87,"integrity":"sha512-JzEUVnhYbw1Y2LoDkAarHVf8banU02CYzmxXm000IliYYmIkp1hz/5DTwei/CJ2MLPszFYQ3YzoVGT/gkt0deg==","signatures":[{"sig":"MEUCIG7yB3j9n5fuL45YoDXlXMOckYpdBvP2hUkateYBw9o2AiEAuDAYg3Uw9X3dYYsEq3ieI+uw9IQiWuFg34u5uPkJ8O8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":579031},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"ac0127bf97048feb26ea30c673a090ccf939e398","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.0.1_1784383344133_0.1219071792613724","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ia-qa/self-healing","version":"1.1.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.1.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"593fb56ab28baafa67051040ed90bc40a54873c7","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.1.0.tgz","fileCount":97,"integrity":"sha512-J8Gdxit3TvC6F7VvoAjwScfe2EzQPc2qiC5AqndRKKgmDaCWHj+lc+/JlvEksYYsaWyvtgT8J8Qh0mw66Vw4xQ==","signatures":[{"sig":"MEYCIQDWSaPeuM8LByr4G02C7lQrXk/6RFHWeiYZper9+SzUbgIhAJTZ4eSJFnfV2Xwm4TrWyCF7iObr5CBQyFj/FUcedrPV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":674808},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"bc5a4ecc5e75fb947201b72e6a3c49a43879ef81","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.1.0_1784465831170_0.49058339980466736","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ia-qa/self-healing","version":"1.1.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.1.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"a2a232210557e97b64d0976113b1fbebd2dc3dbc","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.1.1.tgz","fileCount":97,"integrity":"sha512-80+bx49zbHZNpiRAi7+5r8FN2vbwXMe1bSHTuSiv2q4JKDRzzVsrpAil3BRVSpYl1lRQk92C9yXV5YTEjM0oFg==","signatures":[{"sig":"MEQCIGTUhqshNvl4O7IYVPpn+L6fAPPrrTd+m/j6QbqNoir+AiBVl00CQDqtEVjVvG1AapBrvfsGxEZ9h37NksigRt5RfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":676154},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"10af4de3ad6548476b6790a6c4802137aa5d6513","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.1.1_1784467104530_0.42611036801445734","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ia-qa/self-healing","version":"1.2.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.2.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fb7a891c2ea7cdfe27388775083ead0037477966","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.2.0.tgz","fileCount":97,"integrity":"sha512-A8yMkVAerAgpttkRMk6o+58PaPbWbr5JxT3rQX9FfrnYjtZD6EFH0Hi23525xuWpX8U52gp3Tt0GN8chqZCJNw==","signatures":[{"sig":"MEQCIAiFiMRvjiNPHD+Njkq4O4vriLAwqoZU7GDWbHxPnuJUAiBYWiptwZv4n7VvFpySJbFCtqNoUgcXBVsbc4fT7rA5Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":689045},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./package.json":"./package.json"},"gitHead":"1b031c76248c48351e169807bea6c0209ec89156","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.2.0_1784468355332_0.3486114586217963","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@ia-qa/self-healing","version":"1.2.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.2.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"c3181ddc1393f95d8c23b4a8f2cf4686cbb17606","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.2.1.tgz","fileCount":103,"integrity":"sha512-I/GM1XEujrcQ/UJv6slZFN1oYMF5gI0u5ecnMCOaiun284aiGqskafQzu6eTgWMeZiEGgR8K2FrvtDcpeooNUw==","signatures":[{"sig":"MEUCIQDFgGJvzkvAQHpprWOl+qd/I4lqyHvx4qXOCmcav2k5gwIgWOzEaIvTf+VkjbxzUDEbM5VdRoN//pSQ7gAh6jka/Q8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":702860},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./package.json":"./package.json"},"gitHead":"88b0a8afff7f47d41c28c0bc7be73accdf286ef7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.2.1_1784541633433_0.7239573086459914","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ia-qa/self-healing","version":"1.3.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.3.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"a291910cf999d7d7f1442e4c60a421155a4bd69c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.3.0.tgz","fileCount":106,"integrity":"sha512-eytgOYU/XowP7cVLhEbMZzwt6V0HJzolKAF/YRBELsmfcqlGWhzBAh1k2x/uUeBuTR6d2hjI8RKsFva2l24Svw==","signatures":[{"sig":"MEUCIGiBvDVbDjJ+5KlnMmr38YXWx8BW03sSoYm1sXUv3FZ/AiEAtlmaFpSCGPUtzQzxKa9zi17Fl07WIH3MLzDcUT3gBC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":723263},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"09e67d49891646a579724a9efc510a0f2acb3047","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.3.0_1784545186642_0.6790611994281068","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ia-qa/self-healing","version":"1.3.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.3.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"5a619d591539f9bf845307a84e9b959aed919089","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.3.1.tgz","fileCount":106,"integrity":"sha512-b0yy+7h4vHtGVWXL278s3vqyTy4GkMKw1T4TXJ7/TkJisF16ttZX69Zbi+9n01pN+aIyaT3GgQLWos3y9gyMAg==","signatures":[{"sig":"MEUCIEqp6X6Who8jgrx10Y17OakmStwN/ALvuMtdr1c9pN3qAiEA2/C1yYkqSKHfN6gndTnJQLNPiDakZKepXNFu0CDZwjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":723312},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"8be3c9f30f937e7e601432086c1c1e99d6abcebc","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.3.1_1784554855258_0.13777563419552363","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@ia-qa/self-healing","version":"1.3.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.3.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"5b6dbe17bc6860da188991759b83b2e1d2029a00","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.3.2.tgz","fileCount":106,"integrity":"sha512-TRQQdp/Px1SOWweEFUZOubQaAv4pckCwM3jqfqdcTyfczklYxPRr16Zb7N3J3MReRuEH6yGE3p/yWY8lB/7xEA==","signatures":[{"sig":"MEYCIQCa3qkxdW+WbhRewc9ixlErdD+B4IX2koOOAAXpOW4swgIhANvc+Jt7j8tDdtOGFzenpJ2tUr+aix7xONwK16XSrNFX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":731050},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"10154152a7de8dbcdc31345a89ae86d8bef7e834","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.3.2_1784560646234_0.0028675742403152515","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@ia-qa/self-healing","version":"1.3.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.3.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3eed1b713865429e9156b07808b94c2fa3acbcac","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.3.4.tgz","fileCount":106,"integrity":"sha512-xAw5UqyUYdVVk/Je0qf72kfhDm4jHwmVAUe22Y3a90SMxGCZwNuTzwP0BVbb6LRHFZr1ZcRMFtuQkVPs8xqtNg==","signatures":[{"sig":"MEUCIQDsAF6GTNwR9ZWD5YHY71xjEaSjejHA77IRA5lwGpeOdgIgM2DvGSd7/TNUSCJe11uSt/ptnVHhEmBWfkuWoDCtMm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":745317},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"91ac5b99abb35bc1cd1e6bde414cb9ab3c04ff0d","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.3.4_1784616634577_0.5980756956278832","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@ia-qa/self-healing","version":"1.3.5","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.3.5","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"976ae5d8d58683d91f66b52bd3df07c50507e147","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.3.5.tgz","fileCount":121,"integrity":"sha512-Nk5+JW0CoOwN2ldE2RfzCQEnjP1bwJN3MQ2/DrV5VaWHTsgBqYhGcUb86oYg3qTQF7zDN9bb2QfeQCHKGexZNQ==","signatures":[{"sig":"MEQCIDZ/SFxKkSqfljRlu5qBN6VjBqXdPHN/NN+4gdFm95deAiBW3kaC9Jw95m8S/IZplQdp5KywAeShvvhgfkVjnn0HtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":808371},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a39e1ce517fd385e5ec983d3d62e035e2bf7c854","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.3.5_1784623183359_0.9444004175580671","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@ia-qa/self-healing","version":"1.4.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.4.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"f19374537836e5fe495eaabeebced1732251b4e2","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.4.0.tgz","fileCount":121,"integrity":"sha512-kQoCRPbray5L1LADreMZ7rEmQ9UxB3GI9mhOkt+icbfoV+z5Ssm/MmtCAHV8xynr2vABu+X4Krr9rnjAP7mvCw==","signatures":[{"sig":"MEUCIDyYJD88WKmnr5NmInOjlVmZETNMGF/LqPynWPCYDkgtAiEAxE7tDwnAnxQBOD/dpixqB6ISharSamTfHDmo0z19L6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":828201},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"f87731e6130228a19533c0c0de59883c77fcddab","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.4.0_1784641131310_0.3354421177986415","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@ia-qa/self-healing","version":"1.4.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.4.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"02b4657829993fa81f9356b5a373195685b6dd3a","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.4.1.tgz","fileCount":124,"integrity":"sha512-nP3RJLdbKTx6gHAEE+ecu3WYn4rbJ/8VqIkjgtfPC42DGaL/WHDs+/3FUZj+lM+Xy57lfErHzrrQndO9I4zaqw==","signatures":[{"sig":"MEUCICmTNm1bLpdUyP0vhackBJSKpVgKVHaESLp0lwRbLn+hAiEAmrKadvH+GYsRAACylv4SCyVsFAqf2aLDPxjL2NM2c+o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838797},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"398ad3f9988d2a70e9dad09f58a33da9a9d056fa","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.4.1_1784653123736_0.7113304514754395","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@ia-qa/self-healing","version":"1.4.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.4.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6f01982b7437d39f1ec77d6a79b2e4a98a97eb3b","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.4.2.tgz","fileCount":130,"integrity":"sha512-wVrKDnKLX4XB2quxclqKTOdXEyWE1F42/uCV2KIENza95wEttCBKL1/UjacJ3jdGA7oowWCEiULZo7uKNUc2bQ==","signatures":[{"sig":"MEUCIQChxRh8s4guAxNQk2lsbbV9zBQbdiPGQpuUVN9KA2qo4wIgPeSzy7BOBmHzXc3680QE6IbETZ1v9BwmBL+M01pufCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":864040},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"32121119104a641479c84ffb3615c7f5cc3620f7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.4.2_1784713730427_0.7166529151720433","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@ia-qa/self-healing","version":"1.4.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.4.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6e69aa4e9680bcda6518cb0e420e885f726dfc91","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.4.3.tgz","fileCount":130,"integrity":"sha512-THEyVYw7IveuUbC78y/6mkWL3465MwfYeYmr5dA8izacUUtIeXFkMlSNY3A6sAUOygi80FRFhg6wCavRlyDutA==","signatures":[{"sig":"MEUCIQDn0KvpR/0EjrWeU5zwa+oenPjZkadAUX2895j8iWRYIQIgNKErjrCFAEyB/fZZzminu1vkgxslaG4THA6gfntZ7bI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":871065},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"fbc9cbd8328375fc105cda800ec46bed6e5fd3b5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.4.3_1784722518263_0.46480183225663096","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@ia-qa/self-healing","version":"1.4.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.4.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"553027241dc34faed290b767dcd69a9f49b0614a","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.4.4.tgz","fileCount":130,"integrity":"sha512-BUkvMO1rXkDQzJKk5mTt21wg4jJAYxZySDWALfmxiZiTMy3SVUCGNY2hqs9iwAj8xqD88N6QOKT746H47embEA==","signatures":[{"sig":"MEUCIBNm4Ft0s3+bzpDDmud6lgw8FSXkx5TYve4nx+LsSQOAAiEA/gDofXwnVur8Di584z2uISsqXpyZynESA37R226gE5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":873188},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"6f708a3c8fabaf44bf7ba7d007d649e71fb17933","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.4.4_1784724454129_0.5894024440784582","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@ia-qa/self-healing","version":"1.5.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"9c3cbff17d6f3ff4198ac7e209a0a8b1a25a8430","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.0.tgz","fileCount":133,"integrity":"sha512-rhpq9kRz8guihWusZNLYXCtLs7DzVLl4QPK0PKwnAUDies8zuPgJ4goqsTJYzE7GE+w8eTLs+XVqq8k3S4OTOQ==","signatures":[{"sig":"MEUCIQC5sph2Kk7IyhuHg8oAMg0nVPYLURGryd/nk+WOtP22vAIgdsEN0d6Xt+r4gRsSTJc+HednXqH+gZmIpRR8dAHHYww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":888739},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"7d132be52849db5e61478f84e431f2ab47a0f4ee","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.0_1784729903698_0.5647060481830875","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@ia-qa/self-healing","version":"1.5.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"9a617caa824a4416344760a4ebd94fb7231f18ac","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.1.tgz","fileCount":136,"integrity":"sha512-tWL6q2o8WP8ctJnQPPqHuphKPJLQ0ajrSbm+KWMu2cCykLLdNiqWYp8OjS5BmKgMvFeAR/ImL2fngRiAuV2Tfw==","signatures":[{"sig":"MEYCIQDJ6OwRqURLtstR30GvtJ+V5H+ztgS+MrdNZTewmvrAcQIhAL4/NUXrhc7KwMMn7cAD8oPTSLmz2v2789HSpbeZQEr2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":894833},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"f7a886c049d6d5b10b1eed860fa23cc428437cea","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.1_1784795791436_0.254781196346354","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@ia-qa/self-healing","version":"1.5.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6970779b8bef55a66782dd77b30f092b9e82cac6","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.2.tgz","fileCount":136,"integrity":"sha512-KWfVfJIqB/FAxoNKcAASjhzWOkMaBfiCldJqWHb0iBcmwgyB2Qe32tiJ0UPteIC4xChVhh7AyEudI24pfnELmg==","signatures":[{"sig":"MEUCIHcKvWwLtv3ZG8Our/VCdpGBHCbbvxTzHQp+go8JV6aBAiEAuBn6G4YV5AYBVNtUYYngvlmhPlT+kzFrqmcoJ3bvRF8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":896655},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"9bd18bb0e30bd1b24f3e828297bcfca1158c97bb","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.2_1784983533581_0.8696995163342893","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@ia-qa/self-healing","version":"1.5.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"34385469b9875baeaa8a1fc36607aa10b8a2594a","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.3.tgz","fileCount":136,"integrity":"sha512-O+WNC8nQSK760ln7MW9+Se5zGts87jsZ1FZf1U5dpsU6tjvBSmk5j4QU5hVwaaFdHhl0nRYVGxvv6t4NKkxzYQ==","signatures":[{"sig":"MEYCIQDSA2Tr67wK59/rysVxyBtIHVO84bkQE1sEeF8/JTFahAIhANsQ8qwotLoYZ4ZIBPiO+Ay3MJjfA/swza3Sg/TGi/aC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911209},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"9bd18bb0e30bd1b24f3e828297bcfca1158c97bb","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.3_1784986234626_0.19530885568283396","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"name":"@ia-qa/self-healing","version":"1.5.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8f7754b94a6e3b3e2cff4c332ff2948546a0d0e1","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.4.tgz","fileCount":136,"integrity":"sha512-aRpPkrQeZ1M0OHYBzlSJEvwzO/XWam7gBTbMXEjYZmIOlvcKXwqjDVBlcsBEeHcd2U2PHICJQi6xbb55rYFwag==","signatures":[{"sig":"MEUCIAWvoH1uclppSTIzA4pf+XClY5j6gJv2+DishgJeeZDpAiEAmFmsJnugOv0M1lAsrLYA57Ket1Id8eTT5BvMSik3xb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":915111},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"4c559cb4fc5bf1058b9c828984b7c8818a9b56ef","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.4_1784993903674_0.5832746419007371","host":"s3://npm-registry-packages-npm-production"}},"1.5.5":{"name":"@ia-qa/self-healing","version":"1.5.5","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.5","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"f4664e993f664b911f3385ec55250317cb25179d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.5.tgz","fileCount":136,"integrity":"sha512-RwvsLcm3BiiDrXCjVs6QZOzeliyb/lIJXc8AG4xi9ZGgUo1Usfnembod55IeMOVQUJvkxrrbsykMzQK1HhfcQQ==","signatures":[{"sig":"MEQCICJkzdM1jG+5tH4j/MvfPZ94Z1S+shbK1OHV+ziIoOarAiBPVTeXJkbLRhiLo5UI18PJvwNkxiSS23O/Y9VTVdOFIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":915579},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"55b1c2f5527edb3c0614bef9eb32fb5ca99676a8","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.5_1784995986991_0.5939888703133578","host":"s3://npm-registry-packages-npm-production"}},"1.5.6":{"name":"@ia-qa/self-healing","version":"1.5.6","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.6","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6434e4efff7e6bba2308f8f36db6a8e3e0d0ef66","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.6.tgz","fileCount":136,"integrity":"sha512-QhSCwvGc9US1S0VHWAMDauP5YyBgLG5DJ8xhND+xnYRs9VaIgL3zqCfJDjlLAJXjvwu0QBWpDkGwmS3/sMh0mA==","signatures":[{"sig":"MEUCIQCi1Tr4y4hZU6HIUzu3wm8P9CsnqDIH0o7ggJOzFf4EYAIgN0YoWYIwH3kw2hpr5kJ2QwSPbuzUdxTXSVFohz3GEW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":916502},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"eb4c726ff40b7e65790cd8bed9ad6a96870b5143","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.6_1785000988467_0.5424223196553488","host":"s3://npm-registry-packages-npm-production"}},"1.5.7":{"name":"@ia-qa/self-healing","version":"1.5.7","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.7","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"74bc71724dad5e16ba11d53d0cedac38f50bed16","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.7.tgz","fileCount":136,"integrity":"sha512-r5TFgN/APLNs91fzy4nQSpr9aKWmxrPDPYd1zhnUsO7HSRahGAyKbQc/kyuTmsoNZD7yuOIkqnoc4r/qBcYLZA==","signatures":[{"sig":"MEUCIQD2jzg0WnKzMzFiNYbWlHNt3osbhJz72WtQPwUzU4QcJAIgSayQsusMFKHfSk8/NxLCtp7KbBqSn6VSXLixqz6ee0s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":928616},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"d47cd26d4333e081ea8fd3664f621731a33dfb00","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.7_1785657598256_0.11776430010711136","host":"s3://npm-registry-packages-npm-production"}},"1.5.8":{"name":"@ia-qa/self-healing","version":"1.5.8","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.5.8","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"d792eaf9f505cd0a2984cd5041993edf49c5e0cf","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.5.8.tgz","fileCount":139,"integrity":"sha512-XluiviR+Z9cUAMzDDKd5bktAOoOjH+FeVvAX2VnD11ofElA6/Pf5hoEhEZG5l2RKTOBK73Ebcf25b9pI/ovzGA==","signatures":[{"sig":"MEUCIQDiKXsNmtbmXdQm+wfcrCFs0IqONy1F/U42Sgk5tbMNQgIgLEiZG67iCdcE3puryMt+WWIsEh+tMFK7H02oznBwaPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":940308},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"16aac3f70fcde398dba5e033a9b4150ce298bf01","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.5.8_1785686181359_0.5449504126960114","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@ia-qa/self-healing","version":"1.6.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"c737161db7096aebf81171341cf304da8ba7e954","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.1.tgz","fileCount":154,"integrity":"sha512-QPhSoNW26+cV3Vjkq3ngTF7yS3RcjuWXBKikEZvFJLIV4poisp5B35RZq4By+lYX9j4JVm+rCXuIYEHWuzCfrA==","signatures":[{"sig":"MEUCIQDQh8yXzWSDRNiDDgRa2C9zdYuhjgkkA0ME+nDO+vW4ggIgPE+vLRyHiH5xL5JAVZxGelS5T/NP8UyubmZnGEuH0/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1101701},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"90cc7ad360bf053a5ca6942ac3b172f26161c7b0","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.1_1785831462877_0.9045097654652032","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@ia-qa/self-healing","version":"1.6.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"56762412885b5acee7a1b05bf9cd9a403ef1213a","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.2.tgz","fileCount":154,"integrity":"sha512-BCBGVWUNYSl+m/d71j89UFUYtPlAabMMvE1a70Z/wJb7Rv4KrN3WF/BceOm5pw8eJvSRa57R+8WhWQeqJLGR3g==","signatures":[{"sig":"MEYCIQDlR1w+/DbzmOjTKQRFkkYlSa9xKZ9aFnbgx85LHjCUrgIhAM0zCFXCeR/G6MTAyTsGe+iSJeMWVM54PHdVbTZnVBYx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1111666},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"90cc7ad360bf053a5ca6942ac3b172f26161c7b0","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.2_1785844051254_0.9754934836356581","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@ia-qa/self-healing","version":"1.6.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"9a7a26179bb8e75f23c5502cd548633a1df5d3d5","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.3.tgz","fileCount":158,"integrity":"sha512-lb6I0ZLJv0fP99qVrqIyY8R0WaxDl+vlXL4rp81CHBWbEGmkcNaRJgAwL5tbd2rh/qZekLm6lAIL1a6qQissXg==","signatures":[{"sig":"MEUCIE/jD4aCfFdowRW2eN7nUSEBoVbtGEOAuTLO3jHlQEaqAiEAyaZjC24WjmotqQPR2Oq22JOJF8C8LAIelwtuEE556Yk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1136117},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"cc3f302507fb72720408aabcd5cda4c34b4aa795","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.3_1785862589122_0.29729322571390426","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@ia-qa/self-healing","version":"1.6.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fe78695432fc37bba2fcc19bf813ab4df7708e01","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.4.tgz","fileCount":158,"integrity":"sha512-tS59TXCW+9kSgpHA9OK9TWyBjHGQJ8uhwwrpQDvRRucqfg0+balbaT+jUwPo1v4Ur+CHk1+0+PwLnRIbpkl00A==","signatures":[{"sig":"MEUCIQC/nzKXBz0m6P6rj7YXtzTJh43KNQFk7nCLF0Iqfe+kDgIgAgNezWqzLwdHVYYTWo2AeRI3zg+0Zd9qNn+KiAgROoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1144971},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"61e2677db88091eb622e2c19a137471bd325fa39","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.4_1785926987365_0.5947794281220993","host":"s3://npm-registry-packages-npm-production"}},"1.6.6":{"name":"@ia-qa/self-healing","version":"1.6.6","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.6","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b4f4706a6f21ea5392ce140fa9113a87b0529b93","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.6.tgz","fileCount":158,"integrity":"sha512-BNZju2/r+uuw7fUjhvzoIbcFGr4r3Z9Nm/HpheuVg4b9x/2Zq1zdauGYeTkPrgLBAFWoeUFNufsP8gfGyS51cg==","signatures":[{"sig":"MEUCIQD7qf5FUrOtmsTvDAi/CaVt3U/cX/15OKOFe/tXRy+QDgIgXbOwpmUJ3yKwzeAs79R4dcw0Oi8ijch8Z3QZOH6VyGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1153679},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"c4c85b4cd0c965cbf43dee0b0c4be2df0ddabd7a","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.6_1786091332959_0.5501664813016394","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"@ia-qa/self-healing","version":"1.6.7","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.7","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"670ead9b1e4f3783450c6832d5f98b31d0fd10d8","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.7.tgz","fileCount":158,"integrity":"sha512-z78kmZ+BAqYs4zHHSdlzIaMVlXUIvynt3vzHkNasXR8xcAngSDOrmIfSBcdWzY/EdqeB5hjmobOAx3MYcETd1g==","signatures":[{"sig":"MEQCIGYkU2FtBX7RGvCNp3oPrL/6AbyaqQoTC39XOEgCVoxRAiB/oGRvgD36URSTSW58OUDH5Ar6s6qCXphZgXtTu/LCxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1156827},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"c4c85b4cd0c965cbf43dee0b0c4be2df0ddabd7a","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.7_1786124628246_0.07306808728405412","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"@ia-qa/self-healing","version":"1.6.8","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.8","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"749abff65b8ab65c6e720e533782089fac351d50","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.8.tgz","fileCount":195,"integrity":"sha512-h6gl/XvA/vSdDurSsN9qrH6oTozxfSN3gw18kpqN2vizwnwEMfW/RtaX8hUwX4mG7c3evFOyEJuVb3cgUAZEuA==","signatures":[{"sig":"MEUCIALsb6DaJqFS1LMDag+qM2CYeTucIPtI5iUBjA8s6TuhAiEAuzUppV6auYWmh0VdIzC4ZK5AosixM6b5hoAN0weQx+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1457873},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"7fdefb3fd689fb4fc35467f81106d545fd980b2f","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — no","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.8_1786391271221_0.20672137268910462","host":"s3://npm-registry-packages-npm-production"}},"1.6.10":{"name":"@ia-qa/self-healing","version":"1.6.10","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.10","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"668448b898603ad6b5397315b893c7b790fef19c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.10.tgz","fileCount":201,"integrity":"sha512-tlH3fkDPvc8dpYKpZezBV0ftPIcSP1RdPjcUzjEGUb8KZuggJ5mGKtzwl8bH5TYBnNGD06AWB7CJDX4Mmt12dg==","signatures":[{"sig":"MEYCIQCkJ0ReYuATbUdXYeauhvBYxv+fgRuhOCGQ1845HKfr8QIhANy+BbRCeKrB89X7/4p3lE2IhI58LHrGCUwqaN8WauEr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1546159},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"e37a7bdf3f237d1774a31318494b4ef8ecb45569","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.10_1786397449440_0.5085904329927675","host":"s3://npm-registry-packages-npm-production"}},"1.6.11":{"name":"@ia-qa/self-healing","version":"1.6.11","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.11","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"922752734d4a7727671c17fe006cfe81b0e613ce","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.11.tgz","fileCount":201,"integrity":"sha512-LuR9wq90jM9fF6vTehA6TnjXw4RERFen/fY4oc/eb2FmuKBE+4SBnS9/UBL9lyhSv9ABsM8wmSO5b5HRleJVqg==","signatures":[{"sig":"MEYCIQDUN9YdGjhF2WN9TbLU165X1/BFltIN+KJmGJ+jue4qBwIhAN2qlxJID+djA8b8vRSEJCNaO1mh4AdHzXJoummi7QsF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1551127},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"b2bfd57387a5236c484b2f6a01aaad76ec9056fc","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.11_1786796545210_0.13511832404710167","host":"s3://npm-registry-packages-npm-production"}},"1.6.12":{"name":"@ia-qa/self-healing","version":"1.6.12","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.12","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"06f87056803e9f15dc5af13c13cba48a065d6cc2","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.12.tgz","fileCount":201,"integrity":"sha512-eBtpgLOKqN0O2oURJMg07PAnE2yJmRHtj9rdAfPn1e+Fva19jIWKK0eCjASvHIWssDWSa1oK8TZaH3T66DiKCg==","signatures":[{"sig":"MEQCIFfUdYTNrqPrBXAMjDrW0tR+vcIJ34cV5WNbFWesMKgBAiBmP+G39mBxWGpEpLc+GdC84XORMtVWblW8EEVBdnswpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1569571},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"94897239610ab708345bee3d34fc26c1427e56d7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.12_1786883506823_0.7975691288330196","host":"s3://npm-registry-packages-npm-production"}},"1.6.13":{"name":"@ia-qa/self-healing","version":"1.6.13","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.13","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"02ec5b2f36f8503ba01869e0f4f63b9aa60ae95c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.13.tgz","fileCount":201,"integrity":"sha512-Of6YEM4XTWsoQ2EDAFnY1046Ew8O4Fqe8z/V5llFdFL1NU/+p+BtWjpaekyhRt7iGKKO1tBrcfe2RxY25IpewQ==","signatures":[{"sig":"MEYCIQDzjGSTGEs7pWc70Izx8bG7FVxDxVY2g3aGkXGbth0SAgIhAI28nvXKJvW0mdggss/eDW8Snt9+SZUGCYgO3mehV33W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1576342},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"d598503a29d972928cd486745fe87d5e763eda49","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.13_1786884820117_0.9154217788638377","host":"s3://npm-registry-packages-npm-production"}},"1.6.15":{"name":"@ia-qa/self-healing","version":"1.6.15","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.15","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"02216b979f6b902d9b68a666f5b14d8f0298d3a4","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.15.tgz","fileCount":201,"integrity":"sha512-mDKHGoydezOBoVkNSntAZPIYehMIXXRj9jMz1lh8SDRL+2LhH67r00n05NBHY+xxzQ2cdiaqsDNQwRADfzNhIQ==","signatures":[{"sig":"MEQCIGZKqRKB8740KP4/I5tBv+eecMXfY2bZrtl3HKTUIx4GAiBhSkiNFJwxjihHk53bW4sqwvwMs9ehYs0UuM9RS0SUtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1595834},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"dc7aa6d331a76b6cdd55e1da93176e445055c92e","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.15_1786886709953_0.5233915430072364","host":"s3://npm-registry-packages-npm-production"}},"1.6.16":{"name":"@ia-qa/self-healing","version":"1.6.16","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.16","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"bb3bb4b9f5e4ca37a617a3ec1c2adacda1f021cf","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.16.tgz","fileCount":201,"integrity":"sha512-EHKPbrpdwKWSYOIh6MSdDumcigO1dDPhyiW+TEkaLwfkvI/bPDaCR9yWsALqFYvpCauBSUcVrhFONoF/2Q+WFA==","signatures":[{"sig":"MEQCIAWylPgwrytFdbFZMg1It1lEdWJ2oShJy0GZ+ukA0RpFAiBeTHJMFUYP6piN0s3PXyO2g2im4ydUJrXX3fmflkErtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1604382},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a90f0d86eec7d57b6874ae6bf1d54c7fe3a5b892","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.16_1786887434992_0.9195935494041219","host":"s3://npm-registry-packages-npm-production"}},"1.6.17":{"name":"@ia-qa/self-healing","version":"1.6.17","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.6.17","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"1f143b663d8ce320401900109993ea2ae74d835c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.6.17.tgz","fileCount":201,"integrity":"sha512-22Mtscq2g4BvotChzcNOwUmnYbeLSur9LErE5Depw4WK1vMH6fA4tlnJfxClOrSlaMpzuKGVWUS5b2wf54ZPQw==","signatures":[{"sig":"MEUCIBX9wdc8mkROrjupjkDm+682VoiRMblyZOmUTR5uGk0uAiEA1KkZLdQKCU+q9pPuKPu1Z1ifNHZYXbsojKZYx6d/92s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1648869},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a90f0d86eec7d57b6874ae6bf1d54c7fe3a5b892","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.6.17_1786989566038_0.7297589041940022","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@ia-qa/self-healing","version":"1.7.0","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"aaadea92bde95ae4a93f91c4258233cb07a98619","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.0.tgz","fileCount":210,"integrity":"sha512-y0ncIst+TmsXKk/Tth+0U052BK5/7q7b/xWrOMkYWbQrW+fLjiunRwLNkEgIqoNFhLIsVsbe1G3N2Ko6aT4eAg==","signatures":[{"sig":"MEQCIB/6R9YmVXiY+Ho8bpqpK4NJwz/i9i4WoPoWo2TC3Vx1AiA+5ozA4DtS5BGuWy4AHtxAwmNm12ihdbeutBOz2xd1Zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1758393},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"f91744e473729c4b142ab1478d7e7663f1c6c595","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.0_1787043568082_0.9730807087847531","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@ia-qa/self-healing","version":"1.7.1","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"854ef6f4771ff5f24c93c2e50423341e01117b78","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.1.tgz","fileCount":210,"integrity":"sha512-Z59ZNcDly3ae3VpqufOpFMxn+o0OLNBheyBU0+I2bri3/srz33BTp9J7Cr/H6Zpu2+4nUXH7yc72q/iZZ246hA==","signatures":[{"sig":"MEUCIBRT+VQxQDvp5a0qbISMAwaqx+hiA/Exnc92aov37MYMAiEAoEu2mx6+dnUyY7F46mMOambl5tbgNy47p0thLieg5uY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1763887},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"60e4acd0efb276e5b718d3eb333574babb29a6e2","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.1_1787047199044_0.6765876105435857","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@ia-qa/self-healing","version":"1.7.2","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"75b05ca4f79a1fd64a9cd05680e41402dda21422","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.2.tgz","fileCount":210,"integrity":"sha512-//lDAheaahFykQET5xF72oHNRruK1guGu7SNm/At9hkKomeJpJJ/9NrVtsCpKPGPjBqjiWDzTanqZ5llL87QGQ==","signatures":[{"sig":"MEUCIQDlbevncLDTMLBonFeW7ZZg48crO4vS3LNwA69VL+4DYgIgZlrwHUQftovS+nfnlcpnumLCVnKSDvv6m2CjbQRmnto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1781126},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a67141857c1267ecbf25cc4502fad5ff90323fe9","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.2_1787056241633_0.29736756622781413","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@ia-qa/self-healing","version":"1.7.3","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"11a4fd10cb451bc4df84e786a7c4660629f52b14","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.3.tgz","fileCount":210,"integrity":"sha512-6rpN1UhVAOTrzMV6J+44XiKCFDT1E0/BrtJ7UUIFLMLYq++855NpZkRGZZRCskhqO5P+9XywK6+jY10TekgdcQ==","signatures":[{"sig":"MEYCIQCYGdOfv7TNlo/Hhy2AVpuwEhuPQXO0hqxPc05PcSeslwIhAMF0JbPGfSCmy6GsPCq/eNNTSIjbpIhWg2I0/e7vj96S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1794466},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"4070051839dca13ccb1ed5bb29d6b5507e3edf90","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.3_1787058632124_0.7913936051256745","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"@ia-qa/self-healing","version":"1.7.4","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.4","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"0beb07ca2e0500d6a4e9f1dfa1f7a91ca34a0367","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.4.tgz","fileCount":211,"integrity":"sha512-6E7kM6sO66kVND/Gx4uPBy4dP8JRy5y9MKBu080X6HavUJMqvS1ZqM38lqfh4BF8xmNAj5Kkho0ejZcFSznnyw==","signatures":[{"sig":"MEUCIQDadjJtN2WWB1DDVnRZuOBwCIVjU3GMDtsTtWbLTJ/MLQIgRICTsdKtGDzRtoMwTCcRUs/1nFST2Og4b51iD2Km6Jg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1744997},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"4070051839dca13ccb1ed5bb29d6b5507e3edf90","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.4_1787059722927_0.168850106818889","host":"s3://npm-registry-packages-npm-production"}},"1.7.5":{"name":"@ia-qa/self-healing","version":"1.7.5","keywords":["self-healing","selectors","e2e","testing","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.5","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"4608021a75357c1ad618ba6de05de4a0f021d1df","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.5.tgz","fileCount":211,"integrity":"sha512-HfCnNMyR4ga6xFPHV+6DAVnhOrjOhYaY9d+89jCrJAKUpPMVjCnbult3NPN/rHJMJzDy3QyvOf4wuE/fovGb+A==","signatures":[{"sig":"MEUCIQC64l1BXv0SB3/VpqgKu2lMn1NotV+fSsn4BoS9lkawMwIgdRInu26Iot/AG33LGWnWQadDzUUQT7g6TLtsqIW0yO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1745884},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"0c9540123f67dbfe4431bb5c0da2947cf15b109b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"_npmVersion":"11.12.1","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 — yo","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.5_1787062038790_0.9129862328151366","host":"s3://npm-registry-packages-npm-production"}},"1.7.6":{"name":"@ia-qa/self-healing","version":"1.7.6","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.6","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"14066139c22ebf315d0073ee8d97c93a7adfc262","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.6.tgz","fileCount":211,"integrity":"sha512-lYIcwDnp//4zslG/qwkQTzLn/ITzlkYaF1FarmBmBIFHMm1vf2HmQYqESE6fubvYsAKemoMck269Sz1fwN4Puw==","signatures":[{"sig":"MEUCIHWjac8+Jnj9RtqA3lMKWqh+ZpbMKG2v+NoZB/0jlWA4AiEA2fIufNonHhFY9rWaOIoL5C/6ClT+U+0wKk2pNihACB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1747466},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a0a8c8ca06cf3574e09cac0e0e101e34ac8406c7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.6_1787647615609_0.058387119973106305","host":"s3://npm-registry-packages-npm-production"}},"1.7.7":{"name":"@ia-qa/self-healing","version":"1.7.7","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.7","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8d9a14c9abd938bf00320a091699d08ea109f459","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.7.tgz","fileCount":211,"integrity":"sha512-fJJlDy1cZZn4UwF2YRlN5K3Di3MvIbDu1mi8RRbfunxQejhfbDEaeqsD2wF9OCX4agW8EVRRWMsnLYNTU+JK0w==","signatures":[{"sig":"MEUCIDp07LfwhQx+LucwYGgu1mfIEVsexYP6V2Oyncr5Il3MAiEA+tgjq7TBlIM4CNx3I8bKUKXJtQbjMdRcsUqQMwImxUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1763284},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a0a8c8ca06cf3574e09cac0e0e101e34ac8406c7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.7_1787668521786_0.606723919446825","host":"s3://npm-registry-packages-npm-production"}},"1.7.8":{"name":"@ia-qa/self-healing","version":"1.7.8","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.8","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"dd891a595e3d78d7f0d02fb5424548b4febbcfc2","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.8.tgz","fileCount":217,"integrity":"sha512-DHrym0atg/gbf90bj8ebaf6T1rxqFFGv0rvK8hCdU5wLEe1q5pOMJUzBCNI7rK7W0C5Q9fpKGP3gRxKqFbMy2g==","signatures":[{"sig":"MEQCIBPpqQMjXqNwN0+oO1aHVTc4n+M6WaXfXnb8UJr47yz+AiAN6a6aXQoz32Vt7MzLvUHn1KFvOK2L1YtF1JwaPmAuDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1846097},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"dded99b26fe8f0717375527fa4f280a2bc53e021","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.8_1787819713213_0.5763630550412324","host":"s3://npm-registry-packages-npm-production"}},"1.7.10":{"name":"@ia-qa/self-healing","version":"1.7.10","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.10","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"580058243d746f40665db1a561ded51a7ac2fbaa","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.10.tgz","fileCount":217,"integrity":"sha512-xCBE/JWDUF9oYhja3B3hJ9lk/ixQ1XJzJHZQJHPno/YsIcCc0uTOtpeTo0UydL0C2nXRnBMU9vawzKi2l1SGdw==","signatures":[{"sig":"MEYCIQDnQnvykgYmS5IvosjwgL9+i+4eU2jLkh7L7FBAbjwpbAIhAOlQMoZ200XFKpdQdamfi5jPhmIPHnWcwSFhtEiWYABu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1863679},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"72152a3979bec36f5408ba039edd01a9bfc5fd67","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.10_1787825341208_0.7726670448920869","host":"s3://npm-registry-packages-npm-production"}},"1.7.11":{"name":"@ia-qa/self-healing","version":"1.7.11","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.11","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"f8a0b3314517e3e1ffa801a4b5ff267a51aa9659","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.11.tgz","fileCount":229,"integrity":"sha512-Xz3kdgsnkfHmHdc9qxZpkzp0BEmyA0fZ/v+bRRWmG4gjjxBMETVlYEMoMWePPSg6O1U6kTQrguAuwkR7tn8aBg==","signatures":[{"sig":"MEUCIHi3nfkI4Nr/CXeY6z6qH4QfRdSXJ9a5eIJnTNWVvs23AiEAmGQP6xw9C/CvMQaagdGdvfHJj+juT9rPtO6Oqa+4O+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1973063},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"72ed8bd26215432cff0eb86fda91d85cb5bbacf1","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.11_1787847345759_0.04975193815271606","host":"s3://npm-registry-packages-npm-production"}},"1.7.13":{"name":"@ia-qa/self-healing","version":"1.7.13","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.13","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b9cc25610426dcfaa3c00d412b4b6a34adc38b0e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.13.tgz","fileCount":235,"integrity":"sha512-60PIkzY3hVlXHfmkcmmJBCwtdhuuLPosz+uCq32PcKMCd+S+Asi1b5SrPd/JEQchEJxFapsRsupvaA9TYqNB1Q==","signatures":[{"sig":"MEUCIQCegYypC8x3/vpUYyGglTj16SEqHL9yW8n1t4TQji8kHAIgKxxmQ+A8mIMqdOLp8KrAkVne5iB5NH1dBu/ePK9jd18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2030751},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"3db27b57aa5878ed9e6983a829b23dbf33dbb4a2","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.13_1787920581510_0.5585332007956243","host":"s3://npm-registry-packages-npm-production"}},"1.7.14":{"name":"@ia-qa/self-healing","version":"1.7.14","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.14","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6211e1825185e47a3c7cf6a617843e3fa398c28d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.14.tgz","fileCount":235,"integrity":"sha512-B/3tEbYHCpUGAY3sC9ZA4/O7ziyIqCx7N1pv1nLnreW9F1D0/aZ5BZPInkhTgz2hYcNGlG9AQaOJzQga9bQJpw==","signatures":[{"sig":"MEQCIBw6tNdfxatdmee2bEAi7z/JIThX8D+c9ZPnmzTUYLBgAiALVzyRAxvlkEuShvY1jMXzxnONvl72Qvd+HfO6WHRFXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2041767},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"cd8f2bbaf88cc6523dd0a568e05147b9665229fb","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.14_1787921963412_0.7203033807040156","host":"s3://npm-registry-packages-npm-production"}},"1.7.15":{"name":"@ia-qa/self-healing","version":"1.7.15","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.15","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"51660d2a08f3096ee2f74c776250a8d7ace51c76","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.15.tgz","fileCount":235,"integrity":"sha512-o7X3KyJxpJhhny5r9W9pq4b3WB7jzcg5tpiYh4zyDrwK40gUo1b7hiSqKeRuGLuyuXl3lRQp1l3eiCBD3Ric/g==","signatures":[{"sig":"MEYCIQCiFxVXCquwNy+hTHTIrvJvmCEyMPkzLgp++J69Q8LnHgIhALgrueep3e9bblKWKSvLiFZWsMkOUCnIiwhrX2+7WAlN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2054640},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"9b241d22ea2a3e31783b0fd7f212a39ab4b1ed47","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.15_1787930308402_0.6518274040928032","host":"s3://npm-registry-packages-npm-production"}},"1.7.16":{"name":"@ia-qa/self-healing","version":"1.7.16","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.16","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"87b7c4115f33649caa1b1e6f2b34726fb13ebd89","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.16.tgz","fileCount":235,"integrity":"sha512-+2ObwV5BRNQh4zsjRB/eUr4KlVdpIdKxyKCfxSmcr1nYYn5Oid/zwFpkyrfrxe/Ch6Q5zR2LZ1DufVqWzEQtZQ==","signatures":[{"sig":"MEUCIGvjbnYqfBzLebvZsvNQ8ksM9qHobUlJhrkIlvOFepExAiEAxq7K+CFt5sffKN3+C8OB+VKJL47oEHU8ubU7vvqlMpQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2066369},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"b92d00b3a43280bfa182870422c7f486faff9a2c","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.16_1788251880208_0.9224975583649446","host":"s3://npm-registry-packages-npm-production"}},"1.7.17":{"name":"@ia-qa/self-healing","version":"1.7.17","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.17","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"20a8cda649a48a2298d1e1b8275e7a1226dea030","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.17.tgz","fileCount":238,"integrity":"sha512-c0zEF9CQEC2+xd/PvqTNAQQTFdc3JXI2kDWpWZm8FRYhsKX16B0ABbT59M7alKMIz6VKXGq++CBZ/q1oOjLYmA==","signatures":[{"sig":"MEUCIC5RjcREZ/LgtHFXow5Jh9PPjIrBsXJHd/V8Zmg4N5sAAiEA/2abm3oY45aoeCmz5hAW71GlEJ52RVPvpGjlXk046fA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2087129},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"0e5e7361eca17db750f4fdcb0968add6c748aabd","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.17_1788256566019_0.9337233856372296","host":"s3://npm-registry-packages-npm-production"}},"1.7.18":{"name":"@ia-qa/self-healing","version":"1.7.18","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.18","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"2615f8cf14234ae5dda35579018abf236e2021fb","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.18.tgz","fileCount":238,"integrity":"sha512-q1Q4eQ4WXklpLRwP+tAuESGIgn7l4V73oY+jUwPM5uISZVoYH/yPgUebRKtqH4OkTXp5vdS27pQSmTi2Akuc3A==","signatures":[{"sig":"MEUCIQDaMa02xUY0fqxWsKPZhgVUgdLGS7hV8Nv07CnOiHX0LQIgNFgDedCBbRude88qiepQVD5fJerm+FuQS2PWy++4lvM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2092973},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"524e536150175ed32e16b127ae15342c4d864787","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.18_1788277825417_0.08722747827751998","host":"s3://npm-registry-packages-npm-production"}},"1.7.19":{"name":"@ia-qa/self-healing","version":"1.7.19","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.19","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3883e07e5d257de803d26a26b52f493f6ed7fe7b","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.19.tgz","fileCount":238,"integrity":"sha512-pVgj9Qc63/BJN8TTsJAdbHCKMoJU7xweOHYUgTZ4WHWecnheOVZ9OESMKBwNTBWDJ0QduHsRhoDCBdGjgYIbdA==","signatures":[{"sig":"MEYCIQCjF9N4Dz4ZdorBhTBucfSKQ9ma+o/P1woqOUt+rAju+gIhAPeBwQLBT6H2GiH8ts1u3iS5KV6dpUrjCNbjsvvZOfsH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2120955},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"e1d89834fed2dc11f2a52f01f690d152c7201ae5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.19_1788368653880_0.6118413747466243","host":"s3://npm-registry-packages-npm-production"}},"1.7.20":{"name":"@ia-qa/self-healing","version":"1.7.20","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.20","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"d28895239e5f2926324c4213e99e9edb5fdd3625","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.20.tgz","fileCount":238,"integrity":"sha512-iFuu+5MvV84lN24+fD/hFAQBH9mk/8F3r8E1ZQDQDZjQ+/UWZFbP75dPuKYooNIsCrKjw0IY6iyjl+qHTlEabA==","signatures":[{"sig":"MEQCIFazciMSFlbjYb+/9Yvua/pKH3B/sYRJmM+EC/YQ758LAiBb77nUUp2o/v68JvbdFDaXRT46G9UW3SrRiFWVQXTXJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2138326},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"e1d89834fed2dc11f2a52f01f690d152c7201ae5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.20_1788370808408_0.8273158731508399","host":"s3://npm-registry-packages-npm-production"}},"1.7.21":{"name":"@ia-qa/self-healing","version":"1.7.21","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.21","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"91ea35b9acd9605315664c27acc307e894c87c69","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.21.tgz","fileCount":238,"integrity":"sha512-TwBXMijVujUCGq9/+8/0S1rim+WMPEt3ynnKQSUdkjIy97makK+VakU+VstVGyXdCX0KdKOogLp7AT2lWePyRQ==","signatures":[{"sig":"MEUCIHtZezzRTH8BFEOwAcUJtvp6Sb4KQOcrW3/IzQcG6wPJAiEAu5Qz78bfck2dVjHKv9fIUZdo+/6bx24by0ADDjqpQdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2139561},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"bc306bdea1ce501acf6749d494a471c5607a2612","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.21_1788440748117_0.10140523827571357","host":"s3://npm-registry-packages-npm-production"}},"1.7.22":{"name":"@ia-qa/self-healing","version":"1.7.22","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.22","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"eebfc808d04fadb682d2c758f4910f07b67f1746","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.22.tgz","fileCount":238,"integrity":"sha512-tZPUUuro3qBI3ethe4B3tD1taUFz+qE7WvZrAWV78YjPMDL9RmM83z9D9x7OGlqmLrP1RGbSTIKCnLNzLSSeTg==","signatures":[{"sig":"MEUCIQCC4YQogbp7xThF6YfwWgY4EN0alYFSxFSK72cy7lGvOgIgZ70XgCmrw2vDFB7p07JscMh3ANgVzv3maro+o3n0A8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2139498},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"75f80aefe53a7555c3cb3f018d6bb886f742f8df","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.22_1788444834496_0.1809212431353402","host":"s3://npm-registry-packages-npm-production"}},"1.7.23":{"name":"@ia-qa/self-healing","version":"1.7.23","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.23","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8f6472f22100aa9162d4d3d45d7569d4d7b4b554","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.23.tgz","fileCount":238,"integrity":"sha512-3LqS5wr16YpUdyJK6JnSFt3m6SZG0cld7eiDokbfl5qoV20jG07NEtXAk3s3nUtxX6TN420wYhyviyZvkbdlbw==","signatures":[{"sig":"MEUCIQCpksP3Hph7flraZawar0IMnvXd3S79AonziBIAUDTH1QIgHBkl4e1ASjH4nafgdj7Lo8x7q5m0HWLnaTD72Xj+YaA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2139636},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"0a9c7fba7f55b556236e5fa8a9f93c985db139b9","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.23_1788446195108_0.25851773490166674","host":"s3://npm-registry-packages-npm-production"}},"1.7.24":{"name":"@ia-qa/self-healing","version":"1.7.24","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.24","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"413f113f8a694ffbfe2ac6c4e2acffde362111af","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.24.tgz","fileCount":238,"integrity":"sha512-nb5aoP0Ahzv69IenzijElirR0cNS7ch4YgR2oqZZKIIZSa1xlLuPZXfIKSe5mApEXfhk3dGThsB+7eB79DE4xw==","signatures":[{"sig":"MEQCIH0DsLGOYMU1CW0dN2nQTfExLNpQhEuNeSm7WKPj4QqjAiAkb1cGBx/rQQrgiD+Fm4JpvPkLvS4KMr6hS3ttaXlJVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCCG6F8+fBXQTeehPk8jzVZ6kAgTxdUBj3mdILy7J29IQIgEtNBZwov5nggXRes3vLgL12JOFLSJ0lXFp5KhlOuH00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2140076},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"f09bab5ee786cdcd267475213f3f7059504a930a","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.24_1788450982227_0.33390196598762456","host":"s3://npm-registry-packages-npm-production"}},"1.7.25":{"name":"@ia-qa/self-healing","version":"1.7.25","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.25","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"6ca8165109cc37c8900e6628aa5b41156f231744","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.25.tgz","fileCount":238,"integrity":"sha512-Rr6/A1a/y2+SFbpVqCcpwuvnoDyuMS+9o56Po9IU6gP38b7UnNI0MtPEM0q35OgMTdi7LZJNJ1TagypxUkD57A==","signatures":[{"sig":"MEUCIQC/qW4CWs7vSIoCSbgoBkvj7taOGkM0zX+ads2ASn6DPgIgYTiVFWkkgs4rX7HUAC+Z7u7MW97SfmfM8TNOmMr+MMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFeDCAfplXOXvckKrPnehvD4WnH++E5vSUNoabyS/xgPAiBdLzoSr3I773Haxj95baFbXpvhU4dBGDy3GuR9YM/DHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2143742},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"c75b9eca78b2d1523f9521c1a2fcd292d9889a11","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.25_1788634581427_0.37658315186446667","host":"s3://npm-registry-packages-npm-production"}},"1.7.26":{"name":"@ia-qa/self-healing","version":"1.7.26","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.7.26","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"a136ff2f66a3c84ddbe0672383c1b16ff681e459","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.7.26.tgz","fileCount":238,"integrity":"sha512-gYV4lip56mhtjoD3A6AtdF0rP1Ho5z+p+fQCA+tNMSc0ECNPQSKX+62vklX3GyRXYBuYIFZtC5PWGT/aA/8yVQ==","signatures":[{"sig":"MEYCIQCPklunE7S7+Zxgk5pBEdFX1qIw0n7wVMFQ/sA4Uax3vQIhAI9AKF9tMWdlBBKjxJ4oUzI8yYu/+EJAwbeXx8jviHvh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAL8sS6fIZQvXgPCvW+/D8ojR2y4MM7FmVvUSQgsvQEeAiBJQyAt/uOleJWpwrWNM1bRO0mt/2IppcVS0nm/b4sMZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2144793},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"afbdfee721df1f7f9dd895c1d3aeb0031185d4d3","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.7.26_1788801339216_0.08632997398899822","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@ia-qa/self-healing","version":"1.8.1","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.8.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3c30ecb95ab33040e86e630f83eb2880f9fd4c7e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.8.1.tgz","fileCount":247,"integrity":"sha512-37z7+Cdc7X6OSh5GCcFJPsGzJ2ae03d2lwS4hEBPEaRj052kAnSUcKWEMYVb1KBGPrFmr5+aBiWz0yNdCcZsWw==","signatures":[{"sig":"MEQCIDVG/UczKWwrT/IeE5VgqemArMXsUJsEm/VZgA5pgGD7AiBxCZ+SSIijAVuMUXm294dcK4YChnN/EJayBJkWwdF+Rg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBCq0ZR5LBZP0PzN/pHpRq4LnqRpcK+OzSCConQjb7YNAiEAyhmDwsFdns8cqx5LrIIIWTfNQ7jc0XKXTuLTSnPBai4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2186948},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"bc819182cea9c72d658ace890468c4d8d1517a29","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.8.1_1788869554664_0.14512675562977773","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"@ia-qa/self-healing","version":"1.8.2","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.8.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8780046ed174d232a243c451518c9cb0f56035ad","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.8.2.tgz","fileCount":247,"integrity":"sha512-gdY3G0v2VtKKIGoD8Qalr9Zkt7X3bPDFmCoLebEeHEebE8SrDY3/wuSwBwtD89LQ6GbqHtmpcucKJd+hPHbnrQ==","signatures":[{"sig":"MEYCIQDHfXpdpciuOetZqg9a+V8/XCIp9Iq9hgPoma9hCZFBZQIhALwQi2DNPYMWrD25vm3r9CUSZnKoa3W7KKnaj5VlcHx+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGnIkh5vm5/iKfFE3i01mqp9vJXG9o7sw75gKp8i7n1yAiA9iYLYCNWTrld4otGQtIs2TEDFpE22A+p/1/4wAPU4rA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2187368},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"43b16c3cff6ae358115ade07df4644f61b17b287","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.8.2_1788875034813_0.6555688219098899","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@ia-qa/self-healing","version":"1.9.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.9.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b13be9068cfaa94955b6dd4511db19b8d455e346","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.9.0.tgz","fileCount":250,"integrity":"sha512-sxS3Baq6ts75DhGsRU5T96Jiq9mt/o/EFbMO276JrVAU8HM0QldpoKLfxETn30876fedmy6QAD8X6VfFr5pFJg==","signatures":[{"sig":"MEYCIQCMeq8lAYn3ReQOBY6C+BO3qXFIQA5WdOyGg6W1aocKgQIhAPYAjOCvwueVu/Ua//Y3FVwtJ7LBQ0rA9d1lVg5FQvwv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDboOxo0SgjBE7SrYlLZsb1e1Zmupp9w260KFULrRZzFAiEAmn4T5L6AjIDsuWM85sNH3XQCAqJSv9oTvcLmgZLTghw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2240360},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"192c11671f531509dfe8b249a77691e8aa8cfe31","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.9.0_1789134791412_0.318895870231787","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@ia-qa/self-healing","version":"1.9.1","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.9.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"3edd23536e287c12a7ebb2bf335ff9ad8aa1e490","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.9.1.tgz","fileCount":256,"integrity":"sha512-YUiyvYGd0w701DdQj9dSmVL8tW/dqxexpTxhz3JPfIUrXiIsAVp3HfBOuw9Ay29gXZQZeuCFp+8tOc9KHfRE0A==","signatures":[{"sig":"MEUCIQDGP5S5ql1agcSoWNq7GHRpaAxDqEiweGzVtkkzAXSTRQIgYAByK8bnfB+fymf1I4EYwb1r+oW6oSGzGjD1nyzCWtc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDnb9I53cS727hLCCo1k4OiS9+dGMAoM+5mImDWzbUg/wIgR+84dvOwVFhGZgAbUS2xLOcsFfoM9nxpM02y1KC/8VE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2286683},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"7e58559d80be15102f22c26ef340e6c0fba849f2","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.9.1_1789196659178_0.8476020087502794","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@ia-qa/self-healing","version":"1.9.2","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.9.2","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"402262faa2ea9f04414e00064b73d8dcc1e95a33","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.9.2.tgz","fileCount":256,"integrity":"sha512-XaxVYLzYvT1gAN1OgCvxik+IdoCBdKOLawTvhAdm/H3D/Tl8YUBpzQ9fG3fvgP9BpNR5dodeSOVxFvFXN20aXQ==","signatures":[{"sig":"MEYCIQCIrKZ80ISdhShbN/7LnZsIsbHmSIVGnZ0kZh0tGJvf/AIhANVyStGiXb8SfN9EU5b/vGO06EdN7fvtzbOlM+EHVCsj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICpaf2J7bGYg9TCcgpL9eu6pd7Kfu3herC48khIUawRCAiA0FsbvR5OYlfv3E15CJ3p1wygeO8wvCIpakjDpNUbW7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2287022},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"53bb2fb371e09d900da90db2e42be69d5d00ca49","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.9.2_1789465093144_0.10354228760604833","host":"s3://npm-registry-packages-npm-production"}},"1.9.3":{"name":"@ia-qa/self-healing","version":"1.9.3","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.9.3","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"be754c2e3aade3dcad98774d2c2ddc682094ff9b","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.9.3.tgz","fileCount":256,"integrity":"sha512-dMGr2zCd/DmaK8y7+EoWMtTVmN6RMPTZR44G1/aTPQrqrqah1n4wgy1h43dziZ75EWylL1fPweEPzNC8QEnZdA==","signatures":[{"sig":"MEUCIQCKycRKA0xFJA+Y/HhBz5WuS6vn2v/IwLv9tIWrWP4LBQIgMVobHOUjJU1h+xGQdlYK9//HhHwuhWtDP/GuW7F7cis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFS+Utcp1l4YcIL0tRWAZ57rBgBsgclDZy35Bdofk0D2AiBTeFUfvqK9x5NbiimmtnBdoe5SJSrVfOaFtrROwFy80Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2287207},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a1226a1cf39ecd963e92844174797c0fe640d436","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.9.3_1789465897430_0.9590804860619726","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@ia-qa/self-healing","version":"1.10.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.10.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"96f91ff9c9c729c1591b06542faebca4d7ba401f","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.10.0.tgz","fileCount":256,"integrity":"sha512-GqEH20B7PtaUSeM8Ltak2ESWfkxn4nSMFRsFzJWg1XYBW4Ie9JoB+TuZApjCduUOTGBQu5ZEf7ArvmIQnYt2Xw==","signatures":[{"sig":"MEYCIQCPzWBfrQ6B1dnSnw0oU0JX2wql5dgc4hr4/701I8u1DgIhAKAHJhJcvgXD5t/GUWlJDafH0C8LI8YtEqg0B7Go+9Ax","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDk/hLT2QTZ0P66Vt3PzKqQFp/6ziYj7JX3sHnz2UUh6wIhANCtZDPl789t9SkMgiboLD+6kf+V8aDFAlAh4inawr5m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2299047},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"79642898ab2e3b8c95e3f3252704c489b9a6462b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.10.0_1789473006554_0.9388518857247754","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@ia-qa/self-healing","version":"1.11.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.11.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"72230addec2c233801d684cadda7981cd34cfb36","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.11.0.tgz","fileCount":256,"integrity":"sha512-miqFuCyeDY4AtBMF4AH+i+3YZ7fzUd8qmo1WhCt+IdVfsRacK7c0jtHH2tuqtH9Y5/hqZIberzvn9hXxv6ubOw==","signatures":[{"sig":"MEYCIQDKJWzvrsR21l+tP2Dp325MYMfPDKSdTjuoLNZ5mu8R/QIhAPW1CEk5FqjPHFDl2LM54yZmWwWYbdyqT0Eq8nGKcaP4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCCxOE9gP9MPSP+jfUdGiCWvKHAVwCFilpcFUvyqAIWLgIgEM+SuH5xsvSxfCKcYWidYYuSj8eikHcwStOji4aMPiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2301936},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"8eba32f3304a582d68ae14b61c64e87341993798","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.11.0_1789478867422_0.28343747472610703","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@ia-qa/self-healing","version":"1.12.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.12.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"e6ed493009ecc149b29a066b01ad7a8cca9a78e3","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.12.0.tgz","fileCount":256,"integrity":"sha512-tRSgwc7yAogJMQub2pYVQhIhkQ9xftTq8kEc3SXl50MQr5108b/JPJ5kG26zgi8f1r5xbsIbhZ/D+Sn6DzOuxQ==","signatures":[{"sig":"MEYCIQDbihGQ5KJXexOstOTTu6LAHhbZ+NXXQQKiTKTlcKx1UAIhAMP/RK41O+EYG3g7/0ON2akWGy+r/DqCr6tRdLWMT4Ft","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICjUdvuwWaEQkgBGUD3H+zn0r5LxuLg5vgs1b3vpVH1/AiEAuDw2a7vxEg1yOqaQEEJP/DlaAQQIcduCMEjjs9bYIbM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2305448},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"8eba32f3304a582d68ae14b61c64e87341993798","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.12.0_1789482532469_0.4437793522657325","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@ia-qa/self-healing","version":"1.13.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.13.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"9943c7bff3106ae3cb3c60d871573995065ce230","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.13.0.tgz","fileCount":256,"integrity":"sha512-5K5oSCiDlnyZZ4k5UMp0VodzrVYod8mqyHB/P7M40qJOjH3tIz53JMMpxm4iMpkyXt9zgHS74lpsvgW4sSOrcQ==","signatures":[{"sig":"MEYCIQC9HoYuR9RhlGn7nLrtegQGGefjnW7gNxFjq1+AnKvQGwIhAOLLR+hFEwO9A2sSc+2uN9mzsPLSqHl20UGAiQ6Vj5Ig","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2n8QH9A78aAlEBnR7dowV0UEzF4eUm59HVUAZt4G8VAIhAM+OWUy3cusLZWoloZeBxMQFYEWM/zxwPECC0GeDzmBu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2312024},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"2796c9cdf0a7da384a144216d769dbe484bca343","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.13.0_1789486987587_0.6519677205874213","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@ia-qa/self-healing","version":"1.14.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.14.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"71b914f481079b91bb0933c019a0185ee4fcdc87","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.14.0.tgz","fileCount":256,"integrity":"sha512-st1/vIrdZrLfeLBD1dVxW4L7Vlr4UPy9VpXhiuDFQ62GBUfKY4ArVuYyRZnw4OBOH0AqBI78UagW5+pZMqhB0g==","signatures":[{"sig":"MEYCIQDV27ea6keUUqfcEck+m/MsW+8HCDHkcEttX6h+p3qRewIhAIzJIE1zXQ33N2Y7wLG3ob1MlxqpKBdFVTl+GJfdm+VC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD6Tej7N1benzG1mU0Yaftf1tK+BYkpFTX2BEbQLa6XKAIgIdSGeU7DXHE7G5TL6gZVxYYo2sarjW2sUqvDZKlvIEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2329142},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"bd4fb52532e37adef56aa0f2fa2e2c5fcede89ca","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.14.0_1789577802672_0.3923503711320626","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@ia-qa/self-healing","version":"1.15.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.15.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"19dfbf1dfc48be9e84080ff64f99e753b54909e7","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.15.0.tgz","fileCount":256,"integrity":"sha512-g2Pix4faxN/ATv9fq/EGoFFBe4Knakw5c2FUUykAMpgAtyf325XdXcMVEVnBDj1k2eR46TahqPAGbRur4sWqsA==","signatures":[{"sig":"MEUCIEDuvPJcFSnEWQZ6FiAJYhrJBQ1tXYY28hinigpKizuDAiEA9YrRIAlBK+amCWS5g10hIcyDgBI1K1fczVAfCMd/g98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCUTBVQxwFj9fIvunJR3j+LmooJZqsoQgkfKxxQSL+8xQIgXofcXFJvFOPC1KALaUQalXSLpbKeDQ8mFV8sIJ8z4KU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2330302},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"32077ee877c420aee231b4da6cfdb463f9d70a2b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.15.0_1789639203416_0.8150416543016035","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@ia-qa/self-healing","version":"1.16.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.16.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"34a3c9ad43deec7e4b746046af25aa5bf4f510d9","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.16.0.tgz","fileCount":259,"integrity":"sha512-jNYQjyqwcFtvoIL4GPSuLYwITeZs/fTFX789uHJJQDiRGAsFHBy/uBYkcaT4kYXC9mk/0O+4Nf1LFK1vl3MAMg==","signatures":[{"sig":"MEYCIQCyKySc8duRl2vjDr+Ln693/sxP6dnPx27FV72Va6WQwAIhAJbAY96HcWrWpXlwh5WJVje1VVmqBJzy2wqjyrAunMTY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAvK0kpZOPW5TupkAtPolSiEB9ENIyeAXfyv8sSG8r7dAiEA0SB+RlCdGHwezAoXwzctMjxwL2GgB3aSVpKz2AIUWKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2341120},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"32077ee877c420aee231b4da6cfdb463f9d70a2b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.16.0_1789654710601_0.3299605686165812","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"@ia-qa/self-healing","version":"1.18.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.18.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"04963b83f94456d936fc8f83bfbaea3e30154b44","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.18.0.tgz","fileCount":259,"integrity":"sha512-fR6raM7+Wk8WSf0JoZLcFRctef1hjiWxzfTwp1unknK76WPep0cboKb8q1nCAlwGN93rzzBGh5KF9OLzwN19Iw==","signatures":[{"sig":"MEUCID7AxgTyRAUGHwni4n07fbT00z0oSHyhPGdU9k0MKlXpAiEA5oZyQRendrSlvG1+42b2dc4ikwCgl/QbMc2RvphGNLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDcBxMiftZPqBGQJfNVOPpWGHAErIRtrwOQ2CP0LvntoAiEAkN6doWcNEyOBMPRmtSiCr41xDjQzxtaKS3IL+ZwfeF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2350845},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"74503262d7511f40371cebdf810d6527280589a5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.18.0_1789735532381_0.07466506986629584","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"@ia-qa/self-healing","version":"1.19.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.19.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"8d8241c82efb836bef795d8a7dd6b5a910e2d931","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.19.0.tgz","fileCount":277,"integrity":"sha512-gKI4UmVzYpxzryjdPOkbDicSkWjRisXpLhNOboHdpmcryoAC7GRggVNGl8EZjaY1nrxUip/B5xrS14BrPmKQsQ==","signatures":[{"sig":"MEUCIBtESoMyDEDXk7CRKQtcMMMSHVuxSVF09dlvFqPIuQZVAiEAlyivMXWCbduLy5KV5FjrQj8nbsDIaSso93jUVsU/zwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDhz+oGcosrckkM/oFuRHU8+JFDnN72cu5II7oDK2ZQNwIgEGuaslJy14+Edl3RhfSn1G6e77+zfMjhtDmUvNReT9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2479381},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"be2badaf3367cab7bde7f1821d3f7abffdf732c1","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.19.0_1789851290046_0.19551371211814583","host":"s3://npm-registry-packages-npm-production"}},"1.19.1":{"name":"@ia-qa/self-healing","version":"1.19.1","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.19.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"fafd60e25d2adc6c23350ed6170f7d55cc50235d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.19.1.tgz","fileCount":277,"integrity":"sha512-JpCf1NWCI/EyGjU8PC9JXZrC44TNlHECS07ui7qyzYC1x4wEhpCPzYWxpkug0e08UdX/qK9tXMe5mDnlkB/jLA==","signatures":[{"sig":"MEQCIDcehwvwIseiTw6NOBQVp+sEiUASNW5bs7tlgRt3OKPNAiA2inOyrPLImPoUNnJdyReyq6fe+6NNXJO0GnlnyRV/IA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCbRfscfKwi4GWza0AJ6C+jmqlyzye/iwd61YR6UnJBvAIgItbIDlWywCNmdl9VMl01IBi1vqo7kIPEFXeNIMR7IO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2481697},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"e174ba6d9656b48dac381fa14cffdd3390ca0362","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.19.1_1789853425355_0.7474924380427432","host":"s3://npm-registry-packages-npm-production"}},"1.23.0":{"name":"@ia-qa/self-healing","version":"1.23.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.23.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b45c16f87c10c4ba1efa26fd775cb1ddfba7eccc","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.23.0.tgz","fileCount":283,"integrity":"sha512-iyfcmXs06H8AyneU5h2xHu7FrtTqcnJWcp9D/J8hfYDQH73V7unzJjitENhNS14wnlNcRhJf6Eu8fNHHM8O9tA==","signatures":[{"sig":"MEQCIDHns2jD0RFd8NkpCyz5oj0Xd7rgnTMgU4obScicIXkYAiBl4b/M5ENIzGASkGTWMJAlTR8yYrKCeMJxD8mPc2mSKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICxsYhtpfs/0jQXNoreTm5SHauD3ZGCuMaArV0crPSDJAiEA/sERM4X/H46CQQxA3UJU4McH+FsQda9uP3Uqm6Hfw/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2563183},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"32721ad4c1fc24105c65ef4e87ac8bf12442b305","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.23.0_1790010189065_0.2963616361807939","host":"s3://npm-registry-packages-npm-production"}},"1.24.0":{"name":"@ia-qa/self-healing","version":"1.24.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.24.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"07370a92df421e673c8de1c6bf54d88d2d0dbef6","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.24.0.tgz","fileCount":283,"integrity":"sha512-ESTI3kuadEiJ7iTCZMf2VxGa/vB9xRqcevEk+2ebvlm9DJNeDzhwiQBv3J1OUwp9Wgnir4BBERXqU+AoiTXBHA==","signatures":[{"sig":"MEUCIQDxyhgZA22Aume5KBMuLI/PRETFP/fYNOi47k7EiqvtmAIgbB9Lt+gTAFZWsBhAD+sK2onTAeYntBb7bKXkXMDACzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDr215E6FMYbdLQS5QTqMQytiRHyKAehMAi5WllggD/LQIhALM4pvC2xTKid6qydQ9iuu/ZsP+Fo3ZsnEB8lFuajf8H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2579573},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"32721ad4c1fc24105c65ef4e87ac8bf12442b305","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.24.0_1790022103931_0.7221429131140402","host":"s3://npm-registry-packages-npm-production"}},"1.25.0":{"name":"@ia-qa/self-healing","version":"1.25.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.25.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"040ddec5ecf55fe7d332e9eddbfe95672a5c3440","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.25.0.tgz","fileCount":283,"integrity":"sha512-xZTxvcn95i+KLc6BENQ5nqO5IyfShqY/5xcRjCo3J5itgXA8VlaAALf8sCgLTCzfk5K99RVPmGLdbfGRyOKZMw==","signatures":[{"sig":"MEYCIQDU25HvjwTL67cm+KgoEnpWm6gS/R6qMLInpRQb3DK9hgIhAPjahBhBK+VyilcEvTN1GQbyOgKzRXF7g6YBfiilGg0P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD+olXI5kzdvsxdBhtjprdLdNb/3C7PG/swmzheqVc1PgIgFT4u+XF8tZ+UKy0HugzelzrYEx+YbHw78scXQH3cCf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2606209},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"be127570072ba77a4fb67cfde03de1749fc949c5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.25.0_1790078218377_0.2710319171993467","host":"s3://npm-registry-packages-npm-production"}},"1.26.0":{"name":"@ia-qa/self-healing","version":"1.26.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.26.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"08fc9fabd87f235eec3ead67ef9a87671342e08e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.26.0.tgz","fileCount":283,"integrity":"sha512-fPv9ldcomMxeryBbGNSF/PE8b36E7OBBkg526hstRprJkcdVSzjL4+b0M2kkiwR+rKP0N3AJC6Lniw8q0m676A==","signatures":[{"sig":"MEUCIE7ylxJnr/JW6cUntUZeCRueQARY0bFSvn/m/ctH7ObfAiEA+t2YIz7rIixmBSoKM3KBD0KI6+SHZHT9HTfxj6D/Q2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHx4Ffs4Apk4dXa043RD2W09DnL2BU8TggJ9l2sncjK0AiEAgvUo6wNYwPZSeGJNTjiSv/ll4KcU5JDqTOVbhsg/n+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2630121},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"be127570072ba77a4fb67cfde03de1749fc949c5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.26.0_1790082353936_0.34045338490379295","host":"s3://npm-registry-packages-npm-production"}},"1.27.0":{"name":"@ia-qa/self-healing","version":"1.27.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.27.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"94d396de9da33db159a345ebe87a3b143916236d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.27.0.tgz","fileCount":283,"integrity":"sha512-pz5Vr05mgdJlDTcPlFBs4nf1zzqfGcbSv/AGRqkiqKSO1d09UeVu7C+kS5ItBTjTmnZeYKsVLWu7qwqTcQTFYw==","signatures":[{"sig":"MEQCIDoZkhFjx1PHBak3QL5mLQZYjQQIte1dOV0O6Wlal06fAiB3pZmCotJPFjdF4PMWMqosbpdeOKIsG7LsUQtzf59rzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDkWQ7M6aHcHbjUAyOQry9H+8ciPHRGq6LhAft/CvaJggIgF1G1eL1/JHEWbSt4zGP+dUmdrnuhI4ZFNzFLmiKiohE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2635722},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"4d3a27bbb37b07ccb637e0563bff48fe70424f84","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.27.0_1790092201816_0.026834535819059147","host":"s3://npm-registry-packages-npm-production"}},"1.29.0":{"name":"@ia-qa/self-healing","version":"1.29.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.29.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b1f5e45aee0d9025229a7959995df16a853af93e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.29.0.tgz","fileCount":289,"integrity":"sha512-a7vAcvoCOrydZO307Zl4VINnXXEQWG1tnwCbA8hSz7ZjJMBC5zNzTm19ikyNlAdo5amDgAw4BM/yK7hSOC7Lag==","signatures":[{"sig":"MEYCIQCLgDhjvcJDkPDbj2WJ7wJ2CspGIkvQMnl9YwTPTCCzywIhANFm3sHDZ+evaPYyAqberg+I6fMLxAU0lhzcRAikz7pQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDL2qRp1C6D/f9+4FBg0kPHx3EQk9v203o0WAOeRc+ReQIgOneRlw18XGL14IqGC8WDTApZeMHp7tXsL1cYp40bwEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2699006},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"502080697c27901f522e20e3baf078f3f695644b","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.29.0_1790438235774_0.6884422198593976","host":"s3://npm-registry-packages-npm-production"}},"1.29.1":{"name":"@ia-qa/self-healing","version":"1.29.1","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.29.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"0e368a347c860caeb2854e81f795c2dbc2f30cf6","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.29.1.tgz","fileCount":289,"integrity":"sha512-8x5pmg/LE/Az2c/I4jynT9FSjrjrXqp8KqBfUz/96HAlemzJIpYSJjktplS/eZMn0R4Gy3PnuqauTx7Dfcrc0Q==","signatures":[{"sig":"MEUCIQC5X/h1eNJn2K7pjJ8BlNHdUuKcXTSw/1QK0XX87T9M8gIgDTeL2JBqWX25PadVjDD+1TQa9SjO4aO9eMO4v8ZzLfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFU9qRTBZHPCGzRsbpzhdoIUJcdjgfh/d4VIBdqBMHftAiEA+NzY5RgvwIlfiNa/mEGi2nzMQugkosy7vQ/WI4RpYUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2701131},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"22b7e3f391124f4d60fcadca3041ee10903444b5","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.29.1_1790670797578_0.15744779079797588","host":"s3://npm-registry-packages-npm-production"}},"1.30.0":{"name":"@ia-qa/self-healing","version":"1.30.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.30.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"b0ef238dedaa24cea3758a7d8f1792a9a5b31b5c","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.30.0.tgz","fileCount":301,"integrity":"sha512-kA41DdjOuROOjpwnkO6Zs24ckfVDfXCxrV04JMkombUedm5dnncnR9wASMy+/H+h22snwMYKkrKz3jy//PRGKw==","signatures":[{"sig":"MEYCIQDU6zmNSGqA4KVzWEDlXXnL84owsOzuMs05n8R4s6YAygIhANp5G47J+Qrak9qmfW+axa8R7STozDFGc6Y7eu5Gwt75","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCFurqAo/BurHUiQx2C5911+BCw6T2Rj8IXzG4+ntLr7gIgQd6Z5jttrVadl4r0rrqdhOwj5W4p2/kv4drgPPJTdH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2770699},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"8632f82394bfafd2da748bb688285bd35940f5a2","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.30.0_1790675594630_0.7106705440553842","host":"s3://npm-registry-packages-npm-production"}},"1.31.0":{"name":"@ia-qa/self-healing","version":"1.31.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.31.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"7c061928dffd110235f5a0e44f89ff5f35da5d82","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.31.0.tgz","fileCount":301,"integrity":"sha512-fR8k4j5eaBaCaWzkH3m4FZjZtpPT9U6EweajXkXogI6eNYtih07jyR2YQw5Ue1fwdLf/naOujMZWB9iF59DiRw==","signatures":[{"sig":"MEUCIHysXwf4QEJq+B5vZriJ2zW851G/aoxRDIQZBttCWnspAiEAutBSyRm6he56YhR6BOPki8PzUjuznYqCXOxvps1nSm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDfFwUqRkOoAIBK7P4Zi/eRo/TNX3+bRPodT55yTUk1nwIhALYcJEOtLacfyOJBREVGUJ7Gwzl0S7dt3j6awFEzXH2D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2780943},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"7c3d38d6337b1050091c6bff14f84a4a9281f48c","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.31.0_1790683690326_0.6051403227971945","host":"s3://npm-registry-packages-npm-production"}},"1.31.1":{"name":"@ia-qa/self-healing","version":"1.31.1","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.31.1","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"9fb20db1941db366db3160801a578609f885cb26","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.31.1.tgz","fileCount":301,"integrity":"sha512-rmIXJ4EnjiggWPbO4ZxLGKXQ1DuzvJA4g/27QpBixqFynlziejwhOMBTFP7IVs6K8xqlCARMBTUHY50dT1lSaQ==","signatures":[{"sig":"MEQCIDYh1ME4XqB9+OQKhMZCSeHpfDrjAXM55AlwqChwebz4AiB59BW2rAdPpokI+eK3fr8HrzcCxGO+mfPJeYe6DKimrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG+oIWrprhY9kEX6aEXHwLirSyITQTm29w95xNJQ2LrmAiBUhvLd/lPM7fMWbl8pDO+rra9ZV6Sr11Qydu3dgw3RUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2785288},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"48e2c9dba96a8878446376838ae32857b2a30dd9","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.31.1_1790685997793_0.05875545538764082","host":"s3://npm-registry-packages-npm-production"}},"1.32.0":{"name":"@ia-qa/self-healing","version":"1.32.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.32.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"0a791bfa4d2740437e982aa13d5c924c7396f62e","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.32.0.tgz","fileCount":310,"integrity":"sha512-LVEq1pHHe19Amks4WI2d3tG998twienUqtFP/43w9N0wFeZwsUZMudGv+FsNjktGkfgT4sq8XWNk3z0T9PAJJg==","signatures":[{"sig":"MEUCIQC3bc03L2JHE6aXEdgl1QeejASOIeIU08NF5OE4hecuzAIgYTQsxU2ZgvB5Ezxya6jt39liNXehF0iV5YruXyR6S0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDxNoXO6x4K4jtLbPzvwocoyP0EkD1JE914IUIT2zfovwIhAOqnrP/44Fx0sLCwCeDCPmfrWrznplycZGCp7kSuPMvh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2857282},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"a83f4bfca455eebce9bced0a3a9db1494842a528","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.32.0_1790705182858_0.24342840989664727","host":"s3://npm-registry-packages-npm-production"}},"1.34.0":{"name":"@ia-qa/self-healing","version":"1.34.0","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","_id":"@ia-qa/self-healing@1.34.0","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"homepage":"https://www.ia-qa.com","bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"dist":{"shasum":"a1af9cf6b774f1cf9def683a5011fb49ee3e905d","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.34.0.tgz","fileCount":310,"integrity":"sha512-fBwedpObN9PagMye7kqMfuz34ijMIhR6rTx0L88QFQ9aMW2sMcgWS2F0uajOOzBwV6jo9bSdoUMpc1oKbgw6JA==","signatures":[{"sig":"MEUCIQCbNnLrQJ+zJNHa0oohhO3wRGcCswpX/vcMRhEqJVcQQAIgEaJ/GLnQ7hr6LzYL9SDITxD84d0GuXikJo4Ys2aTfcY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHIFNl1WPbmxfvAMhVp+ovuR2NGLigFjFG1icH4SBOtJAiEA4+s+gdxiYXOIuiKbvr4eKkg5BLM3FgvWtgMwL2XO/q4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2863344},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"d403fc9c109ee1a4c745cfccbf1385c84e3c5783","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/self-healing_1.34.0_1790841447002_0.38988905721818057","host":"s3://npm-registry-packages-npm-production"}},"1.36.0":{"_id":"@ia-qa/self-healing@1.36.0","bin":{"ia-qa-heal":"dist/cli/index.js","ia-qa-heal-ai":"dist/cli-ai/index.js","ia-qa-heal-mcp":"dist/mcp/server.js"},"bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"dist":{"shasum":"b395ddb2a3a2dd982c212cc9f870862355684c92","tarball":"https://registry.npmjs.org/@ia-qa/self-healing/-/self-healing-1.36.0.tgz","fileCount":310,"integrity":"sha512-lEVwQFzuLiuAZjC9nOuru1DHCWBRc+dgQO4Lr/uTTJ4212HjNtI8yGxeHGlqewVMcobeHkFpBJjIU2AuTJkyMQ==","signatures":[{"sig":"MEUCIQDwQdU37U22K/QZAv74+o2lbIQIL+mCdqkjXDUwrQYYyAIgf1w5Ps6nbBv4cPkb/Ni6LluGVQDIqaP6nQxWSekPF8E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDndf094U5uSnHGEfMfICbhnoZTH+CPS1ocg+qnygT33gIgHwnDip/FyiCsMrTCotsmp74PRuPo4iTiLN3lYhOudZY="}],"unpackedSize":2872119},"main":"dist/index.js","name":"@ia-qa/self-healing","type":"commonjs","types":"dist/index.d.ts","author":{"name":"Jean-Christophe Jamet"},"engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./dist/*":["./dist/*","./dist/*.js"],"./capture":{"types":"./dist/playwright/capture.d.ts","default":"./dist/playwright/capture.js"},"./cypress":{"default":"./dist/cypress/capture.js"},"./selenium":{"types":"./dist/selenium/capture.d.ts","default":"./dist/selenium/capture.js"},"./package.json":"./package.json"},"gitHead":"190169df7a1e63174f09160c18ab5838ff4e5286","license":"MIT","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start:mcp":"node dist/mcp/server.js","prepublishOnly":"node scripts/check-version-bump.cjs && npm run build"},"version":"1.36.0","_npmUser":{"name":"zi-c17","email":"jcjamet86@gmail.com"},"homepage":"https://www.ia-qa.com","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"_npmVersion":"11.12.1","description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","directories":{},"maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"_nodeVersion":"25.9.0","dependencies":{"jquery":"^3.7.1","prompts":"^2.4.2"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.45.0","typescript":"^5.5.0","@types/node":"^20.14.0","@types/prompts":"^2.4.9","@aws-sdk/client-ssm":"^3.600.0"},"peerDependencies":{"playwright":">=1.40.0","@aws-sdk/client-ssm":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ssm":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/self-healing_1.36.0_1790932864681_0.030173321354485916"}}},"time":{"created":"2026-07-16T12:56:42.095Z","modified":"2026-10-02T09:21:05.379Z","0.1.0":"2026-07-16T12:56:42.371Z","0.2.0":"2026-07-16T14:01:19.739Z","0.2.1":"2026-07-16T15:22:58.788Z","0.3.0":"2026-07-16T15:43:41.850Z","0.3.1":"2026-07-16T16:17:50.922Z","0.4.0":"2026-07-16T19:17:06.739Z","0.5.0":"2026-07-16T19:49:53.399Z","0.5.1":"2026-07-16T20:32:24.470Z","0.6.0":"2026-07-17T11:20:15.995Z","0.7.0":"2026-07-17T12:20:50.244Z","0.8.0":"2026-07-17T12:59:11.504Z","0.8.1":"2026-07-17T13:48:21.862Z","0.8.2":"2026-07-17T14:08:57.212Z","0.8.3":"2026-07-17T14:45:58.751Z","0.8.4":"2026-07-17T14:49:36.412Z","0.9.0":"2026-07-17T15:26:15.094Z","0.9.1":"2026-07-17T15:40:18.405Z","0.10.0":"2026-07-18T06:50:17.648Z","0.10.1":"2026-07-18T09:44:37.912Z","0.10.2":"2026-07-18T10:19:06.040Z","0.10.3":"2026-07-18T11:49:47.252Z","1.0.0":"2026-07-18T13:43:06.522Z","1.0.1":"2026-07-18T14:02:24.292Z","1.1.0":"2026-07-19T12:57:11.364Z","1.1.1":"2026-07-19T13:18:24.711Z","1.2.0":"2026-07-19T13:39:15.473Z","1.2.1":"2026-07-20T10:00:33.592Z","1.3.0":"2026-07-20T10:59:46.814Z","1.3.1":"2026-07-20T13:40:55.441Z","1.3.2":"2026-07-20T15:17:26.396Z","1.3.4":"2026-07-21T06:50:34.716Z","1.3.5":"2026-07-21T08:39:43.537Z","1.4.0":"2026-07-21T13:38:51.515Z","1.4.1":"2026-07-21T16:58:43.944Z","1.4.2":"2026-07-22T09:48:50.563Z","1.4.3":"2026-07-22T12:15:18.417Z","1.4.4":"2026-07-22T12:47:34.289Z","1.5.0":"2026-07-22T14:18:23.895Z","1.5.1":"2026-07-23T08:36:31.613Z","1.5.2":"2026-07-25T12:45:33.733Z","1.5.3":"2026-07-25T13:30:34.811Z","1.5.4":"2026-07-25T15:38:23.860Z","1.5.5":"2026-07-25T16:13:07.202Z","1.5.6":"2026-07-25T17:36:28.641Z","1.5.7":"2026-08-02T07:59:58.389Z","1.5.8":"2026-08-02T15:56:21.543Z","1.6.1":"2026-08-04T08:17:43.033Z","1.6.2":"2026-08-04T11:47:31.445Z","1.6.3":"2026-08-04T16:56:29.288Z","1.6.4":"2026-08-05T10:49:47.513Z","1.6.6":"2026-08-07T08:28:53.133Z","1.6.7":"2026-08-07T17:43:48.378Z","1.6.8":"2026-08-10T19:47:51.404Z","1.6.10":"2026-08-10T21:30:49.580Z","1.6.11":"2026-08-15T12:22:25.387Z","1.6.12":"2026-08-16T12:31:46.982Z","1.6.13":"2026-08-16T12:53:40.286Z","1.6.15":"2026-08-16T13:25:10.109Z","1.6.16":"2026-08-16T13:37:15.170Z","1.6.17":"2026-08-17T17:59:26.189Z","1.7.0":"2026-08-18T08:59:28.230Z","1.7.1":"2026-08-18T09:59:59.210Z","1.7.2":"2026-08-18T12:30:41.797Z","1.7.3":"2026-08-18T13:10:32.284Z","1.7.4":"2026-08-18T13:28:43.070Z","1.7.5":"2026-08-18T14:07:18.934Z","1.7.6":"2026-08-25T08:46:55.780Z","1.7.7":"2026-08-25T14:35:21.959Z","1.7.8":"2026-08-27T08:35:13.350Z","1.7.10":"2026-08-27T10:09:01.372Z","1.7.11":"2026-08-27T16:15:46.034Z","1.7.13":"2026-08-28T12:36:21.697Z","1.7.14":"2026-08-28T12:59:23.622Z","1.7.15":"2026-08-28T15:18:28.651Z","1.7.16":"2026-09-01T08:38:00.390Z","1.7.17":"2026-09-01T09:56:06.188Z","1.7.18":"2026-09-01T15:50:25.632Z","1.7.19":"2026-09-02T17:04:14.042Z","1.7.20":"2026-09-02T17:40:08.613Z","1.7.21":"2026-09-03T13:05:48.274Z","1.7.22":"2026-09-03T14:13:54.677Z","1.7.23":"2026-09-03T14:36:35.272Z","1.7.24":"2026-09-03T15:56:22.373Z","1.7.25":"2026-09-05T18:56:21.559Z","1.7.26":"2026-09-07T17:15:39.339Z","1.8.1":"2026-09-08T12:12:34.823Z","1.8.2":"2026-09-08T13:43:54.981Z","1.9.0":"2026-09-11T13:53:11.579Z","1.9.1":"2026-09-12T07:04:19.320Z","1.9.2":"2026-09-15T09:38:13.238Z","1.9.3":"2026-09-15T09:51:37.543Z","1.10.0":"2026-09-15T11:50:06.649Z","1.11.0":"2026-09-15T13:27:47.533Z","1.12.0":"2026-09-15T14:28:52.578Z","1.13.0":"2026-09-15T15:43:07.696Z","1.14.0":"2026-09-16T16:56:42.856Z","1.15.0":"2026-09-17T10:00:03.530Z","1.16.0":"2026-09-17T14:18:30.747Z","1.18.0":"2026-09-18T12:45:32.520Z","1.19.0":"2026-09-19T20:54:50.148Z","1.19.1":"2026-09-19T21:30:25.481Z","1.23.0":"2026-09-21T17:03:09.167Z","1.24.0":"2026-09-21T20:21:44.068Z","1.25.0":"2026-09-22T11:56:58.489Z","1.26.0":"2026-09-22T13:05:54.094Z","1.27.0":"2026-09-22T15:50:01.972Z","1.29.0":"2026-09-26T15:57:15.900Z","1.29.1":"2026-09-29T08:33:17.717Z","1.30.0":"2026-09-29T09:53:14.792Z","1.31.0":"2026-09-29T12:08:10.472Z","1.31.1":"2026-09-29T12:46:37.930Z","1.32.0":"2026-09-29T18:06:22.975Z","1.34.0":"2026-10-01T07:57:27.142Z","1.36.0":"2026-10-02T09:21:04.817Z"},"bugs":{"url":"https://github.com/JcJamet/ia-qa-heal/issues"},"author":{"name":"Jean-Christophe Jamet"},"license":"MIT","homepage":"https://www.ia-qa.com","keywords":["self-healing","selectors","broken-selectors","selector-drift","locators","flaky-tests","flaky","e2e","e2e-testing","testing","test-automation","qa","playwright","cypress","selenium","mcp","model-context-protocol","test-maintenance","accessibility","codemod"],"repository":{"url":"git+https://github.com/JcJamet/ia-qa-heal.git","type":"git"},"description":"Your Playwright, Cypress or Selenium tests break when a selector moves — this finds the element again and rewrites the test. Deterministic: no LLM decides whether your build passes. Runs entirely on your machine, with a local MCP server for agents.","maintainers":[{"name":"zi-c17","email":"jcjamet86@gmail.com"}],"readme":"# ia-qa-heal — self-healing selectors for E2E tests\n\n[![npm](https://img.shields.io/npm/v/@ia-qa/self-healing)](https://www.npmjs.com/package/@ia-qa/self-healing)\n![license](https://img.shields.io/npm/l/@ia-qa/self-healing)\n![node](https://img.shields.io/node/v/@ia-qa/self-healing)\n\nYour E2E tests break because a selector moved, not because the app is wrong. This finds the\nelement again and rewrites the test.\n\n**The verdict is deterministic — no model decides whether your build passes.** When the repair\nis not provable, the tool refuses to guess and tells you why, rather than quietly rewriting a\ntest into a green lie.\n\n**It runs entirely on your machine.** It brings its own headless Chromium, so it sees\n`localhost`, staging, or an app behind a VPN, and **nothing ever leaves the machine**.\n\nFramework-agnostic where it reads, narrower where it **writes** — see\n[what is supported](#what-is-supported) before you judge it on the half you happen to hit.\nShips a **CLI**, a **local MCP server** for AI agents, and an accessibility-tree page mapper.\n\n> **New here?** The [step-by-step tutorial](https://www.ia-qa.com/devtools/selector-drift/tutorial)\n> walks the whole thing with no jargon (same text as `TUTORIAL.md`, shipped in this package).\n> This README is the short reference.\n\n## See it work\n\n[![ia-qa-heal repairing a broken Playwright suite: 3 tests failed, FIX verdict, selectors rewritten to getByRole, 3 passed, verified](https://www.ia-qa.com/media/heal-demo.gif)](https://www.ia-qa.com/media/heal-demo.mp4)\n\n▶ **[Watch the full 48-second video](https://www.ia-qa.com/media/heal-demo.mp4)** — the loop above\nstarts one step earlier, from a red build: `explain` tells you which failures are drift and which\none is **not**, then covers whether the app you mapped is sound at all, the MCP server answering\nan agent, and the HTML report `--report` writes for a PR.\n\n`ia-qa-heal run` runs your suite, watches it break, diffs the live app against your baseline,\nrewrites the dead selectors, then **re-runs the suite to verify** and exits on that verdict.\nNothing is committed. By default a selector is replaced by the element's new selector, in the\nstyle your suite already uses — CSS stays CSS. The demo adds `--locators`, which rewrites to\n`getByRole(…, { exact: true })` where that is provably safe: a locator immune to the *next*\nlayout change.\n\n**Prefer clicking to typing?** [`ia-qa-heal ui`](#the-console--ia-qa-heal-ui) opens a local\nconsole — the rows waiting on you, the verbs as buttons, the history as charts.\n\n[![The ia-qa-heal console: a BLOCK verdict, the one element the tool refused to guess, the verbs as buttons, the history as charts](https://www.ia-qa.com/media/heal-ui-poster.png)](https://www.ia-qa.com/media/heal-ui.mp4)\n\n▶ **[Watch the console (32s)](https://www.ia-qa.com/media/heal-ui.mp4)** — buttons pressed,\nresults rendered, nothing written.\n\n## Which verb answers which question\n\n| Your question | Verb |\n|---|---|\n| my tests broke — fix them | `run` (capture → diff → confirm → fix → re-run to verify) |\n| my app is behind a login | `login` — a visible browser, you log in, the session is reused |\n| record the app as it is now | `map`, then `baseline` to promote it as the reference |\n| apply the repairs to my test files | `fix` (`--dry-run` first; it edits the working tree, never commits) — `--verify` then re-runs your tests and says green or still red |\n| **here is the failure — is it drift?** | **`explain`** — paste the runner's output, get the verdict for the locator it names |\n| **several elements match — I know which one the test meant** | **`decide`** (or *✅ This one* in `ui`) — rewrites the test to your pick, re-runs it, says green or still red; never commits |\n| did anything drift? | `diff` → PASS/FIX/BLOCK, the CI gate |\n| **my suite already ran with `IAQA_CAPTURE=1`** | **`diff`, on its own** — merges the capture, no browser, no second run |\n| day one, no baseline — is my suite still valid? | `audit` (advisory; never gate on it) |\n| is the app itself sound? | `check` — dead links, unnamed elements, name collisions, orphan pages |\n| which pages am I *not* testing? | `discover` (`--sitemap`, or `--crawl` behind the login) |\n| **my menus, tabs and modals aren't in the contract** | **`map --deep`** — opens them and puts what they reveal in the same contract |\n| what do my tests actually use? | `ingest` |\n| show me the app's structure | `graph --format mermaid\\|svg\\|json\\|markdown` |\n| is this getting better or worse? | `history` |\n| let me look and decide myself | `ui` — a local console |\n| where do I put my API key? | `secret set` — the OS store, so it stops living in your environment |\n| teach my AI agent to drive this | `skill` — installs the agent instructions into `.claude/skills/` |\n\n`ia-qa-heal <verb> --help` for flags. On a slow suite, note that `run` runs it **twice** (once\nto capture, once to verify the fix): `run --no-verify` keeps only the first, and\n`IAQA_CAPTURE=1` on the run you already do in CI plus `ia-qa-heal diff` costs nothing extra.\n\n**Same operations for an AI agent** — one contract served twice, never a simplified view for\none of them. `ia-qa-heal-mcp` exposes `map_app`, `diff_mappings`, `fix_tests`, `ingest_tests`,\n`audit_suite`, `explain_failure`, `check_app`, `heal_history` and `suggest_heal`. `login` and\n`ui` are deliberately not tools: both wait for a person.\n\n**Any provider that speaks the OpenAI API** — `openai`, `anthropic`, `google`, or\n`openai-compatible` with a `baseUrl`: DeepSeek, Groq, Mistral, OpenRouter, Together, vLLM,\nor Ollama on your own machine, where the call never leaves it — and `azure-openai`, with\n`baseUrl` = your resource endpoint (`https://<resource>.openai.azure.com`) and `model` = your\n**deployment** name (called on the classic deployment path with an `api-key` header; add\n`?api-version=…` to the endpoint if your deployment needs a newer one). Paste whatever the portal\nshows: the full **Target URI** works as is — the deployment it names is the one called, whatever\n`model` says — and so do a `*.cognitiveservices.azure.com` endpoint, an API Management gateway\nin front of the resource (its path prefix is kept), and the Azure AI Foundry model-inference\nendpoint (`https://<resource>.services.ai.azure.com/models`, where `model` goes in the body). `ia-qa-heal-ai models` lists\nthe URLs. The egress notice always names the host it will really reach, and refuses to\nannounce anything when a compatible endpoint has no URL configured.\n\n**Optional, with your own key** — `ia-qa-heal-ai` (`init`, `models`, `suggest`) proposes a match\nfor the rows deterministic matching gave up on. It is a suggestion a human confirms, and it\nnever touches the verdict.\n\n## Install\n\n```bash\nnpm i -D @ia-qa/self-healing\n```\n\n**Four commands to your first verdict** — no baseline needed, nothing is rewritten:\n\n```bash\nnpx ia-qa-heal init      # interactive: writes .ia-qa/config.json\nnpx ia-qa-heal ingest    # inventory the selectors and names your tests use\nnpx ia-qa-heal map       # capture the app, and bind your selectors to it\nnpx ia-qa-heal audit     # does my suite still name things that exist?\n```\n\n`audit` is read-only and advisory (exit 0 unless `--strict`) — it answers on day one, before\nyou have any history to compare against.\n\nRather fill in a form than answer questions in a terminal? `npx ia-qa-heal ui` in a folder with\nno config opens the [console](#the-console--ia-qa-heal-ui) on a setup form that writes the same file.\n\n**Then one command, for good:**\n\n```bash\nnpx ia-qa-heal baseline  # lock today's UI as the reference — once\n# … someone changes the UI …\nnpx ia-qa-heal run       # runs your suite → diffs → fixes → re-runs to verify\n```\n\n`run` is the whole loop in one verb: it runs your suite, watches it break, diffs the live app\nagainst the baseline, rewrites the dead selectors, then **re-runs the suite to verify** and\nexits on that verdict. Nothing is committed.\n\n<details>\n<summary>Prefer the steps unbundled — <code>map</code> → <code>diff</code> → <code>fix</code></summary>\n\n```bash\nnpx ia-qa-heal map\nnpx ia-qa-heal diff        # PASS / FIX / BLOCK — this is the CI gate\nnpx ia-qa-heal fix --dry-run\nnpx ia-qa-heal fix\n```\n\nUse this when your suite is slow (`run` runs it twice), or when CI already captures with\n`IAQA_CAPTURE=1` — then `diff` alone costs nothing extra.\n\n</details>\n\n`ingest` comes **first**, and it is not optional if your tests locate by CSS: it is what lets\n`map` bind the strings your tests write to real elements. Re-run it when your test files\nchange — `map` says so when they have. Commit `.ia-qa/` (except `session.json`): the baseline\nis what CI compares against.\n\nThree binaries ship together: `ia-qa-heal` (the loop), `ia-qa-heal-mcp` (stdio MCP server for\nagents), `ia-qa-heal-ai` (optional BYOK suggestions — never a gate).\n\n## Behind a login\n\nMost apps worth mapping are behind one, and only some logins are a form.\n\n```bash\nnpx ia-qa-heal login     # opens a real browser; you log in however the app asks\nnpx ia-qa-heal map       # reuses that session\n```\n\n**Nothing to confirm in the terminal.** `login` watches the window and finishes by itself the\nmoment the session it carries genuinely opens the app — \"press Enter when you are done\" was\nthe last place this verb took somebody's word for a fact about the world, and it mostly went\nunanswered while the person got on with their day. What counts as done is a definition rather\nthan a guess: a clean browser carrying only the captured session has to reach somewhere the\nlogged-out one could not, so a magic-link login page with no password field on it is never\nmistaken for success. It opens immediately, too — typing the verb is the request, so there is\nno confirmation to answer first. Where the logged-out browser ends up is measured in its own\nclean window rather than read off the one in front of you: an app that checks authentication\n**in the browser** loads its own page first and only then bounces to the identity provider,\nso the visible window answers with the page you are about to land on. An app that renders its\nlogin in place, at one unchanging URL, is covered by the same rule. `--wait 0` restores the press-Enter flow for an app whose login cannot\nbe observed from outside; `--wait <seconds>` changes how long to watch.\n\n**The session is checked before it is saved.** `login` reopens\nthe same page in a clean browser carrying nothing but the captured session. Only a session that\nlands on the app is saved and reported as good. A session that carries nothing is **not\nwritten at all** — it could log nobody in, and writing it would replace a session that worked.\nOne that lands back on the login form is written *beside* the existing file\n(`session.json.unverified`), never over it, and the command exits non-zero. This matters\nbecause a storageState holds cookies and local storage only: an app keeping its token in\nIndexedDB leaves nothing to save, however logged in the window looks — and that used to print\na green \"Session saved — 0 cookies\".\n\nIt models **nothing** about your login, which is why SSO, MFA, a consent screen and magic\nlinks all work — you perform them. What is saved is the browser session\n(`.ia-qa/session.json`): live cookies, so treat it like a password. It stays on your machine,\n`login` writes `.ia-qa/.gitignore` so a commit cannot carry it, and when it expires `map` says\nso instead of quietly mapping the login page under your dashboard's name.\n\n**Already have a session?** An authenticated Playwright suite usually writes a `storageState`\nin `globalSetup` — point at it instead of logging in twice:\n\n```bash\nnpx ia-qa-heal map --session playwright/.auth/user.json\n```\n\nPrecedence: `--session` → `IAQA_SESSION` → `\"session\"` in config → what `login` wrote. A\nsession you *named* and that cannot be read stops the run; it never falls through to \"no\nsession\", which would capture the login page under your pages' names.\n\n`login` needs a terminal and refuses under CI. There, use `auth` (a form fill, secrets from\nenv/SSM — see **Configuration**) or capture-during-run, where your own suite logs itself in.\n\n### Where the API key lives — `ia-qa-heal secret`\n\nA key exported in your shell is inherited by **everything you launch from it**, an AI agent\nincluded. Measured: a spawned process read the whole 164-character key straight out of\n`process.env`. Putting it in the machine's credential store stops it being ambient.\n\n```bash\nia-qa-heal secret set OPENAI_KEY     # asks for the value; never an argument, never echoed\nia-qa-heal secret check OPENAI_KEY   # does it resolve? yes or no — never the value\nia-qa-heal secret list               # the names it holds\n```\n\n`ia-qa-pal ui` has the same thing as a form: it writes to the same store, never shows the value back, and reads it back before it says *stored*.\n\nAn **`env` reference also picks it up**: when the variable is not set in the shell, a value stored under the **same name** answers it. The shell always wins, so CI (variable set, no store) is unchanged and no config needs editing. Or make the store the only source:\n\n```json\napiKey: { source: keychain, key: OPENAI_KEY }\n```\n\n| | |\n|---|---|\n| macOS | the keychain (`security`) |\n| Windows | DPAPI — encrypted for **this user account, on this machine** |\n| Linux | the desktop keyring (`secret-tool`) |\n| anywhere else, or no `secret-tool` | it **refuses** and points at `env` — no home-made vault |\n\nThere is deliberately no `secret get`: a verb that prints a secret puts it in a scrollback, a\nlog or an agent transcript, which is what this exists to avoid. `set` refuses without a\nterminal — a person types the value, an agent cannot do it for them. **In CI keep `env`**:\nthere is no store and no person there, and the runner already holds the secret.\n\n**What it does not do**, said plainly: it is not a barrier against an agent that decides to\nread the key — it can run the same OS command. What changes is that the value stops being\nambient, so obtaining it becomes an explicit, visible act instead of an inheritance.\n\n### Is the session still good? — `ia-qa-heal session --check`\n\nA wall has three possible causes, and \"expired, rotated, or never covering this domain\" is a\nlist, not an answer. One of them means *log in again*; another means your `baseUrl` and your\nsession are about **different applications**, which logging in will never fix.\n\n```bash\nnpx ia-qa-heal session --check             # 0 it holds · 1 it does not · 2 could not tell\nnpx ia-qa-heal session --check --offline   # answer from the file alone, open nothing\n```\n\n**Two of the three need no browser**, because a cookie carries its own expiry and its own\ndomain:\n\n```\n🔑 .ia-qa/session.json\n   1 cookie, 0 origins with local storage  ·  staging.other.test\n   First cookie expires in 24 hours\n\n❌ Nothing in this session is scoped to app.example.com — its cookies are for staging.other.test.\n   The session and the baseUrl are about different applications, so logging in again will\n   produce the same file.\n```\n\nSo the browser opens only for the question a request is the only witness to: the file is\nvalid, correctly scoped and unexpired, and the app answers with a login anyway — the server\ndropped it. A navigation that fails is reported as **could not tell** (exit 2), never as a\ndead session: that distinction is the whole point of having the verb.\n\n**And landing somewhere else is never a pass.** A wall is read as \"sent elsewhere *and* shown\na password field\" — asked of every frame, and given a moment to render one, because a\nfederated form is usually in an iframe and an SPA has drawn nothing at `domcontentloaded`.\nWhen the app sends the replay to **another host** and no password field is found there, that\nis reported as `off-site` and **exit 2**, never as ✅: an identity provider that asks for an\nemail first looks exactly like a legitimate redirect, and the one certain fact is that the\nsession was never used on your app.\n\n```\n⚠ Asked for app.example.com, landed on https://login.provider.example/authorize — another\n  site, and no login form on it.\n   Nothing was proven either way: the session was never used on app.example.com.\n```\n\nRun it before a long `map`. And **`map` itself now stops at the first login wall when a\nsession is in use** — a session is one credential for the whole app, so walking the remaining\npages into the same wall only spends the run re-proving it. The pages it did not attempt keep\ntheir previous contracts and read `stale` in the next diff: not measured, not unchanged.\n\n### Start from the failure — `ia-qa-heal explain`\n\nEvery other verb starts from a contract. You start from a red build.\n\n```bash\nia-qa-heal explain --junit results.xml            # the report your runner already writes\nia-qa-heal explain --message \"Expected to find element: '.btn-primary'\"\nnpx cypress run 2>&1 | ia-qa-heal explain          # or just pipe the log\n```\n\n```\n🔧  FIX  ia-qa-heal explain — is this failure selector drift?\n   1 failure read · 1 locator identified · 1 page compared\n\n   🔧 FIX  selector \".btn-primary\"\n      page: checkout\n      used at: tests/checkout.spec.js:1\n      proposed: .btn-primary  →  #pay-now\n      The string reaches nothing, but its element survived. `ia-qa-heal fix` can rewrite it.\n```\n\n**`PASS` is the answer worth the most.** It means the locators in that failure still reach\ntheir elements — the build is red for another reason, so stop reading selectors and go look\nat timing, test data, or the app. It re-runs nothing, so it never claims your test is flaky;\nit only rules drift out.\n\nIt works the same for every runner in every language because **it does not parse your\nrunner's error messages**. It intersects the failure text with the locator literals\n`ingest` read from your own sources — so pytest, Cypress, Playwright, Selenium, WebdriverIO\nand JUnit all work, and the answer comes back with the `file:line` the error never carried.\n\nRead-only, offline, opens no browser, applies nothing. Needs a baseline (it is about drift —\na locator that *worked* and stopped); with no baseline the day-one verb is `audit`. Exits 0\non PASS, 1 on BLOCK, and on FIX only with `--strict`.\n\n## What is supported\n\nThree different questions, three different answers — and conflating them is how a tool\nearns \"it half worked\". **Inventoried** is what `ingest` can find in your sources.\n**Judged** is what `diff` / `audit` / `explain` can put a verdict on. **Rewritten** is what\n`fix` will edit in your files.\n\n| | inventoried | judged | rewritten |\n|---|---|---|---|\n| CSS selectors — any language, any framework (`.js .ts .py .java .cs .rb .php .go .kt .feature`) | ✅ | ✅ | ✅ |\n| Role-anchored names — `getByRole`, `getByLabel`, `getByPlaceholder`, `findByRole`, `By.linkText` | ✅ | ✅ | ✅ |\n| The same, on structure — `getByRole('heading' \\| 'status' \\| 'alert', { name })` | ✅ | ✅ | ✅ the name in the call |\n| Text-anchored — `getByText`, `cy.contains`, `getByTitle`, `getByAltText` | ✅ | ⚠️ reported, never judged | ❌ **by design** |\n| `--locators` upgrade (rewrite a selector into `getByRole`) | — | — | Playwright, `.js/.ts` only |\n| Selectors built by concatenation or a template | ❌ | ❌ | ❌ |\n\nThree of those rows are deliberate refusals, not gaps:\n\n- **Text-anchored locators name a string, not an element.** The contract holds the page's\n  controls and its structure — not every paragraph — so nothing can prove `getByText('Save')`\n  meant the renamed button rather than a line of prose that never moved. Editing one would\n  break a *passing* test — the single outcome worse than the drift. They are reported with `file:line` and hold the verdict at\n  BLOCK. Cypress reaches role-anchored rewriting only through `cy.findByRole`; that is a\n  property of Cypress's API, not a hole here.\n- **`--locators` is Playwright-only** because `getByRole(...)` is Playwright syntax. A `.py`\n  or `.java` suite still gets the plain selector rewrite — the upgrade is an extra, not the\n  feature.\n- **A concatenated selector is invisible to a static scan**, and equally invisible to the\n  literal rewrite `fix` performs. Nothing is lost by admitting it.\n\n**Structure is in the contract too, and matched more strictly than a control.** `map` records\nheadings, live regions (`status`, `alert`, `output`, `aria-live`) and landmarks that carry a\nreal name — because a test asserts on what a page *says*, and a Page Object needs the sections\nit says it in. Two restraints keep that from becoming noise. An element with **neither a name\nnor an identity-bearing selector** is not written down at all: a nameless `<nav>` at a\npositional address says nothing and moves on the next insertion. And structure is matched on\n**role + name alone** — no context tie-break, no fuzzy fallback. Both shortcuts are right for a\ncontrol and wrong here: a heading's context is the heading *before* it, so it shifts exactly\nwhen you need it, and \"Beta Widget\" is a 0.6 fuzzy match for \"Alpha Widget\". Two candidates are\n`ambiguous`, none is `lost`, and neither is ever a guessed rewrite.\n\n**Honest limit of the \"rewritten\" column outside JS.** The rewrite path accepts those file\nextensions and the code paths are exercised, but the test suite's rewrite cases are written\nagainst `.js`/`.ts` files. Treat non-JS rewriting as working-but-less-travelled: run\n`fix --dry-run` first, which you should be doing anyway.\n\n### One more axis: how much of the page is under contract at all\n\n`map` records the state a page **loads in**. Everything behind a dropdown, a tab, an accordion\nor a modal is in no contract — so when it drifts, nothing says so. It is a coverage hole and\nnever a false alarm, which is what makes it survive: the gate stays green over a surface it\nnever looked at.\n\n```bash\nia-qa-heal map --deep     # open them, and contract what appears\n```\n\nMeasured on ia-qa.com: one page 105 → 133 elements, another 126 → 264. Across eight unrelated\nsites (MDN, Bootstrap, Material UI, GOV.UK, Wikipedia, Docusaurus…), seven gained elements —\nthe gain is largest on component-framework apps and near zero on content sites, so it is worth\nsaying which one you have before reaching for it.\n\n- **Two guards, and you should know the limit of both.** Every non-GET request is aborted for\n  the walk, and controls named like actions (*log out*, *delete*, *pay*…) are never clicked —\n  a logout handler that only clears local storage sends no request for the network guard to\n  catch, which is why the second guard exists.\n  **Neither covers a `GET` that writes.** `GET /api/orders/42/archive` is a REST violation and\n  it is also common, in admin links, one-click confirmations and older apps; if such a\n  endpoint sits behind a control whose name reads like anything else, `--deep` will click it.\n  The denylist is the only thing between you and that, and it matches on names. **Run `--deep`\n  against staging the first time**, read what it clicked, and only then point it at production.\n- **What it reaches but cannot contract is reported**, not hidden (`↩ N left out`): a selector\n  must name exactly one element, and a positional one captured inside a menu can collide with\n  the page behind it.\n- **A deep baseline is only comparable to a deep capture.** Mixing the two reports everything\n  behind a menu as `lost`; `diff` and the MCP both warn before the verdict.\n- **~1 minute per page** against seconds for a plain `map`. It is for building a baseline, not\n  for a per-commit gate.\n\n## The verdict\n\n```\n🔧  FIX   2 ok · 1 renamed · 3 healable · 0 ambiguous · 0 lost\n```\n\n- **PASS** — nothing moved.\n- **FIX** — every break has a deterministic old→new rewrite. `fix` applies it.\n- **BLOCK** — a human decides. Nothing is rewritten.\n\nWhat `fix` **refuses** is the point of the tool:\n\n| | |\n|---|---|\n| `ambiguous` | several candidates — any choice is a coin flip |\n| `lost` | the element is gone; there is nothing to rewrite towards |\n| `rebound` | the selector now finds a *different* element — the test passes and acts on the wrong thing |\n| `unattributable` | `getByText`, `cy.contains`, `getByTitle`… name a **string, not an element**. Nothing proves the test meant the renamed button rather than a heading that never moved, so editing one would break a *passing* test |\n\n`--locators` rewrites to `getByRole(role, { name })` instead of a fresher CSS path, where that\nis provably safe — a selector that survives the next layout change. Without it, a CSS selector\nis replaced by a CSS selector: the tool does not impose a locator style on your suite.\n\n### At runtime, if you want it — `aiClick` / `aiFill`\n\n```ts\nimport { aiClick } from '@ia-qa/self-healing';\nawait aiClick(page, 'button#login');\n```\n\nIf the normal action times out, these read the page contract, re-scan the live page, retry on\nthe element that semantically matches, and log a loud warning that the test needs updating.\nUseful to keep a suite green while you triage — but it is a **stopgap, not the loop**: healing\nin memory hides the drift instead of putting it in a pull request. The verbs above edit your\nfiles so a human reviews the change.\n\n## Page Objects written in CSS\n\nYour Page Object says `.btn-primary`. The contract says `#pay-now`. Both name the same button,\nand until they are **bound** every drift row reads *not referenced by your tests* —\ntechnically true, useless in practice.\n\nSo `map` binds them (with `usage.json` present — run `ingest` first) and records the result in\n`.ia-qa/mapping/_resolved/`. What that buys, on a diff where the element contract did not move\nat all:\n\n```\n🔧  FIX\n   2 ok · 0 renamed · 0 healable · 0 lost      ← the contract is spotless\n\n   🔗 1 selector your tests write no longer reaches what it used to:\n      🔧 .btn-primary  →  #pay-now\n         the element is still there, only its address moved.\n         tests/checkout.spec.js:1, tests/checkout.spec.js:4\n```\n\nSomebody renamed a CSS class. The element diff is clean, the suite is broken, and `fix`\nrewrites the literal in your files. Four outcomes, one repaired automatically:\n\n| | |\n|---|---|\n| reaches **nothing**, and its element is still there | 🔧 rewritten |\n| reaches a **different** element | ⛔ never rewritten — your test passes and acts on the wrong thing |\n| reaches **several** elements | ⛔ a coin flip |\n| reached **several** and now reaches **none** | ⛔ the candidates are named, none is chosen for you |\n| its element is **gone** | ⛔ nothing to rewrite towards |\n\nThat fourth row is the one a route migration produces — every `a[href=\"/index.php/cart\"]`\nbecoming `a[href=\"/cart\"]` in one commit. The string used to match two links and now matches\nneither, so your suite is red; what it could have meant is still on the page and is listed with\nits new address. No rewrite is offered, and that is not timidity: the binding was already\nambiguous, so which of the two your test meant was never established. Picking one would be a\ncoin flip wearing a fix's clothes.\n\n### A link that leads somewhere else\n\n`href` is a **destination**, not an address. Because `stableSelector` prefers `a[href=\"…\"]`,\na link whose route moved shows up as a moved selector — reported, until now, on the same line\nas a button that slid one slot down the DOM:\n\n```\n🧭 2 links now lead somewhere else (the element is the same — its destination is not):\n   • Write a contract in the browser →   [home]\n      /devtools/eval-contract-runner  →  /qatools/eval-contract\n   • ?   [mcp-server]\n      /devtools/eval-contract-runner  →  /qatools/eval-contract\n   Not failing the run — no test navigates to these. Check the ones you reach by URL.\n```\n\nIt **does not fail your run on its own**: an app is allowed to reorganise its URLs, and a gate\nthat goes red on that is a gate someone switches off. It fails only when your suite navigates\nto the route that moved — `ingest` now inventories `page.goto`, `cy.visit`, `driver.get` and\n`browser.url`, so that case arrives with its `file:line`. No `ingest`, no escalation.\n\nNothing here is ever rewritten. A `page.goto` is not a locator, and the new route may be the\nsame page renamed or a different page entirely — you can tell in a second from two URLs, and\nthe tool cannot tell at all.\n\nMeasured across two real captures of a 142-page app: **2 findings over 4 563 named links**, and\nzero on a second corpus. Details, including the false positives the first measurement produced,\nare in `SPEC-route-drift.md`.\n\n### When a page you declared has moved\n\n`map` already notices that the browser landed somewhere other than the URL in `config.json`.\nIt now offers the correction, and `--fix-redirects` writes it:\n\n```\n↪️  1 declared page is no longer at the URL config.json declares:\n   articles:  /articles  →  /resources\n   Run `ia-qa-heal map --fix-redirects` to write these, or edit config.json yourself.\n```\n\nLeft uncorrected, the contract for `/resources` is written under the name `articles`, which is\nthe same wrong-identity problem two apps sharing a `/login` produce.\n\n**It refuses when several declared pages land on the same place.** That is not a migration —\nit is an expired session, a redirect to sign-in, or an outage, and applying it would rewrite\nyour whole page list to point at the login screen. The group is named and skipped, a genuine\nsingle move in the same run still applies, and the message sends you to `session --check`.\n\n**Your app may already carry the answer.** The contract holds interactive elements only, so a\nselector on a status div, a cell or an alert is not in it. Usually that stays quiet — such an\nelement has no identity independent of what drifts, so nothing could be repaired anyway. But\nwhen it *does* carry one (`data-testid`, `id`, `aria-label`), the repair is exact:\n\n```\n🔧 .infoBlockContainer > .alert  →  [data-testid=\"cart-alert\"]\n```\n\nThat is the common shape of a legacy suite: the front end added test ids years after the Page\nObjects were written and nobody propagated them. It cannot be noisy — an element with a test\nid has a stable identity by construction, and an anchor matching two elements is refused.\n\n**How much of your suite is in reach?** `map` says so at the end, over the union of the pages\nit just mapped — the number nobody can add up by hand, because the same string appears on\nseveral pages:\n\n```\n🔗 Your 181 inventoried selectors, against the pages just mapped:\n   34 repairable   reach a contracted element, or an identity this tool can rewrite towards\n   52 working      reach something real with no stable identity — fine today, nothing to repair towards\n   95 not seen     on any page mapped this run — which is about your coverage, not your tests\n```\n\nRead the composition, not the ratio. `working` selectors are **fine**. And `not seen` is a\nstatement about how many pages you map: a selector on a page absent from `config.pages`, or in\na state no capture reached, looks exactly like one that is gone. `ia-qa-heal discover` lists\nwhat you are missing.\n\n**Not only CSS.** A suite writes `text=Save`, `//button[@id=\"save\"]`, `button:has-text(\"Save\")`,\nand in Cypress `button:contains(\"Save\")`. `querySelectorAll` rejects every one of them, so they\nused to be reported as *not seen* — with the element sitting right there in the page. Each\ngrammar is now asked of the engine that owns it: Playwright's own selector engine for its\nsyntax and for XPath (the same XPath Selenium evaluates), and jQuery for what Cypress writes —\ninjected for the probe and handed straight back, so your page keeps its own `$`. A `${…}`\ntemplate is the one honest dead end: it has no value at capture time, so it is counted as\n**not evaluable**, apart from *not seen*, because the two carry opposite remedies.\n\nOne repair is refused for the same reason the others are offered: the target is a CSS contract\nselector, so an XPath literal is never rewritten where the call demands an XPath —\n`By.xpath(\"#pay-now\")` is not an XPath, and a repair that leaves your test red while looking\napplied is worse than the drift. Written in `locator()` or `cy.get()`, which take plain CSS,\nthe same literal is repaired as usual.\n\nNo `usage.json` ⇒ no bindings ⇒ nothing changes. Same rule as name drift: **no inventory, no\nescalation.**\n\n## Capture during your own test run\n\n`map` walks URLs. Your suite walks *states* — post-login pages, modals, wizard steps — and\nalready handles whatever auth your app demands. Arm it with `IAQA_CAPTURE=1` and the contract\nis captured during the real run. **This is the intended path for a multi-domain / federated-SSO\napp**, and it never touches your credentials.\n\n**Playwright** — one import at the top of a spec (or wrap your own extended `test` with\n`withCapture`):\n\n```ts\nimport { test, expect } from '@ia-qa/self-healing/capture';\n```\n\n**Cypress** — one import in `cypress/support/e2e.js`, nothing to wire in `setupNodeEvents`:\n\n```js\nimport '@ia-qa/self-healing/cypress';\n```\n\n**Selenium (Node)** — you call it yourself, since there is nothing to hook:\n\n```js\nconst { capture } = require('@ia-qa/self-healing/selenium');\nawait driver.get('https://app.example.com/checkout');\nawait capture(driver);          // inert unless IAQA_CAPTURE=1\n```\n\nAll three are **inert without `IAQA_CAPTURE=1`**, so they can live in the suite permanently,\nand they never fail your tests. Each worker writes its own shard to\n`.ia-qa/mapping/.capture/`; the next verb (`diff`, `run`, `baseline`) merges them into the same\npage contracts `map` produces — byte-compatible, named from `config.pages` so they pair with\nyour baseline.\n\n**One suite, several applications.** A page name is a filename, so two URLs sharing one name\nclaim to be the same page — and five products each with a `/login` are not. A URL on a host\nother than your `baseUrl` is therefore named `<host>--<path>`\n(`partner.example.com--login`), never `login`. Single-host suites are unaffected: the prefix\nonly appears where two applications would otherwise have overwritten each other's contract, and\n`www.`/apex and `http`/`https` count as the same host. To choose the name yourself, declare the\npage with its **absolute** URL:\n\n```json\n{ \"name\": \"partner-login\", \"url\": \"https://partner.example.com/login\" }\n```\n\n**Any other framework or language.** The shard format *is* the interface; the helpers above are\nsugar over it. Run the extractor in the page (`extract.js` in this package, also a copy-paste\nDevTools snippet on ia-qa.com) and drop a JSON file into `.ia-qa/mapping/.capture/`:\n\n```json\n{ \"pages\": [ { \"page\": \"checkout\", \"url\": \"/checkout\",\n              \"elements\": [ { \"role\": \"button\", \"name\": \"Pay\", \"selector\": \"button#pay\" } ] } ] }\n```\n\nNo import, no Node required. Coverage is whatever the suite visits — it is not a crawler, and a\npage it never reached is `stale` in the next diff, never a pass.\n\n### What the run records — `mapping/_exercised.json`\n\n`run` writes down which pages your suite actually loaded, alongside the ones it did not, the\nsuite's exit code and the commit. It is the only artifact here that answers *\"what does this\nsuite test?\"* — a contract only proves somebody configured a page, and `usage.json` only proves\nthe suite mentions a string. Small, deterministic, and safe to commit.\n\nIt is written **only** by the capture path. When `run` falls back to `map` (no `testCommand`),\npages are visited because they were declared, which is a different fact and must not be written\nto this file. And an empty capture writes **nothing at all**: no shard means the hook never\nfired — an uninstrumented suite, a crash before the first page — and recording `visited: []`\nthere would put \"this suite tests nothing\" on disk as an observation.\n\n`@ia-qa/qa-discovery`'s `coverage` verb reads it to state the gap between what your app has and\nwhat your suite reaches. Nothing here depends on that package.\n\n### Test depth\n\n`diff` and `run` also state how much of each contract your tests actually *name* — a selector\nliteral `ingest` inventoried, resolved through `_resolved/`, or an accessible name. **Named is\nnot asserted**: a test that clicks a button names it without checking anything, and nothing on\ndisk can tell the two apart, so the line never says \"tested\". Locators that name a *string*\nrather than an element (`getByText`, `cy.contains`, `getByTitle`, `getByAltText`) are counted\napart and credited neither way — the same reasoning that stops `fix` rewriting them. Silent\nwhen `ingest` has never run: that is *not measured*, not zero.\n\n## In CI\n\n`diff` exits `0` on PASS/FIX, `1` on BLOCK, `2` on bad input:\n\n```yaml\n# .github/workflows/selector-drift.yml\nname: Selector drift\non: [pull_request]\njobs:\n  drift:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: '20' }\n      - run: npm ci\n      - run: npx playwright install --with-deps chromium\n      - run: npm start &            # your app on its usual port\n      - run: npx ia-qa-heal ingest  # inventory what your tests use\n      - run: npx ia-qa-heal map     # re-capture into .ia-qa/mapping/\n      - run: npx ia-qa-heal diff    # 0 = PASS/FIX · 1 = BLOCK · 2 = bad input\n```\n\n`diff` with no arguments compares the committed `.ia-qa/baseline/` against what `map` just\ncaptured — which is why the baseline belongs in git. `--strict` fails on FIX too;\n`--report drift.html` attaches a branded report to the build.\n\n**Trend charts for free.** `diff --junit reports/drift.xml` writes the verdict as JUnit XML,\nwhich Jenkins, GitLab, CircleCI, Azure DevOps and the GitHub Actions reporters ingest natively,\nper-build history included. It describes your *contract*, not your suite, so every language\nproduces identically shaped XML. `healable` and BLOCK-class rows are failures typed by status,\n`renamed` passes with the label change in `system-out`, and a page that was not compared is\n**`skipped` — never a pass**.\n\n> ⚠️ Publish it under its **own file pattern**, separate from your suite's results. Merged into\n> one trend, both sets of numbers stop meaning anything.\n\n`--json` on `diff`, `run`, `audit`, `check` and `history` gives the same verdict as one\nparseable document. Locally, `ia-qa-heal history` charts what no single run can reconstruct —\nand holds out runs captured a *different* way rather than averaging them in.\n\n## Configuration\n\n`.ia-qa/config.json`, written by `init`. The minimum:\n\n```jsonc\n{\n  \"baseUrl\": \"https://staging.myapp.com\",\n  \"pages\": [\n    { \"name\": \"checkout\", \"url\": \"/checkout\" },\n    // a view with no URL of its own — reach it by naming the control to click\n    { \"name\": \"billing\", \"url\": \"/account\",\n      \"steps\": [ { \"click\": { \"role\": \"tab\", \"name\": \"Billing\" } } ] }\n  ],\n  \"testPaths\": [\"tests/\", \"pages/\"],\n  \"testCommand\": \"npx playwright test\"\n}\n```\n\n**Your password never goes in this file.** For a form login, `secrets` holds the *name* of an\nenv var (or an SSM parameter path) and `auth` points at it by name:\n\n```jsonc\n\"secrets\": { \"user\": { \"source\": \"env\", \"key\": \"APP_USER\" },\n             \"pass\": { \"source\": \"env\", \"key\": \"APP_PASS\" } },\n\"auth\": { \"loginUrl\": \"/login\", \"usernameSelector\": \"#email\", \"passwordSelector\": \"#password\",\n          \"submitSelector\": \"button[type=submit]\", \"usernameSecret\": \"user\", \"passwordSecret\": \"pass\",\n          \"successSelector\": \"nav.dashboard\" }\n```\n\nLoading the env var is your job — the CLI reads `process.env` and never opens a `.env` file, so\nrun it under `npx dotenv-cli --` or Node's `--env-file`. If a variable is missing it stops and\nnames it.\n\nEverything else is optional:\n\n| field | what it does |\n|---|---|\n| `session` | a Playwright `storageState` to reuse instead of logging in |\n| `locale` | accessible names are language-dependent — set it if your app is not the system default |\n| `volatile` | content that rotates by design (feed links, promos). Never enters a contract, so churn cannot read as drift — and `map` names any excluded element your tests still use, with `file:line` (see below) |\n| `nameMask` | labels carrying a counter or a clock (`\"Cart (*)\"`). Only the **label** stops being compared; role, selector and href still gate |\n| `layouts` / `autoLayout` | shared shell extracted to `_layouts/`, diffed once instead of per page |\n| `ai` | the BYOK add-on (see below) |\n\n`--config <dir>` (or `IAQA_CONFIG_DIR`) points at another `.ia-qa/` — one per portal in a\nmonorepo. Every field is documented in full in the tutorial\n(`TUTORIAL.md`, shipped in this package).\n\n### When a declaration hides something your tests use\n\n`volatile` is the most destructive thing you can declare: a matching element never enters a\ncontract at all, so **nothing will ever report it moving**. That is correct for a rotating\nfeed item and a permanent blind spot for anything else — and a count (`40 volatile excluded`)\ncannot tell the two apart.\n\nSo `map` crosses its own exclusions with the locator inventory `ingest` wrote:\n\n```\n⚠  1 element excluded by \"volatile\" is referenced by your tests:\n     button \"Save\"  —  excluded by `name:Save`, located by name\n       pom/MiniCartHeader.ts:14\n   A volatile element never enters a contract, so you will NEVER be told when one of\n   these moves, is renamed or disappears — the gate stays green and the test goes red.\n```\n\nIt is silent when nothing overlaps, and — deliberately — it does **not** claim your tests are\nsafe when there is no `usage.json`: with no inventory it says the overlap was *not measured*,\nwhich is a different sentence from *none*. Nothing is refused; the exclusion may be exactly\nwhat you wanted. The line exists so that it is a decision rather than a surprise.\n\n## The console — `ia-qa-heal ui`\n\n[![The ia-qa-heal console: a BLOCK verdict, the one element the tool refused to guess, the verbs as buttons, the history as charts](https://www.ia-qa.com/media/heal-ui-poster.png)](https://www.ia-qa.com/media/heal-ui.mp4)\n\n▶ **[Watch the console (32s)](https://www.ia-qa.com/media/heal-ui.mp4)** — buttons pressed,\nresults rendered, nothing written.\n\nA local web console for the rows where the tool gave up: highlighted crops of each candidate,\nthe `file:line` of every test that breaks, the verbs as plain-language buttons, and the history\nas charts. `--shortcut` writes a desktop launcher. Under each candidate of an `ambiguous` row,\n**✅ This one** applies your choice, re-runs the tests and answers *done, green* or *still red* —\nwith **↩️ Undo**, and never a commit: the pull request is yours. **Repair my test files** does\nthe same for the repairs the tool settled alone. Both follow the re-run live (elapsed time, the\ntests' last line — no made-up percentage), and a choice can show the browser when only the\nchanged specs re-run. A `lost` row has no button, on purpose, and says why.\n\nOpened in a folder that has no `.ia-qa/config.json`, it shows a **setup form** instead: the\napp's address, the pages (read from the sitemap, or typed), and how the app logs in — and it\nwrites the same file `init` would. It never overwrites a config, and no field asks for a\nsecret: the login answers are the *names* of environment variables or SSM parameters, and a\nbrowser login is handed over as the `ia-qa-heal login` command to run.\n\nIt is **loopback only** (`127.0.0.1`), every request carries a per-process token, the Host\nheader is pinned, and its buttons spawn this package's own CLI with a fixed argv — never a\nstring from the request. It **refuses to start under CI** (an interactive surface there is a\nhung build) and stops itself once the browser tab goes away.\n\n## Optional AI add-on — `ia-qa-heal-ai` (BYOK)\n\nDeterministic healing leaves `lost` and `ambiguous` rows behind on purpose. The add-on hands\n*only those* to your own LLM and **suggests** a match with a confidence score:\n\n```bash\nnpx ia-qa-heal-ai init                      # pick a provider (or a local Ollama/vLLM), name the env var holding your key\nnpx ia-qa-heal-ai suggest --dry-run         # what WOULD be sent, and to which host — calls nothing, reads no key\nnpx ia-qa-heal-ai suggest --dry-run --json  # …with the exact prompt of every question\nnpx ia-qa-heal-ai suggest                   # print suggestions\nnpx ia-qa-heal-ai suggest --apply           # apply, after you confirm — refuses without a TTY\n```\n\nIt never gates CI, and there is no `--ai` flag on `ia-qa-heal`: the verdict stays\ndeterministic by design. The key is a reference (`env`, `keychain` or `aws-ssm`), never a file\nvalue — an unset `env` variable is answered by `ia-qa-heal secret set` under the same name. A\nmodel on your own machine (`openai-compatible` + a `localhost` URL) needs no key at all.\n\nThe `--dry-run --json` prompts are built by the same function the real call uses, and a test\ncompares them byte for byte with what reaches the endpoint — which is what lets\n[`ia-qa-pal ui`](https://www.npmjs.com/package/@ia-qa/pal) show them before anything is sent.\nA call that fails (bad key, a Gemini 400, a timeout) is reported with the provider's own\nmessage and exits 2 — never as \"no confident match\", which would be a statement about your app.\n\n### Three modes — one field, the whole toolkit\n\n`.ia-qa/config.json` → `\"mode\"` says how far a model may go in this project. Heal, discovery and\npal all read it, from the CLI, the MCP and the pal console alike:\n\n| `mode` | what a model may do |\n|---|---|\n| `local` | **Nothing.** Every model call is refused — `ia-qa-heal-ai`, `suggest_heal`, `ia-qa-discover-ai`, `classify_app`, `plan_pages`, the pal console — even when an `ai` block exists. Dry runs still work: they send nothing. |\n| `hybrid` *(default)* | Suggest. A person decides; the deterministic verbs apply. |\n| `agent` | As hybrid, plus `ia-qa-heal-ai suggest --branch` (MCP: `suggest_heal` with `apply_to_branch: true`) commits the suggestions at or above `agent.minConfidence` (default 0.9) **onto a new git branch**, built in a separate worktree: your working tree and current branch never move, nothing is pushed or merged, tests are not re-run. You review the branch. |\n\nAn unknown value (`\"locl\"`) is refused rather than read as the default: nothing is sent until the\nfile says a mode it knows. No mode ever turns a model's reading into a CI gate.\n\n## What leaves your machine\n\nNothing, unless you enable the BYOK add-on above — and when it does, `suggest` says so\n**before** the first request: the host it is about to call, how many rows it is sending, and\nwhat those rows contain (the role, accessible name, context and container hint of each broken\nelement and of up to 15 same-role candidates). **Never** a CSS selector, a screenshot, page\nHTML or your test files. With a `localhost` endpoint the notice says so: nothing leaves at all.\nSame rule `check` follows for link probing and `login` for the session file: a flow that\nleaves the machine announces itself rather than leaving you to find it in a README.\n\n**MCP server: path sandboxing.** The CLI is driven by a human in their own shell; the MCP\nserver receives arguments from an agent — potentially from third-party content via prompt\ninjection. Every path parameter (`out_dir`, `before_path`, `after_path`, `test_paths`) is\nvalidated: the resolved absolute path must stay inside the project root.\n`IAQA_ALLOW_OUTSIDE_PATHS=1` lifts it. `browser_path` is logged to stderr for auditability.\n\n**MCP server: URL allowlist.** `map_app` verifies the target URL shares the origin of\n`config.json`'s `baseUrl`, so an agent cannot be steered toward an internal-only endpoint\nreachable from your machine. `IAQA_ALLOW_ANY_URL=1` for multi-origin apps.\n\n**Contracts are generated from live page content.** The `.md` and `.json` files contain text\nextracted from the DOM — accessible names, headings, link destinations. The Markdown renderer\nescapes pipes, newlines and backticks to prevent table breakage and code-block injection. If\nyou map an untrusted page (third-party widget, ad, XSS'd content), treat the output as\nuntrusted before feeding it to an LLM: the tool does not detect or strip instruction-like text.\n\n**`.ia-qa/session.json` is a secret** — live cookies. Gitignored on creation.\n\n## Don't have tests yet? — `@ia-qa/qa-discovery`\n\nEverything here assumes a suite already exists: `map` records what your tests locate, `diff`\ntells you when it moved. If you have been handed an app and no tests at all, that loop has\nnothing to hold on to yet.\n\n[`@ia-qa/qa-discovery`](https://www.npmjs.com/package/@ia-qa/qa-discovery) is the step before:\nit crawls an app you can reach and writes down what is in it — every page, the headings that\nsay what each is for, every input it takes, every API call the browser really made. No verdict,\nno LLM, same local-first promise as this package.\n\n```bash\nnpx -p @ia-qa/qa-discovery ia-qa-discover scan https://your-app.example.com --save --report\n```\n\n**It also answers a question this package cannot.** `run` records which pages your suite really\nwalked (`mapping/_exercised.json`); discovery knows which pages exist. Its `coverage` verb puts\nthe two together — *\"your suite visits 4 of the 27 pages this scan found, and the 23 it misses\ninclude the one that takes a password\"*. Neither side can state that alone, and no number is\nshown at all until a run has actually been watched.\n\n⚠️ **`scan` and `map` are not the same operation.** `map` writes a page *contract* — every\ninteractive element by role and accessible name, for repairing broken locators. `scan` writes a\n*surface* — pages, headings, inputs, API calls, for deciding what to test in the first place.\nNeither produces the other.\n\n**And `scan` is not `ia-qa-heal discover` either — this is the one people actually conflate.**\nBoth crawl, and the names hide the difference. `discover` answers *\"which routes are missing\nfrom my `config.pages`?\"* and hands you `{ name, url }` candidates. `scan` answers *\"what does\nthis app take as input?\"* and hands you what is behind each URL. Measured on the same four pages\nof ia-qa.com: `discover` returns 4 pairs; `scan` returns those pages plus 159 headings, 3 input\nfields with their captured labels, 9 observed API calls, and the finding that none of the three\ncan be located durably.\n\n**So if you only want to fill `config.pages`, use `discover` and install nothing.** That is what\nit is for, and it is already here.\n\nThey are built to hand off, though. `config.pages` has the same `{ name, url }` shape in both,\nand both resolve page names through the *same* function, so a page called `checkout` in one is\n`checkout` in the other — the artifacts line up 1:1. Sessions are interchangeable too, since\nboth consume a Playwright `storageState`: `ia-qa-heal map --session .ia-qa-discovery/session.json`.\n\nAnd in the other direction: this package knows what your suite **covers**, discovery knows what\n**exists**. The gap between the two is your real coverage — and it is computed rather than\ndescribed: run `ia-qa-discover scan` in a project that already has `.ia-qa/mapping/` and it ends\nby naming the pages that exist with no contract. It is not a verdict (a page may be out of scope\non purpose), and a contracted page the scan did not reach is reported as a limit of the scan,\nnever as a page that vanished.\n\n## Rather not chain the verbs yourself? — `@ia-qa/pal`\n\n`map`, `--deep`, `check`, `baseline` and `diff` each answer one question, and running them every\nday in the right order — with the traps above in mind — is the routine nobody has time for.\n[`@ia-qa/pal`](https://www.npmjs.com/package/@ia-qa/pal) does that round: it asks where your app\nlives, maps every page, explores the first batch in depth, checks, compares with the last tour,\nand reports what broke, what needs a person and what it did not see.\n\n```bash\nnpx -p @ia-qa/pal ia-qa-pal tour\n```\n\nIt computes nothing of its own: every verdict it prints comes from this package's functions, so\n`ia-qa-pal tour` and `ia-qa-heal diff` can never disagree about the same files.\n\n## Going deeper\n\n- **The tutorial** — the whole thing, step by step, no jargon:\n  [ia-qa.com/devtools/selector-drift/tutorial](https://www.ia-qa.com/devtools/selector-drift/tutorial),\n  or `TUTORIAL.md` inside this package.\n- **`ia-qa-heal skill`** — installs this package's agent instructions into\n  `<project>/.claude/skills/`, so an agent reads the contracts instead of opening a browser,\n  and knows the rules it must not break. Agents read skills from `.claude/skills/`, never from\n  `node_modules`, which is why this is a verb and not just a file in the tarball.\n- **`ia-qa-heal-mcp`** — the stdio MCP server, for agents that prefer tool calls to a shell.\n- **`SPEC-selector-resolution.md`** (shipped in the package) — how a Page Object's selectors are bound to the contract,\n  and why each refusal exists.\n- **Peer dependencies** — `playwright` is a peer: your project provides it, so two installs\n  cannot drift to different browser revisions. `@aws-sdk/client-ssm` is an *optional* peer,\n  needed only by the `aws-ssm` secret source (~5 MB, imported lazily; the CLI tells you if you\n  pick it without).\n- **Browser reuse** — it uses whatever Playwright browser is already on the machine before\n  asking you to download 150 MB. `IAQA_BROWSER_CHANNEL=chrome` (or `msedge`), or\n  `IAQA_BROWSER_PATH=/path/to/chrome`, to pin one.\n\nMIT.\n","readmeFilename":"README.md"}